diff --git a/.gitignore b/.gitignore
index 436f1cb5b2dd227e9ba792f7f805b13ff62f6d7e..065bdf13061cc953cc71207f720fbb8ec853e8a6 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,3 +1,3 @@
 /.idea
 *.pyc
-node_modules
\ No newline at end of file
+node_modules/*
\ No newline at end of file
diff --git a/css/all-ol-style.less b/css/all-ol-style.less
index 6e843b71f8cc1737de04d909bcaba32685a4d9db..d621234c217627b06a4bda01a66c82c3bd05b69b 100644
--- a/css/all-ol-style.less
+++ b/css/all-ol-style.less
@@ -1,3 +1,4 @@
 @import (inline) "ol.css";
 @import "legend";
 @import "ol-popup";
+
diff --git a/gulpfile.js b/gulpfile.js
index 5506d4a0ecb35065035f923dd3f8ff1e434d84ae..7ba74d7b4e28dabbed5cdc0886de7ebf7e12c62d 100644
--- a/gulpfile.js
+++ b/gulpfile.js
@@ -3,117 +3,126 @@ const gulp = require('gulp');
 const gulpHelpers = require('./lib/gulp-helpers');
 
 
-function _itsInventory(production) {
-    "use strict";
-    //processLessFile('./flaskApp/blueprints/its_inventory/static/css/itsMap.less', './flaskApp/blueprints/its_inventory/static/_build/itsMap.css');
-
-    return gulpHelpers.bundleEs2015Multiple([['./projects/itsMap.js', './build/itsMap.js']], production);
-}
-
-function _glrtoc(production) {
-    "use strict";
-
-    let filesArr = [
-        ['./projects/glrtoc/legendTest.js', './build/glrtoc/legendTest.js'],
-        ['./projects/glrtoc/main.js', './build/glrtoc/main.js']
-    ];
-
-    return gulpHelpers.bundleEs2015Multiple(filesArr, production);
-}
-
-
-function _tsmo(production) {
-    "use strict";
-    let filesArr = [
-        ['./projects/tsmo/legend-test.js', './build/tsmo/legend-test.js'],
-        ['./projects/tsmo/slider-test.js', './build/tsmo/slider-test.js'],
-        ['./projects/tsmo/main.js', './build/tsmo/main.js'],
-        ['./projects/tsmo/main-report.js', './build/tsmo/main-report.js']
-    ];
-
-    return gulpHelpers.bundleEs2015Multiple(filesArr, production);
-}
-
-
-function _npmrds(doMinify) {
-    "use strict";
-
-    return processJsFile('./flaskApp/blueprints/npmrds/static/js/heatmap/main.js', './flaskApp/blueprints/npmrds/static/_build/heatmap-main.js', doMinify);
-}
+// function _itsInventory(production) {
+//     "use strict";
+//     //processLessFile('./flaskApp/blueprints/its_inventory/static/css/itsMap.less', './flaskApp/blueprints/its_inventory/static/_build/itsMap.css');
+//
+//     return gulpHelpers.bundleEs2015Multiple([['./projects/itsMap.js', './build/itsMap.js']], production);
+// }
+
+// function _glrtoc(production) {
+//     "use strict";
+//
+//     let filesArr = [
+//         ['./projects/glrtoc/legendTest.js', './build/glrtoc/legendTest.js'],
+//         ['./projects/glrtoc/main.js', './build/glrtoc/main.js']
+//     ];
+//
+//     return gulpHelpers.bundleEs2015Multiple(filesArr, production);
+// }
+//
+//
+// function _tsmo(production) {
+//     "use strict";
+//     let filesArr = [
+//         ['./projects/tsmo/legend-test.js', './build/tsmo/legend-test.js'],
+//         ['./projects/tsmo/slider-test.js', './build/tsmo/slider-test.js'],
+//         ['./projects/tsmo/main.js', './build/tsmo/main.js'],
+//         ['./projects/tsmo/main-report.js', './build/tsmo/main-report.js']
+//     ];
+//
+//     return gulpHelpers.bundleEs2015Multiple(filesArr, production);
+// }
+//
+//
+// function _npmrds(doMinify) {
+//     "use strict";
+//
+//     return processJsFile('./flaskApp/blueprints/npmrds/static/js/heatmap/main.js', './flaskApp/blueprints/npmrds/static/_build/heatmap-main.js', doMinify);
+// }
 
 gulp.task('build-tests', function () {
     "use strict";
+    
+        let filesArr = [
+        ['./test/legend-test.js', './test-build/legend-test.js']
+        // ['./projects/tsmo/slider-test.js', './build/tsmo/slider-test.js'],
+        // ['./projects/tsmo/main.js', './build/tsmo/main.js'],
+        // ['./projects/tsmo/main-report.js', './build/tsmo/main-report.js']
+    ];
 
-    return gulpHelpers.bundleEs2015(null, './test/test-bundle.js');
-});
-
-gulp.task('itsInventory', () => {
-    return _itsInventory(false);
-});
-
-gulp.task('glrtoc', () => {
-    "use strict";
-
-    return _glrtoc(false);
-});
-
-
-gulp.task('tsmo', () => {
-    "use strict";
-
-    return _tsmo(false);
-});
-
-function _ssa(production) {
-    "use strict";
-    gulpHelpers.processLessFile('./flaskApp/blueprints/testing/static/css/ssa-corridor.less', './flaskApp/blueprints/testing/static/_build/ssa-corridor.css');
-
-    return gulpHelpers.bundleEs2015('./flaskApp/blueprints/testing/static/js/ssa-main.js', './flaskApp/blueprints/testing/static/_build/ssa-main.js', production);
-}
-
-gulp.task('ssa', () => {
-    "use strict";
-
-    return _ssa(false);
-});
-
-
-gulp.task('peerGroup', () => {
-    "use strict";
-
-    return processJsFile('./flaskApp/blueprints/peerGroup/static/js/main.js', './flaskApp/blueprints/peerGroup/static/_build/main.js', false);
-});
-
-
-function _buildTestApps() {
-    "use strict";
-    //processJsFile('./flaskApp/blueprints/testing/static/js/test-custom-build.js', './flaskApp/blueprints/testing/static/_build/test-custom-build.js', false);
-
-    return processJsFile('./flaskApp/blueprints/testing/static/js/test-corridor-layer.js', './flaskApp/blueprints/testing/static/_build/test-corridor-layer.js', false);
-
-}
-
-gulp.task('buildTestApps', () => {
-    "use strict";
-
-    return _buildTestApps(false);
-});
-
-
-gulp.task('test_test', () => {
-    "use strict";
-
-    return _buildTestApps(false);
-});
-
-gulp.task('test_build', () => {
-    "use strict";
-
-    return processJsFile('./src/test_import.js', './build/test_import.js', false);
-});
-
-gulp.task('build-prod', () => {
-    _glrtoc(true);
-    _tsmo(true);
-    _ssa(true);
+    gulpHelpers.bundleEs2015Multiple(filesArr, false);
+    
+    return gulpHelpers.bundleEs2015('./test/**/*.js', './test-build/test-bundle.js');
 });
+//
+// gulp.task('itsInventory', () => {
+//     return _itsInventory(false);
+// });
+//
+// gulp.task('glrtoc', () => {
+//     "use strict";
+//
+//     return _glrtoc(false);
+// });
+//
+//
+// gulp.task('tsmo', () => {
+//     "use strict";
+//
+//     return _tsmo(false);
+// });
+//
+// function _ssa(production) {
+//     "use strict";
+//     gulpHelpers.processLessFile('./flaskApp/blueprints/testing/static/css/ssa-corridor.less', './flaskApp/blueprints/testing/static/_build/ssa-corridor.css');
+//
+//     return gulpHelpers.bundleEs2015('./flaskApp/blueprints/testing/static/js/ssa-main.js', './flaskApp/blueprints/testing/static/_build/ssa-main.js', production);
+// }
+//
+// gulp.task('ssa', () => {
+//     "use strict";
+//
+//     return _ssa(false);
+// });
+//
+//
+// gulp.task('peerGroup', () => {
+//     "use strict";
+//
+//     return processJsFile('./flaskApp/blueprints/peerGroup/static/js/main.js', './flaskApp/blueprints/peerGroup/static/_build/main.js', false);
+// });
+//
+//
+// function _buildTestApps() {
+//     "use strict";
+//     //processJsFile('./flaskApp/blueprints/testing/static/js/test-custom-build.js', './flaskApp/blueprints/testing/static/_build/test-custom-build.js', false);
+//
+//     return processJsFile('./flaskApp/blueprints/testing/static/js/test-corridor-layer.js', './flaskApp/blueprints/testing/static/_build/test-corridor-layer.js', false);
+//
+// }
+//
+// gulp.task('buildTestApps', () => {
+//     "use strict";
+//
+//     return _buildTestApps(false);
+// });
+//
+//
+// gulp.task('test_test', () => {
+//     "use strict";
+//
+//     return _buildTestApps(false);
+// });
+//
+// gulp.task('test_build', () => {
+//     "use strict";
+//
+//     return processJsFile('./src/test_import.js', './build/test_import.js', false);
+// });
+//
+// gulp.task('build-prod', () => {
+//     _glrtoc(true);
+//     _tsmo(true);
+//     _ssa(true);
+// });
diff --git a/lib/collections/ItsLayerCollection.js b/lib/collections/ItsLayerCollection.js
index 1f5805bd5cf1147d3547db4203dbb638f3585401..981d58fff5706742ff62f5552661a19b43a27665 100644
--- a/lib/collections/ItsLayerCollection.js
+++ b/lib/collections/ItsLayerCollection.js
@@ -53,29 +53,7 @@ var itsConfig = [{ name: 'Camera', itsType: 'cctv', minZoom: 11, itsIcon: 'cctv.
         iconArray: [['detector', 'Detector', 'loopdetector.png'], ['long', 'Long', 'loopdetectorlong.png'], ['zone', 'Zone', 'loopdetectorzone.png']]
     },
     onDemand: true
-}, { name: 'Microwave', itsType: 'microwave', minZoom: 14, itsIcon: 'microwave.png', visible: false }, { name: 'Pull Box', itsType: 'pull', minZoom: 14, itsIcon: 'pullbox.png', visible: false, onDemand: true }, { name: 'RWIS', itsType: 'rwis', minZoom: 7, itsIcon: 'rwis.png', visible: false }, { name: 'Ramp Gates', itsType: 'gate', minZoom: 10, itsIcon: 'rampgate.png', visible: false }, { name: 'Ramp Meter', itsType: 'meter', minZoom: 10, itsIcon: 'rampmeter.png', visible: false }, { name: 'Signal', itsType: 'signal', minZoom: 13, itsIcon: 'signal.png', visible: false, onDemand: true }, { name: 'Tower', itsType: 'tower', minZoom: 10, itsIcon: 'tower.png', visible: false },
-//{
-//    name: 'Trench',
-//    itsType: 'trench',
-//    onDemand: true,
-//    visible: false,
-//    onDemandDelay: 500,
-//    minZoom: 15,
-//    itsLineConfig: {
-//        prop: 'installType',
-//        //defaultName: 'Other',
-//        //defaultWidth: 7,
-//        defaultColor: colors.hexAlphaToRgbOrRgba('#747474', 0.8),
-//        lineArray: [
-//            ['asc', 'Aerial Strand', colors.hexAlphaToRgbOrRgba('#FF0000', 0.7)],
-//            ['udbc', 'Directional Bore', colors.hexAlphaToRgbOrRgba('#0509FF', 0.7)],
-//            ['utc', 'Underground', colors.hexAlphaToRgbOrRgba('#FF00ED', 0.7)],
-//            ['utd', 'Underground - Design', colors.hexAlphaToRgbOrRgba('#A50095', 0.7)]
-//        ]
-//    }
-//},
-
-{
+}, { name: 'Microwave', itsType: 'microwave', minZoom: 14, itsIcon: 'microwave.png', visible: false }, { name: 'Pull Box', itsType: 'pull', minZoom: 14, itsIcon: 'pullbox.png', visible: false, onDemand: true }, { name: 'RWIS', itsType: 'rwis', minZoom: 7, itsIcon: 'rwis.png', visible: false }, { name: 'Ramp Gates', itsType: 'gate', minZoom: 10, itsIcon: 'rampgate.png', visible: false }, { name: 'Ramp Meter', itsType: 'meter', minZoom: 10, itsIcon: 'rampmeter.png', visible: false }, { name: 'Signal', itsType: 'signal', minZoom: 13, itsIcon: 'signal.png', visible: false, onDemand: true }, { name: 'Tower', itsType: 'tower', minZoom: 10, itsIcon: 'tower.png', visible: false }, {
     name: 'Trench',
     itsType: 'trench',
     onDemand: true,
@@ -90,22 +68,7 @@ var itsConfig = [{ name: 'Camera', itsType: 'cctv', minZoom: 11, itsIcon: 'cctv.
         defaultColor: colors.hexAlphaToRgbOrRgba('#747474', 0.8),
         lineArray: [['WisDOT', 'WisDOT', colors.hexAlphaToRgbOrRgba('#FF032F', 0.7)], ['WIN', 'WIN', colors.hexAlphaToRgbOrRgba('#FFC632', 0.7)], ['USXchange', 'USXchange', colors.hexAlphaToRgbOrRgba('#2DFF46', 0.7)], ['AT&T', 'AT&T', colors.hexAlphaToRgbOrRgba('#ff2be5', 0.7)], ['Touch America', 'Touch America', colors.hexAlphaToRgbOrRgba('#52f3ff', 0.7)], ['Qwest', 'Qwest', colors.hexAlphaToRgbOrRgba('#9278ff', 0.7)], ['McLeodUSA', 'McLeodUSA', colors.hexAlphaToRgbOrRgba('#2926FF', 0.7)], ['CINC', 'CINC', colors.hexAlphaToRgbOrRgba('#CB00FF', 0.7)], ['City of Madison', 'Madison', colors.hexAlphaToRgbOrRgba('#000380', 0.7)]]
     }
-}
-
-//    {
-//    name: 'Trench',
-//    itsType: 'trench',
-//    onDemand: true,
-//    visible: false,
-//    onDemandDelay: 500,
-//    minZoom: 15,
-//    itsLineStyle: {
-//        color: '#FF0000',
-//        width: 7
-//    }
-//}
-
-];
+}];
 
 var ItsLayerCollection = (function () {
 
diff --git a/lib/gulp-helpers.js b/lib/gulp-helpers.js
index 9ff51d378e24cdff4424c6c2eb89e39236d82217..425b8e6a55625309249cec697ce1a58a675b7ebc 100644
--- a/lib/gulp-helpers.js
+++ b/lib/gulp-helpers.js
@@ -51,7 +51,7 @@ function _processOutDir(outputFile) {
 
 /**
  *
- * @param {string|null} inputFile - input file set to null to bundle everything in 'test' directory
+ * @param {string} inputFile - input file set to null to bundle everything in 'test' directory
  * @param {dirNameFilePath|string} outFile - output file as string or path object
  * @param {boolean} [production=false] if production, minify and don't watch
  * @returns {*} the stream
@@ -66,8 +66,8 @@ function bundleEs2015(inputFile, outFile, production) {
 
     production = typeof production == 'boolean' ? production : false;
 
-    if (inputFile == null) {
-        inputFile = glob.sync('./spec/**/*.js');
+    if (inputFile.indexOf('*') > -1) {
+        inputFile = glob.sync(inputFile);
     }
 
     var bundler = browserify({
diff --git a/lib/layers/LayerBaseVector.js b/lib/layers/LayerBaseVector.js
index 98e79c4cfe42a3cb518924414808086858024c33..e1f95dd1f3279ac65a628f60ef1922a4f38f69c5 100644
--- a/lib/layers/LayerBaseVector.js
+++ b/lib/layers/LayerBaseVector.js
@@ -6,10 +6,10 @@ Object.defineProperty(exports, "__esModule", {
 
 var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();
 
-var _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if ("value" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };
-
 var _set = function set(object, property, value, receiver) { var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent !== null) { set(parent, property, value, receiver); } } else if ("value" in desc && desc.writable) { desc.value = value; } else { var setter = desc.set; if (setter !== undefined) { setter.call(receiver, value); } } return value; };
 
+var _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if ("value" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };
+
 var _jquery = require('../jquery');
 
 var _jquery2 = _interopRequireDefault(_jquery);
@@ -128,6 +128,11 @@ var LayerBaseVector = (function (_LayerBase) {
         }
 
         _this._source = new _ol2.default.source.Vector();
+
+        /**
+         *
+         * @type {ol.layer.Vector|ol.layer.Base}
+         */
         _this.olLayer = new _ol2.default.layer.Vector({
             source: _this._source,
             visible: _this.visible,
@@ -278,7 +283,7 @@ var LayerBaseVector = (function (_LayerBase) {
 
         /**
          * get the map move object
-         * @type {MapMove|*}
+         * @type {MapMoveCls|*}
          */
 
     }, {
@@ -298,14 +303,23 @@ var LayerBaseVector = (function (_LayerBase) {
             return this._mapMoveParams;
         }
 
+        /**
+        * Get the layer visibility
+        * @type {boolean}
+        */
+
+    }, {
+        key: 'visible',
+        get: function get() {
+            return _get(Object.getPrototypeOf(LayerBaseVector.prototype), 'visible', this);
+        }
+
         /**
          * Set the layer visibility
          * @type {boolean}
          * @override
          */
-
-    }, {
-        key: 'visible',
+        ,
         set: function set(visibility) {
             _set(Object.getPrototypeOf(LayerBaseVector.prototype), 'visible', visibility, this);
 
diff --git a/lib/ol/ol-build.js b/lib/ol/ol-build.js
index 73ed3c780e2b6c0fa43bfc55d8442d840d193be3..e1f47570c7f1efdb3cd1c95f99215a8e926d0bda 100644
--- a/lib/ol/ol-build.js
+++ b/lib/ol/ol-build.js
@@ -14,11 +14,11 @@
 function ba(b){var c=typeof b;if("object"==c)if(b){if(b instanceof Array)return"array";if(b instanceof Object)return c;var d=Object.prototype.toString.call(b);if("[object Window]"==d)return"object";if("[object Array]"==d||"number"==typeof b.length&&"undefined"!=typeof b.splice&&"undefined"!=typeof b.propertyIsEnumerable&&!b.propertyIsEnumerable("splice"))return"array";if("[object Function]"==d||"undefined"!=typeof b.call&&"undefined"!=typeof b.propertyIsEnumerable&&!b.propertyIsEnumerable("call"))return"function"}else return"null";
 else if("function"==c&&"undefined"==typeof b.call)return"object";return c}function ca(b){var c=ba(b);return"array"==c||"object"==c&&"number"==typeof b.length}function da(b){return"string"==typeof b}function ea(b){return"number"==typeof b}function ga(b){return"function"==ba(b)}function ha(b){var c=typeof b;return"object"==c&&null!=b||"function"==c}function I(b){return b[ia]||(b[ia]=++ja)}var ia="closure_uid_"+(1E9*Math.random()>>>0),ja=0;function ka(b,c,d){return b.call.apply(b.bind,arguments)}
 function la(b,c,d){if(!b)throw Error();if(2<arguments.length){var e=Array.prototype.slice.call(arguments,2);return function(){var d=Array.prototype.slice.call(arguments);Array.prototype.unshift.apply(d,e);return b.apply(c,d)}}return function(){return b.apply(c,arguments)}}function ma(b,c,d){ma=Function.prototype.bind&&-1!=Function.prototype.bind.toString().indexOf("native code")?ka:la;return ma.apply(null,arguments)}
-function na(b,c){var d=Array.prototype.slice.call(arguments,1);return function(){var c=d.slice();c.push.apply(c,arguments);return b.apply(this,c)}}function M(b,c){function d(){}d.prototype=c.prototype;b.$=c.prototype;b.prototype=new d;b.prototype.constructor=b;b.Ve=function(b,d,g){for(var h=Array(arguments.length-2),k=2;k<arguments.length;k++)h[k-2]=arguments[k];return c.prototype[d].apply(b,h)}};var oa;function pa(){};var ra;var sa=String.prototype.trim?function(b){return b.trim()}:function(b){return b.replace(/^[\s\xa0]+|[\s\xa0]+$/g,"")};function ta(b){if(!ua.test(b))return b;-1!=b.indexOf("&")&&(b=b.replace(va,"&amp;"));-1!=b.indexOf("<")&&(b=b.replace(wa,"&lt;"));-1!=b.indexOf(">")&&(b=b.replace(xa,"&gt;"));-1!=b.indexOf('"')&&(b=b.replace(ya,"&quot;"));-1!=b.indexOf("'")&&(b=b.replace(za,"&#39;"));-1!=b.indexOf("\x00")&&(b=b.replace(Aa,"&#0;"));return b}var va=/&/g,wa=/</g,xa=/>/g,ya=/"/g,za=/'/g,Aa=/\x00/g,ua=/[\x00&<>"']/;
+function na(b,c){var d=Array.prototype.slice.call(arguments,1);return function(){var c=d.slice();c.push.apply(c,arguments);return b.apply(this,c)}}function M(b,c){function d(){}d.prototype=c.prototype;b.X=c.prototype;b.prototype=new d;b.prototype.constructor=b;b.We=function(b,d,g){for(var h=Array(arguments.length-2),k=2;k<arguments.length;k++)h[k-2]=arguments[k];return c.prototype[d].apply(b,h)}};var oa;function pa(){};var qa;var sa=String.prototype.trim?function(b){return b.trim()}:function(b){return b.replace(/^[\s\xa0]+|[\s\xa0]+$/g,"")};function ta(b){if(!ua.test(b))return b;-1!=b.indexOf("&")&&(b=b.replace(va,"&amp;"));-1!=b.indexOf("<")&&(b=b.replace(wa,"&lt;"));-1!=b.indexOf(">")&&(b=b.replace(xa,"&gt;"));-1!=b.indexOf('"')&&(b=b.replace(ya,"&quot;"));-1!=b.indexOf("'")&&(b=b.replace(za,"&#39;"));-1!=b.indexOf("\x00")&&(b=b.replace(Aa,"&#0;"));return b}var va=/&/g,wa=/</g,xa=/>/g,ya=/"/g,za=/'/g,Aa=/\x00/g,ua=/[\x00&<>"']/;
 function Ba(b,c){return b<c?-1:b>c?1:0};function Ca(b,c,d){return Math.min(Math.max(b,c),d)}var Da=function(){var b;"cosh"in Math?b=Math.cosh:b=function(b){b=Math.exp(b);return(b+1/b)/2};return b}();function Ea(b,c){var d=b%c;return 0>d*c?d+c:d};function Fa(b){return function(c){if(c)return[Ca(c[0],b[0],b[2]),Ca(c[1],b[1],b[3])]}}function Ga(b){return b};function Ha(b,c){return b>c?1:b<c?-1:0}function Ia(b,c,d){var e=b.length;if(b[0]<=c)return 0;if(!(c<=b[e-1]))if(0<d)for(d=1;d<e;++d){if(b[d]<c)return d-1}else if(0>d)for(d=1;d<e;++d){if(b[d]<=c)return d}else for(d=1;d<e;++d){if(b[d]==c)return d;if(b[d]<c)return b[d-1]-c<c-b[d]?d-1:d}return e-1}function Ja(b){return b.reduce(function(b,d){return Array.isArray(d)?b.concat(Ja(d)):b.concat(d)},[])}function Ka(b,c){var d,e=ca(c)?c:[c],f=e.length;for(d=0;d<f;d++)b[b.length]=e[d]}
 function La(b,c){var d=b.indexOf(c),e=-1<d;e&&b.splice(d,1);return e}function Ma(b,c){var d=b.length;if(d!==c.length)return!1;for(var e=0;e<d;e++)if(b[e]!==c[e])return!1;return!0}function Na(b){var c=Oa,d=b.length,e=Array(b.length),f;for(f=0;f<d;f++)e[f]={index:f,value:b[f]};e.sort(function(b,d){return c(b.value,d.value)||b.index-d.index});for(f=0;f<b.length;f++)b[f]=e[f].value};function Pa(b){return function(c,d,e){if(void 0!==c)return c=Ia(b,c,e),c=Ca(c+d,0,b.length-1),b[c]}}function Qa(b,c,d){return function(e,f,g){if(void 0!==e)return e=Math.max(Math.floor(Math.log(c/e)/Math.log(b)+(0<g?0:0>g?1:.5))+f,0),void 0!==d&&(e=Math.min(e,d)),c/Math.pow(b,e)}};function Ra(b){if(void 0!==b)return 0}function Sa(b,c){if(void 0!==b)return b+c}function Ta(b){var c=2*Math.PI/b;return function(b,e){if(void 0!==b)return b=Math.floor((b+e)/c+.5)*c}}function Ua(){var b=5*Math.PI/180;return function(c,d){if(void 0!==c)return Math.abs(c+d)<=b?0:c+d}};function Va(b,c,d){this.center=b;this.resolution=c;this.rotation=d};var Wa="function"===typeof Object.assign?Object.assign:function(b,c){if(void 0===b||null===b)throw new TypeError("Cannot convert undefined or null to object");for(var d=Object(b),e=1,f=arguments.length;e<f;++e){var g=arguments[e];if(void 0!==g&&null!==g)for(var h in g)g.hasOwnProperty(h)&&(d[h]=g[h])}return d};function Ya(b){for(var c in b)delete b[c]}function Za(b){var c=[],d;for(d in b)c.push(b[d]);return c}function $a(b){for(var c in b)return!1;return!c};var ab="olm_"+(1E4*Math.random()|0);function bb(b){function c(c){var e=b.listener,f=b.hc||b.target;b.kc&&N(b);return e.call(f,c)}return b.ic=c}function cb(b,c,d,e){for(var f,g=0,h=b.length;g<h;++g)if(f=b[g],f.listener===c&&f.hc===d)return e&&(f.deleteIndex=g),f}function db(b,c){var d=b[ab];return d?d[c]:void 0}function eb(b){var c=b[ab];c||(c=b[ab]={});return c}
 function fb(b,c){var d=db(b,c);if(d){for(var e=0,f=d.length;e<f;++e)b.removeEventListener(c,d[e].ic),Ya(d[e]);d.length=0;if(d=b[ab])delete d[c],0===Object.keys(d).length&&delete b[ab]}}function Q(b,c,d,e,f){var g=eb(b),h=g[c];h||(h=g[c]=[]);(g=cb(h,d,e,!1))?f||(g.kc=!1):(g={hc:e,kc:!!f,listener:d,target:b,type:c},b.addEventListener(c,bb(g)),h.push(g));return g}function gb(b,c,d,e){(b=db(b,c))&&(d=cb(b,d,e,!0))&&N(d)}
-function N(b){if(b&&b.target){b.target.removeEventListener(b.type,b.ic);var c=db(b.target,b.type);if(c){var d="deleteIndex"in b?b.deleteIndex:c.indexOf(b);-1!==d&&c.splice(d,1);0===c.length&&fb(b.target,b.type)}Ya(b)}}function hb(b){var c=eb(b),d;for(d in c)fb(b,d)};function ib(){}ib.prototype.ja=!1;function jb(b){b.ja||(b.ja=!0,b.J())}ib.prototype.J=pa;function R(b,c){this.type=b;this.target=c||null}R.prototype.preventDefault=R.prototype.stopPropagation=function(){this.we=!0};function kb(b){b.stopPropagation()}function lb(b){b.preventDefault()};function mb(){this.H={};this.A={}}M(mb,ib);mb.prototype.addEventListener=function(b,c){var d=this.A[b];d||(d=this.A[b]=[]);-1===d.indexOf(c)&&d.push(c)};function S(b,c){var d="string"===typeof c?new R(c):c,e=d.type;d.target=b;var f=b.A[e],g;if(f){e in b.H||(b.H[e]=0);for(var h=0,k=f.length;h<k;++h)if(!1===f[h].call(b,d)||d.we){g=!1;break}d=b.H[e];for(delete b.H[e];d--;)b.removeEventListener(e,pa);return g}}mb.prototype.J=function(){hb(this)};
+function N(b){if(b&&b.target){b.target.removeEventListener(b.type,b.ic);var c=db(b.target,b.type);if(c){var d="deleteIndex"in b?b.deleteIndex:c.indexOf(b);-1!==d&&c.splice(d,1);0===c.length&&fb(b.target,b.type)}Ya(b)}}function hb(b){var c=eb(b),d;for(d in c)fb(b,d)};function ib(){}ib.prototype.ja=!1;function jb(b){b.ja||(b.ja=!0,b.J())}ib.prototype.J=pa;function R(b,c){this.type=b;this.target=c||null}R.prototype.preventDefault=R.prototype.stopPropagation=function(){this.xe=!0};function kb(b){b.stopPropagation()}function lb(b){b.preventDefault()};function mb(){this.H={};this.A={}}M(mb,ib);mb.prototype.addEventListener=function(b,c){var d=this.A[b];d||(d=this.A[b]=[]);-1===d.indexOf(c)&&d.push(c)};function S(b,c){var d="string"===typeof c?new R(c):c,e=d.type;d.target=b;var f=b.A[e],g;if(f){e in b.H||(b.H[e]=0);for(var h=0,k=f.length;h<k;++h)if(!1===f[h].call(b,d)||d.xe){g=!1;break}d=b.H[e];for(delete b.H[e];d--;)b.removeEventListener(e,pa);return g}}mb.prototype.J=function(){hb(this)};
 function nb(b,c){return c?c in b.A:0<Object.keys(b.A).length}mb.prototype.removeEventListener=function(b,c){var d=this.A[b];if(d){var e=d.indexOf(c);b in this.H?(d[e]=pa,++this.H[b]):(d.splice(e,1),0===d.length&&delete this.A[b])}};function ob(){mb.call(this);this.f=0}M(ob,mb);ob.prototype.v=function(){++this.f;S(this,"change")};ob.prototype.ba=function(b,c,d){if(Array.isArray(b)){for(var e=b.length,f=Array(e),g=0;g<e;++g)f[g]=Q(this,b[g],c,d);return f}return Q(this,b,c,d)};function pb(b,c,d){R.call(this,b);this.key=c;this.oldValue=d}M(pb,R);function T(b){ob.call(this);I(this);this.K={};void 0!==b&&this.l(b)}M(T,ob);var qb={};function rb(b){return qb.hasOwnProperty(b)?qb[b]:qb[b]="change:"+b}T.prototype.get=function(b){var c;this.K.hasOwnProperty(b)&&(c=this.K[b]);return c};T.prototype.za=function(){return Wa({},this.K)};T.prototype.set=function(b,c,d){d?this.K[b]=c:(d=this.K[b],this.K[b]=c,d!==c&&(c=rb(b),S(this,new pb(c,b,d)),S(this,new pb("propertychange",b,d))))};
 T.prototype.l=function(b,c){for(var d in b)this.set(d,b[d],c)};function sb(b,c,d){void 0===d&&(d=[0,0]);d[0]=b[0]*c+.5|0;d[1]=b[1]*c+.5|0;return d}function tb(b,c){if(Array.isArray(b))return b;void 0===c?c=[b,b]:(c[0]=b,c[1]=b);return c};function ub(b,c){b[0]+=c[0];b[1]+=c[1]}function vb(b,c){var d=Math.cos(c),e=Math.sin(c),f=b[1]*d+b[0]*e;b[0]=b[0]*d-b[1]*e;b[1]=f};function wb(b){this.length=b.length||b;for(var c=0;c<this.length;c++)this[c]=b[c]||0}wb.prototype.BYTES_PER_ELEMENT=4;wb.prototype.set=function(b,c){c=c||0;for(var d=0;d<b.length&&c+d<this.length;d++)this[c+d]=b[d]};wb.prototype.toString=Array.prototype.join;"undefined"==typeof Float32Array&&(wb.BYTES_PER_ELEMENT=4,wb.prototype.BYTES_PER_ELEMENT=wb.prototype.BYTES_PER_ELEMENT,wb.prototype.set=wb.prototype.set,wb.prototype.toString=wb.prototype.toString,F("Float32Array",wb,void 0));function xb(b){this.length=b.length||b;for(var c=0;c<this.length;c++)this[c]=b[c]||0}xb.prototype.BYTES_PER_ELEMENT=8;xb.prototype.set=function(b,c){c=c||0;for(var d=0;d<b.length&&c+d<this.length;d++)this[c+d]=b[d]};xb.prototype.toString=Array.prototype.join;if("undefined"==typeof Float64Array){try{xb.BYTES_PER_ELEMENT=8}catch(b){}xb.prototype.BYTES_PER_ELEMENT=xb.prototype.BYTES_PER_ELEMENT;xb.prototype.set=xb.prototype.set;xb.prototype.toString=xb.prototype.toString;F("Float64Array",xb,void 0)};function yb(b,c,d,e,f){b[0]=c;b[1]=d;b[2]=e;b[3]=f};function zb(){var b=Array(16);Ab(b,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);return b}function Bb(){var b=Array(16);Ab(b,1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1);return b}function Ab(b,c,d,e,f,g,h,k,l,m,n,q,r,u,w,y,z){b[0]=c;b[1]=d;b[2]=e;b[3]=f;b[4]=g;b[5]=h;b[6]=k;b[7]=l;b[8]=m;b[9]=n;b[10]=q;b[11]=r;b[12]=u;b[13]=w;b[14]=y;b[15]=z}
 function Cb(b,c){b[0]=c[0];b[1]=c[1];b[2]=c[2];b[3]=c[3];b[4]=c[4];b[5]=c[5];b[6]=c[6];b[7]=c[7];b[8]=c[8];b[9]=c[9];b[10]=c[10];b[11]=c[11];b[12]=c[12];b[13]=c[13];b[14]=c[14];b[15]=c[15]}function Db(b){b[0]=1;b[1]=0;b[2]=0;b[3]=0;b[4]=0;b[5]=1;b[6]=0;b[7]=0;b[8]=0;b[9]=0;b[10]=1;b[11]=0;b[12]=0;b[13]=0;b[14]=0;b[15]=1}
@@ -40,21 +40,21 @@ function ic(b){this.qa=b.code;this.b=b.units;this.h=void 0!==b.extent?b.extent:n
 else{h=e(g,d);b=h.forward;h=h.inverse;var c=lc(c),k=lc(this);nc(c,k,oc(b));nc(k,c,oc(h))}}}}ic.prototype.l=function(){return this.qa};ic.prototype.C=function(){return this.h};function pc(b){return b.g||hc[b.b]}ic.prototype.j=function(b,c){if("degrees"==this.b)return b;var d=qc(this,lc("EPSG:4326")),e=[c[0]-b/2,c[1],c[0]+b/2,c[1],c[0],c[1]-b/2,c[0],c[1]+b/2],e=d(e,e,2),d=(fc(e.slice(0,2),e.slice(2,4))+fc(e.slice(4,6),e.slice(6,8)))/2,e=pc(this);void 0!==e&&(d/=e);return d};
 ic.prototype.getPointResolution=function(b,c){return this.i(b,c)};var jc={},rc={},kc=null;function mc(b){sc(b);b.forEach(function(c){b.forEach(function(b){c!==b&&nc(c,b,tc)})})}function uc(b){jc[b.qa]=b;nc(b,b,tc)}function sc(b){var c=[];b.forEach(function(b){c.push(uc(b))})}function vc(b){return b?"string"===typeof b?lc(b):b:lc("EPSG:3857")}function nc(b,c,d){b=b.qa;c=c.qa;b in rc||(rc[b]={});rc[b][c]=d}
 function oc(b){return function(c,d,e){var f=c.length;e=void 0!==e?e:2;d=void 0!==d?d:Array(f);var g,h;for(h=0;h<f;h+=e)for(g=b([c[h],c[h+1]]),d[h]=g[0],d[h+1]=g[1],g=e-1;2<=g;--g)d[h+g]=c[h+g];return d}}function lc(b){var c;if(b instanceof ic)c=b;else if("string"===typeof b){c=jc[b];var d=kc||x.proj4;void 0===c&&"function"==typeof d&&void 0!==d.defs(b)&&(c=new ic({code:b}),uc(c))}else c=null;return c}function wc(b,c){if(b===c)return!0;var d=b.b===c.b;return b.qa===c.qa?d:qc(b,c)===tc&&d}
-function xc(b,c){var d=lc(b),e=lc(c);return qc(d,e)}function qc(b,c){var d=b.qa,e=c.qa,f;d in rc&&e in rc[d]&&(f=rc[d][e]);void 0===f&&(f=yc);return f}function yc(b,c){if(void 0!==c&&b!==c){for(var d=0,e=b.length;d<e;++d)c[d]=b[d];b=c}return b}function tc(b,c){var d;if(void 0!==c){d=0;for(var e=b.length;d<e;++d)c[d]=b[d];d=c}else d=b.slice();return d};function zc(){T.call(this);this.u=Jb();this.w=-1;this.h={};this.s=this.i=0}M(zc,T);zc.prototype.C=function(b){this.w!=this.f&&(this.u=this.ib(this.u),this.w=this.f);var c=this.u;b?(b[0]=c[0],b[1]=c[1],b[2]=c[2],b[3]=c[3]):b=c;return b};zc.prototype.o=function(b,c){this.Db(xc(b,c));return this};function Ac(b,c,d,e,f,g){var h=f[0],k=f[1],l=f[4],m=f[5],n=f[12];f=f[13];for(var q=g?g:[],r=0;c<d;c+=e){var u=b[c],w=b[c+1];q[r++]=h*u+l*w+n;q[r++]=k*u+m*w+f}g&&q.length!=r&&(q.length=r);return q};function Bc(){zc.call(this);this.g="XY";this.b=2;this.a=null}M(Bc,zc);function Cc(b){if("XY"==b)return 2;if("XYZ"==b||"XYM"==b)return 3;if("XYZM"==b)return 4}p=Bc.prototype;p.ib=function(b){var c=this.a,d=this.a.length,e=this.b;b=Pb(b);return Tb(b,c,0,d,e)};
-p.Nb=function(b){this.s!=this.f&&(Ya(this.h),this.i=0,this.s=this.f);if(0>b||0!==this.i&&b<=this.i)return this;var c=b.toString();if(this.h.hasOwnProperty(c))return this.h[c];var d=this.Ma(b);if(d.a.length<this.a.length)return this.h[c]=d;this.i=b;return this};p.Ma=function(){return this};function U(b,c,d){b.b=Cc(c);b.g=c;b.a=d}function Dc(b,c,d,e){if(c)d=Cc(c);else{for(c=0;c<e;++c){if(0===d.length){b.g="XY";b.b=2;return}d=d[0]}d=d.length;c=2==d?"XY":3==d?"XYZ":4==d?"XYZM":void 0}b.g=c;b.b=d}
-p.Db=function(b){this.a&&(b(this.a,this.a,this.b),this.v())};p.rotate=function(b,c){var d=this.a;if(d){for(var e=d.length,f=this.b,g=d?d:[],h=Math.cos(b),k=Math.sin(b),l=c[0],m=c[1],n=0,q=0;q<e;q+=f){var r=d[q]-l,u=d[q+1]-m;g[n++]=l+r*h-u*k;g[n++]=m+r*k+u*h;for(r=q+2;r<q+f;++r)g[n++]=d[r]}d&&g.length!=n&&(g.length=n);this.v()}};function Ec(b,c){var d=0,e,f;e=0;for(f=c.length;e<f;++e)b[d++]=c[e];return d}function Fc(b,c,d,e){var f,g;f=0;for(g=d.length;f<g;++f){var h=d[f],k;for(k=0;k<e;++k)b[c++]=h[k]}return c}function Gc(b,c,d,e,f){f=f?f:[];var g=0,h,k;h=0;for(k=d.length;h<k;++h)c=Fc(b,c,d[h],e),f[g++]=c;f.length=g;return f};function Hc(b,c,d,e,f){f=void 0!==f?f:[];for(var g=0;c<d;c+=e)f[g++]=b.slice(c,c+e);f.length=g;return f}function Ic(b,c,d,e,f){f=void 0!==f?f:[];var g=0,h,k;h=0;for(k=d.length;h<k;++h){var l=d[h];f[g++]=Hc(b,c,l,e,f[g]);c=l}f.length=g;return f};function Jc(b,c,d,e,f,g,h){var k=(d-c)/e;if(3>k){for(;c<d;c+=e)g[h++]=b[c],g[h++]=b[c+1];return h}var l=Array(k);l[0]=1;l[k-1]=1;d=[c,d-e];for(var m=0,n;0<d.length;){var q=d.pop(),r=d.pop(),u=0,w=b[r],y=b[r+1],z=b[q],D=b[q+1];for(n=r+e;n<q;n+=e){var t,v=b[n];t=b[n+1];var B=w,E=y,C=z-B,G=D-E;if(0!==C||0!==G){var J=((v-B)*C+(t-E)*G)/(C*C+G*G);1<J?(B=z,E=D):0<J&&(B+=C*J,E+=G*J)}v=B-v;t=E-t;t=v*v+t*t;t>u&&(m=n,u=t)}u>f&&(l[(m-c)/e]=1,r+e<m&&d.push(r,m),m+e<q&&d.push(m,q))}for(n=0;n<k;++n)l[n]&&(g[h++]=
+function xc(b,c){var d=lc(b),e=lc(c);return qc(d,e)}function qc(b,c){var d=b.qa,e=c.qa,f;d in rc&&e in rc[d]&&(f=rc[d][e]);void 0===f&&(f=yc);return f}function yc(b,c){if(void 0!==c&&b!==c){for(var d=0,e=b.length;d<e;++d)c[d]=b[d];b=c}return b}function tc(b,c){var d;if(void 0!==c){d=0;for(var e=b.length;d<e;++d)c[d]=b[d];d=c}else d=b.slice();return d};function zc(){T.call(this);this.u=Jb();this.w=-1;this.h={};this.s=this.i=0}M(zc,T);zc.prototype.C=function(b){this.w!=this.f&&(this.u=this.ib(this.u),this.w=this.f);var c=this.u;b?(b[0]=c[0],b[1]=c[1],b[2]=c[2],b[3]=c[3]):b=c;return b};zc.prototype.o=function(b,c){this.Eb(xc(b,c));return this};function Ac(b,c,d,e,f,g){var h=f[0],k=f[1],l=f[4],m=f[5],n=f[12];f=f[13];for(var q=g?g:[],r=0;c<d;c+=e){var u=b[c],w=b[c+1];q[r++]=h*u+l*w+n;q[r++]=k*u+m*w+f}g&&q.length!=r&&(q.length=r);return q};function Bc(){zc.call(this);this.g="XY";this.b=2;this.a=null}M(Bc,zc);function Cc(b){if("XY"==b)return 2;if("XYZ"==b||"XYM"==b)return 3;if("XYZM"==b)return 4}p=Bc.prototype;p.ib=function(b){var c=this.a,d=this.a.length,e=this.b;b=Pb(b);return Tb(b,c,0,d,e)};
+p.Ob=function(b){this.s!=this.f&&(Ya(this.h),this.i=0,this.s=this.f);if(0>b||0!==this.i&&b<=this.i)return this;var c=b.toString();if(this.h.hasOwnProperty(c))return this.h[c];var d=this.Ma(b);if(d.a.length<this.a.length)return this.h[c]=d;this.i=b;return this};p.Ma=function(){return this};function U(b,c,d){b.b=Cc(c);b.g=c;b.a=d}function Dc(b,c,d,e){if(c)d=Cc(c);else{for(c=0;c<e;++c){if(0===d.length){b.g="XY";b.b=2;return}d=d[0]}d=d.length;c=2==d?"XY":3==d?"XYZ":4==d?"XYZM":void 0}b.g=c;b.b=d}
+p.Eb=function(b){this.a&&(b(this.a,this.a,this.b),this.v())};p.rotate=function(b,c){var d=this.a;if(d){for(var e=d.length,f=this.b,g=d?d:[],h=Math.cos(b),k=Math.sin(b),l=c[0],m=c[1],n=0,q=0;q<e;q+=f){var r=d[q]-l,u=d[q+1]-m;g[n++]=l+r*h-u*k;g[n++]=m+r*k+u*h;for(r=q+2;r<q+f;++r)g[n++]=d[r]}d&&g.length!=n&&(g.length=n);this.v()}};function Ec(b,c){var d=0,e,f;e=0;for(f=c.length;e<f;++e)b[d++]=c[e];return d}function Fc(b,c,d,e){var f,g;f=0;for(g=d.length;f<g;++f){var h=d[f],k;for(k=0;k<e;++k)b[c++]=h[k]}return c}function Gc(b,c,d,e,f){f=f?f:[];var g=0,h,k;h=0;for(k=d.length;h<k;++h)c=Fc(b,c,d[h],e),f[g++]=c;f.length=g;return f};function Hc(b,c,d,e,f){f=void 0!==f?f:[];for(var g=0;c<d;c+=e)f[g++]=b.slice(c,c+e);f.length=g;return f}function Ic(b,c,d,e,f){f=void 0!==f?f:[];var g=0,h,k;h=0;for(k=d.length;h<k;++h){var l=d[h];f[g++]=Hc(b,c,l,e,f[g]);c=l}f.length=g;return f};function Jc(b,c,d,e,f,g,h){var k=(d-c)/e;if(3>k){for(;c<d;c+=e)g[h++]=b[c],g[h++]=b[c+1];return h}var l=Array(k);l[0]=1;l[k-1]=1;d=[c,d-e];for(var m=0,n;0<d.length;){var q=d.pop(),r=d.pop(),u=0,w=b[r],y=b[r+1],z=b[q],D=b[q+1];for(n=r+e;n<q;n+=e){var t,v=b[n];t=b[n+1];var B=w,E=y,C=z-B,G=D-E;if(0!==C||0!==G){var J=((v-B)*C+(t-E)*G)/(C*C+G*G);1<J?(B=z,E=D):0<J&&(B+=C*J,E+=G*J)}v=B-v;t=E-t;t=v*v+t*t;t>u&&(m=n,u=t)}u>f&&(l[(m-c)/e]=1,r+e<m&&d.push(r,m),m+e<q&&d.push(m,q))}for(n=0;n<k;++n)l[n]&&(g[h++]=
 b[c+n*e],g[h++]=b[c+n*e+1]);return h}
 function Kc(b,c,d,e,f,g,h,k){var l,m;l=0;for(m=d.length;l<m;++l){var n=d[l];a:{var q=b,r=n,u=e,w=f,y=g;if(c!=r){var z=w*Math.round(q[c]/w),D=w*Math.round(q[c+1]/w);c+=u;y[h++]=z;y[h++]=D;var t=void 0,v=void 0;do if(t=w*Math.round(q[c]/w),v=w*Math.round(q[c+1]/w),c+=u,c==r){y[h++]=t;y[h++]=v;break a}while(t==z&&v==D);for(;c<r;){var B,E;B=w*Math.round(q[c]/w);E=w*Math.round(q[c+1]/w);c+=u;if(B!=t||E!=v){var C=t-z,G=v-D,J=B-z,A=E-D;C*A==G*J&&(0>C&&J<C||C==J||0<C&&J>C)&&(0>G&&A<G||G==A||0<G&&A>G)||(y[h++]=
 t,y[h++]=v,z=t,D=v);t=B;v=E}}y[h++]=t;y[h++]=v}}k.push(h);c=n}return h};function Lc(b,c){Bc.call(this);this.W(b,c)}M(Lc,Bc);p=Lc.prototype;p.clone=function(){var b=new Lc(null);U(b,this.g,this.a.slice());b.v();return b};p.ra=function(){return Hc(this.a,0,this.a.length,this.b)};p.Ma=function(b){var c=[];c.length=Jc(this.a,0,this.a.length,this.b,b,c,0);b=new Lc(null);U(b,"XY",c);b.v();return b};p.U=function(){return"LinearRing"};p.W=function(b,c){b?(Dc(this,c,b,1),this.a||(this.a=[]),this.a.length=Fc(this.a,0,b,this.b)):U(this,"XY",null);this.v()};function Mc(b,c){Bc.call(this);this.W(b,c)}M(Mc,Bc);p=Mc.prototype;p.clone=function(){var b=new Mc(null);U(b,this.g,this.a.slice());b.v();return b};p.ra=function(){return this.a?this.a.slice():[]};p.ib=function(b){return Qb(this.a,b)};p.U=function(){return"Point"};p.W=function(b,c){b?(Dc(this,c,b,0),this.a||(this.a=[]),this.a.length=Ec(this.a,b)):U(this,"XY",null);this.v()};function Nc(b,c,d,e,f,g){for(var h=!1,k=b[d-e],l=b[d-e+1];c<d;c+=e){var m=b[c],n=b[c+1];l>g!=n>g&&f<(m-k)*(g-l)/(n-l)+k&&(h=!h);k=m;l=n}return h};function Oc(b,c,d,e,f,g,h){var k,l,m,n,q,r=f[g+1],u=[],w=d[0];m=b[w-e];q=b[w-e+1];for(k=c;k<w;k+=e){n=b[k];l=b[k+1];if(r<=q&&l<=r||q<=r&&r<=l)m=(r-q)/(l-q)*(n-m)+m,u.push(m);m=n;q=l}w=NaN;q=-Infinity;u.sort(Ha);m=u[0];k=1;for(l=u.length;k<l;++k){n=u[k];var y=Math.abs(n-m);if(y>q){m=(m+n)/2;var z;a:if(0!==d.length&&Nc(b,c,d[0],e,m,r)){var D=z=void 0;z=1;for(D=d.length;z<D;++z)if(Nc(b,d[z-1],d[z],e,m,r)){z=!1;break a}z=!0}else z=!1;z&&(w=m,q=y)}m=n}isNaN(w)&&(w=f[g]);return h?(h.push(w,r),h):[w,r]}
 ;function Pc(b,c,d,e){for(var f=0,g=b[d-e],h=b[d-e+1];c<d;c+=e)var k=b[c],l=b[c+1],f=f+(k-g)*(l+h),g=k,h=l;return 0<f}function Qc(b,c,d,e){var f=0;e=void 0!==e?e:!1;var g,h;g=0;for(h=c.length;g<h;++g){var k=c[g],f=Pc(b,f,k,d);if(0===g){if(e&&f||!e&&!f)return!1}else if(e&&!f||!e&&f)return!1;f=k}return!0}
-function Rc(b,c,d,e,f){f=void 0!==f?f:!1;var g,h;g=0;for(h=d.length;g<h;++g){var k=d[g],l=Pc(b,c,k,e);if(0===g?f&&l||!f&&!l:f&&!l||!f&&l)for(var l=b,m=k,n=e;c<m-n;){var q;for(q=0;q<n;++q){var r=l[c+q];l[c+q]=l[m-n+q];l[m-n+q]=r}c+=n;m-=n}c=k}return c}function Sc(b,c,d,e){var f=0,g,h;g=0;for(h=c.length;g<h;++g)f=Rc(b,f,c[g],d,e);return f};function Tc(b,c){Bc.call(this);this.c=[];this.B=-1;this.D=null;this.G=-1;this.j=null;this.W(b,c)}M(Tc,Bc);p=Tc.prototype;p.clone=function(){var b=new Tc(null);Uc(b,this.g,this.a.slice(),this.c.slice());return b};p.ra=function(b){var c;void 0!==b?(c=Vc(this).slice(),Rc(c,0,this.c,this.b,b)):c=this.a;return Ic(c,0,this.c,this.b)};p.$a=function(){return this.c};function Wc(b){if(b.B!=b.f){var c=Yb(b.C());b.D=Oc(Vc(b),0,b.c,b.b,c,0);b.B=b.f}return b.D}
+function Rc(b,c,d,e,f){f=void 0!==f?f:!1;var g,h;g=0;for(h=d.length;g<h;++g){var k=d[g],l=Pc(b,c,k,e);if(0===g?f&&l||!f&&!l:f&&!l||!f&&l)for(var l=b,m=k,n=e;c<m-n;){var q;for(q=0;q<n;++q){var r=l[c+q];l[c+q]=l[m-n+q];l[m-n+q]=r}c+=n;m-=n}c=k}return c}function Sc(b,c,d,e){var f=0,g,h;g=0;for(h=c.length;g<h;++g)f=Rc(b,f,c[g],d,e);return f};function Tc(b,c){Bc.call(this);this.c=[];this.B=-1;this.D=null;this.G=-1;this.j=null;this.W(b,c)}M(Tc,Bc);p=Tc.prototype;p.clone=function(){var b=new Tc(null);Uc(b,this.g,this.a.slice(),this.c.slice());return b};p.ra=function(b){var c;void 0!==b?(c=Vc(this).slice(),Rc(c,0,this.c,this.b,b)):c=this.a;return Ic(c,0,this.c,this.b)};p.ab=function(){return this.c};function Wc(b){if(b.B!=b.f){var c=Yb(b.C());b.D=Oc(Vc(b),0,b.c,b.b,c,0);b.B=b.f}return b.D}
 function Vc(b){if(b.G!=b.f){var c=b.a;Qc(c,b.c,b.b)?b.j=c:(b.j=c.slice(),b.j.length=Rc(b.j,0,b.c,b.b));b.G=b.f}return b.j}p.Ma=function(b){var c=[],d=[];c.length=Kc(this.a,0,this.c,this.b,Math.sqrt(b),c,0,d);b=new Tc(null);Uc(b,"XY",c,d);return b};p.U=function(){return"Polygon"};p.W=function(b,c){if(b){Dc(this,c,b,2);this.a||(this.a=[]);var d=Gc(this.a,0,b,this.b,this.c);this.a.length=0===d.length?0:d[d.length-1];this.v()}else Uc(this,"XY",null,this.c)};function Uc(b,c,d,e){U(b,c,d);b.c=e;b.v()};function V(b){T.call(this);b=b||{};this.g=[0,0];var c={};c.center=void 0!==b.center?b.center:null;this.h=vc(b.projection);var d,e,f,g=void 0!==b.minZoom?b.minZoom:0;d=void 0!==b.maxZoom?b.maxZoom:28;var h=void 0!==b.zoomFactor?b.zoomFactor:2;if(void 0!==b.resolutions)d=b.resolutions,e=d[0],f=d[d.length-1],d=Pa(d);else{e=vc(b.projection);f=e.C();var k=(f?Math.max(Vb(f),Wb(f)):360*hc.degrees/pc(e))/256/Math.pow(2,0),l=k/Math.pow(2,28);e=b.maxResolution;void 0!==e?g=0:e=k/Math.pow(h,g);f=b.minResolution;
 void 0===f&&(f=void 0!==b.maxZoom?void 0!==b.maxResolution?e/Math.pow(h,d):k/Math.pow(h,d):l);d=g+Math.floor(Math.log(e/f)/Math.log(h));f=e/Math.pow(h,d-g);d=Qa(h,e,d-g)}this.b=e;this.i=f;this.c=g;g=void 0!==b.extent?Fa(b.extent):Ga;(void 0!==b.enableRotation?b.enableRotation:1)?(e=b.constrainRotation,e=void 0===e||!0===e?Ua():!1===e?Sa:ea(e)?Ta(e):Sa):e=Ra;this.a=new Va(g,d,e);void 0!==b.resolution?c.resolution=b.resolution:void 0!==b.zoom&&(c.resolution=this.constrainResolution(this.b,b.zoom-this.c));
-c.rotation=void 0!==b.rotation?b.rotation:0;this.l(c)}M(V,T);p=V.prototype;p.constrainResolution=function(b,c,d){return this.a.resolution(b,c||0,d||0)};p.constrainRotation=function(b,c){return this.a.rotation(b,c||0)};p.ia=function(){return this.get("center")};p.jc=function(b){var c=this.ia(),d=this.I(),e=this.Y();return Zb(c,d,e,b)};p.ke=function(){return this.h};p.I=function(){return this.get("resolution")};function Xc(b,c){return Math.max(Vb(b)/c[0],Wb(b)/c[1])}p.Y=function(){return this.get("rotation")};
-p.N=function(){var b=this.ia(),c=this.h,d=this.I(),e=this.Y();return{center:[Math.round(b[0]/d)*d,Math.round(b[1]/d)*d],projection:void 0!==c?c:null,resolution:d,rotation:e}};p.vd=function(){var b,c=this.I();if(void 0!==c){var d,e=0;do{d=this.constrainResolution(this.b,e);if(d==c){b=e;break}++e}while(d>this.i)}return void 0!==b?this.c+b:b};
-p.md=function(b,c,d){if(!(b instanceof Bc)){var e=b[0],f=b[1],g=b[2],h=b[3],e=[e,f,e,h,g,h,g,f,e,f],f=new Tc(null);Uc(f,"XY",e,[e.length]);b=f}e=d||{};d=void 0!==e.padding?e.padding:[0,0,0,0];var h=void 0!==e.constrainResolution?e.constrainResolution:!0,f=void 0!==e.nearest?e.nearest:!1,k;void 0!==e.minResolution?k=e.minResolution:void 0!==e.maxZoom?k=this.constrainResolution(this.b,e.maxZoom-this.c,0):k=0;var l=b.a,g=this.Y(),e=Math.cos(-g),g=Math.sin(-g),m=Infinity,n=Infinity,q=-Infinity,r=-Infinity;
+c.rotation=void 0!==b.rotation?b.rotation:0;this.l(c)}M(V,T);p=V.prototype;p.constrainResolution=function(b,c,d){return this.a.resolution(b,c||0,d||0)};p.constrainRotation=function(b,c){return this.a.rotation(b,c||0)};p.ia=function(){return this.get("center")};p.jc=function(b){var c=this.ia(),d=this.I(),e=this.Z();return Zb(c,d,e,b)};p.le=function(){return this.h};p.I=function(){return this.get("resolution")};function Xc(b,c){return Math.max(Vb(b)/c[0],Wb(b)/c[1])}p.Z=function(){return this.get("rotation")};
+p.N=function(){var b=this.ia(),c=this.h,d=this.I(),e=this.Z();return{center:[Math.round(b[0]/d)*d,Math.round(b[1]/d)*d],projection:void 0!==c?c:null,resolution:d,rotation:e}};p.wd=function(){var b,c=this.I();if(void 0!==c){var d,e=0;do{d=this.constrainResolution(this.b,e);if(d==c){b=e;break}++e}while(d>this.i)}return void 0!==b?this.c+b:b};
+p.nd=function(b,c,d){if(!(b instanceof Bc)){var e=b[0],f=b[1],g=b[2],h=b[3],e=[e,f,e,h,g,h,g,f,e,f],f=new Tc(null);Uc(f,"XY",e,[e.length]);b=f}e=d||{};d=void 0!==e.padding?e.padding:[0,0,0,0];var h=void 0!==e.constrainResolution?e.constrainResolution:!0,f=void 0!==e.nearest?e.nearest:!1,k;void 0!==e.minResolution?k=e.minResolution:void 0!==e.maxZoom?k=this.constrainResolution(this.b,e.maxZoom-this.c,0):k=0;var l=b.a,g=this.Z(),e=Math.cos(-g),g=Math.sin(-g),m=Infinity,n=Infinity,q=-Infinity,r=-Infinity;
 b=b.b;for(var u=0,w=l.length;u<w;u+=b)var y=l[u]*e-l[u+1]*g,z=l[u]*g+l[u+1]*e,m=Math.min(m,y),n=Math.min(n,z),q=Math.max(q,y),r=Math.max(r,z);c=Xc([m,n,q,r],[c[0]-d[1]-d[3],c[1]-d[0]-d[2]]);c=isNaN(c)?k:Math.max(c,k);h&&(k=this.constrainResolution(c,0,0),!f&&k<c&&(k=this.constrainResolution(k,-1,0)),c=k);Yc(this,c);g=-g;k=(m+q)/2+(d[1]-d[3])/2*c;c=(n+r)/2+(d[0]-d[2])/2*c;this.oa([k*e-c*g,c*e+k*g])};
-p.rotate=function(b,c){if(void 0!==c){var d,e=this.ia();void 0!==e&&(d=[e[0]-c[0],e[1]-c[1]],vb(d,b-this.Y()),ub(d,c));this.oa(d)}this.set("rotation",b)};p.oa=function(b){this.set("center",b)};function Zc(b,c){b.g[1]+=c}function Yc(b,c){b.set("resolution",c)}p.De=function(b){b=this.constrainResolution(this.b,b-this.c,0);Yc(this,b)};function $c(b){return 1-Math.pow(1-b,3)}function ad(b){return 3*b*b-2*b*b*b}function bd(b){return b};function cd(b){var c=b.source,d=b.start?b.start:Date.now(),e=c[0],f=c[1],g=void 0!==b.duration?b.duration:1E3,h=b.easing?b.easing:ad;return function(b,c){if(c.time<d)return c.animate=!0,c.viewHints[0]+=1,!0;if(c.time<d+g){var m=1-h((c.time-d)/g),n=e-c.viewState.center[0],q=f-c.viewState.center[1];c.animate=!0;c.viewState.center[0]+=m*n;c.viewState.center[1]+=m*q;c.viewHints[0]+=1;return!0}return!1}}
+p.rotate=function(b,c){if(void 0!==c){var d,e=this.ia();void 0!==e&&(d=[e[0]-c[0],e[1]-c[1]],vb(d,b-this.Z()),ub(d,c));this.oa(d)}this.set("rotation",b)};p.oa=function(b){this.set("center",b)};function Zc(b,c){b.g[1]+=c}function Yc(b,c){b.set("resolution",c)}p.Ee=function(b){b=this.constrainResolution(this.b,b-this.c,0);Yc(this,b)};function $c(b){return 1-Math.pow(1-b,3)}function ad(b){return 3*b*b-2*b*b*b}function bd(b){return b};function cd(b){var c=b.source,d=b.start?b.start:Date.now(),e=c[0],f=c[1],g=void 0!==b.duration?b.duration:1E3,h=b.easing?b.easing:ad;return function(b,c){if(c.time<d)return c.animate=!0,c.viewHints[0]+=1,!0;if(c.time<d+g){var m=1-h((c.time-d)/g),n=e-c.viewState.center[0],q=f-c.viewState.center[1];c.animate=!0;c.viewState.center[0]+=m*n;c.viewState.center[1]+=m*q;c.viewHints[0]+=1;return!0}return!1}}
 function dd(b){var c=b.rotation?b.rotation:0,d=b.start?b.start:Date.now(),e=void 0!==b.duration?b.duration:1E3,f=b.easing?b.easing:ad,g=b.anchor?b.anchor:null;return function(b,k){if(k.time<d)return k.animate=!0,k.viewHints[0]+=1,!0;if(k.time<d+e){var l=1-f((k.time-d)/e),l=(c-k.viewState.rotation)*l;k.animate=!0;k.viewState.rotation+=l;if(g){var m=k.viewState.center;m[0]-=g[0];m[1]-=g[1];vb(m,l);ub(m,g)}k.viewHints[0]+=1;return!0}return!1}}
 function ed(b){var c=b.resolution,d=b.start?b.start:Date.now(),e=void 0!==b.duration?b.duration:1E3,f=b.easing?b.easing:ad;return function(b,h){if(h.time<d)return h.animate=!0,h.viewHints[0]+=1,!0;if(h.time<d+e){var k=1-f((h.time-d)/e),l=c-h.viewState.resolution;h.animate=!0;h.viewState.resolution+=k*l;h.viewHints[0]+=1;return!0}return!1}};function fd(b,c,d,e){this.a=b;this.f=c;this.b=d;this.c=e}function gd(b,c,d){return b.a<=c&&c<=b.f&&b.b<=d&&d<=b.c}function hd(b,c){return b.a==c.a&&b.b==c.b&&b.f==c.f&&b.c==c.c}fd.prototype.ha=function(){return this.f-this.a+1};function id(b,c){return b.a<=c.f&&b.f>=c.a&&b.b<=c.c&&b.c>=c.b};function jd(b){this.b=b.html;this.a=b.tileRanges?b.tileRanges:null};function kd(b,c,d){R.call(this,b,d);this.element=c}M(kd,R);function ld(b){T.call(this);this.a=b?b:[];md(this)}M(ld,T);p=ld.prototype;p.clear=function(){for(;0<this.get("length");)this.pop()};function nd(b,c,d){b.a.forEach(c,d)}p.item=function(b){return this.a[b]};p.pop=function(){return od(this,this.get("length")-1)};p.push=function(b){var c=this.a.length;this.a.splice(c,0,b);md(this);S(this,new kd("add",b,this));return c};
 p.remove=function(b){var c=this.a,d,e;d=0;for(e=c.length;d<e;++d)if(c[d]===b)return od(this,d)};function od(b,c){var d=b.a[c];b.a.splice(c,1);md(b);S(b,new kd("remove",d,b));return d}function md(b){b.set("length",b.a.length)};function pd(b,c){Array.prototype.forEach.call(b,c,void 0)}function qd(b){var c=b.length;if(0<c){for(var d=Array(c),e=0;e<c;e++)d[e]=b[e];return d}return[]}function rd(b,c,d){return 2>=arguments.length?Array.prototype.slice.call(b,c):Array.prototype.slice.call(b,c,d)};var sd=/^#(?:[0-9a-f]{3}){1,2}$/i,td=/^(?:rgb)?\((0|[1-9]\d{0,2}),\s?(0|[1-9]\d{0,2}),\s?(0|[1-9]\d{0,2})\)$/i,ud=/^(?:rgba)?\((0|[1-9]\d{0,2}),\s?(0|[1-9]\d{0,2}),\s?(0|[1-9]\d{0,2}),\s?(0|1|0\.\d{0,10})\)$/i;function vd(b){if("string"!==typeof b){var c=b[0];c!=(c|0)&&(c=c+.5|0);var d=b[1];d!=(d|0)&&(d=d+.5|0);var e=b[2];e!=(e|0)&&(e=e+.5|0);b="rgba("+c+","+d+","+e+","+(void 0===b[3]?1:b[3])+")"}return b}
@@ -62,94 +62,98 @@ var xd=function(){var b={},c=0;return function(d){var e;if(b.hasOwnProperty(d))e
 e=[e,f,g,1],e=wd(e,e)):e=void 0;b[d]=e;++c}return e}}();function wd(b,c){var d=c||[];d[0]=Ca(b[0]+.5|0,0,255);d[1]=Ca(b[1]+.5|0,0,255);d[2]=Ca(b[2]+.5|0,0,255);d[3]=Ca(b[3],0,1);return d};function yd(b){return"string"===typeof b||b instanceof CanvasPattern||b instanceof CanvasGradient?b:vd(b)};var zd;a:{var Ad=x.navigator;if(Ad){var Bd=Ad.userAgent;if(Bd){zd=Bd;break a}}zd=""}function W(b){return-1!=zd.indexOf(b)};function Cd(b,c){for(var d in b)c.call(void 0,b[d],d,b)}var Dd="constructor hasOwnProperty isPrototypeOf propertyIsEnumerable toLocaleString toString valueOf".split(" ");function Ed(b,c){for(var d,e,f=1;f<arguments.length;f++){e=arguments[f];for(d in e)b[d]=e[d];for(var g=0;g<Dd.length;g++)d=Dd[g],Object.prototype.hasOwnProperty.call(e,d)&&(b[d]=e[d])}};var Fd=W("Opera")||W("OPR"),Gd=W("Trident")||W("MSIE"),Hd=W("Edge"),Id=W("Gecko")&&!(-1!=zd.toLowerCase().indexOf("webkit")&&!W("Edge"))&&!(W("Trident")||W("MSIE"))&&!W("Edge"),Jd=-1!=zd.toLowerCase().indexOf("webkit")&&!W("Edge");function Kd(){var b=x.document;return b?b.documentMode:void 0}var Ld;
 a:{var Md="",Nd=function(){var b=zd;if(Id)return/rv\:([^\);]+)(\)|;)/.exec(b);if(Hd)return/Edge\/([\d\.]+)/.exec(b);if(Gd)return/\b(?:MSIE|rv)[: ]([^\);]+)(\)|;)/.exec(b);if(Jd)return/WebKit\/(\S+)/.exec(b);if(Fd)return/(?:Version)[ \/]?(\S+)/.exec(b)}();Nd&&(Md=Nd?Nd[1]:"");if(Gd){var Od=Kd();if(null!=Od&&Od>parseFloat(Md)){Ld=String(Od);break a}}Ld=Md}var Pd={};
 function Qd(b){var c;if(!(c=Pd[b])){c=0;for(var d=sa(String(Ld)).split("."),e=sa(String(b)).split("."),f=Math.max(d.length,e.length),g=0;0==c&&g<f;g++){var h=d[g]||"",k=e[g]||"",l=RegExp("(\\d*)(\\D*)","g"),m=RegExp("(\\d*)(\\D*)","g");do{var n=l.exec(h)||["","",""],q=m.exec(k)||["","",""];if(0==n[0].length&&0==q[0].length)break;c=Ba(0==n[1].length?0:parseInt(n[1],10),0==q[1].length?0:parseInt(q[1],10))||Ba(0==n[2].length,0==q[2].length)||Ba(n[2],q[2])}while(0==c)}c=Pd[b]=0<=c}return c}
-var Rd=x.document,Sd=Rd&&Gd?Kd()||("CSS1Compat"==Rd.compatMode?parseInt(Ld,10):5):void 0;var Td=!Gd||9<=Number(Sd);!Id&&!Gd||Gd&&9<=Number(Sd)||Id&&Qd("1.9.1");Gd&&Qd("9");function Ud(b,c){this.x=void 0!==b?b:0;this.y=void 0!==c?c:0}p=Ud.prototype;p.clone=function(){return new Ud(this.x,this.y)};p.ceil=function(){this.x=Math.ceil(this.x);this.y=Math.ceil(this.y);return this};p.floor=function(){this.x=Math.floor(this.x);this.y=Math.floor(this.y);return this};p.round=function(){this.x=Math.round(this.x);this.y=Math.round(this.y);return this};p.scale=function(b,c){var d=ea(c)?c:b;this.x*=b;this.y*=d;return this};function Vd(b,c){this.width=b;this.height=c}p=Vd.prototype;p.clone=function(){return new Vd(this.width,this.height)};p.ceil=function(){this.width=Math.ceil(this.width);this.height=Math.ceil(this.height);return this};p.floor=function(){this.width=Math.floor(this.width);this.height=Math.floor(this.height);return this};p.round=function(){this.width=Math.round(this.width);this.height=Math.round(this.height);return this};p.scale=function(b,c){var d=ea(c)?c:b;this.width*=b;this.height*=d;return this};function Wd(b){return b?new Xd(Yd(b)):ra||(ra=new Xd)}function Zd(b){var c=document;return da(b)?c.getElementById(b):b}function $d(b,c){Cd(c,function(c,e){"style"==e?b.style.cssText=c:"class"==e?b.className=c:"for"==e?b.htmlFor=c:ae.hasOwnProperty(e)?b.setAttribute(ae[e],c):0==e.lastIndexOf("aria-",0)||0==e.lastIndexOf("data-",0)?b.setAttribute(e,c):b[e]=c})}
+var Rd=x.document,Sd=Rd&&Gd?Kd()||("CSS1Compat"==Rd.compatMode?parseInt(Ld,10):5):void 0;var Td=!Gd||9<=Number(Sd);!Id&&!Gd||Gd&&9<=Number(Sd)||Id&&Qd("1.9.1");Gd&&Qd("9");function Ud(b,c){this.x=void 0!==b?b:0;this.y=void 0!==c?c:0}p=Ud.prototype;p.clone=function(){return new Ud(this.x,this.y)};p.ceil=function(){this.x=Math.ceil(this.x);this.y=Math.ceil(this.y);return this};p.floor=function(){this.x=Math.floor(this.x);this.y=Math.floor(this.y);return this};p.round=function(){this.x=Math.round(this.x);this.y=Math.round(this.y);return this};p.scale=function(b,c){var d=ea(c)?c:b;this.x*=b;this.y*=d;return this};function Vd(b,c){this.width=b;this.height=c}p=Vd.prototype;p.clone=function(){return new Vd(this.width,this.height)};p.ceil=function(){this.width=Math.ceil(this.width);this.height=Math.ceil(this.height);return this};p.floor=function(){this.width=Math.floor(this.width);this.height=Math.floor(this.height);return this};p.round=function(){this.width=Math.round(this.width);this.height=Math.round(this.height);return this};p.scale=function(b,c){var d=ea(c)?c:b;this.width*=b;this.height*=d;return this};function Wd(b){return b?new Xd(Yd(b)):qa||(qa=new Xd)}function Zd(b){var c=document;return da(b)?c.getElementById(b):b}function $d(b,c){Cd(c,function(c,e){"style"==e?b.style.cssText=c:"class"==e?b.className=c:"for"==e?b.htmlFor=c:ae.hasOwnProperty(e)?b.setAttribute(ae[e],c):0==e.lastIndexOf("aria-",0)||0==e.lastIndexOf("data-",0)?b.setAttribute(e,c):b[e]=c})}
 var ae={cellpadding:"cellPadding",cellspacing:"cellSpacing",colspan:"colSpan",frameborder:"frameBorder",height:"height",maxlength:"maxLength",nonce:"nonce",role:"role",rowspan:"rowSpan",type:"type",usemap:"useMap",valign:"vAlign",width:"width"};
 function be(b,c,d){var e=arguments,f=document,g=e[0],h=e[1];if(!Td&&h&&(h.name||h.type)){g=["<",g];h.name&&g.push(' name="',ta(h.name),'"');if(h.type){g.push(' type="',ta(h.type),'"');var k={};Ed(k,h);delete k.type;h=k}g.push(">");g=g.join("")}g=f.createElement(g);h&&(da(h)?g.className=h:"array"==ba(h)?g.className=h.join(" "):$d(g,h));2<e.length&&ce(f,g,e);return g}
-function ce(b,c,d){function e(d){d&&c.appendChild(da(d)?b.createTextNode(d):d)}for(var f=2;f<d.length;f++){var g=d[f];!ca(g)||ha(g)&&0<g.nodeType?e(g):pd(de(g)?qd(g):g,e)}}function ee(b){for(var c;c=b.firstChild;)b.removeChild(c)}function fe(b,c,d){b.insertBefore(c,b.childNodes[d]||null)}function ge(b){b&&b.parentNode&&b.parentNode.removeChild(b)}
-function he(b,c){if(!b||!c)return!1;if(b.contains&&1==c.nodeType)return b==c||b.contains(c);if("undefined"!=typeof b.compareDocumentPosition)return b==c||!!(b.compareDocumentPosition(c)&16);for(;c&&b!=c;)c=c.parentNode;return c==b}function Yd(b){return 9==b.nodeType?b:b.ownerDocument||b.document}function de(b){if(b&&"number"==typeof b.length){if(ha(b))return"function"==typeof b.item||"string"==typeof b.item;if(ga(b))return"function"==typeof b.item}return!1}
-function Xd(b){this.a=b||x.document||document}Xd.prototype.appendChild=function(b,c){b.appendChild(c)};function ie(b,c,d,e){this.top=b;this.right=c;this.bottom=d;this.left=e}p=ie.prototype;p.ha=function(){return this.right-this.left};p.clone=function(){return new ie(this.top,this.right,this.bottom,this.left)};p.ceil=function(){this.top=Math.ceil(this.top);this.right=Math.ceil(this.right);this.bottom=Math.ceil(this.bottom);this.left=Math.ceil(this.left);return this};
-p.floor=function(){this.top=Math.floor(this.top);this.right=Math.floor(this.right);this.bottom=Math.floor(this.bottom);this.left=Math.floor(this.left);return this};p.round=function(){this.top=Math.round(this.top);this.right=Math.round(this.right);this.bottom=Math.round(this.bottom);this.left=Math.round(this.left);return this};p.scale=function(b,c){var d=ea(c)?c:b;this.left*=b;this.right*=b;this.top*=d;this.bottom*=d;return this};function je(b,c){var d=Yd(b);return d.defaultView&&d.defaultView.getComputedStyle&&(d=d.defaultView.getComputedStyle(b,null))?d[c]||d.getPropertyValue(c)||"":""}function ke(b){var c;try{c=b.getBoundingClientRect()}catch(d){return{left:0,top:0,right:0,bottom:0}}Gd&&b.ownerDocument.body&&(b=b.ownerDocument,c.left-=b.documentElement.clientLeft+b.body.clientLeft,c.top-=b.documentElement.clientTop+b.body.clientTop);return c}
-function le(b){var c=me;if("none"!=(je(b,"display")||(b.currentStyle?b.currentStyle.display:null)||b.style&&b.style.display))return c(b);var d=b.style,e=d.display,f=d.visibility,g=d.position;d.visibility="hidden";d.position="absolute";d.display="inline";b=c(b);d.display=e;d.position=g;d.visibility=f;return b}function me(b){var c=b.offsetWidth,d=b.offsetHeight,e=Jd&&!c&&!d;return(void 0===c||e)&&b.getBoundingClientRect?(b=ke(b),new Vd(b.right-b.left,b.bottom-b.top)):new Vd(c,d)}
-function ne(b,c){b.style.display=c?"":"none"}function oe(b,c,d,e){if(/^\d+px?$/.test(c))return parseInt(c,10);var f=b.style[d],g=b.runtimeStyle[d];b.runtimeStyle[d]=b.currentStyle[d];b.style[d]=c;c=b.style[e];b.style[d]=f;b.runtimeStyle[d]=g;return c}function pe(b,c){var d=b.currentStyle?b.currentStyle[c]:null;return d?oe(b,d,"left","pixelLeft"):0}var qe={thin:2,medium:4,thick:6};
-function re(b,c){if("none"==(b.currentStyle?b.currentStyle[c+"Style"]:null))return 0;var d=b.currentStyle?b.currentStyle[c+"Width"]:null;return d in qe?qe[d]:oe(b,d,"left","pixelLeft")};function se(b,c,d){R.call(this,b);this.map=c;this.frameState=void 0!==d?d:null}M(se,R);function te(b){T.call(this);this.element=b.element?b.element:null;this.g=this.B=null;this.i=[];this.render=b.render?b.render:pa;b.target&&(this.B=Zd(b.target))}M(te,T);te.prototype.J=function(){ge(this.element);te.$.J.call(this)};te.prototype.setMap=function(b){this.g&&ge(this.element);for(var c=0,d=this.i.length;c<d;++c)N(this.i[c]);this.i.length=0;if(this.g=b)(this.B?this.B:b.j).appendChild(this.element),this.render!==pa&&this.i.push(Q(b,"postrender",this.render,this)),b.render()};function ue(){this.f=0;this.c={};this.b=this.a=null}p=ue.prototype;p.clear=function(){this.f=0;this.c={};this.b=this.a=null};function ve(b,c){return b.c.hasOwnProperty(c)}function we(b,c){for(var d=b.a;d;)c.call(void 0,d.Ia,d.Qb,b),d=d.ma}p.get=function(b){b=this.c[b];if(b===this.b)return b.Ia;b===this.a?(this.a=this.a.ma,this.a.Qa=null):(b.ma.Qa=b.Qa,b.Qa.ma=b.ma);b.ma=null;b.Qa=this.b;this.b=this.b.ma=b;return b.Ia};
-p.pop=function(){var b=this.a;delete this.c[b.Qb];b.ma&&(b.ma.Qa=null);this.a=b.ma;this.a||(this.b=null);--this.f;return b.Ia};p.replace=function(b,c){this.get(b);this.c[b].Ia=c};p.set=function(b,c){var d={Qb:b,ma:null,Qa:this.b,Ia:c};this.b?this.b.ma=d:this.a=d;this.b=d;this.c[b]=d;++this.f};function xe(b){ue.call(this);this.g=void 0!==b?b:2048}M(xe,ue);function ye(b){return b.f>b.g}function ze(b,c){for(var d,e;ye(b);){d=b.a.Ia;e=d.L[0].toString();var f;if(f=e in c)d=d.L,f=gd(c[e],d[1],d[2]);if(f)break;else jb(b.pop())}};function Ae(b,c){mb.call(this);this.L=b;this.state=c;this.a=null;this.key=""}M(Ae,mb);function Be(b){S(b,"change")}Ae.prototype.getKey=function(){return I(this).toString()};Ae.prototype.N=function(){return this.state};function Ce(b){T.call(this);this.c=lc(b.projection);this.i=De(b.attributions);this.w=b.logo;this.B=void 0!==b.state?b.state:"ready";this.j=void 0!==b.wrapX?b.wrapX:!1}M(Ce,T);function De(b){if("string"===typeof b)return[new jd({html:b})];if(b instanceof jd)return[b];if(Array.isArray(b)){for(var c=b.length,d=Array(c),e=0;e<c;e++){var f=b[e];d[e]="string"===typeof f?new jd({html:f}):f}return d}return null}Ce.prototype.N=function(){return this.B};Ce.prototype.wa=function(){this.v()};function Ee(b){this.minZoom=void 0!==b.minZoom?b.minZoom:0;this.b=b.resolutions;this.maxZoom=this.b.length-1;this.f=void 0!==b.origin?b.origin:null;this.g=null;void 0!==b.origins&&(this.g=b.origins);var c=b.extent;void 0===c||this.f||this.g||(this.f=bc(c));this.h=null;void 0!==b.tileSizes&&(this.h=b.tileSizes);this.l=void 0!==b.tileSize?b.tileSize:this.h?null:256;this.i=void 0!==c?c:null;this.a=null;void 0!==b.sizes?this.a=b.sizes.map(function(b){return new fd(Math.min(0,b[0]),Math.max(b[0]-1,-1),
-Math.min(0,b[1]),Math.max(b[1]-1,-1))},this):c&&Fe(this,c);this.c=[0,0]}var Ge=[0,0,0];function He(b,c,d,e,f){f=Ie(b,c,f);for(c=c[0]-1;c>=b.minZoom;){if(d.call(null,c,Je(b,f,c,e)))return!0;--c}return!1}Ee.prototype.C=function(){return this.i};Ee.prototype.ka=function(b){return this.f?this.f:this.g[b]};Ee.prototype.I=function(b){return this.b[b]};Ee.prototype.Mb=function(){return this.b};function Ke(b,c,d,e){return c[0]<b.maxZoom?(e=Ie(b,c,e),Je(b,e,c[0]+1,d)):null}
-function Le(b,c,d,e){Me(b,c[0],c[1],d,!1,Ge);var f=Ge[1],g=Ge[2];Me(b,c[2],c[3],d,!0,Ge);b=Ge[1];c=Ge[2];void 0!==e?(e.a=f,e.f=b,e.b=g,e.c=c):e=new fd(f,b,g,c);return e}function Je(b,c,d,e){d=b.I(d);return Le(b,c,d,e)}function Ne(b,c){var d=b.ka(c[0]),e=b.I(c[0]),f=tb(Oe(b,c[0]),b.c);return[d[0]+(c[1]+.5)*f[0]*e,d[1]+(c[2]+.5)*f[1]*e]}function Ie(b,c,d){var e=b.ka(c[0]),f=b.I(c[0]);b=tb(Oe(b,c[0]),b.c);var g=e[0]+c[1]*b[0]*f;c=e[1]+c[2]*b[1]*f;return Ob(g,c,g+b[0]*f,c+b[1]*f,d)}
-function Me(b,c,d,e,f,g){var h=Pe(b,e),k=e/b.I(h),l=b.ka(h);b=tb(Oe(b,h),b.c);c=k*Math.floor((c-l[0])/e+(f?.5:0))/b[0];d=k*Math.floor((d-l[1])/e+(f?0:.5))/b[1];f?(c=Math.ceil(c)-1,d=Math.ceil(d)-1):(c=Math.floor(c),d=Math.floor(d));f=c;void 0!==g?(g[0]=h,g[1]=f,g[2]=d):g=[h,f,d];return g}function Qe(b,c,d){d=b.I(d);return Me(b,c[0],c[1],d,!1,void 0)}function Oe(b,c){return b.l?b.l:b.h[c]}function Pe(b,c){var d=Ia(b.b,c,0);return Ca(d,b.minZoom,b.maxZoom)}
-function Fe(b,c){for(var d=b.b.length,e=Array(d),f=b.minZoom;f<d;++f)e[f]=Je(b,c,f);b.a=e}function Re(b){var c=b.c;if(!c){var c=Se(b),d=Te(c,void 0,void 0),c=new Ee({extent:c,origin:bc(c),resolutions:d,tileSize:void 0});b.c=c}return c}function Te(b,c,d){c=void 0!==c?c:42;var e=Wb(b);b=Vb(b);d=tb(void 0!==d?d:256);d=Math.max(b/d[0],e/d[1]);c+=1;e=Array(c);for(b=0;b<c;++b)e[b]=d/Math.pow(2,b);return e}function Se(b){b=lc(b);var c=b.C();c||(b=180*hc.degrees/pc(b),c=Ob(-b,-b,b,b));return c};function Ue(b){Ce.call(this,{attributions:b.attributions,extent:b.extent,logo:b.logo,projection:b.projection,state:b.state,wrapX:b.wrapX});this.G=void 0!==b.opaque?b.opaque:!1;this.X=void 0!==b.tilePixelRatio?b.tilePixelRatio:1;this.tileGrid=void 0!==b.tileGrid?b.tileGrid:null;this.a=new xe(b.cacheSize);this.h=[0,0]}M(Ue,Ce);p=Ue.prototype;p.Qc=function(){return ye(this.a)};p.Rc=function(b,c){var d=this.bb(b);d&&ze(d,c)};
-function Ve(b,c,d,e,f){c=b.bb(c);if(!c)return!1;for(var g=!0,h,k,l=e.a;l<=e.f;++l)for(var m=e.b;m<=e.c;++m)h=b.lb(d,l,m),k=!1,ve(c,h)&&(h=c.get(h),(k=2===h.N())&&(k=!1!==f(h))),k||(g=!1);return g}p.kb=function(){return 0};p.lb=function(b,c,d){return b+"/"+c+"/"+d};p.Lb=function(){return this.G};p.Mb=function(){return this.tileGrid.Mb()};p.la=function(b){return this.tileGrid?this.tileGrid:Re(b)};p.bb=function(b){var c=this.c;return c&&!wc(c,b)?null:this.a};p.mb=function(){return this.X};
-function We(b,c,d,e){e=b.la(e);d=b.mb(d);c=tb(Oe(e,c),b.h);return 1==d?c:sb(c,d,b.h)}function Xe(b,c,d){var e=void 0!==d?d:b.c;d=b.la(e);if(b.j&&e.f){var f=c;c=f[0];b=Ne(d,f);var e=Se(e),g=b[0],h=b[1];e[0]<=g&&g<=e[2]&&e[1]<=h&&h<=e[3]?c=f:(f=Vb(e),b[0]+=f*Math.ceil((e[0]-b[0])/f),c=Qe(d,b,c))}e=c[0];b=c[1];f=c[2];d=d.minZoom>e||e>d.maxZoom?!1:(d=(g=d.C())?Je(d,g,e):d.a?d.a[e]:null)?gd(d,b,f):!0;return d?c:null}p.wa=function(){this.a.clear();this.v()};p.Yc=pa;
-function Ye(b,c){R.call(this,b);this.tile=c}M(Ye,R);function Ze(b){b=b?b:{};this.s=document.createElement("UL");this.j=document.createElement("LI");this.s.appendChild(this.j);ne(this.j,!1);this.c=void 0!==b.collapsed?b.collapsed:!0;this.h=void 0!==b.collapsible?b.collapsible:!0;this.h||(this.c=!1);var c=void 0!==b.className?b.className:"ol-attribution",d=void 0!==b.tipLabel?b.tipLabel:"Attributions",e=void 0!==b.collapseLabel?b.collapseLabel:"\u00bb";this.u="string"===typeof e?be("SPAN",{},e):e;e=void 0!==b.label?b.label:"i";this.w="string"===typeof e?
-be("SPAN",{},e):e;d=be("BUTTON",{type:"button",title:d},this.h&&!this.c?this.u:this.w);Q(d,"click",this.G,this);c=be("DIV",c+" ol-unselectable ol-control"+(this.c&&this.h?" ol-collapsed":"")+(this.h?"":" ol-uncollapsible"),this.s,d);te.call(this,{element:c,render:b.render?b.render:$e,target:b.target});this.o=!0;this.b={};this.a={};this.D={}}M(Ze,te);
-function $e(b){if(b=b.frameState){var c,d,e,f,g,h,k,l,m,n,q,r=b.layerStatesArray,u=Wa({},b.attributions),w={},y=b.viewState.projection;d=0;for(c=r.length;d<c;d++)if(h=r[d].layer.V())if(n=I(h).toString(),m=h.i)for(e=0,f=m.length;e<f;e++)if(k=m[e],l=I(k).toString(),!(l in u)){if(g=b.usedTiles[n]){var z=h.la(y);a:{q=k;var D=y;if(q.a){var t=void 0,v=void 0,B=void 0,E=void 0;for(E in g)if(E in q.a)for(var B=g[E],C,t=0,v=q.a[E].length;t<v;++t){C=q.a[E][t];if(id(C,B)){q=!0;break a}var G=Je(z,Se(D),parseInt(E,
-10)),J=G.ha();if(B.a<G.a||B.f>G.f)if(id(C,new fd(Ea(B.a,J),Ea(B.f,J),B.b,B.c))||B.ha()>J&&id(C,G)){q=!0;break a}}q=!1}else q=!0}}else q=!1;q?(l in w&&delete w[l],u[l]=k):w[l]=k}c=[u,w];d=c[0];c=c[1];for(var A in this.b)A in d?(this.a[A]||(ne(this.b[A],!0),this.a[A]=!0),delete d[A]):A in c?(this.a[A]&&(ne(this.b[A],!1),delete this.a[A]),delete c[A]):(ge(this.b[A]),delete this.b[A],delete this.a[A]);for(A in d)e=document.createElement("LI"),e.innerHTML=d[A].b,this.s.appendChild(e),this.b[A]=e,this.a[A]=
-!0;for(A in c)e=document.createElement("LI"),e.innerHTML=c[A].b,ne(e,!1),this.s.appendChild(e),this.b[A]=e;A=!$a(this.a)||!$a(b.logos);this.o!=A&&(ne(this.element,A),this.o=A);A&&$a(this.a)?this.element.classList.add("ol-logo-only"):this.element.classList.remove("ol-logo-only");var H;b=b.logos;A=this.D;for(H in A)H in b||(ge(A[H]),delete A[H]);for(var O in b)O in A||(H=new Image,H.src=O,d=b[O],""===d?d=H:(d=be("A",{href:d}),d.appendChild(H)),this.j.appendChild(d),A[O]=d);ne(this.j,!$a(b))}else this.o&&
-(ne(this.element,!1),this.o=!1)}Ze.prototype.G=function(b){b.preventDefault();this.element.classList.toggle("ol-collapsed");if(this.c){b=this.w;var c=b.parentNode;c&&c.replaceChild(this.u,b)}else b=this.u,(c=b.parentNode)&&c.replaceChild(this.w,b);this.c=!this.c};function af(b){b=b?b:{};var c=void 0!==b.className?b.className:"ol-rotate",d=void 0!==b.label?b.label:"\u21e7";this.a=null;"string"===typeof d?this.a=be("SPAN","ol-compass",d):(this.a=d,this.a.classList.add(this.a,"ol-compass"));d=be("BUTTON",{"class":c+"-reset",type:"button",title:b.tipLabel?b.tipLabel:"Reset rotation"},this.a);Q(d,"click",af.prototype.o,this);c=be("DIV",c+" ol-unselectable ol-control",d);d=b.render?b.render:bf;this.c=b.resetNorth?b.resetNorth:void 0;te.call(this,{element:c,render:d,
-target:b.target});this.h=void 0!==b.duration?b.duration:250;this.b=void 0!==b.autoHide?b.autoHide:!0;this.j=void 0;this.b&&this.element.classList.add("ol-hidden")}M(af,te);af.prototype.o=function(b){b.preventDefault();if(void 0!==this.c)this.c();else{b=this.g;var c=b.O();if(c){var d=c.Y();void 0!==d&&(0<this.h&&(d%=2*Math.PI,d<-Math.PI&&(d+=2*Math.PI),d>Math.PI&&(d-=2*Math.PI),b.fa(dd({rotation:d,duration:this.h,easing:$c}))),c.set("rotation",0))}}};
-function bf(b){if(b=b.frameState){b=b.viewState.rotation;if(b!=this.j){var c="rotate("+b+"rad)";if(this.b){var d=this.element.classList.contains("ol-hidden");d||0!==b?d&&0!==b&&this.element.classList.remove("ol-hidden"):this.element.classList.add("ol-hidden")}this.a.style.msTransform=c;this.a.style.webkitTransform=c;this.a.style.transform=c}this.j=b}};function cf(b){b=b?b:{};var c=void 0!==b.className?b.className:"ol-zoom",d=void 0!==b.delta?b.delta:1,e=void 0!==b.zoomOutLabel?b.zoomOutLabel:"\u2212",f=void 0!==b.zoomOutTipLabel?b.zoomOutTipLabel:"Zoom out",g=be("BUTTON",{"class":c+"-in",type:"button",title:void 0!==b.zoomInTipLabel?b.zoomInTipLabel:"Zoom in"},void 0!==b.zoomInLabel?b.zoomInLabel:"+");Q(g,"click",na(cf.prototype.b,d),this);e=be("BUTTON",{"class":c+"-out",type:"button",title:f},e);Q(e,"click",na(cf.prototype.b,-d),this);c=be("DIV",
-c+" ol-unselectable ol-control",g,e);te.call(this,{element:c,target:b.target});this.a=void 0!==b.duration?b.duration:250}M(cf,te);cf.prototype.b=function(b,c){c.preventDefault();var d=this.g,e=d.O();if(e){var f=e.I();f&&(0<this.a&&d.fa(ed({resolution:f,duration:this.a,easing:$c})),d=e.constrainResolution(f,b),Yc(e,d))}};function df(b){b=b?b:{};var c=new ld;(void 0!==b.zoom?b.zoom:1)&&c.push(new cf(b.zoomOptions));(void 0!==b.rotate?b.rotate:1)&&c.push(new af(b.rotateOptions));(void 0!==b.attribution?b.attribution:1)&&c.push(new Ze(b.attributionOptions));return c};var ef;
-function ff(){var b=x.MessageChannel;"undefined"===typeof b&&"undefined"!==typeof window&&window.postMessage&&window.addEventListener&&!W("Presto")&&(b=function(){var b=document.createElement("IFRAME");b.style.display="none";b.src="";document.documentElement.appendChild(b);var c=b.contentWindow,b=c.document;b.open();b.write("");b.close();var d="callImmediate"+Math.random(),e="file:"==c.location.protocol?"*":c.location.protocol+"//"+c.location.host,b=ma(function(b){if(("*"==e||b.origin==e)&&b.data==
+function ce(b,c,d){function e(d){d&&c.appendChild(da(d)?b.createTextNode(d):d)}for(var f=2;f<d.length;f++){var g=d[f];!ca(g)||ha(g)&&0<g.nodeType?e(g):pd(de(g)?qd(g):g,e)}}function ee(b){for(var c;c=b.firstChild;)b.removeChild(c)}function fe(b,c,d){b.insertBefore(c,b.childNodes[d]||null)}function ge(b){b&&b.parentNode&&b.parentNode.removeChild(b)}function he(b,c){var d=c.parentNode;d&&d.replaceChild(b,c)}
+function ie(b,c){if(!b||!c)return!1;if(b.contains&&1==c.nodeType)return b==c||b.contains(c);if("undefined"!=typeof b.compareDocumentPosition)return b==c||!!(b.compareDocumentPosition(c)&16);for(;c&&b!=c;)c=c.parentNode;return c==b}function Yd(b){return 9==b.nodeType?b:b.ownerDocument||b.document}function de(b){if(b&&"number"==typeof b.length){if(ha(b))return"function"==typeof b.item||"string"==typeof b.item;if(ga(b))return"function"==typeof b.item}return!1}
+function Xd(b){this.a=b||x.document||document}Xd.prototype.appendChild=function(b,c){b.appendChild(c)};function je(b,c,d,e){this.top=b;this.right=c;this.bottom=d;this.left=e}p=je.prototype;p.ha=function(){return this.right-this.left};p.clone=function(){return new je(this.top,this.right,this.bottom,this.left)};p.ceil=function(){this.top=Math.ceil(this.top);this.right=Math.ceil(this.right);this.bottom=Math.ceil(this.bottom);this.left=Math.ceil(this.left);return this};
+p.floor=function(){this.top=Math.floor(this.top);this.right=Math.floor(this.right);this.bottom=Math.floor(this.bottom);this.left=Math.floor(this.left);return this};p.round=function(){this.top=Math.round(this.top);this.right=Math.round(this.right);this.bottom=Math.round(this.bottom);this.left=Math.round(this.left);return this};p.scale=function(b,c){var d=ea(c)?c:b;this.left*=b;this.right*=b;this.top*=d;this.bottom*=d;return this};function ke(b,c){var d=Yd(b);return d.defaultView&&d.defaultView.getComputedStyle&&(d=d.defaultView.getComputedStyle(b,null))?d[c]||d.getPropertyValue(c)||"":""}function le(b){var c;try{c=b.getBoundingClientRect()}catch(d){return{left:0,top:0,right:0,bottom:0}}Gd&&b.ownerDocument.body&&(b=b.ownerDocument,c.left-=b.documentElement.clientLeft+b.body.clientLeft,c.top-=b.documentElement.clientTop+b.body.clientTop);return c}
+function me(b){var c=ne;if("none"!=(ke(b,"display")||(b.currentStyle?b.currentStyle.display:null)||b.style&&b.style.display))return c(b);var d=b.style,e=d.display,f=d.visibility,g=d.position;d.visibility="hidden";d.position="absolute";d.display="inline";b=c(b);d.display=e;d.position=g;d.visibility=f;return b}function ne(b){var c=b.offsetWidth,d=b.offsetHeight,e=Jd&&!c&&!d;return(void 0===c||e)&&b.getBoundingClientRect?(b=le(b),new Vd(b.right-b.left,b.bottom-b.top)):new Vd(c,d)}
+function oe(b,c){b.style.display=c?"":"none"}function pe(b,c,d,e){if(/^\d+px?$/.test(c))return parseInt(c,10);var f=b.style[d],g=b.runtimeStyle[d];b.runtimeStyle[d]=b.currentStyle[d];b.style[d]=c;c=b.style[e];b.style[d]=f;b.runtimeStyle[d]=g;return c}function qe(b,c){var d=b.currentStyle?b.currentStyle[c]:null;return d?pe(b,d,"left","pixelLeft"):0}var re={thin:2,medium:4,thick:6};
+function se(b,c){if("none"==(b.currentStyle?b.currentStyle[c+"Style"]:null))return 0;var d=b.currentStyle?b.currentStyle[c+"Width"]:null;return d in re?re[d]:pe(b,d,"left","pixelLeft")};function te(b,c,d){R.call(this,b);this.map=c;this.frameState=void 0!==d?d:null}M(te,R);function ue(b){T.call(this);this.element=b.element?b.element:null;this.c=this.B=null;this.h=[];this.render=b.render?b.render:pa;b.target&&(this.B=Zd(b.target))}M(ue,T);ue.prototype.J=function(){ge(this.element);ue.X.J.call(this)};ue.prototype.setMap=function(b){this.c&&ge(this.element);for(var c=0,d=this.h.length;c<d;++c)N(this.h[c]);this.h.length=0;if(this.c=b)(this.B?this.B:b.j).appendChild(this.element),this.render!==pa&&this.h.push(Q(b,"postrender",this.render,this)),b.render()};function ve(){this.f=0;this.c={};this.b=this.a=null}p=ve.prototype;p.clear=function(){this.f=0;this.c={};this.b=this.a=null};function we(b,c){return b.c.hasOwnProperty(c)}function xe(b,c){for(var d=b.a;d;)c.call(void 0,d.Ia,d.Rb,b),d=d.ma}p.get=function(b){b=this.c[b];if(b===this.b)return b.Ia;b===this.a?(this.a=this.a.ma,this.a.Ra=null):(b.ma.Ra=b.Ra,b.Ra.ma=b.ma);b.ma=null;b.Ra=this.b;this.b=this.b.ma=b;return b.Ia};
+p.pop=function(){var b=this.a;delete this.c[b.Rb];b.ma&&(b.ma.Ra=null);this.a=b.ma;this.a||(this.b=null);--this.f;return b.Ia};p.replace=function(b,c){this.get(b);this.c[b].Ia=c};p.set=function(b,c){var d={Rb:b,ma:null,Ra:this.b,Ia:c};this.b?this.b.ma=d:this.a=d;this.b=d;this.c[b]=d;++this.f};function ye(b){ve.call(this);this.g=void 0!==b?b:2048}M(ye,ve);function ze(b){return b.f>b.g}function Ae(b,c){for(var d,e;ze(b);){d=b.a.Ia;e=d.L[0].toString();var f;if(f=e in c)d=d.L,f=gd(c[e],d[1],d[2]);if(f)break;else jb(b.pop())}};function Be(b,c){mb.call(this);this.L=b;this.state=c;this.a=null;this.key=""}M(Be,mb);function Ce(b){S(b,"change")}Be.prototype.getKey=function(){return I(this).toString()};Be.prototype.N=function(){return this.state};function De(b){T.call(this);this.c=lc(b.projection);this.i=Ee(b.attributions);this.w=b.logo;this.B=void 0!==b.state?b.state:"ready";this.j=void 0!==b.wrapX?b.wrapX:!1}M(De,T);function Ee(b){if("string"===typeof b)return[new jd({html:b})];if(b instanceof jd)return[b];if(Array.isArray(b)){for(var c=b.length,d=Array(c),e=0;e<c;e++){var f=b[e];d[e]="string"===typeof f?new jd({html:f}):f}return d}return null}De.prototype.N=function(){return this.B};De.prototype.wa=function(){this.v()};function Fe(b){this.minZoom=void 0!==b.minZoom?b.minZoom:0;this.b=b.resolutions;this.maxZoom=this.b.length-1;this.f=void 0!==b.origin?b.origin:null;this.g=null;void 0!==b.origins&&(this.g=b.origins);var c=b.extent;void 0===c||this.f||this.g||(this.f=bc(c));this.h=null;void 0!==b.tileSizes&&(this.h=b.tileSizes);this.l=void 0!==b.tileSize?b.tileSize:this.h?null:256;this.i=void 0!==c?c:null;this.a=null;void 0!==b.sizes?this.a=b.sizes.map(function(b){return new fd(Math.min(0,b[0]),Math.max(b[0]-1,-1),
+Math.min(0,b[1]),Math.max(b[1]-1,-1))},this):c&&Ge(this,c);this.c=[0,0]}var He=[0,0,0];function Ie(b,c,d,e,f){f=Je(b,c,f);for(c=c[0]-1;c>=b.minZoom;){if(d.call(null,c,Ke(b,f,c,e)))return!0;--c}return!1}Fe.prototype.C=function(){return this.i};Fe.prototype.ka=function(b){return this.f?this.f:this.g[b]};Fe.prototype.I=function(b){return this.b[b]};Fe.prototype.Nb=function(){return this.b};function Le(b,c,d,e){return c[0]<b.maxZoom?(e=Je(b,c,e),Ke(b,e,c[0]+1,d)):null}
+function Me(b,c,d,e){Ne(b,c[0],c[1],d,!1,He);var f=He[1],g=He[2];Ne(b,c[2],c[3],d,!0,He);b=He[1];c=He[2];void 0!==e?(e.a=f,e.f=b,e.b=g,e.c=c):e=new fd(f,b,g,c);return e}function Ke(b,c,d,e){d=b.I(d);return Me(b,c,d,e)}function Oe(b,c){var d=b.ka(c[0]),e=b.I(c[0]),f=tb(Pe(b,c[0]),b.c);return[d[0]+(c[1]+.5)*f[0]*e,d[1]+(c[2]+.5)*f[1]*e]}function Je(b,c,d){var e=b.ka(c[0]),f=b.I(c[0]);b=tb(Pe(b,c[0]),b.c);var g=e[0]+c[1]*b[0]*f;c=e[1]+c[2]*b[1]*f;return Ob(g,c,g+b[0]*f,c+b[1]*f,d)}
+function Ne(b,c,d,e,f,g){var h=Qe(b,e),k=e/b.I(h),l=b.ka(h);b=tb(Pe(b,h),b.c);c=k*Math.floor((c-l[0])/e+(f?.5:0))/b[0];d=k*Math.floor((d-l[1])/e+(f?0:.5))/b[1];f?(c=Math.ceil(c)-1,d=Math.ceil(d)-1):(c=Math.floor(c),d=Math.floor(d));f=c;void 0!==g?(g[0]=h,g[1]=f,g[2]=d):g=[h,f,d];return g}function Re(b,c,d){d=b.I(d);return Ne(b,c[0],c[1],d,!1,void 0)}function Pe(b,c){return b.l?b.l:b.h[c]}function Qe(b,c){var d=Ia(b.b,c,0);return Ca(d,b.minZoom,b.maxZoom)}
+function Ge(b,c){for(var d=b.b.length,e=Array(d),f=b.minZoom;f<d;++f)e[f]=Ke(b,c,f);b.a=e}function Se(b){var c=b.c;if(!c){var c=Te(b),d=Ue(c,void 0,void 0),c=new Fe({extent:c,origin:bc(c),resolutions:d,tileSize:void 0});b.c=c}return c}function Ue(b,c,d){c=void 0!==c?c:42;var e=Wb(b);b=Vb(b);d=tb(void 0!==d?d:256);d=Math.max(b/d[0],e/d[1]);c+=1;e=Array(c);for(b=0;b<c;++b)e[b]=d/Math.pow(2,b);return e}function Te(b){b=lc(b);var c=b.C();c||(b=180*hc.degrees/pc(b),c=Ob(-b,-b,b,b));return c};function Ve(b){De.call(this,{attributions:b.attributions,extent:b.extent,logo:b.logo,projection:b.projection,state:b.state,wrapX:b.wrapX});this.G=void 0!==b.opaque?b.opaque:!1;this.Y=void 0!==b.tilePixelRatio?b.tilePixelRatio:1;this.tileGrid=void 0!==b.tileGrid?b.tileGrid:null;this.a=new ye(b.cacheSize);this.h=[0,0]}M(Ve,De);p=Ve.prototype;p.Qc=function(){return ze(this.a)};p.Rc=function(b,c){var d=this.bb(b);d&&Ae(d,c)};
+function We(b,c,d,e,f){c=b.bb(c);if(!c)return!1;for(var g=!0,h,k,l=e.a;l<=e.f;++l)for(var m=e.b;m<=e.c;++m)h=b.lb(d,l,m),k=!1,we(c,h)&&(h=c.get(h),(k=2===h.N())&&(k=!1!==f(h))),k||(g=!1);return g}p.kb=function(){return 0};p.lb=function(b,c,d){return b+"/"+c+"/"+d};p.Mb=function(){return this.G};p.Nb=function(){return this.tileGrid.Nb()};p.la=function(b){return this.tileGrid?this.tileGrid:Se(b)};p.bb=function(b){var c=this.c;return c&&!wc(c,b)?null:this.a};p.mb=function(){return this.Y};
+function Xe(b,c,d,e){e=b.la(e);d=b.mb(d);c=tb(Pe(e,c),b.h);return 1==d?c:sb(c,d,b.h)}function Ye(b,c,d){var e=void 0!==d?d:b.c;d=b.la(e);if(b.j&&e.f){var f=c;c=f[0];b=Oe(d,f);var e=Te(e),g=b[0],h=b[1];e[0]<=g&&g<=e[2]&&e[1]<=h&&h<=e[3]?c=f:(f=Vb(e),b[0]+=f*Math.ceil((e[0]-b[0])/f),c=Re(d,b,c))}e=c[0];b=c[1];f=c[2];d=d.minZoom>e||e>d.maxZoom?!1:(d=(g=d.C())?Ke(d,g,e):d.a?d.a[e]:null)?gd(d,b,f):!0;return d?c:null}p.wa=function(){this.a.clear();this.v()};p.Yc=pa;
+function Ze(b,c){R.call(this,b);this.tile=c}M(Ze,R);function $e(b){b=b?b:{};this.s=document.createElement("UL");this.j=document.createElement("LI");this.s.appendChild(this.j);oe(this.j,!1);this.g=void 0!==b.collapsed?b.collapsed:!0;this.i=void 0!==b.collapsible?b.collapsible:!0;this.i||(this.g=!1);var c=void 0!==b.className?b.className:"ol-attribution",d=void 0!==b.tipLabel?b.tipLabel:"Attributions",e=void 0!==b.collapseLabel?b.collapseLabel:"\u00bb";this.u="string"===typeof e?be("SPAN",{},e):e;e=void 0!==b.label?b.label:"i";this.w="string"===typeof e?
+be("SPAN",{},e):e;d=be("BUTTON",{type:"button",title:d},this.i&&!this.g?this.u:this.w);Q(d,"click",this.G,this);c=be("DIV",c+" ol-unselectable ol-control"+(this.g&&this.i?" ol-collapsed":"")+(this.i?"":" ol-uncollapsible"),this.s,d);ue.call(this,{element:c,render:b.render?b.render:af,target:b.target});this.o=!0;this.b={};this.a={};this.D={}}M($e,ue);
+function af(b){if(b=b.frameState){var c,d,e,f,g,h,k,l,m,n,q,r=b.layerStatesArray,u=Wa({},b.attributions),w={},y=b.viewState.projection;d=0;for(c=r.length;d<c;d++)if(h=r[d].layer.V())if(n=I(h).toString(),m=h.i)for(e=0,f=m.length;e<f;e++)if(k=m[e],l=I(k).toString(),!(l in u)){if(g=b.usedTiles[n]){var z=h.la(y);a:{q=k;var D=y;if(q.a){var t=void 0,v=void 0,B=void 0,E=void 0;for(E in g)if(E in q.a)for(var B=g[E],C,t=0,v=q.a[E].length;t<v;++t){C=q.a[E][t];if(id(C,B)){q=!0;break a}var G=Ke(z,Te(D),parseInt(E,
+10)),J=G.ha();if(B.a<G.a||B.f>G.f)if(id(C,new fd(Ea(B.a,J),Ea(B.f,J),B.b,B.c))||B.ha()>J&&id(C,G)){q=!0;break a}}q=!1}else q=!0}}else q=!1;q?(l in w&&delete w[l],u[l]=k):w[l]=k}c=[u,w];d=c[0];c=c[1];for(var A in this.b)A in d?(this.a[A]||(oe(this.b[A],!0),this.a[A]=!0),delete d[A]):A in c?(this.a[A]&&(oe(this.b[A],!1),delete this.a[A]),delete c[A]):(ge(this.b[A]),delete this.b[A],delete this.a[A]);for(A in d)e=document.createElement("LI"),e.innerHTML=d[A].b,this.s.appendChild(e),this.b[A]=e,this.a[A]=
+!0;for(A in c)e=document.createElement("LI"),e.innerHTML=c[A].b,oe(e,!1),this.s.appendChild(e),this.b[A]=e;A=!$a(this.a)||!$a(b.logos);this.o!=A&&(oe(this.element,A),this.o=A);A&&$a(this.a)?this.element.classList.add("ol-logo-only"):this.element.classList.remove("ol-logo-only");var H;b=b.logos;A=this.D;for(H in A)H in b||(ge(A[H]),delete A[H]);for(var O in b)O in A||(H=new Image,H.src=O,d=b[O],""===d?d=H:(d=be("A",{href:d}),d.appendChild(H)),this.j.appendChild(d),A[O]=d);oe(this.j,!$a(b))}else this.o&&
+(oe(this.element,!1),this.o=!1)}$e.prototype.G=function(b){b.preventDefault();this.element.classList.toggle("ol-collapsed");this.g?he(this.u,this.w):he(this.w,this.u);this.g=!this.g};function bf(b){b=b?b:{};var c=void 0!==b.className?b.className:"ol-rotate",d=void 0!==b.label?b.label:"\u21e7";this.a=null;"string"===typeof d?this.a=be("SPAN","ol-compass",d):(this.a=d,this.a.classList.add(this.a,"ol-compass"));d=be("BUTTON",{"class":c+"-reset",type:"button",title:b.tipLabel?b.tipLabel:"Reset rotation"},this.a);Q(d,"click",bf.prototype.o,this);c=be("DIV",c+" ol-unselectable ol-control",d);d=b.render?b.render:cf;this.g=b.resetNorth?b.resetNorth:void 0;ue.call(this,{element:c,render:d,
+target:b.target});this.i=void 0!==b.duration?b.duration:250;this.b=void 0!==b.autoHide?b.autoHide:!0;this.j=void 0;this.b&&this.element.classList.add("ol-hidden")}M(bf,ue);bf.prototype.o=function(b){b.preventDefault();if(void 0!==this.g)this.g();else{b=this.c;var c=b.O();if(c){var d=c.Z();void 0!==d&&(0<this.i&&(d%=2*Math.PI,d<-Math.PI&&(d+=2*Math.PI),d>Math.PI&&(d-=2*Math.PI),b.fa(dd({rotation:d,duration:this.i,easing:$c}))),c.set("rotation",0))}}};
+function cf(b){if(b=b.frameState){b=b.viewState.rotation;if(b!=this.j){var c="rotate("+b+"rad)";if(this.b){var d=this.element.classList.contains("ol-hidden");d||0!==b?d&&0!==b&&this.element.classList.remove("ol-hidden"):this.element.classList.add("ol-hidden")}this.a.style.msTransform=c;this.a.style.webkitTransform=c;this.a.style.transform=c}this.j=b}};function df(b){b=b?b:{};var c=void 0!==b.className?b.className:"ol-zoom",d=void 0!==b.delta?b.delta:1,e=void 0!==b.zoomOutLabel?b.zoomOutLabel:"\u2212",f=void 0!==b.zoomOutTipLabel?b.zoomOutTipLabel:"Zoom out",g=be("BUTTON",{"class":c+"-in",type:"button",title:void 0!==b.zoomInTipLabel?b.zoomInTipLabel:"Zoom in"},void 0!==b.zoomInLabel?b.zoomInLabel:"+");Q(g,"click",na(df.prototype.b,d),this);e=be("BUTTON",{"class":c+"-out",type:"button",title:f},e);Q(e,"click",na(df.prototype.b,-d),this);c=be("DIV",
+c+" ol-unselectable ol-control",g,e);ue.call(this,{element:c,target:b.target});this.a=void 0!==b.duration?b.duration:250}M(df,ue);df.prototype.b=function(b,c){c.preventDefault();var d=this.c,e=d.O();if(e){var f=e.I();f&&(0<this.a&&d.fa(ed({resolution:f,duration:this.a,easing:$c})),d=e.constrainResolution(f,b),Yc(e,d))}};function ef(b){b=b?b:{};var c=new ld;(void 0!==b.zoom?b.zoom:1)&&c.push(new df(b.zoomOptions));(void 0!==b.rotate?b.rotate:1)&&c.push(new bf(b.rotateOptions));(void 0!==b.attribution?b.attribution:1)&&c.push(new $e(b.attributionOptions));return c};var ff=Jd?"webkitfullscreenchange":Id?"mozfullscreenchange":Gd?"MSFullscreenChange":"fullscreenchange";function gf(){var b=Wd().a,c=b.body;return!!(c.webkitRequestFullscreen||c.mozRequestFullScreen&&b.mozFullScreenEnabled||c.msRequestFullscreen&&b.msFullscreenEnabled||c.requestFullscreen&&b.fullscreenEnabled)}
+function hf(b){b.webkitRequestFullscreen?b.webkitRequestFullscreen():b.mozRequestFullScreen?b.mozRequestFullScreen():b.msRequestFullscreen?b.msRequestFullscreen():b.requestFullscreen&&b.requestFullscreen()}function jf(){var b=Wd().a;return!!(b.webkitIsFullScreen||b.mozFullScreen||b.msFullscreenElement||b.fullscreenElement)};function kf(b){b=b?b:{};this.a=void 0!==b.className?b.className:"ol-full-screen";var c=void 0!==b.label?b.label:"\u2922";this.b="string"===typeof c?document.createTextNode(c):c;c=void 0!==b.labelActive?b.labelActive:"\u00d7";this.g="string"===typeof c?document.createTextNode(c):c;c=b.tipLabel?b.tipLabel:"Toggle full-screen";c=be("BUTTON",{"class":this.a+"-"+jf(),type:"button",title:c},this.b);Q(c,"click",this.s,this);var d=this.a+" ol-unselectable ol-control "+(gf()?"":"ol-unsupported"),c=be("DIV",
+d,c);ue.call(this,{element:c,target:b.target});this.o=void 0!==b.keys?b.keys:!1;this.i=b.source}M(kf,ue);
+kf.prototype.s=function(b){b.preventDefault();gf()&&(b=this.c)&&(jf()?(b=Wd().a,b.webkitCancelFullScreen?b.webkitCancelFullScreen():b.mozCancelFullScreen?b.mozCancelFullScreen():b.msExitFullscreen?b.msExitFullscreen():b.exitFullscreen&&b.exitFullscreen()):(b=this.i?Zd(this.i):b.Na(),this.o?b.mozRequestFullScreenWithKeys?b.mozRequestFullScreenWithKeys():b.webkitRequestFullscreen?b.webkitRequestFullscreen():hf(b):hf(b)))};
+kf.prototype.j=function(){var b=this.element.firstElementChild,c=this.c;jf()?(b.className=this.a+"-true",he(this.g,this.b)):(b.className=this.a+"-false",he(this.b,this.g));c&&c.vb()};kf.prototype.setMap=function(b){kf.X.setMap.call(this,b);b&&this.h.push(Q(x.document,ff,this.j,this))};var lf;
+function mf(){var b=x.MessageChannel;"undefined"===typeof b&&"undefined"!==typeof window&&window.postMessage&&window.addEventListener&&!W("Presto")&&(b=function(){var b=document.createElement("IFRAME");b.style.display="none";b.src="";document.documentElement.appendChild(b);var c=b.contentWindow,b=c.document;b.open();b.write("");b.close();var d="callImmediate"+Math.random(),e="file:"==c.location.protocol?"*":c.location.protocol+"//"+c.location.host,b=ma(function(b){if(("*"==e||b.origin==e)&&b.data==
 d)this.port1.onmessage()},this);c.addEventListener("message",b,!1);this.port1={};this.port2={postMessage:function(){c.postMessage(d,e)}}});if("undefined"!==typeof b&&!W("Trident")&&!W("MSIE")){var c=new b,d={},e=d;c.port1.onmessage=function(){if(void 0!==d.next){d=d.next;var b=d.lc;d.lc=null;b()}};return function(b){e.next={lc:b};e=e.next;c.port2.postMessage(0)}}return"undefined"!==typeof document&&"onreadystatechange"in document.createElement("SCRIPT")?function(b){var c=document.createElement("SCRIPT");
-c.onreadystatechange=function(){c.onreadystatechange=null;c.parentNode.removeChild(c);c=null;b();b=null};document.documentElement.appendChild(c)}:function(b){x.setTimeout(b,0)}};function gf(b,c,d){R.call(this,b);this.a=c;b=d?d:{};this.buttons=hf(b);this.pressure=jf(b,this.buttons);this.bubbles="bubbles"in b?b.bubbles:!1;this.cancelable="cancelable"in b?b.cancelable:!1;this.view="view"in b?b.view:null;this.detail="detail"in b?b.detail:null;this.screenX="screenX"in b?b.screenX:0;this.screenY="screenY"in b?b.screenY:0;this.clientX="clientX"in b?b.clientX:0;this.clientY="clientY"in b?b.clientY:0;this.button="button"in b?b.button:0;this.relatedTarget="relatedTarget"in b?b.relatedTarget:
-null;this.pointerId="pointerId"in b?b.pointerId:0;this.width="width"in b?b.width:0;this.height="height"in b?b.height:0;this.pointerType="pointerType"in b?b.pointerType:"";this.isPrimary="isPrimary"in b?b.isPrimary:!1;c.preventDefault&&(this.preventDefault=function(){c.preventDefault()})}M(gf,R);function hf(b){if(b.buttons||kf)b=b.buttons;else switch(b.which){case 1:b=1;break;case 2:b=4;break;case 3:b=2;break;default:b=0}return b}function jf(b,c){var d=0;b.pressure?d=b.pressure:d=c?.5:0;return d}
-var kf=!1;try{kf=1===(new MouseEvent("click",{buttons:1})).buttons}catch(b){};function lf(b,c){var d=document.createElement("CANVAS");b&&(d.width=b);c&&(d.height=c);return d.getContext("2d")}
-var mf=function(){var b;return function(){if(void 0===b){var c=document.createElement("P"),d,e={webkitTransform:"-webkit-transform",OTransform:"-o-transform",msTransform:"-ms-transform",MozTransform:"-moz-transform",transform:"transform"};document.body.appendChild(c);for(var f in e)f in c.style&&(c.style[f]="translate(1px,1px)",d=x.getComputedStyle(c).getPropertyValue(e[f]));document.body.removeChild(c);b=d&&"none"!==d}return b}}(),nf=function(){var b;return function(){if(void 0===b){var c=document.createElement("P"),
+c.onreadystatechange=function(){c.onreadystatechange=null;c.parentNode.removeChild(c);c=null;b();b=null};document.documentElement.appendChild(c)}:function(b){x.setTimeout(b,0)}};function nf(b,c,d){R.call(this,b);this.a=c;b=d?d:{};this.buttons=of(b);this.pressure=pf(b,this.buttons);this.bubbles="bubbles"in b?b.bubbles:!1;this.cancelable="cancelable"in b?b.cancelable:!1;this.view="view"in b?b.view:null;this.detail="detail"in b?b.detail:null;this.screenX="screenX"in b?b.screenX:0;this.screenY="screenY"in b?b.screenY:0;this.clientX="clientX"in b?b.clientX:0;this.clientY="clientY"in b?b.clientY:0;this.button="button"in b?b.button:0;this.relatedTarget="relatedTarget"in b?b.relatedTarget:
+null;this.pointerId="pointerId"in b?b.pointerId:0;this.width="width"in b?b.width:0;this.height="height"in b?b.height:0;this.pointerType="pointerType"in b?b.pointerType:"";this.isPrimary="isPrimary"in b?b.isPrimary:!1;c.preventDefault&&(this.preventDefault=function(){c.preventDefault()})}M(nf,R);function of(b){if(b.buttons||qf)b=b.buttons;else switch(b.which){case 1:b=1;break;case 2:b=4;break;case 3:b=2;break;default:b=0}return b}function pf(b,c){var d=0;b.pressure?d=b.pressure:d=c?.5:0;return d}
+var qf=!1;try{qf=1===(new MouseEvent("click",{buttons:1})).buttons}catch(b){};function rf(b,c){var d=document.createElement("CANVAS");b&&(d.width=b);c&&(d.height=c);return d.getContext("2d")}
+var sf=function(){var b;return function(){if(void 0===b){var c=document.createElement("P"),d,e={webkitTransform:"-webkit-transform",OTransform:"-o-transform",msTransform:"-ms-transform",MozTransform:"-moz-transform",transform:"transform"};document.body.appendChild(c);for(var f in e)f in c.style&&(c.style[f]="translate(1px,1px)",d=x.getComputedStyle(c).getPropertyValue(e[f]));document.body.removeChild(c);b=d&&"none"!==d}return b}}(),tf=function(){var b;return function(){if(void 0===b){var c=document.createElement("P"),
 d,e={webkitTransform:"-webkit-transform",OTransform:"-o-transform",msTransform:"-ms-transform",MozTransform:"-moz-transform",transform:"transform"};document.body.appendChild(c);for(var f in e)f in c.style&&(c.style[f]="translate3d(1px,1px,1px)",d=x.getComputedStyle(c).getPropertyValue(e[f]));document.body.removeChild(c);b=d&&"none"!==d}return b}}();
-function of(b,c){var d=b.style;d.WebkitTransform=c;d.MozTransform=c;d.a=c;d.msTransform=c;d.transform=c;Gd&&Qd("9.0")&&(b.style.transformOrigin="0 0")}function pf(b,c){var d;if(nf()){var e=Array(16);for(d=0;16>d;++d)e[d]=c[d].toFixed(6);of(b,"matrix3d("+e.join(",")+")")}else if(mf()){var e=[c[0],c[1],c[4],c[5],c[12],c[13]],f=Array(6);for(d=0;6>d;++d)f[d]=e[d].toFixed(6);of(b,"matrix("+f.join(",")+")")}else b.style.left=Math.round(c[12])+"px",b.style.top=Math.round(c[13])+"px"};var qf=["experimental-webgl","webgl","webkit-3d","moz-webgl"];function rf(b,c){var d,e,f=qf.length;for(e=0;e<f;++e)try{if(d=b.getContext(qf[e],c))return d}catch(g){}return null};var sf,tf="undefined"!==typeof navigator?navigator.userAgent.toLowerCase():"",uf=-1!==tf.indexOf("firefox"),vf=-1!==tf.indexOf("safari")&&-1===tf.indexOf("chrom"),wf=-1!==tf.indexOf("macintosh"),xf=x.devicePixelRatio||1,yf=!1,zf=function(){if(!("HTMLCanvasElement"in x))return!1;try{var b=lf();return b?(void 0!==b.setLineDash&&(yf=!0),!0):!1}catch(c){return!1}}(),Af="ontouchstart"in x,Bf="PointerEvent"in x,Cf=!!x.navigator.msPointerEnabled,Df=!1,Ef=[];
-if("WebGLRenderingContext"in x)try{var Ff=rf(document.createElement("CANVAS"),{failIfMajorPerformanceCaveat:!0});Ff&&(Df=!0,Ef=Ff.getSupportedExtensions())}catch(b){}sf=Df;oa=Ef;function Gf(b,c){this.a=b;this.g=c};function Hf(b){Gf.call(this,b,{mousedown:this.Ud,mousemove:this.Vd,mouseup:this.Yd,mouseover:this.Xd,mouseout:this.Wd});this.b=b.b;this.f=[]}M(Hf,Gf);function If(b,c){for(var d=b.f,e=c.clientX,f=c.clientY,g=0,h=d.length,k;g<h&&(k=d[g]);g++){var l=Math.abs(f-k[1]);if(25>=Math.abs(e-k[0])&&25>=l)return!0}return!1}function Jf(b){var c=Kf(b,b),d=c.preventDefault;c.preventDefault=function(){b.preventDefault();d()};c.pointerId=1;c.isPrimary=!0;c.pointerType="mouse";return c}p=Hf.prototype;
-p.Ud=function(b){if(!If(this,b)){if((1).toString()in this.b){var c=Jf(b);Lf(this.a,Mf,c,b);delete this.b[(1).toString()]}c=Jf(b);this.b[(1).toString()]=b;Lf(this.a,Nf,c,b)}};p.Vd=function(b){if(!If(this,b)){var c=Jf(b);Lf(this.a,Of,c,b)}};p.Yd=function(b){if(!If(this,b)){var c=this.b[(1).toString()];c&&c.button===b.button&&(c=Jf(b),Lf(this.a,Pf,c,b),delete this.b[(1).toString()])}};p.Xd=function(b){if(!If(this,b)){var c=Jf(b);Qf(this.a,c,b)}};
-p.Wd=function(b){if(!If(this,b)){var c=Jf(b);Rf(this.a,c,b)}};function Sf(b){Gf.call(this,b,{MSPointerDown:this.ce,MSPointerMove:this.de,MSPointerUp:this.ge,MSPointerOut:this.ee,MSPointerOver:this.fe,MSPointerCancel:this.be,MSGotPointerCapture:this.$d,MSLostPointerCapture:this.ae});this.b=b.b;this.f=["","unavailable","touch","pen","mouse"]}M(Sf,Gf);function Tf(b,c){var d=c;ea(c.pointerType)&&(d=Kf(c,c),d.pointerType=b.f[c.pointerType]);return d}p=Sf.prototype;p.ce=function(b){this.b[b.pointerId.toString()]=b;var c=Tf(this,b);Lf(this.a,Nf,c,b)};
-p.de=function(b){var c=Tf(this,b);Lf(this.a,Of,c,b)};p.ge=function(b){var c=Tf(this,b);Lf(this.a,Pf,c,b);delete this.b[b.pointerId.toString()]};p.ee=function(b){var c=Tf(this,b);Rf(this.a,c,b)};p.fe=function(b){var c=Tf(this,b);Qf(this.a,c,b)};p.be=function(b){var c=Tf(this,b);Lf(this.a,Mf,c,b);delete this.b[b.pointerId.toString()]};p.ae=function(b){S(this.a,new gf("lostpointercapture",b,b))};p.$d=function(b){S(this.a,new gf("gotpointercapture",b,b))};function Uf(b){Gf.call(this,b,{pointerdown:this.re,pointermove:this.se,pointerup:this.ve,pointerout:this.te,pointerover:this.ue,pointercancel:this.qe,gotpointercapture:this.wd,lostpointercapture:this.Td})}M(Uf,Gf);p=Uf.prototype;p.re=function(b){Vf(this.a,b)};p.se=function(b){Vf(this.a,b)};p.ve=function(b){Vf(this.a,b)};p.te=function(b){Vf(this.a,b)};p.ue=function(b){Vf(this.a,b)};p.qe=function(b){Vf(this.a,b)};p.Td=function(b){Vf(this.a,b)};p.wd=function(b){Vf(this.a,b)};function Wf(b,c){Gf.call(this,b,{touchstart:this.He,touchmove:this.Ge,touchend:this.Fe,touchcancel:this.Ee});this.b=b.b;this.l=c;this.f=void 0;this.h=0;this.c=void 0}M(Wf,Gf);p=Wf.prototype;p.Vc=function(){this.h=0;this.c=void 0};
-function Xf(b,c,d){c=Kf(c,d);c.pointerId=d.identifier+2;c.bubbles=!0;c.cancelable=!0;c.detail=b.h;c.button=0;c.buttons=1;c.width=d.webkitRadiusX||d.radiusX||0;c.height=d.webkitRadiusY||d.radiusY||0;c.pressure=d.webkitForce||d.force||.5;c.isPrimary=b.f===d.identifier;c.pointerType="touch";c.clientX=d.clientX;c.clientY=d.clientY;c.screenX=d.screenX;c.screenY=d.screenY;return c}
-function Yf(b,c,d){function e(){c.preventDefault()}var f=Array.prototype.slice.call(c.changedTouches),g=f.length,h,k;for(h=0;h<g;++h)k=Xf(b,c,f[h]),k.preventDefault=e,d.call(b,c,k)}
-p.He=function(b){var c=b.touches,d=Object.keys(this.b),e=d.length;if(e>=c.length){var f=[],g,h,k;for(g=0;g<e;++g){h=d[g];k=this.b[h];var l;if(!(l=1==h))a:{l=c.length;for(var m=void 0,n=0;n<l;n++)if(m=c[n],m.identifier===h-2){l=!0;break a}l=!1}l||f.push(k.out)}for(g=0;g<f.length;++g)this.Eb(b,f[g])}c=b.changedTouches[0];d=Object.keys(this.b).length;if(0===d||1===d&&(1).toString()in this.b)this.f=c.identifier,void 0!==this.c&&x.clearTimeout(this.c);Zf(this,b);this.h++;Yf(this,b,this.pe)};
-p.pe=function(b,c){this.b[c.pointerId]={target:c.target,out:c,Sc:c.target};var d=this.a;c.bubbles=!0;Lf(d,$f,c,b);d=this.a;c.bubbles=!1;Lf(d,ag,c,b);Lf(this.a,Nf,c,b)};p.Ge=function(b){b.preventDefault();Yf(this,b,this.Zd)};p.Zd=function(b,c){var d=this.b[c.pointerId];if(d){var e=d.out,f=d.Sc;Lf(this.a,Of,c,b);e&&f!==c.target&&(e.relatedTarget=c.target,c.relatedTarget=f,e.target=f,c.target?(Rf(this.a,e,b),Qf(this.a,c,b)):(c.target=f,c.relatedTarget=null,this.Eb(b,c)));d.out=c;d.Sc=c.target}};
-p.Fe=function(b){Zf(this,b);Yf(this,b,this.Ie)};p.Ie=function(b,c){Lf(this.a,Pf,c,b);this.a.out(c,b);var d=this.a;c.bubbles=!1;Lf(d,bg,c,b);delete this.b[c.pointerId];c.isPrimary&&(this.f=void 0,this.c=x.setTimeout(this.Vc.bind(this),200))};p.Ee=function(b){Yf(this,b,this.Eb)};p.Eb=function(b,c){Lf(this.a,Mf,c,b);this.a.out(c,b);var d=this.a;c.bubbles=!1;Lf(d,bg,c,b);delete this.b[c.pointerId];c.isPrimary&&(this.f=void 0,this.c=x.setTimeout(this.Vc.bind(this),200))};
-function Zf(b,c){var d=b.l.f,e=c.changedTouches[0];if(b.f===e.identifier){var f=[e.clientX,e.clientY];d.push(f);x.setTimeout(function(){La(d,f)},2500)}};function cg(b){mb.call(this);this.g=b;this.b={};this.c={};this.a=[];Bf?dg(this,new Uf(this)):Cf?dg(this,new Sf(this)):(b=new Hf(this),dg(this,b),Af&&dg(this,new Wf(this,b)));b=this.a.length;for(var c,d=0;d<b;d++)c=this.a[d],eg(this,Object.keys(c.g))}M(cg,mb);function dg(b,c){var d=Object.keys(c.g);d&&(d.forEach(function(b){var d=c.g[b];d&&(this.c[b]=d.bind(c))},b),b.a.push(c))}cg.prototype.f=function(b){var c=this.c[b.type];c&&c(b)};
-function eg(b,c){c.forEach(function(b){Q(this.g,b,this.f,this)},b)}function fg(b,c){c.forEach(function(b){gb(this.g,b,this.f,this)},b)}function Kf(b,c){for(var d={},e,f=0,g=gg.length;f<g;f++)e=gg[f][0],d[e]=b[e]||c[e]||gg[f][1];return d}cg.prototype.out=function(b,c){b.bubbles=!0;Lf(this,hg,b,c)};function Rf(b,c,d){b.out(c,d);var e=c.relatedTarget;e&&he(c.target,e)||(c.bubbles=!1,Lf(b,bg,c,d))}
-function Qf(b,c,d){c.bubbles=!0;Lf(b,$f,c,d);var e=c.relatedTarget;e&&he(c.target,e)||(c.bubbles=!1,Lf(b,ag,c,d))}function Lf(b,c,d,e){S(b,new gf(c,e,d))}function Vf(b,c){S(b,new gf(c.type,c,c))}cg.prototype.J=function(){for(var b=this.a.length,c,d=0;d<b;d++)c=this.a[d],fg(this,Object.keys(c.g));cg.$.J.call(this)};
-var Of="pointermove",Nf="pointerdown",Pf="pointerup",$f="pointerover",hg="pointerout",ag="pointerenter",bg="pointerleave",Mf="pointercancel",gg=[["bubbles",!1],["cancelable",!1],["view",null],["detail",null],["screenX",0],["screenY",0],["clientX",0],["clientY",0],["ctrlKey",!1],["altKey",!1],["shiftKey",!1],["metaKey",!1],["button",0],["relatedTarget",null],["buttons",0],["pointerId",0],["width",0],["height",0],["pressure",0],["tiltX",0],["tiltY",0],["pointerType",""],["hwTimestamp",0],["isPrimary",
-!1],["type",""],["target",null],["currentTarget",null],["which",0]];function ig(b,c,d,e,f){se.call(this,b,c,f);this.originalEvent=d;this.pixel=c.vc(d);this.coordinate=c.ta(this.pixel);this.dragging=void 0!==e?e:!1}M(ig,se);ig.prototype.preventDefault=function(){ig.$.preventDefault.call(this);this.originalEvent.preventDefault()};ig.prototype.stopPropagation=function(){ig.$.stopPropagation.call(this);this.originalEvent.stopPropagation()};function jg(b,c,d,e,f){ig.call(this,b,c,d.a,e,f);this.a=d}M(jg,ig);
-function kg(b){mb.call(this);this.f=b;this.h=0;this.l=!1;this.c=[];this.b=null;b=this.f.a;this.s=0;this.o={};this.g=new cg(b);this.a=null;this.i=Q(this.g,Nf,this.Id,this);this.j=Q(this.g,Of,this.xe,this)}M(kg,mb);function lg(b,c){var d;d=new jg(mg,b.f,c);S(b,d);0!==b.h?(x.clearTimeout(b.h),b.h=0,d=new jg(ng,b.f,c),S(b,d)):b.h=x.setTimeout(function(){this.h=0;var b=new jg(og,this.f,c);S(this,b)}.bind(b),250)}
-function pg(b,c){c.type==qg||c.type==rg?delete b.o[c.pointerId]:c.type==sg&&(b.o[c.pointerId]=!0);b.s=Object.keys(b.o).length}p=kg.prototype;p.zc=function(b){pg(this,b);var c=new jg(qg,this.f,b);S(this,c);!this.l&&0===b.button&&lg(this,this.b);0===this.s&&(this.c.forEach(N),this.c.length=0,this.l=!1,this.b=null,jb(this.a),this.a=null)};
-p.Id=function(b){pg(this,b);var c=new jg(sg,this.f,b);S(this,c);this.b=b;0===this.c.length&&(this.a=new cg(document),this.c.push(Q(this.a,tg,this.je,this),Q(this.a,qg,this.zc,this),Q(this.g,rg,this.zc,this)))};p.je=function(b){if(b.clientX!=this.b.clientX||b.clientY!=this.b.clientY){this.l=!0;var c=new jg(ug,this.f,b,this.l);S(this,c)}b.preventDefault()};p.xe=function(b){S(this,new jg(b.type,this.f,b,!(!this.b||b.clientX==this.b.clientX&&b.clientY==this.b.clientY)))};
-p.J=function(){this.j&&(N(this.j),this.j=null);this.i&&(N(this.i),this.i=null);this.c.forEach(N);this.c.length=0;this.a&&(jb(this.a),this.a=null);this.g&&(jb(this.g),this.g=null);kg.$.J.call(this)};var og="singleclick",mg="click",ng="dblclick",ug="pointerdrag",tg="pointermove",sg="pointerdown",qg="pointerup",rg="pointercancel",vg={Ue:og,Je:mg,Ke:ng,Ne:ug,Qe:tg,Me:sg,Te:qg,Se:"pointerover",Re:"pointerout",Oe:"pointerenter",Pe:"pointerleave",Le:rg};function wg(b){T.call(this);var c=Wa({},b);c.opacity=void 0!==b.opacity?b.opacity:1;c.visible=void 0!==b.visible?b.visible:!0;c.zIndex=void 0!==b.zIndex?b.zIndex:0;c.maxResolution=void 0!==b.maxResolution?b.maxResolution:Infinity;c.minResolution=void 0!==b.minResolution?b.minResolution:0;this.l(c)}M(wg,T);
-function xg(b){var c=b.Tb(),d=b.Ob(),e=b.cb(),f=b.C(),g=b.Ub(),h=b.get("maxResolution"),k=b.get("minResolution");return{layer:b,opacity:Ca(c,0,1),Zb:d,visible:e,eb:!0,extent:f,zIndex:g,maxResolution:h,minResolution:Math.max(k,0)}}p=wg.prototype;p.C=function(){return this.get("extent")};p.Tb=function(){return this.get("opacity")};p.cb=function(){return this.get("visible")};p.Ub=function(){return this.get("zIndex")};p.Fc=function(b){this.set("opacity",b)};p.Gc=function(b){this.set("visible",b)};
-p.Hc=function(b){this.set("zIndex",b)};function yg(){};function zg(b,c,d,e,f,g){R.call(this,b,c);this.vectorContext=d;this.frameState=e;this.context=f;this.glContext=g}M(zg,R);function Ag(b){var c=Wa({},b);delete c.source;wg.call(this,c);this.h=this.c=this.b=null;b.map&&this.setMap(b.map);Q(this,rb("source"),this.Nd,this);this.Yb(b.source?b.source:null)}M(Ag,wg);function Bg(b,c){return b.visible&&c>=b.minResolution&&c<b.maxResolution}p=Ag.prototype;p.Kb=function(b){b=b?b:[];b.push(xg(this));return b};p.V=function(){return this.get("source")||null};p.Ob=function(){var b=this.V();return b?b.N():"undefined"};p.le=function(){this.v()};
-p.Nd=function(){this.h&&(N(this.h),this.h=null);var b=this.V();b&&(this.h=Q(b,"change",this.le,this));this.v()};p.setMap=function(b){this.b&&(N(this.b),this.b=null);b||this.v();this.c&&(N(this.c),this.c=null);b&&(this.b=Q(b,"precompose",function(b){var d=xg(this);d.eb=!1;d.zIndex=Infinity;b.frameState.layerStatesArray.push(d);b.frameState.layerStates[I(this)]=d},this),this.c=Q(this,"change",b.render,b),this.v())};p.Yb=function(b){this.set("source",b)};function Cg(b,c,d,e,f,g,h,k){Db(b);0===c&&0===d||Fb(b,c,d);1==e&&1==f||Gb(b,e,f);0!==g&&Hb(b,g);0===h&&0===k||Fb(b,h,k);return b}function Dg(b,c){return b[0]==c[0]&&b[1]==c[1]&&b[4]==c[4]&&b[5]==c[5]&&b[12]==c[12]&&b[13]==c[13]}function Eg(b,c,d){var e=b[1],f=b[5],g=b[13],h=c[0];c=c[1];d[0]=b[0]*h+b[4]*c+b[12];d[1]=e*h+f*c+g;return d};function Fg(b){ob.call(this);this.a=b}M(Fg,ob);Fg.prototype.fb=pa;Fg.prototype.Ic=dc;Fg.prototype.l=function(b,c,d){return function(e,f){return Ve(b,c,e,f,function(b){d[e]||(d[e]={});d[e][b.L.toString()]=b})}};function Gg(b){var c=b.a;c.cb()&&"ready"==c.Ob()&&b.v()}function Hg(b,c){c.Qc()&&b.postRenderFunctions.push(na(function(b,c,f){c=I(b).toString();b.Rc(f.viewState.projection,f.usedTiles[c])},c))}function Ig(b,c){if(c){var d,e,f;e=0;for(f=c.length;e<f;++e)d=c[e],b[I(d).toString()]=d}}
-function Jg(b,c){var d=c.w;void 0!==d&&("string"===typeof d?b.logos[d]="":ha(d)&&(b.logos[d.src]=d.href))}function Kg(b,c,d,e){c=I(c).toString();d=d.toString();c in b?d in b[c]?(b=b[c][d],e.a<b.a&&(b.a=e.a),e.f>b.f&&(b.f=e.f),e.b<b.b&&(b.b=e.b),e.c>b.c&&(b.c=e.c)):b[c][d]=e:(b[c]={},b[c][d]=e)}function Lg(b,c,d){return[c*(Math.round(b[0]/c)+d[0]%2/2),c*(Math.round(b[1]/c)+d[1]%2/2)]}
-function Mg(b,c,d,e,f,g,h,k,l,m){var n=I(c).toString();n in b.wantedTiles||(b.wantedTiles[n]={});var q=b.wantedTiles[n];b=b.tileQueue;var r=d.minZoom,u,w,y,z,D,t;for(t=h;t>=r;--t)for(w=Je(d,g,t,w),y=d.I(t),z=w.a;z<=w.f;++z)for(D=w.b;D<=w.c;++D)h-t<=k?(u=Ng(c,t,z,D,e,f),0==u.N()&&(q[u.L.toString()]=!0,u.getKey()in b.f||b.c([u,n,Ne(d,u.L),y])),void 0!==l&&l.call(m,u)):c.Yc(t,z,D,f)};function Og(b){this.l=b.opacity;this.i=b.rotateWithView;this.H=b.rotation;this.gb=b.scale;this.u=b.snapToPixel}Og.prototype.Y=function(){return this.H};function Pg(b){b=b||{};this.g=void 0!==b.anchor?b.anchor:[.5,.5];this.c=null;this.b=void 0!==b.anchorOrigin?b.anchorOrigin:"top-left";this.j=void 0!==b.anchorXUnits?b.anchorXUnits:"fraction";this.A=void 0!==b.anchorYUnits?b.anchorYUnits:"fraction";var c=void 0!==b.crossOrigin?b.crossOrigin:null,d=void 0!==b.img?b.img:null,e=void 0!==b.imgSize?b.imgSize:null,f=b.src;void 0!==f&&0!==f.length||!d||(f=d.src||I(d).toString());var g=void 0!==b.src?0:2,h;void 0!==b.color?(h=b.color,h=Array.isArray(h)?h:
-xd(h)):h=null;var k=Qg.ua(),l=k.get(f,c,h);l||(l=new Rg(d,f,e,c,g,h),k.set(f,c,h,l));this.a=l;this.s=void 0!==b.offset?b.offset:[0,0];this.f=void 0!==b.offsetOrigin?b.offsetOrigin:"top-left";this.h=null;this.o=void 0!==b.size?b.size:null;Og.call(this,{opacity:void 0!==b.opacity?b.opacity:1,rotation:void 0!==b.rotation?b.rotation:0,scale:void 0!==b.scale?b.scale:1,snapToPixel:void 0!==b.snapToPixel?b.snapToPixel:!0,rotateWithView:void 0!==b.rotateWithView?b.rotateWithView:!1})}M(Pg,Og);p=Pg.prototype;
-p.jb=function(){if(this.c)return this.c;var b=this.g,c=this.Pa();if("fraction"==this.j||"fraction"==this.A){if(!c)return null;b=this.g.slice();"fraction"==this.j&&(b[0]*=c[0]);"fraction"==this.A&&(b[1]*=c[1])}if("top-left"!=this.b){if(!c)return null;b===this.g&&(b=this.g.slice());if("top-right"==this.b||"bottom-right"==this.b)b[0]=-b[0]+c[0];if("bottom-left"==this.b||"bottom-right"==this.b)b[1]=-b[1]+c[1]}return this.c=b};p.T=function(b){return this.a.T(b)};p.wc=function(){return this.a.b};p.rb=function(){return this.a.f};
-p.Wb=function(){var b=this.a;if(!b.l)if(b.i){var c=b.b[0],d=b.b[1],e=lf(c,d);e.fillRect(0,0,c,d);b.l=e.canvas}else b.l=b.a;return b.l};p.ka=function(){if(this.h)return this.h;var b=this.s;if("top-left"!=this.f){var c=this.Pa(),d=this.a.b;if(!c||!d)return null;b=b.slice();if("top-right"==this.f||"bottom-right"==this.f)b[0]=d[0]-c[0]-b[0];if("bottom-left"==this.f||"bottom-right"==this.f)b[1]=d[1]-c[1]-b[1]}return this.h=b};p.Pa=function(){return this.o?this.o:this.a.b};
-p.Bc=function(b,c){return Q(this.a,"change",b,c)};p.load=function(){this.a.load()};p.Xc=function(b,c){gb(this.a,"change",b,c)};function Rg(b,c,d,e,f,g){mb.call(this);this.l=null;this.a=b?b:new Image;null!==e&&(this.a.crossOrigin=e);this.c=g?document.createElement("CANVAS"):null;this.h=g;this.g=null;this.f=f;this.b=d;this.o=c;this.i=!1;2==this.f&&Sg(this)}M(Rg,mb);function Sg(b){var c=lf(1,1);try{c.drawImage(b.a,0,0),c.getImageData(0,0,1,1)}catch(d){b.i=!0}}
-Rg.prototype.j=function(){this.f=3;this.g.forEach(N);this.g=null;S(this,"change")};
-Rg.prototype.s=function(){this.f=2;this.b&&(this.a.width=this.b[0],this.a.height=this.b[1]);this.b=[this.a.width,this.a.height];this.g.forEach(N);this.g=null;Sg(this);if(!this.i&&null!==this.h){this.c.width=this.a.width;this.c.height=this.a.height;var b=this.c.getContext("2d");b.drawImage(this.a,0,0);for(var c=b.getImageData(0,0,this.a.width,this.a.height),d=c.data,e=this.h[0]/255,f=this.h[1]/255,g=this.h[2]/255,h=0,k=d.length;h<k;h+=4)d[h]*=e,d[h+1]*=f,d[h+2]*=g;b.putImageData(c,0,0)}S(this,"change")};
-Rg.prototype.T=function(){return this.c?this.c:this.a};Rg.prototype.load=function(){if(0==this.f){this.f=1;this.g=[Q(this.a,"error",this.j,this,!0),Q(this.a,"load",this.s,this,!0)];try{this.a.src=this.o}catch(b){this.j()}}};function Qg(){this.a={};this.b=0}aa(Qg);Qg.prototype.clear=function(){this.a={};this.b=0};Qg.prototype.get=function(b,c,d){b=c+":"+b+":"+(d?vd(d):"null");return b in this.a?this.a[b]:null};Qg.prototype.set=function(b,c,d,e){this.a[c+":"+b+":"+(d?vd(d):"null")]=e;++this.b};function Tg(b,c){this.h=c;this.f={};this.A={}}M(Tg,ib);function Ug(b){var c=b.viewState,d=b.coordinateToPixelMatrix;Cg(d,b.size[0]/2,b.size[1]/2,1/c.resolution,-1/c.resolution,-c.rotation,-c.center[0],-c.center[1]);Eb(d,b.pixelToCoordinateMatrix)}p=Tg.prototype;p.J=function(){for(var b in this.f)jb(this.f[b])};function Vg(){var b=Qg.ua();if(32<b.b){var c=0,d,e;for(d in b.a)e=b.a[d],0!==(c++&3)||nb(e)||(delete b.a[d],--b.b)}}
-p.Vb=function(b,c,d,e,f,g){function h(b,f){var g=I(b).toString(),h=c.layerStates[I(f)].eb;if(!(g in c.skippedFeatureUids)||h)return d.call(e,b,h?f:null)}var k,l=c.viewState,m=l.resolution,n=l.projection,l=b;if(n.a){var n=n.C(),q=Vb(n),r=b[0];if(r<n[0]||r>n[2])l=[r+q*Math.ceil((n[0]-r)/q),b[1]]}n=c.layerStatesArray;for(q=n.length-1;0<=q;--q){var u=n[q],r=u.layer;if(Bg(u,m)&&f.call(g,r)&&(u=Wg(this,r),r.V()&&(k=u.fb(r.V().j?l:b,c,h,e)),k))return k}};
-p.Jc=function(b,c,d,e){return void 0!==this.Vb(b,c,cc,this,d,e)};function Wg(b,c){var d=I(c).toString();if(d in b.f)return b.f[d];var e=b.Ib(c);b.f[d]=e;b.A[d]=Q(e,"change",b.Cd,b);return e}p.Cd=function(){this.h.render()};p.sb=pa;p.Ae=function(b,c){for(var d in this.f)if(!(c&&d in c.layerStates)){var e=d,f=this.f[e];delete this.f[e];N(this.A[e]);delete this.A[e];jb(f)}};function Xg(b,c){for(var d in b.f)if(!(d in c.layerStates)){c.postRenderFunctions.push(b.Ae.bind(b));break}}
-function Oa(b,c){return b.zIndex-c.zIndex};function Yg(b,c){this.j=b;this.l=c;this.a=[];this.b=[];this.f={}}Yg.prototype.clear=function(){this.a.length=0;this.b.length=0;Ya(this.f)};function Zg(b){var c=b.a,d=b.b,e=c[0];1==c.length?(c.length=0,d.length=0):(c[0]=c.pop(),d[0]=d.pop(),$g(b,0));c=b.l(e);delete b.f[c];return e}Yg.prototype.c=function(b){var c=this.j(b);return Infinity!=c?(this.a.push(b),this.b.push(c),this.f[this.l(b)]=!0,ah(this,0,this.a.length-1),!0):!1};
-function $g(b,c){for(var d=b.a,e=b.b,f=d.length,g=d[c],h=e[c],k=c;c<f>>1;){var l=2*c+1,m=2*c+2,l=m<f&&e[m]<e[l]?m:l;d[c]=d[l];e[c]=e[l];c=l}d[c]=g;e[c]=h;ah(b,k,c)}function ah(b,c,d){var e=b.a;b=b.b;for(var f=e[d],g=b[d];d>c;){var h=d-1>>1;if(b[h]>g)e[d]=e[h],b[d]=b[h],d=h;else break}e[d]=f;b[d]=g}function bh(b){var c=b.j,d=b.a,e=b.b,f=0,g=d.length,h,k,l;for(k=0;k<g;++k)h=d[k],l=c(h),Infinity==l?delete b.f[b.l(h)]:(e[f]=l,d[f++]=h);d.length=f;e.length=f;for(c=(b.a.length>>1)-1;0<=c;c--)$g(b,c)};function ch(b,c){Yg.call(this,function(c){return b.apply(null,c)},function(b){return b[0].getKey()});this.A=c;this.h=0;this.g={}}M(ch,Yg);ch.prototype.c=function(b){var c=ch.$.c.call(this,b);c&&Q(b[0],"change",this.i,this);return c};ch.prototype.i=function(b){b=b.target;var c=b.N();if(2===c||3===c||4===c||5===c)gb(b,"change",this.i,this),b=b.getKey(),b in this.g&&(delete this.g[b],--this.h),this.A()};function dh(){this.a=[];this.b=this.f=0}function eh(b,c){var d=b.b,e=.05-d,f=Math.log(.05/b.b)/-.005;return cd({source:c,duration:f,easing:function(b){return d*(Math.exp(-.005*b*f)-1)/e}})};function fh(b){T.call(this);this.S=null;this.set("active",!0);this.handleEvent=b.handleEvent}M(fh,T);fh.prototype.setMap=function(b){this.S=b};function gh(b,c,d,e,f){if(void 0!==d){var g=c.Y(),h=c.ia();void 0!==g&&h&&f&&0<f&&(b.fa(dd({rotation:g,duration:f,easing:$c})),e&&b.fa(cd({source:h,duration:f,easing:$c})));c.rotate(d,e)}}function hh(b,c,d,e,f){var g=c.I();d=c.constrainResolution(g,d,0);ih(b,c,d,e,f)}
-function ih(b,c,d,e,f){if(d){var g=c.I(),h=c.ia();void 0!==g&&h&&d!==g&&f&&0<f&&(b.fa(ed({resolution:g,duration:f,easing:$c})),e&&b.fa(cd({source:h,duration:f,easing:$c})));if(e){var k;b=c.ia();f=c.I();void 0!==b&&void 0!==f&&(k=[e[0]-d*(e[0]-b[0])/f,e[1]-d*(e[1]-b[1])/f]);c.oa(k)}Yc(c,d)}};function jh(b){b=b?b:{};this.a=b.delta?b.delta:1;fh.call(this,{handleEvent:kh});this.b=void 0!==b.duration?b.duration:250}M(jh,fh);function kh(b){var c=!1,d=b.originalEvent;if(b.type==ng){var c=b.map,e=b.coordinate,d=d.shiftKey?-this.a:this.a,f=c.O();hh(c,f,d,e,this.b);b.preventDefault();c=!0}return!c};function lh(b){b=b.originalEvent;return b.altKey&&!(b.metaKey||b.ctrlKey)&&b.shiftKey}function mh(b){b=b.originalEvent;return 0==b.button&&!(Jd&&wf&&b.ctrlKey)}function nh(b){b=b.originalEvent;return!b.altKey&&!(b.metaKey||b.ctrlKey)&&!b.shiftKey}function oh(b){b=b.originalEvent;return!b.altKey&&!(b.metaKey||b.ctrlKey)&&b.shiftKey}function ph(b){b=b.originalEvent.target.tagName;return"INPUT"!==b&&"SELECT"!==b&&"TEXTAREA"!==b}function qh(b){return"mouse"==b.a.pointerType};function rh(b){b=b?b:{};fh.call(this,{handleEvent:b.handleEvent?b.handleEvent:sh});this.vb=b.handleDownEvent?b.handleDownEvent:dc;this.wb=b.handleDragEvent?b.handleDragEvent:pa;this.xb=b.handleMoveEvent?b.handleMoveEvent:pa;this.yb=b.handleUpEvent?b.handleUpEvent:dc;this.s=!1;this.G={};this.c=[]}M(rh,fh);function th(b){for(var c=b.length,d=0,e=0,f=0;f<c;f++)d+=b[f].clientX,e+=b[f].clientY;return[d/c,e/c]}
-function sh(b){if(!(b instanceof jg))return!0;var c=!1,d=b.type;if(d===sg||d===ug||d===qg)d=b.a,b.type==qg?delete this.G[d.pointerId]:b.type==sg?this.G[d.pointerId]=d:d.pointerId in this.G&&(this.G[d.pointerId]=d),this.c=Za(this.G);this.s&&(b.type==ug?this.wb(b):b.type==qg&&(this.s=this.yb(b)));b.type==sg?(this.s=b=this.vb(b),c=this.w(b)):b.type==tg&&this.xb(b);return!c}rh.prototype.w=function(b){return b};function uh(b){rh.call(this,{handleDownEvent:vh,handleDragEvent:wh,handleUpEvent:xh});b=b?b:{};this.a=b.kinetic;this.b=this.g=null;this.i=b.condition?b.condition:nh;this.h=!1}M(uh,rh);function wh(b){var c=th(this.c);this.a&&this.a.a.push(c[0],c[1],Date.now());if(this.b){var d=this.b[0]-c[0],e=c[1]-this.b[1];b=b.map;var f=b.O(),g=f.N(),e=d=[d,e],h=g.resolution;e[0]*=h;e[1]*=h;vb(d,g.rotation);ub(d,g.center);d=f.a.center(d);b.render();f.oa(d)}this.b=c}
-function xh(b){b=b.map;var c=b.O();if(0===this.c.length){var d;if(d=!this.h&&this.a)if(d=this.a,6>d.a.length)d=!1;else{var e=Date.now()-100,f=d.a.length-3;if(d.a[f+2]<e)d=!1;else{for(var g=f-3;0<g&&d.a[g+2]>e;)g-=3;var e=d.a[f+2]-d.a[g+2],h=d.a[f]-d.a[g],f=d.a[f+1]-d.a[g+1];d.f=Math.atan2(f,h);d.b=Math.sqrt(h*h+f*f)/e;d=.05<d.b}}d&&(d=(.05-this.a.b)/-.005,f=this.a.f,g=c.ia(),this.g=eh(this.a,g),b.fa(this.g),g=yh(b,g),d=b.ta([g[0]-d*Math.cos(f),g[1]-d*Math.sin(f)]),d=c.a.center(d),c.oa(d));Zc(c,-1);
-b.render();return!1}this.b=null;return!0}function vh(b){if(0<this.c.length&&this.i(b)){var c=b.map,d=c.O();this.b=null;this.s||Zc(d,1);c.render();this.g&&La(c.w,this.g)&&(d.oa(b.frameState.viewState.center),this.g=null);this.a&&(b=this.a,b.a.length=0,b.f=0,b.b=0);this.h=1<this.c.length;return!0}return!1}uh.prototype.w=dc;function zh(b){b=b?b:{};rh.call(this,{handleDownEvent:Ah,handleDragEvent:Bh,handleUpEvent:Ch});this.b=b.condition?b.condition:lh;this.a=void 0;this.g=void 0!==b.duration?b.duration:250}M(zh,rh);function Bh(b){if(qh(b)){var c=b.map,d=c.Oa();b=b.pixel;d=Math.atan2(d[1]/2-b[1],b[0]-d[0]/2);if(void 0!==this.a){b=d-this.a;var e=c.O(),f=e.Y();c.render();gh(c,e,f-b)}this.a=d}}
-function Ch(b){if(!qh(b))return!0;b=b.map;var c=b.O();Zc(c,-1);var d=c.Y(),e=this.g,d=c.constrainRotation(d,0);gh(b,c,d,void 0,e);return!1}function Ah(b){return qh(b)&&mh(b)&&this.b(b)?(b=b.map,Zc(b.O(),1),b.render(),this.a=void 0,!0):!1}zh.prototype.w=dc;function Dh(b){this.c=null;this.b=document.createElement("div");this.b.style.position="absolute";this.b.className="ol-box "+b;this.f=this.g=this.a=null}M(Dh,ib);Dh.prototype.J=function(){this.setMap(null)};function Eh(b){var c=b.g,d=b.f;b=b.b.style;b.left=Math.min(c[0],d[0])+"px";b.top=Math.min(c[1],d[1])+"px";b.width=Math.abs(d[0]-c[0])+"px";b.height=Math.abs(d[1]-c[1])+"px"}
-Dh.prototype.setMap=function(b){if(this.a){this.a.o.removeChild(this.b);var c=this.b.style;c.left=c.top=c.width=c.height="inherit"}(this.a=b)&&this.a.o.appendChild(this.b)};function Fh(b){var c=b.g,d=b.f,c=[c,[c[0],d[1]],d,[d[0],c[1]]].map(b.a.ta,b.a);c[4]=c[0].slice();b.c?b.c.W([c]):b.c=new Tc([c])}Dh.prototype.M=function(){return this.c};function Gh(b,c,d){R.call(this,b);this.coordinate=c;this.mapBrowserEvent=d}M(Gh,R);function Hh(b){rh.call(this,{handleDownEvent:Ih,handleDragEvent:Jh,handleUpEvent:Kh});b=b?b:{};this.a=new Dh(b.className||"ol-dragbox");this.b=null;this.j=b.condition?b.condition:cc;this.i=b.boxEndCondition?b.boxEndCondition:Lh}M(Hh,rh);function Lh(b,c,d){b=d[0]-c[0];c=d[1]-c[1];return 64<=b*b+c*c}
-function Jh(b){if(qh(b)){var c=this.a,d=b.pixel;c.g=this.b;c.f=d;Fh(c);Eh(c);S(this,new Gh("boxdrag",b.coordinate,b))}}Hh.prototype.M=function(){return this.a.M()};Hh.prototype.h=pa;function Kh(b){if(!qh(b))return!0;this.a.setMap(null);this.i(b,this.b,b.pixel)&&(this.h(b),S(this,new Gh("boxend",b.coordinate,b)));return!1}
-function Ih(b){if(qh(b)&&mh(b)&&this.j(b)){this.b=b.pixel;this.a.setMap(b.map);var c=this.a,d=this.b;c.g=this.b;c.f=d;Fh(c);Eh(c);S(this,new Gh("boxstart",b.coordinate,b));return!0}return!1};function Mh(b){b=b?b:{};var c=b.condition?b.condition:oh;this.g=void 0!==b.duration?b.duration:200;this.o=void 0!==b.out?b.out:!1;Hh.call(this,{condition:c,className:b.className||"ol-dragzoom"})}M(Mh,Hh);
-Mh.prototype.h=function(){var b=this.S,c=b.O(),d=b.Oa(),e=this.M().C();if(this.o){var f=c.jc(d),e=[yh(b,Xb(e)),yh(b,[e[2],e[3]])],g=Pb(void 0),h,k;h=0;for(k=e.length;h<k;++h)Kb(g,e[h]);g=1/Xc(g,d);e=(f[2]-f[0])/2*(g-1);g=(f[3]-f[1])/2*(g-1);f[0]-=e;f[2]+=e;f[1]-=g;f[3]+=g;e=f}d=c.constrainResolution(Xc(e,d));f=c.I();g=c.ia();b.fa(ed({resolution:f,duration:this.g,easing:$c}));b.fa(cd({source:g,duration:this.g,easing:$c}));c.oa(Yb(e));Yc(c,d)};function Nh(b){fh.call(this,{handleEvent:Oh});b=b||{};this.a=function(b){return nh.call(this,b)&&ph.call(this,b)};this.b=void 0!==b.condition?b.condition:this.a;this.c=void 0!==b.duration?b.duration:100;this.g=void 0!==b.pixelDelta?b.pixelDelta:128}M(Nh,fh);
-function Oh(b){var c=!1;if("keydown"==b.type){var d=b.originalEvent.keyCode;if(this.b(b)&&(40==d||37==d||39==d||38==d)){var e=b.map,c=e.O(),f=c.I()*this.g,g=0,h=0;40==d?h=-f:37==d?g=-f:39==d?g=f:h=f;d=[g,h];vb(d,c.Y());f=this.c;if(g=c.ia())f&&0<f&&e.fa(cd({source:g,duration:f,easing:bd})),e=c.a.center([g[0]+d[0],g[1]+d[1]]),c.oa(e);b.preventDefault();c=!0}}return!c};function Ph(b){fh.call(this,{handleEvent:Qh});b=b?b:{};this.b=b.condition?b.condition:ph;this.a=b.delta?b.delta:1;this.c=void 0!==b.duration?b.duration:100}M(Ph,fh);function Qh(b){var c=!1;if("keydown"==b.type||"keypress"==b.type){var d=b.originalEvent.charCode;if(this.b(b)&&(43==d||45==d)){c=b.map;d=43==d?this.a:-this.a;c.render();var e=c.O();hh(c,e,d,void 0,this.c);b.preventDefault();c=!0}}return!c};function Rh(b){fh.call(this,{handleEvent:Sh});b=b||{};this.a=0;this.i=void 0!==b.duration?b.duration:250;this.j=void 0!==b.useAnchor?b.useAnchor:!0;this.c=null;this.g=this.b=void 0}M(Rh,fh);
-function Sh(b){var c=!1;if("wheel"==b.type||"mousewheel"==b.type){var c=b.map,d=b.originalEvent;this.j&&(this.c=b.coordinate);var e;"wheel"==b.type?(e=d.deltaY,uf&&d.deltaMode===x.WheelEvent.DOM_DELTA_PIXEL&&(e/=xf),d.deltaMode===x.WheelEvent.DOM_DELTA_LINE&&(e*=40)):"mousewheel"==b.type&&(e=-d.wheelDeltaY,vf&&(e/=3));this.a+=e;void 0===this.b&&(this.b=Date.now());e=Math.max(80-(Date.now()-this.b),0);x.clearTimeout(this.g);this.g=x.setTimeout(this.h.bind(this,c),e);b.preventDefault();c=!0}return!c}
-Rh.prototype.h=function(b){var c=Ca(this.a,-1,1),d=b.O();b.render();hh(b,d,-c,this.c,this.i);this.a=0;this.c=null;this.g=this.b=void 0};function Th(b){rh.call(this,{handleDownEvent:Uh,handleDragEvent:Vh,handleUpEvent:Wh});b=b||{};this.b=null;this.g=void 0;this.a=!1;this.h=0;this.j=void 0!==b.threshold?b.threshold:.3;this.i=void 0!==b.duration?b.duration:250}M(Th,rh);
-function Vh(b){var c=0,d=this.c[0],e=this.c[1],d=Math.atan2(e.clientY-d.clientY,e.clientX-d.clientX);void 0!==this.g&&(c=d-this.g,this.h+=c,!this.a&&Math.abs(this.h)>this.j&&(this.a=!0));this.g=d;b=b.map;d=b.a.getBoundingClientRect();e=th(this.c);e[0]-=d.left;e[1]-=d.top;this.b=b.ta(e);this.a&&(d=b.O(),e=d.Y(),b.render(),gh(b,d,e+c,this.b))}
-function Wh(b){if(2>this.c.length){b=b.map;var c=b.O();Zc(c,-1);if(this.a){var d=c.Y(),e=this.b,f=this.i,d=c.constrainRotation(d,0);gh(b,c,d,e,f)}return!1}return!0}function Uh(b){return 2<=this.c.length?(b=b.map,this.b=null,this.g=void 0,this.a=!1,this.h=0,this.s||Zc(b.O(),1),b.render(),!0):!1}Th.prototype.w=dc;function Xh(b){rh.call(this,{handleDownEvent:Yh,handleDragEvent:Zh,handleUpEvent:$h});b=b?b:{};this.b=null;this.h=void 0!==b.duration?b.duration:400;this.a=void 0;this.g=1}M(Xh,rh);function Zh(b){var c=1,d=this.c[0],e=this.c[1],f=d.clientX-e.clientX,d=d.clientY-e.clientY,f=Math.sqrt(f*f+d*d);void 0!==this.a&&(c=this.a/f);this.a=f;1!=c&&(this.g=c);b=b.map;var f=b.O(),d=f.I(),e=b.a.getBoundingClientRect(),g=th(this.c);g[0]-=e.left;g[1]-=e.top;this.b=b.ta(g);b.render();ih(b,f,d*c,this.b)}
-function $h(b){if(2>this.c.length){b=b.map;var c=b.O();Zc(c,-1);var d=c.I(),e=this.b,f=this.h,d=c.constrainResolution(d,0,this.g-1);ih(b,c,d,e,f);return!1}return!0}function Yh(b){return 2<=this.c.length?(b=b.map,this.b=null,this.a=void 0,this.g=1,this.s||Zc(b.O(),1),b.render(),!0):!1}Xh.prototype.w=dc;function ai(b){var c=b||{};b=Wa({},c);delete b.layers;c=c.layers;wg.call(this,b);this.b=[];this.a={};Q(this,rb("layers"),this.Ed,this);c?Array.isArray(c)&&(c=new ld(c.slice())):c=new ld;this.set("layers",c)}M(ai,wg);p=ai.prototype;p.ob=function(){this.cb()&&this.v()};
-p.Ed=function(){this.b.forEach(N);this.b.length=0;var b=this.get("layers");this.b.push(Q(b,"add",this.Dd,this),Q(b,"remove",this.Fd,this));for(var c in this.a)this.a[c].forEach(N);Ya(this.a);var b=b.a,d,e;c=0;for(d=b.length;c<d;c++)e=b[c],this.a[I(e).toString()]=[Q(e,"propertychange",this.ob,this),Q(e,"change",this.ob,this)];this.v()};p.Dd=function(b){b=b.element;var c=I(b).toString();this.a[c]=[Q(b,"propertychange",this.ob,this),Q(b,"change",this.ob,this)];this.v()};
-p.Fd=function(b){b=I(b.element).toString();this.a[b].forEach(N);delete this.a[b];this.v()};p.Kb=function(b){var c=void 0!==b?b:[],d=c.length;nd(this.get("layers"),function(b){b.Kb(c)});b=xg(this);var e,f;for(e=c.length;d<e;d++)f=c[d],f.opacity*=b.opacity,f.visible=f.visible&&b.visible,f.maxResolution=Math.min(f.maxResolution,b.maxResolution),f.minResolution=Math.max(f.minResolution,b.minResolution),void 0!==b.extent&&(f.extent=void 0!==f.extent?$b(f.extent,b.extent):b.extent);return c};p.Ob=function(){return"ready"};function bi(b){ic.call(this,{code:b,units:"m",extent:ci,global:!0,worldExtent:di})}M(bi,ic);bi.prototype.getPointResolution=function(b,c){return b/Da(c[1]/6378137)};var ei=6378137*Math.PI,ci=[-ei,-ei,ei,ei],di=[-180,-85,180,85],fi="EPSG:3857 EPSG:102100 EPSG:102113 EPSG:900913 urn:ogc:def:crs:EPSG:6.18:3:3857 urn:ogc:def:crs:EPSG::3857 http://www.opengis.net/gml/srs/epsg.xml#3857".split(" ").map(function(b){return new bi(b)});
-function gi(b,c,d){var e=b.length;d=1<d?d:2;void 0===c&&(2<d?c=b.slice():c=Array(e));for(var f=0;f<e;f+=d)c[f]=6378137*Math.PI*b[f]/180,c[f+1]=6378137*Math.log(Math.tan(Math.PI*(b[f+1]+90)/360));return c}function hi(b,c,d){var e=b.length;d=1<d?d:2;void 0===c&&(2<d?c=b.slice():c=Array(e));for(var f=0;f<e;f+=d)c[f]=180*b[f]/(6378137*Math.PI),c[f+1]=360*Math.atan(Math.exp(b[f+1]/6378137))/Math.PI-90;return c};var ii=new ec(6378137);function ji(b,c){ic.call(this,{code:b,units:"degrees",extent:ki,axisOrientation:c,global:!0,metersPerUnit:li,worldExtent:ki})}M(ji,ic);ji.prototype.getPointResolution=function(b){return b};
-var ki=[-180,-90,180,90],li=Math.PI*ii.radius/180,mi=[new ji("CRS:84"),new ji("EPSG:4326","neu"),new ji("urn:ogc:def:crs:EPSG::4326","neu"),new ji("urn:ogc:def:crs:EPSG:6.6:4326","neu"),new ji("urn:ogc:def:crs:OGC:1.3:CRS84"),new ji("urn:ogc:def:crs:OGC:2:84"),new ji("http://www.opengis.net/gml/srs/epsg.xml#4326","neu"),new ji("urn:x-ogc:def:crs:EPSG:4326","neu")];function X(b){b=b?b:{};var c=Wa({},b);delete c.preload;delete c.useInterimTilesOnError;Ag.call(this,c);this.set("preload",void 0!==b.preload?b.preload:0);this.set("useInterimTilesOnError",void 0!==b.useInterimTilesOnError?b.useInterimTilesOnError:!0)}M(X,Ag);function ni(b){return b.get("useInterimTilesOnError")};var oi=[0,0,0,1],pi=[],qi=[0,0,0,1];function ri(b,c,d,e){0!==c&&(b.translate(d,e),b.rotate(c),b.translate(-d,-e))};function si(b){b=b||{};this.a=void 0!==b.color?b.color:null;this.b=void 0}si.prototype.ga=function(){return this.a};function ti(){this.b=-1};function ui(){this.b=-1;this.b=64;this.a=Array(4);this.g=Array(this.b);this.c=this.f=0;this.a[0]=1732584193;this.a[1]=4023233417;this.a[2]=2562383102;this.a[3]=271733878;this.c=this.f=0}M(ui,ti);
-function vi(b,c,d){d||(d=0);var e=Array(16);if(da(c))for(var f=0;16>f;++f)e[f]=c.charCodeAt(d++)|c.charCodeAt(d++)<<8|c.charCodeAt(d++)<<16|c.charCodeAt(d++)<<24;else for(f=0;16>f;++f)e[f]=c[d++]|c[d++]<<8|c[d++]<<16|c[d++]<<24;c=b.a[0];d=b.a[1];var f=b.a[2],g=b.a[3],h=0,h=c+(g^d&(f^g))+e[0]+3614090360&4294967295;c=d+(h<<7&4294967295|h>>>25);h=g+(f^c&(d^f))+e[1]+3905402710&4294967295;g=c+(h<<12&4294967295|h>>>20);h=f+(d^g&(c^d))+e[2]+606105819&4294967295;f=g+(h<<17&4294967295|h>>>15);h=d+(c^f&(g^
+function uf(b,c){var d=b.style;d.WebkitTransform=c;d.MozTransform=c;d.a=c;d.msTransform=c;d.transform=c;Gd&&Qd("9.0")&&(b.style.transformOrigin="0 0")}function vf(b,c){var d;if(tf()){var e=Array(16);for(d=0;16>d;++d)e[d]=c[d].toFixed(6);uf(b,"matrix3d("+e.join(",")+")")}else if(sf()){var e=[c[0],c[1],c[4],c[5],c[12],c[13]],f=Array(6);for(d=0;6>d;++d)f[d]=e[d].toFixed(6);uf(b,"matrix("+f.join(",")+")")}else b.style.left=Math.round(c[12])+"px",b.style.top=Math.round(c[13])+"px"};var wf=["experimental-webgl","webgl","webkit-3d","moz-webgl"];function xf(b,c){var d,e,f=wf.length;for(e=0;e<f;++e)try{if(d=b.getContext(wf[e],c))return d}catch(g){}return null};var yf,zf="undefined"!==typeof navigator?navigator.userAgent.toLowerCase():"",Af=-1!==zf.indexOf("firefox"),Bf=-1!==zf.indexOf("safari")&&-1===zf.indexOf("chrom"),Cf=-1!==zf.indexOf("macintosh"),Df=x.devicePixelRatio||1,Ef=!1,Ff=function(){if(!("HTMLCanvasElement"in x))return!1;try{var b=rf();return b?(void 0!==b.setLineDash&&(Ef=!0),!0):!1}catch(c){return!1}}(),Gf="ontouchstart"in x,Hf="PointerEvent"in x,If=!!x.navigator.msPointerEnabled,Jf=!1,Kf=[];
+if("WebGLRenderingContext"in x)try{var Lf=xf(document.createElement("CANVAS"),{failIfMajorPerformanceCaveat:!0});Lf&&(Jf=!0,Kf=Lf.getSupportedExtensions())}catch(b){}yf=Jf;oa=Kf;function Mf(b,c){this.a=b;this.g=c};function Nf(b){Mf.call(this,b,{mousedown:this.Vd,mousemove:this.Wd,mouseup:this.Zd,mouseover:this.Yd,mouseout:this.Xd});this.b=b.b;this.f=[]}M(Nf,Mf);function Of(b,c){for(var d=b.f,e=c.clientX,f=c.clientY,g=0,h=d.length,k;g<h&&(k=d[g]);g++){var l=Math.abs(f-k[1]);if(25>=Math.abs(e-k[0])&&25>=l)return!0}return!1}function Pf(b){var c=Qf(b,b),d=c.preventDefault;c.preventDefault=function(){b.preventDefault();d()};c.pointerId=1;c.isPrimary=!0;c.pointerType="mouse";return c}p=Nf.prototype;
+p.Vd=function(b){if(!Of(this,b)){if((1).toString()in this.b){var c=Pf(b);Rf(this.a,Sf,c,b);delete this.b[(1).toString()]}c=Pf(b);this.b[(1).toString()]=b;Rf(this.a,Tf,c,b)}};p.Wd=function(b){if(!Of(this,b)){var c=Pf(b);Rf(this.a,Uf,c,b)}};p.Zd=function(b){if(!Of(this,b)){var c=this.b[(1).toString()];c&&c.button===b.button&&(c=Pf(b),Rf(this.a,Vf,c,b),delete this.b[(1).toString()])}};p.Yd=function(b){if(!Of(this,b)){var c=Pf(b);Wf(this.a,c,b)}};
+p.Xd=function(b){if(!Of(this,b)){var c=Pf(b);Xf(this.a,c,b)}};function Yf(b){Mf.call(this,b,{MSPointerDown:this.de,MSPointerMove:this.ee,MSPointerUp:this.he,MSPointerOut:this.fe,MSPointerOver:this.ge,MSPointerCancel:this.ce,MSGotPointerCapture:this.ae,MSLostPointerCapture:this.be});this.b=b.b;this.f=["","unavailable","touch","pen","mouse"]}M(Yf,Mf);function Zf(b,c){var d=c;ea(c.pointerType)&&(d=Qf(c,c),d.pointerType=b.f[c.pointerType]);return d}p=Yf.prototype;p.de=function(b){this.b[b.pointerId.toString()]=b;var c=Zf(this,b);Rf(this.a,Tf,c,b)};
+p.ee=function(b){var c=Zf(this,b);Rf(this.a,Uf,c,b)};p.he=function(b){var c=Zf(this,b);Rf(this.a,Vf,c,b);delete this.b[b.pointerId.toString()]};p.fe=function(b){var c=Zf(this,b);Xf(this.a,c,b)};p.ge=function(b){var c=Zf(this,b);Wf(this.a,c,b)};p.ce=function(b){var c=Zf(this,b);Rf(this.a,Sf,c,b);delete this.b[b.pointerId.toString()]};p.be=function(b){S(this.a,new nf("lostpointercapture",b,b))};p.ae=function(b){S(this.a,new nf("gotpointercapture",b,b))};function $f(b){Mf.call(this,b,{pointerdown:this.se,pointermove:this.te,pointerup:this.we,pointerout:this.ue,pointerover:this.ve,pointercancel:this.re,gotpointercapture:this.xd,lostpointercapture:this.Ud})}M($f,Mf);p=$f.prototype;p.se=function(b){ag(this.a,b)};p.te=function(b){ag(this.a,b)};p.we=function(b){ag(this.a,b)};p.ue=function(b){ag(this.a,b)};p.ve=function(b){ag(this.a,b)};p.re=function(b){ag(this.a,b)};p.Ud=function(b){ag(this.a,b)};p.xd=function(b){ag(this.a,b)};function bg(b,c){Mf.call(this,b,{touchstart:this.Ie,touchmove:this.He,touchend:this.Ge,touchcancel:this.Fe});this.b=b.b;this.l=c;this.f=void 0;this.h=0;this.c=void 0}M(bg,Mf);p=bg.prototype;p.Vc=function(){this.h=0;this.c=void 0};
+function cg(b,c,d){c=Qf(c,d);c.pointerId=d.identifier+2;c.bubbles=!0;c.cancelable=!0;c.detail=b.h;c.button=0;c.buttons=1;c.width=d.webkitRadiusX||d.radiusX||0;c.height=d.webkitRadiusY||d.radiusY||0;c.pressure=d.webkitForce||d.force||.5;c.isPrimary=b.f===d.identifier;c.pointerType="touch";c.clientX=d.clientX;c.clientY=d.clientY;c.screenX=d.screenX;c.screenY=d.screenY;return c}
+function dg(b,c,d){function e(){c.preventDefault()}var f=Array.prototype.slice.call(c.changedTouches),g=f.length,h,k;for(h=0;h<g;++h)k=cg(b,c,f[h]),k.preventDefault=e,d.call(b,c,k)}
+p.Ie=function(b){var c=b.touches,d=Object.keys(this.b),e=d.length;if(e>=c.length){var f=[],g,h,k;for(g=0;g<e;++g){h=d[g];k=this.b[h];var l;if(!(l=1==h))a:{l=c.length;for(var m=void 0,n=0;n<l;n++)if(m=c[n],m.identifier===h-2){l=!0;break a}l=!1}l||f.push(k.out)}for(g=0;g<f.length;++g)this.Fb(b,f[g])}c=b.changedTouches[0];d=Object.keys(this.b).length;if(0===d||1===d&&(1).toString()in this.b)this.f=c.identifier,void 0!==this.c&&x.clearTimeout(this.c);eg(this,b);this.h++;dg(this,b,this.qe)};
+p.qe=function(b,c){this.b[c.pointerId]={target:c.target,out:c,Sc:c.target};var d=this.a;c.bubbles=!0;Rf(d,fg,c,b);d=this.a;c.bubbles=!1;Rf(d,gg,c,b);Rf(this.a,Tf,c,b)};p.He=function(b){b.preventDefault();dg(this,b,this.$d)};p.$d=function(b,c){var d=this.b[c.pointerId];if(d){var e=d.out,f=d.Sc;Rf(this.a,Uf,c,b);e&&f!==c.target&&(e.relatedTarget=c.target,c.relatedTarget=f,e.target=f,c.target?(Xf(this.a,e,b),Wf(this.a,c,b)):(c.target=f,c.relatedTarget=null,this.Fb(b,c)));d.out=c;d.Sc=c.target}};
+p.Ge=function(b){eg(this,b);dg(this,b,this.Je)};p.Je=function(b,c){Rf(this.a,Vf,c,b);this.a.out(c,b);var d=this.a;c.bubbles=!1;Rf(d,hg,c,b);delete this.b[c.pointerId];c.isPrimary&&(this.f=void 0,this.c=x.setTimeout(this.Vc.bind(this),200))};p.Fe=function(b){dg(this,b,this.Fb)};p.Fb=function(b,c){Rf(this.a,Sf,c,b);this.a.out(c,b);var d=this.a;c.bubbles=!1;Rf(d,hg,c,b);delete this.b[c.pointerId];c.isPrimary&&(this.f=void 0,this.c=x.setTimeout(this.Vc.bind(this),200))};
+function eg(b,c){var d=b.l.f,e=c.changedTouches[0];if(b.f===e.identifier){var f=[e.clientX,e.clientY];d.push(f);x.setTimeout(function(){La(d,f)},2500)}};function ig(b){mb.call(this);this.g=b;this.b={};this.c={};this.a=[];Hf?jg(this,new $f(this)):If?jg(this,new Yf(this)):(b=new Nf(this),jg(this,b),Gf&&jg(this,new bg(this,b)));b=this.a.length;for(var c,d=0;d<b;d++)c=this.a[d],kg(this,Object.keys(c.g))}M(ig,mb);function jg(b,c){var d=Object.keys(c.g);d&&(d.forEach(function(b){var d=c.g[b];d&&(this.c[b]=d.bind(c))},b),b.a.push(c))}ig.prototype.f=function(b){var c=this.c[b.type];c&&c(b)};
+function kg(b,c){c.forEach(function(b){Q(this.g,b,this.f,this)},b)}function lg(b,c){c.forEach(function(b){gb(this.g,b,this.f,this)},b)}function Qf(b,c){for(var d={},e,f=0,g=mg.length;f<g;f++)e=mg[f][0],d[e]=b[e]||c[e]||mg[f][1];return d}ig.prototype.out=function(b,c){b.bubbles=!0;Rf(this,ng,b,c)};function Xf(b,c,d){b.out(c,d);var e=c.relatedTarget;e&&ie(c.target,e)||(c.bubbles=!1,Rf(b,hg,c,d))}
+function Wf(b,c,d){c.bubbles=!0;Rf(b,fg,c,d);var e=c.relatedTarget;e&&ie(c.target,e)||(c.bubbles=!1,Rf(b,gg,c,d))}function Rf(b,c,d,e){S(b,new nf(c,e,d))}function ag(b,c){S(b,new nf(c.type,c,c))}ig.prototype.J=function(){for(var b=this.a.length,c,d=0;d<b;d++)c=this.a[d],lg(this,Object.keys(c.g));ig.X.J.call(this)};
+var Uf="pointermove",Tf="pointerdown",Vf="pointerup",fg="pointerover",ng="pointerout",gg="pointerenter",hg="pointerleave",Sf="pointercancel",mg=[["bubbles",!1],["cancelable",!1],["view",null],["detail",null],["screenX",0],["screenY",0],["clientX",0],["clientY",0],["ctrlKey",!1],["altKey",!1],["shiftKey",!1],["metaKey",!1],["button",0],["relatedTarget",null],["buttons",0],["pointerId",0],["width",0],["height",0],["pressure",0],["tiltX",0],["tiltY",0],["pointerType",""],["hwTimestamp",0],["isPrimary",
+!1],["type",""],["target",null],["currentTarget",null],["which",0]];function og(b,c,d,e,f){te.call(this,b,c,f);this.originalEvent=d;this.pixel=c.vc(d);this.coordinate=c.ta(this.pixel);this.dragging=void 0!==e?e:!1}M(og,te);og.prototype.preventDefault=function(){og.X.preventDefault.call(this);this.originalEvent.preventDefault()};og.prototype.stopPropagation=function(){og.X.stopPropagation.call(this);this.originalEvent.stopPropagation()};function pg(b,c,d,e,f){og.call(this,b,c,d.a,e,f);this.a=d}M(pg,og);
+function qg(b){mb.call(this);this.f=b;this.h=0;this.l=!1;this.c=[];this.b=null;b=this.f.a;this.s=0;this.o={};this.g=new ig(b);this.a=null;this.i=Q(this.g,Tf,this.Jd,this);this.j=Q(this.g,Uf,this.ye,this)}M(qg,mb);function rg(b,c){var d;d=new pg(sg,b.f,c);S(b,d);0!==b.h?(x.clearTimeout(b.h),b.h=0,d=new pg(tg,b.f,c),S(b,d)):b.h=x.setTimeout(function(){this.h=0;var b=new pg(ug,this.f,c);S(this,b)}.bind(b),250)}
+function vg(b,c){c.type==wg||c.type==xg?delete b.o[c.pointerId]:c.type==yg&&(b.o[c.pointerId]=!0);b.s=Object.keys(b.o).length}p=qg.prototype;p.zc=function(b){vg(this,b);var c=new pg(wg,this.f,b);S(this,c);!this.l&&0===b.button&&rg(this,this.b);0===this.s&&(this.c.forEach(N),this.c.length=0,this.l=!1,this.b=null,jb(this.a),this.a=null)};
+p.Jd=function(b){vg(this,b);var c=new pg(yg,this.f,b);S(this,c);this.b=b;0===this.c.length&&(this.a=new ig(document),this.c.push(Q(this.a,zg,this.ke,this),Q(this.a,wg,this.zc,this),Q(this.g,xg,this.zc,this)))};p.ke=function(b){if(b.clientX!=this.b.clientX||b.clientY!=this.b.clientY){this.l=!0;var c=new pg(Ag,this.f,b,this.l);S(this,c)}b.preventDefault()};p.ye=function(b){S(this,new pg(b.type,this.f,b,!(!this.b||b.clientX==this.b.clientX&&b.clientY==this.b.clientY)))};
+p.J=function(){this.j&&(N(this.j),this.j=null);this.i&&(N(this.i),this.i=null);this.c.forEach(N);this.c.length=0;this.a&&(jb(this.a),this.a=null);this.g&&(jb(this.g),this.g=null);qg.X.J.call(this)};var ug="singleclick",sg="click",tg="dblclick",Ag="pointerdrag",zg="pointermove",yg="pointerdown",wg="pointerup",xg="pointercancel",Bg={Ve:ug,Ke:sg,Le:tg,Oe:Ag,Re:zg,Ne:yg,Ue:wg,Te:"pointerover",Se:"pointerout",Pe:"pointerenter",Qe:"pointerleave",Me:xg};function Cg(b){T.call(this);var c=Wa({},b);c.opacity=void 0!==b.opacity?b.opacity:1;c.visible=void 0!==b.visible?b.visible:!0;c.zIndex=void 0!==b.zIndex?b.zIndex:0;c.maxResolution=void 0!==b.maxResolution?b.maxResolution:Infinity;c.minResolution=void 0!==b.minResolution?b.minResolution:0;this.l(c)}M(Cg,T);
+function Dg(b){var c=b.Ub(),d=b.Pb(),e=b.cb(),f=b.C(),g=b.Vb(),h=b.get("maxResolution"),k=b.get("minResolution");return{layer:b,opacity:Ca(c,0,1),$b:d,visible:e,eb:!0,extent:f,zIndex:g,maxResolution:h,minResolution:Math.max(k,0)}}p=Cg.prototype;p.C=function(){return this.get("extent")};p.Ub=function(){return this.get("opacity")};p.cb=function(){return this.get("visible")};p.Vb=function(){return this.get("zIndex")};p.Fc=function(b){this.set("opacity",b)};p.Gc=function(b){this.set("visible",b)};
+p.Hc=function(b){this.set("zIndex",b)};function Eg(){};function Fg(b,c,d,e,f,g){R.call(this,b,c);this.vectorContext=d;this.frameState=e;this.context=f;this.glContext=g}M(Fg,R);function Gg(b){var c=Wa({},b);delete c.source;Cg.call(this,c);this.h=this.c=this.b=null;b.map&&this.setMap(b.map);Q(this,rb("source"),this.Od,this);this.Zb(b.source?b.source:null)}M(Gg,Cg);function Hg(b,c){return b.visible&&c>=b.minResolution&&c<b.maxResolution}p=Gg.prototype;p.Lb=function(b){b=b?b:[];b.push(Dg(this));return b};p.V=function(){return this.get("source")||null};p.Pb=function(){var b=this.V();return b?b.N():"undefined"};p.me=function(){this.v()};
+p.Od=function(){this.h&&(N(this.h),this.h=null);var b=this.V();b&&(this.h=Q(b,"change",this.me,this));this.v()};p.setMap=function(b){this.b&&(N(this.b),this.b=null);b||this.v();this.c&&(N(this.c),this.c=null);b&&(this.b=Q(b,"precompose",function(b){var d=Dg(this);d.eb=!1;d.zIndex=Infinity;b.frameState.layerStatesArray.push(d);b.frameState.layerStates[I(this)]=d},this),this.c=Q(this,"change",b.render,b),this.v())};p.Zb=function(b){this.set("source",b)};function Ig(b,c,d,e,f,g,h,k){Db(b);0===c&&0===d||Fb(b,c,d);1==e&&1==f||Gb(b,e,f);0!==g&&Hb(b,g);0===h&&0===k||Fb(b,h,k);return b}function Jg(b,c){return b[0]==c[0]&&b[1]==c[1]&&b[4]==c[4]&&b[5]==c[5]&&b[12]==c[12]&&b[13]==c[13]}function Kg(b,c,d){var e=b[1],f=b[5],g=b[13],h=c[0];c=c[1];d[0]=b[0]*h+b[4]*c+b[12];d[1]=e*h+f*c+g;return d};function Lg(b){ob.call(this);this.a=b}M(Lg,ob);Lg.prototype.fb=pa;Lg.prototype.Ic=dc;Lg.prototype.l=function(b,c,d){return function(e,f){return We(b,c,e,f,function(b){d[e]||(d[e]={});d[e][b.L.toString()]=b})}};function Mg(b){var c=b.a;c.cb()&&"ready"==c.Pb()&&b.v()}function Ng(b,c){c.Qc()&&b.postRenderFunctions.push(na(function(b,c,f){c=I(b).toString();b.Rc(f.viewState.projection,f.usedTiles[c])},c))}function Og(b,c){if(c){var d,e,f;e=0;for(f=c.length;e<f;++e)d=c[e],b[I(d).toString()]=d}}
+function Pg(b,c){var d=c.w;void 0!==d&&("string"===typeof d?b.logos[d]="":ha(d)&&(b.logos[d.src]=d.href))}function Qg(b,c,d,e){c=I(c).toString();d=d.toString();c in b?d in b[c]?(b=b[c][d],e.a<b.a&&(b.a=e.a),e.f>b.f&&(b.f=e.f),e.b<b.b&&(b.b=e.b),e.c>b.c&&(b.c=e.c)):b[c][d]=e:(b[c]={},b[c][d]=e)}function Rg(b,c,d){return[c*(Math.round(b[0]/c)+d[0]%2/2),c*(Math.round(b[1]/c)+d[1]%2/2)]}
+function Sg(b,c,d,e,f,g,h,k,l,m){var n=I(c).toString();n in b.wantedTiles||(b.wantedTiles[n]={});var q=b.wantedTiles[n];b=b.tileQueue;var r=d.minZoom,u,w,y,z,D,t;for(t=h;t>=r;--t)for(w=Ke(d,g,t,w),y=d.I(t),z=w.a;z<=w.f;++z)for(D=w.b;D<=w.c;++D)h-t<=k?(u=Tg(c,t,z,D,e,f),0==u.N()&&(q[u.L.toString()]=!0,u.getKey()in b.f||b.c([u,n,Oe(d,u.L),y])),void 0!==l&&l.call(m,u)):c.Yc(t,z,D,f)};function Ug(b){this.l=b.opacity;this.i=b.rotateWithView;this.H=b.rotation;this.gb=b.scale;this.u=b.snapToPixel}Ug.prototype.Z=function(){return this.H};function Vg(b){b=b||{};this.g=void 0!==b.anchor?b.anchor:[.5,.5];this.c=null;this.b=void 0!==b.anchorOrigin?b.anchorOrigin:"top-left";this.j=void 0!==b.anchorXUnits?b.anchorXUnits:"fraction";this.A=void 0!==b.anchorYUnits?b.anchorYUnits:"fraction";var c=void 0!==b.crossOrigin?b.crossOrigin:null,d=void 0!==b.img?b.img:null,e=void 0!==b.imgSize?b.imgSize:null,f=b.src;void 0!==f&&0!==f.length||!d||(f=d.src||I(d).toString());var g=void 0!==b.src?0:2,h;void 0!==b.color?(h=b.color,h=Array.isArray(h)?h:
+xd(h)):h=null;var k=Wg.ua(),l=k.get(f,c,h);l||(l=new Xg(d,f,e,c,g,h),k.set(f,c,h,l));this.a=l;this.s=void 0!==b.offset?b.offset:[0,0];this.f=void 0!==b.offsetOrigin?b.offsetOrigin:"top-left";this.h=null;this.o=void 0!==b.size?b.size:null;Ug.call(this,{opacity:void 0!==b.opacity?b.opacity:1,rotation:void 0!==b.rotation?b.rotation:0,scale:void 0!==b.scale?b.scale:1,snapToPixel:void 0!==b.snapToPixel?b.snapToPixel:!0,rotateWithView:void 0!==b.rotateWithView?b.rotateWithView:!1})}M(Vg,Ug);p=Vg.prototype;
+p.jb=function(){if(this.c)return this.c;var b=this.g,c=this.Qa();if("fraction"==this.j||"fraction"==this.A){if(!c)return null;b=this.g.slice();"fraction"==this.j&&(b[0]*=c[0]);"fraction"==this.A&&(b[1]*=c[1])}if("top-left"!=this.b){if(!c)return null;b===this.g&&(b=this.g.slice());if("top-right"==this.b||"bottom-right"==this.b)b[0]=-b[0]+c[0];if("bottom-left"==this.b||"bottom-right"==this.b)b[1]=-b[1]+c[1]}return this.c=b};p.T=function(b){return this.a.T(b)};p.wc=function(){return this.a.b};p.rb=function(){return this.a.f};
+p.Xb=function(){var b=this.a;if(!b.l)if(b.i){var c=b.b[0],d=b.b[1],e=rf(c,d);e.fillRect(0,0,c,d);b.l=e.canvas}else b.l=b.a;return b.l};p.ka=function(){if(this.h)return this.h;var b=this.s;if("top-left"!=this.f){var c=this.Qa(),d=this.a.b;if(!c||!d)return null;b=b.slice();if("top-right"==this.f||"bottom-right"==this.f)b[0]=d[0]-c[0]-b[0];if("bottom-left"==this.f||"bottom-right"==this.f)b[1]=d[1]-c[1]-b[1]}return this.h=b};p.Qa=function(){return this.o?this.o:this.a.b};
+p.Bc=function(b,c){return Q(this.a,"change",b,c)};p.load=function(){this.a.load()};p.Xc=function(b,c){gb(this.a,"change",b,c)};function Xg(b,c,d,e,f,g){mb.call(this);this.l=null;this.a=b?b:new Image;null!==e&&(this.a.crossOrigin=e);this.c=g?document.createElement("CANVAS"):null;this.h=g;this.g=null;this.f=f;this.b=d;this.o=c;this.i=!1;2==this.f&&Yg(this)}M(Xg,mb);function Yg(b){var c=rf(1,1);try{c.drawImage(b.a,0,0),c.getImageData(0,0,1,1)}catch(d){b.i=!0}}
+Xg.prototype.j=function(){this.f=3;this.g.forEach(N);this.g=null;S(this,"change")};
+Xg.prototype.s=function(){this.f=2;this.b&&(this.a.width=this.b[0],this.a.height=this.b[1]);this.b=[this.a.width,this.a.height];this.g.forEach(N);this.g=null;Yg(this);if(!this.i&&null!==this.h){this.c.width=this.a.width;this.c.height=this.a.height;var b=this.c.getContext("2d");b.drawImage(this.a,0,0);for(var c=b.getImageData(0,0,this.a.width,this.a.height),d=c.data,e=this.h[0]/255,f=this.h[1]/255,g=this.h[2]/255,h=0,k=d.length;h<k;h+=4)d[h]*=e,d[h+1]*=f,d[h+2]*=g;b.putImageData(c,0,0)}S(this,"change")};
+Xg.prototype.T=function(){return this.c?this.c:this.a};Xg.prototype.load=function(){if(0==this.f){this.f=1;this.g=[Q(this.a,"error",this.j,this,!0),Q(this.a,"load",this.s,this,!0)];try{this.a.src=this.o}catch(b){this.j()}}};function Wg(){this.a={};this.b=0}aa(Wg);Wg.prototype.clear=function(){this.a={};this.b=0};Wg.prototype.get=function(b,c,d){b=c+":"+b+":"+(d?vd(d):"null");return b in this.a?this.a[b]:null};Wg.prototype.set=function(b,c,d,e){this.a[c+":"+b+":"+(d?vd(d):"null")]=e;++this.b};function Zg(b,c){this.h=c;this.f={};this.A={}}M(Zg,ib);function $g(b){var c=b.viewState,d=b.coordinateToPixelMatrix;Ig(d,b.size[0]/2,b.size[1]/2,1/c.resolution,-1/c.resolution,-c.rotation,-c.center[0],-c.center[1]);Eb(d,b.pixelToCoordinateMatrix)}p=Zg.prototype;p.J=function(){for(var b in this.f)jb(this.f[b])};function ah(){var b=Wg.ua();if(32<b.b){var c=0,d,e;for(d in b.a)e=b.a[d],0!==(c++&3)||nb(e)||(delete b.a[d],--b.b)}}
+p.Wb=function(b,c,d,e,f,g){function h(b,f){var g=I(b).toString(),h=c.layerStates[I(f)].eb;if(!(g in c.skippedFeatureUids)||h)return d.call(e,b,h?f:null)}var k,l=c.viewState,m=l.resolution,n=l.projection,l=b;if(n.a){var n=n.C(),q=Vb(n),r=b[0];if(r<n[0]||r>n[2])l=[r+q*Math.ceil((n[0]-r)/q),b[1]]}n=c.layerStatesArray;for(q=n.length-1;0<=q;--q){var u=n[q],r=u.layer;if(Hg(u,m)&&f.call(g,r)&&(u=bh(this,r),r.V()&&(k=u.fb(r.V().j?l:b,c,h,e)),k))return k}};
+p.Jc=function(b,c,d,e){return void 0!==this.Wb(b,c,cc,this,d,e)};function bh(b,c){var d=I(c).toString();if(d in b.f)return b.f[d];var e=b.Jb(c);b.f[d]=e;b.A[d]=Q(e,"change",b.Dd,b);return e}p.Dd=function(){this.h.render()};p.sb=pa;p.Be=function(b,c){for(var d in this.f)if(!(c&&d in c.layerStates)){var e=d,f=this.f[e];delete this.f[e];N(this.A[e]);delete this.A[e];jb(f)}};function ch(b,c){for(var d in b.f)if(!(d in c.layerStates)){c.postRenderFunctions.push(b.Be.bind(b));break}}
+function Oa(b,c){return b.zIndex-c.zIndex};function dh(b,c){this.j=b;this.l=c;this.a=[];this.b=[];this.f={}}dh.prototype.clear=function(){this.a.length=0;this.b.length=0;Ya(this.f)};function eh(b){var c=b.a,d=b.b,e=c[0];1==c.length?(c.length=0,d.length=0):(c[0]=c.pop(),d[0]=d.pop(),fh(b,0));c=b.l(e);delete b.f[c];return e}dh.prototype.c=function(b){var c=this.j(b);return Infinity!=c?(this.a.push(b),this.b.push(c),this.f[this.l(b)]=!0,gh(this,0,this.a.length-1),!0):!1};
+function fh(b,c){for(var d=b.a,e=b.b,f=d.length,g=d[c],h=e[c],k=c;c<f>>1;){var l=2*c+1,m=2*c+2,l=m<f&&e[m]<e[l]?m:l;d[c]=d[l];e[c]=e[l];c=l}d[c]=g;e[c]=h;gh(b,k,c)}function gh(b,c,d){var e=b.a;b=b.b;for(var f=e[d],g=b[d];d>c;){var h=d-1>>1;if(b[h]>g)e[d]=e[h],b[d]=b[h],d=h;else break}e[d]=f;b[d]=g}function hh(b){var c=b.j,d=b.a,e=b.b,f=0,g=d.length,h,k,l;for(k=0;k<g;++k)h=d[k],l=c(h),Infinity==l?delete b.f[b.l(h)]:(e[f]=l,d[f++]=h);d.length=f;e.length=f;for(c=(b.a.length>>1)-1;0<=c;c--)fh(b,c)};function ih(b,c){dh.call(this,function(c){return b.apply(null,c)},function(b){return b[0].getKey()});this.A=c;this.h=0;this.g={}}M(ih,dh);ih.prototype.c=function(b){var c=ih.X.c.call(this,b);c&&Q(b[0],"change",this.i,this);return c};ih.prototype.i=function(b){b=b.target;var c=b.N();if(2===c||3===c||4===c||5===c)gb(b,"change",this.i,this),b=b.getKey(),b in this.g&&(delete this.g[b],--this.h),this.A()};function jh(){this.a=[];this.b=this.f=0}function kh(b,c){var d=b.b,e=.05-d,f=Math.log(.05/b.b)/-.005;return cd({source:c,duration:f,easing:function(b){return d*(Math.exp(-.005*b*f)-1)/e}})};function lh(b){T.call(this);this.S=null;this.set("active",!0);this.handleEvent=b.handleEvent}M(lh,T);lh.prototype.setMap=function(b){this.S=b};function mh(b,c,d,e,f){if(void 0!==d){var g=c.Z(),h=c.ia();void 0!==g&&h&&f&&0<f&&(b.fa(dd({rotation:g,duration:f,easing:$c})),e&&b.fa(cd({source:h,duration:f,easing:$c})));c.rotate(d,e)}}function nh(b,c,d,e,f){var g=c.I();d=c.constrainResolution(g,d,0);oh(b,c,d,e,f)}
+function oh(b,c,d,e,f){if(d){var g=c.I(),h=c.ia();void 0!==g&&h&&d!==g&&f&&0<f&&(b.fa(ed({resolution:g,duration:f,easing:$c})),e&&b.fa(cd({source:h,duration:f,easing:$c})));if(e){var k;b=c.ia();f=c.I();void 0!==b&&void 0!==f&&(k=[e[0]-d*(e[0]-b[0])/f,e[1]-d*(e[1]-b[1])/f]);c.oa(k)}Yc(c,d)}};function ph(b){b=b?b:{};this.a=b.delta?b.delta:1;lh.call(this,{handleEvent:qh});this.b=void 0!==b.duration?b.duration:250}M(ph,lh);function qh(b){var c=!1,d=b.originalEvent;if(b.type==tg){var c=b.map,e=b.coordinate,d=d.shiftKey?-this.a:this.a,f=c.O();nh(c,f,d,e,this.b);b.preventDefault();c=!0}return!c};function rh(b){b=b.originalEvent;return b.altKey&&!(b.metaKey||b.ctrlKey)&&b.shiftKey}function sh(b){b=b.originalEvent;return 0==b.button&&!(Jd&&Cf&&b.ctrlKey)}function th(b){b=b.originalEvent;return!b.altKey&&!(b.metaKey||b.ctrlKey)&&!b.shiftKey}function uh(b){b=b.originalEvent;return!b.altKey&&!(b.metaKey||b.ctrlKey)&&b.shiftKey}function vh(b){b=b.originalEvent.target.tagName;return"INPUT"!==b&&"SELECT"!==b&&"TEXTAREA"!==b}function wh(b){return"mouse"==b.a.pointerType};function xh(b){b=b?b:{};lh.call(this,{handleEvent:b.handleEvent?b.handleEvent:yh});this.wb=b.handleDownEvent?b.handleDownEvent:dc;this.xb=b.handleDragEvent?b.handleDragEvent:pa;this.yb=b.handleMoveEvent?b.handleMoveEvent:pa;this.zb=b.handleUpEvent?b.handleUpEvent:dc;this.s=!1;this.G={};this.c=[]}M(xh,lh);function zh(b){for(var c=b.length,d=0,e=0,f=0;f<c;f++)d+=b[f].clientX,e+=b[f].clientY;return[d/c,e/c]}
+function yh(b){if(!(b instanceof pg))return!0;var c=!1,d=b.type;if(d===yg||d===Ag||d===wg)d=b.a,b.type==wg?delete this.G[d.pointerId]:b.type==yg?this.G[d.pointerId]=d:d.pointerId in this.G&&(this.G[d.pointerId]=d),this.c=Za(this.G);this.s&&(b.type==Ag?this.xb(b):b.type==wg&&(this.s=this.zb(b)));b.type==yg?(this.s=b=this.wb(b),c=this.w(b)):b.type==zg&&this.yb(b);return!c}xh.prototype.w=function(b){return b};function Ah(b){xh.call(this,{handleDownEvent:Bh,handleDragEvent:Ch,handleUpEvent:Dh});b=b?b:{};this.a=b.kinetic;this.b=this.g=null;this.i=b.condition?b.condition:th;this.h=!1}M(Ah,xh);function Ch(b){var c=zh(this.c);this.a&&this.a.a.push(c[0],c[1],Date.now());if(this.b){var d=this.b[0]-c[0],e=c[1]-this.b[1];b=b.map;var f=b.O(),g=f.N(),e=d=[d,e],h=g.resolution;e[0]*=h;e[1]*=h;vb(d,g.rotation);ub(d,g.center);d=f.a.center(d);b.render();f.oa(d)}this.b=c}
+function Dh(b){b=b.map;var c=b.O();if(0===this.c.length){var d;if(d=!this.h&&this.a)if(d=this.a,6>d.a.length)d=!1;else{var e=Date.now()-100,f=d.a.length-3;if(d.a[f+2]<e)d=!1;else{for(var g=f-3;0<g&&d.a[g+2]>e;)g-=3;var e=d.a[f+2]-d.a[g+2],h=d.a[f]-d.a[g],f=d.a[f+1]-d.a[g+1];d.f=Math.atan2(f,h);d.b=Math.sqrt(h*h+f*f)/e;d=.05<d.b}}d&&(d=(.05-this.a.b)/-.005,f=this.a.f,g=c.ia(),this.g=kh(this.a,g),b.fa(this.g),g=Eh(b,g),d=b.ta([g[0]-d*Math.cos(f),g[1]-d*Math.sin(f)]),d=c.a.center(d),c.oa(d));Zc(c,-1);
+b.render();return!1}this.b=null;return!0}function Bh(b){if(0<this.c.length&&this.i(b)){var c=b.map,d=c.O();this.b=null;this.s||Zc(d,1);c.render();this.g&&La(c.B,this.g)&&(d.oa(b.frameState.viewState.center),this.g=null);this.a&&(b=this.a,b.a.length=0,b.f=0,b.b=0);this.h=1<this.c.length;return!0}return!1}Ah.prototype.w=dc;function Fh(b){b=b?b:{};xh.call(this,{handleDownEvent:Gh,handleDragEvent:Hh,handleUpEvent:Ih});this.b=b.condition?b.condition:rh;this.a=void 0;this.g=void 0!==b.duration?b.duration:250}M(Fh,xh);function Hh(b){if(wh(b)){var c=b.map,d=c.Pa();b=b.pixel;d=Math.atan2(d[1]/2-b[1],b[0]-d[0]/2);if(void 0!==this.a){b=d-this.a;var e=c.O(),f=e.Z();c.render();mh(c,e,f-b)}this.a=d}}
+function Ih(b){if(!wh(b))return!0;b=b.map;var c=b.O();Zc(c,-1);var d=c.Z(),e=this.g,d=c.constrainRotation(d,0);mh(b,c,d,void 0,e);return!1}function Gh(b){return wh(b)&&sh(b)&&this.b(b)?(b=b.map,Zc(b.O(),1),b.render(),this.a=void 0,!0):!1}Fh.prototype.w=dc;function Jh(b){this.c=null;this.b=document.createElement("div");this.b.style.position="absolute";this.b.className="ol-box "+b;this.f=this.g=this.a=null}M(Jh,ib);Jh.prototype.J=function(){this.setMap(null)};function Kh(b){var c=b.g,d=b.f;b=b.b.style;b.left=Math.min(c[0],d[0])+"px";b.top=Math.min(c[1],d[1])+"px";b.width=Math.abs(d[0]-c[0])+"px";b.height=Math.abs(d[1]-c[1])+"px"}
+Jh.prototype.setMap=function(b){if(this.a){this.a.o.removeChild(this.b);var c=this.b.style;c.left=c.top=c.width=c.height="inherit"}(this.a=b)&&this.a.o.appendChild(this.b)};function Lh(b){var c=b.g,d=b.f,c=[c,[c[0],d[1]],d,[d[0],c[1]]].map(b.a.ta,b.a);c[4]=c[0].slice();b.c?b.c.W([c]):b.c=new Tc([c])}Jh.prototype.M=function(){return this.c};function Mh(b,c,d){R.call(this,b);this.coordinate=c;this.mapBrowserEvent=d}M(Mh,R);function Nh(b){xh.call(this,{handleDownEvent:Oh,handleDragEvent:Ph,handleUpEvent:Qh});b=b?b:{};this.a=new Jh(b.className||"ol-dragbox");this.b=null;this.j=b.condition?b.condition:cc;this.i=b.boxEndCondition?b.boxEndCondition:Rh}M(Nh,xh);function Rh(b,c,d){b=d[0]-c[0];c=d[1]-c[1];return 64<=b*b+c*c}
+function Ph(b){if(wh(b)){var c=this.a,d=b.pixel;c.g=this.b;c.f=d;Lh(c);Kh(c);S(this,new Mh("boxdrag",b.coordinate,b))}}Nh.prototype.M=function(){return this.a.M()};Nh.prototype.h=pa;function Qh(b){if(!wh(b))return!0;this.a.setMap(null);this.i(b,this.b,b.pixel)&&(this.h(b),S(this,new Mh("boxend",b.coordinate,b)));return!1}
+function Oh(b){if(wh(b)&&sh(b)&&this.j(b)){this.b=b.pixel;this.a.setMap(b.map);var c=this.a,d=this.b;c.g=this.b;c.f=d;Lh(c);Kh(c);S(this,new Mh("boxstart",b.coordinate,b));return!0}return!1};function Sh(b){b=b?b:{};var c=b.condition?b.condition:uh;this.g=void 0!==b.duration?b.duration:200;this.o=void 0!==b.out?b.out:!1;Nh.call(this,{condition:c,className:b.className||"ol-dragzoom"})}M(Sh,Nh);
+Sh.prototype.h=function(){var b=this.S,c=b.O(),d=b.Pa(),e=this.M().C();if(this.o){var f=c.jc(d),e=[Eh(b,Xb(e)),Eh(b,[e[2],e[3]])],g=Pb(void 0),h,k;h=0;for(k=e.length;h<k;++h)Kb(g,e[h]);g=1/Xc(g,d);e=(f[2]-f[0])/2*(g-1);g=(f[3]-f[1])/2*(g-1);f[0]-=e;f[2]+=e;f[1]-=g;f[3]+=g;e=f}d=c.constrainResolution(Xc(e,d));f=c.I();g=c.ia();b.fa(ed({resolution:f,duration:this.g,easing:$c}));b.fa(cd({source:g,duration:this.g,easing:$c}));c.oa(Yb(e));Yc(c,d)};function Th(b){lh.call(this,{handleEvent:Uh});b=b||{};this.a=function(b){return th.call(this,b)&&vh.call(this,b)};this.b=void 0!==b.condition?b.condition:this.a;this.c=void 0!==b.duration?b.duration:100;this.g=void 0!==b.pixelDelta?b.pixelDelta:128}M(Th,lh);
+function Uh(b){var c=!1;if("keydown"==b.type){var d=b.originalEvent.keyCode;if(this.b(b)&&(40==d||37==d||39==d||38==d)){var e=b.map,c=e.O(),f=c.I()*this.g,g=0,h=0;40==d?h=-f:37==d?g=-f:39==d?g=f:h=f;d=[g,h];vb(d,c.Z());f=this.c;if(g=c.ia())f&&0<f&&e.fa(cd({source:g,duration:f,easing:bd})),e=c.a.center([g[0]+d[0],g[1]+d[1]]),c.oa(e);b.preventDefault();c=!0}}return!c};function Vh(b){lh.call(this,{handleEvent:Wh});b=b?b:{};this.b=b.condition?b.condition:vh;this.a=b.delta?b.delta:1;this.c=void 0!==b.duration?b.duration:100}M(Vh,lh);function Wh(b){var c=!1;if("keydown"==b.type||"keypress"==b.type){var d=b.originalEvent.charCode;if(this.b(b)&&(43==d||45==d)){c=b.map;d=43==d?this.a:-this.a;c.render();var e=c.O();nh(c,e,d,void 0,this.c);b.preventDefault();c=!0}}return!c};function Xh(b){lh.call(this,{handleEvent:Yh});b=b||{};this.a=0;this.i=void 0!==b.duration?b.duration:250;this.j=void 0!==b.useAnchor?b.useAnchor:!0;this.c=null;this.g=this.b=void 0}M(Xh,lh);
+function Yh(b){var c=!1;if("wheel"==b.type||"mousewheel"==b.type){var c=b.map,d=b.originalEvent;this.j&&(this.c=b.coordinate);var e;"wheel"==b.type?(e=d.deltaY,Af&&d.deltaMode===x.WheelEvent.DOM_DELTA_PIXEL&&(e/=Df),d.deltaMode===x.WheelEvent.DOM_DELTA_LINE&&(e*=40)):"mousewheel"==b.type&&(e=-d.wheelDeltaY,Bf&&(e/=3));this.a+=e;void 0===this.b&&(this.b=Date.now());e=Math.max(80-(Date.now()-this.b),0);x.clearTimeout(this.g);this.g=x.setTimeout(this.h.bind(this,c),e);b.preventDefault();c=!0}return!c}
+Xh.prototype.h=function(b){var c=Ca(this.a,-1,1),d=b.O();b.render();nh(b,d,-c,this.c,this.i);this.a=0;this.c=null;this.g=this.b=void 0};function Zh(b){xh.call(this,{handleDownEvent:$h,handleDragEvent:ai,handleUpEvent:bi});b=b||{};this.b=null;this.g=void 0;this.a=!1;this.h=0;this.j=void 0!==b.threshold?b.threshold:.3;this.i=void 0!==b.duration?b.duration:250}M(Zh,xh);
+function ai(b){var c=0,d=this.c[0],e=this.c[1],d=Math.atan2(e.clientY-d.clientY,e.clientX-d.clientX);void 0!==this.g&&(c=d-this.g,this.h+=c,!this.a&&Math.abs(this.h)>this.j&&(this.a=!0));this.g=d;b=b.map;d=b.a.getBoundingClientRect();e=zh(this.c);e[0]-=d.left;e[1]-=d.top;this.b=b.ta(e);this.a&&(d=b.O(),e=d.Z(),b.render(),mh(b,d,e+c,this.b))}
+function bi(b){if(2>this.c.length){b=b.map;var c=b.O();Zc(c,-1);if(this.a){var d=c.Z(),e=this.b,f=this.i,d=c.constrainRotation(d,0);mh(b,c,d,e,f)}return!1}return!0}function $h(b){return 2<=this.c.length?(b=b.map,this.b=null,this.g=void 0,this.a=!1,this.h=0,this.s||Zc(b.O(),1),b.render(),!0):!1}Zh.prototype.w=dc;function ci(b){xh.call(this,{handleDownEvent:di,handleDragEvent:ei,handleUpEvent:fi});b=b?b:{};this.b=null;this.h=void 0!==b.duration?b.duration:400;this.a=void 0;this.g=1}M(ci,xh);function ei(b){var c=1,d=this.c[0],e=this.c[1],f=d.clientX-e.clientX,d=d.clientY-e.clientY,f=Math.sqrt(f*f+d*d);void 0!==this.a&&(c=this.a/f);this.a=f;1!=c&&(this.g=c);b=b.map;var f=b.O(),d=f.I(),e=b.a.getBoundingClientRect(),g=zh(this.c);g[0]-=e.left;g[1]-=e.top;this.b=b.ta(g);b.render();oh(b,f,d*c,this.b)}
+function fi(b){if(2>this.c.length){b=b.map;var c=b.O();Zc(c,-1);var d=c.I(),e=this.b,f=this.h,d=c.constrainResolution(d,0,this.g-1);oh(b,c,d,e,f);return!1}return!0}function di(b){return 2<=this.c.length?(b=b.map,this.b=null,this.a=void 0,this.g=1,this.s||Zc(b.O(),1),b.render(),!0):!1}ci.prototype.w=dc;function gi(b){var c=b||{};b=Wa({},c);delete b.layers;c=c.layers;Cg.call(this,b);this.b=[];this.a={};Q(this,rb("layers"),this.Fd,this);c?Array.isArray(c)&&(c=new ld(c.slice())):c=new ld;this.set("layers",c)}M(gi,Cg);p=gi.prototype;p.ob=function(){this.cb()&&this.v()};
+p.Fd=function(){this.b.forEach(N);this.b.length=0;var b=this.get("layers");this.b.push(Q(b,"add",this.Ed,this),Q(b,"remove",this.Gd,this));for(var c in this.a)this.a[c].forEach(N);Ya(this.a);var b=b.a,d,e;c=0;for(d=b.length;c<d;c++)e=b[c],this.a[I(e).toString()]=[Q(e,"propertychange",this.ob,this),Q(e,"change",this.ob,this)];this.v()};p.Ed=function(b){b=b.element;var c=I(b).toString();this.a[c]=[Q(b,"propertychange",this.ob,this),Q(b,"change",this.ob,this)];this.v()};
+p.Gd=function(b){b=I(b.element).toString();this.a[b].forEach(N);delete this.a[b];this.v()};p.Lb=function(b){var c=void 0!==b?b:[],d=c.length;nd(this.get("layers"),function(b){b.Lb(c)});b=Dg(this);var e,f;for(e=c.length;d<e;d++)f=c[d],f.opacity*=b.opacity,f.visible=f.visible&&b.visible,f.maxResolution=Math.min(f.maxResolution,b.maxResolution),f.minResolution=Math.max(f.minResolution,b.minResolution),void 0!==b.extent&&(f.extent=void 0!==f.extent?$b(f.extent,b.extent):b.extent);return c};p.Pb=function(){return"ready"};function hi(b){ic.call(this,{code:b,units:"m",extent:ii,global:!0,worldExtent:ji})}M(hi,ic);hi.prototype.getPointResolution=function(b,c){return b/Da(c[1]/6378137)};var ki=6378137*Math.PI,ii=[-ki,-ki,ki,ki],ji=[-180,-85,180,85],li="EPSG:3857 EPSG:102100 EPSG:102113 EPSG:900913 urn:ogc:def:crs:EPSG:6.18:3:3857 urn:ogc:def:crs:EPSG::3857 http://www.opengis.net/gml/srs/epsg.xml#3857".split(" ").map(function(b){return new hi(b)});
+function mi(b,c,d){var e=b.length;d=1<d?d:2;void 0===c&&(2<d?c=b.slice():c=Array(e));for(var f=0;f<e;f+=d)c[f]=6378137*Math.PI*b[f]/180,c[f+1]=6378137*Math.log(Math.tan(Math.PI*(b[f+1]+90)/360));return c}function ni(b,c,d){var e=b.length;d=1<d?d:2;void 0===c&&(2<d?c=b.slice():c=Array(e));for(var f=0;f<e;f+=d)c[f]=180*b[f]/(6378137*Math.PI),c[f+1]=360*Math.atan(Math.exp(b[f+1]/6378137))/Math.PI-90;return c};var oi=new ec(6378137);function pi(b,c){ic.call(this,{code:b,units:"degrees",extent:qi,axisOrientation:c,global:!0,metersPerUnit:ri,worldExtent:qi})}M(pi,ic);pi.prototype.getPointResolution=function(b){return b};
+var qi=[-180,-90,180,90],ri=Math.PI*oi.radius/180,si=[new pi("CRS:84"),new pi("EPSG:4326","neu"),new pi("urn:ogc:def:crs:EPSG::4326","neu"),new pi("urn:ogc:def:crs:EPSG:6.6:4326","neu"),new pi("urn:ogc:def:crs:OGC:1.3:CRS84"),new pi("urn:ogc:def:crs:OGC:2:84"),new pi("http://www.opengis.net/gml/srs/epsg.xml#4326","neu"),new pi("urn:x-ogc:def:crs:EPSG:4326","neu")];function X(b){b=b?b:{};var c=Wa({},b);delete c.preload;delete c.useInterimTilesOnError;Gg.call(this,c);this.set("preload",void 0!==b.preload?b.preload:0);this.set("useInterimTilesOnError",void 0!==b.useInterimTilesOnError?b.useInterimTilesOnError:!0)}M(X,Gg);function ti(b){return b.get("useInterimTilesOnError")};var ui=[0,0,0,1],vi=[],wi=[0,0,0,1];function xi(b,c,d,e){0!==c&&(b.translate(d,e),b.rotate(c),b.translate(-d,-e))};function yi(b){b=b||{};this.a=void 0!==b.color?b.color:null;this.b=void 0}yi.prototype.ga=function(){return this.a};function zi(){this.b=-1};function Ai(){this.b=-1;this.b=64;this.a=Array(4);this.g=Array(this.b);this.c=this.f=0;this.a[0]=1732584193;this.a[1]=4023233417;this.a[2]=2562383102;this.a[3]=271733878;this.c=this.f=0}M(Ai,zi);
+function Bi(b,c,d){d||(d=0);var e=Array(16);if(da(c))for(var f=0;16>f;++f)e[f]=c.charCodeAt(d++)|c.charCodeAt(d++)<<8|c.charCodeAt(d++)<<16|c.charCodeAt(d++)<<24;else for(f=0;16>f;++f)e[f]=c[d++]|c[d++]<<8|c[d++]<<16|c[d++]<<24;c=b.a[0];d=b.a[1];var f=b.a[2],g=b.a[3],h=0,h=c+(g^d&(f^g))+e[0]+3614090360&4294967295;c=d+(h<<7&4294967295|h>>>25);h=g+(f^c&(d^f))+e[1]+3905402710&4294967295;g=c+(h<<12&4294967295|h>>>20);h=f+(d^g&(c^d))+e[2]+606105819&4294967295;f=g+(h<<17&4294967295|h>>>15);h=d+(c^f&(g^
 c))+e[3]+3250441966&4294967295;d=f+(h<<22&4294967295|h>>>10);h=c+(g^d&(f^g))+e[4]+4118548399&4294967295;c=d+(h<<7&4294967295|h>>>25);h=g+(f^c&(d^f))+e[5]+1200080426&4294967295;g=c+(h<<12&4294967295|h>>>20);h=f+(d^g&(c^d))+e[6]+2821735955&4294967295;f=g+(h<<17&4294967295|h>>>15);h=d+(c^f&(g^c))+e[7]+4249261313&4294967295;d=f+(h<<22&4294967295|h>>>10);h=c+(g^d&(f^g))+e[8]+1770035416&4294967295;c=d+(h<<7&4294967295|h>>>25);h=g+(f^c&(d^f))+e[9]+2336552879&4294967295;g=c+(h<<12&4294967295|h>>>20);h=f+
 (d^g&(c^d))+e[10]+4294925233&4294967295;f=g+(h<<17&4294967295|h>>>15);h=d+(c^f&(g^c))+e[11]+2304563134&4294967295;d=f+(h<<22&4294967295|h>>>10);h=c+(g^d&(f^g))+e[12]+1804603682&4294967295;c=d+(h<<7&4294967295|h>>>25);h=g+(f^c&(d^f))+e[13]+4254626195&4294967295;g=c+(h<<12&4294967295|h>>>20);h=f+(d^g&(c^d))+e[14]+2792965006&4294967295;f=g+(h<<17&4294967295|h>>>15);h=d+(c^f&(g^c))+e[15]+1236535329&4294967295;d=f+(h<<22&4294967295|h>>>10);h=c+(f^g&(d^f))+e[1]+4129170786&4294967295;c=d+(h<<5&4294967295|
 h>>>27);h=g+(d^f&(c^d))+e[6]+3225465664&4294967295;g=c+(h<<9&4294967295|h>>>23);h=f+(c^d&(g^c))+e[11]+643717713&4294967295;f=g+(h<<14&4294967295|h>>>18);h=d+(g^c&(f^g))+e[0]+3921069994&4294967295;d=f+(h<<20&4294967295|h>>>12);h=c+(f^g&(d^f))+e[5]+3593408605&4294967295;c=d+(h<<5&4294967295|h>>>27);h=g+(d^f&(c^d))+e[10]+38016083&4294967295;g=c+(h<<9&4294967295|h>>>23);h=f+(c^d&(g^c))+e[15]+3634488961&4294967295;f=g+(h<<14&4294967295|h>>>18);h=d+(g^c&(f^g))+e[4]+3889429448&4294967295;d=f+(h<<20&4294967295|
@@ -159,238 +163,238 @@ c^d)+e[7]+4139469664&4294967295;f=g+(h<<16&4294967295|h>>>16);h=d+(f^g^c)+e[10]+
 g=c+(h<<11&4294967295|h>>>21);h=f+(g^c^d)+e[15]+530742520&4294967295;f=g+(h<<16&4294967295|h>>>16);h=d+(f^g^c)+e[2]+3299628645&4294967295;d=f+(h<<23&4294967295|h>>>9);h=c+(f^(d|~g))+e[0]+4096336452&4294967295;c=d+(h<<6&4294967295|h>>>26);h=g+(d^(c|~f))+e[7]+1126891415&4294967295;g=c+(h<<10&4294967295|h>>>22);h=f+(c^(g|~d))+e[14]+2878612391&4294967295;f=g+(h<<15&4294967295|h>>>17);h=d+(g^(f|~c))+e[5]+4237533241&4294967295;d=f+(h<<21&4294967295|h>>>11);h=c+(f^(d|~g))+e[12]+1700485571&4294967295;c=d+
 (h<<6&4294967295|h>>>26);h=g+(d^(c|~f))+e[3]+2399980690&4294967295;g=c+(h<<10&4294967295|h>>>22);h=f+(c^(g|~d))+e[10]+4293915773&4294967295;f=g+(h<<15&4294967295|h>>>17);h=d+(g^(f|~c))+e[1]+2240044497&4294967295;d=f+(h<<21&4294967295|h>>>11);h=c+(f^(d|~g))+e[8]+1873313359&4294967295;c=d+(h<<6&4294967295|h>>>26);h=g+(d^(c|~f))+e[15]+4264355552&4294967295;g=c+(h<<10&4294967295|h>>>22);h=f+(c^(g|~d))+e[6]+2734768916&4294967295;f=g+(h<<15&4294967295|h>>>17);h=d+(g^(f|~c))+e[13]+1309151649&4294967295;
 d=f+(h<<21&4294967295|h>>>11);h=c+(f^(d|~g))+e[4]+4149444226&4294967295;c=d+(h<<6&4294967295|h>>>26);h=g+(d^(c|~f))+e[11]+3174756917&4294967295;g=c+(h<<10&4294967295|h>>>22);h=f+(c^(g|~d))+e[2]+718787259&4294967295;f=g+(h<<15&4294967295|h>>>17);h=d+(g^(f|~c))+e[9]+3951481745&4294967295;b.a[0]=b.a[0]+c&4294967295;b.a[1]=b.a[1]+(f+(h<<21&4294967295|h>>>11))&4294967295;b.a[2]=b.a[2]+f&4294967295;b.a[3]=b.a[3]+g&4294967295}
-function wi(b,c){var d;void 0===d&&(d=c.length);for(var e=d-b.b,f=b.g,g=b.f,h=0;h<d;){if(0==g)for(;h<=e;)vi(b,c,h),h+=b.b;if(da(c))for(;h<d;){if(f[g++]=c.charCodeAt(h++),g==b.b){vi(b,f);g=0;break}}else for(;h<d;)if(f[g++]=c[h++],g==b.b){vi(b,f);g=0;break}}b.f=g;b.c+=d};function xi(b){b=b||{};this.f=void 0!==b.color?b.color:null;this.Da=b.lineCap;this.a=void 0!==b.lineDash?b.lineDash:null;this.Ea=b.lineJoin;this.Fa=b.miterLimit;this.c=b.width;this.b=void 0}xi.prototype.ga=function(){return this.f};xi.prototype.getLineDash=function(){return this.a};xi.prototype.ha=function(){return this.c};function yi(b){b=b||{};this.h=this.a=this.g=null;this.f=void 0!==b.fill?b.fill:null;this.b=void 0!==b.stroke?b.stroke:null;this.c=b.radius;this.o=[0,0];this.j=this.s=this.A=null;var c=b.atlasManager,d,e=null,f,g=0;this.b&&(f=vd(this.b.ga()),g=this.b.ha(),void 0===g&&(g=1),e=this.b.getLineDash(),yf||(e=null));var h=2*(this.c+g)+1;f={strokeStyle:f,Wc:g,size:h,lineDash:e};if(void 0===c)this.a=document.createElement("CANVAS"),this.a.height=h,this.a.width=h,d=h=this.a.width,c=this.a.getContext("2d"),this.tc(f,
-c,0,0),this.f?this.h=this.a:(c=this.h=document.createElement("CANVAS"),c.height=f.size,c.width=f.size,c=c.getContext("2d"),this.oc(f,c,0,0));else{h=Math.round(h);(e=!this.f)&&(d=this.oc.bind(this,f));if(this.b){g=this.b;if(void 0===g.b){var k="s"+(g.f?vd(g.f):"-")+","+(void 0!==g.Da?g.Da.toString():"-")+","+(g.a?g.a.toString():"-")+","+(void 0!==g.Ea?g.Ea:"-")+","+(void 0!==g.Fa?g.Fa.toString():"-")+","+(void 0!==g.c?g.c.toString():"-"),l=new ui;wi(l,k);var m=Array((56>l.f?l.b:2*l.b)-l.f);m[0]=128;
-for(k=1;k<m.length-8;++k)m[k]=0;for(var n=8*l.c,k=m.length-8;k<m.length;++k)m[k]=n&255,n/=256;wi(l,m);m=Array(16);for(k=n=0;4>k;++k)for(var q=0;32>q;q+=8)m[n++]=l.a[k]>>>q&255;if(8192>=m.length)l=String.fromCharCode.apply(null,m);else for(l="",k=0;k<m.length;k+=8192)l+=String.fromCharCode.apply(null,rd(m,k,k+8192));g.b=l}g=g.b}else g="-";this.f?(l=this.f,void 0===l.b&&(l.b=l.a instanceof CanvasPattern||l.a instanceof CanvasGradient?I(l.a).toString():"f"+(l.a?vd(l.a):"-")),l=l.b):l="-";this.g&&g==
-this.g[1]&&l==this.g[2]&&this.c==this.g[3]||(this.g=["c"+g+l+(void 0!==this.c?this.c.toString():"-"),g,l,this.c]);f=c.add(this.g[0],h,h,this.tc.bind(this,f),d);this.a=f.image;this.o=[f.offsetX,f.offsetY];d=f.image.width;e?this.h=f.Xe:this.h=this.a}this.A=[h/2,h/2];this.s=[h,h];this.j=[d,d];Og.call(this,{opacity:1,rotateWithView:!1,rotation:0,scale:1,snapToPixel:void 0!==b.snapToPixel?b.snapToPixel:!0})}M(yi,Og);p=yi.prototype;p.jb=function(){return this.A};p.Ka=function(){return this.f};p.Wb=function(){return this.h};
-p.T=function(){return this.a};p.rb=function(){return 2};p.wc=function(){return this.j};p.ka=function(){return this.o};p.Pa=function(){return this.s};p.va=function(){return this.b};p.Bc=pa;p.load=pa;p.Xc=pa;p.tc=function(b,c,d,e){c.setTransform(1,0,0,1,0,0);c.translate(d,e);c.beginPath();c.arc(b.size/2,b.size/2,this.c,0,2*Math.PI,!0);this.f&&(c.fillStyle=yd(this.f.ga()),c.fill());this.b&&(c.strokeStyle=b.strokeStyle,c.lineWidth=b.Wc,b.lineDash&&c.setLineDash(b.lineDash),c.stroke());c.closePath()};
-p.oc=function(b,c,d,e){c.setTransform(1,0,0,1,0,0);c.translate(d,e);c.beginPath();c.arc(b.size/2,b.size/2,this.c,0,2*Math.PI,!0);c.fillStyle=vd(oi);c.fill();this.b&&(c.strokeStyle=b.strokeStyle,c.lineWidth=b.Wc,b.lineDash&&c.setLineDash(b.lineDash),c.stroke());c.closePath()};function zi(b){b=b||{};this.f=null;this.b=Ai;void 0!==b.geometry&&Bi(this,b.geometry);this.c=void 0!==b.fill?b.fill:null;this.g=void 0!==b.image?b.image:null;this.h=void 0!==b.stroke?b.stroke:null;this.sa=void 0!==b.text?b.text:null;this.a=b.zIndex}zi.prototype.M=function(){return this.f};zi.prototype.Ka=function(){return this.c};zi.prototype.T=function(){return this.g};zi.prototype.va=function(){return this.h};
-function Bi(b,c){ga(c)?b.b=c:"string"===typeof c?b.b=function(b){return b.get(c)}:c?void 0!==c&&(b.b=function(){return c}):b.b=Ai;b.f=c}function Ci(b){if(!ga(b)){var c;c=Array.isArray(b)?b:[b];b=function(){return c}}return b}var Di=null;function Ei(){if(!Di){var b=new si({color:"rgba(255,255,255,0.4)"}),c=new xi({color:"#3399CC",width:1.25});Di=[new zi({image:new yi({fill:b,stroke:c,radius:5}),fill:b,stroke:c})]}return Di}
-function Fi(){var b={},c=[255,255,255,1],d=[0,153,255,1];b.Polygon=[new zi({fill:new si({color:[255,255,255,.5]})})];b.MultiPolygon=b.Polygon;b.LineString=[new zi({stroke:new xi({color:c,width:5})}),new zi({stroke:new xi({color:d,width:3})})];b.MultiLineString=b.LineString;b.Circle=b.Polygon.concat(b.LineString);b.Point=[new zi({image:new yi({radius:6,fill:new si({color:d}),stroke:new xi({color:c,width:1.5})}),zIndex:Infinity})];b.MultiPoint=b.Point;b.GeometryCollection=b.Polygon.concat(b.LineString,
-b.Point);return b}function Ai(b){return b.M()};function Y(b){b=b?b:{};var c=Wa({},b);delete c.style;delete c.renderBuffer;delete c.updateWhileAnimating;delete c.updateWhileInteracting;Ag.call(this,c);this.a=void 0!==b.renderBuffer?b.renderBuffer:100;this.o=null;this.g=void 0;this.s(b.style);this.i=void 0!==b.updateWhileAnimating?b.updateWhileAnimating:!1;this.j=void 0!==b.updateWhileInteracting?b.updateWhileInteracting:!1}M(Y,Ag);Y.prototype.s=function(b){this.o=void 0!==b?b:Ei;this.g=null===b?void 0:Ci(this.o);this.v()};function Gi(b,c,d,e,f){this.c=b;this.u=c;this.l=d;this.w=e;this.Ja=f;this.g=this.a=this.b=this.X=this.ba=this.S=null;this.aa=this.ja=this.o=this.D=this.K=this.B=0;this.ea=!1;this.h=this.na=0;this.za=!1;this.G=0;this.f="";this.j=this.H=this.Aa=this.pa=0;this.P=this.A=this.i=null;this.s=[];this.Ba=zb()}M(Gi,yg);
-function Hi(b,c,d){if(b.g){c=Ac(c,0,d,2,b.w,b.s);d=b.c;var e=b.Ba,f=d.globalAlpha;1!=b.o&&(d.globalAlpha=f*b.o);var g=b.na;b.ea&&(g+=b.Ja);var h,k;h=0;for(k=c.length;h<k;h+=2){var l=c[h]-b.B,m=c[h+1]-b.K;b.za&&(l=Math.round(l),m=Math.round(m));if(0!==g||1!=b.h){var n=l+b.B,q=m+b.K;Cg(e,n,q,b.h,b.h,g,-n,-q);d.setTransform(e[0],e[1],e[4],e[5],e[12],e[13])}d.drawImage(b.g,b.ja,b.aa,b.G,b.D,l,m,b.G,b.D)}0===g&&1==b.h||d.setTransform(1,0,0,1,0,0);1!=b.o&&(d.globalAlpha=f)}}
-function Ii(b,c,d,e){var f=0;if(b.P&&""!==b.f){b.i&&Ji(b,b.i);b.A&&Ki(b,b.A);var g=b.P,h=b.c,k=b.X;k?(k.font!=g.font&&(k.font=h.font=g.font),k.textAlign!=g.textAlign&&(k.textAlign=h.textAlign=g.textAlign),k.textBaseline!=g.textBaseline&&(k.textBaseline=h.textBaseline=g.textBaseline)):(h.font=g.font,h.textAlign=g.textAlign,h.textBaseline=g.textBaseline,b.X={font:g.font,textAlign:g.textAlign,textBaseline:g.textBaseline});c=Ac(c,f,d,e,b.w,b.s);for(g=b.c;f<d;f+=e){h=c[f]+b.pa;k=c[f+1]+b.Aa;if(0!==b.H||
-1!=b.j){var l=Cg(b.Ba,h,k,b.j,b.j,b.H,-h,-k);g.setTransform(l[0],l[1],l[4],l[5],l[12],l[13])}b.A&&g.strokeText(b.f,h,k);b.i&&g.fillText(b.f,h,k)}0===b.H&&1==b.j||g.setTransform(1,0,0,1,0,0)}}function Li(b,c,d,e,f,g){var h=b.c;b=Ac(c,d,e,f,b.w,b.s);h.moveTo(b[0],b[1]);c=b.length;g&&(c-=2);for(d=2;d<c;d+=2)h.lineTo(b[d],b[d+1]);g&&h.closePath();return e}function Mi(b,c,d,e,f){var g,h;g=0;for(h=e.length;g<h;++g)d=Li(b,c,d,e[g],f,!0);return d}p=Gi.prototype;
-p.nc=function(b){if(ac(this.l,b.C())){if(this.b||this.a){this.b&&Ji(this,this.b);this.a&&Ki(this,this.a);var c;c=this.w;var d=this.s,e=b.a;c=e?Ac(e,0,e.length,b.b,c,d):null;d=c[2]-c[0];e=c[3]-c[1];d=Math.sqrt(d*d+e*e);e=this.c;e.beginPath();e.arc(c[0],c[1],d,0,2*Math.PI);this.b&&e.fill();this.a&&e.stroke()}""!==this.f&&Ii(this,b.a.slice(0,b.b),2,2)}};p.Za=function(b){var c=b.a;b=b.b;this.g&&Hi(this,c,c.length);""!==this.f&&Ii(this,c,c.length,b)};
-p.Ya=function(b){var c=b.a;b=b.b;this.g&&Hi(this,c,c.length);""!==this.f&&Ii(this,c,c.length,b)};p.pc=function(b){if(ac(this.l,b.C())){if(this.a){Ki(this,this.a);var c=this.c,d=b.a;c.beginPath();Li(this,d,0,d.length,b.b,!1);c.stroke()}""!==this.f&&(b=Ni(b),Ii(this,b,2,2))}};
-p.qc=function(b){var c=b.C();if(ac(this.l,c)){if(this.a){Ki(this,this.a);var c=this.c,d=b.a,e=0,f=b.$a(),g=b.b;c.beginPath();var h,k;h=0;for(k=f.length;h<k;++h)e=Li(this,d,e,f[h],g,!1);c.stroke()}""!==this.f&&(b=Oi(b),Ii(this,b,b.length,2))}};p.sc=function(b){if(ac(this.l,b.C())){if(this.a||this.b){this.b&&Ji(this,this.b);this.a&&Ki(this,this.a);var c=this.c;c.beginPath();Mi(this,Vc(b),0,b.$a(),b.b);this.b&&c.fill();this.a&&c.stroke()}""!==this.f&&(b=Wc(b),Ii(this,b,2,2))}};
-p.rc=function(b){if(ac(this.l,b.C())){if(this.a||this.b){this.b&&Ji(this,this.b);this.a&&Ki(this,this.a);var c=this.c,d=Pi(b),e=0,f=b.c,g=b.b,h,k;h=0;for(k=f.length;h<k;++h){var l=f[h];c.beginPath();e=Mi(this,d,e,l,g);this.b&&c.fill();this.a&&c.stroke()}}""!==this.f&&(b=Qi(b),Ii(this,b,b.length,2))}};function Ji(b,c){var d=b.c,e=b.S;e?e.fillStyle!=c.fillStyle&&(e.fillStyle=d.fillStyle=c.fillStyle):(d.fillStyle=c.fillStyle,b.S={fillStyle:c.fillStyle})}
-function Ki(b,c){var d=b.c,e=b.ba;e?(e.lineCap!=c.lineCap&&(e.lineCap=d.lineCap=c.lineCap),yf&&!Ma(e.lineDash,c.lineDash)&&d.setLineDash(e.lineDash=c.lineDash),e.lineJoin!=c.lineJoin&&(e.lineJoin=d.lineJoin=c.lineJoin),e.lineWidth!=c.lineWidth&&(e.lineWidth=d.lineWidth=c.lineWidth),e.miterLimit!=c.miterLimit&&(e.miterLimit=d.miterLimit=c.miterLimit),e.strokeStyle!=c.strokeStyle&&(e.strokeStyle=d.strokeStyle=c.strokeStyle)):(d.lineCap=c.lineCap,yf&&d.setLineDash(c.lineDash),d.lineJoin=c.lineJoin,d.lineWidth=
+function Ci(b,c){var d;void 0===d&&(d=c.length);for(var e=d-b.b,f=b.g,g=b.f,h=0;h<d;){if(0==g)for(;h<=e;)Bi(b,c,h),h+=b.b;if(da(c))for(;h<d;){if(f[g++]=c.charCodeAt(h++),g==b.b){Bi(b,f);g=0;break}}else for(;h<d;)if(f[g++]=c[h++],g==b.b){Bi(b,f);g=0;break}}b.f=g;b.c+=d};function Di(b){b=b||{};this.f=void 0!==b.color?b.color:null;this.Da=b.lineCap;this.a=void 0!==b.lineDash?b.lineDash:null;this.Ea=b.lineJoin;this.Fa=b.miterLimit;this.c=b.width;this.b=void 0}Di.prototype.ga=function(){return this.f};Di.prototype.getLineDash=function(){return this.a};Di.prototype.ha=function(){return this.c};function Ei(b){b=b||{};this.h=this.a=this.g=null;this.f=void 0!==b.fill?b.fill:null;this.b=void 0!==b.stroke?b.stroke:null;this.c=b.radius;this.o=[0,0];this.j=this.s=this.A=null;var c=b.atlasManager,d,e=null,f,g=0;this.b&&(f=vd(this.b.ga()),g=this.b.ha(),void 0===g&&(g=1),e=this.b.getLineDash(),Ef||(e=null));var h=2*(this.c+g)+1;f={strokeStyle:f,Wc:g,size:h,lineDash:e};if(void 0===c)this.a=document.createElement("CANVAS"),this.a.height=h,this.a.width=h,d=h=this.a.width,c=this.a.getContext("2d"),this.tc(f,
+c,0,0),this.f?this.h=this.a:(c=this.h=document.createElement("CANVAS"),c.height=f.size,c.width=f.size,c=c.getContext("2d"),this.oc(f,c,0,0));else{h=Math.round(h);(e=!this.f)&&(d=this.oc.bind(this,f));if(this.b){g=this.b;if(void 0===g.b){var k="s"+(g.f?vd(g.f):"-")+","+(void 0!==g.Da?g.Da.toString():"-")+","+(g.a?g.a.toString():"-")+","+(void 0!==g.Ea?g.Ea:"-")+","+(void 0!==g.Fa?g.Fa.toString():"-")+","+(void 0!==g.c?g.c.toString():"-"),l=new Ai;Ci(l,k);var m=Array((56>l.f?l.b:2*l.b)-l.f);m[0]=128;
+for(k=1;k<m.length-8;++k)m[k]=0;for(var n=8*l.c,k=m.length-8;k<m.length;++k)m[k]=n&255,n/=256;Ci(l,m);m=Array(16);for(k=n=0;4>k;++k)for(var q=0;32>q;q+=8)m[n++]=l.a[k]>>>q&255;if(8192>=m.length)l=String.fromCharCode.apply(null,m);else for(l="",k=0;k<m.length;k+=8192)l+=String.fromCharCode.apply(null,rd(m,k,k+8192));g.b=l}g=g.b}else g="-";this.f?(l=this.f,void 0===l.b&&(l.b=l.a instanceof CanvasPattern||l.a instanceof CanvasGradient?I(l.a).toString():"f"+(l.a?vd(l.a):"-")),l=l.b):l="-";this.g&&g==
+this.g[1]&&l==this.g[2]&&this.c==this.g[3]||(this.g=["c"+g+l+(void 0!==this.c?this.c.toString():"-"),g,l,this.c]);f=c.add(this.g[0],h,h,this.tc.bind(this,f),d);this.a=f.image;this.o=[f.offsetX,f.offsetY];d=f.image.width;e?this.h=f.Ye:this.h=this.a}this.A=[h/2,h/2];this.s=[h,h];this.j=[d,d];Ug.call(this,{opacity:1,rotateWithView:!1,rotation:0,scale:1,snapToPixel:void 0!==b.snapToPixel?b.snapToPixel:!0})}M(Ei,Ug);p=Ei.prototype;p.jb=function(){return this.A};p.Ka=function(){return this.f};p.Xb=function(){return this.h};
+p.T=function(){return this.a};p.rb=function(){return 2};p.wc=function(){return this.j};p.ka=function(){return this.o};p.Qa=function(){return this.s};p.va=function(){return this.b};p.Bc=pa;p.load=pa;p.Xc=pa;p.tc=function(b,c,d,e){c.setTransform(1,0,0,1,0,0);c.translate(d,e);c.beginPath();c.arc(b.size/2,b.size/2,this.c,0,2*Math.PI,!0);this.f&&(c.fillStyle=yd(this.f.ga()),c.fill());this.b&&(c.strokeStyle=b.strokeStyle,c.lineWidth=b.Wc,b.lineDash&&c.setLineDash(b.lineDash),c.stroke());c.closePath()};
+p.oc=function(b,c,d,e){c.setTransform(1,0,0,1,0,0);c.translate(d,e);c.beginPath();c.arc(b.size/2,b.size/2,this.c,0,2*Math.PI,!0);c.fillStyle=vd(ui);c.fill();this.b&&(c.strokeStyle=b.strokeStyle,c.lineWidth=b.Wc,b.lineDash&&c.setLineDash(b.lineDash),c.stroke());c.closePath()};function Fi(b){b=b||{};this.f=null;this.b=Gi;void 0!==b.geometry&&Hi(this,b.geometry);this.c=void 0!==b.fill?b.fill:null;this.g=void 0!==b.image?b.image:null;this.h=void 0!==b.stroke?b.stroke:null;this.sa=void 0!==b.text?b.text:null;this.a=b.zIndex}Fi.prototype.M=function(){return this.f};Fi.prototype.Ka=function(){return this.c};Fi.prototype.T=function(){return this.g};Fi.prototype.va=function(){return this.h};
+function Hi(b,c){ga(c)?b.b=c:"string"===typeof c?b.b=function(b){return b.get(c)}:c?void 0!==c&&(b.b=function(){return c}):b.b=Gi;b.f=c}function Ii(b){if(!ga(b)){var c;c=Array.isArray(b)?b:[b];b=function(){return c}}return b}var Ji=null;function Ki(){if(!Ji){var b=new yi({color:"rgba(255,255,255,0.4)"}),c=new Di({color:"#3399CC",width:1.25});Ji=[new Fi({image:new Ei({fill:b,stroke:c,radius:5}),fill:b,stroke:c})]}return Ji}
+function Li(){var b={},c=[255,255,255,1],d=[0,153,255,1];b.Polygon=[new Fi({fill:new yi({color:[255,255,255,.5]})})];b.MultiPolygon=b.Polygon;b.LineString=[new Fi({stroke:new Di({color:c,width:5})}),new Fi({stroke:new Di({color:d,width:3})})];b.MultiLineString=b.LineString;b.Circle=b.Polygon.concat(b.LineString);b.Point=[new Fi({image:new Ei({radius:6,fill:new yi({color:d}),stroke:new Di({color:c,width:1.5})}),zIndex:Infinity})];b.MultiPoint=b.Point;b.GeometryCollection=b.Polygon.concat(b.LineString,
+b.Point);return b}function Gi(b){return b.M()};function Y(b){b=b?b:{};var c=Wa({},b);delete c.style;delete c.renderBuffer;delete c.updateWhileAnimating;delete c.updateWhileInteracting;Gg.call(this,c);this.a=void 0!==b.renderBuffer?b.renderBuffer:100;this.o=null;this.g=void 0;this.s(b.style);this.i=void 0!==b.updateWhileAnimating?b.updateWhileAnimating:!1;this.j=void 0!==b.updateWhileInteracting?b.updateWhileInteracting:!1}M(Y,Gg);Y.prototype.s=function(b){this.o=void 0!==b?b:Ki;this.g=null===b?void 0:Ii(this.o);this.v()};function Mi(b,c,d,e,f){this.c=b;this.u=c;this.l=d;this.w=e;this.Ja=f;this.g=this.a=this.b=this.Y=this.ba=this.S=null;this.aa=this.ja=this.o=this.D=this.K=this.B=0;this.ea=!1;this.h=this.na=0;this.za=!1;this.G=0;this.f="";this.j=this.H=this.Aa=this.pa=0;this.P=this.A=this.i=null;this.s=[];this.Ba=zb()}M(Mi,Eg);
+function Ni(b,c,d){if(b.g){c=Ac(c,0,d,2,b.w,b.s);d=b.c;var e=b.Ba,f=d.globalAlpha;1!=b.o&&(d.globalAlpha=f*b.o);var g=b.na;b.ea&&(g+=b.Ja);var h,k;h=0;for(k=c.length;h<k;h+=2){var l=c[h]-b.B,m=c[h+1]-b.K;b.za&&(l=Math.round(l),m=Math.round(m));if(0!==g||1!=b.h){var n=l+b.B,q=m+b.K;Ig(e,n,q,b.h,b.h,g,-n,-q);d.setTransform(e[0],e[1],e[4],e[5],e[12],e[13])}d.drawImage(b.g,b.ja,b.aa,b.G,b.D,l,m,b.G,b.D)}0===g&&1==b.h||d.setTransform(1,0,0,1,0,0);1!=b.o&&(d.globalAlpha=f)}}
+function Oi(b,c,d,e){var f=0;if(b.P&&""!==b.f){b.i&&Pi(b,b.i);b.A&&Qi(b,b.A);var g=b.P,h=b.c,k=b.Y;k?(k.font!=g.font&&(k.font=h.font=g.font),k.textAlign!=g.textAlign&&(k.textAlign=h.textAlign=g.textAlign),k.textBaseline!=g.textBaseline&&(k.textBaseline=h.textBaseline=g.textBaseline)):(h.font=g.font,h.textAlign=g.textAlign,h.textBaseline=g.textBaseline,b.Y={font:g.font,textAlign:g.textAlign,textBaseline:g.textBaseline});c=Ac(c,f,d,e,b.w,b.s);for(g=b.c;f<d;f+=e){h=c[f]+b.pa;k=c[f+1]+b.Aa;if(0!==b.H||
+1!=b.j){var l=Ig(b.Ba,h,k,b.j,b.j,b.H,-h,-k);g.setTransform(l[0],l[1],l[4],l[5],l[12],l[13])}b.A&&g.strokeText(b.f,h,k);b.i&&g.fillText(b.f,h,k)}0===b.H&&1==b.j||g.setTransform(1,0,0,1,0,0)}}function Ri(b,c,d,e,f,g){var h=b.c;b=Ac(c,d,e,f,b.w,b.s);h.moveTo(b[0],b[1]);c=b.length;g&&(c-=2);for(d=2;d<c;d+=2)h.lineTo(b[d],b[d+1]);g&&h.closePath();return e}function Si(b,c,d,e,f){var g,h;g=0;for(h=e.length;g<h;++g)d=Ri(b,c,d,e[g],f,!0);return d}p=Mi.prototype;
+p.nc=function(b){if(ac(this.l,b.C())){if(this.b||this.a){this.b&&Pi(this,this.b);this.a&&Qi(this,this.a);var c;c=this.w;var d=this.s,e=b.a;c=e?Ac(e,0,e.length,b.b,c,d):null;d=c[2]-c[0];e=c[3]-c[1];d=Math.sqrt(d*d+e*e);e=this.c;e.beginPath();e.arc(c[0],c[1],d,0,2*Math.PI);this.b&&e.fill();this.a&&e.stroke()}""!==this.f&&Oi(this,b.a.slice(0,b.b),2,2)}};p.$a=function(b){var c=b.a;b=b.b;this.g&&Ni(this,c,c.length);""!==this.f&&Oi(this,c,c.length,b)};
+p.Za=function(b){var c=b.a;b=b.b;this.g&&Ni(this,c,c.length);""!==this.f&&Oi(this,c,c.length,b)};p.pc=function(b){if(ac(this.l,b.C())){if(this.a){Qi(this,this.a);var c=this.c,d=b.a;c.beginPath();Ri(this,d,0,d.length,b.b,!1);c.stroke()}""!==this.f&&(b=Ti(b),Oi(this,b,2,2))}};
+p.qc=function(b){var c=b.C();if(ac(this.l,c)){if(this.a){Qi(this,this.a);var c=this.c,d=b.a,e=0,f=b.ab(),g=b.b;c.beginPath();var h,k;h=0;for(k=f.length;h<k;++h)e=Ri(this,d,e,f[h],g,!1);c.stroke()}""!==this.f&&(b=Ui(b),Oi(this,b,b.length,2))}};p.sc=function(b){if(ac(this.l,b.C())){if(this.a||this.b){this.b&&Pi(this,this.b);this.a&&Qi(this,this.a);var c=this.c;c.beginPath();Si(this,Vc(b),0,b.ab(),b.b);this.b&&c.fill();this.a&&c.stroke()}""!==this.f&&(b=Wc(b),Oi(this,b,2,2))}};
+p.rc=function(b){if(ac(this.l,b.C())){if(this.a||this.b){this.b&&Pi(this,this.b);this.a&&Qi(this,this.a);var c=this.c,d=Vi(b),e=0,f=b.c,g=b.b,h,k;h=0;for(k=f.length;h<k;++h){var l=f[h];c.beginPath();e=Si(this,d,e,l,g);this.b&&c.fill();this.a&&c.stroke()}}""!==this.f&&(b=Wi(b),Oi(this,b,b.length,2))}};function Pi(b,c){var d=b.c,e=b.S;e?e.fillStyle!=c.fillStyle&&(e.fillStyle=d.fillStyle=c.fillStyle):(d.fillStyle=c.fillStyle,b.S={fillStyle:c.fillStyle})}
+function Qi(b,c){var d=b.c,e=b.ba;e?(e.lineCap!=c.lineCap&&(e.lineCap=d.lineCap=c.lineCap),Ef&&!Ma(e.lineDash,c.lineDash)&&d.setLineDash(e.lineDash=c.lineDash),e.lineJoin!=c.lineJoin&&(e.lineJoin=d.lineJoin=c.lineJoin),e.lineWidth!=c.lineWidth&&(e.lineWidth=d.lineWidth=c.lineWidth),e.miterLimit!=c.miterLimit&&(e.miterLimit=d.miterLimit=c.miterLimit),e.strokeStyle!=c.strokeStyle&&(e.strokeStyle=d.strokeStyle=c.strokeStyle)):(d.lineCap=c.lineCap,Ef&&d.setLineDash(c.lineDash),d.lineJoin=c.lineJoin,d.lineWidth=
 c.lineWidth,d.miterLimit=c.miterLimit,d.strokeStyle=c.strokeStyle,b.ba={lineCap:c.lineCap,lineDash:c.lineDash,lineJoin:c.lineJoin,lineWidth:c.lineWidth,miterLimit:c.miterLimit,strokeStyle:c.strokeStyle})}
-p.Ga=function(b,c){if(b){var d=b.ga();this.b={fillStyle:yd(d?d:oi)}}else this.b=null;if(c){var d=c.ga(),e=c.Da,f=c.getLineDash(),g=c.Ea,h=c.ha(),k=c.Fa;this.a={lineCap:void 0!==e?e:"round",lineDash:f?f:pi,lineJoin:void 0!==g?g:"round",lineWidth:this.u*(void 0!==h?h:1),miterLimit:void 0!==k?k:10,strokeStyle:vd(d?d:qi)}}else this.a=null};
-p.Ha=function(b){if(b){var c=b.jb(),d=b.T(1),e=b.ka(),f=b.Pa();this.B=c[0];this.K=c[1];this.D=f[1];this.g=d;this.o=b.l;this.ja=e[0];this.aa=e[1];this.ea=b.i;this.na=b.Y();this.h=b.gb;this.za=b.u;this.G=f[0]}else this.g=null};
-p.xa=function(b){if(b){var c=b.Ka();c?(c=c.ga(),this.i={fillStyle:yd(c?c:oi)}):this.i=null;var d=b.va();if(d){var c=d.ga(),e=d.Da,f=d.getLineDash(),g=d.Ea,h=d.ha(),d=d.Fa;this.A={lineCap:void 0!==e?e:"round",lineDash:f?f:pi,lineJoin:void 0!==g?g:"round",lineWidth:void 0!==h?h:1,miterLimit:void 0!==d?d:10,strokeStyle:vd(c?c:qi)}}else this.A=null;var c=b.pd(),e=b.qd(),f=b.rd(),g=b.Y(),h=b.gb,d=b.sa,k=b.sd();b=b.td();this.P={font:void 0!==c?c:"10px sans-serif",textAlign:void 0!==k?k:"center",textBaseline:void 0!==
-b?b:"middle"};this.f=void 0!==d?d:"";this.pa=void 0!==e?this.u*e:0;this.Aa=void 0!==f?this.u*f:0;this.H=void 0!==g?g:0;this.j=this.u*(void 0!==h?h:1)}else this.f=""};function Ri(b){Fg.call(this,b);this.K=zb()}M(Ri,Fg);
-Ri.prototype.g=function(b,c,d){Si(this,"precompose",d,b,void 0);var e=this.T();if(e){var f=c.extent,g=void 0!==f;if(g){var h=b.pixelRatio,k=b.size[0]*h,l=b.size[1]*h,m=b.viewState.rotation,n=bc(f),q=[f[2],f[3]],r=[f[2],f[1]],f=Xb(f);Eg(b.coordinateToPixelMatrix,n,n);Eg(b.coordinateToPixelMatrix,q,q);Eg(b.coordinateToPixelMatrix,r,r);Eg(b.coordinateToPixelMatrix,f,f);d.save();ri(d,-m,k/2,l/2);d.beginPath();d.moveTo(n[0]*h,n[1]*h);d.lineTo(q[0]*h,q[1]*h);d.lineTo(r[0]*h,r[1]*h);d.lineTo(f[0]*h,f[1]*
-h);d.clip();ri(d,m,k/2,l/2)}h=this.D;k=d.globalAlpha;d.globalAlpha=c.opacity;d.drawImage(e,0,0,+e.width,+e.height,Math.round(h[12]),Math.round(h[13]),Math.round(e.width*h[0]),Math.round(e.height*h[5]));d.globalAlpha=k;g&&d.restore()}Si(this,"postcompose",d,b,void 0)};
-function Si(b,c,d,e,f){var g=b.a;if(nb(g,c)){var h=e.size[0]*e.pixelRatio,k=e.size[1]*e.pixelRatio,l=e.viewState.rotation;ri(d,-l,h/2,k/2);b=void 0!==f?f:Ti(b,e,0);b=new Gi(d,e.pixelRatio,e.extent,b,e.viewState.rotation);S(g,new zg(c,g,b,e,d,null));ri(d,l,h/2,k/2)}}function Ti(b,c,d){var e=c.viewState,f=c.pixelRatio;return Cg(b.K,f*c.size[0]/2,f*c.size[1]/2,f/e.resolution,-f/e.resolution,-e.rotation,-e.center[0]+d,-e.center[1])};var Ui=["Polygon","LineString","Image","Text"];function Vi(b,c,d){this.aa=b;this.P=c;this.c=null;this.g=0;this.resolution=d;this.D=this.K=null;this.b=[];this.coordinates=[];this.ba=zb();this.a=[];this.S=[];this.X=zb();this.ja=zb()}M(Vi,yg);
-function Wi(b,c,d,e,f,g){var h=b.coordinates.length,k=b.Jb(),l=[c[d],c[d+1]],m=[NaN,NaN],n=!0,q,r,u;for(q=d+f;q<e;q+=f){m[0]=c[q];m[1]=c[q+1];u=k[1];var w=k[2],y=k[3],z=m[0],D=m[1],t=0;z<k[0]?t=t|16:z>w&&(t=t|4);D<u?t|=8:D>y&&(t|=2);0===t&&(t=1);u=t;u!==r?(n&&(b.coordinates[h++]=l[0],b.coordinates[h++]=l[1]),b.coordinates[h++]=m[0],b.coordinates[h++]=m[1],n=!1):1===u?(b.coordinates[h++]=m[0],b.coordinates[h++]=m[1],n=!1):n=!0;l[0]=m[0];l[1]=m[1];r=u}q===d+f&&(b.coordinates[h++]=l[0],b.coordinates[h++]=
-l[1]);g&&(b.coordinates[h++]=c[d],b.coordinates[h++]=c[d+1]);return h}function Xi(b,c){b.K=[0,c,0];b.b.push(b.K);b.D=[0,c,0];b.a.push(b.D)}
-function Yi(b,c,d,e,f,g,h,k,l){var m;Dg(e,b.ba)?m=b.S:(m=Ac(b.coordinates,0,b.coordinates.length,2,e,b.S),Cb(b.ba,e));e=!$a(g);var n=0,q=h.length,r=0,u,w=b.X;b=b.ja;for(var y,z,D,t;n<q;){var v=h[n],B,E,C,G;switch(v[0]){case 0:r=v[1];e&&g[I(r).toString()]||!r.M()?n=v[2]:void 0===l||ac(l,r.M().C())?++n:n=v[2];break;case 1:c.beginPath();++n;break;case 2:r=v[1];u=m[r];v=m[r+1];D=m[r+2]-u;r=m[r+3]-v;c.arc(u,v,Math.sqrt(D*D+r*r),0,2*Math.PI,!0);++n;break;case 3:c.closePath();++n;break;case 4:r=v[1];u=v[2];
-B=v[3];C=v[4]*d;var J=v[5]*d,A=v[6];E=v[7];var H=v[8],O=v[9];D=v[11];t=v[12];var P=v[13],L=v[14];for(v[10]&&(D+=f);r<u;r+=2){v=m[r]-C;G=m[r+1]-J;P&&(v=Math.round(v),G=Math.round(G));if(1!=t||0!==D){var K=v+C,fa=G+J;Cg(w,K,fa,t,t,D,-K,-fa);c.transform(w[0],w[1],w[4],w[5],w[12],w[13])}K=c.globalAlpha;1!=E&&(c.globalAlpha=K*E);var fa=L+H>B.width?B.width-H:L,qa=A+O>B.height?B.height-O:A;c.drawImage(B,H,O,fa,qa,v,G,fa*d,qa*d);1!=E&&(c.globalAlpha=K);if(1!=t||0!==D)Eb(w,b),c.transform(b[0],b[1],b[4],b[5],
-b[12],b[13])}++n;break;case 5:r=v[1];u=v[2];C=v[3];J=v[4]*d;A=v[5]*d;D=v[6];t=v[7]*d;B=v[8];for(E=v[9];r<u;r+=2){v=m[r]+J;G=m[r+1]+A;if(1!=t||0!==D)Cg(w,v,G,t,t,D,-v,-G),c.transform(w[0],w[1],w[4],w[5],w[12],w[13]);H=C.split("\n");O=H.length;1<O?(P=Math.round(1.5*c.measureText("M").width),G-=(O-1)/2*P):P=0;for(L=0;L<O;L++)K=H[L],E&&c.strokeText(K,v,G),B&&c.fillText(K,v,G),G+=P;if(1!=t||0!==D)Eb(w,b),c.transform(b[0],b[1],b[4],b[5],b[12],b[13])}++n;break;case 6:if(void 0!==k&&(r=v[1],r=k(r)))return r;
-++n;break;case 7:c.fill();++n;break;case 8:r=v[1];u=v[2];v=m[r];G=m[r+1];D=v+.5|0;t=G+.5|0;if(D!==y||t!==z)c.moveTo(v,G),y=D,z=t;for(r+=2;r<u;r+=2)if(v=m[r],G=m[r+1],D=v+.5|0,t=G+.5|0,D!==y||t!==z)c.lineTo(v,G),y=D,z=t;++n;break;case 9:c.fillStyle=v[1];++n;break;case 10:y=void 0!==v[7]?v[7]:!0;z=v[2];c.strokeStyle=v[1];c.lineWidth=y?z*d:z;c.lineCap=v[3];c.lineJoin=v[4];c.miterLimit=v[5];yf&&c.setLineDash(v[6]);z=y=NaN;++n;break;case 11:c.font=v[1];c.textAlign=v[2];c.textBaseline=v[3];++n;break;case 12:c.stroke();
-++n;break;default:++n}}}function Zi(b){var c=b.a;c.reverse();var d,e=c.length,f,g,h=-1;for(d=0;d<e;++d)if(f=c[d],g=f[0],6==g)h=d;else if(0==g){f[2]=d;f=b.a;for(g=d;h<g;){var k=f[h];f[h]=f[g];f[g]=k;++h;--g}h=-1}}function $i(b,c){b.K[2]=b.b.length;b.K=null;b.D[2]=b.a.length;b.D=null;var d=[6,c];b.b.push(d);b.a.push(d)}Vi.prototype.qb=pa;Vi.prototype.Jb=function(){return this.P};
-function aj(b,c,d){Vi.call(this,b,c,d);this.i=this.G=null;this.B=this.w=this.H=this.u=this.s=this.o=this.A=this.j=this.l=this.h=this.f=void 0}M(aj,Vi);aj.prototype.Za=function(b,c){if(this.i){Xi(this,c);var d=b.a,e=this.coordinates.length,d=Wi(this,d,0,d.length,b.b,!1);this.b.push([4,e,d,this.i,this.f,this.h,this.l,this.j,this.A,this.o,this.s,this.u,this.H,this.w,this.B]);this.a.push([4,e,d,this.G,this.f,this.h,this.l,this.j,this.A,this.o,this.s,this.u,this.H,this.w,this.B]);$i(this,c)}};
-aj.prototype.Ya=function(b,c){if(this.i){Xi(this,c);var d=b.a,e=this.coordinates.length,d=Wi(this,d,0,d.length,b.b,!1);this.b.push([4,e,d,this.i,this.f,this.h,this.l,this.j,this.A,this.o,this.s,this.u,this.H,this.w,this.B]);this.a.push([4,e,d,this.G,this.f,this.h,this.l,this.j,this.A,this.o,this.s,this.u,this.H,this.w,this.B]);$i(this,c)}};aj.prototype.qb=function(){Zi(this);this.h=this.f=void 0;this.i=this.G=null;this.B=this.w=this.u=this.s=this.o=this.A=this.j=this.H=this.l=void 0};
-aj.prototype.Ha=function(b){var c=b.jb(),d=b.Pa(),e=b.Wb(1),f=b.T(1),g=b.ka();this.f=c[0];this.h=c[1];this.G=e;this.i=f;this.l=d[1];this.j=b.l;this.A=g[0];this.o=g[1];this.s=b.i;this.u=b.Y();this.H=b.gb;this.w=b.u;this.B=d[0]};function bj(b,c,d){Vi.call(this,b,c,d);this.f={Xa:void 0,Sa:void 0,Ta:null,Ua:void 0,Va:void 0,Wa:void 0,Rb:0,strokeStyle:void 0,lineCap:void 0,lineDash:null,lineJoin:void 0,lineWidth:void 0,miterLimit:void 0}}M(bj,Vi);
-function cj(b,c,d,e,f){var g=b.coordinates.length;c=Wi(b,c,d,e,f,!1);g=[8,g,c];b.b.push(g);b.a.push(g);return e}p=bj.prototype;p.Jb=function(){this.c||(this.c=Mb(this.P),0<this.g&&Lb(this.c,this.resolution*(this.g+1)/2,this.c));return this.c};
-function dj(b){var c=b.f,d=c.strokeStyle,e=c.lineCap,f=c.lineDash,g=c.lineJoin,h=c.lineWidth,k=c.miterLimit;c.Xa==d&&c.Sa==e&&Ma(c.Ta,f)&&c.Ua==g&&c.Va==h&&c.Wa==k||(c.Rb!=b.coordinates.length&&(b.b.push([12]),c.Rb=b.coordinates.length),b.b.push([10,d,h,e,g,k,f],[1]),c.Xa=d,c.Sa=e,c.Ta=f,c.Ua=g,c.Va=h,c.Wa=k)}
-p.pc=function(b,c){var d=this.f,e=d.lineWidth;void 0!==d.strokeStyle&&void 0!==e&&(dj(this),Xi(this,c),this.a.push([10,d.strokeStyle,d.lineWidth,d.lineCap,d.lineJoin,d.miterLimit,d.lineDash],[1]),d=b.a,cj(this,d,0,d.length,b.b),this.a.push([12]),$i(this,c))};
-p.qc=function(b,c){var d=this.f,e=d.lineWidth;if(void 0!==d.strokeStyle&&void 0!==e){dj(this);Xi(this,c);this.a.push([10,d.strokeStyle,d.lineWidth,d.lineCap,d.lineJoin,d.miterLimit,d.lineDash],[1]);var d=b.$a(),e=b.a,f=b.b,g=0,h,k;h=0;for(k=d.length;h<k;++h)g=cj(this,e,g,d[h],f);this.a.push([12]);$i(this,c)}};p.qb=function(){this.f.Rb!=this.coordinates.length&&this.b.push([12]);Zi(this);this.f=null};
-p.Ga=function(b,c){var d=c.ga();this.f.strokeStyle=vd(d?d:qi);d=c.Da;this.f.lineCap=void 0!==d?d:"round";d=c.getLineDash();this.f.lineDash=d?d:pi;d=c.Ea;this.f.lineJoin=void 0!==d?d:"round";d=c.ha();this.f.lineWidth=void 0!==d?d:1;d=c.Fa;this.f.miterLimit=void 0!==d?d:10;this.f.lineWidth>this.g&&(this.g=this.f.lineWidth,this.c=null)};
-function ej(b,c,d){Vi.call(this,b,c,d);this.f={mc:void 0,Xa:void 0,Sa:void 0,Ta:null,Ua:void 0,Va:void 0,Wa:void 0,fillStyle:void 0,strokeStyle:void 0,lineCap:void 0,lineDash:null,lineJoin:void 0,lineWidth:void 0,miterLimit:void 0}}M(ej,Vi);
-function fj(b,c,d,e,f){var g=b.f,h=[1];b.b.push(h);b.a.push(h);var k,h=0;for(k=e.length;h<k;++h){var l=e[h],m=b.coordinates.length;d=Wi(b,c,d,l,f,!0);d=[8,m,d];m=[3];b.b.push(d,m);b.a.push(d,m);d=l}c=[7];b.a.push(c);void 0!==g.fillStyle&&b.b.push(c);void 0!==g.strokeStyle&&(g=[12],b.b.push(g),b.a.push(g));return d}p=ej.prototype;
-p.nc=function(b,c){var d=this.f,e=d.strokeStyle;if(void 0!==d.fillStyle||void 0!==e){gj(this);Xi(this,c);this.a.push([9,vd(oi)]);void 0!==d.strokeStyle&&this.a.push([10,d.strokeStyle,d.lineWidth,d.lineCap,d.lineJoin,d.miterLimit,d.lineDash]);var f=b.a,e=this.coordinates.length;Wi(this,f,0,f.length,b.b,!1);f=[1];e=[2,e];this.b.push(f,e);this.a.push(f,e);e=[7];this.a.push(e);void 0!==d.fillStyle&&this.b.push(e);void 0!==d.strokeStyle&&(d=[12],this.b.push(d),this.a.push(d));$i(this,c)}};
-p.sc=function(b,c){var d=this.f,e=d.strokeStyle;if(void 0!==d.fillStyle||void 0!==e)gj(this),Xi(this,c),this.a.push([9,vd(oi)]),void 0!==d.strokeStyle&&this.a.push([10,d.strokeStyle,d.lineWidth,d.lineCap,d.lineJoin,d.miterLimit,d.lineDash]),d=b.$a(),e=Vc(b),fj(this,e,0,d,b.b),$i(this,c)};
-p.rc=function(b,c){var d=this.f,e=d.strokeStyle;if(void 0!==d.fillStyle||void 0!==e){gj(this);Xi(this,c);this.a.push([9,vd(oi)]);void 0!==d.strokeStyle&&this.a.push([10,d.strokeStyle,d.lineWidth,d.lineCap,d.lineJoin,d.miterLimit,d.lineDash]);var d=b.c,e=Pi(b),f=b.b,g=0,h,k;h=0;for(k=d.length;h<k;++h)g=fj(this,e,g,d[h],f);$i(this,c)}};p.qb=function(){Zi(this);this.f=null;var b=this.aa;if(0!==b){var c=this.coordinates,d,e;d=0;for(e=c.length;d<e;++d)c[d]=b*Math.round(c[d]/b)}};
-p.Jb=function(){this.c||(this.c=Mb(this.P),0<this.g&&Lb(this.c,this.resolution*(this.g+1)/2,this.c));return this.c};
-p.Ga=function(b,c){var d=this.f;if(b){var e=b.ga();d.fillStyle=yd(e?e:oi)}else d.fillStyle=void 0;c?(e=c.ga(),d.strokeStyle=vd(e?e:qi),e=c.Da,d.lineCap=void 0!==e?e:"round",e=c.getLineDash(),d.lineDash=e?e.slice():pi,e=c.Ea,d.lineJoin=void 0!==e?e:"round",e=c.ha(),d.lineWidth=void 0!==e?e:1,e=c.Fa,d.miterLimit=void 0!==e?e:10,d.lineWidth>this.g&&(this.g=d.lineWidth,this.c=null)):(d.strokeStyle=void 0,d.lineCap=void 0,d.lineDash=null,d.lineJoin=void 0,d.lineWidth=void 0,d.miterLimit=void 0)};
-function gj(b){var c=b.f,d=c.fillStyle,e=c.strokeStyle,f=c.lineCap,g=c.lineDash,h=c.lineJoin,k=c.lineWidth,l=c.miterLimit;void 0!==d&&c.mc!=d&&(b.b.push([9,d]),c.mc=c.fillStyle);void 0===e||c.Xa==e&&c.Sa==f&&c.Ta==g&&c.Ua==h&&c.Va==k&&c.Wa==l||(b.b.push([10,e,k,f,h,l,g]),c.Xa=e,c.Sa=f,c.Ta=g,c.Ua=h,c.Va=k,c.Wa=l)}function hj(b,c,d){Vi.call(this,b,c,d);this.w=this.H=this.u=null;this.i="";this.s=this.o=this.A=this.j=0;this.l=this.h=this.f=null}M(hj,Vi);
-function ij(b,c,d,e,f){if(""!==b.i&&b.l&&(b.f||b.h)){if(b.f){var g=b.f,h=b.u;if(!h||h.fillStyle!=g.fillStyle){var k=[9,g.fillStyle];b.b.push(k);b.a.push(k);h?h.fillStyle=g.fillStyle:b.u={fillStyle:g.fillStyle}}}b.h&&(g=b.h,h=b.H,h&&h.lineCap==g.lineCap&&h.lineDash==g.lineDash&&h.lineJoin==g.lineJoin&&h.lineWidth==g.lineWidth&&h.miterLimit==g.miterLimit&&h.strokeStyle==g.strokeStyle||(k=[10,g.strokeStyle,g.lineWidth,g.lineCap,g.lineJoin,g.miterLimit,g.lineDash,!1],b.b.push(k),b.a.push(k),h?(h.lineCap=
+p.Ga=function(b,c){if(b){var d=b.ga();this.b={fillStyle:yd(d?d:ui)}}else this.b=null;if(c){var d=c.ga(),e=c.Da,f=c.getLineDash(),g=c.Ea,h=c.ha(),k=c.Fa;this.a={lineCap:void 0!==e?e:"round",lineDash:f?f:vi,lineJoin:void 0!==g?g:"round",lineWidth:this.u*(void 0!==h?h:1),miterLimit:void 0!==k?k:10,strokeStyle:vd(d?d:wi)}}else this.a=null};
+p.Ha=function(b){if(b){var c=b.jb(),d=b.T(1),e=b.ka(),f=b.Qa();this.B=c[0];this.K=c[1];this.D=f[1];this.g=d;this.o=b.l;this.ja=e[0];this.aa=e[1];this.ea=b.i;this.na=b.Z();this.h=b.gb;this.za=b.u;this.G=f[0]}else this.g=null};
+p.xa=function(b){if(b){var c=b.Ka();c?(c=c.ga(),this.i={fillStyle:yd(c?c:ui)}):this.i=null;var d=b.va();if(d){var c=d.ga(),e=d.Da,f=d.getLineDash(),g=d.Ea,h=d.ha(),d=d.Fa;this.A={lineCap:void 0!==e?e:"round",lineDash:f?f:vi,lineJoin:void 0!==g?g:"round",lineWidth:void 0!==h?h:1,miterLimit:void 0!==d?d:10,strokeStyle:vd(c?c:wi)}}else this.A=null;var c=b.qd(),e=b.rd(),f=b.sd(),g=b.Z(),h=b.gb,d=b.sa,k=b.td();b=b.ud();this.P={font:void 0!==c?c:"10px sans-serif",textAlign:void 0!==k?k:"center",textBaseline:void 0!==
+b?b:"middle"};this.f=void 0!==d?d:"";this.pa=void 0!==e?this.u*e:0;this.Aa=void 0!==f?this.u*f:0;this.H=void 0!==g?g:0;this.j=this.u*(void 0!==h?h:1)}else this.f=""};function Xi(b){Lg.call(this,b);this.K=zb()}M(Xi,Lg);
+Xi.prototype.g=function(b,c,d){Yi(this,"precompose",d,b,void 0);var e=this.T();if(e){var f=c.extent,g=void 0!==f;if(g){var h=b.pixelRatio,k=b.size[0]*h,l=b.size[1]*h,m=b.viewState.rotation,n=bc(f),q=[f[2],f[3]],r=[f[2],f[1]],f=Xb(f);Kg(b.coordinateToPixelMatrix,n,n);Kg(b.coordinateToPixelMatrix,q,q);Kg(b.coordinateToPixelMatrix,r,r);Kg(b.coordinateToPixelMatrix,f,f);d.save();xi(d,-m,k/2,l/2);d.beginPath();d.moveTo(n[0]*h,n[1]*h);d.lineTo(q[0]*h,q[1]*h);d.lineTo(r[0]*h,r[1]*h);d.lineTo(f[0]*h,f[1]*
+h);d.clip();xi(d,m,k/2,l/2)}h=this.D;k=d.globalAlpha;d.globalAlpha=c.opacity;d.drawImage(e,0,0,+e.width,+e.height,Math.round(h[12]),Math.round(h[13]),Math.round(e.width*h[0]),Math.round(e.height*h[5]));d.globalAlpha=k;g&&d.restore()}Yi(this,"postcompose",d,b,void 0)};
+function Yi(b,c,d,e,f){var g=b.a;if(nb(g,c)){var h=e.size[0]*e.pixelRatio,k=e.size[1]*e.pixelRatio,l=e.viewState.rotation;xi(d,-l,h/2,k/2);b=void 0!==f?f:Zi(b,e,0);b=new Mi(d,e.pixelRatio,e.extent,b,e.viewState.rotation);S(g,new Fg(c,g,b,e,d,null));xi(d,l,h/2,k/2)}}function Zi(b,c,d){var e=c.viewState,f=c.pixelRatio;return Ig(b.K,f*c.size[0]/2,f*c.size[1]/2,f/e.resolution,-f/e.resolution,-e.rotation,-e.center[0]+d,-e.center[1])};var $i=["Polygon","LineString","Image","Text"];function aj(b,c,d){this.aa=b;this.P=c;this.c=null;this.g=0;this.resolution=d;this.D=this.K=null;this.b=[];this.coordinates=[];this.ba=zb();this.a=[];this.S=[];this.Y=zb();this.ja=zb()}M(aj,Eg);
+function bj(b,c,d,e,f,g){var h=b.coordinates.length,k=b.Kb(),l=[c[d],c[d+1]],m=[NaN,NaN],n=!0,q,r,u;for(q=d+f;q<e;q+=f){m[0]=c[q];m[1]=c[q+1];u=k[1];var w=k[2],y=k[3],z=m[0],D=m[1],t=0;z<k[0]?t=t|16:z>w&&(t=t|4);D<u?t|=8:D>y&&(t|=2);0===t&&(t=1);u=t;u!==r?(n&&(b.coordinates[h++]=l[0],b.coordinates[h++]=l[1]),b.coordinates[h++]=m[0],b.coordinates[h++]=m[1],n=!1):1===u?(b.coordinates[h++]=m[0],b.coordinates[h++]=m[1],n=!1):n=!0;l[0]=m[0];l[1]=m[1];r=u}q===d+f&&(b.coordinates[h++]=l[0],b.coordinates[h++]=
+l[1]);g&&(b.coordinates[h++]=c[d],b.coordinates[h++]=c[d+1]);return h}function cj(b,c){b.K=[0,c,0];b.b.push(b.K);b.D=[0,c,0];b.a.push(b.D)}
+function dj(b,c,d,e,f,g,h,k,l){var m;Jg(e,b.ba)?m=b.S:(m=Ac(b.coordinates,0,b.coordinates.length,2,e,b.S),Cb(b.ba,e));e=!$a(g);var n=0,q=h.length,r=0,u,w=b.Y;b=b.ja;for(var y,z,D,t;n<q;){var v=h[n],B,E,C,G;switch(v[0]){case 0:r=v[1];e&&g[I(r).toString()]||!r.M()?n=v[2]:void 0===l||ac(l,r.M().C())?++n:n=v[2];break;case 1:c.beginPath();++n;break;case 2:r=v[1];u=m[r];v=m[r+1];D=m[r+2]-u;r=m[r+3]-v;c.arc(u,v,Math.sqrt(D*D+r*r),0,2*Math.PI,!0);++n;break;case 3:c.closePath();++n;break;case 4:r=v[1];u=v[2];
+B=v[3];C=v[4]*d;var J=v[5]*d,A=v[6];E=v[7];var H=v[8],O=v[9];D=v[11];t=v[12];var P=v[13],L=v[14];for(v[10]&&(D+=f);r<u;r+=2){v=m[r]-C;G=m[r+1]-J;P&&(v=Math.round(v),G=Math.round(G));if(1!=t||0!==D){var K=v+C,fa=G+J;Ig(w,K,fa,t,t,D,-K,-fa);c.transform(w[0],w[1],w[4],w[5],w[12],w[13])}K=c.globalAlpha;1!=E&&(c.globalAlpha=K*E);var fa=L+H>B.width?B.width-H:L,ra=A+O>B.height?B.height-O:A;c.drawImage(B,H,O,fa,ra,v,G,fa*d,ra*d);1!=E&&(c.globalAlpha=K);if(1!=t||0!==D)Eb(w,b),c.transform(b[0],b[1],b[4],b[5],
+b[12],b[13])}++n;break;case 5:r=v[1];u=v[2];C=v[3];J=v[4]*d;A=v[5]*d;D=v[6];t=v[7]*d;B=v[8];for(E=v[9];r<u;r+=2){v=m[r]+J;G=m[r+1]+A;if(1!=t||0!==D)Ig(w,v,G,t,t,D,-v,-G),c.transform(w[0],w[1],w[4],w[5],w[12],w[13]);H=C.split("\n");O=H.length;1<O?(P=Math.round(1.5*c.measureText("M").width),G-=(O-1)/2*P):P=0;for(L=0;L<O;L++)K=H[L],E&&c.strokeText(K,v,G),B&&c.fillText(K,v,G),G+=P;if(1!=t||0!==D)Eb(w,b),c.transform(b[0],b[1],b[4],b[5],b[12],b[13])}++n;break;case 6:if(void 0!==k&&(r=v[1],r=k(r)))return r;
+++n;break;case 7:c.fill();++n;break;case 8:r=v[1];u=v[2];v=m[r];G=m[r+1];D=v+.5|0;t=G+.5|0;if(D!==y||t!==z)c.moveTo(v,G),y=D,z=t;for(r+=2;r<u;r+=2)if(v=m[r],G=m[r+1],D=v+.5|0,t=G+.5|0,D!==y||t!==z)c.lineTo(v,G),y=D,z=t;++n;break;case 9:c.fillStyle=v[1];++n;break;case 10:y=void 0!==v[7]?v[7]:!0;z=v[2];c.strokeStyle=v[1];c.lineWidth=y?z*d:z;c.lineCap=v[3];c.lineJoin=v[4];c.miterLimit=v[5];Ef&&c.setLineDash(v[6]);z=y=NaN;++n;break;case 11:c.font=v[1];c.textAlign=v[2];c.textBaseline=v[3];++n;break;case 12:c.stroke();
+++n;break;default:++n}}}function ej(b){var c=b.a;c.reverse();var d,e=c.length,f,g,h=-1;for(d=0;d<e;++d)if(f=c[d],g=f[0],6==g)h=d;else if(0==g){f[2]=d;f=b.a;for(g=d;h<g;){var k=f[h];f[h]=f[g];f[g]=k;++h;--g}h=-1}}function fj(b,c){b.K[2]=b.b.length;b.K=null;b.D[2]=b.a.length;b.D=null;var d=[6,c];b.b.push(d);b.a.push(d)}aj.prototype.qb=pa;aj.prototype.Kb=function(){return this.P};
+function gj(b,c,d){aj.call(this,b,c,d);this.i=this.G=null;this.B=this.w=this.H=this.u=this.s=this.o=this.A=this.j=this.l=this.h=this.f=void 0}M(gj,aj);gj.prototype.$a=function(b,c){if(this.i){cj(this,c);var d=b.a,e=this.coordinates.length,d=bj(this,d,0,d.length,b.b,!1);this.b.push([4,e,d,this.i,this.f,this.h,this.l,this.j,this.A,this.o,this.s,this.u,this.H,this.w,this.B]);this.a.push([4,e,d,this.G,this.f,this.h,this.l,this.j,this.A,this.o,this.s,this.u,this.H,this.w,this.B]);fj(this,c)}};
+gj.prototype.Za=function(b,c){if(this.i){cj(this,c);var d=b.a,e=this.coordinates.length,d=bj(this,d,0,d.length,b.b,!1);this.b.push([4,e,d,this.i,this.f,this.h,this.l,this.j,this.A,this.o,this.s,this.u,this.H,this.w,this.B]);this.a.push([4,e,d,this.G,this.f,this.h,this.l,this.j,this.A,this.o,this.s,this.u,this.H,this.w,this.B]);fj(this,c)}};gj.prototype.qb=function(){ej(this);this.h=this.f=void 0;this.i=this.G=null;this.B=this.w=this.u=this.s=this.o=this.A=this.j=this.H=this.l=void 0};
+gj.prototype.Ha=function(b){var c=b.jb(),d=b.Qa(),e=b.Xb(1),f=b.T(1),g=b.ka();this.f=c[0];this.h=c[1];this.G=e;this.i=f;this.l=d[1];this.j=b.l;this.A=g[0];this.o=g[1];this.s=b.i;this.u=b.Z();this.H=b.gb;this.w=b.u;this.B=d[0]};function hj(b,c,d){aj.call(this,b,c,d);this.f={Ya:void 0,Ta:void 0,Ua:null,Va:void 0,Wa:void 0,Xa:void 0,Sb:0,strokeStyle:void 0,lineCap:void 0,lineDash:null,lineJoin:void 0,lineWidth:void 0,miterLimit:void 0}}M(hj,aj);
+function ij(b,c,d,e,f){var g=b.coordinates.length;c=bj(b,c,d,e,f,!1);g=[8,g,c];b.b.push(g);b.a.push(g);return e}p=hj.prototype;p.Kb=function(){this.c||(this.c=Mb(this.P),0<this.g&&Lb(this.c,this.resolution*(this.g+1)/2,this.c));return this.c};
+function jj(b){var c=b.f,d=c.strokeStyle,e=c.lineCap,f=c.lineDash,g=c.lineJoin,h=c.lineWidth,k=c.miterLimit;c.Ya==d&&c.Ta==e&&Ma(c.Ua,f)&&c.Va==g&&c.Wa==h&&c.Xa==k||(c.Sb!=b.coordinates.length&&(b.b.push([12]),c.Sb=b.coordinates.length),b.b.push([10,d,h,e,g,k,f],[1]),c.Ya=d,c.Ta=e,c.Ua=f,c.Va=g,c.Wa=h,c.Xa=k)}
+p.pc=function(b,c){var d=this.f,e=d.lineWidth;void 0!==d.strokeStyle&&void 0!==e&&(jj(this),cj(this,c),this.a.push([10,d.strokeStyle,d.lineWidth,d.lineCap,d.lineJoin,d.miterLimit,d.lineDash],[1]),d=b.a,ij(this,d,0,d.length,b.b),this.a.push([12]),fj(this,c))};
+p.qc=function(b,c){var d=this.f,e=d.lineWidth;if(void 0!==d.strokeStyle&&void 0!==e){jj(this);cj(this,c);this.a.push([10,d.strokeStyle,d.lineWidth,d.lineCap,d.lineJoin,d.miterLimit,d.lineDash],[1]);var d=b.ab(),e=b.a,f=b.b,g=0,h,k;h=0;for(k=d.length;h<k;++h)g=ij(this,e,g,d[h],f);this.a.push([12]);fj(this,c)}};p.qb=function(){this.f.Sb!=this.coordinates.length&&this.b.push([12]);ej(this);this.f=null};
+p.Ga=function(b,c){var d=c.ga();this.f.strokeStyle=vd(d?d:wi);d=c.Da;this.f.lineCap=void 0!==d?d:"round";d=c.getLineDash();this.f.lineDash=d?d:vi;d=c.Ea;this.f.lineJoin=void 0!==d?d:"round";d=c.ha();this.f.lineWidth=void 0!==d?d:1;d=c.Fa;this.f.miterLimit=void 0!==d?d:10;this.f.lineWidth>this.g&&(this.g=this.f.lineWidth,this.c=null)};
+function kj(b,c,d){aj.call(this,b,c,d);this.f={mc:void 0,Ya:void 0,Ta:void 0,Ua:null,Va:void 0,Wa:void 0,Xa:void 0,fillStyle:void 0,strokeStyle:void 0,lineCap:void 0,lineDash:null,lineJoin:void 0,lineWidth:void 0,miterLimit:void 0}}M(kj,aj);
+function lj(b,c,d,e,f){var g=b.f,h=[1];b.b.push(h);b.a.push(h);var k,h=0;for(k=e.length;h<k;++h){var l=e[h],m=b.coordinates.length;d=bj(b,c,d,l,f,!0);d=[8,m,d];m=[3];b.b.push(d,m);b.a.push(d,m);d=l}c=[7];b.a.push(c);void 0!==g.fillStyle&&b.b.push(c);void 0!==g.strokeStyle&&(g=[12],b.b.push(g),b.a.push(g));return d}p=kj.prototype;
+p.nc=function(b,c){var d=this.f,e=d.strokeStyle;if(void 0!==d.fillStyle||void 0!==e){mj(this);cj(this,c);this.a.push([9,vd(ui)]);void 0!==d.strokeStyle&&this.a.push([10,d.strokeStyle,d.lineWidth,d.lineCap,d.lineJoin,d.miterLimit,d.lineDash]);var f=b.a,e=this.coordinates.length;bj(this,f,0,f.length,b.b,!1);f=[1];e=[2,e];this.b.push(f,e);this.a.push(f,e);e=[7];this.a.push(e);void 0!==d.fillStyle&&this.b.push(e);void 0!==d.strokeStyle&&(d=[12],this.b.push(d),this.a.push(d));fj(this,c)}};
+p.sc=function(b,c){var d=this.f,e=d.strokeStyle;if(void 0!==d.fillStyle||void 0!==e)mj(this),cj(this,c),this.a.push([9,vd(ui)]),void 0!==d.strokeStyle&&this.a.push([10,d.strokeStyle,d.lineWidth,d.lineCap,d.lineJoin,d.miterLimit,d.lineDash]),d=b.ab(),e=Vc(b),lj(this,e,0,d,b.b),fj(this,c)};
+p.rc=function(b,c){var d=this.f,e=d.strokeStyle;if(void 0!==d.fillStyle||void 0!==e){mj(this);cj(this,c);this.a.push([9,vd(ui)]);void 0!==d.strokeStyle&&this.a.push([10,d.strokeStyle,d.lineWidth,d.lineCap,d.lineJoin,d.miterLimit,d.lineDash]);var d=b.c,e=Vi(b),f=b.b,g=0,h,k;h=0;for(k=d.length;h<k;++h)g=lj(this,e,g,d[h],f);fj(this,c)}};p.qb=function(){ej(this);this.f=null;var b=this.aa;if(0!==b){var c=this.coordinates,d,e;d=0;for(e=c.length;d<e;++d)c[d]=b*Math.round(c[d]/b)}};
+p.Kb=function(){this.c||(this.c=Mb(this.P),0<this.g&&Lb(this.c,this.resolution*(this.g+1)/2,this.c));return this.c};
+p.Ga=function(b,c){var d=this.f;if(b){var e=b.ga();d.fillStyle=yd(e?e:ui)}else d.fillStyle=void 0;c?(e=c.ga(),d.strokeStyle=vd(e?e:wi),e=c.Da,d.lineCap=void 0!==e?e:"round",e=c.getLineDash(),d.lineDash=e?e.slice():vi,e=c.Ea,d.lineJoin=void 0!==e?e:"round",e=c.ha(),d.lineWidth=void 0!==e?e:1,e=c.Fa,d.miterLimit=void 0!==e?e:10,d.lineWidth>this.g&&(this.g=d.lineWidth,this.c=null)):(d.strokeStyle=void 0,d.lineCap=void 0,d.lineDash=null,d.lineJoin=void 0,d.lineWidth=void 0,d.miterLimit=void 0)};
+function mj(b){var c=b.f,d=c.fillStyle,e=c.strokeStyle,f=c.lineCap,g=c.lineDash,h=c.lineJoin,k=c.lineWidth,l=c.miterLimit;void 0!==d&&c.mc!=d&&(b.b.push([9,d]),c.mc=c.fillStyle);void 0===e||c.Ya==e&&c.Ta==f&&c.Ua==g&&c.Va==h&&c.Wa==k&&c.Xa==l||(b.b.push([10,e,k,f,h,l,g]),c.Ya=e,c.Ta=f,c.Ua=g,c.Va=h,c.Wa=k,c.Xa=l)}function nj(b,c,d){aj.call(this,b,c,d);this.w=this.H=this.u=null;this.i="";this.s=this.o=this.A=this.j=0;this.l=this.h=this.f=null}M(nj,aj);
+function oj(b,c,d,e,f){if(""!==b.i&&b.l&&(b.f||b.h)){if(b.f){var g=b.f,h=b.u;if(!h||h.fillStyle!=g.fillStyle){var k=[9,g.fillStyle];b.b.push(k);b.a.push(k);h?h.fillStyle=g.fillStyle:b.u={fillStyle:g.fillStyle}}}b.h&&(g=b.h,h=b.H,h&&h.lineCap==g.lineCap&&h.lineDash==g.lineDash&&h.lineJoin==g.lineJoin&&h.lineWidth==g.lineWidth&&h.miterLimit==g.miterLimit&&h.strokeStyle==g.strokeStyle||(k=[10,g.strokeStyle,g.lineWidth,g.lineCap,g.lineJoin,g.miterLimit,g.lineDash,!1],b.b.push(k),b.a.push(k),h?(h.lineCap=
 g.lineCap,h.lineDash=g.lineDash,h.lineJoin=g.lineJoin,h.lineWidth=g.lineWidth,h.miterLimit=g.miterLimit,h.strokeStyle=g.strokeStyle):b.H={lineCap:g.lineCap,lineDash:g.lineDash,lineJoin:g.lineJoin,lineWidth:g.lineWidth,miterLimit:g.miterLimit,strokeStyle:g.strokeStyle}));g=b.l;h=b.w;h&&h.font==g.font&&h.textAlign==g.textAlign&&h.textBaseline==g.textBaseline||(k=[11,g.font,g.textAlign,g.textBaseline],b.b.push(k),b.a.push(k),h?(h.font=g.font,h.textAlign=g.textAlign,h.textBaseline=g.textBaseline):b.w=
-{font:g.font,textAlign:g.textAlign,textBaseline:g.textBaseline});Xi(b,f);g=b.coordinates.length;c=Wi(b,c,0,d,e,!1);c=[5,g,c,b.i,b.j,b.A,b.o,b.s,!!b.f,!!b.h];b.b.push(c);b.a.push(c);$i(b,f)}}
-hj.prototype.xa=function(b){if(b){var c=b.Ka();c?(c=c.ga(),c=yd(c?c:oi),this.f?this.f.fillStyle=c:this.f={fillStyle:c}):this.f=null;var d=b.va();if(d){var c=d.ga(),e=d.Da,f=d.getLineDash(),g=d.Ea,h=d.ha(),d=d.Fa,e=void 0!==e?e:"round",f=f?f.slice():pi,g=void 0!==g?g:"round",h=void 0!==h?h:1,d=void 0!==d?d:10,c=vd(c?c:qi);if(this.h){var k=this.h;k.lineCap=e;k.lineDash=f;k.lineJoin=g;k.lineWidth=h;k.miterLimit=d;k.strokeStyle=c}else this.h={lineCap:e,lineDash:f,lineJoin:g,lineWidth:h,miterLimit:d,strokeStyle:c}}else this.h=
-null;var l=b.pd(),c=b.qd(),e=b.rd(),f=b.Y(),h=b.gb,d=b.sa,g=b.sd(),k=b.td();b=void 0!==l?l:"10px sans-serif";g=void 0!==g?g:"center";k=void 0!==k?k:"middle";this.l?(l=this.l,l.font=b,l.textAlign=g,l.textBaseline=k):this.l={font:b,textAlign:g,textBaseline:k};this.i=void 0!==d?d:"";this.j=void 0!==c?c:0;this.A=void 0!==e?e:0;this.o=void 0!==f?f:0;this.s=void 0!==h?h:1}else this.i=""};function jj(b,c,d,e){this.o=b;this.h=c;this.A=d;this.l=e;this.b={};this.i=lf(1,1);this.j=zb()}
-function kj(b){for(var c in b.b){var d=b.b[c],e;for(e in d)d[e].qb()}}jj.prototype.g=function(b,c,d,e,f){var g=this.j;Cg(g,.5,.5,1/c,-1/c,-d,-b[0],-b[1]);var h=this.i;h.clearRect(0,0,1,1);var k;void 0!==this.l&&(k=Jb(),Kb(k,b),Lb(k,c*this.l,k));return lj(this,h,g,d,e,function(b){if(0<h.getImageData(0,0,1,1).data[3]){if(b=f(b))return b;h.clearRect(0,0,1,1)}},k)};
-jj.prototype.a=function(b,c){var d=void 0!==b?b.toString():"0",e=this.b[d];void 0===e&&(e={},this.b[d]=e);d=e[c];void 0===d&&(d=new mj[c](this.o,this.h,this.A),e[c]=d);return d};jj.prototype.c=function(){return $a(this.b)};
-jj.prototype.f=function(b,c,d,e,f,g){var h=Object.keys(this.b).map(Number);h.sort(Ha);if(!1!==g){var k=this.h;g=k[0];var l=k[1],m=k[2],k=k[3];g=[g,l,g,k,m,k,m,l];Ac(g,0,8,2,d,g);b.save();b.beginPath();b.moveTo(g[0],g[1]);b.lineTo(g[2],g[3]);b.lineTo(g[4],g[5]);b.lineTo(g[6],g[7]);b.closePath();b.clip()}var n,q;g=0;for(l=h.length;g<l;++g)for(n=this.b[h[g].toString()],m=0,k=Ui.length;m<k;++m)q=n[Ui[m]],void 0!==q&&Yi(q,b,c,d,e,f,q.b,void 0);b.restore()};
-function lj(b,c,d,e,f,g,h){var k=Object.keys(b.b).map(Number);k.sort(function(b,c){return c-b});var l,m,n,q,r;l=0;for(m=k.length;l<m;++l)for(q=b.b[k[l].toString()],n=Ui.length-1;0<=n;--n)if(r=q[Ui[n]],void 0!==r&&(r=Yi(r,c,1,d,e,f,r.a,g,h)))return r}var mj={Image:aj,LineString:bj,Polygon:ej,Text:hj};function nj(b,c){return I(b)-I(c)}function oj(b,c){var d=.5*b/c;return d*d}function pj(b,c,d,e,f,g){var h=!1,k,l;if(k=d.T())l=k.rb(),2==l||3==l?k.Xc(f,g):(0==l&&k.load(),k.Bc(f,g),h=!0);if(f=(0,d.b)(c))e=f.Nb(e),(0,qj[e.U()])(b,e,d,c);return h}
-var qj={Point:function(b,c,d,e){var f=d.T();if(f){if(2!=f.rb())return;var g=b.a(d.a,"Image");g.Ha(f);g.Za(c,e)}if(f=d.sa)b=b.a(d.a,"Text"),b.xa(f),ij(b,c.a,2,2,e)},LineString:function(b,c,d,e){var f=d.va();if(f){var g=b.a(d.a,"LineString");g.Ga(null,f);g.pc(c,e)}if(f=d.sa)b=b.a(d.a,"Text"),b.xa(f),ij(b,Ni(c),2,2,e)},Polygon:function(b,c,d,e){var f=d.Ka(),g=d.va();if(f||g){var h=b.a(d.a,"Polygon");h.Ga(f,g);h.sc(c,e)}if(f=d.sa)b=b.a(d.a,"Text"),b.xa(f),ij(b,Wc(c),2,2,e)},MultiPoint:function(b,c,d,
-e){var f=d.T();if(f){if(2!=f.rb())return;var g=b.a(d.a,"Image");g.Ha(f);g.Ya(c,e)}if(f=d.sa)b=b.a(d.a,"Text"),b.xa(f),d=c.a,ij(b,d,d.length,c.b,e)},MultiLineString:function(b,c,d,e){var f=d.va();if(f){var g=b.a(d.a,"LineString");g.Ga(null,f);g.qc(c,e)}if(f=d.sa)b=b.a(d.a,"Text"),b.xa(f),c=Oi(c),ij(b,c,c.length,2,e)},MultiPolygon:function(b,c,d,e){var f=d.Ka(),g=d.va();if(g||f){var h=b.a(d.a,"Polygon");h.Ga(f,g);h.rc(c,e)}if(f=d.sa)b=b.a(d.a,"Text"),b.xa(f),c=Qi(c),ij(b,c,c.length,2,e)},GeometryCollection:function(b,
-c,d,e){c=c.a;var f,g;f=0;for(g=c.length;f<g;++f)(0,qj[c[f].U()])(b,c[f],d,e)},Circle:function(b,c,d,e){var f=d.Ka(),g=d.va();if(f||g){var h=b.a(d.a,"Polygon");h.Ga(f,g);h.nc(c,e)}if(f=d.sa)b=b.a(d.a,"Text"),b.xa(f),ij(b,c.a.slice(0,c.b),2,2,e)}};var rj=!((W("Chrome")||W("CriOS"))&&!W("Opera")&&!W("OPR")&&!W("Edge"))||W("iPhone")&&!W("iPod")&&!W("iPad")||W("iPad")||W("iPod");function sj(b,c,d,e){b=d-b;c=e-c;var f=Math.sqrt(b*b+c*c);return[Math.round(d+b/f),Math.round(e+c/f)]}
-function tj(b,c,d,e,f,g,h,k,l,m,n){var q=lf(Math.round(d*b),Math.round(d*c));if(0===l.length)return q.canvas;q.scale(d,d);var r=Jb();l.forEach(function(b){Sb(r,b.extent)});var u=lf(Math.round(d*Vb(r)/e),Math.round(d*Wb(r)/e)),w=d/e;l.forEach(function(b){u.drawImage(b.image,m,m,b.image.width-2*m,b.image.height-2*m,(b.extent[0]-r[0])*w,-(b.extent[3]-r[3])*w,Vb(b.extent)*w,Wb(b.extent)*w)});var y=bc(h);k.c.forEach(function(b){var c=b.source,f=b.target,h=c[1][0],k=c[1][1],l=c[2][0],m=c[2][1];b=(f[0][0]-
+{font:g.font,textAlign:g.textAlign,textBaseline:g.textBaseline});cj(b,f);g=b.coordinates.length;c=bj(b,c,0,d,e,!1);c=[5,g,c,b.i,b.j,b.A,b.o,b.s,!!b.f,!!b.h];b.b.push(c);b.a.push(c);fj(b,f)}}
+nj.prototype.xa=function(b){if(b){var c=b.Ka();c?(c=c.ga(),c=yd(c?c:ui),this.f?this.f.fillStyle=c:this.f={fillStyle:c}):this.f=null;var d=b.va();if(d){var c=d.ga(),e=d.Da,f=d.getLineDash(),g=d.Ea,h=d.ha(),d=d.Fa,e=void 0!==e?e:"round",f=f?f.slice():vi,g=void 0!==g?g:"round",h=void 0!==h?h:1,d=void 0!==d?d:10,c=vd(c?c:wi);if(this.h){var k=this.h;k.lineCap=e;k.lineDash=f;k.lineJoin=g;k.lineWidth=h;k.miterLimit=d;k.strokeStyle=c}else this.h={lineCap:e,lineDash:f,lineJoin:g,lineWidth:h,miterLimit:d,strokeStyle:c}}else this.h=
+null;var l=b.qd(),c=b.rd(),e=b.sd(),f=b.Z(),h=b.gb,d=b.sa,g=b.td(),k=b.ud();b=void 0!==l?l:"10px sans-serif";g=void 0!==g?g:"center";k=void 0!==k?k:"middle";this.l?(l=this.l,l.font=b,l.textAlign=g,l.textBaseline=k):this.l={font:b,textAlign:g,textBaseline:k};this.i=void 0!==d?d:"";this.j=void 0!==c?c:0;this.A=void 0!==e?e:0;this.o=void 0!==f?f:0;this.s=void 0!==h?h:1}else this.i=""};function pj(b,c,d,e){this.o=b;this.h=c;this.A=d;this.l=e;this.b={};this.i=rf(1,1);this.j=zb()}
+function qj(b){for(var c in b.b){var d=b.b[c],e;for(e in d)d[e].qb()}}pj.prototype.g=function(b,c,d,e,f){var g=this.j;Ig(g,.5,.5,1/c,-1/c,-d,-b[0],-b[1]);var h=this.i;h.clearRect(0,0,1,1);var k;void 0!==this.l&&(k=Jb(),Kb(k,b),Lb(k,c*this.l,k));return rj(this,h,g,d,e,function(b){if(0<h.getImageData(0,0,1,1).data[3]){if(b=f(b))return b;h.clearRect(0,0,1,1)}},k)};
+pj.prototype.a=function(b,c){var d=void 0!==b?b.toString():"0",e=this.b[d];void 0===e&&(e={},this.b[d]=e);d=e[c];void 0===d&&(d=new sj[c](this.o,this.h,this.A),e[c]=d);return d};pj.prototype.c=function(){return $a(this.b)};
+pj.prototype.f=function(b,c,d,e,f,g){var h=Object.keys(this.b).map(Number);h.sort(Ha);if(!1!==g){var k=this.h;g=k[0];var l=k[1],m=k[2],k=k[3];g=[g,l,g,k,m,k,m,l];Ac(g,0,8,2,d,g);b.save();b.beginPath();b.moveTo(g[0],g[1]);b.lineTo(g[2],g[3]);b.lineTo(g[4],g[5]);b.lineTo(g[6],g[7]);b.closePath();b.clip()}var n,q;g=0;for(l=h.length;g<l;++g)for(n=this.b[h[g].toString()],m=0,k=$i.length;m<k;++m)q=n[$i[m]],void 0!==q&&dj(q,b,c,d,e,f,q.b,void 0);b.restore()};
+function rj(b,c,d,e,f,g,h){var k=Object.keys(b.b).map(Number);k.sort(function(b,c){return c-b});var l,m,n,q,r;l=0;for(m=k.length;l<m;++l)for(q=b.b[k[l].toString()],n=$i.length-1;0<=n;--n)if(r=q[$i[n]],void 0!==r&&(r=dj(r,c,1,d,e,f,r.a,g,h)))return r}var sj={Image:gj,LineString:hj,Polygon:kj,Text:nj};function tj(b,c){return I(b)-I(c)}function uj(b,c){var d=.5*b/c;return d*d}function vj(b,c,d,e,f,g){var h=!1,k,l;if(k=d.T())l=k.rb(),2==l||3==l?k.Xc(f,g):(0==l&&k.load(),k.Bc(f,g),h=!0);if(f=(0,d.b)(c))e=f.Ob(e),(0,wj[e.U()])(b,e,d,c);return h}
+var wj={Point:function(b,c,d,e){var f=d.T();if(f){if(2!=f.rb())return;var g=b.a(d.a,"Image");g.Ha(f);g.$a(c,e)}if(f=d.sa)b=b.a(d.a,"Text"),b.xa(f),oj(b,c.a,2,2,e)},LineString:function(b,c,d,e){var f=d.va();if(f){var g=b.a(d.a,"LineString");g.Ga(null,f);g.pc(c,e)}if(f=d.sa)b=b.a(d.a,"Text"),b.xa(f),oj(b,Ti(c),2,2,e)},Polygon:function(b,c,d,e){var f=d.Ka(),g=d.va();if(f||g){var h=b.a(d.a,"Polygon");h.Ga(f,g);h.sc(c,e)}if(f=d.sa)b=b.a(d.a,"Text"),b.xa(f),oj(b,Wc(c),2,2,e)},MultiPoint:function(b,c,d,
+e){var f=d.T();if(f){if(2!=f.rb())return;var g=b.a(d.a,"Image");g.Ha(f);g.Za(c,e)}if(f=d.sa)b=b.a(d.a,"Text"),b.xa(f),d=c.a,oj(b,d,d.length,c.b,e)},MultiLineString:function(b,c,d,e){var f=d.va();if(f){var g=b.a(d.a,"LineString");g.Ga(null,f);g.qc(c,e)}if(f=d.sa)b=b.a(d.a,"Text"),b.xa(f),c=Ui(c),oj(b,c,c.length,2,e)},MultiPolygon:function(b,c,d,e){var f=d.Ka(),g=d.va();if(g||f){var h=b.a(d.a,"Polygon");h.Ga(f,g);h.rc(c,e)}if(f=d.sa)b=b.a(d.a,"Text"),b.xa(f),c=Wi(c),oj(b,c,c.length,2,e)},GeometryCollection:function(b,
+c,d,e){c=c.a;var f,g;f=0;for(g=c.length;f<g;++f)(0,wj[c[f].U()])(b,c[f],d,e)},Circle:function(b,c,d,e){var f=d.Ka(),g=d.va();if(f||g){var h=b.a(d.a,"Polygon");h.Ga(f,g);h.nc(c,e)}if(f=d.sa)b=b.a(d.a,"Text"),b.xa(f),oj(b,c.a.slice(0,c.b),2,2,e)}};var xj=!((W("Chrome")||W("CriOS"))&&!W("Opera")&&!W("OPR")&&!W("Edge"))||W("iPhone")&&!W("iPod")&&!W("iPad")||W("iPad")||W("iPod");function yj(b,c,d,e){b=d-b;c=e-c;var f=Math.sqrt(b*b+c*c);return[Math.round(d+b/f),Math.round(e+c/f)]}
+function zj(b,c,d,e,f,g,h,k,l,m,n){var q=rf(Math.round(d*b),Math.round(d*c));if(0===l.length)return q.canvas;q.scale(d,d);var r=Jb();l.forEach(function(b){Sb(r,b.extent)});var u=rf(Math.round(d*Vb(r)/e),Math.round(d*Wb(r)/e)),w=d/e;l.forEach(function(b){u.drawImage(b.image,m,m,b.image.width-2*m,b.image.height-2*m,(b.extent[0]-r[0])*w,-(b.extent[3]-r[3])*w,Vb(b.extent)*w,Wb(b.extent)*w)});var y=bc(h);k.c.forEach(function(b){var c=b.source,f=b.target,h=c[1][0],k=c[1][1],l=c[2][0],m=c[2][1];b=(f[0][0]-
 y[0])/g;var w=-(f[0][1]-y[1])/g,n=(f[1][0]-y[0])/g,A=-(f[1][1]-y[1])/g,H=(f[2][0]-y[0])/g,O=-(f[2][1]-y[1])/g,f=c[0][0],c=c[0][1],h=h-f,k=k-c,l=l-f,m=m-c;a:{h=[[h,k,0,0,n-b],[l,m,0,0,H-b],[0,0,h,k,A-w],[0,0,l,m,O-w]];k=h.length;for(l=0;l<k;l++){for(var m=l,P=Math.abs(h[l][l]),L=l+1;L<k;L++){var K=Math.abs(h[L][l]);K>P&&(P=K,m=L)}if(0===P){h=null;break a}P=h[m];h[m]=h[l];h[l]=P;for(m=l+1;m<k;m++)for(P=-h[m][l]/h[l][l],L=l;L<k+1;L++)h[m][L]=l==L?0:h[m][L]+P*h[l][L]}l=Array(k);for(m=k-1;0<=m;m--)for(l[m]=
-h[m][k]/h[m][m],P=m-1;0<=P;P--)h[P][k]-=h[P][m]*l[m];h=l}h&&(q.save(),q.beginPath(),rj?(l=(b+n+H)/3,m=(w+A+O)/3,k=sj(l,m,b,w),n=sj(l,m,n,A),H=sj(l,m,H,O),q.moveTo(k[0],k[1]),q.lineTo(n[0],n[1]),q.lineTo(H[0],H[1])):(q.moveTo(b,w),q.lineTo(n,A),q.lineTo(H,O)),q.closePath(),q.clip(),q.transform(h[0],h[2],h[1],h[3],b,w),q.translate(r[0]-f,r[3]-c),q.scale(e/d,-e/d),q.drawImage(u.canvas,0,0),q.restore())});n&&(q.save(),q.strokeStyle="black",q.lineWidth=1,k.c.forEach(function(b){var c=b.target;b=(c[0][0]-
-y[0])/g;var d=-(c[0][1]-y[1])/g,e=(c[1][0]-y[0])/g,f=-(c[1][1]-y[1])/g,h=(c[2][0]-y[0])/g,c=-(c[2][1]-y[1])/g;q.beginPath();q.moveTo(b,d);q.lineTo(e,f);q.lineTo(h,c);q.closePath();q.stroke()}),q.restore());return q.canvas};function uj(b,c,d,e,f){this.f=b;this.g=c;var g={},h=xc(this.g,this.f);this.b=function(b){var c=b[0]+"/"+b[1];g[c]||(g[c]=h(b));return g[c]};this.h=e;this.A=f*f;this.c=[];this.i=!1;this.j=this.f.a&&!!e&&!!this.f.C()&&Vb(e)==Vb(this.f.C());this.a=this.f.C()?Vb(this.f.C()):null;this.l=this.g.C()?Vb(this.g.C()):null;b=bc(d);c=[d[2],d[3]];e=[d[2],d[1]];d=Xb(d);f=this.b(b);var k=this.b(c),l=this.b(e),m=this.b(d);vj(this,b,c,e,d,f,k,l,m,10);if(this.i){var n=Infinity;this.c.forEach(function(b){n=Math.min(n,
+h[m][k]/h[m][m],P=m-1;0<=P;P--)h[P][k]-=h[P][m]*l[m];h=l}h&&(q.save(),q.beginPath(),xj?(l=(b+n+H)/3,m=(w+A+O)/3,k=yj(l,m,b,w),n=yj(l,m,n,A),H=yj(l,m,H,O),q.moveTo(k[0],k[1]),q.lineTo(n[0],n[1]),q.lineTo(H[0],H[1])):(q.moveTo(b,w),q.lineTo(n,A),q.lineTo(H,O)),q.closePath(),q.clip(),q.transform(h[0],h[2],h[1],h[3],b,w),q.translate(r[0]-f,r[3]-c),q.scale(e/d,-e/d),q.drawImage(u.canvas,0,0),q.restore())});n&&(q.save(),q.strokeStyle="black",q.lineWidth=1,k.c.forEach(function(b){var c=b.target;b=(c[0][0]-
+y[0])/g;var d=-(c[0][1]-y[1])/g,e=(c[1][0]-y[0])/g,f=-(c[1][1]-y[1])/g,h=(c[2][0]-y[0])/g,c=-(c[2][1]-y[1])/g;q.beginPath();q.moveTo(b,d);q.lineTo(e,f);q.lineTo(h,c);q.closePath();q.stroke()}),q.restore());return q.canvas};function Aj(b,c,d,e,f){this.f=b;this.g=c;var g={},h=xc(this.g,this.f);this.b=function(b){var c=b[0]+"/"+b[1];g[c]||(g[c]=h(b));return g[c]};this.h=e;this.A=f*f;this.c=[];this.i=!1;this.j=this.f.a&&!!e&&!!this.f.C()&&Vb(e)==Vb(this.f.C());this.a=this.f.C()?Vb(this.f.C()):null;this.l=this.g.C()?Vb(this.g.C()):null;b=bc(d);c=[d[2],d[3]];e=[d[2],d[1]];d=Xb(d);f=this.b(b);var k=this.b(c),l=this.b(e),m=this.b(d);Bj(this,b,c,e,d,f,k,l,m,10);if(this.i){var n=Infinity;this.c.forEach(function(b){n=Math.min(n,
 b.source[0][0],b.source[1][0],b.source[2][0])});this.c.forEach(function(b){if(Math.max(b.source[0][0],b.source[1][0],b.source[2][0])-n>this.a/2){var c=[[b.source[0][0],b.source[0][1]],[b.source[1][0],b.source[1][1]],[b.source[2][0],b.source[2][1]]];c[0][0]-n>this.a/2&&(c[0][0]-=this.a);c[1][0]-n>this.a/2&&(c[1][0]-=this.a);c[2][0]-n>this.a/2&&(c[2][0]-=this.a);Math.max(c[0][0],c[1][0],c[2][0])-Math.min(c[0][0],c[1][0],c[2][0])<this.a/2&&(b.source=c)}},this)}g={}}
-function vj(b,c,d,e,f,g,h,k,l,m){var n=Ib([g,h,k,l]),q=b.a?Vb(n)/b.a:null,r=b.f.a&&.5<q&&1>q,u=!1;if(0<m){if(b.g.f&&b.l)var w=Ib([c,d,e,f]),u=u|.25<Vb(w)/b.l;!r&&b.f.f&&q&&(u|=.25<q)}if(u||!b.h||ac(n,b.h)){if(!(u||isFinite(g[0])&&isFinite(g[1])&&isFinite(h[0])&&isFinite(h[1])&&isFinite(k[0])&&isFinite(k[1])&&isFinite(l[0])&&isFinite(l[1])))if(0<m)u=!0;else return;if(0<m&&(u||(q=b.b([(c[0]+e[0])/2,(c[1]+e[1])/2]),n=r?(Ea(g[0],b.a)+Ea(k[0],b.a))/2-Ea(q[0],b.a):(g[0]+k[0])/2-q[0],q=(g[1]+k[1])/2-q[1],
-u=n*n+q*q>b.A),u)){Math.abs(c[0]-e[0])<=Math.abs(c[1]-e[1])?(r=[(d[0]+e[0])/2,(d[1]+e[1])/2],n=b.b(r),q=[(f[0]+c[0])/2,(f[1]+c[1])/2],u=b.b(q),vj(b,c,d,r,q,g,h,n,u,m-1),vj(b,q,r,e,f,u,n,k,l,m-1)):(r=[(c[0]+d[0])/2,(c[1]+d[1])/2],n=b.b(r),q=[(e[0]+f[0])/2,(e[1]+f[1])/2],u=b.b(q),vj(b,c,r,q,f,g,n,u,l,m-1),vj(b,r,d,e,q,n,h,k,u,m-1));return}if(r){if(!b.j)return;b.i=!0}b.c.push({source:[g,k,l],target:[c,e,f]});b.c.push({source:[g,h,k],target:[c,d,e]})}}
-function wj(b){var c=Jb();b.c.forEach(function(b){b=b.source;Kb(c,b[0]);Kb(c,b[1]);Kb(c,b[2])});return c};function xj(b){T.call(this);this.g=void 0;this.a="geometry";this.h=null;this.c=void 0;this.b=null;Q(this,rb(this.a),this.nb,this);void 0!==b&&(b instanceof zc||!b?yj(this,b):this.l(b))}M(xj,T);p=xj.prototype;p.clone=function(){var b=new xj(this.za());zj(b,this.a);var c=this.M();c&&yj(b,c.clone());if(c=this.h)b.h=c,b.c=c?Aj(c):void 0,b.v();return b};p.M=function(){return this.get(this.a)};p.La=function(){return this.g};p.yd=function(){this.v()};
-p.nb=function(){this.b&&(N(this.b),this.b=null);var b=this.M();b&&(this.b=Q(b,"change",this.yd,this));this.v()};function yj(b,c){b.set(b.a,c)}function zj(b,c){gb(b,rb(b.a),b.nb,b);b.a=c;Q(b,rb(b.a),b.nb,b);b.nb()}function Aj(b){if(!ga(b)){var c;c=Array.isArray(b)?b:[b];b=function(){return c}}return b};function Bj(b,c,d){return function(e,f,g){var h=new XMLHttpRequest;h.open("GET",ga(b)?b(e,f,g):b,!0);"arraybuffer"==c.U()&&(h.responseType="arraybuffer");h.onload=function(){if(200<=h.status&&300>h.status){var b=c.U(),e;"json"==b||"text"==b?e=h.responseText:"xml"==b?(e=h.responseXML,e||(b=h.responseText,e=(new DOMParser).parseFromString(b,"application/xml"))):"arraybuffer"==b&&(e=h.response);e&&d.call(this,c.b(e,{featureProjection:g}),c.f(Cj(e)))}}.bind(this);h.send()}}
-function Dj(b,c){return Bj(b,c,function(b){this.Cb(b)})};function Ej(){return[[-Infinity,-Infinity,Infinity,Infinity]]};var Fj;
-(function(){var b={uc:{}};(function(){function c(b,d){if(!(this instanceof c))return new c(b,d);this.Ab=Math.max(4,b||9);this.ec=Math.max(2,Math.ceil(.4*this.Ab));d&&this.ed(d);this.clear()}function d(b,c){b.bbox=e(b,0,b.children.length,c)}function e(b,c,d,e){for(var g=[Infinity,Infinity,-Infinity,-Infinity],h;c<d;c++)h=b.children[c],f(g,b.Z?e(h):h.bbox);return g}function f(b,c){b[0]=Math.min(b[0],c[0]);b[1]=Math.min(b[1],c[1]);b[2]=Math.max(b[2],c[2]);b[3]=Math.max(b[3],c[3])}function g(b,c){return b.bbox[0]-
+function Bj(b,c,d,e,f,g,h,k,l,m){var n=Ib([g,h,k,l]),q=b.a?Vb(n)/b.a:null,r=b.f.a&&.5<q&&1>q,u=!1;if(0<m){if(b.g.f&&b.l)var w=Ib([c,d,e,f]),u=u|.25<Vb(w)/b.l;!r&&b.f.f&&q&&(u|=.25<q)}if(u||!b.h||ac(n,b.h)){if(!(u||isFinite(g[0])&&isFinite(g[1])&&isFinite(h[0])&&isFinite(h[1])&&isFinite(k[0])&&isFinite(k[1])&&isFinite(l[0])&&isFinite(l[1])))if(0<m)u=!0;else return;if(0<m&&(u||(q=b.b([(c[0]+e[0])/2,(c[1]+e[1])/2]),n=r?(Ea(g[0],b.a)+Ea(k[0],b.a))/2-Ea(q[0],b.a):(g[0]+k[0])/2-q[0],q=(g[1]+k[1])/2-q[1],
+u=n*n+q*q>b.A),u)){Math.abs(c[0]-e[0])<=Math.abs(c[1]-e[1])?(r=[(d[0]+e[0])/2,(d[1]+e[1])/2],n=b.b(r),q=[(f[0]+c[0])/2,(f[1]+c[1])/2],u=b.b(q),Bj(b,c,d,r,q,g,h,n,u,m-1),Bj(b,q,r,e,f,u,n,k,l,m-1)):(r=[(c[0]+d[0])/2,(c[1]+d[1])/2],n=b.b(r),q=[(e[0]+f[0])/2,(e[1]+f[1])/2],u=b.b(q),Bj(b,c,r,q,f,g,n,u,l,m-1),Bj(b,r,d,e,q,n,h,k,u,m-1));return}if(r){if(!b.j)return;b.i=!0}b.c.push({source:[g,k,l],target:[c,e,f]});b.c.push({source:[g,h,k],target:[c,d,e]})}}
+function Cj(b){var c=Jb();b.c.forEach(function(b){b=b.source;Kb(c,b[0]);Kb(c,b[1]);Kb(c,b[2])});return c};function Dj(b){T.call(this);this.g=void 0;this.a="geometry";this.h=null;this.c=void 0;this.b=null;Q(this,rb(this.a),this.nb,this);void 0!==b&&(b instanceof zc||!b?Ej(this,b):this.l(b))}M(Dj,T);p=Dj.prototype;p.clone=function(){var b=new Dj(this.za());Fj(b,this.a);var c=this.M();c&&Ej(b,c.clone());if(c=this.h)b.h=c,b.c=c?Gj(c):void 0,b.v();return b};p.M=function(){return this.get(this.a)};p.La=function(){return this.g};p.zd=function(){this.v()};
+p.nb=function(){this.b&&(N(this.b),this.b=null);var b=this.M();b&&(this.b=Q(b,"change",this.zd,this));this.v()};function Ej(b,c){b.set(b.a,c)}function Fj(b,c){gb(b,rb(b.a),b.nb,b);b.a=c;Q(b,rb(b.a),b.nb,b);b.nb()}function Gj(b){if(!ga(b)){var c;c=Array.isArray(b)?b:[b];b=function(){return c}}return b};function Hj(b,c,d){return function(e,f,g){var h=new XMLHttpRequest;h.open("GET",ga(b)?b(e,f,g):b,!0);"arraybuffer"==c.U()&&(h.responseType="arraybuffer");h.onload=function(){if(200<=h.status&&300>h.status){var b=c.U(),e;"json"==b||"text"==b?e=h.responseText:"xml"==b?(e=h.responseXML,e||(b=h.responseText,e=(new DOMParser).parseFromString(b,"application/xml"))):"arraybuffer"==b&&(e=h.response);e&&d.call(this,c.b(e,{featureProjection:g}),c.f(Ij(e)))}}.bind(this);h.send()}}
+function Jj(b,c){return Hj(b,c,function(b){this.Db(b)})};function Kj(){return[[-Infinity,-Infinity,Infinity,Infinity]]};var Lj;
+(function(){var b={uc:{}};(function(){function c(b,d){if(!(this instanceof c))return new c(b,d);this.Bb=Math.max(4,b||9);this.ec=Math.max(2,Math.ceil(.4*this.Bb));d&&this.ed(d);this.clear()}function d(b,c){b.bbox=e(b,0,b.children.length,c)}function e(b,c,d,e){for(var g=[Infinity,Infinity,-Infinity,-Infinity],h;c<d;c++)h=b.children[c],f(g,b.$?e(h):h.bbox);return g}function f(b,c){b[0]=Math.min(b[0],c[0]);b[1]=Math.min(b[1],c[1]);b[2]=Math.max(b[2],c[2]);b[3]=Math.max(b[3],c[3])}function g(b,c){return b.bbox[0]-
 c.bbox[0]}function h(b,c){return b.bbox[1]-c.bbox[1]}function k(b){return(b[2]-b[0])*(b[3]-b[1])}function l(b){return b[2]-b[0]+(b[3]-b[1])}function m(b,c){return b[0]<=c[0]&&b[1]<=c[1]&&c[2]<=b[2]&&c[3]<=b[3]}function n(b,c){return c[0]<=b[2]&&c[1]<=b[3]&&c[2]>=b[0]&&c[3]>=b[1]}function q(b,c,d,e,f){for(var g=[c,d],h;g.length;)d=g.pop(),c=g.pop(),d-c<=e||(h=c+Math.ceil((d-c)/e/2)*e,r(b,c,d,h,f),g.push(c,h,h,d))}function r(b,c,d,e,f){for(var g,h,k,l,m;d>c;){600<d-c&&(g=d-c+1,h=e-c+1,k=Math.log(g),
 l=.5*Math.exp(2*k/3),m=.5*Math.sqrt(k*l*(g-l)/g)*(0>h-g/2?-1:1),k=Math.max(c,Math.floor(e-h*l/g+m)),h=Math.min(d,Math.floor(e+(g-h)*l/g+m)),r(b,k,h,e,f));g=b[e];h=c;l=d;u(b,c,e);for(0<f(b[d],g)&&u(b,c,d);h<l;){u(b,h,l);h++;for(l--;0>f(b[h],g);)h++;for(;0<f(b[l],g);)l--}0===f(b[c],g)?u(b,c,l):(l++,u(b,l,d));l<=e&&(c=l+1);e<=l&&(d=l-1)}}function u(b,c,d){var e=b[c];b[c]=b[d];b[d]=e}c.prototype={all:function(){return this.ac(this.data,[])},search:function(b){var c=this.data,d=[],e=this.da;if(!n(b,c.bbox))return d;
-for(var f=[],g,h,k,l;c;){g=0;for(h=c.children.length;g<h;g++)k=c.children[g],l=c.Z?e(k):k.bbox,n(b,l)&&(c.Z?d.push(k):m(b,l)?this.ac(k,d):f.push(k));c=f.pop()}return d},load:function(b){if(!b||!b.length)return this;if(b.length<this.ec){for(var c=0,d=b.length;c<d;c++)this.Ca(b[c]);return this}b=this.cc(b.slice(),0,b.length-1,0);this.data.children.length?this.data.height===b.height?this.fc(this.data,b):(this.data.height<b.height&&(c=this.data,this.data=b,b=c),this.dc(b,this.data.height-b.height-1,!0)):
-this.data=b;return this},Ca:function(b){b&&this.dc(b,this.data.height-1);return this},clear:function(){this.data={children:[],height:1,bbox:[Infinity,Infinity,-Infinity,-Infinity],Z:!0};return this},remove:function(b){if(!b)return this;for(var c=this.data,d=this.da(b),e=[],f=[],g,h,k,l;c||e.length;){c||(c=e.pop(),h=e[e.length-1],g=f.pop(),l=!0);if(c.Z&&(k=c.children.indexOf(b),-1!==k)){c.children.splice(k,1);e.push(c);this.dd(e);break}l||c.Z||!m(c.bbox,d)?h?(g++,c=h.children[g],l=!1):c=null:(e.push(c),
-f.push(g),g=0,h=c,c=c.children[0])}return this},da:function(b){return b},Gb:function(b,c){return b[0]-c[0]},Hb:function(b,c){return b[1]-c[1]},toJSON:function(){return this.data},ac:function(b,c){for(var d=[];b;)b.Z?c.push.apply(c,b.children):d.push.apply(d,b.children),b=d.pop();return c},cc:function(b,c,e,f){var g=e-c+1,h=this.Ab,k;if(g<=h)return k={children:b.slice(c,e+1),height:1,bbox:null,Z:!0},d(k,this.da),k;f||(f=Math.ceil(Math.log(g)/Math.log(h)),h=Math.ceil(g/Math.pow(h,f-1)));k={children:[],
-height:f,bbox:null,Z:!1};var g=Math.ceil(g/h),h=g*Math.ceil(Math.sqrt(h)),l,m,n;for(q(b,c,e,h,this.Gb);c<=e;c+=h)for(m=Math.min(c+h-1,e),q(b,c,m,g,this.Hb),l=c;l<=m;l+=g)n=Math.min(l+g-1,m),k.children.push(this.cc(b,l,n,f-1));d(k,this.da);return k},cd:function(b,c,d,e){for(var f,g,h,l,m,n,q,r;;){e.push(c);if(c.Z||e.length-1===d)break;q=r=Infinity;f=0;for(g=c.children.length;f<g;f++)h=c.children[f],m=k(h.bbox),n=h.bbox,n=(Math.max(n[2],b[2])-Math.min(n[0],b[0]))*(Math.max(n[3],b[3])-Math.min(n[1],
-b[1]))-m,n<r?(r=n,q=m<q?m:q,l=h):n===r&&m<q&&(q=m,l=h);c=l}return c},dc:function(b,c,d){var e=this.da;d=d?b.bbox:e(b);var e=[],g=this.cd(d,this.data,c,e);g.children.push(b);for(f(g.bbox,d);0<=c;)if(e[c].children.length>this.Ab)this.fd(e,c),c--;else break;this.$c(d,e,c)},fd:function(b,c){var e=b[c],f=e.children.length,g=this.ec;this.ad(e,g,f);f=this.bd(e,g,f);f={children:e.children.splice(f,e.children.length-f),height:e.height,bbox:null,Z:!1};e.Z&&(f.Z=!0);d(e,this.da);d(f,this.da);c?b[c-1].children.push(f):
-this.fc(e,f)},fc:function(b,c){this.data={children:[b,c],height:b.height+1,bbox:null,Z:!1};d(this.data,this.da)},bd:function(b,c,d){var f,g,h,l,m,n,q;m=n=Infinity;for(f=c;f<=d-c;f++)g=e(b,0,f,this.da),h=e(b,f,d,this.da),l=Math.max(0,Math.min(g[2],h[2])-Math.max(g[0],h[0]))*Math.max(0,Math.min(g[3],h[3])-Math.max(g[1],h[1])),g=k(g)+k(h),l<m?(m=l,q=f,n=g<n?g:n):l===m&&g<n&&(n=g,q=f);return q},ad:function(b,c,d){var e=b.Z?this.Gb:g,f=b.Z?this.Hb:h,k=this.bc(b,c,d,e);c=this.bc(b,c,d,f);k<c&&b.children.sort(e)},
-bc:function(b,c,d,g){b.children.sort(g);g=this.da;var h=e(b,0,c,g),k=e(b,d-c,d,g),m=l(h)+l(k),n,q;for(n=c;n<d-c;n++)q=b.children[n],f(h,b.Z?g(q):q.bbox),m+=l(h);for(n=d-c-1;n>=c;n--)q=b.children[n],f(k,b.Z?g(q):q.bbox),m+=l(k);return m},$c:function(b,c,d){for(;0<=d;d--)f(c[d].bbox,b)},dd:function(b){for(var c=b.length-1,e;0<=c;c--)0===b[c].children.length?0<c?(e=b[c-1].children,e.splice(e.indexOf(b[c]),1)):this.clear():d(b[c],this.da)},ed:function(b){var c=["return a"," - b",";"];this.Gb=new Function("a",
-"b",c.join(b[0]));this.Hb=new Function("a","b",c.join(b[1]));this.da=new Function("a","return [a"+b.join(", a")+"];")}};"undefined"!==typeof b?b.uc=c:"undefined"!==typeof self?self.a=c:window.a=c})();Fj=b.uc})();function Gj(b){this.a=Fj(b);this.b={}}p=Gj.prototype;p.Ca=function(b,c){var d=[b[0],b[1],b[2],b[3],c];this.a.Ca(d);this.b[I(c)]=d};p.load=function(b,c){for(var d=Array(c.length),e=0,f=c.length;e<f;e++){var g=b[e],h=c[e],g=[g[0],g[1],g[2],g[3],h];d[e]=g;this.b[I(h)]=g}this.a.load(d)};p.remove=function(b){b=I(b);var c=this.b[b];delete this.b[b];return null!==this.a.remove(c)};function Hj(b){return b.a.all().map(function(b){return b[4]})}
-function Ij(b,c){return b.a.search(c).map(function(b){return b[4]})}function Jj(b,c,d,e){return Kj(Ij(b,c),d,e)}function Kj(b,c,d){for(var e,f=0,g=b.length;f<g&&!(e=c.call(d,b[f]));f++);return e}p.clear=function(){this.a.clear();this.b={}};p.C=function(){return this.a.data.bbox};function Lj(b){b=b||{};Ce.call(this,{attributions:b.attributions,logo:b.logo,projection:void 0,state:"ready",wrapX:void 0!==b.wrapX?b.wrapX:!0});this.o=pa;this.D=b.format;this.u=b.url;void 0!==b.loader?this.o=b.loader:void 0!==this.u&&(this.o=Dj(this.u,this.D));this.G=void 0!==b.strategy?b.strategy:Ej;var c=void 0!==b.useSpatialIndex?b.useSpatialIndex:!0;this.R=c?new Gj:null;this.s=new Gj;this.ca={};this.b={};this.g={};this.h={};this.a=null;var d,e;b.features instanceof ld?(d=b.features,e=d.a):Array.isArray(b.features)&&
-(e=b.features);c||void 0!==d||(d=new ld(e));void 0!==e&&Mj(this,e);void 0!==d&&Nj(this,d)}M(Lj,Ce);p=Lj.prototype;p.Bb=function(b){var c=I(b).toString();if(Oj(this,c,b)){Pj(this,c,b);var d=b.M();d?(c=d.C(),this.R&&this.R.Ca(c,b)):this.ca[c]=b;S(this,new Qj("addfeature",b))}this.v()};function Pj(b,c,d){b.h[c]=[Q(d,"change",b.xc,b),Q(d,"propertychange",b.xc,b)]}function Oj(b,c,d){var e=!0,f=d.La();void 0!==f?f.toString()in b.b?e=!1:b.b[f.toString()]=d:b.g[c]=d;return e}p.Cb=function(b){Mj(this,b);this.v()};
-function Mj(b,c){var d,e,f,g,h=[],k=[],l=[];e=0;for(f=c.length;e<f;e++)g=c[e],d=I(g).toString(),Oj(b,d,g)&&k.push(g);e=0;for(f=k.length;e<f;e++){g=k[e];d=I(g).toString();Pj(b,d,g);var m=g.M();m?(d=m.C(),h.push(d),l.push(g)):b.ca[d]=g}b.R&&b.R.load(h,l);e=0;for(f=k.length;e<f;e++)S(b,new Qj("addfeature",k[e]))}
-function Nj(b,c){var d=!1;Q(b,"addfeature",function(b){d||(d=!0,c.push(b.feature),d=!1)});Q(b,"removefeature",function(b){d||(d=!0,c.remove(b.feature),d=!1)});Q(c,"add",function(b){d||(b=b.element,d=!0,this.Bb(b),d=!1)},b);Q(c,"remove",function(b){if(!d){b=b.element;d=!0;var c=I(b).toString();c in this.ca?delete this.ca[c]:this.R&&this.R.remove(b);this.Xb(b);this.v();d=!1}},b);b.a=c}
-p.clear=function(b){if(b){for(var c in this.h)this.h[c].forEach(N);this.a||(this.h={},this.b={},this.g={})}else if(this.R){b=this.Xb;Kj(Hj(this.R),b,this);for(var d in this.ca)this.Xb(this.ca[d])}this.a&&this.a.clear();this.R&&this.R.clear();this.s.clear();this.ca={};S(this,new Qj("clear"));this.v()};p.nd=function(b,c){if(this.R)return Kj(Hj(this.R),b,c);if(this.a)return nd(this.a,b,c)};function Rj(b,c,d,e){b.R?Jj(b.R,c,d,e):b.a&&nd(b.a,d,e)}
-p.oe=function(){var b;this.a?b=this.a.a:this.R&&(b=Hj(this.R),$a(this.ca)||Ka(b,Za(this.ca)));return b};p.C=function(){return this.R.C()};
-p.xc=function(b){b=b.target;var c=I(b).toString(),d=b.M();if(d)if(d=d.C(),c in this.ca)delete this.ca[c],this.R&&this.R.Ca(d,b);else{if(this.R){var e=this.R,f=I(b);Rb(e.b[f].slice(0,4),d)||(e.remove(b),e.Ca(d,b))}}else c in this.ca||(this.R&&this.R.remove(b),this.ca[c]=b);d=b.La();void 0!==d?(d=d.toString(),c in this.g?(delete this.g[c],this.b[d]=b):this.b[d]!==b&&(Sj(this,b),this.b[d]=b)):c in this.g||(Sj(this,b),this.g[c]=b);this.v();S(this,new Qj("changefeature",b))};
-function Tj(b,c,d,e){var f=b.s;c=b.G(c,d);var g,h;g=0;for(h=c.length;g<h;++g){var k=c[g];Jj(f,k,function(b){return Nb(b.extent,k)})||(b.o.call(b,k,d,e),f.Ca(k,{extent:k.slice()}))}}p.Xb=function(b){var c=I(b).toString();this.h[c].forEach(N);delete this.h[c];var d=b.La();void 0!==d?delete this.b[d.toString()]:delete this.g[c];S(this,new Qj("removefeature",b))};function Sj(b,c){for(var d in b.b)if(b.b[d]===c){delete b.b[d];break}}function Qj(b,c){R.call(this,b);this.feature=c}M(Qj,R);function Uj(b){Ri.call(this,b);this.c=lf();this.b=null;this.j=Jb();this.h=zb()}M(Uj,Ri);
-Uj.prototype.g=function(b,c,d){var e=b.pixelRatio,f=b.viewState,g=f.center,h=f.projection,k=f.rotation,l=b.size,m=Math.round(e*l[0]/2),n=Math.round(e*l[1]/2),q=e/f.resolution,r=this.a,u=r.V(),w=u.kb(h),f=Ti(this,b,0);Si(this,"precompose",d,b,f);var l=d,r=nb(r,"render"),y,z,D,t;if(k||r){l=this.c;y=l.canvas;D=u.mb(e)/e;var v=d.canvas.width*D;z=d.canvas.height*D;t=Math.round(Math.sqrt(v*v+z*z));y.width!=t?y.width=y.height=t:l.clearRect(0,0,t,t);y=(t-v)/2/D;z=(t-z)/2/D;q*=D;m=Math.round(D*(m+y));n=Math.round(D*
-(n+z))}v=l.globalAlpha;l.globalAlpha=c.opacity;var B=u.la(h),E=this.b,C;c=u.Lb(h)&&1==c.opacity;c||(E.reverse(),C=[]);for(var G=0,J=E.length;G<J;++G){var A=E[G],H=A.L,O=Ie(B,H,this.j),P=H[0],L=Xb(Ie(B,Qe(B,g,P))),H=Math.round(Vb(O)*q),K=Math.round(Wb(O)*q),fa=Math.round((O[0]-L[0])*q/H)*H+m+Math.round((L[0]-g[0])*q),O=Math.round((L[1]-O[3])*q/K)*K+n+Math.round((g[1]-L[1])*q);if(!c){L=[fa,O,fa+H,O+K];l.save();for(var qa=0,Ql=C.length;qa<Ql;++qa){var Xa=C[qa];ac(L,Xa)&&(l.beginPath(),l.moveTo(L[0],
-L[1]),l.lineTo(L[0],L[3]),l.lineTo(L[2],L[3]),l.lineTo(L[2],L[1]),l.moveTo(Xa[0],Xa[1]),l.lineTo(Xa[2],Xa[1]),l.lineTo(Xa[2],Xa[3]),l.lineTo(Xa[0],Xa[3]),l.closePath(),l.clip())}C.push(L)}P=We(u,P,e,h);l.drawImage(A.T(),w,w,P[0],P[1],fa,O,H,K);c||l.restore()}r&&(e=y-m/D+m,h=z-n/D+n,g=Cg(this.h,t/2-e,t/2-h,q,-q,-k,-g[0]+e/q,-g[1]-h/q),Si(this,"render",l,b,g));(k||r)&&d.drawImage(l.canvas,-Math.round(y),-Math.round(z),t/D,t/D);l.globalAlpha=v;Si(this,"postcompose",d,b,f)};
-Uj.prototype.i=function(b,c){function d(b){b=b.N();return 2==b||4==b||3==b&&!u}var e=b.pixelRatio,f=b.viewState,g=f.projection,h=this.a,k=h.V(),l=k.la(g),m=Pe(l,f.resolution),n=l.I(m),q=f.center;n==f.resolution?(q=Lg(q,n,b.size),f=Zb(q,n,f.rotation,b.size)):f=b.extent;void 0!==c.extent&&(f=$b(f,c.extent));if(f[2]<f[0]||f[3]<f[1])return!1;n=Le(l,f,n);q={};q[m]={};var r=this.l(k,g,q),u=ni(h),w=Jb(),y=new fd(0,0,0,0),z,D,t,v;for(t=n.a;t<=n.f;++t)for(v=n.b;v<=n.c;++v)z=Ng(k,m,t,v,e,g),!d(z)&&z.a&&(z=
-z.a),d(z)?q[m][z.L.toString()]=z:(D=He(l,z.L,r,y,w),D||(z=Ke(l,z.L,y,w))&&r(m+1,z));r=Object.keys(q).map(Number);r.sort(Ha);var w=[],B,y=0;for(t=r.length;y<t;++y)for(B in z=r[y],v=q[z],v)z=v[B],2==z.N()&&w.push(z);this.b=w;Kg(b.usedTiles,k,m,n);Mg(b,k,l,e,g,f,m,h.get("preload"));Hg(b,k);Jg(b,k);return!0};function Vj(b){Ri.call(this,b);this.b=!1;this.w=-1;this.u=NaN;this.j=Jb();this.c=this.o=null;this.h=lf()}M(Vj,Ri);
-Vj.prototype.g=function(b,c,d){var e=b.extent,f=b.pixelRatio,g=c.eb?b.skippedFeatureUids:{},h=b.viewState,k=h.projection,h=h.rotation,l=k.C(),m=this.a.V(),n=Ti(this,b,0);Si(this,"precompose",d,b,n);var q=this.c;if(q&&!q.c()){var r;nb(this.a,"render")?(this.h.canvas.width=d.canvas.width,this.h.canvas.height=d.canvas.height,r=this.h):r=d;var u=r.globalAlpha;r.globalAlpha=c.opacity;c=b.size[0]*f;var w=b.size[1]*f;ri(r,-h,c/2,w/2);q.f(r,f,n,h,g);if(m.j&&k.a&&!Nb(l,e)){for(var k=e[0],m=Vb(l),y=0;k<l[0];)--y,
-n=m*y,n=Ti(this,b,n),q.f(r,f,n,h,g),k+=m;y=0;for(k=e[2];k>l[2];)++y,n=m*y,n=Ti(this,b,n),q.f(r,f,n,h,g),k-=m;n=Ti(this,b,0)}ri(r,h,c/2,w/2);r!=d&&(Si(this,"render",r,b,n),d.drawImage(r.canvas,0,0));r.globalAlpha=u}Si(this,"postcompose",d,b,n)};Vj.prototype.fb=function(b,c,d,e){if(this.c){var f=this.a,g={};return this.c.g(b,c.viewState.resolution,c.viewState.rotation,{},function(b){var c=I(b).toString();if(!(c in g))return g[c]=!0,d.call(e,b,f)})}};Vj.prototype.B=function(){Gg(this)};
-Vj.prototype.i=function(b){function c(b){var c,e=b.c;e?c=e.call(b,m):(e=d.g)&&(c=e(b,m));if(c){if(c){e=!1;if(Array.isArray(c))for(var f=0,g=c.length;f<g;++f)e=pj(r,b,c[f],oj(m,n),this.B,this)||e;else e=pj(r,b,c,oj(m,n),this.B,this)||e;b=e}else b=!1;this.b=this.b||b}}var d=this.a,e=d.V();Ig(b.attributions,e.i);Jg(b,e);var f=b.viewHints[0],g=b.viewHints[1],h=d.i,k=d.j;if(!this.b&&!h&&f||!k&&g)return!0;var l=b.extent,k=b.viewState,f=k.projection,m=k.resolution,n=b.pixelRatio,g=d.f,q=d.a,h=d.get("renderOrder");
-void 0===h&&(h=nj);l=Lb(l,q*m);q=k.projection.C();e.j&&k.projection.a&&!Nb(q,b.extent)&&(b=Math.max(Vb(l)/2,Vb(q)),l[0]=q[0]-b,l[2]=q[2]+b);if(!this.b&&this.u==m&&this.w==g&&this.o==h&&Nb(this.j,l))return!0;this.c=null;this.b=!1;var r=new jj(.5*m/n,l,m,d.a);Tj(e,l,m,f);if(h){var u=[];Rj(e,l,function(b){u.push(b)},this);u.sort(h);u.forEach(c,this)}else Rj(e,l,c,this);kj(r);this.u=m;this.w=g;this.o=h;this.j=l;this.c=r;return!0};function Wj(b,c){var d=/\{z\}/g,e=/\{x\}/g,f=/\{y\}/g,g=/\{-y\}/g;return function(h){if(h)return b.replace(d,h[0].toString()).replace(e,h[1].toString()).replace(f,function(){return(-h[2]-1).toString()}).replace(g,function(){var b=c.a?c.a[h[0]]:null;return(b.c-b.b+1+h[2]).toString()})}}function Xj(b,c){for(var d=b.length,e=Array(d),f=0;f<d;++f)e[f]=Wj(b[f],c);return Yj(e)}function Yj(b){return 1===b.length?b[0]:function(c,d,e){if(c)return b[Ea((c[1]<<c[0])+c[2],b.length)](c,d,e)}}function Zj(){};function ak(b){Ue.call(this,{attributions:b.attributions,cacheSize:b.cacheSize,extent:b.extent,logo:b.logo,opaque:b.opaque,projection:b.projection,state:b.state,tileGrid:b.tileGrid,tilePixelRatio:b.tilePixelRatio,wrapX:b.wrapX});this.tileLoadFunction=b.tileLoadFunction;this.tileUrlFunction=this.g?this.g.bind(this):Zj;this.urls=null;if(b.urls){var c=b.urls;this.urls=c;bk(this,this.g?this.g.bind(this):Xj(c,this.tileGrid))}else b.url&&this.s(b.url);b.tileUrlFunction&&bk(this,b.tileUrlFunction)}
-M(ak,Ue);ak.prototype.D=function(b){b=b.target;switch(b.N()){case 1:S(this,new Ye("tileloadstart",b));break;case 2:S(this,new Ye("tileloadend",b));break;case 3:S(this,new Ye("tileloaderror",b))}};function bk(b,c){b.a.clear();b.tileUrlFunction=c;b.v()}
-ak.prototype.s=function(b){var c=[],d=/\{(\d)-(\d)\}/.exec(b)||/\{([a-z])-([a-z])\}/.exec(b);if(d){var e=d[2].charCodeAt(0),f;for(f=d[1].charCodeAt(0);f<=e;++f)c.push(b.replace(d[0],String.fromCharCode(f)))}else c.push(b);b=this.urls=c;bk(this,this.g?this.g.bind(this):Xj(b,this.tileGrid))};ak.prototype.Yc=function(b,c,d){b=this.lb(b,c,d);ve(this.a,b)&&this.a.get(b)};function ck(b,c){Tg.call(this,0,c);this.c=lf();lf();this.a=this.c.canvas;this.a.style.width="100%";this.a.style.height="100%";this.a.className="ol-unselectable";fe(b,this.a,0);this.b=!0;this.g=zb()}M(ck,Tg);ck.prototype.Ib=function(b){return b instanceof X?new Uj(b):b instanceof Y?new Vj(b):null};
-function dk(b,c,d){var e=b.h,f=b.c;if(nb(e,c)){var g=d.extent,h=d.pixelRatio,k=d.viewState.rotation,l=d.pixelRatio,m=d.viewState,n=m.resolution;b=Cg(b.g,b.a.width/2,b.a.height/2,l/n,-l/n,-m.rotation,-m.center[0],-m.center[1]);g=new Gi(f,h,g,b,k);S(e,new zg(c,e,g,d,f,null))}}ck.prototype.U=function(){return"canvas"};
-ck.prototype.sb=function(b){if(b){var c=this.c,d=b.pixelRatio,e=Math.round(b.size[0]*d),d=Math.round(b.size[1]*d);this.a.width!=e||this.a.height!=d?(this.a.width=e,this.a.height=d):c.clearRect(0,0,e,d);var f=b.viewState.rotation;Ug(b);dk(this,"precompose",b);var g=b.layerStatesArray;Na(g);ri(c,f,e/2,d/2);var h=b.viewState.resolution,k,l,m,n;k=0;for(l=g.length;k<l;++k)n=g[k],m=n.layer,m=Wg(this,m),Bg(n,h)&&"ready"==n.Zb&&m.i(b,n)&&m.g(b,n,c);ri(c,-f,e/2,d/2);dk(this,"postcompose",b);this.b||(ne(this.a,
-!0),this.b=!0);Xg(this,b);b.postRenderFunctions.push(Vg)}else this.b&&(ne(this.a,!1),this.b=!1)};function ek(b,c){Fg.call(this,b);this.target=c}M(ek,Fg);ek.prototype.Fb=pa;ek.prototype.Kc=pa;function fk(b){var c=document.createElement("DIV");c.style.position="absolute";ek.call(this,b,c);this.c=!0;this.h=1;this.g=0;this.b={}}M(fk,ek);fk.prototype.Fb=function(){ee(this.target);this.g=0};
-fk.prototype.Lc=function(b,c){if(!c.visible)return this.c&&(ne(this.target,!1),this.c=!1),!0;var d=b.pixelRatio,e=b.viewState,f=e.projection,g=this.a,h=g.V(),k=h.la(f),l=h.kb(f),m=Pe(k,e.resolution),n=k.I(m),q=e.center,r;n==e.resolution?(q=Lg(q,n,b.size),r=Zb(q,n,e.rotation,b.size)):r=b.extent;void 0!==c.extent&&(r=$b(r,c.extent));var n=Le(k,r,n),u={};u[m]={};var w=this.l(h,f,u),y=ni(g),z=Jb(),D=new fd(0,0,0,0),t,v,B,E;for(B=n.a;B<=n.f;++B)for(E=n.b;E<=n.c;++E)t=Ng(h,m,B,E,d,f),v=t.N(),v=2==v||4==
-v||3==v&&!y,!v&&t.a&&(t=t.a),v=t.N(),2==v?u[m][t.L.toString()]=t:4==v||3==v&&!y||(v=He(k,t.L,w,D,z),v||(t=Ke(k,t.L,D,z))&&w(m+1,t));var C;if(this.g!=h.f){for(C in this.b)y=this.b[+C],ge(y.target);this.b={};this.g=h.f}z=Object.keys(u).map(Number);z.sort(Ha);var w={},G;B=0;for(E=z.length;B<E;++B){C=z[B];C in this.b?y=this.b[C]:(y=Qe(k,q,C),y=new gk(k,y),w[C]=!0,this.b[C]=y);C=u[C];for(G in C){t=y;v=C[G];var J=l,A=v.L,H=A[0],O=A[1],P=A[2],A=A.toString();if(!(A in t.b)){var H=tb(Oe(t.g,H),t.i),L=v.T(t),
-K=L.style;K.maxWidth="none";var fa=void 0,qa=void 0;0<J?(fa=document.createElement("DIV"),qa=fa.style,qa.overflow="hidden",qa.width=H[0]+"px",qa.height=H[1]+"px",K.position="absolute",K.left=-J+"px",K.top=-J+"px",K.width=H[0]+2*J+"px",K.height=H[1]+2*J+"px",fa.appendChild(L)):(K.width=H[0]+"px",K.height=H[1]+"px",fa=L,qa=K);qa.position="absolute";qa.left=(O-t.f[1])*H[0]+"px";qa.top=(t.f[2]-P)*H[1]+"px";t.a||(t.a=document.createDocumentFragment());t.a.appendChild(fa);t.b[A]=v}}y.a&&(y.target.appendChild(y.a),
-y.a=null)}l=Object.keys(this.b).map(Number);l.sort(Ha);B=zb();G=0;for(z=l.length;G<z;++G)if(C=l[G],y=this.b[C],C in u)if(t=y.I(),E=y.ka(),Cg(B,b.size[0]/2,b.size[1]/2,t/e.resolution,t/e.resolution,e.rotation,(E[0]-q[0])/t,(q[1]-E[1])/t),y.setTransform(B),C in w){for(--C;0<=C;--C)if(C in this.b){E=this.b[C].target;E.parentNode&&E.parentNode.insertBefore(y.target,E.nextSibling);break}0>C&&fe(this.target,y.target,0)}else{if(!b.viewHints[0]&&!b.viewHints[1]){v=Je(y.g,r,y.f[0],D);C=[];t=E=void 0;for(t in y.b)E=
-y.b[t],J=E.L,gd(v,J[1],J[2])||C.push(E);J=v=void 0;v=0;for(J=C.length;v<J;++v)E=C[v],t=E.L.toString(),ge(E.T(y)),delete y.b[t]}}else ge(y.target),delete this.b[C];c.opacity!=this.h&&(this.h=this.target.style.opacity=c.opacity);c.visible&&!this.c&&(ne(this.target,!0),this.c=!0);Kg(b.usedTiles,h,m,n);Mg(b,h,k,d,f,r,m,g.get("preload"));Hg(b,h);Jg(b,h);return!0};
-function gk(b,c){this.target=document.createElement("DIV");this.target.style.position="absolute";this.target.style.width="100%";this.target.style.height="100%";this.g=b;this.f=c;this.h=bc(Ie(b,c));this.l=b.I(c[0]);this.b={};this.a=null;this.c=Bb();this.i=[0,0]}gk.prototype.ka=function(){return this.h};gk.prototype.I=function(){return this.l};gk.prototype.setTransform=function(b){Dg(b,this.c)||(pf(this.target,b),Cb(this.c,b))};function hk(b){this.g=lf();var c=this.g.canvas;c.style.maxWidth="none";c.style.position="absolute";ek.call(this,b,c);this.b=!1;this.h=-1;this.o=NaN;this.i=Jb();this.c=this.j=null;this.w=zb();this.u=zb()}M(hk,ek);p=hk.prototype;p.Fb=function(){var b=this.g.canvas;b.width=b.width;this.h=0};
-p.Kc=function(b,c){var d=b.viewState,e=d.center,f=d.rotation,g=d.resolution,d=b.pixelRatio,h=b.size[0],k=b.size[1],l=h*d,m=k*d,e=Cg(this.w,d*h/2,d*k/2,d/g,-d/g,-f,-e[0],-e[1]),g=this.g;g.canvas.width=l;g.canvas.height=m;h=Cg(this.u,0,0,1/d,1/d,0,-(l-h)/2*d,-(m-k)/2*d);pf(g.canvas,h);ik(this,"precompose",b,e);(h=this.c)&&!h.c()&&(g.globalAlpha=c.opacity,h.f(g,d,e,f,c.eb?b.skippedFeatureUids:{}),ik(this,"render",b,e));ik(this,"postcompose",b,e)};
-function ik(b,c,d,e){var f=b.g;b=b.a;nb(b,c)&&(e=new Gi(f,d.pixelRatio,d.extent,e,d.viewState.rotation),S(b,new zg(c,b,e,d,f,null)))}p.fb=function(b,c,d,e){if(this.c){var f=this.a,g={};return this.c.g(b,c.viewState.resolution,c.viewState.rotation,{},function(b){var c=I(b).toString();if(!(c in g))return g[c]=!0,d.call(e,b,f)})}};p.Mc=function(){Gg(this)};
-p.Lc=function(b){function c(b){var c,e=b.c;e?c=e.call(b,l):(e=d.g)&&(c=e(b,l));if(c){if(c){e=!1;if(Array.isArray(c))for(var f=0,g=c.length;f<g;++f)e=pj(n,b,c[f],oj(l,m),this.Mc,this)||e;else e=pj(n,b,c,oj(l,m),this.Mc,this)||e;b=e}else b=!1;this.b=this.b||b}}var d=this.a,e=d.V();Ig(b.attributions,e.i);Jg(b,e);var f=b.viewHints[0],g=b.viewHints[1],h=d.i,k=d.j;if(!this.b&&!h&&f||!k&&g)return!0;var g=b.extent,h=b.viewState,f=h.projection,l=h.resolution,m=b.pixelRatio;b=d.f;k=d.a;h=d.get("renderOrder");
-void 0===h&&(h=nj);g=Lb(g,k*l);if(!this.b&&this.o==l&&this.h==b&&this.j==h&&Nb(this.i,g))return!0;this.c=null;this.b=!1;var n=new jj(.5*l/m,g,l,d.a);Tj(e,g,l,f);if(h){var q=[];Rj(e,g,function(b){q.push(b)},this);q.sort(h);q.forEach(c,this)}else Rj(e,g,c,this);kj(n);this.o=l;this.h=b;this.j=h;this.i=g;this.c=n;return!0};function jk(b,c){Tg.call(this,0,c);this.c=lf();var d=this.c.canvas;d.style.position="absolute";d.style.width="100%";d.style.height="100%";d.className="ol-unselectable";fe(b,d,0);this.g=zb();this.a=document.createElement("DIV");this.a.className="ol-unselectable";d=this.a.style;d.position="absolute";d.width="100%";d.height="100%";Q(this.a,"touchstart",lb);fe(b,this.a,0);this.b=!0}M(jk,Tg);jk.prototype.J=function(){ge(this.a);jk.$.J.call(this)};
-jk.prototype.Ib=function(b){if(b instanceof X)b=new fk(b);else if(b instanceof Y)b=new hk(b);else return null;return b};function kk(b,c,d){var e=b.h;if(nb(e,c)){var f=d.extent,g=d.pixelRatio,h=d.viewState,k=h.rotation,l=b.c,m=l.canvas;Cg(b.g,m.width/2,m.height/2,g/h.resolution,-g/h.resolution,-h.rotation,-h.center[0],-h.center[1]);b=new Gi(l,g,f,b.g,k);S(e,new zg(c,e,b,d,l,null))}}jk.prototype.U=function(){return"dom"};
-jk.prototype.sb=function(b){if(b){var c=this.h;if(nb(c,"precompose")||nb(c,"postcompose")){var c=this.c.canvas,d=b.pixelRatio;c.width=b.size[0]*d;c.height=b.size[1]*d}kk(this,"precompose",b);c=b.layerStatesArray;Na(c);var d=b.viewState.resolution,e,f,g,h;e=0;for(f=c.length;e<f;++e)h=c[e],g=h.layer,g=Wg(this,g),fe(this.a,g.target,e),Bg(h,d)&&"ready"==h.Zb?g.Lc(b,h)&&g.Kc(b,h):g.Fb();var c=b.layerStates,k;for(k in this.f)k in c||(g=this.f[k],ge(g.target));this.b||(ne(this.a,!0),this.b=!0);Ug(b);Xg(this,
-b);b.postRenderFunctions.push(Vg);kk(this,"postcompose",b)}else this.b&&(ne(this.a,!1),this.b=!1)};function lk(b){this.a=b}function mk(b){this.a=b}M(mk,lk);mk.prototype.U=function(){return 35632};function nk(b){this.a=b}M(nk,lk);nk.prototype.U=function(){return 35633};function ok(){this.a="precision mediump float;varying vec2 a;varying float b;uniform float k;uniform sampler2D l;void main(void){vec4 texColor=texture2D(l,a);gl_FragColor.rgb=texColor.rgb;float alpha=texColor.a*b*k;if(alpha==0.0){discard;}gl_FragColor.a=alpha;}"}M(ok,mk);aa(ok);
-function pk(){this.a="varying vec2 a;varying float b;attribute vec2 c;attribute vec2 d;attribute vec2 e;attribute float f;attribute float g;uniform mat4 h;uniform mat4 i;uniform mat4 j;void main(void){mat4 offsetMatrix=i;if(g==1.0){offsetMatrix=i*j;}vec4 offsets=offsetMatrix*vec4(e,0.,0.);gl_Position=h*vec4(c,0.,1.)+offsets;a=d;b=f;}"}M(pk,nk);aa(pk);
-function qk(b,c){this.i=b.getUniformLocation(c,"j");this.j=b.getUniformLocation(c,"i");this.h=b.getUniformLocation(c,"k");this.l=b.getUniformLocation(c,"h");this.a=b.getAttribLocation(c,"e");this.b=b.getAttribLocation(c,"f");this.c=b.getAttribLocation(c,"c");this.f=b.getAttribLocation(c,"g");this.g=b.getAttribLocation(c,"d")};function rk(b){this.a=void 0!==b?b:[]};function sk(b,c){this.A=b;this.a=c;this.b={};this.g={};this.c={};this.i=this.j=this.h=this.l=null;(this.f=0<=oa.indexOf("OES_element_index_uint"))&&c.getExtension("OES_element_index_uint");Q(this.A,"webglcontextlost",this.o,this);Q(this.A,"webglcontextrestored",this.s,this)}M(sk,ib);
-function tk(b,c,d){var e=b.a,f=d.a,g=String(I(d));if(g in b.b)e.bindBuffer(c,b.b[g].buffer);else{var h=e.createBuffer();e.bindBuffer(c,h);var k;34962==c?k=new Float32Array(f):34963==c&&(k=b.f?new Uint32Array(f):new Uint16Array(f));e.bufferData(c,k,35044);b.b[g]={We:d,buffer:h}}}function uk(b,c){var d=b.a,e=String(I(c)),f=b.b[e];d.isContextLost()||d.deleteBuffer(f.buffer);delete b.b[e]}
-sk.prototype.J=function(){hb(this.A);var b=this.a;if(!b.isContextLost()){for(var c in this.b)b.deleteBuffer(this.b[c].buffer);for(c in this.c)b.deleteProgram(this.c[c]);for(c in this.g)b.deleteShader(this.g[c]);b.deleteFramebuffer(this.h);b.deleteRenderbuffer(this.i);b.deleteTexture(this.j)}};
-function vk(b){if(!b.h){var c=b.a,d=c.createFramebuffer();c.bindFramebuffer(c.FRAMEBUFFER,d);var e=wk(c,1,1),f=c.createRenderbuffer();c.bindRenderbuffer(c.RENDERBUFFER,f);c.renderbufferStorage(c.RENDERBUFFER,c.DEPTH_COMPONENT16,1,1);c.framebufferTexture2D(c.FRAMEBUFFER,c.COLOR_ATTACHMENT0,c.TEXTURE_2D,e,0);c.framebufferRenderbuffer(c.FRAMEBUFFER,c.DEPTH_ATTACHMENT,c.RENDERBUFFER,f);c.bindTexture(c.TEXTURE_2D,null);c.bindRenderbuffer(c.RENDERBUFFER,null);c.bindFramebuffer(c.FRAMEBUFFER,null);b.h=d;
-b.j=e;b.i=f}return b.h}function xk(b,c){var d=String(I(c));if(d in b.g)return b.g[d];var e=b.a,f=e.createShader(c.U());e.shaderSource(f,c.a);e.compileShader(f);return b.g[d]=f}function yk(b,c,d){var e=I(c)+"/"+I(d);if(e in b.c)return b.c[e];var f=b.a,g=f.createProgram();f.attachShader(g,xk(b,c));f.attachShader(g,xk(b,d));f.linkProgram(g);return b.c[e]=g}sk.prototype.o=function(){Ya(this.b);Ya(this.g);Ya(this.c);this.i=this.j=this.h=this.l=null};sk.prototype.s=function(){};
-function zk(b,c){if(c==b.l)return!1;b.a.useProgram(c);b.l=c;return!0}function Ak(b,c,d){var e=b.createTexture();b.bindTexture(b.TEXTURE_2D,e);b.texParameteri(b.TEXTURE_2D,b.TEXTURE_MAG_FILTER,b.LINEAR);b.texParameteri(b.TEXTURE_2D,b.TEXTURE_MIN_FILTER,b.LINEAR);void 0!==c&&b.texParameteri(3553,10242,c);void 0!==d&&b.texParameteri(3553,10243,d);return e}function wk(b,c,d){var e=Ak(b,void 0,void 0);b.texImage2D(b.TEXTURE_2D,0,b.RGBA,c,d,0,b.RGBA,b.UNSIGNED_BYTE,null);return e};function Bk(b,c){this.H=this.u=void 0;this.j=Yb(c);this.s=[];this.h=[];this.B=void 0;this.g=[];this.c=[];this.D=this.K=void 0;this.b=[];this.w=this.i=null;this.G=void 0;this.na=Bb();this.za=Bb();this.S=this.P=void 0;this.pa=Bb();this.ja=this.X=this.ba=void 0;this.ea=[];this.l=[];this.a=[];this.o=null;this.f=[];this.A=[];this.aa=void 0}M(Bk,yg);
-function Ck(b,c){var d=b.o,e=b.i,f=b.ea,g=b.l,h=c.a;return function(){if(!h.isContextLost()){var b,l;b=0;for(l=f.length;b<l;++b)h.deleteTexture(f[b]);b=0;for(l=g.length;b<l;++b)h.deleteTexture(g[b])}uk(c,d);uk(c,e)}}
-function Dk(b,c,d,e){var f=b.u,g=b.H,h=b.B,k=b.K,l=b.D,m=b.G,n=b.P,q=b.S,r=b.ba?1:0,u=b.X,w=b.ja,y=b.aa,z=Math.cos(u),u=Math.sin(u),D=b.b.length,t=b.a.length,v,B,E,C,G,J;for(v=0;v<d;v+=e)G=c[v]-b.j[0],J=c[v+1]-b.j[1],B=t/8,E=-w*f,C=-w*(h-g),b.a[t++]=G,b.a[t++]=J,b.a[t++]=E*z-C*u,b.a[t++]=E*u+C*z,b.a[t++]=n/l,b.a[t++]=(q+h)/k,b.a[t++]=m,b.a[t++]=r,E=w*(y-f),C=-w*(h-g),b.a[t++]=G,b.a[t++]=J,b.a[t++]=E*z-C*u,b.a[t++]=E*u+C*z,b.a[t++]=(n+y)/l,b.a[t++]=(q+h)/k,b.a[t++]=m,b.a[t++]=r,E=w*(y-f),C=w*g,b.a[t++]=
-G,b.a[t++]=J,b.a[t++]=E*z-C*u,b.a[t++]=E*u+C*z,b.a[t++]=(n+y)/l,b.a[t++]=q/k,b.a[t++]=m,b.a[t++]=r,E=-w*f,C=w*g,b.a[t++]=G,b.a[t++]=J,b.a[t++]=E*z-C*u,b.a[t++]=E*u+C*z,b.a[t++]=n/l,b.a[t++]=q/k,b.a[t++]=m,b.a[t++]=r,b.b[D++]=B,b.b[D++]=B+1,b.b[D++]=B+2,b.b[D++]=B,b.b[D++]=B+2,b.b[D++]=B+3}Bk.prototype.Ya=function(b,c){this.f.push(this.b.length);this.A.push(c);var d=b.a;Dk(this,d,d.length,b.b)};Bk.prototype.Za=function(b,c){this.f.push(this.b.length);this.A.push(c);var d=b.a;Dk(this,d,d.length,b.b)};
-function Ek(b,c){var d=c.a;b.s.push(b.b.length);b.h.push(b.b.length);b.o=new rk(b.a);tk(c,34962,b.o);b.i=new rk(b.b);tk(c,34963,b.i);var e={};Fk(b.ea,b.g,e,d);Fk(b.l,b.c,e,d);b.u=void 0;b.H=void 0;b.B=void 0;b.g=null;b.c=null;b.K=void 0;b.D=void 0;b.b=null;b.G=void 0;b.P=void 0;b.S=void 0;b.ba=void 0;b.X=void 0;b.ja=void 0;b.a=null;b.aa=void 0}
-function Fk(b,c,d,e){var f,g,h,k,l=c.length;for(k=0;k<l;++k){g=c[k];h=I(g).toString();if(h in d)f=d[h];else{f=e;var m=Ak(f,33071,33071);f.texImage2D(f.TEXTURE_2D,0,f.RGBA,f.RGBA,f.UNSIGNED_BYTE,g);f=m;d[h]=f}b[k]=f}}
-function Gk(b,c,d,e,f,g,h,k,l,m,n){var q=c.a;tk(c,34962,b.o);tk(c,34963,b.i);var r=ok.ua(),u=pk.ua(),u=yk(c,r,u);b.w?r=b.w:(r=new qk(q,u),b.w=r);zk(c,u);q.enableVertexAttribArray(r.c);q.vertexAttribPointer(r.c,2,5126,!1,32,0);q.enableVertexAttribArray(r.a);q.vertexAttribPointer(r.a,2,5126,!1,32,8);q.enableVertexAttribArray(r.g);q.vertexAttribPointer(r.g,2,5126,!1,32,16);q.enableVertexAttribArray(r.b);q.vertexAttribPointer(r.b,1,5126,!1,32,24);q.enableVertexAttribArray(r.f);q.vertexAttribPointer(r.f,
-1,5126,!1,32,28);u=b.pa;Cg(u,0,0,2/(e*g[0]),2/(e*g[1]),-f,-(d[0]-b.j[0]),-(d[1]-b.j[1]));d=b.za;e=2/g[0];g=2/g[1];Db(d);d[0]=e;d[5]=g;d[10]=1;d[15]=1;g=b.na;Db(g);0!==f&&Hb(g,-f);q.uniformMatrix4fv(r.l,!1,u);q.uniformMatrix4fv(r.j,!1,d);q.uniformMatrix4fv(r.i,!1,g);q.uniform1f(r.h,h);var w;if(void 0===l)Hk(b,q,c,k,b.ea,b.s);else{if(m)a:{f=c.f?5125:5123;c=c.f?4:2;g=b.f.length-1;for(h=b.l.length-1;0<=h;--h)for(q.bindTexture(3553,b.l[h]),m=0<h?b.h[h-1]:0,u=b.h[h];0<=g&&b.f[g]>=m;){w=b.f[g];d=b.A[g];
-e=I(d).toString();if(void 0===k[e]&&d.M()&&(void 0===n||ac(n,d.M().C()))&&(q.clear(q.COLOR_BUFFER_BIT|q.DEPTH_BUFFER_BIT),q.drawElements(4,u-w,f,w*c),u=l(d))){b=u;break a}u=w;g--}b=void 0}else q.clear(q.COLOR_BUFFER_BIT|q.DEPTH_BUFFER_BIT),Hk(b,q,c,k,b.l,b.h),b=(b=l(null))?b:void 0;w=b}q.disableVertexAttribArray(r.c);q.disableVertexAttribArray(r.a);q.disableVertexAttribArray(r.g);q.disableVertexAttribArray(r.b);q.disableVertexAttribArray(r.f);return w}
-function Hk(b,c,d,e,f,g){var h=d.f?5125:5123;d=d.f?4:2;if($a(e)){var k;b=0;e=f.length;for(k=0;b<e;++b){c.bindTexture(3553,f[b]);var l=g[b];c.drawElements(4,l-k,h,k*d);k=l}}else{k=0;var m,l=0;for(m=f.length;l<m;++l){c.bindTexture(3553,f[l]);for(var n=0<l?g[l-1]:0,q=g[l],r=n;k<b.f.length&&b.f[k]<=q;){var u=I(b.A[k]).toString();void 0!==e[u]?(r!==n&&c.drawElements(4,n-r,h,r*d),n=r=k===b.f.length-1?q:b.f[k+1]):n=k===b.f.length-1?q:b.f[k+1];k++}r!==n&&c.drawElements(4,n-r,h,r*d)}}}
-Bk.prototype.Ha=function(b){var c=b.jb(),d=b.T(1),e=b.wc(),f=b.Wb(1),g=b.l,h=b.ka(),k=b.i,l=b.Y(),m=b.Pa();b=b.gb;var n;0===this.g.length?this.g.push(d):(n=this.g[this.g.length-1],I(n)!=I(d)&&(this.s.push(this.b.length),this.g.push(d)));0===this.c.length?this.c.push(f):(n=this.c[this.c.length-1],I(n)!=I(f)&&(this.h.push(this.b.length),this.c.push(f)));this.u=c[0];this.H=c[1];this.B=m[1];this.K=e[1];this.D=e[0];this.G=g;this.P=h[0];this.S=h[1];this.X=l;this.ba=k;this.ja=b;this.aa=m[0]};
-function Ik(b,c,d){this.l=c;this.i=b;this.h=d;this.b={}}function Jk(b,c){var d=[],e;for(e in b.b)d.push(Ck(b.b[e],c));return function(){for(var b=d.length,c,e=0;e<b;e++)c=d[e].apply(this,arguments);return c}}function Kk(b,c){for(var d in b.b)Ek(b.b[d],c)}Ik.prototype.a=function(b,c){var d=this.b[c];void 0===d&&(d=new Lk[c](this.i,this.l),this.b[c]=d);return d};Ik.prototype.c=function(){return $a(this.b)};
-Ik.prototype.f=function(b,c,d,e,f,g,h,k){var l,m;g=0;for(l=Ui.length;g<l;++g)m=this.b[Ui[g]],void 0!==m&&Gk(m,b,c,d,e,f,h,k,void 0,!1)};function Mk(b,c,d,e,f,g,h,k,l,m){var n=Nk,q,r;for(q=Ui.length-1;0<=q;--q)if(r=b.b[Ui[q]],void 0!==r&&(r=Gk(r,c,d,e,f,n,g,h,k,l,m)))return r}
-Ik.prototype.g=function(b,c,d,e,f,g,h,k,l,m){var n=c.a;n.bindFramebuffer(n.FRAMEBUFFER,vk(c));var q;void 0!==this.h&&(q=Lb(Qb(b),e*this.h));return Mk(this,c,b,e,f,k,l,function(b){var c=new Uint8Array(4);n.readPixels(0,0,1,1,n.RGBA,n.UNSIGNED_BYTE,c);if(0<c[3]&&(b=m(b)))return b},!0,q)};function Ok(b,c,d,e,f,g,h){var k=d.a;k.bindFramebuffer(k.FRAMEBUFFER,vk(d));return void 0!==Mk(b,d,c,e,f,g,h,function(){var b=new Uint8Array(4);k.readPixels(0,0,1,1,k.RGBA,k.UNSIGNED_BYTE,b);return 0<b[3]},!1)}
-var Lk={Image:Bk},Nk=[1,1];function Pk(b,c,d,e,f,g){this.a=b;this.f=c;this.c=g;this.l=f;this.h=e;this.g=d;this.b=null}M(Pk,yg);Pk.prototype.Za=function(b,c){var d=this.a,e=(new Ik(1,this.c)).a(0,"Image");e.Ha(this.b);e.Za(b,c);Ek(e,d);Gk(e,this.a,this.f,this.g,this.h,this.l,1,{},void 0,!1);Ck(e,d)()};Pk.prototype.Ya=function(b,c){var d=this.a,e=(new Ik(1,this.c)).a(0,"Image");e.Ha(this.b);e.Ya(b,c);Ek(e,d);Gk(e,this.a,this.f,this.g,this.h,this.l,1,{},void 0,!1);Ck(e,d)()};Pk.prototype.Ha=function(b){this.b=b};function Qk(){this.a="precision mediump float;varying vec2 a;uniform float f;uniform sampler2D g;void main(void){vec4 texColor=texture2D(g,a);gl_FragColor.rgb=texColor.rgb;gl_FragColor.a=texColor.a*f;}"}M(Qk,mk);aa(Qk);function Rk(){this.a="varying vec2 a;attribute vec2 b;attribute vec2 c;uniform mat4 d;uniform mat4 e;void main(void){gl_Position=e*vec4(b,0.,1.);a=(d*vec4(c,0.,1.)).st;}"}M(Rk,nk);aa(Rk);
-function Sk(b,c){this.f=b.getUniformLocation(c,"f");this.c=b.getUniformLocation(c,"e");this.h=b.getUniformLocation(c,"d");this.g=b.getUniformLocation(c,"g");this.a=b.getAttribLocation(c,"b");this.b=b.getAttribLocation(c,"c")};function Tk(b,c){Fg.call(this,c);this.c=b;this.G=new rk([-1,-1,0,0,1,-1,1,0,-1,1,0,1,1,1,1,1]);this.i=this.ya=null;this.j=void 0;this.D=zb();this.P=Bb();this.o=null}M(Tk,Fg);
-function Uk(b,c,d){var e=b.c.c;if(void 0===b.j||b.j!=d){c.postRenderFunctions.push(na(function(b,c,d){b.isContextLost()||(b.deleteFramebuffer(c),b.deleteTexture(d))},e,b.i,b.ya));c=wk(e,d,d);var f=e.createFramebuffer();e.bindFramebuffer(36160,f);e.framebufferTexture2D(36160,36064,3553,c,0);b.ya=c;b.i=f;b.j=d}else e.bindFramebuffer(36160,b.i)}
-Tk.prototype.Nc=function(b,c,d){Vk(this,"precompose",d,b);tk(d,34962,this.G);var e=d.a,f=Qk.ua(),g=Rk.ua(),f=yk(d,f,g);this.o?g=this.o:this.o=g=new Sk(e,f);zk(d,f)&&(e.enableVertexAttribArray(g.a),e.vertexAttribPointer(g.a,2,5126,!1,16,0),e.enableVertexAttribArray(g.b),e.vertexAttribPointer(g.b,2,5126,!1,16,8),e.uniform1i(g.g,0));e.uniformMatrix4fv(g.h,!1,this.D);e.uniformMatrix4fv(g.c,!1,this.P);e.uniform1f(g.f,c.opacity);e.bindTexture(3553,this.ya);e.drawArrays(5,0,4);Vk(this,"postcompose",d,b)};
-function Vk(b,c,d,e){b=b.a;if(nb(b,c)){var f=e.viewState;S(b,new zg(c,b,new Pk(d,f.center,f.resolution,f.rotation,e.size,e.extent),e,null,d))}}Tk.prototype.s=function(){this.i=this.ya=null;this.j=void 0};function Wk(){this.a="precision mediump float;varying vec2 a;uniform sampler2D e;void main(void){gl_FragColor=texture2D(e,a);}"}M(Wk,mk);aa(Wk);function Xk(){this.a="varying vec2 a;attribute vec2 b;attribute vec2 c;uniform vec4 d;void main(void){gl_Position=vec4(b*d.xy+d.zw,0.,1.);a=c;}"}M(Xk,nk);aa(Xk);function Yk(b,c){this.f=b.getUniformLocation(c,"e");this.c=b.getUniformLocation(c,"d");this.a=b.getAttribLocation(c,"b");this.b=b.getAttribLocation(c,"c")};function Zk(b,c){Tk.call(this,b,c);this.B=Wk.ua();this.S=Xk.ua();this.b=null;this.w=new rk([0,0,0,1,1,0,1,1,0,1,0,0,1,1,1,0]);this.u=this.g=null;this.h=-1;this.K=[0,0]}M(Zk,Tk);Zk.prototype.J=function(){uk(this.c.g,this.w);Zk.$.J.call(this)};Zk.prototype.l=function(b,c,d){var e=this.c;return function(f,g){return Ve(b,c,f,g,function(b){var c=ve(e.b,b.getKey());c&&(d[f]||(d[f]={}),d[f][b.L.toString()]=b);return c})}};Zk.prototype.s=function(){Zk.$.s.call(this);this.b=null};
-Zk.prototype.Oc=function(b,c,d){var e=this.c,f=d.a,g=b.viewState,h=g.projection,k=this.a,l=k.V(),m=l.la(h),n=Pe(m,g.resolution),q=m.I(n),r=We(l,n,b.pixelRatio,h),u=r[0]/tb(Oe(m,n),this.K)[0],w=q/u,y=l.kb(h),z=g.center,D;q==g.resolution?(z=Lg(z,q,b.size),D=Zb(z,q,g.rotation,b.size)):D=b.extent;q=Le(m,D,q);if(this.g&&hd(this.g,q)&&this.h==l.f)w=this.u;else{var t=[q.ha(),q.c-q.b+1],v=Math.pow(2,Math.ceil(Math.log(Math.max(t[0]*r[0],t[1]*r[1]))/Math.LN2)),t=w*v,B=m.ka(n),E=B[0]+q.a*r[0]*w,w=B[1]+q.b*
-r[1]*w,w=[E,w,E+t,w+t];Uk(this,b,v);f.viewport(0,0,v,v);f.clearColor(0,0,0,0);f.clear(16384);f.disable(3042);v=yk(d,this.B,this.S);zk(d,v);this.b||(this.b=new Yk(f,v));tk(d,34962,this.w);f.enableVertexAttribArray(this.b.a);f.vertexAttribPointer(this.b.a,2,5126,!1,16,0);f.enableVertexAttribArray(this.b.b);f.vertexAttribPointer(this.b.b,2,5126,!1,16,8);f.uniform1i(this.b.f,0);d={};d[n]={};var C=this.l(l,h,d),G=ni(k),v=!0,E=Jb(),J=new fd(0,0,0,0),A,H,O;for(H=q.a;H<=q.f;++H)for(O=q.b;O<=q.c;++O){B=Ng(l,
-n,H,O,u,h);if(void 0!==c.extent&&(A=Ie(m,B.L,E),!ac(A,c.extent)))continue;A=B.N();A=2==A||4==A||3==A&&!G;!A&&B.a&&(B=B.a);A=B.N();if(2==A){if(ve(e.b,B.getKey())){d[n][B.L.toString()]=B;continue}}else if(4==A||3==A&&!G)continue;v=!1;A=He(m,B.L,C,J,E);A||(B=Ke(m,B.L,J,E))&&C(n+1,B)}c=Object.keys(d).map(Number);c.sort(Ha);for(var C=new Float32Array(4),P,L,K,G=0,J=c.length;G<J;++G)for(P in L=d[c[G]],L)B=L[P],A=Ie(m,B.L,E),H=2*(A[2]-A[0])/t,O=2*(A[3]-A[1])/t,K=2*(A[0]-w[0])/t-1,A=2*(A[1]-w[1])/t-1,yb(C,
-H,O,K,A),f.uniform4fv(this.b.c,C),$k(e,B,r,y*u),f.drawArrays(5,0,4);v?(this.g=q,this.u=w,this.h=l.f):(this.u=this.g=null,this.h=-1,b.animate=!0)}Kg(b.usedTiles,l,n,q);var fa=e.i;Mg(b,l,m,u,h,D,n,k.get("preload"),function(b){var c;(c=2!=b.N()||ve(e.b,b.getKey()))||(c=b.getKey()in fa.f);c||fa.c([b,Ne(m,b.L),m.I(b.L[0]),r,y*u])},this);Hg(b,l);Jg(b,l);f=this.D;Db(f);Fb(f,(z[0]-w[0])/(w[2]-w[0]),(z[1]-w[1])/(w[3]-w[1]));0!==g.rotation&&Hb(f,g.rotation);Gb(f,b.size[0]*g.resolution/(w[2]-w[0]),b.size[1]*
-g.resolution/(w[3]-w[1]));Fb(f,-.5,-.5);return!0};function al(b,c){Tk.call(this,b,c);this.h=!1;this.K=-1;this.B=NaN;this.u=Jb();this.g=this.b=this.w=null}M(al,Tk);p=al.prototype;p.Nc=function(b,c,d){this.g=c;var e=b.viewState,f=this.b;f&&!f.c()&&f.f(d,e.center,e.resolution,e.rotation,b.size,b.pixelRatio,c.opacity,c.eb?b.skippedFeatureUids:{})};p.J=function(){var b=this.b;b&&(Jk(b,this.c.g)(),this.b=null);al.$.J.call(this)};
-p.fb=function(b,c,d,e){if(this.b&&this.g){var f=c.viewState,g=this.a,h={};return this.b.g(b,this.c.g,f.center,f.resolution,f.rotation,c.size,c.pixelRatio,this.g.opacity,{},function(b){var c=I(b).toString();if(!(c in h))return h[c]=!0,d.call(e,b,g)})}};p.Ic=function(b,c){if(this.b&&this.g){var d=c.viewState;return Ok(this.b,b,this.c.g,d.resolution,d.rotation,this.g.opacity,c.skippedFeatureUids)}return!1};p.Pc=function(){Gg(this)};
-p.Oc=function(b,c,d){function e(b){var c,d=b.c;d?c=d.call(b,m):(d=f.g)&&(c=d(b,m));if(c){if(c){d=!1;if(Array.isArray(c))for(var e=0,g=c.length;e<g;++e)d=pj(r,b,c[e],oj(m,n),this.Pc,this)||d;else d=pj(r,b,c,oj(m,n),this.Pc,this)||d;b=d}else b=!1;this.h=this.h||b}}var f=this.a;c=f.V();Ig(b.attributions,c.i);Jg(b,c);var g=b.viewHints[0],h=b.viewHints[1],k=f.i,l=f.j;if(!this.h&&!k&&g||!l&&h)return!0;var h=b.extent,k=b.viewState,g=k.projection,m=k.resolution,n=b.pixelRatio,k=f.f,q=f.a,l=f.get("renderOrder");
-void 0===l&&(l=nj);h=Lb(h,q*m);if(!this.h&&this.B==m&&this.K==k&&this.w==l&&Nb(this.u,h))return!0;this.b&&b.postRenderFunctions.push(Jk(this.b,d));this.h=!1;var r=new Ik(.5*m/n,h,f.a);Tj(c,h,m,g);if(l){var u=[];Rj(c,h,function(b){u.push(b)},this);u.sort(l);u.forEach(e,this)}else Rj(c,h,e,this);Kk(r,d);this.B=m;this.K=k;this.w=l;this.u=h;this.b=r;return!0};function bl(b,c){Tg.call(this,0,c);this.a=document.createElement("CANVAS");this.a.style.width="100%";this.a.style.height="100%";this.a.className="ol-unselectable";fe(b,this.a,0);this.s=this.u=0;this.H=lf();this.j=!0;this.c=rf(this.a,{antialias:!0,depth:!1,failIfMajorPerformanceCaveat:!0,preserveDrawingBuffer:!1,stencil:!0});this.g=new sk(this.a,this.c);Q(this.a,"webglcontextlost",this.me,this);Q(this.a,"webglcontextrestored",this.ne,this);this.b=new ue;this.o=null;this.i=new Yg(function(b){var c=
-b[1];b=b[2];var f=c[0]-this.o[0],c=c[1]-this.o[1];return 65536*Math.log(b)+Math.sqrt(f*f+c*c)/b}.bind(this),function(b){return b[0].getKey()});this.w=function(){if(0!==this.i.a.length){bh(this.i);var b=Zg(this.i);$k(this,b[0],b[3],b[4])}return!1}.bind(this);this.l=0;cl(this)}M(bl,Tg);
-function $k(b,c,d,e){var f=b.c,g=c.getKey();if(ve(b.b,g))b=b.b.get(g),f.bindTexture(3553,b.ya),9729!=b.Cc&&(f.texParameteri(3553,10240,9729),b.Cc=9729),9729!=b.Dc&&(f.texParameteri(3553,10240,9729),b.Dc=9729);else{var h=f.createTexture();f.bindTexture(3553,h);if(0<e){var k=b.H.canvas,l=b.H;b.u!==d[0]||b.s!==d[1]?(k.width=d[0],k.height=d[1],b.u=d[0],b.s=d[1]):l.clearRect(0,0,d[0],d[1]);l.drawImage(c.T(),e,e,d[0],d[1],0,0,d[0],d[1]);f.texImage2D(3553,0,6408,6408,5121,k)}else f.texImage2D(3553,0,6408,
-6408,5121,c.T());f.texParameteri(3553,10240,9729);f.texParameteri(3553,10241,9729);f.texParameteri(3553,10242,33071);f.texParameteri(3553,10243,33071);b.b.set(g,{ya:h,Cc:9729,Dc:9729})}}p=bl.prototype;p.Ib=function(b){return b instanceof X?new Zk(this,b):b instanceof Y?new al(this,b):null};function dl(b,c,d){var e=b.h;if(nb(e,c)){b=b.g;var f=d.viewState;S(e,new zg(c,e,new Pk(b,f.center,f.resolution,f.rotation,d.size,d.extent),d,null,b))}}
-p.J=function(){var b=this.c;b.isContextLost()||we(this.b,function(c){c&&b.deleteTexture(c.ya)});jb(this.g);bl.$.J.call(this)};p.ld=function(b,c){for(var d=this.c,e;1024<this.b.f-this.l;){if(e=this.b.a.Ia)d.deleteTexture(e.ya);else if(+this.b.a.Qb==c.index)break;else--this.l;this.b.pop()}};p.U=function(){return"webgl"};p.me=function(b){b.preventDefault();this.b.clear();this.l=0;b=this.f;for(var c in b)b[c].s()};p.ne=function(){cl(this);this.h.render()};
-function cl(b){b=b.c;b.activeTexture(33984);b.blendFuncSeparate(770,771,1,771);b.disable(2884);b.disable(2929);b.disable(3089);b.disable(2960)}
-p.sb=function(b){var c=this.g,d=this.c;if(d.isContextLost())return!1;if(!b)return this.j&&(ne(this.a,!1),this.j=!1),!1;this.o=b.focus;this.b.set((-b.index).toString(),null);++this.l;dl(this,"precompose",b);var e=[],f=b.layerStatesArray;Na(f);var g=b.viewState.resolution,h,k,l,m;h=0;for(k=f.length;h<k;++h)m=f[h],Bg(m,g)&&"ready"==m.Zb&&(l=Wg(this,m.layer),l.Oc(b,m,c)&&e.push(m));f=b.size[0]*b.pixelRatio;g=b.size[1]*b.pixelRatio;if(this.a.width!=f||this.a.height!=g)this.a.width=f,this.a.height=g;d.bindFramebuffer(36160,
-null);d.clearColor(0,0,0,0);d.clear(16384);d.enable(3042);d.viewport(0,0,this.a.width,this.a.height);h=0;for(k=e.length;h<k;++h)m=e[h],l=Wg(this,m.layer),l.Nc(b,m,c);this.j||(ne(this.a,!0),this.j=!0);Ug(b);1024<this.b.f-this.l&&b.postRenderFunctions.push(this.ld.bind(this));0!==this.i.a.length&&(b.postRenderFunctions.push(this.w),b.animate=!0);dl(this,"postcompose",b);Xg(this,b);b.postRenderFunctions.push(Vg)};
-p.Vb=function(b,c,d,e,f,g){var h;if(this.c.isContextLost())return!1;var k=c.viewState,l=c.layerStatesArray,m;for(m=l.length-1;0<=m;--m){h=l[m];var n=h.layer;if(Bg(h,k.resolution)&&f.call(g,n)&&(h=Wg(this,n).fb(b,c,d,e)))return h}};p.Jc=function(b,c,d,e){var f=!1;if(this.c.isContextLost())return!1;var g=c.viewState,h=c.layerStatesArray,k;for(k=h.length-1;0<=k;--k){var l=h[k],m=l.layer;if(Bg(l,g.resolution)&&d.call(e,m)&&(f=Wg(this,m).Ic(b,c)))return!0}return f};var el=["canvas","webgl","dom"];
-function Z(b){T.call(this);var c=fl(b);this.Ja=void 0!==b.loadTilesWhileAnimating?b.loadTilesWhileAnimating:!1;this.vb=void 0!==b.loadTilesWhileInteracting?b.loadTilesWhileInteracting:!1;this.xb=void 0!==b.pixelRatio?b.pixelRatio:xf;this.wb=c.logos;this.pa=function(){this.h=void 0;this.Be.call(this,Date.now())}.bind(this);this.Aa=zb();this.yb=zb();this.Ba=0;this.b=null;this.ea=Jb();this.s=this.D=null;this.a=document.createElement("DIV");this.a.className="ol-viewport"+(Af?" ol-touch":"");this.a.style.position=
-"relative";this.a.style.overflow="hidden";this.a.style.width="100%";this.a.style.height="100%";this.a.style.msTouchAction="none";this.a.style.touchAction="none";this.o=document.createElement("DIV");this.o.className="ol-overlaycontainer";this.a.appendChild(this.o);this.j=document.createElement("DIV");this.j.className="ol-overlaycontainer-stopevent";b=["click","dblclick","mousedown","touchstart","mspointerdown",sg,"mousewheel","wheel"];for(var d=0,e=b.length;d<e;++d)Q(this.j,b[d],kb);this.a.appendChild(this.j);
-this.X=new kg(this);for(var f in vg)Q(this.X,vg[f],this.yc,this);this.S=c.keyboardEventTarget;this.i=null;Q(this.a,"wheel",this.Na,this);Q(this.a,"mousewheel",this.Na,this);this.G=c.controls;this.g=c.interactions;this.u=c.overlays;this.Tc={};this.B=new c.Ce(this.a,this);this.P=null;this.w=[];this.aa=[];this.na=new ch(this.ud.bind(this),this.Pd.bind(this));this.zb={};Q(this,rb("layergroup"),this.zd,this);Q(this,rb("view"),this.Qd,this);Q(this,rb("size"),this.Md,this);Q(this,rb("target"),this.Od,this);
-this.l(c.values);nd(this.G,function(b){b.setMap(this)},this);Q(this.G,"add",function(b){b.element.setMap(this)},this);Q(this.G,"remove",function(b){b.element.setMap(null)},this);nd(this.g,function(b){b.setMap(this)},this);Q(this.g,"add",function(b){b.element.setMap(this)},this);Q(this.g,"remove",function(b){b.element.setMap(null)},this);nd(this.u,this.gc,this);Q(this.u,"add",function(b){this.gc(b.element)},this);Q(this.u,"remove",function(b){var c=b.element.La();void 0!==c&&delete this.Tc[c.toString()];
-b.element.setMap(null)},this)}M(Z,T);p=Z.prototype;p.hd=function(b){this.g.push(b)};p.jd=function(b){gl(this).get("layers").push(b)};p.kd=function(b){this.u.push(b)};p.gc=function(b){var c=b.La();void 0!==c&&(this.Tc[c.toString()]=b);b.setMap(this)};p.fa=function(b){this.render();Array.prototype.push.apply(this.w,arguments)};
-p.J=function(){jb(this.X);jb(this.B);gb(this.a,"wheel",this.Na,this);gb(this.a,"mousewheel",this.Na,this);void 0!==this.c&&(x.removeEventListener("resize",this.c,!1),this.c=void 0);this.h&&(x.cancelAnimationFrame(this.h),this.h=void 0);this.set("target",null);Z.$.J.call(this)};p.od=function(b,c,d,e,f){if(this.b)return b=this.ta(b),this.B.Vb(b,this.b,c,void 0!==d?d:null,void 0!==e?e:cc,void 0!==f?f:null)};
-p.Sd=function(b,c,d){if(!this.b)return!1;b=this.ta(b);return this.B.Jc(b,this.b,void 0!==c?c:cc,void 0!==d?d:null)};p.vc=function(b){var c=this.a.getBoundingClientRect();b=b.changedTouches?b.changedTouches[0]:b;return[b.clientX-c.left,b.clientY-c.top]};p.Sb=function(){return this.get("target")};p.ab=function(){var b=this.Sb();return void 0!==b?Zd(b):null};p.ta=function(b){var c=this.b;return c?(b=b.slice(),Eg(c.pixelToCoordinateMatrix,b,b)):null};function gl(b){return b.get("layergroup")}
-function yh(b,c){var d=b.b;if(d){var e=c.slice(0,2);return Eg(d.coordinateToPixelMatrix,e,e)}return null}p.Oa=function(){return this.get("size")};p.O=function(){return this.get("view")};p.ud=function(b,c,d,e){var f=this.b;if(!(f&&c in f.wantedTiles&&f.wantedTiles[c][b.L.toString()]))return Infinity;b=d[0]-f.focus[0];d=d[1]-f.focus[1];return 65536*Math.log(e)+Math.sqrt(b*b+d*d)/e};p.Na=function(b,c){var d=new ig(c||b.type,this,b);this.yc(d)};
+for(var f=[],g,h,k,l;c;){g=0;for(h=c.children.length;g<h;g++)k=c.children[g],l=c.$?e(k):k.bbox,n(b,l)&&(c.$?d.push(k):m(b,l)?this.ac(k,d):f.push(k));c=f.pop()}return d},load:function(b){if(!b||!b.length)return this;if(b.length<this.ec){for(var c=0,d=b.length;c<d;c++)this.Ca(b[c]);return this}b=this.cc(b.slice(),0,b.length-1,0);this.data.children.length?this.data.height===b.height?this.fc(this.data,b):(this.data.height<b.height&&(c=this.data,this.data=b,b=c),this.dc(b,this.data.height-b.height-1,!0)):
+this.data=b;return this},Ca:function(b){b&&this.dc(b,this.data.height-1);return this},clear:function(){this.data={children:[],height:1,bbox:[Infinity,Infinity,-Infinity,-Infinity],$:!0};return this},remove:function(b){if(!b)return this;for(var c=this.data,d=this.da(b),e=[],f=[],g,h,k,l;c||e.length;){c||(c=e.pop(),h=e[e.length-1],g=f.pop(),l=!0);if(c.$&&(k=c.children.indexOf(b),-1!==k)){c.children.splice(k,1);e.push(c);this.dd(e);break}l||c.$||!m(c.bbox,d)?h?(g++,c=h.children[g],l=!1):c=null:(e.push(c),
+f.push(g),g=0,h=c,c=c.children[0])}return this},da:function(b){return b},Hb:function(b,c){return b[0]-c[0]},Ib:function(b,c){return b[1]-c[1]},toJSON:function(){return this.data},ac:function(b,c){for(var d=[];b;)b.$?c.push.apply(c,b.children):d.push.apply(d,b.children),b=d.pop();return c},cc:function(b,c,e,f){var g=e-c+1,h=this.Bb,k;if(g<=h)return k={children:b.slice(c,e+1),height:1,bbox:null,$:!0},d(k,this.da),k;f||(f=Math.ceil(Math.log(g)/Math.log(h)),h=Math.ceil(g/Math.pow(h,f-1)));k={children:[],
+height:f,bbox:null,$:!1};var g=Math.ceil(g/h),h=g*Math.ceil(Math.sqrt(h)),l,m,n;for(q(b,c,e,h,this.Hb);c<=e;c+=h)for(m=Math.min(c+h-1,e),q(b,c,m,g,this.Ib),l=c;l<=m;l+=g)n=Math.min(l+g-1,m),k.children.push(this.cc(b,l,n,f-1));d(k,this.da);return k},cd:function(b,c,d,e){for(var f,g,h,l,m,n,q,r;;){e.push(c);if(c.$||e.length-1===d)break;q=r=Infinity;f=0;for(g=c.children.length;f<g;f++)h=c.children[f],m=k(h.bbox),n=h.bbox,n=(Math.max(n[2],b[2])-Math.min(n[0],b[0]))*(Math.max(n[3],b[3])-Math.min(n[1],
+b[1]))-m,n<r?(r=n,q=m<q?m:q,l=h):n===r&&m<q&&(q=m,l=h);c=l}return c},dc:function(b,c,d){var e=this.da;d=d?b.bbox:e(b);var e=[],g=this.cd(d,this.data,c,e);g.children.push(b);for(f(g.bbox,d);0<=c;)if(e[c].children.length>this.Bb)this.fd(e,c),c--;else break;this.$c(d,e,c)},fd:function(b,c){var e=b[c],f=e.children.length,g=this.ec;this.ad(e,g,f);f=this.bd(e,g,f);f={children:e.children.splice(f,e.children.length-f),height:e.height,bbox:null,$:!1};e.$&&(f.$=!0);d(e,this.da);d(f,this.da);c?b[c-1].children.push(f):
+this.fc(e,f)},fc:function(b,c){this.data={children:[b,c],height:b.height+1,bbox:null,$:!1};d(this.data,this.da)},bd:function(b,c,d){var f,g,h,l,m,n,q;m=n=Infinity;for(f=c;f<=d-c;f++)g=e(b,0,f,this.da),h=e(b,f,d,this.da),l=Math.max(0,Math.min(g[2],h[2])-Math.max(g[0],h[0]))*Math.max(0,Math.min(g[3],h[3])-Math.max(g[1],h[1])),g=k(g)+k(h),l<m?(m=l,q=f,n=g<n?g:n):l===m&&g<n&&(n=g,q=f);return q},ad:function(b,c,d){var e=b.$?this.Hb:g,f=b.$?this.Ib:h,k=this.bc(b,c,d,e);c=this.bc(b,c,d,f);k<c&&b.children.sort(e)},
+bc:function(b,c,d,g){b.children.sort(g);g=this.da;var h=e(b,0,c,g),k=e(b,d-c,d,g),m=l(h)+l(k),n,q;for(n=c;n<d-c;n++)q=b.children[n],f(h,b.$?g(q):q.bbox),m+=l(h);for(n=d-c-1;n>=c;n--)q=b.children[n],f(k,b.$?g(q):q.bbox),m+=l(k);return m},$c:function(b,c,d){for(;0<=d;d--)f(c[d].bbox,b)},dd:function(b){for(var c=b.length-1,e;0<=c;c--)0===b[c].children.length?0<c?(e=b[c-1].children,e.splice(e.indexOf(b[c]),1)):this.clear():d(b[c],this.da)},ed:function(b){var c=["return a"," - b",";"];this.Hb=new Function("a",
+"b",c.join(b[0]));this.Ib=new Function("a","b",c.join(b[1]));this.da=new Function("a","return [a"+b.join(", a")+"];")}};"undefined"!==typeof b?b.uc=c:"undefined"!==typeof self?self.a=c:window.a=c})();Lj=b.uc})();function Mj(b){this.a=Lj(b);this.b={}}p=Mj.prototype;p.Ca=function(b,c){var d=[b[0],b[1],b[2],b[3],c];this.a.Ca(d);this.b[I(c)]=d};p.load=function(b,c){for(var d=Array(c.length),e=0,f=c.length;e<f;e++){var g=b[e],h=c[e],g=[g[0],g[1],g[2],g[3],h];d[e]=g;this.b[I(h)]=g}this.a.load(d)};p.remove=function(b){b=I(b);var c=this.b[b];delete this.b[b];return null!==this.a.remove(c)};function Nj(b){return b.a.all().map(function(b){return b[4]})}
+function Oj(b,c){return b.a.search(c).map(function(b){return b[4]})}function Pj(b,c,d,e){return Qj(Oj(b,c),d,e)}function Qj(b,c,d){for(var e,f=0,g=b.length;f<g&&!(e=c.call(d,b[f]));f++);return e}p.clear=function(){this.a.clear();this.b={}};p.C=function(){return this.a.data.bbox};function Rj(b){b=b||{};De.call(this,{attributions:b.attributions,logo:b.logo,projection:void 0,state:"ready",wrapX:void 0!==b.wrapX?b.wrapX:!0});this.o=pa;this.D=b.format;this.u=b.url;void 0!==b.loader?this.o=b.loader:void 0!==this.u&&(this.o=Jj(this.u,this.D));this.G=void 0!==b.strategy?b.strategy:Kj;var c=void 0!==b.useSpatialIndex?b.useSpatialIndex:!0;this.R=c?new Mj:null;this.s=new Mj;this.ca={};this.b={};this.g={};this.h={};this.a=null;var d,e;b.features instanceof ld?(d=b.features,e=d.a):Array.isArray(b.features)&&
+(e=b.features);c||void 0!==d||(d=new ld(e));void 0!==e&&Sj(this,e);void 0!==d&&Tj(this,d)}M(Rj,De);p=Rj.prototype;p.Cb=function(b){var c=I(b).toString();if(Uj(this,c,b)){Vj(this,c,b);var d=b.M();d?(c=d.C(),this.R&&this.R.Ca(c,b)):this.ca[c]=b;S(this,new Wj("addfeature",b))}this.v()};function Vj(b,c,d){b.h[c]=[Q(d,"change",b.xc,b),Q(d,"propertychange",b.xc,b)]}function Uj(b,c,d){var e=!0,f=d.La();void 0!==f?f.toString()in b.b?e=!1:b.b[f.toString()]=d:b.g[c]=d;return e}p.Db=function(b){Sj(this,b);this.v()};
+function Sj(b,c){var d,e,f,g,h=[],k=[],l=[];e=0;for(f=c.length;e<f;e++)g=c[e],d=I(g).toString(),Uj(b,d,g)&&k.push(g);e=0;for(f=k.length;e<f;e++){g=k[e];d=I(g).toString();Vj(b,d,g);var m=g.M();m?(d=m.C(),h.push(d),l.push(g)):b.ca[d]=g}b.R&&b.R.load(h,l);e=0;for(f=k.length;e<f;e++)S(b,new Wj("addfeature",k[e]))}
+function Tj(b,c){var d=!1;Q(b,"addfeature",function(b){d||(d=!0,c.push(b.feature),d=!1)});Q(b,"removefeature",function(b){d||(d=!0,c.remove(b.feature),d=!1)});Q(c,"add",function(b){d||(b=b.element,d=!0,this.Cb(b),d=!1)},b);Q(c,"remove",function(b){if(!d){b=b.element;d=!0;var c=I(b).toString();c in this.ca?delete this.ca[c]:this.R&&this.R.remove(b);this.Yb(b);this.v();d=!1}},b);b.a=c}
+p.clear=function(b){if(b){for(var c in this.h)this.h[c].forEach(N);this.a||(this.h={},this.b={},this.g={})}else if(this.R){b=this.Yb;Qj(Nj(this.R),b,this);for(var d in this.ca)this.Yb(this.ca[d])}this.a&&this.a.clear();this.R&&this.R.clear();this.s.clear();this.ca={};S(this,new Wj("clear"));this.v()};p.od=function(b,c){if(this.R)return Qj(Nj(this.R),b,c);if(this.a)return nd(this.a,b,c)};function Xj(b,c,d,e){b.R?Pj(b.R,c,d,e):b.a&&nd(b.a,d,e)}
+p.pe=function(){var b;this.a?b=this.a.a:this.R&&(b=Nj(this.R),$a(this.ca)||Ka(b,Za(this.ca)));return b};p.C=function(){return this.R.C()};
+p.xc=function(b){b=b.target;var c=I(b).toString(),d=b.M();if(d)if(d=d.C(),c in this.ca)delete this.ca[c],this.R&&this.R.Ca(d,b);else{if(this.R){var e=this.R,f=I(b);Rb(e.b[f].slice(0,4),d)||(e.remove(b),e.Ca(d,b))}}else c in this.ca||(this.R&&this.R.remove(b),this.ca[c]=b);d=b.La();void 0!==d?(d=d.toString(),c in this.g?(delete this.g[c],this.b[d]=b):this.b[d]!==b&&(Yj(this,b),this.b[d]=b)):c in this.g||(Yj(this,b),this.g[c]=b);this.v();S(this,new Wj("changefeature",b))};
+function Zj(b,c,d,e){var f=b.s;c=b.G(c,d);var g,h;g=0;for(h=c.length;g<h;++g){var k=c[g];Pj(f,k,function(b){return Nb(b.extent,k)})||(b.o.call(b,k,d,e),f.Ca(k,{extent:k.slice()}))}}p.Yb=function(b){var c=I(b).toString();this.h[c].forEach(N);delete this.h[c];var d=b.La();void 0!==d?delete this.b[d.toString()]:delete this.g[c];S(this,new Wj("removefeature",b))};function Yj(b,c){for(var d in b.b)if(b.b[d]===c){delete b.b[d];break}}function Wj(b,c){R.call(this,b);this.feature=c}M(Wj,R);function ak(b){Xi.call(this,b);this.c=rf();this.b=null;this.j=Jb();this.h=zb()}M(ak,Xi);
+ak.prototype.g=function(b,c,d){var e=b.pixelRatio,f=b.viewState,g=f.center,h=f.projection,k=f.rotation,l=b.size,m=Math.round(e*l[0]/2),n=Math.round(e*l[1]/2),q=e/f.resolution,r=this.a,u=r.V(),w=u.kb(h),f=Zi(this,b,0);Yi(this,"precompose",d,b,f);var l=d,r=nb(r,"render"),y,z,D,t;if(k||r){l=this.c;y=l.canvas;D=u.mb(e)/e;var v=d.canvas.width*D;z=d.canvas.height*D;t=Math.round(Math.sqrt(v*v+z*z));y.width!=t?y.width=y.height=t:l.clearRect(0,0,t,t);y=(t-v)/2/D;z=(t-z)/2/D;q*=D;m=Math.round(D*(m+y));n=Math.round(D*
+(n+z))}v=l.globalAlpha;l.globalAlpha=c.opacity;var B=u.la(h),E=this.b,C;c=u.Mb(h)&&1==c.opacity;c||(E.reverse(),C=[]);for(var G=0,J=E.length;G<J;++G){var A=E[G],H=A.L,O=Je(B,H,this.j),P=H[0],L=Xb(Je(B,Re(B,g,P))),H=Math.round(Vb(O)*q),K=Math.round(Wb(O)*q),fa=Math.round((O[0]-L[0])*q/H)*H+m+Math.round((L[0]-g[0])*q),O=Math.round((L[1]-O[3])*q/K)*K+n+Math.round((g[1]-L[1])*q);if(!c){L=[fa,O,fa+H,O+K];l.save();for(var ra=0,Wl=C.length;ra<Wl;++ra){var Xa=C[ra];ac(L,Xa)&&(l.beginPath(),l.moveTo(L[0],
+L[1]),l.lineTo(L[0],L[3]),l.lineTo(L[2],L[3]),l.lineTo(L[2],L[1]),l.moveTo(Xa[0],Xa[1]),l.lineTo(Xa[2],Xa[1]),l.lineTo(Xa[2],Xa[3]),l.lineTo(Xa[0],Xa[3]),l.closePath(),l.clip())}C.push(L)}P=Xe(u,P,e,h);l.drawImage(A.T(),w,w,P[0],P[1],fa,O,H,K);c||l.restore()}r&&(e=y-m/D+m,h=z-n/D+n,g=Ig(this.h,t/2-e,t/2-h,q,-q,-k,-g[0]+e/q,-g[1]-h/q),Yi(this,"render",l,b,g));(k||r)&&d.drawImage(l.canvas,-Math.round(y),-Math.round(z),t/D,t/D);l.globalAlpha=v;Yi(this,"postcompose",d,b,f)};
+ak.prototype.i=function(b,c){function d(b){b=b.N();return 2==b||4==b||3==b&&!u}var e=b.pixelRatio,f=b.viewState,g=f.projection,h=this.a,k=h.V(),l=k.la(g),m=Qe(l,f.resolution),n=l.I(m),q=f.center;n==f.resolution?(q=Rg(q,n,b.size),f=Zb(q,n,f.rotation,b.size)):f=b.extent;void 0!==c.extent&&(f=$b(f,c.extent));if(f[2]<f[0]||f[3]<f[1])return!1;n=Me(l,f,n);q={};q[m]={};var r=this.l(k,g,q),u=ti(h),w=Jb(),y=new fd(0,0,0,0),z,D,t,v;for(t=n.a;t<=n.f;++t)for(v=n.b;v<=n.c;++v)z=Tg(k,m,t,v,e,g),!d(z)&&z.a&&(z=
+z.a),d(z)?q[m][z.L.toString()]=z:(D=Ie(l,z.L,r,y,w),D||(z=Le(l,z.L,y,w))&&r(m+1,z));r=Object.keys(q).map(Number);r.sort(Ha);var w=[],B,y=0;for(t=r.length;y<t;++y)for(B in z=r[y],v=q[z],v)z=v[B],2==z.N()&&w.push(z);this.b=w;Qg(b.usedTiles,k,m,n);Sg(b,k,l,e,g,f,m,h.get("preload"));Ng(b,k);Pg(b,k);return!0};function bk(b){Xi.call(this,b);this.b=!1;this.w=-1;this.u=NaN;this.j=Jb();this.c=this.o=null;this.h=rf()}M(bk,Xi);
+bk.prototype.g=function(b,c,d){var e=b.extent,f=b.pixelRatio,g=c.eb?b.skippedFeatureUids:{},h=b.viewState,k=h.projection,h=h.rotation,l=k.C(),m=this.a.V(),n=Zi(this,b,0);Yi(this,"precompose",d,b,n);var q=this.c;if(q&&!q.c()){var r;nb(this.a,"render")?(this.h.canvas.width=d.canvas.width,this.h.canvas.height=d.canvas.height,r=this.h):r=d;var u=r.globalAlpha;r.globalAlpha=c.opacity;c=b.size[0]*f;var w=b.size[1]*f;xi(r,-h,c/2,w/2);q.f(r,f,n,h,g);if(m.j&&k.a&&!Nb(l,e)){for(var k=e[0],m=Vb(l),y=0;k<l[0];)--y,
+n=m*y,n=Zi(this,b,n),q.f(r,f,n,h,g),k+=m;y=0;for(k=e[2];k>l[2];)++y,n=m*y,n=Zi(this,b,n),q.f(r,f,n,h,g),k-=m;n=Zi(this,b,0)}xi(r,h,c/2,w/2);r!=d&&(Yi(this,"render",r,b,n),d.drawImage(r.canvas,0,0));r.globalAlpha=u}Yi(this,"postcompose",d,b,n)};bk.prototype.fb=function(b,c,d,e){if(this.c){var f=this.a,g={};return this.c.g(b,c.viewState.resolution,c.viewState.rotation,{},function(b){var c=I(b).toString();if(!(c in g))return g[c]=!0,d.call(e,b,f)})}};bk.prototype.B=function(){Mg(this)};
+bk.prototype.i=function(b){function c(b){var c,e=b.c;e?c=e.call(b,m):(e=d.g)&&(c=e(b,m));if(c){if(c){e=!1;if(Array.isArray(c))for(var f=0,g=c.length;f<g;++f)e=vj(r,b,c[f],uj(m,n),this.B,this)||e;else e=vj(r,b,c,uj(m,n),this.B,this)||e;b=e}else b=!1;this.b=this.b||b}}var d=this.a,e=d.V();Og(b.attributions,e.i);Pg(b,e);var f=b.viewHints[0],g=b.viewHints[1],h=d.i,k=d.j;if(!this.b&&!h&&f||!k&&g)return!0;var l=b.extent,k=b.viewState,f=k.projection,m=k.resolution,n=b.pixelRatio,g=d.f,q=d.a,h=d.get("renderOrder");
+void 0===h&&(h=tj);l=Lb(l,q*m);q=k.projection.C();e.j&&k.projection.a&&!Nb(q,b.extent)&&(b=Math.max(Vb(l)/2,Vb(q)),l[0]=q[0]-b,l[2]=q[2]+b);if(!this.b&&this.u==m&&this.w==g&&this.o==h&&Nb(this.j,l))return!0;this.c=null;this.b=!1;var r=new pj(.5*m/n,l,m,d.a);Zj(e,l,m,f);if(h){var u=[];Xj(e,l,function(b){u.push(b)},this);u.sort(h);u.forEach(c,this)}else Xj(e,l,c,this);qj(r);this.u=m;this.w=g;this.o=h;this.j=l;this.c=r;return!0};function ck(b,c){var d=/\{z\}/g,e=/\{x\}/g,f=/\{y\}/g,g=/\{-y\}/g;return function(h){if(h)return b.replace(d,h[0].toString()).replace(e,h[1].toString()).replace(f,function(){return(-h[2]-1).toString()}).replace(g,function(){var b=c.a?c.a[h[0]]:null;return(b.c-b.b+1+h[2]).toString()})}}function dk(b,c){for(var d=b.length,e=Array(d),f=0;f<d;++f)e[f]=ck(b[f],c);return ek(e)}function ek(b){return 1===b.length?b[0]:function(c,d,e){if(c)return b[Ea((c[1]<<c[0])+c[2],b.length)](c,d,e)}}function fk(){};function gk(b){Ve.call(this,{attributions:b.attributions,cacheSize:b.cacheSize,extent:b.extent,logo:b.logo,opaque:b.opaque,projection:b.projection,state:b.state,tileGrid:b.tileGrid,tilePixelRatio:b.tilePixelRatio,wrapX:b.wrapX});this.tileLoadFunction=b.tileLoadFunction;this.tileUrlFunction=this.g?this.g.bind(this):fk;this.urls=null;if(b.urls){var c=b.urls;this.urls=c;hk(this,this.g?this.g.bind(this):dk(c,this.tileGrid))}else b.url&&this.s(b.url);b.tileUrlFunction&&hk(this,b.tileUrlFunction)}
+M(gk,Ve);gk.prototype.D=function(b){b=b.target;switch(b.N()){case 1:S(this,new Ze("tileloadstart",b));break;case 2:S(this,new Ze("tileloadend",b));break;case 3:S(this,new Ze("tileloaderror",b))}};function hk(b,c){b.a.clear();b.tileUrlFunction=c;b.v()}
+gk.prototype.s=function(b){var c=[],d=/\{(\d)-(\d)\}/.exec(b)||/\{([a-z])-([a-z])\}/.exec(b);if(d){var e=d[2].charCodeAt(0),f;for(f=d[1].charCodeAt(0);f<=e;++f)c.push(b.replace(d[0],String.fromCharCode(f)))}else c.push(b);b=this.urls=c;hk(this,this.g?this.g.bind(this):dk(b,this.tileGrid))};gk.prototype.Yc=function(b,c,d){b=this.lb(b,c,d);we(this.a,b)&&this.a.get(b)};function ik(b,c){Zg.call(this,0,c);this.c=rf();rf();this.a=this.c.canvas;this.a.style.width="100%";this.a.style.height="100%";this.a.className="ol-unselectable";fe(b,this.a,0);this.b=!0;this.g=zb()}M(ik,Zg);ik.prototype.Jb=function(b){return b instanceof X?new ak(b):b instanceof Y?new bk(b):null};
+function jk(b,c,d){var e=b.h,f=b.c;if(nb(e,c)){var g=d.extent,h=d.pixelRatio,k=d.viewState.rotation,l=d.pixelRatio,m=d.viewState,n=m.resolution;b=Ig(b.g,b.a.width/2,b.a.height/2,l/n,-l/n,-m.rotation,-m.center[0],-m.center[1]);g=new Mi(f,h,g,b,k);S(e,new Fg(c,e,g,d,f,null))}}ik.prototype.U=function(){return"canvas"};
+ik.prototype.sb=function(b){if(b){var c=this.c,d=b.pixelRatio,e=Math.round(b.size[0]*d),d=Math.round(b.size[1]*d);this.a.width!=e||this.a.height!=d?(this.a.width=e,this.a.height=d):c.clearRect(0,0,e,d);var f=b.viewState.rotation;$g(b);jk(this,"precompose",b);var g=b.layerStatesArray;Na(g);xi(c,f,e/2,d/2);var h=b.viewState.resolution,k,l,m,n;k=0;for(l=g.length;k<l;++k)n=g[k],m=n.layer,m=bh(this,m),Hg(n,h)&&"ready"==n.$b&&m.i(b,n)&&m.g(b,n,c);xi(c,-f,e/2,d/2);jk(this,"postcompose",b);this.b||(oe(this.a,
+!0),this.b=!0);ch(this,b);b.postRenderFunctions.push(ah)}else this.b&&(oe(this.a,!1),this.b=!1)};function kk(b,c){Lg.call(this,b);this.target=c}M(kk,Lg);kk.prototype.Gb=pa;kk.prototype.Kc=pa;function lk(b){var c=document.createElement("DIV");c.style.position="absolute";kk.call(this,b,c);this.c=!0;this.h=1;this.g=0;this.b={}}M(lk,kk);lk.prototype.Gb=function(){ee(this.target);this.g=0};
+lk.prototype.Lc=function(b,c){if(!c.visible)return this.c&&(oe(this.target,!1),this.c=!1),!0;var d=b.pixelRatio,e=b.viewState,f=e.projection,g=this.a,h=g.V(),k=h.la(f),l=h.kb(f),m=Qe(k,e.resolution),n=k.I(m),q=e.center,r;n==e.resolution?(q=Rg(q,n,b.size),r=Zb(q,n,e.rotation,b.size)):r=b.extent;void 0!==c.extent&&(r=$b(r,c.extent));var n=Me(k,r,n),u={};u[m]={};var w=this.l(h,f,u),y=ti(g),z=Jb(),D=new fd(0,0,0,0),t,v,B,E;for(B=n.a;B<=n.f;++B)for(E=n.b;E<=n.c;++E)t=Tg(h,m,B,E,d,f),v=t.N(),v=2==v||4==
+v||3==v&&!y,!v&&t.a&&(t=t.a),v=t.N(),2==v?u[m][t.L.toString()]=t:4==v||3==v&&!y||(v=Ie(k,t.L,w,D,z),v||(t=Le(k,t.L,D,z))&&w(m+1,t));var C;if(this.g!=h.f){for(C in this.b)y=this.b[+C],ge(y.target);this.b={};this.g=h.f}z=Object.keys(u).map(Number);z.sort(Ha);var w={},G;B=0;for(E=z.length;B<E;++B){C=z[B];C in this.b?y=this.b[C]:(y=Re(k,q,C),y=new mk(k,y),w[C]=!0,this.b[C]=y);C=u[C];for(G in C){t=y;v=C[G];var J=l,A=v.L,H=A[0],O=A[1],P=A[2],A=A.toString();if(!(A in t.b)){var H=tb(Pe(t.g,H),t.i),L=v.T(t),
+K=L.style;K.maxWidth="none";var fa=void 0,ra=void 0;0<J?(fa=document.createElement("DIV"),ra=fa.style,ra.overflow="hidden",ra.width=H[0]+"px",ra.height=H[1]+"px",K.position="absolute",K.left=-J+"px",K.top=-J+"px",K.width=H[0]+2*J+"px",K.height=H[1]+2*J+"px",fa.appendChild(L)):(K.width=H[0]+"px",K.height=H[1]+"px",fa=L,ra=K);ra.position="absolute";ra.left=(O-t.f[1])*H[0]+"px";ra.top=(t.f[2]-P)*H[1]+"px";t.a||(t.a=document.createDocumentFragment());t.a.appendChild(fa);t.b[A]=v}}y.a&&(y.target.appendChild(y.a),
+y.a=null)}l=Object.keys(this.b).map(Number);l.sort(Ha);B=zb();G=0;for(z=l.length;G<z;++G)if(C=l[G],y=this.b[C],C in u)if(t=y.I(),E=y.ka(),Ig(B,b.size[0]/2,b.size[1]/2,t/e.resolution,t/e.resolution,e.rotation,(E[0]-q[0])/t,(q[1]-E[1])/t),y.setTransform(B),C in w){for(--C;0<=C;--C)if(C in this.b){E=this.b[C].target;E.parentNode&&E.parentNode.insertBefore(y.target,E.nextSibling);break}0>C&&fe(this.target,y.target,0)}else{if(!b.viewHints[0]&&!b.viewHints[1]){v=Ke(y.g,r,y.f[0],D);C=[];t=E=void 0;for(t in y.b)E=
+y.b[t],J=E.L,gd(v,J[1],J[2])||C.push(E);J=v=void 0;v=0;for(J=C.length;v<J;++v)E=C[v],t=E.L.toString(),ge(E.T(y)),delete y.b[t]}}else ge(y.target),delete this.b[C];c.opacity!=this.h&&(this.h=this.target.style.opacity=c.opacity);c.visible&&!this.c&&(oe(this.target,!0),this.c=!0);Qg(b.usedTiles,h,m,n);Sg(b,h,k,d,f,r,m,g.get("preload"));Ng(b,h);Pg(b,h);return!0};
+function mk(b,c){this.target=document.createElement("DIV");this.target.style.position="absolute";this.target.style.width="100%";this.target.style.height="100%";this.g=b;this.f=c;this.h=bc(Je(b,c));this.l=b.I(c[0]);this.b={};this.a=null;this.c=Bb();this.i=[0,0]}mk.prototype.ka=function(){return this.h};mk.prototype.I=function(){return this.l};mk.prototype.setTransform=function(b){Jg(b,this.c)||(vf(this.target,b),Cb(this.c,b))};function nk(b){this.g=rf();var c=this.g.canvas;c.style.maxWidth="none";c.style.position="absolute";kk.call(this,b,c);this.b=!1;this.h=-1;this.o=NaN;this.i=Jb();this.c=this.j=null;this.w=zb();this.u=zb()}M(nk,kk);p=nk.prototype;p.Gb=function(){var b=this.g.canvas;b.width=b.width;this.h=0};
+p.Kc=function(b,c){var d=b.viewState,e=d.center,f=d.rotation,g=d.resolution,d=b.pixelRatio,h=b.size[0],k=b.size[1],l=h*d,m=k*d,e=Ig(this.w,d*h/2,d*k/2,d/g,-d/g,-f,-e[0],-e[1]),g=this.g;g.canvas.width=l;g.canvas.height=m;h=Ig(this.u,0,0,1/d,1/d,0,-(l-h)/2*d,-(m-k)/2*d);vf(g.canvas,h);ok(this,"precompose",b,e);(h=this.c)&&!h.c()&&(g.globalAlpha=c.opacity,h.f(g,d,e,f,c.eb?b.skippedFeatureUids:{}),ok(this,"render",b,e));ok(this,"postcompose",b,e)};
+function ok(b,c,d,e){var f=b.g;b=b.a;nb(b,c)&&(e=new Mi(f,d.pixelRatio,d.extent,e,d.viewState.rotation),S(b,new Fg(c,b,e,d,f,null)))}p.fb=function(b,c,d,e){if(this.c){var f=this.a,g={};return this.c.g(b,c.viewState.resolution,c.viewState.rotation,{},function(b){var c=I(b).toString();if(!(c in g))return g[c]=!0,d.call(e,b,f)})}};p.Mc=function(){Mg(this)};
+p.Lc=function(b){function c(b){var c,e=b.c;e?c=e.call(b,l):(e=d.g)&&(c=e(b,l));if(c){if(c){e=!1;if(Array.isArray(c))for(var f=0,g=c.length;f<g;++f)e=vj(n,b,c[f],uj(l,m),this.Mc,this)||e;else e=vj(n,b,c,uj(l,m),this.Mc,this)||e;b=e}else b=!1;this.b=this.b||b}}var d=this.a,e=d.V();Og(b.attributions,e.i);Pg(b,e);var f=b.viewHints[0],g=b.viewHints[1],h=d.i,k=d.j;if(!this.b&&!h&&f||!k&&g)return!0;var g=b.extent,h=b.viewState,f=h.projection,l=h.resolution,m=b.pixelRatio;b=d.f;k=d.a;h=d.get("renderOrder");
+void 0===h&&(h=tj);g=Lb(g,k*l);if(!this.b&&this.o==l&&this.h==b&&this.j==h&&Nb(this.i,g))return!0;this.c=null;this.b=!1;var n=new pj(.5*l/m,g,l,d.a);Zj(e,g,l,f);if(h){var q=[];Xj(e,g,function(b){q.push(b)},this);q.sort(h);q.forEach(c,this)}else Xj(e,g,c,this);qj(n);this.o=l;this.h=b;this.j=h;this.i=g;this.c=n;return!0};function pk(b,c){Zg.call(this,0,c);this.c=rf();var d=this.c.canvas;d.style.position="absolute";d.style.width="100%";d.style.height="100%";d.className="ol-unselectable";fe(b,d,0);this.g=zb();this.a=document.createElement("DIV");this.a.className="ol-unselectable";d=this.a.style;d.position="absolute";d.width="100%";d.height="100%";Q(this.a,"touchstart",lb);fe(b,this.a,0);this.b=!0}M(pk,Zg);pk.prototype.J=function(){ge(this.a);pk.X.J.call(this)};
+pk.prototype.Jb=function(b){if(b instanceof X)b=new lk(b);else if(b instanceof Y)b=new nk(b);else return null;return b};function qk(b,c,d){var e=b.h;if(nb(e,c)){var f=d.extent,g=d.pixelRatio,h=d.viewState,k=h.rotation,l=b.c,m=l.canvas;Ig(b.g,m.width/2,m.height/2,g/h.resolution,-g/h.resolution,-h.rotation,-h.center[0],-h.center[1]);b=new Mi(l,g,f,b.g,k);S(e,new Fg(c,e,b,d,l,null))}}pk.prototype.U=function(){return"dom"};
+pk.prototype.sb=function(b){if(b){var c=this.h;if(nb(c,"precompose")||nb(c,"postcompose")){var c=this.c.canvas,d=b.pixelRatio;c.width=b.size[0]*d;c.height=b.size[1]*d}qk(this,"precompose",b);c=b.layerStatesArray;Na(c);var d=b.viewState.resolution,e,f,g,h;e=0;for(f=c.length;e<f;++e)h=c[e],g=h.layer,g=bh(this,g),fe(this.a,g.target,e),Hg(h,d)&&"ready"==h.$b?g.Lc(b,h)&&g.Kc(b,h):g.Gb();var c=b.layerStates,k;for(k in this.f)k in c||(g=this.f[k],ge(g.target));this.b||(oe(this.a,!0),this.b=!0);$g(b);ch(this,
+b);b.postRenderFunctions.push(ah);qk(this,"postcompose",b)}else this.b&&(oe(this.a,!1),this.b=!1)};function rk(b){this.a=b}function sk(b){this.a=b}M(sk,rk);sk.prototype.U=function(){return 35632};function tk(b){this.a=b}M(tk,rk);tk.prototype.U=function(){return 35633};function uk(){this.a="precision mediump float;varying vec2 a;varying float b;uniform float k;uniform sampler2D l;void main(void){vec4 texColor=texture2D(l,a);gl_FragColor.rgb=texColor.rgb;float alpha=texColor.a*b*k;if(alpha==0.0){discard;}gl_FragColor.a=alpha;}"}M(uk,sk);aa(uk);
+function vk(){this.a="varying vec2 a;varying float b;attribute vec2 c;attribute vec2 d;attribute vec2 e;attribute float f;attribute float g;uniform mat4 h;uniform mat4 i;uniform mat4 j;void main(void){mat4 offsetMatrix=i;if(g==1.0){offsetMatrix=i*j;}vec4 offsets=offsetMatrix*vec4(e,0.,0.);gl_Position=h*vec4(c,0.,1.)+offsets;a=d;b=f;}"}M(vk,tk);aa(vk);
+function wk(b,c){this.i=b.getUniformLocation(c,"j");this.j=b.getUniformLocation(c,"i");this.h=b.getUniformLocation(c,"k");this.l=b.getUniformLocation(c,"h");this.a=b.getAttribLocation(c,"e");this.b=b.getAttribLocation(c,"f");this.c=b.getAttribLocation(c,"c");this.f=b.getAttribLocation(c,"g");this.g=b.getAttribLocation(c,"d")};function xk(b){this.a=void 0!==b?b:[]};function yk(b,c){this.A=b;this.a=c;this.b={};this.g={};this.c={};this.i=this.j=this.h=this.l=null;(this.f=0<=oa.indexOf("OES_element_index_uint"))&&c.getExtension("OES_element_index_uint");Q(this.A,"webglcontextlost",this.o,this);Q(this.A,"webglcontextrestored",this.s,this)}M(yk,ib);
+function zk(b,c,d){var e=b.a,f=d.a,g=String(I(d));if(g in b.b)e.bindBuffer(c,b.b[g].buffer);else{var h=e.createBuffer();e.bindBuffer(c,h);var k;34962==c?k=new Float32Array(f):34963==c&&(k=b.f?new Uint32Array(f):new Uint16Array(f));e.bufferData(c,k,35044);b.b[g]={Xe:d,buffer:h}}}function Ak(b,c){var d=b.a,e=String(I(c)),f=b.b[e];d.isContextLost()||d.deleteBuffer(f.buffer);delete b.b[e]}
+yk.prototype.J=function(){hb(this.A);var b=this.a;if(!b.isContextLost()){for(var c in this.b)b.deleteBuffer(this.b[c].buffer);for(c in this.c)b.deleteProgram(this.c[c]);for(c in this.g)b.deleteShader(this.g[c]);b.deleteFramebuffer(this.h);b.deleteRenderbuffer(this.i);b.deleteTexture(this.j)}};
+function Bk(b){if(!b.h){var c=b.a,d=c.createFramebuffer();c.bindFramebuffer(c.FRAMEBUFFER,d);var e=Ck(c,1,1),f=c.createRenderbuffer();c.bindRenderbuffer(c.RENDERBUFFER,f);c.renderbufferStorage(c.RENDERBUFFER,c.DEPTH_COMPONENT16,1,1);c.framebufferTexture2D(c.FRAMEBUFFER,c.COLOR_ATTACHMENT0,c.TEXTURE_2D,e,0);c.framebufferRenderbuffer(c.FRAMEBUFFER,c.DEPTH_ATTACHMENT,c.RENDERBUFFER,f);c.bindTexture(c.TEXTURE_2D,null);c.bindRenderbuffer(c.RENDERBUFFER,null);c.bindFramebuffer(c.FRAMEBUFFER,null);b.h=d;
+b.j=e;b.i=f}return b.h}function Dk(b,c){var d=String(I(c));if(d in b.g)return b.g[d];var e=b.a,f=e.createShader(c.U());e.shaderSource(f,c.a);e.compileShader(f);return b.g[d]=f}function Ek(b,c,d){var e=I(c)+"/"+I(d);if(e in b.c)return b.c[e];var f=b.a,g=f.createProgram();f.attachShader(g,Dk(b,c));f.attachShader(g,Dk(b,d));f.linkProgram(g);return b.c[e]=g}yk.prototype.o=function(){Ya(this.b);Ya(this.g);Ya(this.c);this.i=this.j=this.h=this.l=null};yk.prototype.s=function(){};
+function Fk(b,c){if(c==b.l)return!1;b.a.useProgram(c);b.l=c;return!0}function Gk(b,c,d){var e=b.createTexture();b.bindTexture(b.TEXTURE_2D,e);b.texParameteri(b.TEXTURE_2D,b.TEXTURE_MAG_FILTER,b.LINEAR);b.texParameteri(b.TEXTURE_2D,b.TEXTURE_MIN_FILTER,b.LINEAR);void 0!==c&&b.texParameteri(3553,10242,c);void 0!==d&&b.texParameteri(3553,10243,d);return e}function Ck(b,c,d){var e=Gk(b,void 0,void 0);b.texImage2D(b.TEXTURE_2D,0,b.RGBA,c,d,0,b.RGBA,b.UNSIGNED_BYTE,null);return e};function Hk(b,c){this.H=this.u=void 0;this.j=Yb(c);this.s=[];this.h=[];this.B=void 0;this.g=[];this.c=[];this.D=this.K=void 0;this.b=[];this.w=this.i=null;this.G=void 0;this.na=Bb();this.za=Bb();this.S=this.P=void 0;this.pa=Bb();this.ja=this.Y=this.ba=void 0;this.ea=[];this.l=[];this.a=[];this.o=null;this.f=[];this.A=[];this.aa=void 0}M(Hk,Eg);
+function Ik(b,c){var d=b.o,e=b.i,f=b.ea,g=b.l,h=c.a;return function(){if(!h.isContextLost()){var b,l;b=0;for(l=f.length;b<l;++b)h.deleteTexture(f[b]);b=0;for(l=g.length;b<l;++b)h.deleteTexture(g[b])}Ak(c,d);Ak(c,e)}}
+function Jk(b,c,d,e){var f=b.u,g=b.H,h=b.B,k=b.K,l=b.D,m=b.G,n=b.P,q=b.S,r=b.ba?1:0,u=b.Y,w=b.ja,y=b.aa,z=Math.cos(u),u=Math.sin(u),D=b.b.length,t=b.a.length,v,B,E,C,G,J;for(v=0;v<d;v+=e)G=c[v]-b.j[0],J=c[v+1]-b.j[1],B=t/8,E=-w*f,C=-w*(h-g),b.a[t++]=G,b.a[t++]=J,b.a[t++]=E*z-C*u,b.a[t++]=E*u+C*z,b.a[t++]=n/l,b.a[t++]=(q+h)/k,b.a[t++]=m,b.a[t++]=r,E=w*(y-f),C=-w*(h-g),b.a[t++]=G,b.a[t++]=J,b.a[t++]=E*z-C*u,b.a[t++]=E*u+C*z,b.a[t++]=(n+y)/l,b.a[t++]=(q+h)/k,b.a[t++]=m,b.a[t++]=r,E=w*(y-f),C=w*g,b.a[t++]=
+G,b.a[t++]=J,b.a[t++]=E*z-C*u,b.a[t++]=E*u+C*z,b.a[t++]=(n+y)/l,b.a[t++]=q/k,b.a[t++]=m,b.a[t++]=r,E=-w*f,C=w*g,b.a[t++]=G,b.a[t++]=J,b.a[t++]=E*z-C*u,b.a[t++]=E*u+C*z,b.a[t++]=n/l,b.a[t++]=q/k,b.a[t++]=m,b.a[t++]=r,b.b[D++]=B,b.b[D++]=B+1,b.b[D++]=B+2,b.b[D++]=B,b.b[D++]=B+2,b.b[D++]=B+3}Hk.prototype.Za=function(b,c){this.f.push(this.b.length);this.A.push(c);var d=b.a;Jk(this,d,d.length,b.b)};Hk.prototype.$a=function(b,c){this.f.push(this.b.length);this.A.push(c);var d=b.a;Jk(this,d,d.length,b.b)};
+function Kk(b,c){var d=c.a;b.s.push(b.b.length);b.h.push(b.b.length);b.o=new xk(b.a);zk(c,34962,b.o);b.i=new xk(b.b);zk(c,34963,b.i);var e={};Lk(b.ea,b.g,e,d);Lk(b.l,b.c,e,d);b.u=void 0;b.H=void 0;b.B=void 0;b.g=null;b.c=null;b.K=void 0;b.D=void 0;b.b=null;b.G=void 0;b.P=void 0;b.S=void 0;b.ba=void 0;b.Y=void 0;b.ja=void 0;b.a=null;b.aa=void 0}
+function Lk(b,c,d,e){var f,g,h,k,l=c.length;for(k=0;k<l;++k){g=c[k];h=I(g).toString();if(h in d)f=d[h];else{f=e;var m=Gk(f,33071,33071);f.texImage2D(f.TEXTURE_2D,0,f.RGBA,f.RGBA,f.UNSIGNED_BYTE,g);f=m;d[h]=f}b[k]=f}}
+function Mk(b,c,d,e,f,g,h,k,l,m,n){var q=c.a;zk(c,34962,b.o);zk(c,34963,b.i);var r=uk.ua(),u=vk.ua(),u=Ek(c,r,u);b.w?r=b.w:(r=new wk(q,u),b.w=r);Fk(c,u);q.enableVertexAttribArray(r.c);q.vertexAttribPointer(r.c,2,5126,!1,32,0);q.enableVertexAttribArray(r.a);q.vertexAttribPointer(r.a,2,5126,!1,32,8);q.enableVertexAttribArray(r.g);q.vertexAttribPointer(r.g,2,5126,!1,32,16);q.enableVertexAttribArray(r.b);q.vertexAttribPointer(r.b,1,5126,!1,32,24);q.enableVertexAttribArray(r.f);q.vertexAttribPointer(r.f,
+1,5126,!1,32,28);u=b.pa;Ig(u,0,0,2/(e*g[0]),2/(e*g[1]),-f,-(d[0]-b.j[0]),-(d[1]-b.j[1]));d=b.za;e=2/g[0];g=2/g[1];Db(d);d[0]=e;d[5]=g;d[10]=1;d[15]=1;g=b.na;Db(g);0!==f&&Hb(g,-f);q.uniformMatrix4fv(r.l,!1,u);q.uniformMatrix4fv(r.j,!1,d);q.uniformMatrix4fv(r.i,!1,g);q.uniform1f(r.h,h);var w;if(void 0===l)Nk(b,q,c,k,b.ea,b.s);else{if(m)a:{f=c.f?5125:5123;c=c.f?4:2;g=b.f.length-1;for(h=b.l.length-1;0<=h;--h)for(q.bindTexture(3553,b.l[h]),m=0<h?b.h[h-1]:0,u=b.h[h];0<=g&&b.f[g]>=m;){w=b.f[g];d=b.A[g];
+e=I(d).toString();if(void 0===k[e]&&d.M()&&(void 0===n||ac(n,d.M().C()))&&(q.clear(q.COLOR_BUFFER_BIT|q.DEPTH_BUFFER_BIT),q.drawElements(4,u-w,f,w*c),u=l(d))){b=u;break a}u=w;g--}b=void 0}else q.clear(q.COLOR_BUFFER_BIT|q.DEPTH_BUFFER_BIT),Nk(b,q,c,k,b.l,b.h),b=(b=l(null))?b:void 0;w=b}q.disableVertexAttribArray(r.c);q.disableVertexAttribArray(r.a);q.disableVertexAttribArray(r.g);q.disableVertexAttribArray(r.b);q.disableVertexAttribArray(r.f);return w}
+function Nk(b,c,d,e,f,g){var h=d.f?5125:5123;d=d.f?4:2;if($a(e)){var k;b=0;e=f.length;for(k=0;b<e;++b){c.bindTexture(3553,f[b]);var l=g[b];c.drawElements(4,l-k,h,k*d);k=l}}else{k=0;var m,l=0;for(m=f.length;l<m;++l){c.bindTexture(3553,f[l]);for(var n=0<l?g[l-1]:0,q=g[l],r=n;k<b.f.length&&b.f[k]<=q;){var u=I(b.A[k]).toString();void 0!==e[u]?(r!==n&&c.drawElements(4,n-r,h,r*d),n=r=k===b.f.length-1?q:b.f[k+1]):n=k===b.f.length-1?q:b.f[k+1];k++}r!==n&&c.drawElements(4,n-r,h,r*d)}}}
+Hk.prototype.Ha=function(b){var c=b.jb(),d=b.T(1),e=b.wc(),f=b.Xb(1),g=b.l,h=b.ka(),k=b.i,l=b.Z(),m=b.Qa();b=b.gb;var n;0===this.g.length?this.g.push(d):(n=this.g[this.g.length-1],I(n)!=I(d)&&(this.s.push(this.b.length),this.g.push(d)));0===this.c.length?this.c.push(f):(n=this.c[this.c.length-1],I(n)!=I(f)&&(this.h.push(this.b.length),this.c.push(f)));this.u=c[0];this.H=c[1];this.B=m[1];this.K=e[1];this.D=e[0];this.G=g;this.P=h[0];this.S=h[1];this.Y=l;this.ba=k;this.ja=b;this.aa=m[0]};
+function Ok(b,c,d){this.l=c;this.i=b;this.h=d;this.b={}}function Pk(b,c){var d=[],e;for(e in b.b)d.push(Ik(b.b[e],c));return function(){for(var b=d.length,c,e=0;e<b;e++)c=d[e].apply(this,arguments);return c}}function Qk(b,c){for(var d in b.b)Kk(b.b[d],c)}Ok.prototype.a=function(b,c){var d=this.b[c];void 0===d&&(d=new Rk[c](this.i,this.l),this.b[c]=d);return d};Ok.prototype.c=function(){return $a(this.b)};
+Ok.prototype.f=function(b,c,d,e,f,g,h,k){var l,m;g=0;for(l=$i.length;g<l;++g)m=this.b[$i[g]],void 0!==m&&Mk(m,b,c,d,e,f,h,k,void 0,!1)};function Sk(b,c,d,e,f,g,h,k,l,m){var n=Tk,q,r;for(q=$i.length-1;0<=q;--q)if(r=b.b[$i[q]],void 0!==r&&(r=Mk(r,c,d,e,f,n,g,h,k,l,m)))return r}
+Ok.prototype.g=function(b,c,d,e,f,g,h,k,l,m){var n=c.a;n.bindFramebuffer(n.FRAMEBUFFER,Bk(c));var q;void 0!==this.h&&(q=Lb(Qb(b),e*this.h));return Sk(this,c,b,e,f,k,l,function(b){var c=new Uint8Array(4);n.readPixels(0,0,1,1,n.RGBA,n.UNSIGNED_BYTE,c);if(0<c[3]&&(b=m(b)))return b},!0,q)};function Uk(b,c,d,e,f,g,h){var k=d.a;k.bindFramebuffer(k.FRAMEBUFFER,Bk(d));return void 0!==Sk(b,d,c,e,f,g,h,function(){var b=new Uint8Array(4);k.readPixels(0,0,1,1,k.RGBA,k.UNSIGNED_BYTE,b);return 0<b[3]},!1)}
+var Rk={Image:Hk},Tk=[1,1];function Vk(b,c,d,e,f,g){this.a=b;this.f=c;this.c=g;this.l=f;this.h=e;this.g=d;this.b=null}M(Vk,Eg);Vk.prototype.$a=function(b,c){var d=this.a,e=(new Ok(1,this.c)).a(0,"Image");e.Ha(this.b);e.$a(b,c);Kk(e,d);Mk(e,this.a,this.f,this.g,this.h,this.l,1,{},void 0,!1);Ik(e,d)()};Vk.prototype.Za=function(b,c){var d=this.a,e=(new Ok(1,this.c)).a(0,"Image");e.Ha(this.b);e.Za(b,c);Kk(e,d);Mk(e,this.a,this.f,this.g,this.h,this.l,1,{},void 0,!1);Ik(e,d)()};Vk.prototype.Ha=function(b){this.b=b};function Wk(){this.a="precision mediump float;varying vec2 a;uniform float f;uniform sampler2D g;void main(void){vec4 texColor=texture2D(g,a);gl_FragColor.rgb=texColor.rgb;gl_FragColor.a=texColor.a*f;}"}M(Wk,sk);aa(Wk);function Xk(){this.a="varying vec2 a;attribute vec2 b;attribute vec2 c;uniform mat4 d;uniform mat4 e;void main(void){gl_Position=e*vec4(b,0.,1.);a=(d*vec4(c,0.,1.)).st;}"}M(Xk,tk);aa(Xk);
+function Yk(b,c){this.f=b.getUniformLocation(c,"f");this.c=b.getUniformLocation(c,"e");this.h=b.getUniformLocation(c,"d");this.g=b.getUniformLocation(c,"g");this.a=b.getAttribLocation(c,"b");this.b=b.getAttribLocation(c,"c")};function Zk(b,c){Lg.call(this,c);this.c=b;this.G=new xk([-1,-1,0,0,1,-1,1,0,-1,1,0,1,1,1,1,1]);this.i=this.ya=null;this.j=void 0;this.D=zb();this.P=Bb();this.o=null}M(Zk,Lg);
+function $k(b,c,d){var e=b.c.c;if(void 0===b.j||b.j!=d){c.postRenderFunctions.push(na(function(b,c,d){b.isContextLost()||(b.deleteFramebuffer(c),b.deleteTexture(d))},e,b.i,b.ya));c=Ck(e,d,d);var f=e.createFramebuffer();e.bindFramebuffer(36160,f);e.framebufferTexture2D(36160,36064,3553,c,0);b.ya=c;b.i=f;b.j=d}else e.bindFramebuffer(36160,b.i)}
+Zk.prototype.Nc=function(b,c,d){al(this,"precompose",d,b);zk(d,34962,this.G);var e=d.a,f=Wk.ua(),g=Xk.ua(),f=Ek(d,f,g);this.o?g=this.o:this.o=g=new Yk(e,f);Fk(d,f)&&(e.enableVertexAttribArray(g.a),e.vertexAttribPointer(g.a,2,5126,!1,16,0),e.enableVertexAttribArray(g.b),e.vertexAttribPointer(g.b,2,5126,!1,16,8),e.uniform1i(g.g,0));e.uniformMatrix4fv(g.h,!1,this.D);e.uniformMatrix4fv(g.c,!1,this.P);e.uniform1f(g.f,c.opacity);e.bindTexture(3553,this.ya);e.drawArrays(5,0,4);al(this,"postcompose",d,b)};
+function al(b,c,d,e){b=b.a;if(nb(b,c)){var f=e.viewState;S(b,new Fg(c,b,new Vk(d,f.center,f.resolution,f.rotation,e.size,e.extent),e,null,d))}}Zk.prototype.s=function(){this.i=this.ya=null;this.j=void 0};function bl(){this.a="precision mediump float;varying vec2 a;uniform sampler2D e;void main(void){gl_FragColor=texture2D(e,a);}"}M(bl,sk);aa(bl);function cl(){this.a="varying vec2 a;attribute vec2 b;attribute vec2 c;uniform vec4 d;void main(void){gl_Position=vec4(b*d.xy+d.zw,0.,1.);a=c;}"}M(cl,tk);aa(cl);function dl(b,c){this.f=b.getUniformLocation(c,"e");this.c=b.getUniformLocation(c,"d");this.a=b.getAttribLocation(c,"b");this.b=b.getAttribLocation(c,"c")};function el(b,c){Zk.call(this,b,c);this.B=bl.ua();this.S=cl.ua();this.b=null;this.w=new xk([0,0,0,1,1,0,1,1,0,1,0,0,1,1,1,0]);this.u=this.g=null;this.h=-1;this.K=[0,0]}M(el,Zk);el.prototype.J=function(){Ak(this.c.g,this.w);el.X.J.call(this)};el.prototype.l=function(b,c,d){var e=this.c;return function(f,g){return We(b,c,f,g,function(b){var c=we(e.b,b.getKey());c&&(d[f]||(d[f]={}),d[f][b.L.toString()]=b);return c})}};el.prototype.s=function(){el.X.s.call(this);this.b=null};
+el.prototype.Oc=function(b,c,d){var e=this.c,f=d.a,g=b.viewState,h=g.projection,k=this.a,l=k.V(),m=l.la(h),n=Qe(m,g.resolution),q=m.I(n),r=Xe(l,n,b.pixelRatio,h),u=r[0]/tb(Pe(m,n),this.K)[0],w=q/u,y=l.kb(h),z=g.center,D;q==g.resolution?(z=Rg(z,q,b.size),D=Zb(z,q,g.rotation,b.size)):D=b.extent;q=Me(m,D,q);if(this.g&&hd(this.g,q)&&this.h==l.f)w=this.u;else{var t=[q.ha(),q.c-q.b+1],v=Math.pow(2,Math.ceil(Math.log(Math.max(t[0]*r[0],t[1]*r[1]))/Math.LN2)),t=w*v,B=m.ka(n),E=B[0]+q.a*r[0]*w,w=B[1]+q.b*
+r[1]*w,w=[E,w,E+t,w+t];$k(this,b,v);f.viewport(0,0,v,v);f.clearColor(0,0,0,0);f.clear(16384);f.disable(3042);v=Ek(d,this.B,this.S);Fk(d,v);this.b||(this.b=new dl(f,v));zk(d,34962,this.w);f.enableVertexAttribArray(this.b.a);f.vertexAttribPointer(this.b.a,2,5126,!1,16,0);f.enableVertexAttribArray(this.b.b);f.vertexAttribPointer(this.b.b,2,5126,!1,16,8);f.uniform1i(this.b.f,0);d={};d[n]={};var C=this.l(l,h,d),G=ti(k),v=!0,E=Jb(),J=new fd(0,0,0,0),A,H,O;for(H=q.a;H<=q.f;++H)for(O=q.b;O<=q.c;++O){B=Tg(l,
+n,H,O,u,h);if(void 0!==c.extent&&(A=Je(m,B.L,E),!ac(A,c.extent)))continue;A=B.N();A=2==A||4==A||3==A&&!G;!A&&B.a&&(B=B.a);A=B.N();if(2==A){if(we(e.b,B.getKey())){d[n][B.L.toString()]=B;continue}}else if(4==A||3==A&&!G)continue;v=!1;A=Ie(m,B.L,C,J,E);A||(B=Le(m,B.L,J,E))&&C(n+1,B)}c=Object.keys(d).map(Number);c.sort(Ha);for(var C=new Float32Array(4),P,L,K,G=0,J=c.length;G<J;++G)for(P in L=d[c[G]],L)B=L[P],A=Je(m,B.L,E),H=2*(A[2]-A[0])/t,O=2*(A[3]-A[1])/t,K=2*(A[0]-w[0])/t-1,A=2*(A[1]-w[1])/t-1,yb(C,
+H,O,K,A),f.uniform4fv(this.b.c,C),fl(e,B,r,y*u),f.drawArrays(5,0,4);v?(this.g=q,this.u=w,this.h=l.f):(this.u=this.g=null,this.h=-1,b.animate=!0)}Qg(b.usedTiles,l,n,q);var fa=e.i;Sg(b,l,m,u,h,D,n,k.get("preload"),function(b){var c;(c=2!=b.N()||we(e.b,b.getKey()))||(c=b.getKey()in fa.f);c||fa.c([b,Oe(m,b.L),m.I(b.L[0]),r,y*u])},this);Ng(b,l);Pg(b,l);f=this.D;Db(f);Fb(f,(z[0]-w[0])/(w[2]-w[0]),(z[1]-w[1])/(w[3]-w[1]));0!==g.rotation&&Hb(f,g.rotation);Gb(f,b.size[0]*g.resolution/(w[2]-w[0]),b.size[1]*
+g.resolution/(w[3]-w[1]));Fb(f,-.5,-.5);return!0};function gl(b,c){Zk.call(this,b,c);this.h=!1;this.K=-1;this.B=NaN;this.u=Jb();this.g=this.b=this.w=null}M(gl,Zk);p=gl.prototype;p.Nc=function(b,c,d){this.g=c;var e=b.viewState,f=this.b;f&&!f.c()&&f.f(d,e.center,e.resolution,e.rotation,b.size,b.pixelRatio,c.opacity,c.eb?b.skippedFeatureUids:{})};p.J=function(){var b=this.b;b&&(Pk(b,this.c.g)(),this.b=null);gl.X.J.call(this)};
+p.fb=function(b,c,d,e){if(this.b&&this.g){var f=c.viewState,g=this.a,h={};return this.b.g(b,this.c.g,f.center,f.resolution,f.rotation,c.size,c.pixelRatio,this.g.opacity,{},function(b){var c=I(b).toString();if(!(c in h))return h[c]=!0,d.call(e,b,g)})}};p.Ic=function(b,c){if(this.b&&this.g){var d=c.viewState;return Uk(this.b,b,this.c.g,d.resolution,d.rotation,this.g.opacity,c.skippedFeatureUids)}return!1};p.Pc=function(){Mg(this)};
+p.Oc=function(b,c,d){function e(b){var c,d=b.c;d?c=d.call(b,m):(d=f.g)&&(c=d(b,m));if(c){if(c){d=!1;if(Array.isArray(c))for(var e=0,g=c.length;e<g;++e)d=vj(r,b,c[e],uj(m,n),this.Pc,this)||d;else d=vj(r,b,c,uj(m,n),this.Pc,this)||d;b=d}else b=!1;this.h=this.h||b}}var f=this.a;c=f.V();Og(b.attributions,c.i);Pg(b,c);var g=b.viewHints[0],h=b.viewHints[1],k=f.i,l=f.j;if(!this.h&&!k&&g||!l&&h)return!0;var h=b.extent,k=b.viewState,g=k.projection,m=k.resolution,n=b.pixelRatio,k=f.f,q=f.a,l=f.get("renderOrder");
+void 0===l&&(l=tj);h=Lb(h,q*m);if(!this.h&&this.B==m&&this.K==k&&this.w==l&&Nb(this.u,h))return!0;this.b&&b.postRenderFunctions.push(Pk(this.b,d));this.h=!1;var r=new Ok(.5*m/n,h,f.a);Zj(c,h,m,g);if(l){var u=[];Xj(c,h,function(b){u.push(b)},this);u.sort(l);u.forEach(e,this)}else Xj(c,h,e,this);Qk(r,d);this.B=m;this.K=k;this.w=l;this.u=h;this.b=r;return!0};function hl(b,c){Zg.call(this,0,c);this.a=document.createElement("CANVAS");this.a.style.width="100%";this.a.style.height="100%";this.a.className="ol-unselectable";fe(b,this.a,0);this.s=this.u=0;this.H=rf();this.j=!0;this.c=xf(this.a,{antialias:!0,depth:!1,failIfMajorPerformanceCaveat:!0,preserveDrawingBuffer:!1,stencil:!0});this.g=new yk(this.a,this.c);Q(this.a,"webglcontextlost",this.ne,this);Q(this.a,"webglcontextrestored",this.oe,this);this.b=new ve;this.o=null;this.i=new dh(function(b){var c=
+b[1];b=b[2];var f=c[0]-this.o[0],c=c[1]-this.o[1];return 65536*Math.log(b)+Math.sqrt(f*f+c*c)/b}.bind(this),function(b){return b[0].getKey()});this.w=function(){if(0!==this.i.a.length){hh(this.i);var b=eh(this.i);fl(this,b[0],b[3],b[4])}return!1}.bind(this);this.l=0;il(this)}M(hl,Zg);
+function fl(b,c,d,e){var f=b.c,g=c.getKey();if(we(b.b,g))b=b.b.get(g),f.bindTexture(3553,b.ya),9729!=b.Cc&&(f.texParameteri(3553,10240,9729),b.Cc=9729),9729!=b.Dc&&(f.texParameteri(3553,10240,9729),b.Dc=9729);else{var h=f.createTexture();f.bindTexture(3553,h);if(0<e){var k=b.H.canvas,l=b.H;b.u!==d[0]||b.s!==d[1]?(k.width=d[0],k.height=d[1],b.u=d[0],b.s=d[1]):l.clearRect(0,0,d[0],d[1]);l.drawImage(c.T(),e,e,d[0],d[1],0,0,d[0],d[1]);f.texImage2D(3553,0,6408,6408,5121,k)}else f.texImage2D(3553,0,6408,
+6408,5121,c.T());f.texParameteri(3553,10240,9729);f.texParameteri(3553,10241,9729);f.texParameteri(3553,10242,33071);f.texParameteri(3553,10243,33071);b.b.set(g,{ya:h,Cc:9729,Dc:9729})}}p=hl.prototype;p.Jb=function(b){return b instanceof X?new el(this,b):b instanceof Y?new gl(this,b):null};function jl(b,c,d){var e=b.h;if(nb(e,c)){b=b.g;var f=d.viewState;S(e,new Fg(c,e,new Vk(b,f.center,f.resolution,f.rotation,d.size,d.extent),d,null,b))}}
+p.J=function(){var b=this.c;b.isContextLost()||xe(this.b,function(c){c&&b.deleteTexture(c.ya)});jb(this.g);hl.X.J.call(this)};p.md=function(b,c){for(var d=this.c,e;1024<this.b.f-this.l;){if(e=this.b.a.Ia)d.deleteTexture(e.ya);else if(+this.b.a.Rb==c.index)break;else--this.l;this.b.pop()}};p.U=function(){return"webgl"};p.ne=function(b){b.preventDefault();this.b.clear();this.l=0;b=this.f;for(var c in b)b[c].s()};p.oe=function(){il(this);this.h.render()};
+function il(b){b=b.c;b.activeTexture(33984);b.blendFuncSeparate(770,771,1,771);b.disable(2884);b.disable(2929);b.disable(3089);b.disable(2960)}
+p.sb=function(b){var c=this.g,d=this.c;if(d.isContextLost())return!1;if(!b)return this.j&&(oe(this.a,!1),this.j=!1),!1;this.o=b.focus;this.b.set((-b.index).toString(),null);++this.l;jl(this,"precompose",b);var e=[],f=b.layerStatesArray;Na(f);var g=b.viewState.resolution,h,k,l,m;h=0;for(k=f.length;h<k;++h)m=f[h],Hg(m,g)&&"ready"==m.$b&&(l=bh(this,m.layer),l.Oc(b,m,c)&&e.push(m));f=b.size[0]*b.pixelRatio;g=b.size[1]*b.pixelRatio;if(this.a.width!=f||this.a.height!=g)this.a.width=f,this.a.height=g;d.bindFramebuffer(36160,
+null);d.clearColor(0,0,0,0);d.clear(16384);d.enable(3042);d.viewport(0,0,this.a.width,this.a.height);h=0;for(k=e.length;h<k;++h)m=e[h],l=bh(this,m.layer),l.Nc(b,m,c);this.j||(oe(this.a,!0),this.j=!0);$g(b);1024<this.b.f-this.l&&b.postRenderFunctions.push(this.md.bind(this));0!==this.i.a.length&&(b.postRenderFunctions.push(this.w),b.animate=!0);jl(this,"postcompose",b);ch(this,b);b.postRenderFunctions.push(ah)};
+p.Wb=function(b,c,d,e,f,g){var h;if(this.c.isContextLost())return!1;var k=c.viewState,l=c.layerStatesArray,m;for(m=l.length-1;0<=m;--m){h=l[m];var n=h.layer;if(Hg(h,k.resolution)&&f.call(g,n)&&(h=bh(this,n).fb(b,c,d,e)))return h}};p.Jc=function(b,c,d,e){var f=!1;if(this.c.isContextLost())return!1;var g=c.viewState,h=c.layerStatesArray,k;for(k=h.length-1;0<=k;--k){var l=h[k],m=l.layer;if(Hg(l,g.resolution)&&d.call(e,m)&&(f=bh(this,m).Ic(b,c)))return!0}return f};var kl=["canvas","webgl","dom"];
+function Z(b){T.call(this);var c=ll(b);this.Ja=void 0!==b.loadTilesWhileAnimating?b.loadTilesWhileAnimating:!1;this.wb=void 0!==b.loadTilesWhileInteracting?b.loadTilesWhileInteracting:!1;this.yb=void 0!==b.pixelRatio?b.pixelRatio:Df;this.xb=c.logos;this.pa=function(){this.h=void 0;this.Ce.call(this,Date.now())}.bind(this);this.Aa=zb();this.zb=zb();this.Ba=0;this.b=null;this.ea=Jb();this.u=this.G=null;this.a=document.createElement("DIV");this.a.className="ol-viewport"+(Gf?" ol-touch":"");this.a.style.position=
+"relative";this.a.style.overflow="hidden";this.a.style.width="100%";this.a.style.height="100%";this.a.style.msTouchAction="none";this.a.style.touchAction="none";this.o=document.createElement("DIV");this.o.className="ol-overlaycontainer";this.a.appendChild(this.o);this.j=document.createElement("DIV");this.j.className="ol-overlaycontainer-stopevent";b=["click","dblclick","mousedown","touchstart","mspointerdown",yg,"mousewheel","wheel"];for(var d=0,e=b.length;d<e;++d)Q(this.j,b[d],kb);this.a.appendChild(this.j);
+this.Y=new qg(this);for(var f in Bg)Q(this.Y,Bg[f],this.yc,this);this.S=c.keyboardEventTarget;this.i=null;Q(this.a,"wheel",this.Oa,this);Q(this.a,"mousewheel",this.Oa,this);this.s=c.controls;this.g=c.interactions;this.w=c.overlays;this.Tc={};this.D=new c.De(this.a,this);this.P=null;this.B=[];this.aa=[];this.na=new ih(this.vd.bind(this),this.Qd.bind(this));this.Ab={};Q(this,rb("layergroup"),this.Ad,this);Q(this,rb("view"),this.Rd,this);Q(this,rb("size"),this.Nd,this);Q(this,rb("target"),this.Pd,this);
+this.l(c.values);nd(this.s,function(b){b.setMap(this)},this);Q(this.s,"add",function(b){b.element.setMap(this)},this);Q(this.s,"remove",function(b){b.element.setMap(null)},this);nd(this.g,function(b){b.setMap(this)},this);Q(this.g,"add",function(b){b.element.setMap(this)},this);Q(this.g,"remove",function(b){b.element.setMap(null)},this);nd(this.w,this.gc,this);Q(this.w,"add",function(b){this.gc(b.element)},this);Q(this.w,"remove",function(b){var c=b.element.La();void 0!==c&&delete this.Tc[c.toString()];
+b.element.setMap(null)},this)}M(Z,T);p=Z.prototype;p.hd=function(b){this.s.push(b)};p.jd=function(b){this.g.push(b)};p.kd=function(b){ml(this).get("layers").push(b)};p.ld=function(b){this.w.push(b)};p.gc=function(b){var c=b.La();void 0!==c&&(this.Tc[c.toString()]=b);b.setMap(this)};p.fa=function(b){this.render();Array.prototype.push.apply(this.B,arguments)};
+p.J=function(){jb(this.Y);jb(this.D);gb(this.a,"wheel",this.Oa,this);gb(this.a,"mousewheel",this.Oa,this);void 0!==this.c&&(x.removeEventListener("resize",this.c,!1),this.c=void 0);this.h&&(x.cancelAnimationFrame(this.h),this.h=void 0);this.set("target",null);Z.X.J.call(this)};p.pd=function(b,c,d,e,f){if(this.b)return b=this.ta(b),this.D.Wb(b,this.b,c,void 0!==d?d:null,void 0!==e?e:cc,void 0!==f?f:null)};
+p.Td=function(b,c,d){if(!this.b)return!1;b=this.ta(b);return this.D.Jc(b,this.b,void 0!==c?c:cc,void 0!==d?d:null)};p.vc=function(b){var c=this.a.getBoundingClientRect();b=b.changedTouches?b.changedTouches[0]:b;return[b.clientX-c.left,b.clientY-c.top]};p.Tb=function(){return this.get("target")};p.Na=function(){var b=this.Tb();return void 0!==b?Zd(b):null};p.ta=function(b){var c=this.b;return c?(b=b.slice(),Kg(c.pixelToCoordinateMatrix,b,b)):null};function ml(b){return b.get("layergroup")}
+function Eh(b,c){var d=b.b;if(d){var e=c.slice(0,2);return Kg(d.coordinateToPixelMatrix,e,e)}return null}p.Pa=function(){return this.get("size")};p.O=function(){return this.get("view")};p.vd=function(b,c,d,e){var f=this.b;if(!(f&&c in f.wantedTiles&&f.wantedTiles[c][b.L.toString()]))return Infinity;b=d[0]-f.focus[0];d=d[1]-f.focus[1];return 65536*Math.log(e)+Math.sqrt(b*b+d*d)/e};p.Oa=function(b,c){var d=new og(c||b.type,this,b);this.yc(d)};
 p.yc=function(b){if(this.b){this.P=b.coordinate;b.frameState=this.b;var c=this.g.a,d;if(!1!==S(this,b))for(d=c.length-1;0<=d;d--){var e=c[d];if(e.get("active")&&!e.handleEvent(b))break}}};
-p.Ld=function(){var b=this.b,c=this.na;if(0!==c.a.length){var d=16,e=d;if(b){var f=b.viewHints;f[0]&&(d=this.Ja?8:0,e=2);f[1]&&(d=this.vb?8:0,e=2)}if(c.h<d){bh(c);for(var f=0,g,h;c.h<d&&f<e&&0<c.a.length;)g=Zg(c)[0],h=g.getKey(),0!==g.N()||h in c.g||(c.g[h]=!0,++c.h,++f,g.load())}}c=this.aa;d=0;for(e=c.length;d<e;++d)c[d](this,b);c.length=0};p.Md=function(){this.render()};
-p.Od=function(){var b;this.Sb()&&(b=this.ab());if(this.i){for(var c=0,d=this.i.length;c<d;++c)N(this.i[c]);this.i=null}b?(b.appendChild(this.a),b=this.S?this.S:b,this.i=[Q(b,"keydown",this.Na,this),Q(b,"keypress",this.Na,this)],this.c||(this.c=this.$b.bind(this),x.addEventListener("resize",this.c,!1))):(ge(this.a),void 0!==this.c&&(x.removeEventListener("resize",this.c,!1),this.c=void 0));this.$b()};p.Pd=function(){this.render()};p.Rd=function(){this.render()};
-p.Qd=function(){this.D&&(N(this.D),this.D=null);var b=this.O();b&&(this.D=Q(b,"propertychange",this.Rd,this));this.render()};p.Ad=function(){this.render()};p.Bd=function(){this.render()};p.zd=function(){this.s&&(this.s.forEach(N),this.s=null);var b=gl(this);b&&(this.s=[Q(b,"propertychange",this.Bd,this),Q(b,"change",this.Ad,this)]);this.render()};p.render=function(){void 0===this.h&&(this.h=x.requestAnimationFrame(this.pa))};p.ye=function(b){return this.g.remove(b)};p.ze=function(b){return gl(this).get("layers").remove(b)};
-p.Be=function(b){var c,d,e,f=this.Oa(),g=this.O(),h=null;if(c=void 0!==f&&0<f[0]&&0<f[1]&&g)c=!!g.ia()&&void 0!==g.I();if(c){var h=g.g.slice(),k=gl(this).Kb(),l={};c=0;for(d=k.length;c<d;++c)l[I(k[c].layer)]=k[c];e=g.N();h={animate:!1,attributions:{},coordinateToPixelMatrix:this.Aa,extent:null,focus:this.P?this.P:e.center,index:this.Ba++,layerStates:l,layerStatesArray:k,logos:Wa({},this.wb),pixelRatio:this.xb,pixelToCoordinateMatrix:this.yb,postRenderFunctions:[],size:f,skippedFeatureUids:this.zb,
-tileQueue:this.na,time:b,usedTiles:{},viewState:e,viewHints:h,wantedTiles:{}}}if(h){b=this.w;c=f=0;for(d=b.length;c<d;++c)g=b[c],g(this,h)&&(b[f++]=g);b.length=f;h.extent=Zb(e.center,e.resolution,e.rotation,h.size)}this.b=h;this.B.sb(h);h&&(h.animate&&this.render(),Array.prototype.push.apply(this.aa,h.postRenderFunctions),0!==this.w.length||h.viewHints[0]||h.viewHints[1]||Rb(h.extent,this.ea)||(S(this,new se("moveend",this,h)),Mb(h.extent,this.ea)));S(this,new se("postrender",this,h));c=e=this.Ld;
-this&&(c=ma(e,this));!ga(x.setImmediate)||x.Window&&x.Window.prototype&&!W("Edge")&&x.Window.prototype.setImmediate==x.setImmediate?(ef||(ef=ff()),ef(c)):x.setImmediate(c)};
-p.$b=function(){var b=this.ab();if(b){var c=Yd(b),d=Gd&&b.currentStyle,e;if(e=d)Wd(c),e=!0;if(e&&"auto"!=d.width&&"auto"!=d.height&&!d.boxSizing)c=oe(b,d.width,"width","pixelWidth"),b=oe(b,d.height,"height","pixelHeight"),b=new Vd(c,b);else{d=new Vd(b.offsetWidth,b.offsetHeight);if(Gd){c=pe(b,"paddingLeft");e=pe(b,"paddingRight");var f=pe(b,"paddingTop"),g=pe(b,"paddingBottom"),c=new ie(f,e,g,c)}else c=je(b,"paddingLeft"),e=je(b,"paddingRight"),f=je(b,"paddingTop"),g=je(b,"paddingBottom"),c=new ie(parseFloat(f),
-parseFloat(e),parseFloat(g),parseFloat(c));!Gd||9<=Number(Sd)?(e=je(b,"borderLeftWidth"),f=je(b,"borderRightWidth"),g=je(b,"borderTopWidth"),b=je(b,"borderBottomWidth"),b=new ie(parseFloat(g),parseFloat(f),parseFloat(b),parseFloat(e))):(e=re(b,"borderLeft"),f=re(b,"borderRight"),g=re(b,"borderTop"),b=re(b,"borderBottom"),b=new ie(g,f,b,e));b=new Vd(d.width-b.left-c.left-c.right-b.right,d.height-b.top-c.top-c.bottom-b.bottom)}this.set("size",[b.width,b.height])}else this.set("size",void 0)};
-function fl(b){var c=null;void 0!==b.keyboardEventTarget&&(c="string"===typeof b.keyboardEventTarget?document.getElementById(b.keyboardEventTarget):b.keyboardEventTarget);var d={},e={};if(void 0===b.logo||"boolean"===typeof b.logo&&b.logo)e["data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAMAAABEpIrGAAAAA3NCSVQICAjb4U/gAAAACXBIWXMAAAHGAAABxgEXwfpGAAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAAhNQTFRF////AP//AICAgP//AFVVQECA////K1VVSbbbYL/fJ05idsTYJFtbbcjbJllmZszWWMTOIFhoHlNiZszTa9DdUcHNHlNlV8XRIVdiasrUHlZjIVZjaMnVH1RlIFRkH1RkH1ZlasvYasvXVsPQH1VkacnVa8vWIVZjIFRjVMPQa8rXIVVkXsXRsNveIFVkIFZlIVVj3eDeh6GmbMvXH1ZkIFRka8rWbMvXIFVkIFVjIFVkbMvWH1VjbMvWIFVlbcvWIFVla8vVIFVkbMvWbMvVH1VkbMvWIFVlbcvWIFVkbcvVbMvWjNPbIFVkU8LPwMzNIFVkbczWIFVkbsvWbMvXIFVkRnB8bcvW2+TkW8XRIFVkIlZlJVloJlpoKlxrLl9tMmJwOWd0Omh1RXF8TneCT3iDUHiDU8LPVMLPVcLPVcPQVsPPVsPQV8PQWMTQWsTQW8TQXMXSXsXRX4SNX8bSYMfTYcfTYsfTY8jUZcfSZsnUaIqTacrVasrVa8jTa8rWbI2VbMvWbcvWdJObdcvUdszUd8vVeJaee87Yfc3WgJyjhqGnitDYjaarldPZnrK2oNbborW5o9bbo9fbpLa6q9ndrL3ArtndscDDutzfu8fJwN7gwt7gxc/QyuHhy+HizeHi0NfX0+Pj19zb1+Tj2uXk29/e3uLg3+Lh3+bl4uXj4ufl4+fl5Ofl5ufl5ujm5+jmySDnBAAAAFp0Uk5TAAECAgMEBAYHCA0NDg4UGRogIiMmKSssLzU7PkJJT1JTVFliY2hrdHZ3foSFhYeJjY2QkpugqbG1tre5w8zQ09XY3uXn6+zx8vT09vf4+Pj5+fr6/P39/f3+gz7SsAAAAVVJREFUOMtjYKA7EBDnwCPLrObS1BRiLoJLnte6CQy8FLHLCzs2QUG4FjZ5GbcmBDDjxJBXDWxCBrb8aM4zbkIDzpLYnAcE9VXlJSWlZRU13koIeW57mGx5XjoMZEUqwxWYQaQbSzLSkYGfKFSe0QMsX5WbjgY0YS4MBplemI4BdGBW+DQ11eZiymfqQuXZIjqwyadPNoSZ4L+0FVM6e+oGI6g8a9iKNT3o8kVzNkzRg5lgl7p4wyRUL9Yt2jAxVh6mQCogae6GmflI8p0r13VFWTHBQ0rWPW7ahgWVcPm+9cuLoyy4kCJDzCm6d8PSFoh0zvQNC5OjDJhQopPPJqph1doJBUD5tnkbZiUEqaCnB3bTqLTFG1bPn71kw4b+GFdpLElKIzRxxgYgWNYc5SCENVHKeUaltHdXx0dZ8uBI1hJ2UUDgq82CM2MwKeibqAvSO7MCABq0wXEPiqWEAAAAAElFTkSuQmCC"]=
-"http://openlayers.org/";else{var f=b.logo;"string"===typeof f?e[f]="":ha(f)&&(e[f.src]=f.href)}f=b.layers instanceof ai?b.layers:new ai({layers:b.layers});d.layergroup=f;d.target=b.target;d.view=void 0!==b.view?b.view:new V;var f=Tg,g;void 0!==b.renderer?Array.isArray(b.renderer)?g=b.renderer:"string"===typeof b.renderer&&(g=[b.renderer]):g=el;var h,k;h=0;for(k=g.length;h<k;++h){var l=g[h];if("canvas"==l){if(zf){f=ck;break}}else if("dom"==l){f=jk;break}else if("webgl"==l&&sf){f=bl;break}}var m;void 0!==
-b.controls?m=Array.isArray(b.controls)?new ld(b.controls.slice()):b.controls:m=df();if(void 0!==b.interactions)g=Array.isArray(b.interactions)?new ld(b.interactions.slice()):b.interactions;else{g={};h=new ld;k=new dh;(void 0!==g.altShiftDragRotate?g.altShiftDragRotate:1)&&h.push(new zh);(void 0!==g.doubleClickZoom?g.doubleClickZoom:1)&&h.push(new jh({delta:g.zoomDelta,duration:g.zoomDuration}));(void 0!==g.dragPan?g.dragPan:1)&&h.push(new uh({kinetic:k}));(void 0!==g.pinchRotate?g.pinchRotate:1)&&
-h.push(new Th);(void 0!==g.pinchZoom?g.pinchZoom:1)&&h.push(new Xh({duration:g.zoomDuration}));if(void 0!==g.keyboard?g.keyboard:1)h.push(new Nh),h.push(new Ph({delta:g.zoomDelta,duration:g.zoomDuration}));(void 0!==g.mouseWheelZoom?g.mouseWheelZoom:1)&&h.push(new Rh({duration:g.zoomDuration}));(void 0!==g.shiftDragZoom?g.shiftDragZoom:1)&&h.push(new Mh({duration:g.zoomDuration}));g=h}b=void 0!==b.overlays?Array.isArray(b.overlays)?new ld(b.overlays.slice()):b.overlays:new ld;return{controls:m,interactions:g,
-keyboardEventTarget:c,logos:e,overlays:b,Ce:f,values:d}}mc(fi);mc(mi);mi.forEach(function(b){fi.forEach(function(c){nc(b,c,gi);nc(c,b,hi)})});function hl(b){T.call(this);this.j=b.id;this.i=void 0!==b.insertFirst?b.insertFirst:!0;this.o=void 0!==b.stopEvent?b.stopEvent:!0;this.b=document.createElement("DIV");this.b.className="ol-overlay-container";this.b.style.position="absolute";this.autoPan=void 0!==b.autoPan?b.autoPan:!1;this.g=void 0!==b.autoPanAnimation?b.autoPanAnimation:{};this.h=void 0!==b.autoPanMargin?b.autoPanMargin:20;this.a={hb:"",pb:"",tb:"",ub:"",visible:!0};this.c=null;Q(this,rb("element"),this.xd,this);Q(this,rb("map"),
-this.Gd,this);Q(this,rb("offset"),this.Hd,this);Q(this,rb("position"),this.Jd,this);Q(this,rb("positioning"),this.Kd,this);void 0!==b.element&&this.set("element",b.element);this.set("offset",void 0!==b.offset?b.offset:[0,0]);this.set("positioning",void 0!==b.positioning?b.positioning:"top-left");void 0!==b.position&&this.Ec(b.position)}M(hl,T);p=hl.prototype;p.La=function(){return this.j};p.xd=function(){ee(this.b);var b=this.get("element");b&&this.b.appendChild(b)};
-p.Gd=function(){this.c&&(ge(this.b),N(this.c),this.c=null);var b=this.get("map");b&&(this.c=Q(b,"postrender",this.render,this),il(this),b=this.o?b.j:b.o,this.i?fe(b,this.b,0):b.appendChild(this.b))};p.render=function(){il(this)};p.Hd=function(){il(this)};
-p.Jd=function(){il(this);if(void 0!==this.get("position")&&this.autoPan){var b=this.get("map");if(void 0!==b&&b.ab()){var c=jl(b.ab(),b.Oa()),d=this.get("element"),e=d.offsetWidth,f=d.currentStyle||x.getComputedStyle(d),e=e+(parseInt(f.marginLeft,10)+parseInt(f.marginRight,10)),f=d.offsetHeight,g=d.currentStyle||x.getComputedStyle(d),f=f+(parseInt(g.marginTop,10)+parseInt(g.marginBottom,10)),h=jl(d,[e,f]),d=this.h;Nb(c,h)||(e=h[0]-c[0],f=c[2]-h[2],g=h[1]-c[1],h=c[3]-h[3],c=[0,0],0>e?c[0]=e-d:0>f&&
-(c[0]=Math.abs(f)+d),0>g?c[1]=g-d:0>h&&(c[1]=Math.abs(h)+d),0===c[0]&&0===c[1])||(d=b.O().ia(),e=yh(b,d),c=[e[0]+c[0],e[1]+c[1]],this.g&&(this.g.source=d,b.fa(cd(this.g))),b.O().oa(b.ta(c)))}}};p.Kd=function(){il(this)};p.setMap=function(b){this.set("map",b)};p.Ec=function(b){this.set("position",b)};
-function jl(b,c){var d=Yd(b),e=new Ud(0,0),f;f=d?Yd(d):document;var g;(g=!Gd||9<=Number(Sd))||(Wd(f),g=!0);b!=(g?f.documentElement:f.body)&&(f=ke(b),g=Wd(d).a,d=g.scrollingElement?g.scrollingElement:Jd?g.body||g.documentElement:g.documentElement,g=g.parentWindow||g.defaultView,d=Gd&&Qd("10")&&g.pageYOffset!=d.scrollTop?new Ud(d.scrollLeft,d.scrollTop):new Ud(g.pageXOffset||d.scrollLeft,g.pageYOffset||d.scrollTop),e.x=f.left+d.x,e.y=f.top+d.y);return[e.x,e.y,e.x+c[0],e.y+c[1]]}
-function kl(b,c){b.a.visible!==c&&(ne(b.b,c),b.a.visible=c)}
-function il(b){var c=b.get("map"),d=b.get("position");if(void 0!==c&&c.b&&void 0!==d){var d=yh(c,d),e=c.Oa(),c=b.b.style,f=b.get("offset"),g=b.get("positioning"),h=f[0],f=f[1];if("bottom-right"==g||"center-right"==g||"top-right"==g)""!==b.a.pb&&(b.a.pb=c.left=""),h=Math.round(e[0]-d[0]-h)+"px",b.a.tb!=h&&(b.a.tb=c.right=h);else{""!==b.a.tb&&(b.a.tb=c.right="");if("bottom-center"==g||"center-center"==g||"top-center"==g)h-=le(b.b).width/2;h=Math.round(d[0]+h)+"px";b.a.pb!=h&&(b.a.pb=c.left=h)}if("bottom-left"==
-g||"bottom-center"==g||"bottom-right"==g)""!==b.a.ub&&(b.a.ub=c.top=""),d=Math.round(e[1]-d[1]-f)+"px",b.a.hb!=d&&(b.a.hb=c.bottom=d);else{""!==b.a.hb&&(b.a.hb=c.bottom="");if("center-left"==g||"center-center"==g||"center-right"==g)f-=le(b.b).height/2;d=Math.round(d[1]+f)+"px";b.a.ub!=d&&(b.a.ub=c.top=d)}kl(b,!0)}else kl(b,!1)};function ll(){this.defaultDataProjection=null}function ml(b,c,d){var e;d&&(e={dataProjection:d.dataProjection?d.dataProjection:b.f(Cj(c)),featureProjection:d.featureProjection});var f;e&&(f={featureProjection:e.featureProjection,dataProjection:e.dataProjection?e.dataProjection:b.defaultDataProjection,rightHanded:e.rightHanded},e.decimals&&(f.decimals=e.decimals));return f}
-function nl(b,c){var d=c?lc(c.featureProjection):null,e=c?lc(c.dataProjection):null;if(d&&e&&!wc(d,e))if(b instanceof zc)d=b.o(e,d);else{e=xc(e,d);d=[b[0],b[1],b[0],b[3],b[2],b[1],b[2],b[3]];e(d,d,2);var f=[d[0],d[2],d[4],d[6]],g=[d[1],d[3],d[5],d[7]],d=Math.min.apply(null,f),e=Math.min.apply(null,g),f=Math.max.apply(null,f),g=Math.max.apply(null,g),d=Ob(d,e,f,g,void 0)}else d=b;return d};function pl(){this.defaultDataProjection=null}M(pl,ll);function Cj(b){return ha(b)?b:"string"===typeof b?(b=JSON.parse(b))?b:null:null}pl.prototype.U=function(){return"json"};pl.prototype.g=function(b,c){return this.a(Cj(b),ml(this,b,c))};pl.prototype.b=function(b,c){return this.h(Cj(b),ml(this,b,c))};function ql(b,c,d,e,f){var g=NaN,h=NaN,k=(d-c)/e;if(0!==k)if(1==k)g=b[c],h=b[c+1];else if(2==k)g=.5*b[c]+.5*b[c+e],h=.5*b[c+1]+.5*b[c+e+1];else{var h=b[c],k=b[c+1],l=0,g=[0],m;for(m=c+e;m<d;m+=e){var n=b[m],q=b[m+1],l=l+Math.sqrt((n-h)*(n-h)+(q-k)*(q-k));g.push(l);h=n;k=q}d=.5*l;l=0;m=g.length;for(n=!1;l<m;)h=l+(m-l>>1),k=+Ha(g[h],d),0>k?l=h+1:(m=h,n=!k);h=n?l:~l;0>h?(d=(d-g[-h-2])/(g[-h-1]-g[-h-2]),c+=(-h-2)*e,g=b[c],g=g+d*(b[c+e]-g),h=b[c+1],h=h+d*(b[c+e+1]-h)):(g=b[c+h*e],h=b[c+h*e+1])}return f?
-(f[0]=g,f[1]=h,f):[g,h]};function rl(b,c){Bc.call(this);this.c=null;this.j=-1;this.W(b,c)}M(rl,Bc);p=rl.prototype;p.clone=function(){var b=new rl(null);U(b,this.g,this.a.slice());b.v();return b};p.ra=function(){return Hc(this.a,0,this.a.length,this.b)};function Ni(b){if(b.j!=b.f){var c;c=ql(b.a,0,b.a.length,b.b,b.c);b.c=c;b.j=b.f}return b.c}p.Ma=function(b){var c=[];c.length=Jc(this.a,0,this.a.length,this.b,b,c,0);b=new rl(null);U(b,"XY",c);b.v();return b};p.U=function(){return"LineString"};
-p.W=function(b,c){b?(Dc(this,c,b,1),this.a||(this.a=[]),this.a.length=Fc(this.a,0,b,this.b)):U(this,"XY",null);this.v()};function sl(b,c){Bc.call(this);this.c=[];this.W(b,c)}M(sl,Bc);p=sl.prototype;p.clone=function(){var b=new sl(null),c=this.c.slice();U(b,this.g,this.a.slice());b.c=c;b.v();return b};p.ra=function(){return Ic(this.a,0,this.c,this.b)};p.$a=function(){return this.c};function Oi(b){var c=[],d=b.a,e=0,f=b.c;b=b.b;var g,h;g=0;for(h=f.length;g<h;++g){var k=f[g],e=ql(d,e,k,b);Ka(c,e);e=k}return c}
-p.Ma=function(b){var c=[],d=[],e=this.a,f=this.c,g=this.b,h=0,k=0,l,m;l=0;for(m=f.length;l<m;++l){var n=f[l],k=Jc(e,h,n,g,b,c,k);d.push(k);h=n}c.length=k;b=new sl(null);U(b,"XY",c);b.c=d;b.v();return b};p.U=function(){return"MultiLineString"};p.W=function(b,c){if(b){Dc(this,c,b,2);this.a||(this.a=[]);var d=Gc(this.a,0,b,this.b,this.c);this.a.length=0===d.length?0:d[d.length-1]}else d=this.c,U(this,"XY",null),this.c=d;this.v()};function tl(b,c){Bc.call(this);this.W(b,c)}M(tl,Bc);tl.prototype.clone=function(){var b=new tl(null);U(b,this.g,this.a.slice());b.v();return b};tl.prototype.ra=function(){return Hc(this.a,0,this.a.length,this.b)};tl.prototype.U=function(){return"MultiPoint"};tl.prototype.W=function(b,c){b?(Dc(this,c,b,1),this.a||(this.a=[]),this.a.length=Fc(this.a,0,b,this.b)):U(this,"XY",null);this.v()};function ul(b,c){Bc.call(this);this.c=[];this.B=-1;this.D=null;this.G=-1;this.j=null;this.W(b,c)}M(ul,Bc);p=ul.prototype;p.clone=function(){for(var b=new ul(null),c=this.c.length,d=Array(c),e=0;e<c;++e)d[e]=this.c[e].slice();U(b,this.g,this.a.slice());b.c=d;b.v();return b};p.ra=function(b){var c;void 0!==b?(c=Pi(this).slice(),Sc(c,this.c,this.b,b)):c=this.a;b=c;c=this.c;var d=this.b,e=0,f=[],g=0,h,k;h=0;for(k=c.length;h<k;++h){var l=c[h];f[g++]=Ic(b,e,l,d,f[g]);e=l[l.length-1]}f.length=g;return f};
-function Qi(b){if(b.B!=b.f){var c=b.a,d=b.c,e=b.b,f=0,g=[],h,k,l=Jb();h=0;for(k=d.length;h<k;++h){var m=d[h],l=c,n=m[0],q=e,r=Pb(void 0),l=Tb(r,l,f,n,q);g.push((l[0]+l[2])/2,(l[1]+l[3])/2);f=m[m.length-1]}c=Pi(b);d=b.c;e=b.b;h=0;k=[];m=0;for(l=d.length;m<l;++m)f=d[m],k=Oc(c,h,f,e,g,2*m,k),h=f[f.length-1];b.D=k;b.B=b.f}return b.D}
-function Pi(b){if(b.G!=b.f){var c=b.a,d;a:{d=b.c;var e,f;e=0;for(f=d.length;e<f;++e)if(!Qc(c,d[e],b.b,void 0)){d=!1;break a}d=!0}d?b.j=c:(b.j=c.slice(),b.j.length=Sc(b.j,b.c,b.b));b.G=b.f}return b.j}p.Ma=function(b){var c=[],d=[],e=this.a,f=this.c,g=this.b;b=Math.sqrt(b);var h=0,k=0,l,m;l=0;for(m=f.length;l<m;++l){var n=f[l],q=[],k=Kc(e,h,n,g,b,c,k,q);d.push(q);h=n[n.length-1]}c.length=k;e=new ul(null);U(e,"XY",c);e.c=d;e.v();return e};p.U=function(){return"MultiPolygon"};
-p.W=function(b,c){if(b){Dc(this,c,b,3);this.a||(this.a=[]);var d=this.a,e=this.b,f=this.c,g=0,f=f?f:[],h=0,k,l;k=0;for(l=b.length;k<l;++k)g=Gc(d,g,b[k],e,f[h]),f[h++]=g,g=g[g.length-1];f.length=h;0===f.length?this.a.length=0:(d=f[f.length-1],this.a.length=0===d.length?0:d[d.length-1])}else d=this.c,U(this,"XY",null),this.c=d;this.v()};function vl(b){b=b?b:{};this.defaultDataProjection=null;this.c=b.geometryName}M(vl,pl);function wl(b){var c="XY";!0===b.hasZ&&!0===b.hasM?c="XYZM":!0===b.hasZ?c="XYZ":!0===b.hasM&&(c="XYM");return c}
-var xl={Point:function(b){return void 0!==b.m&&void 0!==b.z?new Mc([b.x,b.y,b.z,b.m],"XYZM"):void 0!==b.z?new Mc([b.x,b.y,b.z],"XYZ"):void 0!==b.m?new Mc([b.x,b.y,b.m],"XYM"):new Mc([b.x,b.y])},LineString:function(b){return new rl(b.paths[0],wl(b))},Polygon:function(b){return new Tc(b.rings,wl(b))},MultiPoint:function(b){return new tl(b.points,wl(b))},MultiLineString:function(b){return new sl(b.paths,wl(b))},MultiPolygon:function(b){return new ul(b.rings,wl(b))}};
-vl.prototype.a=function(b,c){var d;if(d=b.geometry){var e;if(ea(d.x)&&ea(d.y))e="Point";else if(d.points)e="MultiPoint";else if(d.paths)e=1===d.paths.length?"LineString":"MultiLineString";else if(d.rings){var f=d.rings,g=wl(d),h=[];e=[];var k,l;k=0;for(l=f.length;k<l;++k){var m=Ja(f[k]);Pc(m,0,m.length,g.length)?h.push([f[k]]):e.push(f[k])}for(;e.length;){f=e.shift();g=!1;for(k=h.length-1;0<=k;k--)if(Nb((new Lc(h[k][0])).C(),(new Lc(f)).C())){h[k].push(f);g=!0;break}g||h.push([f.reverse()])}d=Wa({},
-d);1===h.length?(e="Polygon",d.rings=h[0]):(e="MultiPolygon",d.rings=h)}d=nl((0,xl[e])(d),c)}else d=null;h=new xj;this.c&&zj(h,this.c);yj(h,d);c&&c.Pb&&b.attributes[c.Pb]&&(h.g=b.attributes[c.Pb],h.v());b.attributes&&h.l(b.attributes);return h};vl.prototype.h=function(b,c){var d=c?c:{};if(b.features){var e=[],f=b.features,g,h;d.Pb=b.objectIdFieldName;g=0;for(h=f.length;g<h;++g)e.push(this.a(f[g],d));return e}return[this.a(b,d)]};
-vl.prototype.f=function(b){return b.spatialReference&&b.spatialReference.wkid?lc("EPSG:"+b.spatialReference.wkid):null};function yl(b){zc.call(this);this.a=b?b:null;zl(this)}M(yl,zc);function Al(b){var c,d;if(b.a)for(c=0,d=b.a.length;c<d;++c)gb(b.a[c],"change",b.v,b)}function zl(b){var c,d;if(b.a)for(c=0,d=b.a.length;c<d;++c)Q(b.a[c],"change",b.v,b)}p=yl.prototype;p.clone=function(){var b=new yl(null),c=this.a,d=[],e,f;e=0;for(f=c.length;e<f;++e)d.push(c[e].clone());Al(b);b.a=d;zl(b);b.v();return b};p.ib=function(b){Pb(b);for(var c=this.a,d=0,e=c.length;d<e;++d)Sb(b,c[d].C());return b};
-p.Nb=function(b){this.s!=this.f&&(Ya(this.h),this.i=0,this.s=this.f);if(0>b||0!==this.i&&b<this.i)return this;var c=b.toString();if(this.h.hasOwnProperty(c))return this.h[c];var d=[],e=this.a,f=!1,g,h;g=0;for(h=e.length;g<h;++g){var k=e[g],l=k.Nb(b);d.push(l);l!==k&&(f=!0)}if(f)return b=new yl(null),Al(b),b.a=d,zl(b),b.v(),this.h[c]=b;this.i=b;return this};p.U=function(){return"GeometryCollection"};p.rotate=function(b,c){for(var d=this.a,e=0,f=d.length;e<f;++e)d[e].rotate(b,c);this.v()};
-p.Db=function(b){var c=this.a,d,e;d=0;for(e=c.length;d<e;++d)c[d].Db(b);this.v()};p.J=function(){Al(this);yl.$.J.call(this)};function Bl(b){b=b?b:{};this.defaultDataProjection=null;this.defaultDataProjection=lc(b.defaultDataProjection?b.defaultDataProjection:"EPSG:4326");this.c=b.geometryName}M(Bl,pl);function Cl(b,c){return b?nl((0,Dl[b.type])(b),c):null}
-var Dl={Point:function(b){return new Mc(b.coordinates)},LineString:function(b){return new rl(b.coordinates)},Polygon:function(b){return new Tc(b.coordinates)},MultiPoint:function(b){return new tl(b.coordinates)},MultiLineString:function(b){return new sl(b.coordinates)},MultiPolygon:function(b){return new ul(b.coordinates)},GeometryCollection:function(b,c){var d=b.geometries.map(function(b){return Cl(b,c)});return new yl(d)}};
-Bl.prototype.a=function(b,c){var d=Cl(b.geometry,c),e=new xj;this.c&&zj(e,this.c);yj(e,d);void 0!==b.id&&(e.g=b.id,e.v());b.properties&&e.l(b.properties);return e};Bl.prototype.h=function(b,c){if("Feature"==b.type)return[this.a(b,c)];if("FeatureCollection"==b.type){var d=[],e=b.features,f,g;f=0;for(g=e.length;f<g;++f)d.push(this.a(e[f],c));return d}return[]};Bl.prototype.f=function(b){return(b=b.crs)?"name"==b.type?lc(b.properties.name):"EPSG"==b.type?lc("EPSG:"+b.properties.code):null:this.defaultDataProjection};function El(b,c,d){if("array"==ba(c))for(var e=0;e<c.length;e++)El(b,String(c[e]),d);else null!=c&&d.push("&",b,""===c?"":"=",encodeURIComponent(String(c)))};function Fl(b,c,d){Bc.call(this);Gl(this,b,c?c:0,d)}M(Fl,Bc);Fl.prototype.clone=function(){var b=new Fl(null);U(b,this.g,this.a.slice());b.v();return b};Fl.prototype.ib=function(b){var c=this.a,d=c[this.b]-c[0];return Ob(c[0]-d,c[1]-d,c[0]+d,c[1]+d,b)};Fl.prototype.U=function(){return"Circle"};function Gl(b,c,d,e){if(c){Dc(b,e,c,0);b.a||(b.a=[]);e=b.a;c=Ec(e,c);e[c++]=e[0]+d;var f;d=1;for(f=b.b;d<f;++d)e[c++]=e[d];e.length=c}else U(b,"XY",null);b.v()};function Hl(b,c,d,e,f){Ae.call(this,b,c);this.g=d;this.b=new Image;null!==e&&(this.b.crossOrigin=e);this.f={};this.c=null;this.h=f}M(Hl,Ae);p=Hl.prototype;p.J=function(){1==this.state&&Il(this);this.a&&jb(this.a);this.state=5;Be(this);Hl.$.J.call(this)};p.T=function(b){if(void 0!==b){var c=I(b);if(c in this.f)return this.f[c];b=$a(this.f)?this.b:this.b.cloneNode(!1);return this.f[c]=b}return this.b};p.getKey=function(){return this.g};p.he=function(){this.state=3;Il(this);Be(this)};
-p.ie=function(){this.state=this.b.naturalWidth&&this.b.naturalHeight?2:4;Il(this);Be(this)};p.load=function(){0==this.state&&(this.state=1,Be(this),this.c=[Q(this.b,"error",this.he,this,!0),Q(this.b,"load",this.ie,this,!0)],this.h(this,this.g))};function Il(b){b.c.forEach(N);b.c=null};function Jl(b,c){R.call(this,b);this.feature=c}M(Jl,R);
-function Kl(b){rh.call(this,{handleDownEvent:Ll,handleEvent:Ml,handleUpEvent:Nl});this.P=null;this.o=!1;this.Ba=b.source?b.source:null;this.pa=b.features?b.features:null;this.Zc=b.snapTolerance?b.snapTolerance:12;this.D=b.type;this.b=Ol(this.D);this.na=b.minPoints?b.minPoints:this.b===Pl?3:2;this.ea=b.maxPoints?b.maxPoints:Infinity;var c=b.geometryFunction;if(!c)if("Circle"===this.D)c=function(b,c){var d=c?c:new Fl([NaN,NaN]),h=b[0],k=b[1],l=h[0]-k[0],h=h[1]-k[1];Gl(d,b[0],Math.sqrt(l*l+h*h));return d};
-else{var d,c=this.b;c===Rl?d=Mc:c===Sl?d=rl:c===Pl&&(d=Tc);c=function(b,c){var g=c;g?g.W(b):g=new d(b);return g}}this.u=c;this.B=this.i=this.a=this.j=this.g=this.h=null;this.gd=b.clickTolerance?b.clickTolerance*b.clickTolerance:36;this.X=new Y({source:new Lj({useSpatialIndex:!1,wrapX:b.wrapX?b.wrapX:!1}),style:b.style?b.style:Tl()});this.Aa=b.geometryName;this.zb=b.condition?b.condition:nh;this.aa=b.freehandCondition?b.freehandCondition:oh;Q(this,rb("active"),this.Ja,this)}M(Kl,rh);
-function Tl(){var b=Fi();return function(c){return b[c.M().U()]}}Kl.prototype.setMap=function(b){Kl.$.setMap.call(this,b);this.Ja()};function Ml(b){this.b!==Sl&&this.b!==Pl||!this.aa(b)||(this.o=!0);var c=!this.o;this.o&&b.type===ug?(Ul(this,b),c=!1):b.type===tg?c=Vl(this,b):b.type===ng&&(c=!1);return sh.call(this,b)&&c}function Ll(b){return this.zb(b)?(this.P=b.pixel,!0):this.o?(this.P=b.pixel,this.h||Wl(this,b),!0):!1}
-function Nl(b){this.o=!1;var c=this.P,d=b.pixel,e=c[0]-d[0],c=c[1]-d[1],d=!0;e*e+c*c<=this.gd&&(Vl(this,b),this.h?this.b===Xl?Yl(this):Zl(this,b)?Yl(this):Ul(this,b):(Wl(this,b),this.b===Rl&&Yl(this)),d=!1);return d}
-function Vl(b,c){if(b.h){var d=c.coordinate,e=b.g.M(),f;b.b===Rl?f=b.a:b.b===Pl?(f=b.a[0],f=f[f.length-1],Zl(b,c)&&(d=b.h.slice())):(f=b.a,f=f[f.length-1]);f[0]=d[0];f[1]=d[1];b.u(b.a,e);b.j&&b.j.M().W(d);e instanceof Tc&&b.b!==Pl?(b.i||(b.i=new xj(new rl(null))),0>=e.c.length?e=null:(d=new Lc(null),U(d,e.g,e.a.slice(0,e.c[0])),d.v(),e=d),d=b.i.M(),U(d,e.g,e.a),d.v()):b.B&&(d=b.i.M(),d.W(b.B));$l(b)}else e=c.coordinate.slice(),b.j?b.j.M().W(e):(b.j=new xj(new Mc(e)),$l(b));return!0}
-function Zl(b,c){var d=!1;if(b.g){var e=!1,f=[b.h];b.b===Sl?e=b.a.length>b.na:b.b===Pl&&(e=b.a[0].length>b.na,f=[b.a[0][0],b.a[0][b.a[0].length-2]]);if(e)for(var e=c.map,g=0,h=f.length;g<h;g++){var k=f[g],l=yh(e,k),m=c.pixel,d=m[0]-l[0],l=m[1]-l[1],m=b.o&&b.aa(c)?1:b.Zc;if(d=Math.sqrt(d*d+l*l)<=m){b.h=k;break}}}return d}
-function Wl(b,c){var d=c.coordinate;b.h=d;b.b===Rl?b.a=d.slice():b.b===Pl?(b.a=[[d.slice(),d.slice()]],b.B=b.a[0]):(b.a=[d.slice(),d.slice()],b.b===Xl&&(b.B=b.a));b.B&&(b.i=new xj(new rl(b.B)));d=b.u(b.a);b.g=new xj;b.Aa&&zj(b.g,b.Aa);yj(b.g,d);$l(b);S(b,new Jl("drawstart",b.g))}
-function Ul(b,c){var d=c.coordinate,e=b.g.M(),f,g;if(b.b===Sl)b.h=d.slice(),g=b.a,g.push(d.slice()),f=g.length>b.ea,b.u(g,e);else if(b.b===Pl){g=b.a[0];g.push(d.slice());if(f=g.length>b.ea)b.h=g[0];b.u(b.a,e)}$l(b);f&&Yl(b)}
-function Yl(b){var c=am(b),d=b.a,e=c.M();b.b===Sl?(d.pop(),b.u(d,e)):b.b===Pl&&(d[0].pop(),d[0].push(d[0][0]),b.u(d,e));"MultiPoint"===b.D?yj(c,new tl([d])):"MultiLineString"===b.D?yj(c,new sl([d])):"MultiPolygon"===b.D&&yj(c,new ul([d]));S(b,new Jl("drawend",c));b.pa&&b.pa.push(c);b.Ba&&b.Ba.Bb(c)}function am(b){b.h=null;var c=b.g;c&&(b.g=null,b.j=null,b.i=null,b.X.V().clear(!0));return c}Kl.prototype.w=dc;
-function $l(b){var c=[];b.g&&c.push(b.g);b.i&&c.push(b.i);b.j&&c.push(b.j);b=b.X.V();b.clear(!0);b.Cb(c)}Kl.prototype.Ja=function(){var b=this.S,c=this.get("active");b&&c||am(this);this.X.setMap(c?b:null)};function Ol(b){var c;"Point"===b||"MultiPoint"===b?c=Rl:"LineString"===b||"MultiLineString"===b?c=Sl:"Polygon"===b||"MultiPolygon"===b?c=Pl:"Circle"===b&&(c=Xl);return c}var Rl="Point",Sl="LineString",Pl="Polygon",Xl="Circle";function bm(b,c,d,e,f,g,h,k,l,m,n){Ae.call(this,f,0);this.u=void 0!==n?n:!1;this.s=h;this.o=k;this.c=null;this.f={};this.g=c;this.l=e;this.i=g?g:f;this.b=[];this.Ra=null;this.h=0;g=Ie(e,this.i);k=this.l.C();f=this.g.C();g=k?$b(g,k):g;if(0===Ub(g))this.state=4;else if((k=b.C())&&(f?f=$b(f,k):f=k),k=e.I(this.i[0]),n=Yb(g),e=xc(d,b)(n,void 0,n.length),k=d.getPointResolution(k,n),n=pc(d),void 0!==n&&(k*=n),n=pc(b),void 0!==n&&(k/=n),e=b.getPointResolution(k,e)/k,isFinite(e)&&0<e&&(k/=e),e=k,!isFinite(e)||
-0>=e)this.state=4;else if(this.j=new uj(b,d,g,f,e*(void 0!==m?m:.5)),0===this.j.c.length)this.state=4;else if(this.h=Pe(c,e),d=wj(this.j),f&&(b.a?(d[1]=Ca(d[1],f[1],f[3]),d[3]=Ca(d[3],f[1],f[3])):d=$b(d,f)),Ub(d))if(b=Je(c,d,this.h),100>b.ha()*(b.c-b.b+1)){for(c=b.a;c<=b.f;c++)for(d=b.b;d<=b.c;d++)(m=l(this.h,c,d,h))&&this.b.push(m);0===this.b.length&&(this.state=4)}else this.state=3;else this.state=4}M(bm,Ae);bm.prototype.J=function(){1==this.state&&(this.Ra.forEach(N),this.Ra=null);bm.$.J.call(this)};
-bm.prototype.T=function(b){if(void 0!==b){var c=I(b);if(c in this.f)return this.f[c];b=$a(this.f)?this.c:this.c.cloneNode(!1);return this.f[c]=b}return this.c};
-bm.prototype.Uc=function(){var b=[];this.b.forEach(function(c){c&&2==c.N()&&b.push({extent:Ie(this.g,c.L),image:c.T()})},this);this.b.length=0;if(0===b.length)this.state=3;else{var c=this.i[0],d=Oe(this.l,c),e=ea(d)?d:d[0],d=ea(d)?d:d[1],c=this.l.I(c),f=this.g.I(this.h),g=Ie(this.l,this.i);this.c=tj(e,d,this.s,f,this.g.C(),c,g,this.j,b,this.o,this.u);this.state=2}Be(this)};
-bm.prototype.load=function(){if(0==this.state){this.state=1;Be(this);var b=0;this.Ra=[];this.b.forEach(function(c){var d=c.N();if(0==d||1==d){b++;var e;e=Q(c,"change",function(){var d=c.N();if(2==d||3==d||4==d)N(e),b--,0===b&&(this.Ra.forEach(N),this.Ra=null,this.Uc())},this);this.Ra.push(e)}},this);this.b.forEach(function(b){0==b.N()&&b.load()});0===b&&x.setTimeout(this.Uc.bind(this),0)}};function cm(b){ak.call(this,{attributions:b.attributions,cacheSize:b.cacheSize,extent:b.extent,logo:b.logo,opaque:b.opaque,projection:b.projection,state:b.state,tileGrid:b.tileGrid,tileLoadFunction:b.tileLoadFunction?b.tileLoadFunction:dm,tilePixelRatio:b.tilePixelRatio,tileUrlFunction:b.tileUrlFunction,url:b.url,urls:b.urls,wrapX:b.wrapX});this.crossOrigin=void 0!==b.crossOrigin?b.crossOrigin:null;this.tileClass=void 0!==b.tileClass?b.tileClass:Hl;this.b={};this.o={};this.S=b.reprojectionErrorThreshold}
-M(cm,ak);p=cm.prototype;p.Qc=function(){if(ye(this.a))return!0;for(var b in this.b)if(ye(this.b[b]))return!0;return!1};p.Rc=function(b,c){var d=this.bb(b);ze(this.a,this.a==d?c:{});for(var e in this.b){var f=this.b[e];ze(f,f==d?c:{})}};p.kb=function(){return 0};p.Lb=function(b){return this.c&&b&&!wc(this.c,b)?!1:cm.$.Lb.call(this,b)};p.la=function(b){var c=this.c;return!this.tileGrid||c&&!wc(c,b)?(c=I(b).toString(),c in this.o||(this.o[c]=Re(b)),this.o[c]):this.tileGrid};
-p.bb=function(b){var c=this.c;if(!c||wc(c,b))return this.a;b=I(b).toString();b in this.b||(this.b[b]=new xe);return this.b[b]};function em(b,c,d,e,f,g){c=[c,d,e];f=(d=Xe(b,c,g))?b.tileUrlFunction(d,f,g):void 0;f=new b.tileClass(c,void 0!==f?0:4,void 0!==f?f:"",b.crossOrigin,b.tileLoadFunction);f.key="";Q(f,"change",b.D,b);return f}
-function Ng(b,c,d,e,f,g){if(b.c&&g&&!wc(b.c,g)){var h=b.bb(g);d=[c,d,e];c=b.lb.apply(b,d);if(ve(h,c))return h.get(c);var k=b.c;e=b.la(k);var l=b.la(g),m=Xe(b,d,g);b=new bm(k,e,g,l,d,m,b.mb(f),0,function(b,c,d,e){return fm(this,b,c,d,e,k)}.bind(b),b.S,!1);h.set(c,b);return b}return fm(b,c,d,e,f,g)}
-function fm(b,c,d,e,f,g){var h=null,k=b.lb(c,d,e);if(ve(b.a,k)){if(h=b.a.get(k),""!=h.key){var l=h;h.a&&""==h.a.key?(h=h.a,2==l.N()&&(h.a=l)):(h=em(b,c,d,e,f,g),2==l.N()?h.a=l:l.a&&2==l.a.N()&&(h.a=l.a,l.a=null));h.a&&(h.a.a=null);b.a.replace(k,h)}}else h=em(b,c,d,e,f,g),b.a.set(k,h);return h}function dm(b,c){b.T().src=c};function gm(b){var c=void 0!==b.projection?b.projection:"EPSG:3857",d;if(void 0!==b.tileGrid)d=b.tileGrid;else{d={extent:Se(c),maxZoom:b.maxZoom,minZoom:b.minZoom,tileSize:b.tileSize};var e={};Wa(e,void 0!==d?d:{});void 0===e.extent&&(e.extent=lc("EPSG:3857").C());e.resolutions=Te(e.extent,e.maxZoom,e.tileSize);delete e.maxZoom;d=new Ee(e)}cm.call(this,{attributions:b.attributions,cacheSize:b.cacheSize,crossOrigin:b.crossOrigin,logo:b.logo,opaque:b.opaque,projection:c,reprojectionErrorThreshold:b.reprojectionErrorThreshold,
-tileGrid:d,tileLoadFunction:b.tileLoadFunction,tilePixelRatio:b.tilePixelRatio,tileUrlFunction:b.tileUrlFunction,url:b.url,urls:b.urls,wrapX:void 0!==b.wrapX?b.wrapX:!0})}M(gm,cm);function hm(b){b=b||{};var c;void 0!==b.attributions?c=b.attributions:c=[im];gm.call(this,{attributions:c,cacheSize:b.cacheSize,crossOrigin:void 0!==b.crossOrigin?b.crossOrigin:"anonymous",opaque:void 0!==b.opaque?b.opaque:!0,maxZoom:void 0!==b.maxZoom?b.maxZoom:19,reprojectionErrorThreshold:b.reprojectionErrorThreshold,tileLoadFunction:b.tileLoadFunction,url:void 0!==b.url?b.url:"https://{a-c}.tile.openstreetmap.org/{z}/{x}/{y}.png",wrapX:b.wrapX})}M(hm,gm);var im=new jd({html:'&copy; <a href="http://www.openstreetmap.org/copyright">OpenStreetMap</a> contributors.'});function jm(b){b=b||{};var c=km[b.layer];this.u=b.layer;gm.call(this,{attributions:c.attributions,cacheSize:b.cacheSize,crossOrigin:"anonymous",logo:"https://developer.mapquest.com/content/osm/mq_logo.png",maxZoom:c.maxZoom,reprojectionErrorThreshold:b.reprojectionErrorThreshold,opaque:c.opaque,tileLoadFunction:b.tileLoadFunction,url:void 0!==b.url?b.url:"https://otile{1-4}-s.mqcdn.com/tiles/1.0.0/"+this.u+"/{z}/{x}/{y}.jpg"})}M(jm,gm);
-var lm=new jd({html:'Tiles Courtesy of <a href="http://www.mapquest.com/">MapQuest</a>'}),km={osm:{maxZoom:19,opaque:!0,attributions:[lm,im]},sat:{maxZoom:18,opaque:!0,attributions:[lm,new jd({html:"Portions Courtesy NASA/JPL-Caltech and U.S. Depart. of Agriculture, Farm Service Agency"})]},hyb:{maxZoom:18,opaque:!1,attributions:[lm,im]}};function mm(b){b=b||{};cm.call(this,{attributions:b.attributions,cacheSize:b.cacheSize,crossOrigin:b.crossOrigin,logo:b.logo,projection:b.projection,reprojectionErrorThreshold:b.reprojectionErrorThreshold,tileGrid:b.tileGrid,tileLoadFunction:b.tileLoadFunction,url:b.url,urls:b.urls,wrapX:void 0!==b.wrapX?b.wrapX:!0});this.P=b.params||{};this.u=Jb()}M(mm,cm);mm.prototype.mb=function(b){return b};
-mm.prototype.g=function(b,c,d){var e=this.tileGrid;e||(e=this.la(d));if(!(e.Mb().length<=b[0])){var f=Ie(e,b,this.u),g=tb(Oe(e,b[0]),this.h);1!=c&&(g=sb(g,c,this.h));e={F:"image",FORMAT:"PNG32",TRANSPARENT:!0};Wa(e,this.P);var h;var k=this.urls;if(k){d=d.qa.split(":").pop();e.SIZE=g[0]+","+g[1];e.BBOX=f.join(",");e.BBOXSR=d;e.IMAGESR=d;e.DPI=Math.round(e.DPI?e.DPI*c:90*c);b=[(1==k.length?k[0]:k[Ea((b[1]<<b[0])+b[2],k.length)]).replace(/MapServer\/?$/,"MapServer/export").replace(/ImageServer\/?$/,
-"ImageServer/exportImage")];for(h in e)El(h,e[h],b);b[1]&&(h=b[0],c=h.indexOf("#"),0<=c&&(b.push(h.substr(c)),b[0]=h=h.substr(0,c)),c=h.indexOf("?"),0>c?b[1]="?":c==h.length-1&&(b[1]=void 0));h=b.join("")}else h=void 0;return h}};F("ol.format.GeoJSON",Bl,OPENLAYERS);Bl.prototype.readFeatures=Bl.prototype.b;Bl.prototype.readFeature=Bl.prototype.g;F("ol.format.EsriJSON",vl,OPENLAYERS);vl.prototype.readFeatures=vl.prototype.b;vl.prototype.readFeature=vl.prototype.g;F("ol.style.Style",zi,OPENLAYERS);F("ol.style.Circle",yi,OPENLAYERS);F("ol.style.Fill",si,OPENLAYERS);F("ol.style.Stroke",xi,OPENLAYERS);F("ol.style.Icon",Pg,OPENLAYERS);F("ol.View",V,OPENLAYERS);V.prototype.on=V.prototype.ba;V.prototype.getZoom=V.prototype.vd;
-V.prototype.setZoom=V.prototype.De;V.prototype.getCenter=V.prototype.ia;V.prototype.setCenter=V.prototype.oa;V.prototype.calculateExtent=V.prototype.jc;V.prototype.getProjection=V.prototype.ke;V.prototype.fit=V.prototype.md;F("ol.control.defaults",df,OPENLAYERS);F("ol.layer.Tile",X,OPENLAYERS);X.prototype.getVisible=X.prototype.cb;X.prototype.setVisible=X.prototype.Gc;X.prototype.getZIndex=X.prototype.Ub;X.prototype.setZIndex=X.prototype.Hc;X.prototype.getOpacity=X.prototype.Tb;
-X.prototype.setOpacity=X.prototype.Fc;X.prototype.getSource=X.prototype.V;X.prototype.setSource=X.prototype.Yb;F("ol.layer.Vector",Y,OPENLAYERS);Y.prototype.getVisible=Y.prototype.cb;Y.prototype.setVisible=Y.prototype.Gc;Y.prototype.getSource=Y.prototype.V;Y.prototype.setStyle=Y.prototype.s;Y.prototype.getZIndex=Y.prototype.Ub;Y.prototype.setZIndex=Y.prototype.Hc;Y.prototype.getOpacity=Y.prototype.Tb;Y.prototype.setOpacity=Y.prototype.Fc;Y.prototype.getSource=Y.prototype.V;Y.prototype.setSource=Y.prototype.Yb;
-F("ol.source.OSM",hm,OPENLAYERS);hm.prototype.refresh=hm.prototype.wa;F("ol.source.MapQuest",jm,OPENLAYERS);jm.prototype.refresh=jm.prototype.wa;F("ol.source.XYZ",gm,OPENLAYERS);gm.prototype.refresh=gm.prototype.wa;gm.prototype.setUrl=gm.prototype.s;gm.prototype.refresh=gm.prototype.wa;F("ol.Map",Z,OPENLAYERS);Z.prototype.on=Z.prototype.ba;Z.prototype.getTarget=Z.prototype.Sb;Z.prototype.getTargetElement=Z.prototype.ab;Z.prototype.getView=Z.prototype.O;Z.prototype.addOverlay=Z.prototype.kd;
-Z.prototype.addLayer=Z.prototype.jd;Z.prototype.removeLayer=Z.prototype.ze;Z.prototype.getEventPixel=Z.prototype.vc;Z.prototype.hasFeatureAtPixel=Z.prototype.Sd;Z.prototype.getSize=Z.prototype.Oa;Z.prototype.updateSize=Z.prototype.$b;Z.prototype.forEachFeatureAtPixel=Z.prototype.od;Z.prototype.addInteraction=Z.prototype.hd;Z.prototype.removeInteraction=Z.prototype.ye;Z.prototype.beforeRender=Z.prototype.fa;F("ol.source.Vector",Lj,OPENLAYERS);Lj.prototype.getFeatures=Lj.prototype.oe;
-Lj.prototype.getExtent=Lj.prototype.C;Lj.prototype.refresh=Lj.prototype.wa;Lj.prototype.addFeatures=Lj.prototype.Cb;Lj.prototype.addFeature=Lj.prototype.Bb;Lj.prototype.clear=Lj.prototype.clear;Lj.prototype.forEachFeature=Lj.prototype.nd;Lj.prototype.refresh=Lj.prototype.wa;F("ol.source.TileArcGISRest",mm,OPENLAYERS);mm.prototype.refresh=mm.prototype.wa;F("ol.Overlay",hl,OPENLAYERS);hl.prototype.setPosition=hl.prototype.Ec;F("ol.Feature",xj,OPENLAYERS);xj.prototype.getProperties=xj.prototype.za;
-xj.prototype.setProperties=xj.prototype.l;xj.prototype.getGeometry=xj.prototype.M;F("ol.geom.Point",Mc,OPENLAYERS);Mc.prototype.transform=Mc.prototype.o;Mc.prototype.getCoordinates=Mc.prototype.ra;Mc.prototype.getExtent=Mc.prototype.C;F("ol.geom.Polygon",Tc,OPENLAYERS);Tc.prototype.getCoordinates=Tc.prototype.ra;Tc.prototype.getExtent=Tc.prototype.C;Tc.prototype.transform=Tc.prototype.o;F("ol.geom.LineString",rl,OPENLAYERS);rl.prototype.getCoordinates=rl.prototype.ra;rl.prototype.getExtent=rl.prototype.C;
-rl.prototype.transform=rl.prototype.o;F("ol.proj.Projection",ic,OPENLAYERS);ic.prototype.getCode=ic.prototype.l;F("ol.interaction.Draw",Kl,OPENLAYERS);Kl.prototype.on=Kl.prototype.ba;F("ol.animation.pan",cd,OPENLAYERS);
+p.Md=function(){var b=this.b,c=this.na;if(0!==c.a.length){var d=16,e=d;if(b){var f=b.viewHints;f[0]&&(d=this.Ja?8:0,e=2);f[1]&&(d=this.wb?8:0,e=2)}if(c.h<d){hh(c);for(var f=0,g,h;c.h<d&&f<e&&0<c.a.length;)g=eh(c)[0],h=g.getKey(),0!==g.N()||h in c.g||(c.g[h]=!0,++c.h,++f,g.load())}}c=this.aa;d=0;for(e=c.length;d<e;++d)c[d](this,b);c.length=0};p.Nd=function(){this.render()};
+p.Pd=function(){var b;this.Tb()&&(b=this.Na());if(this.i){for(var c=0,d=this.i.length;c<d;++c)N(this.i[c]);this.i=null}b?(b.appendChild(this.a),b=this.S?this.S:b,this.i=[Q(b,"keydown",this.Oa,this),Q(b,"keypress",this.Oa,this)],this.c||(this.c=this.vb.bind(this),x.addEventListener("resize",this.c,!1))):(ge(this.a),void 0!==this.c&&(x.removeEventListener("resize",this.c,!1),this.c=void 0));this.vb()};p.Qd=function(){this.render()};p.Sd=function(){this.render()};
+p.Rd=function(){this.G&&(N(this.G),this.G=null);var b=this.O();b&&(this.G=Q(b,"propertychange",this.Sd,this));this.render()};p.Bd=function(){this.render()};p.Cd=function(){this.render()};p.Ad=function(){this.u&&(this.u.forEach(N),this.u=null);var b=ml(this);b&&(this.u=[Q(b,"propertychange",this.Cd,this),Q(b,"change",this.Bd,this)]);this.render()};p.render=function(){void 0===this.h&&(this.h=x.requestAnimationFrame(this.pa))};p.ze=function(b){return this.g.remove(b)};p.Ae=function(b){return ml(this).get("layers").remove(b)};
+p.Ce=function(b){var c,d,e,f=this.Pa(),g=this.O(),h=null;if(c=void 0!==f&&0<f[0]&&0<f[1]&&g)c=!!g.ia()&&void 0!==g.I();if(c){var h=g.g.slice(),k=ml(this).Lb(),l={};c=0;for(d=k.length;c<d;++c)l[I(k[c].layer)]=k[c];e=g.N();h={animate:!1,attributions:{},coordinateToPixelMatrix:this.Aa,extent:null,focus:this.P?this.P:e.center,index:this.Ba++,layerStates:l,layerStatesArray:k,logos:Wa({},this.xb),pixelRatio:this.yb,pixelToCoordinateMatrix:this.zb,postRenderFunctions:[],size:f,skippedFeatureUids:this.Ab,
+tileQueue:this.na,time:b,usedTiles:{},viewState:e,viewHints:h,wantedTiles:{}}}if(h){b=this.B;c=f=0;for(d=b.length;c<d;++c)g=b[c],g(this,h)&&(b[f++]=g);b.length=f;h.extent=Zb(e.center,e.resolution,e.rotation,h.size)}this.b=h;this.D.sb(h);h&&(h.animate&&this.render(),Array.prototype.push.apply(this.aa,h.postRenderFunctions),0!==this.B.length||h.viewHints[0]||h.viewHints[1]||Rb(h.extent,this.ea)||(S(this,new te("moveend",this,h)),Mb(h.extent,this.ea)));S(this,new te("postrender",this,h));c=e=this.Md;
+this&&(c=ma(e,this));!ga(x.setImmediate)||x.Window&&x.Window.prototype&&!W("Edge")&&x.Window.prototype.setImmediate==x.setImmediate?(lf||(lf=mf()),lf(c)):x.setImmediate(c)};
+p.vb=function(){var b=this.Na();if(b){var c=Yd(b),d=Gd&&b.currentStyle,e;if(e=d)Wd(c),e=!0;if(e&&"auto"!=d.width&&"auto"!=d.height&&!d.boxSizing)c=pe(b,d.width,"width","pixelWidth"),b=pe(b,d.height,"height","pixelHeight"),b=new Vd(c,b);else{d=new Vd(b.offsetWidth,b.offsetHeight);if(Gd){c=qe(b,"paddingLeft");e=qe(b,"paddingRight");var f=qe(b,"paddingTop"),g=qe(b,"paddingBottom"),c=new je(f,e,g,c)}else c=ke(b,"paddingLeft"),e=ke(b,"paddingRight"),f=ke(b,"paddingTop"),g=ke(b,"paddingBottom"),c=new je(parseFloat(f),
+parseFloat(e),parseFloat(g),parseFloat(c));!Gd||9<=Number(Sd)?(e=ke(b,"borderLeftWidth"),f=ke(b,"borderRightWidth"),g=ke(b,"borderTopWidth"),b=ke(b,"borderBottomWidth"),b=new je(parseFloat(g),parseFloat(f),parseFloat(b),parseFloat(e))):(e=se(b,"borderLeft"),f=se(b,"borderRight"),g=se(b,"borderTop"),b=se(b,"borderBottom"),b=new je(g,f,b,e));b=new Vd(d.width-b.left-c.left-c.right-b.right,d.height-b.top-c.top-c.bottom-b.bottom)}this.set("size",[b.width,b.height])}else this.set("size",void 0)};
+function ll(b){var c=null;void 0!==b.keyboardEventTarget&&(c="string"===typeof b.keyboardEventTarget?document.getElementById(b.keyboardEventTarget):b.keyboardEventTarget);var d={},e={};if(void 0===b.logo||"boolean"===typeof b.logo&&b.logo)e["data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAMAAABEpIrGAAAAA3NCSVQICAjb4U/gAAAACXBIWXMAAAHGAAABxgEXwfpGAAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAAhNQTFRF////AP//AICAgP//AFVVQECA////K1VVSbbbYL/fJ05idsTYJFtbbcjbJllmZszWWMTOIFhoHlNiZszTa9DdUcHNHlNlV8XRIVdiasrUHlZjIVZjaMnVH1RlIFRkH1RkH1ZlasvYasvXVsPQH1VkacnVa8vWIVZjIFRjVMPQa8rXIVVkXsXRsNveIFVkIFZlIVVj3eDeh6GmbMvXH1ZkIFRka8rWbMvXIFVkIFVjIFVkbMvWH1VjbMvWIFVlbcvWIFVla8vVIFVkbMvWbMvVH1VkbMvWIFVlbcvWIFVkbcvVbMvWjNPbIFVkU8LPwMzNIFVkbczWIFVkbsvWbMvXIFVkRnB8bcvW2+TkW8XRIFVkIlZlJVloJlpoKlxrLl9tMmJwOWd0Omh1RXF8TneCT3iDUHiDU8LPVMLPVcLPVcPQVsPPVsPQV8PQWMTQWsTQW8TQXMXSXsXRX4SNX8bSYMfTYcfTYsfTY8jUZcfSZsnUaIqTacrVasrVa8jTa8rWbI2VbMvWbcvWdJObdcvUdszUd8vVeJaee87Yfc3WgJyjhqGnitDYjaarldPZnrK2oNbborW5o9bbo9fbpLa6q9ndrL3ArtndscDDutzfu8fJwN7gwt7gxc/QyuHhy+HizeHi0NfX0+Pj19zb1+Tj2uXk29/e3uLg3+Lh3+bl4uXj4ufl4+fl5Ofl5ufl5ujm5+jmySDnBAAAAFp0Uk5TAAECAgMEBAYHCA0NDg4UGRogIiMmKSssLzU7PkJJT1JTVFliY2hrdHZ3foSFhYeJjY2QkpugqbG1tre5w8zQ09XY3uXn6+zx8vT09vf4+Pj5+fr6/P39/f3+gz7SsAAAAVVJREFUOMtjYKA7EBDnwCPLrObS1BRiLoJLnte6CQy8FLHLCzs2QUG4FjZ5GbcmBDDjxJBXDWxCBrb8aM4zbkIDzpLYnAcE9VXlJSWlZRU13koIeW57mGx5XjoMZEUqwxWYQaQbSzLSkYGfKFSe0QMsX5WbjgY0YS4MBplemI4BdGBW+DQ11eZiymfqQuXZIjqwyadPNoSZ4L+0FVM6e+oGI6g8a9iKNT3o8kVzNkzRg5lgl7p4wyRUL9Yt2jAxVh6mQCogae6GmflI8p0r13VFWTHBQ0rWPW7ahgWVcPm+9cuLoyy4kCJDzCm6d8PSFoh0zvQNC5OjDJhQopPPJqph1doJBUD5tnkbZiUEqaCnB3bTqLTFG1bPn71kw4b+GFdpLElKIzRxxgYgWNYc5SCENVHKeUaltHdXx0dZ8uBI1hJ2UUDgq82CM2MwKeibqAvSO7MCABq0wXEPiqWEAAAAAElFTkSuQmCC"]=
+"http://openlayers.org/";else{var f=b.logo;"string"===typeof f?e[f]="":ha(f)&&(e[f.src]=f.href)}f=b.layers instanceof gi?b.layers:new gi({layers:b.layers});d.layergroup=f;d.target=b.target;d.view=void 0!==b.view?b.view:new V;var f=Zg,g;void 0!==b.renderer?Array.isArray(b.renderer)?g=b.renderer:"string"===typeof b.renderer&&(g=[b.renderer]):g=kl;var h,k;h=0;for(k=g.length;h<k;++h){var l=g[h];if("canvas"==l){if(Ff){f=ik;break}}else if("dom"==l){f=pk;break}else if("webgl"==l&&yf){f=hl;break}}var m;void 0!==
+b.controls?m=Array.isArray(b.controls)?new ld(b.controls.slice()):b.controls:m=ef();if(void 0!==b.interactions)g=Array.isArray(b.interactions)?new ld(b.interactions.slice()):b.interactions;else{g={};h=new ld;k=new jh;(void 0!==g.altShiftDragRotate?g.altShiftDragRotate:1)&&h.push(new Fh);(void 0!==g.doubleClickZoom?g.doubleClickZoom:1)&&h.push(new ph({delta:g.zoomDelta,duration:g.zoomDuration}));(void 0!==g.dragPan?g.dragPan:1)&&h.push(new Ah({kinetic:k}));(void 0!==g.pinchRotate?g.pinchRotate:1)&&
+h.push(new Zh);(void 0!==g.pinchZoom?g.pinchZoom:1)&&h.push(new ci({duration:g.zoomDuration}));if(void 0!==g.keyboard?g.keyboard:1)h.push(new Th),h.push(new Vh({delta:g.zoomDelta,duration:g.zoomDuration}));(void 0!==g.mouseWheelZoom?g.mouseWheelZoom:1)&&h.push(new Xh({duration:g.zoomDuration}));(void 0!==g.shiftDragZoom?g.shiftDragZoom:1)&&h.push(new Sh({duration:g.zoomDuration}));g=h}b=void 0!==b.overlays?Array.isArray(b.overlays)?new ld(b.overlays.slice()):b.overlays:new ld;return{controls:m,interactions:g,
+keyboardEventTarget:c,logos:e,overlays:b,De:f,values:d}}mc(li);mc(si);si.forEach(function(b){li.forEach(function(c){nc(b,c,mi);nc(c,b,ni)})});function nl(b){T.call(this);this.j=b.id;this.i=void 0!==b.insertFirst?b.insertFirst:!0;this.o=void 0!==b.stopEvent?b.stopEvent:!0;this.b=document.createElement("DIV");this.b.className="ol-overlay-container";this.b.style.position="absolute";this.autoPan=void 0!==b.autoPan?b.autoPan:!1;this.g=void 0!==b.autoPanAnimation?b.autoPanAnimation:{};this.h=void 0!==b.autoPanMargin?b.autoPanMargin:20;this.a={hb:"",pb:"",tb:"",ub:"",visible:!0};this.c=null;Q(this,rb("element"),this.yd,this);Q(this,rb("map"),
+this.Hd,this);Q(this,rb("offset"),this.Id,this);Q(this,rb("position"),this.Kd,this);Q(this,rb("positioning"),this.Ld,this);void 0!==b.element&&this.set("element",b.element);this.set("offset",void 0!==b.offset?b.offset:[0,0]);this.set("positioning",void 0!==b.positioning?b.positioning:"top-left");void 0!==b.position&&this.Ec(b.position)}M(nl,T);p=nl.prototype;p.La=function(){return this.j};p.yd=function(){ee(this.b);var b=this.get("element");b&&this.b.appendChild(b)};
+p.Hd=function(){this.c&&(ge(this.b),N(this.c),this.c=null);var b=this.get("map");b&&(this.c=Q(b,"postrender",this.render,this),pl(this),b=this.o?b.j:b.o,this.i?fe(b,this.b,0):b.appendChild(this.b))};p.render=function(){pl(this)};p.Id=function(){pl(this)};
+p.Kd=function(){pl(this);if(void 0!==this.get("position")&&this.autoPan){var b=this.get("map");if(void 0!==b&&b.Na()){var c=ql(b.Na(),b.Pa()),d=this.get("element"),e=d.offsetWidth,f=d.currentStyle||x.getComputedStyle(d),e=e+(parseInt(f.marginLeft,10)+parseInt(f.marginRight,10)),f=d.offsetHeight,g=d.currentStyle||x.getComputedStyle(d),f=f+(parseInt(g.marginTop,10)+parseInt(g.marginBottom,10)),h=ql(d,[e,f]),d=this.h;Nb(c,h)||(e=h[0]-c[0],f=c[2]-h[2],g=h[1]-c[1],h=c[3]-h[3],c=[0,0],0>e?c[0]=e-d:0>f&&
+(c[0]=Math.abs(f)+d),0>g?c[1]=g-d:0>h&&(c[1]=Math.abs(h)+d),0===c[0]&&0===c[1])||(d=b.O().ia(),e=Eh(b,d),c=[e[0]+c[0],e[1]+c[1]],this.g&&(this.g.source=d,b.fa(cd(this.g))),b.O().oa(b.ta(c)))}}};p.Ld=function(){pl(this)};p.setMap=function(b){this.set("map",b)};p.Ec=function(b){this.set("position",b)};
+function ql(b,c){var d=Yd(b),e=new Ud(0,0),f;f=d?Yd(d):document;var g;(g=!Gd||9<=Number(Sd))||(Wd(f),g=!0);b!=(g?f.documentElement:f.body)&&(f=le(b),g=Wd(d).a,d=g.scrollingElement?g.scrollingElement:Jd?g.body||g.documentElement:g.documentElement,g=g.parentWindow||g.defaultView,d=Gd&&Qd("10")&&g.pageYOffset!=d.scrollTop?new Ud(d.scrollLeft,d.scrollTop):new Ud(g.pageXOffset||d.scrollLeft,g.pageYOffset||d.scrollTop),e.x=f.left+d.x,e.y=f.top+d.y);return[e.x,e.y,e.x+c[0],e.y+c[1]]}
+function rl(b,c){b.a.visible!==c&&(oe(b.b,c),b.a.visible=c)}
+function pl(b){var c=b.get("map"),d=b.get("position");if(void 0!==c&&c.b&&void 0!==d){var d=Eh(c,d),e=c.Pa(),c=b.b.style,f=b.get("offset"),g=b.get("positioning"),h=f[0],f=f[1];if("bottom-right"==g||"center-right"==g||"top-right"==g)""!==b.a.pb&&(b.a.pb=c.left=""),h=Math.round(e[0]-d[0]-h)+"px",b.a.tb!=h&&(b.a.tb=c.right=h);else{""!==b.a.tb&&(b.a.tb=c.right="");if("bottom-center"==g||"center-center"==g||"top-center"==g)h-=me(b.b).width/2;h=Math.round(d[0]+h)+"px";b.a.pb!=h&&(b.a.pb=c.left=h)}if("bottom-left"==
+g||"bottom-center"==g||"bottom-right"==g)""!==b.a.ub&&(b.a.ub=c.top=""),d=Math.round(e[1]-d[1]-f)+"px",b.a.hb!=d&&(b.a.hb=c.bottom=d);else{""!==b.a.hb&&(b.a.hb=c.bottom="");if("center-left"==g||"center-center"==g||"center-right"==g)f-=me(b.b).height/2;d=Math.round(d[1]+f)+"px";b.a.ub!=d&&(b.a.ub=c.top=d)}rl(b,!0)}else rl(b,!1)};function sl(){this.defaultDataProjection=null}function tl(b,c,d){var e;d&&(e={dataProjection:d.dataProjection?d.dataProjection:b.f(Ij(c)),featureProjection:d.featureProjection});var f;e&&(f={featureProjection:e.featureProjection,dataProjection:e.dataProjection?e.dataProjection:b.defaultDataProjection,rightHanded:e.rightHanded},e.decimals&&(f.decimals=e.decimals));return f}
+function ul(b,c){var d=c?lc(c.featureProjection):null,e=c?lc(c.dataProjection):null;if(d&&e&&!wc(d,e))if(b instanceof zc)d=b.o(e,d);else{e=xc(e,d);d=[b[0],b[1],b[0],b[3],b[2],b[1],b[2],b[3]];e(d,d,2);var f=[d[0],d[2],d[4],d[6]],g=[d[1],d[3],d[5],d[7]],d=Math.min.apply(null,f),e=Math.min.apply(null,g),f=Math.max.apply(null,f),g=Math.max.apply(null,g),d=Ob(d,e,f,g,void 0)}else d=b;return d};function vl(){this.defaultDataProjection=null}M(vl,sl);function Ij(b){return ha(b)?b:"string"===typeof b?(b=JSON.parse(b))?b:null:null}vl.prototype.U=function(){return"json"};vl.prototype.g=function(b,c){return this.a(Ij(b),tl(this,b,c))};vl.prototype.b=function(b,c){return this.h(Ij(b),tl(this,b,c))};function wl(b,c,d,e,f){var g=NaN,h=NaN,k=(d-c)/e;if(0!==k)if(1==k)g=b[c],h=b[c+1];else if(2==k)g=.5*b[c]+.5*b[c+e],h=.5*b[c+1]+.5*b[c+e+1];else{var h=b[c],k=b[c+1],l=0,g=[0],m;for(m=c+e;m<d;m+=e){var n=b[m],q=b[m+1],l=l+Math.sqrt((n-h)*(n-h)+(q-k)*(q-k));g.push(l);h=n;k=q}d=.5*l;l=0;m=g.length;for(n=!1;l<m;)h=l+(m-l>>1),k=+Ha(g[h],d),0>k?l=h+1:(m=h,n=!k);h=n?l:~l;0>h?(d=(d-g[-h-2])/(g[-h-1]-g[-h-2]),c+=(-h-2)*e,g=b[c],g=g+d*(b[c+e]-g),h=b[c+1],h=h+d*(b[c+e+1]-h)):(g=b[c+h*e],h=b[c+h*e+1])}return f?
+(f[0]=g,f[1]=h,f):[g,h]};function xl(b,c){Bc.call(this);this.c=null;this.j=-1;this.W(b,c)}M(xl,Bc);p=xl.prototype;p.clone=function(){var b=new xl(null);U(b,this.g,this.a.slice());b.v();return b};p.ra=function(){return Hc(this.a,0,this.a.length,this.b)};function Ti(b){if(b.j!=b.f){var c;c=wl(b.a,0,b.a.length,b.b,b.c);b.c=c;b.j=b.f}return b.c}p.Ma=function(b){var c=[];c.length=Jc(this.a,0,this.a.length,this.b,b,c,0);b=new xl(null);U(b,"XY",c);b.v();return b};p.U=function(){return"LineString"};
+p.W=function(b,c){b?(Dc(this,c,b,1),this.a||(this.a=[]),this.a.length=Fc(this.a,0,b,this.b)):U(this,"XY",null);this.v()};function yl(b,c){Bc.call(this);this.c=[];this.W(b,c)}M(yl,Bc);p=yl.prototype;p.clone=function(){var b=new yl(null),c=this.c.slice();U(b,this.g,this.a.slice());b.c=c;b.v();return b};p.ra=function(){return Ic(this.a,0,this.c,this.b)};p.ab=function(){return this.c};function Ui(b){var c=[],d=b.a,e=0,f=b.c;b=b.b;var g,h;g=0;for(h=f.length;g<h;++g){var k=f[g],e=wl(d,e,k,b);Ka(c,e);e=k}return c}
+p.Ma=function(b){var c=[],d=[],e=this.a,f=this.c,g=this.b,h=0,k=0,l,m;l=0;for(m=f.length;l<m;++l){var n=f[l],k=Jc(e,h,n,g,b,c,k);d.push(k);h=n}c.length=k;b=new yl(null);U(b,"XY",c);b.c=d;b.v();return b};p.U=function(){return"MultiLineString"};p.W=function(b,c){if(b){Dc(this,c,b,2);this.a||(this.a=[]);var d=Gc(this.a,0,b,this.b,this.c);this.a.length=0===d.length?0:d[d.length-1]}else d=this.c,U(this,"XY",null),this.c=d;this.v()};function zl(b,c){Bc.call(this);this.W(b,c)}M(zl,Bc);zl.prototype.clone=function(){var b=new zl(null);U(b,this.g,this.a.slice());b.v();return b};zl.prototype.ra=function(){return Hc(this.a,0,this.a.length,this.b)};zl.prototype.U=function(){return"MultiPoint"};zl.prototype.W=function(b,c){b?(Dc(this,c,b,1),this.a||(this.a=[]),this.a.length=Fc(this.a,0,b,this.b)):U(this,"XY",null);this.v()};function Al(b,c){Bc.call(this);this.c=[];this.B=-1;this.D=null;this.G=-1;this.j=null;this.W(b,c)}M(Al,Bc);p=Al.prototype;p.clone=function(){for(var b=new Al(null),c=this.c.length,d=Array(c),e=0;e<c;++e)d[e]=this.c[e].slice();U(b,this.g,this.a.slice());b.c=d;b.v();return b};p.ra=function(b){var c;void 0!==b?(c=Vi(this).slice(),Sc(c,this.c,this.b,b)):c=this.a;b=c;c=this.c;var d=this.b,e=0,f=[],g=0,h,k;h=0;for(k=c.length;h<k;++h){var l=c[h];f[g++]=Ic(b,e,l,d,f[g]);e=l[l.length-1]}f.length=g;return f};
+function Wi(b){if(b.B!=b.f){var c=b.a,d=b.c,e=b.b,f=0,g=[],h,k,l=Jb();h=0;for(k=d.length;h<k;++h){var m=d[h],l=c,n=m[0],q=e,r=Pb(void 0),l=Tb(r,l,f,n,q);g.push((l[0]+l[2])/2,(l[1]+l[3])/2);f=m[m.length-1]}c=Vi(b);d=b.c;e=b.b;h=0;k=[];m=0;for(l=d.length;m<l;++m)f=d[m],k=Oc(c,h,f,e,g,2*m,k),h=f[f.length-1];b.D=k;b.B=b.f}return b.D}
+function Vi(b){if(b.G!=b.f){var c=b.a,d;a:{d=b.c;var e,f;e=0;for(f=d.length;e<f;++e)if(!Qc(c,d[e],b.b,void 0)){d=!1;break a}d=!0}d?b.j=c:(b.j=c.slice(),b.j.length=Sc(b.j,b.c,b.b));b.G=b.f}return b.j}p.Ma=function(b){var c=[],d=[],e=this.a,f=this.c,g=this.b;b=Math.sqrt(b);var h=0,k=0,l,m;l=0;for(m=f.length;l<m;++l){var n=f[l],q=[],k=Kc(e,h,n,g,b,c,k,q);d.push(q);h=n[n.length-1]}c.length=k;e=new Al(null);U(e,"XY",c);e.c=d;e.v();return e};p.U=function(){return"MultiPolygon"};
+p.W=function(b,c){if(b){Dc(this,c,b,3);this.a||(this.a=[]);var d=this.a,e=this.b,f=this.c,g=0,f=f?f:[],h=0,k,l;k=0;for(l=b.length;k<l;++k)g=Gc(d,g,b[k],e,f[h]),f[h++]=g,g=g[g.length-1];f.length=h;0===f.length?this.a.length=0:(d=f[f.length-1],this.a.length=0===d.length?0:d[d.length-1])}else d=this.c,U(this,"XY",null),this.c=d;this.v()};function Bl(b){b=b?b:{};this.defaultDataProjection=null;this.c=b.geometryName}M(Bl,vl);function Cl(b){var c="XY";!0===b.hasZ&&!0===b.hasM?c="XYZM":!0===b.hasZ?c="XYZ":!0===b.hasM&&(c="XYM");return c}
+var Dl={Point:function(b){return void 0!==b.m&&void 0!==b.z?new Mc([b.x,b.y,b.z,b.m],"XYZM"):void 0!==b.z?new Mc([b.x,b.y,b.z],"XYZ"):void 0!==b.m?new Mc([b.x,b.y,b.m],"XYM"):new Mc([b.x,b.y])},LineString:function(b){return new xl(b.paths[0],Cl(b))},Polygon:function(b){return new Tc(b.rings,Cl(b))},MultiPoint:function(b){return new zl(b.points,Cl(b))},MultiLineString:function(b){return new yl(b.paths,Cl(b))},MultiPolygon:function(b){return new Al(b.rings,Cl(b))}};
+Bl.prototype.a=function(b,c){var d;if(d=b.geometry){var e;if(ea(d.x)&&ea(d.y))e="Point";else if(d.points)e="MultiPoint";else if(d.paths)e=1===d.paths.length?"LineString":"MultiLineString";else if(d.rings){var f=d.rings,g=Cl(d),h=[];e=[];var k,l;k=0;for(l=f.length;k<l;++k){var m=Ja(f[k]);Pc(m,0,m.length,g.length)?h.push([f[k]]):e.push(f[k])}for(;e.length;){f=e.shift();g=!1;for(k=h.length-1;0<=k;k--)if(Nb((new Lc(h[k][0])).C(),(new Lc(f)).C())){h[k].push(f);g=!0;break}g||h.push([f.reverse()])}d=Wa({},
+d);1===h.length?(e="Polygon",d.rings=h[0]):(e="MultiPolygon",d.rings=h)}d=ul((0,Dl[e])(d),c)}else d=null;h=new Dj;this.c&&Fj(h,this.c);Ej(h,d);c&&c.Qb&&b.attributes[c.Qb]&&(h.g=b.attributes[c.Qb],h.v());b.attributes&&h.l(b.attributes);return h};Bl.prototype.h=function(b,c){var d=c?c:{};if(b.features){var e=[],f=b.features,g,h;d.Qb=b.objectIdFieldName;g=0;for(h=f.length;g<h;++g)e.push(this.a(f[g],d));return e}return[this.a(b,d)]};
+Bl.prototype.f=function(b){return b.spatialReference&&b.spatialReference.wkid?lc("EPSG:"+b.spatialReference.wkid):null};function El(b){zc.call(this);this.a=b?b:null;Fl(this)}M(El,zc);function Gl(b){var c,d;if(b.a)for(c=0,d=b.a.length;c<d;++c)gb(b.a[c],"change",b.v,b)}function Fl(b){var c,d;if(b.a)for(c=0,d=b.a.length;c<d;++c)Q(b.a[c],"change",b.v,b)}p=El.prototype;p.clone=function(){var b=new El(null),c=this.a,d=[],e,f;e=0;for(f=c.length;e<f;++e)d.push(c[e].clone());Gl(b);b.a=d;Fl(b);b.v();return b};p.ib=function(b){Pb(b);for(var c=this.a,d=0,e=c.length;d<e;++d)Sb(b,c[d].C());return b};
+p.Ob=function(b){this.s!=this.f&&(Ya(this.h),this.i=0,this.s=this.f);if(0>b||0!==this.i&&b<this.i)return this;var c=b.toString();if(this.h.hasOwnProperty(c))return this.h[c];var d=[],e=this.a,f=!1,g,h;g=0;for(h=e.length;g<h;++g){var k=e[g],l=k.Ob(b);d.push(l);l!==k&&(f=!0)}if(f)return b=new El(null),Gl(b),b.a=d,Fl(b),b.v(),this.h[c]=b;this.i=b;return this};p.U=function(){return"GeometryCollection"};p.rotate=function(b,c){for(var d=this.a,e=0,f=d.length;e<f;++e)d[e].rotate(b,c);this.v()};
+p.Eb=function(b){var c=this.a,d,e;d=0;for(e=c.length;d<e;++d)c[d].Eb(b);this.v()};p.J=function(){Gl(this);El.X.J.call(this)};function Hl(b){b=b?b:{};this.defaultDataProjection=null;this.defaultDataProjection=lc(b.defaultDataProjection?b.defaultDataProjection:"EPSG:4326");this.c=b.geometryName}M(Hl,vl);function Il(b,c){return b?ul((0,Jl[b.type])(b),c):null}
+var Jl={Point:function(b){return new Mc(b.coordinates)},LineString:function(b){return new xl(b.coordinates)},Polygon:function(b){return new Tc(b.coordinates)},MultiPoint:function(b){return new zl(b.coordinates)},MultiLineString:function(b){return new yl(b.coordinates)},MultiPolygon:function(b){return new Al(b.coordinates)},GeometryCollection:function(b,c){var d=b.geometries.map(function(b){return Il(b,c)});return new El(d)}};
+Hl.prototype.a=function(b,c){var d=Il(b.geometry,c),e=new Dj;this.c&&Fj(e,this.c);Ej(e,d);void 0!==b.id&&(e.g=b.id,e.v());b.properties&&e.l(b.properties);return e};Hl.prototype.h=function(b,c){if("Feature"==b.type)return[this.a(b,c)];if("FeatureCollection"==b.type){var d=[],e=b.features,f,g;f=0;for(g=e.length;f<g;++f)d.push(this.a(e[f],c));return d}return[]};Hl.prototype.f=function(b){return(b=b.crs)?"name"==b.type?lc(b.properties.name):"EPSG"==b.type?lc("EPSG:"+b.properties.code):null:this.defaultDataProjection};function Kl(b,c,d){if("array"==ba(c))for(var e=0;e<c.length;e++)Kl(b,String(c[e]),d);else null!=c&&d.push("&",b,""===c?"":"=",encodeURIComponent(String(c)))};function Ll(b,c,d){Bc.call(this);Ml(this,b,c?c:0,d)}M(Ll,Bc);Ll.prototype.clone=function(){var b=new Ll(null);U(b,this.g,this.a.slice());b.v();return b};Ll.prototype.ib=function(b){var c=this.a,d=c[this.b]-c[0];return Ob(c[0]-d,c[1]-d,c[0]+d,c[1]+d,b)};Ll.prototype.U=function(){return"Circle"};function Ml(b,c,d,e){if(c){Dc(b,e,c,0);b.a||(b.a=[]);e=b.a;c=Ec(e,c);e[c++]=e[0]+d;var f;d=1;for(f=b.b;d<f;++d)e[c++]=e[d];e.length=c}else U(b,"XY",null);b.v()};function Nl(b,c,d,e,f){Be.call(this,b,c);this.g=d;this.b=new Image;null!==e&&(this.b.crossOrigin=e);this.f={};this.c=null;this.h=f}M(Nl,Be);p=Nl.prototype;p.J=function(){1==this.state&&Ol(this);this.a&&jb(this.a);this.state=5;Ce(this);Nl.X.J.call(this)};p.T=function(b){if(void 0!==b){var c=I(b);if(c in this.f)return this.f[c];b=$a(this.f)?this.b:this.b.cloneNode(!1);return this.f[c]=b}return this.b};p.getKey=function(){return this.g};p.ie=function(){this.state=3;Ol(this);Ce(this)};
+p.je=function(){this.state=this.b.naturalWidth&&this.b.naturalHeight?2:4;Ol(this);Ce(this)};p.load=function(){0==this.state&&(this.state=1,Ce(this),this.c=[Q(this.b,"error",this.ie,this,!0),Q(this.b,"load",this.je,this,!0)],this.h(this,this.g))};function Ol(b){b.c.forEach(N);b.c=null};function Pl(b,c){R.call(this,b);this.feature=c}M(Pl,R);
+function Ql(b){xh.call(this,{handleDownEvent:Rl,handleEvent:Sl,handleUpEvent:Tl});this.P=null;this.o=!1;this.Ba=b.source?b.source:null;this.pa=b.features?b.features:null;this.Zc=b.snapTolerance?b.snapTolerance:12;this.D=b.type;this.b=Ul(this.D);this.na=b.minPoints?b.minPoints:this.b===Vl?3:2;this.ea=b.maxPoints?b.maxPoints:Infinity;var c=b.geometryFunction;if(!c)if("Circle"===this.D)c=function(b,c){var d=c?c:new Ll([NaN,NaN]),h=b[0],k=b[1],l=h[0]-k[0],h=h[1]-k[1];Ml(d,b[0],Math.sqrt(l*l+h*h));return d};
+else{var d,c=this.b;c===Xl?d=Mc:c===Yl?d=xl:c===Vl&&(d=Tc);c=function(b,c){var g=c;g?g.W(b):g=new d(b);return g}}this.u=c;this.B=this.i=this.a=this.j=this.g=this.h=null;this.gd=b.clickTolerance?b.clickTolerance*b.clickTolerance:36;this.Y=new Y({source:new Rj({useSpatialIndex:!1,wrapX:b.wrapX?b.wrapX:!1}),style:b.style?b.style:Zl()});this.Aa=b.geometryName;this.Ab=b.condition?b.condition:th;this.aa=b.freehandCondition?b.freehandCondition:uh;Q(this,rb("active"),this.Ja,this)}M(Ql,xh);
+function Zl(){var b=Li();return function(c){return b[c.M().U()]}}Ql.prototype.setMap=function(b){Ql.X.setMap.call(this,b);this.Ja()};function Sl(b){this.b!==Yl&&this.b!==Vl||!this.aa(b)||(this.o=!0);var c=!this.o;this.o&&b.type===Ag?($l(this,b),c=!1):b.type===zg?c=am(this,b):b.type===tg&&(c=!1);return yh.call(this,b)&&c}function Rl(b){return this.Ab(b)?(this.P=b.pixel,!0):this.o?(this.P=b.pixel,this.h||bm(this,b),!0):!1}
+function Tl(b){this.o=!1;var c=this.P,d=b.pixel,e=c[0]-d[0],c=c[1]-d[1],d=!0;e*e+c*c<=this.gd&&(am(this,b),this.h?this.b===cm?dm(this):em(this,b)?dm(this):$l(this,b):(bm(this,b),this.b===Xl&&dm(this)),d=!1);return d}
+function am(b,c){if(b.h){var d=c.coordinate,e=b.g.M(),f;b.b===Xl?f=b.a:b.b===Vl?(f=b.a[0],f=f[f.length-1],em(b,c)&&(d=b.h.slice())):(f=b.a,f=f[f.length-1]);f[0]=d[0];f[1]=d[1];b.u(b.a,e);b.j&&b.j.M().W(d);e instanceof Tc&&b.b!==Vl?(b.i||(b.i=new Dj(new xl(null))),0>=e.c.length?e=null:(d=new Lc(null),U(d,e.g,e.a.slice(0,e.c[0])),d.v(),e=d),d=b.i.M(),U(d,e.g,e.a),d.v()):b.B&&(d=b.i.M(),d.W(b.B));fm(b)}else e=c.coordinate.slice(),b.j?b.j.M().W(e):(b.j=new Dj(new Mc(e)),fm(b));return!0}
+function em(b,c){var d=!1;if(b.g){var e=!1,f=[b.h];b.b===Yl?e=b.a.length>b.na:b.b===Vl&&(e=b.a[0].length>b.na,f=[b.a[0][0],b.a[0][b.a[0].length-2]]);if(e)for(var e=c.map,g=0,h=f.length;g<h;g++){var k=f[g],l=Eh(e,k),m=c.pixel,d=m[0]-l[0],l=m[1]-l[1],m=b.o&&b.aa(c)?1:b.Zc;if(d=Math.sqrt(d*d+l*l)<=m){b.h=k;break}}}return d}
+function bm(b,c){var d=c.coordinate;b.h=d;b.b===Xl?b.a=d.slice():b.b===Vl?(b.a=[[d.slice(),d.slice()]],b.B=b.a[0]):(b.a=[d.slice(),d.slice()],b.b===cm&&(b.B=b.a));b.B&&(b.i=new Dj(new xl(b.B)));d=b.u(b.a);b.g=new Dj;b.Aa&&Fj(b.g,b.Aa);Ej(b.g,d);fm(b);S(b,new Pl("drawstart",b.g))}
+function $l(b,c){var d=c.coordinate,e=b.g.M(),f,g;if(b.b===Yl)b.h=d.slice(),g=b.a,g.push(d.slice()),f=g.length>b.ea,b.u(g,e);else if(b.b===Vl){g=b.a[0];g.push(d.slice());if(f=g.length>b.ea)b.h=g[0];b.u(b.a,e)}fm(b);f&&dm(b)}
+function dm(b){var c=gm(b),d=b.a,e=c.M();b.b===Yl?(d.pop(),b.u(d,e)):b.b===Vl&&(d[0].pop(),d[0].push(d[0][0]),b.u(d,e));"MultiPoint"===b.D?Ej(c,new zl([d])):"MultiLineString"===b.D?Ej(c,new yl([d])):"MultiPolygon"===b.D&&Ej(c,new Al([d]));S(b,new Pl("drawend",c));b.pa&&b.pa.push(c);b.Ba&&b.Ba.Cb(c)}function gm(b){b.h=null;var c=b.g;c&&(b.g=null,b.j=null,b.i=null,b.Y.V().clear(!0));return c}Ql.prototype.w=dc;
+function fm(b){var c=[];b.g&&c.push(b.g);b.i&&c.push(b.i);b.j&&c.push(b.j);b=b.Y.V();b.clear(!0);b.Db(c)}Ql.prototype.Ja=function(){var b=this.S,c=this.get("active");b&&c||gm(this);this.Y.setMap(c?b:null)};function Ul(b){var c;"Point"===b||"MultiPoint"===b?c=Xl:"LineString"===b||"MultiLineString"===b?c=Yl:"Polygon"===b||"MultiPolygon"===b?c=Vl:"Circle"===b&&(c=cm);return c}var Xl="Point",Yl="LineString",Vl="Polygon",cm="Circle";function hm(b,c,d,e,f,g,h,k,l,m,n){Be.call(this,f,0);this.u=void 0!==n?n:!1;this.s=h;this.o=k;this.c=null;this.f={};this.g=c;this.l=e;this.i=g?g:f;this.b=[];this.Sa=null;this.h=0;g=Je(e,this.i);k=this.l.C();f=this.g.C();g=k?$b(g,k):g;if(0===Ub(g))this.state=4;else if((k=b.C())&&(f?f=$b(f,k):f=k),k=e.I(this.i[0]),n=Yb(g),e=xc(d,b)(n,void 0,n.length),k=d.getPointResolution(k,n),n=pc(d),void 0!==n&&(k*=n),n=pc(b),void 0!==n&&(k/=n),e=b.getPointResolution(k,e)/k,isFinite(e)&&0<e&&(k/=e),e=k,!isFinite(e)||
+0>=e)this.state=4;else if(this.j=new Aj(b,d,g,f,e*(void 0!==m?m:.5)),0===this.j.c.length)this.state=4;else if(this.h=Qe(c,e),d=Cj(this.j),f&&(b.a?(d[1]=Ca(d[1],f[1],f[3]),d[3]=Ca(d[3],f[1],f[3])):d=$b(d,f)),Ub(d))if(b=Ke(c,d,this.h),100>b.ha()*(b.c-b.b+1)){for(c=b.a;c<=b.f;c++)for(d=b.b;d<=b.c;d++)(m=l(this.h,c,d,h))&&this.b.push(m);0===this.b.length&&(this.state=4)}else this.state=3;else this.state=4}M(hm,Be);hm.prototype.J=function(){1==this.state&&(this.Sa.forEach(N),this.Sa=null);hm.X.J.call(this)};
+hm.prototype.T=function(b){if(void 0!==b){var c=I(b);if(c in this.f)return this.f[c];b=$a(this.f)?this.c:this.c.cloneNode(!1);return this.f[c]=b}return this.c};
+hm.prototype.Uc=function(){var b=[];this.b.forEach(function(c){c&&2==c.N()&&b.push({extent:Je(this.g,c.L),image:c.T()})},this);this.b.length=0;if(0===b.length)this.state=3;else{var c=this.i[0],d=Pe(this.l,c),e=ea(d)?d:d[0],d=ea(d)?d:d[1],c=this.l.I(c),f=this.g.I(this.h),g=Je(this.l,this.i);this.c=zj(e,d,this.s,f,this.g.C(),c,g,this.j,b,this.o,this.u);this.state=2}Ce(this)};
+hm.prototype.load=function(){if(0==this.state){this.state=1;Ce(this);var b=0;this.Sa=[];this.b.forEach(function(c){var d=c.N();if(0==d||1==d){b++;var e;e=Q(c,"change",function(){var d=c.N();if(2==d||3==d||4==d)N(e),b--,0===b&&(this.Sa.forEach(N),this.Sa=null,this.Uc())},this);this.Sa.push(e)}},this);this.b.forEach(function(b){0==b.N()&&b.load()});0===b&&x.setTimeout(this.Uc.bind(this),0)}};function im(b){gk.call(this,{attributions:b.attributions,cacheSize:b.cacheSize,extent:b.extent,logo:b.logo,opaque:b.opaque,projection:b.projection,state:b.state,tileGrid:b.tileGrid,tileLoadFunction:b.tileLoadFunction?b.tileLoadFunction:jm,tilePixelRatio:b.tilePixelRatio,tileUrlFunction:b.tileUrlFunction,url:b.url,urls:b.urls,wrapX:b.wrapX});this.crossOrigin=void 0!==b.crossOrigin?b.crossOrigin:null;this.tileClass=void 0!==b.tileClass?b.tileClass:Nl;this.b={};this.o={};this.S=b.reprojectionErrorThreshold}
+M(im,gk);p=im.prototype;p.Qc=function(){if(ze(this.a))return!0;for(var b in this.b)if(ze(this.b[b]))return!0;return!1};p.Rc=function(b,c){var d=this.bb(b);Ae(this.a,this.a==d?c:{});for(var e in this.b){var f=this.b[e];Ae(f,f==d?c:{})}};p.kb=function(){return 0};p.Mb=function(b){return this.c&&b&&!wc(this.c,b)?!1:im.X.Mb.call(this,b)};p.la=function(b){var c=this.c;return!this.tileGrid||c&&!wc(c,b)?(c=I(b).toString(),c in this.o||(this.o[c]=Se(b)),this.o[c]):this.tileGrid};
+p.bb=function(b){var c=this.c;if(!c||wc(c,b))return this.a;b=I(b).toString();b in this.b||(this.b[b]=new ye);return this.b[b]};function km(b,c,d,e,f,g){c=[c,d,e];f=(d=Ye(b,c,g))?b.tileUrlFunction(d,f,g):void 0;f=new b.tileClass(c,void 0!==f?0:4,void 0!==f?f:"",b.crossOrigin,b.tileLoadFunction);f.key="";Q(f,"change",b.D,b);return f}
+function Tg(b,c,d,e,f,g){if(b.c&&g&&!wc(b.c,g)){var h=b.bb(g);d=[c,d,e];c=b.lb.apply(b,d);if(we(h,c))return h.get(c);var k=b.c;e=b.la(k);var l=b.la(g),m=Ye(b,d,g);b=new hm(k,e,g,l,d,m,b.mb(f),0,function(b,c,d,e){return lm(this,b,c,d,e,k)}.bind(b),b.S,!1);h.set(c,b);return b}return lm(b,c,d,e,f,g)}
+function lm(b,c,d,e,f,g){var h=null,k=b.lb(c,d,e);if(we(b.a,k)){if(h=b.a.get(k),""!=h.key){var l=h;h.a&&""==h.a.key?(h=h.a,2==l.N()&&(h.a=l)):(h=km(b,c,d,e,f,g),2==l.N()?h.a=l:l.a&&2==l.a.N()&&(h.a=l.a,l.a=null));h.a&&(h.a.a=null);b.a.replace(k,h)}}else h=km(b,c,d,e,f,g),b.a.set(k,h);return h}function jm(b,c){b.T().src=c};function mm(b){var c=void 0!==b.projection?b.projection:"EPSG:3857",d;if(void 0!==b.tileGrid)d=b.tileGrid;else{d={extent:Te(c),maxZoom:b.maxZoom,minZoom:b.minZoom,tileSize:b.tileSize};var e={};Wa(e,void 0!==d?d:{});void 0===e.extent&&(e.extent=lc("EPSG:3857").C());e.resolutions=Ue(e.extent,e.maxZoom,e.tileSize);delete e.maxZoom;d=new Fe(e)}im.call(this,{attributions:b.attributions,cacheSize:b.cacheSize,crossOrigin:b.crossOrigin,logo:b.logo,opaque:b.opaque,projection:c,reprojectionErrorThreshold:b.reprojectionErrorThreshold,
+tileGrid:d,tileLoadFunction:b.tileLoadFunction,tilePixelRatio:b.tilePixelRatio,tileUrlFunction:b.tileUrlFunction,url:b.url,urls:b.urls,wrapX:void 0!==b.wrapX?b.wrapX:!0})}M(mm,im);function nm(b){b=b||{};var c;void 0!==b.attributions?c=b.attributions:c=[om];mm.call(this,{attributions:c,cacheSize:b.cacheSize,crossOrigin:void 0!==b.crossOrigin?b.crossOrigin:"anonymous",opaque:void 0!==b.opaque?b.opaque:!0,maxZoom:void 0!==b.maxZoom?b.maxZoom:19,reprojectionErrorThreshold:b.reprojectionErrorThreshold,tileLoadFunction:b.tileLoadFunction,url:void 0!==b.url?b.url:"https://{a-c}.tile.openstreetmap.org/{z}/{x}/{y}.png",wrapX:b.wrapX})}M(nm,mm);var om=new jd({html:'&copy; <a href="http://www.openstreetmap.org/copyright">OpenStreetMap</a> contributors.'});function pm(b){b=b||{};var c=qm[b.layer];this.u=b.layer;mm.call(this,{attributions:c.attributions,cacheSize:b.cacheSize,crossOrigin:"anonymous",logo:"https://developer.mapquest.com/content/osm/mq_logo.png",maxZoom:c.maxZoom,reprojectionErrorThreshold:b.reprojectionErrorThreshold,opaque:c.opaque,tileLoadFunction:b.tileLoadFunction,url:void 0!==b.url?b.url:"https://otile{1-4}-s.mqcdn.com/tiles/1.0.0/"+this.u+"/{z}/{x}/{y}.jpg"})}M(pm,mm);
+var rm=new jd({html:'Tiles Courtesy of <a href="http://www.mapquest.com/">MapQuest</a>'}),qm={osm:{maxZoom:19,opaque:!0,attributions:[rm,om]},sat:{maxZoom:18,opaque:!0,attributions:[rm,new jd({html:"Portions Courtesy NASA/JPL-Caltech and U.S. Depart. of Agriculture, Farm Service Agency"})]},hyb:{maxZoom:18,opaque:!1,attributions:[rm,om]}};function sm(b){b=b||{};im.call(this,{attributions:b.attributions,cacheSize:b.cacheSize,crossOrigin:b.crossOrigin,logo:b.logo,projection:b.projection,reprojectionErrorThreshold:b.reprojectionErrorThreshold,tileGrid:b.tileGrid,tileLoadFunction:b.tileLoadFunction,url:b.url,urls:b.urls,wrapX:void 0!==b.wrapX?b.wrapX:!0});this.P=b.params||{};this.u=Jb()}M(sm,im);sm.prototype.mb=function(b){return b};
+sm.prototype.g=function(b,c,d){var e=this.tileGrid;e||(e=this.la(d));if(!(e.Nb().length<=b[0])){var f=Je(e,b,this.u),g=tb(Pe(e,b[0]),this.h);1!=c&&(g=sb(g,c,this.h));e={F:"image",FORMAT:"PNG32",TRANSPARENT:!0};Wa(e,this.P);var h;var k=this.urls;if(k){d=d.qa.split(":").pop();e.SIZE=g[0]+","+g[1];e.BBOX=f.join(",");e.BBOXSR=d;e.IMAGESR=d;e.DPI=Math.round(e.DPI?e.DPI*c:90*c);b=[(1==k.length?k[0]:k[Ea((b[1]<<b[0])+b[2],k.length)]).replace(/MapServer\/?$/,"MapServer/export").replace(/ImageServer\/?$/,
+"ImageServer/exportImage")];for(h in e)Kl(h,e[h],b);b[1]&&(h=b[0],c=h.indexOf("#"),0<=c&&(b.push(h.substr(c)),b[0]=h=h.substr(0,c)),c=h.indexOf("?"),0>c?b[1]="?":c==h.length-1&&(b[1]=void 0));h=b.join("")}else h=void 0;return h}};F("ol.format.GeoJSON",Hl,OPENLAYERS);Hl.prototype.readFeatures=Hl.prototype.b;Hl.prototype.readFeature=Hl.prototype.g;F("ol.format.EsriJSON",Bl,OPENLAYERS);Bl.prototype.readFeatures=Bl.prototype.b;Bl.prototype.readFeature=Bl.prototype.g;F("ol.style.Style",Fi,OPENLAYERS);F("ol.style.Circle",Ei,OPENLAYERS);F("ol.style.Fill",yi,OPENLAYERS);F("ol.style.Stroke",Di,OPENLAYERS);F("ol.style.Icon",Vg,OPENLAYERS);F("ol.View",V,OPENLAYERS);V.prototype.on=V.prototype.ba;V.prototype.getZoom=V.prototype.wd;
+V.prototype.setZoom=V.prototype.Ee;V.prototype.getCenter=V.prototype.ia;V.prototype.setCenter=V.prototype.oa;V.prototype.calculateExtent=V.prototype.jc;V.prototype.getProjection=V.prototype.le;V.prototype.fit=V.prototype.nd;F("ol.control.defaults",ef,OPENLAYERS);F("ol.layer.Tile",X,OPENLAYERS);X.prototype.getVisible=X.prototype.cb;X.prototype.setVisible=X.prototype.Gc;X.prototype.getZIndex=X.prototype.Vb;X.prototype.setZIndex=X.prototype.Hc;X.prototype.getOpacity=X.prototype.Ub;
+X.prototype.setOpacity=X.prototype.Fc;X.prototype.getSource=X.prototype.V;X.prototype.setSource=X.prototype.Zb;F("ol.layer.Vector",Y,OPENLAYERS);Y.prototype.getVisible=Y.prototype.cb;Y.prototype.setVisible=Y.prototype.Gc;Y.prototype.getSource=Y.prototype.V;Y.prototype.setStyle=Y.prototype.s;Y.prototype.getZIndex=Y.prototype.Vb;Y.prototype.setZIndex=Y.prototype.Hc;Y.prototype.getOpacity=Y.prototype.Ub;Y.prototype.setOpacity=Y.prototype.Fc;Y.prototype.getSource=Y.prototype.V;Y.prototype.setSource=Y.prototype.Zb;
+F("ol.source.OSM",nm,OPENLAYERS);nm.prototype.refresh=nm.prototype.wa;F("ol.source.MapQuest",pm,OPENLAYERS);pm.prototype.refresh=pm.prototype.wa;F("ol.source.XYZ",mm,OPENLAYERS);mm.prototype.refresh=mm.prototype.wa;mm.prototype.setUrl=mm.prototype.s;mm.prototype.refresh=mm.prototype.wa;F("ol.Map",Z,OPENLAYERS);Z.prototype.on=Z.prototype.ba;Z.prototype.getTarget=Z.prototype.Tb;Z.prototype.getTargetElement=Z.prototype.Na;Z.prototype.getView=Z.prototype.O;Z.prototype.addOverlay=Z.prototype.ld;
+Z.prototype.addLayer=Z.prototype.kd;Z.prototype.removeLayer=Z.prototype.Ae;Z.prototype.getEventPixel=Z.prototype.vc;Z.prototype.hasFeatureAtPixel=Z.prototype.Td;Z.prototype.getSize=Z.prototype.Pa;Z.prototype.updateSize=Z.prototype.vb;Z.prototype.forEachFeatureAtPixel=Z.prototype.pd;Z.prototype.addInteraction=Z.prototype.jd;Z.prototype.removeInteraction=Z.prototype.ze;Z.prototype.beforeRender=Z.prototype.fa;Z.prototype.addControl=Z.prototype.hd;F("ol.source.Vector",Rj,OPENLAYERS);
+Rj.prototype.getFeatures=Rj.prototype.pe;Rj.prototype.getExtent=Rj.prototype.C;Rj.prototype.refresh=Rj.prototype.wa;Rj.prototype.addFeatures=Rj.prototype.Db;Rj.prototype.addFeature=Rj.prototype.Cb;Rj.prototype.clear=Rj.prototype.clear;Rj.prototype.forEachFeature=Rj.prototype.od;Rj.prototype.refresh=Rj.prototype.wa;F("ol.source.TileArcGISRest",sm,OPENLAYERS);sm.prototype.refresh=sm.prototype.wa;F("ol.Overlay",nl,OPENLAYERS);nl.prototype.setPosition=nl.prototype.Ec;F("ol.Feature",Dj,OPENLAYERS);
+Dj.prototype.getProperties=Dj.prototype.za;Dj.prototype.setProperties=Dj.prototype.l;Dj.prototype.getGeometry=Dj.prototype.M;F("ol.geom.Point",Mc,OPENLAYERS);Mc.prototype.transform=Mc.prototype.o;Mc.prototype.getCoordinates=Mc.prototype.ra;Mc.prototype.getExtent=Mc.prototype.C;F("ol.geom.Polygon",Tc,OPENLAYERS);Tc.prototype.getCoordinates=Tc.prototype.ra;Tc.prototype.getExtent=Tc.prototype.C;Tc.prototype.transform=Tc.prototype.o;F("ol.geom.LineString",xl,OPENLAYERS);xl.prototype.getCoordinates=xl.prototype.ra;
+xl.prototype.getExtent=xl.prototype.C;xl.prototype.transform=xl.prototype.o;F("ol.proj.Projection",ic,OPENLAYERS);ic.prototype.getCode=ic.prototype.l;F("ol.interaction.Draw",Ql,OPENLAYERS);Ql.prototype.on=Ql.prototype.ba;F("ol.animation.pan",cd,OPENLAYERS);F("ol.control.FullScreen",kf,OPENLAYERS);
   return OPENLAYERS.ol;
 }));
 
diff --git a/lib/olHelpers/quickMap.js b/lib/olHelpers/quickMap.js
index 8dea49cff377bdcd34a23c410f0358409afe30b6..9d626a56ab6449be7cc7a9d9e94807e52d6a629c 100644
--- a/lib/olHelpers/quickMap.js
+++ b/lib/olHelpers/quickMap.js
@@ -41,6 +41,7 @@ var nm = (0, _provide2.default)('olHelpers');
  * @param {number} [options.minZoom=undefined] min zoom
  * @param {number} [options.maxZoom=undefined] max zoom
  * @param {boolean} [options.baseSwitcher=true] if add base map switcher
+ * @param {boolean} [options.fullScreen=false] if add base map switcher
  * @returns {ol.Map} the ol map
  */
 function quickMap(options) {
diff --git a/lib/olHelpers/quickMapBase.js b/lib/olHelpers/quickMapBase.js
index d826f96313dc0325d7bc062ebf8693aaf72a2783..f7c2b1e8b49faad19fb0a99dbe3a7e5a2f9b712b 100644
--- a/lib/olHelpers/quickMapBase.js
+++ b/lib/olHelpers/quickMapBase.js
@@ -12,14 +12,6 @@ var _provide = require('../util/provide');
 
 var _provide2 = _interopRequireDefault(_provide);
 
-var _mapMove = require('./mapMove');
-
-var _mapMove2 = _interopRequireDefault(_mapMove);
-
-var _mapPopup = require('./mapPopup');
-
-var _mapPopup2 = _interopRequireDefault(_mapPopup);
-
 var _ol = require('../ol/ol');
 
 var _ol2 = _interopRequireDefault(_ol);
@@ -41,6 +33,7 @@ var nm = (0, _provide2.default)('olHelpers');
  * @param {number} [options.minZoom=undefined] min zoom
  * @param {number} [options.maxZoom=undefined] max zoom
  * @param {boolean} [options.baseSwitcher=true] if add base map switcher
+ * @param {boolean} [options.fullScreen=false] if add base map switcher
  * @returns {ol.Map} the ol map
  */
 /**
@@ -59,6 +52,7 @@ function quickMapBase(options) {
     options.center.y = typeof options.center.y == 'number' ? options.center.y : 5574910;
     options.zoom = typeof options.zoom == 'number' ? options.zoom : 7;
     options.baseSwitcher = typeof options.baseSwitcher == 'boolean' ? options.baseSwitcher : true;
+    options.fullScreen = typeof options.fullScreen == 'boolean' ? options.fullScreen : false;
 
     var $mapDiv = (0, _jquery2.default)('#' + options.divId);
     $mapDiv.css('position', 'relative');
@@ -102,7 +96,7 @@ function quickMapBase(options) {
         options.center.y = coordinates[1];
     }
 
-    return new _ol2.default.Map({
+    var map = new _ol2.default.Map({
         layers: [osmLayer, satLayer],
         target: options.divId,
         controls: _ol2.default.control.defaults({
@@ -115,6 +109,12 @@ function quickMapBase(options) {
             maxZoom: options.maxZoom
         })
     });
+
+    if (options.fullScreen) {
+        map.addControl(new _ol2.default.control.FullScreen());
+    }
+
+    return map;
 }
 
 nm.quickMapBase = quickMapBase;
diff --git a/lib/olHelpers/quickMapMulti.js b/lib/olHelpers/quickMapMulti.js
index ca0462ce751b6ab1f3b07d928d4b138fe0e59369..443fba045e9491086020fe51e7b06c0fd8b2c4be 100644
--- a/lib/olHelpers/quickMapMulti.js
+++ b/lib/olHelpers/quickMapMulti.js
@@ -48,6 +48,7 @@ var nm = (0, _provide2.default)('olHelpers');
  * @param {number} [options.minZoom=undefined] min zoom
  * @param {number} [options.maxZoom=undefined] max zoom
  * @param {boolean} [options.baseSwitcher=true] if add base map switcher
+ * @param {boolean} [options.fullScreen=false] if add base map switcher
  * @returns {quickMapMultiReturn} return map, map move, and map popup objects
  */
 function quickMapMulti(options) {
diff --git a/package.json b/package.json
index 075523678bef20c17f182a8b6b84e74320796a50..49c1ced7f10b894d345bf43dbfbfca2b189e45d3 100644
--- a/package.json
+++ b/package.json
@@ -2,7 +2,7 @@
   "name": "webmapsjs",
   "version": "1.0.0",
   "description": "Openlayers helpers",
-  "main": "lib",
+  "main": "lib/index.js",
   "files": [
     "lib",
     "doc",
@@ -12,11 +12,10 @@
   ],
   "scripts": {
     "test": "node node_modules\\karma\\bin\\karma start karma.conf.js",
-    "ol": "node node_modules/openlayers/tasks/build.js src/ol/ol-config.json src/ol/ol-build.js",
+    "ol": "node node_modules/openlayers/tasks/build.js src/ol/ol-config.json src/ol/ol-build.js & COPY /Y src\\ol\\ol-build.js lib\\ol\\ol-build.js",
     "lint": "eslint src/**/*.js",
     "jsdoc": "jsdoc -r -d doc src",
-    "src2lib": "babel src --out-dir lib --ignore ol-build.js --presets es2015 --plugins add-module-exports & COPY /Y src\\ol\\ol-build.js lib\\ol\\ol-build.js",
-    "copy": "xcopy /y /s src ..\\..\\src\\"
+    "src2lib": "babel src --out-dir lib --ignore ol-build.js --presets es2015 --plugins add-module-exports"
   },
   "author": "TOPS Lab",
   "license": "ISC",
diff --git a/projects/itsMap.js b/projects/itsMap.js
index 0b4b839cfcdabb29b4a76c40a518701d6795468d..1a721a32e6d7bfe46e7c9d592e672ed6f59a1704 100644
--- a/projects/itsMap.js
+++ b/projects/itsMap.js
@@ -3,19 +3,14 @@
  */
 require('babel-polyfill');
 
-import quickMap from '../lib/olHelpers/quickMap';
 
+import quickMap from '../lib/olHelpers/quickMap';
 
-// import quickMap from '../src/olHelpers/quickMap';
-import mapMove from '../src/olHelpers/mapMove';
-import mapPopup from '../src/olHelpers/mapPopup';
 import ItsLayerCollection from '../src/collections/ItsLayerCollection';
 import LayerLegend from '../src/collections/LayerLegend';
 
 
 let map = quickMap();
-mapMove.init(map);
-mapPopup.init(map);
 
 
 let itsLayerCollection = new ItsLayerCollection(map);
diff --git a/src/collections/ItsLayerCollection.js b/src/collections/ItsLayerCollection.js
index 84fbb9cbe86c762931a6889f368cbbdf57a0d70c..f9ffe417ebac8e4b75f993b7a7ebd40bf892eba4 100644
--- a/src/collections/ItsLayerCollection.js
+++ b/src/collections/ItsLayerCollection.js
@@ -54,27 +54,6 @@ let itsConfig = [
     {name: 'Ramp Meter', itsType: 'meter', minZoom: 10, itsIcon: 'rampmeter.png', visible: false},
     {name: 'Signal', itsType: 'signal', minZoom: 13, itsIcon: 'signal.png', visible: false, onDemand: true},
     {name: 'Tower', itsType: 'tower', minZoom: 10, itsIcon: 'tower.png', visible: false},
-    //{
-    //    name: 'Trench',
-    //    itsType: 'trench',
-    //    onDemand: true,
-    //    visible: false,
-    //    onDemandDelay: 500,
-    //    minZoom: 15,
-    //    itsLineConfig: {
-    //        prop: 'installType',
-    //        //defaultName: 'Other',
-    //        //defaultWidth: 7,
-    //        defaultColor: colors.hexAlphaToRgbOrRgba('#747474', 0.8),
-    //        lineArray: [
-    //            ['asc', 'Aerial Strand', colors.hexAlphaToRgbOrRgba('#FF0000', 0.7)],
-    //            ['udbc', 'Directional Bore', colors.hexAlphaToRgbOrRgba('#0509FF', 0.7)],
-    //            ['utc', 'Underground', colors.hexAlphaToRgbOrRgba('#FF00ED', 0.7)],
-    //            ['utd', 'Underground - Design', colors.hexAlphaToRgbOrRgba('#A50095', 0.7)]
-    //        ]
-    //    }
-    //},
-
     {
         name: 'Trench',
         itsType: 'trench',
@@ -102,18 +81,6 @@ let itsConfig = [
         }
     }
 
-    //    {
-    //    name: 'Trench',
-    //    itsType: 'trench',
-    //    onDemand: true,
-    //    visible: false,
-    //    onDemandDelay: 500,
-    //    minZoom: 15,
-    //    itsLineStyle: {
-    //        color: '#FF0000',
-    //        width: 7
-    //    }
-    //}
 
 ];
 
diff --git a/src/gulp-helpers.js b/src/gulp-helpers.js
index 572029987cc9de35193b32e78dae6d9ee0549984..2ed331ff200c32a2324c88bd3c41969d08502677 100644
--- a/src/gulp-helpers.js
+++ b/src/gulp-helpers.js
@@ -44,7 +44,7 @@ function _processOutDir(outputFile) {
 
 /**
  *
- * @param {string|null} inputFile - input file set to null to bundle everything in 'test' directory
+ * @param {string} inputFile - input file set to null to bundle everything in 'test' directory
  * @param {dirNameFilePath|string} outFile - output file as string or path object
  * @param {boolean} [production=false] if production, minify and don't watch
  * @returns {*} the stream
@@ -59,8 +59,8 @@ export function bundleEs2015(inputFile, outFile, production) {
 
     production = typeof production == 'boolean' ? production : false;
 
-    if (inputFile == null) {
-        inputFile = glob.sync('./spec/**/*.js');
+    if (inputFile.indexOf('*') > -1) {
+        inputFile = glob.sync(inputFile);
     }
 
 
@@ -153,7 +153,7 @@ export function processLessFile(inputFile, outputFile) {
 export function bundleEs2015Multiple(fileArray, production) {
     "use strict";
 
-    let outStream;
+    let outStream = undefined;
 
     for (let f of fileArray) {
         outStream = bundleEs2015(f[0], f[1], production);
diff --git a/src/jquery-plugin/rp-picker.js b/src/jquery-plugin/rp-picker.js
deleted file mode 100644
index db6df9d12aed8777462a2dedd227f650608e1961..0000000000000000000000000000000000000000
--- a/src/jquery-plugin/rp-picker.js
+++ /dev/null
@@ -1,511 +0,0 @@
-import $ from '../jquery';
-import quickMap from '../olHelpers/quickMap';
-import quickMapMulti from '../olHelpers/quickMapMulti';
-import SortedFeatures from '../olHelpers/SortedFeatures';
-import LayerBaseVectorGeoJson from '../layers/LayerBaseVectorGeoJson';
-import LayerEsriMapServer from '../layers/LayerEsriMapServer';
-import provide from '../util/provide';
-import ol from '../ol/ol';
-const nm = provide('ssa');
-
-/**
- * @callback rpSetCallback
- * @param {string} rpId
- * @param rpFeature
- */
-
-
-/**
- * take the verbose string and turn it into a padded 00 and direction hwy
- * @param {string} inputString the input string
- * @returns {string} converted highway string
- */
-function highwayConvert(inputString) {
-    "use strict";
-    inputString = inputString.trim();
-    let numMatch = inputString.match(/\d+/);
-
-    if (numMatch.length == 0) {
-        throw "highway id can't be parsed " + inputString;
-    }
-
-    let hwy = numMatch[0];
-
-    //leading Pad
-    while (hwy.length < 3) {
-        hwy = '0' + hwy;
-    }
-
-    let dirMatch = inputString.match(/[SNEW]B$/);
-
-    if (dirMatch.length == 0) {
-        throw "highway id can't be parsed " + inputString;
-    }
-
-    return hwy + dirMatch[0][0];
-}
-
-class RpPicker {
-
-    /**
-     * constructor for the date range
-     * @param {jQuery} jQueryRef reference to the jquery element
-     * @param {string} url the rp service url
-     */
-    constructor(jQueryRef, url) {
-
-        this._rpUrl = url;
-        this._$container = jQueryRef;
-        this._parentId = this._$container[0].id;
-        this._mapDivId = this._parentId + '-map';
-        this._mapContainerId = this._parentId + '-map-container';
-        this._$container.addClass('rp-picker-container');
-
-        this._rpSetCallback = function (rpId, rpFeature) {
-        };
-
-        /**
-         *
-         * @type {Array<RpPicker>}
-         * @private
-         */
-        this._otherPickerArray = [];
-
-        /**
-         *
-         * @type {Map}
-         * @private
-         */
-        this._pickerMap = undefined;
-
-        /**
-         * @type MapMoveCls
-         * @private
-         */
-        this._pickerMapMove = undefined;
-
-        /**
-         * @type MapPopupCls
-         * @private
-         */
-        this._pickerMapPopup = undefined;
-
-        /**
-         *
-         * @type {Array<number>}
-         * @private
-         */
-        this._extent = [];
-
-        /**
-         *
-         * @type {boolean}
-         * @private
-         */
-        this._visible = false;
-
-        /**
-         *
-         * @type {boolean}
-         * @private
-         */
-        this._enabled = false;
-
-        /**
-         * @type {string}
-         * @private
-         */
-        this._referencePointId = undefined;
-        //this._referencePointFeature = undefined;
-
-        /**
-         *
-         * @type {LayerBaseVectorGeoJson}
-         * @private
-         */
-        this._rpLayer = new LayerBaseVectorGeoJson('',
-            {
-                minZoom: 7,
-                mapMoveObj: this._pickerMapMove,
-                name: 'Reference Points',
-                transform: {dataProjection: 'EPSG:3857', featureProjection: 'EPSG:3857'},
-                style: new ol.style.Style({
-                    image: new ol.style.Circle({
-                        radius: 7,
-                        fill: new ol.style.Fill({color: 'rgba(0, 0, 255, 0.5)'}),
-                        stroke: new ol.style.Stroke({color: 'blue', width: 2})
-                    })
-                })
-            }
-        );
-
-        this._rpSelectionLayer = new ol.layer.Vector({
-            source: new ol.source.Vector(),
-            style: new ol.style.Style({
-                image: new ol.style.Circle({
-                    radius: 8,
-                    fill: new ol.style.Fill({color: 'rgba(255, 0, 0, 0.7)'}),
-                    stroke: new ol.style.Stroke({color: 'red', width: 2})
-                })
-            })
-        });
-
-        this._rpOtherLayer = new ol.layer.Vector({
-            source: new ol.source.Vector(),
-            style: new ol.style.Style({
-                image: new ol.style.Circle({
-                    radius: 8,
-                    fill: new ol.style.Fill({color: 'rgba(0, 255, 0, 0.7)'}),
-                    stroke: new ol.style.Stroke({color: 'green', width: 2})
-                })
-            })
-        });
-
-        this._rpOtherFeature = undefined;
-
-        /**
-         *
-         * @type {SortedFeatures|null}
-         * @private
-         */
-        this._sortedFeatures = null;
-
-        let pickerHtml = `<div title="Reference Point Picker" class="rp-picker-static"><select disabled="disabled" ></select></div>` +
-            `<div id="${this._mapContainerId}" class="rp-popup-container">` +
-            '<div class="rp-picker-container-top">' +
-            `<button class="container-head-close-button container-head-button">Close</button>` +
-            `<button class="container-head-clear-button container-head-button">Clear</button>` +
-            `<span class="container-head-rp-id container-head-span"></span>` +
-            `<span class="container-head-coordinates container-head-span"></span>` +
-            '</div>' +
-            `<div id="${this._mapDivId}" class="rp-picker-map"></div>` +
-            `</div>` +
-            '';
-
-        this._$container.append(pickerHtml);
-        this._$rpSelect = this._$container.find('select');
-        let $selectorDiv = this._$container.find('.rp-picker-static');
-
-        this._$mapContainer = this._$container.find('#' + this._mapContainerId);
-        this._$closeButton = this._$container.find('.container-head-close-button');
-        this._$clearButton = this._$container.find('.container-head-clear-button');
-        this._$containerHeadRpId = this._$container.find('.container-head-rp-id');
-        this._$containerHeadCoordinates = this._$container.find('.container-head-coordinates');
-
-        this._$clearButton.click(() => {
-            this.referencePointId = undefined;
-        });
-
-        this._$rpSelect.click((evt) => {
-            this._closeOtherPickers();
-            $selectorDiv.trigger('click');
-            $selectorDiv.trigger('click');
-            evt.stopPropagation();
-        });
-
-        this._$rpSelect.change(() => {
-            this.referencePointId = this._$rpSelect.val();
-        }).keyup(() => {
-            if (this.referencePointId != this._$rpSelect.val()){
-                this._$rpSelect.trigger('change');
-            }
-        });
-
-        // open the map container
-        $selectorDiv.click(() => {
-            if (!this._enabled) {
-                return;
-            }
-
-            //if (this.visible) {
-            //    this.visible = false;
-            //    return;
-            //}
-
-            this.visible = true;
-
-            // initialize on first show
-            if (!this._pickerMap) {
-                this._mapInit();
-            }
-        });
-
-        this._$closeButton.click((evt) => {
-            this.visible = false;
-            evt.stopPropagation();
-        });
-    }
-
-    /**
-     *
-     * @private
-     */
-    _mapInit() {
-        let multiMap = quickMapMulti({
-            divId: this._mapDivId,
-            minZoom: 6,
-            zoom: 6,
-            baseSwitcher: false
-        });
-
-        this._pickerMap = multiMap.map;
-        this._pickerMapMove = multiMap.mapMove;
-        this._pickerMapPopup = multiMap.mapPopup;
-
-        // add the other selected feature if it has been defined
-        if (this.otherFeature) {
-            this.otherFeature = this.otherFeature;
-            //this._rpOtherLayer.getSource().addFeature(this.otherFeature);
-        }
-
-        let metamanagerSegments = new LayerEsriMapServer(
-            'http://transportal.cee.wisc.edu/applications/arcgis2/rest/services/MetaManager/MM_All_Segments/MapServer',
-            {
-                minZoom: 7,
-                visible: true,
-                name: 'Metamanager Segments',
-                opacity: 0.7
-            });
-
-        // add the layers to the map
-        this._pickerMap.addLayer(metamanagerSegments.olLayer);
-        this._pickerMap.addLayer(this._rpLayer.olLayer);
-        this._pickerMap.addLayer(this._rpSelectionLayer);
-        this._pickerMap.addLayer(this._rpOtherLayer);
-
-        // configure the popup response function
-        this._pickerMapPopup.addVectorPopup(this._rpLayer, function (props) {
-            return `<input type="button" id='${props['rpId']}' class="select-rp-btn" value="Select"/>&nbsp;` + props['rpId'];
-        });
-
-        // add the popup change function to find the select button
-        this._pickerMapPopup.addPopupChangedFunction(() => {
-            let selectButton = $('.select-rp-btn');
-            if (selectButton.length > 0) {
-                let _this = this;
-                selectButton.click(function () {
-                    _this.referencePointId = this.id;
-                });
-            }
-        });
-
-        this._setMapExtent();
-    }
-
-
-    /**
-     * get the picker visibility
-     * @returns {boolean} is visible
-     */
-    get visible() {
-        return this._visible;
-    }
-
-    /**
-     * set the picker visibility
-     * @param {boolean} vis is visible
-     */
-    set visible(vis) {
-        if (this.visible === vis) {
-            return;
-        }
-        if (vis) {
-            this._$mapContainer.show();
-            this._closeOtherPickers();
-        } else {
-            this._$mapContainer.hide();
-            this._pickerMapPopup.closePopup();
-        }
-        this._visible = vis;
-    }
-
-    /**
-     *
-     * @returns {Array.<number>} extent array
-     */
-    get extent() {
-        return this._extent;
-    }
-
-    /**
-     *
-     * @param {Array.<number>} newExtent - extent array
-     */
-    set extent(newExtent) {
-        this._extent = newExtent;
-        if (this._pickerMap) {
-            this._setMapExtent();
-        }
-    }
-
-    _setMapExtent() {
-        if (this._extent) {
-            this._pickerMap.getView().fit(this._extent, this._pickerMap.getSize());
-            //this._pickerMap.getView().setZoom(this._pickerMap.getView().getZoom());
-        }
-    }
-
-    /**
-     *
-     * @returns {string|undefined} ref point id
-     */
-    get referencePointId() {
-        return this._referencePointId;
-    }
-
-    /**
-     *
-     * @param {string|undefined} newRef - new ref id
-     */
-    set referencePointId(newRef) {
-
-        if (newRef == this.referencePointId) {
-            return;
-        }
-
-        this._referencePointId = newRef;
-
-        this._rpSelectionLayer.getSource().clear();
-
-        if (this.referencePointId == undefined) {
-            //this._$spanTextElement.val('');
-            this._$containerHeadRpId.html('');
-            this._$containerHeadCoordinates.html('');
-            this._rpSetCallback(this.referencePointId, undefined);
-            if (this._pickerMapPopup) {
-                this._pickerMapPopup.closePopup();
-            }
-
-            return;
-        }
-
-        let selectedFeature = this._sortedFeatures.getFeature(this.referencePointId);
-
-        this._rpSelectionLayer.getSource().addFeature(selectedFeature);
-        this._$rpSelect.val(this.referencePointId);
-        let featureCopy = selectedFeature.clone();
-        featureCopy.getGeometry().transform('EPSG:3857', 'EPSG:4326');
-        let lon = featureCopy.getGeometry().getCoordinates()[0];
-        let lat = featureCopy.getGeometry().getCoordinates()[1];
-
-        this._$containerHeadRpId.html(this.referencePointId);
-        this._$containerHeadCoordinates.html(`${lat.toFixed(5)}, ${lon.toFixed(5)}`);
-        this._rpSetCallback(this.referencePointId, selectedFeature);
-    }
-
-    get otherFeature() {
-        return this._rpOtherFeature;
-    }
-
-    set otherFeature(otherFeature) {
-        this._rpOtherFeature = otherFeature;
-
-        if (this._rpOtherLayer) {
-            this._rpOtherLayer.getSource().clear();
-            if (otherFeature) {
-                this._rpOtherLayer.getSource().addFeature(otherFeature);
-            }
-        }
-    }
-
-    /**
-     *
-     * @param {rpSetCallback} newCallback - new callback function
-     */
-    set rpSetCallback(newCallback) {
-        this._rpSetCallback = newCallback;
-    }
-
-    /**
-     *
-     * @param {RpPicker} otherPicker - the other picker in the group
-     */
-    addOtherPicker(otherPicker) {
-        this._otherPickerArray.push(otherPicker);
-    }
-
-    _closeOtherPickers() {
-        for (let p of this._otherPickerArray) {
-            p.visible = false;
-        }
-    }
-
-    /**
-     *
-     * @returns {boolean} if eneabled
-     * @private
-     */
-    get enabled() {
-        return this._enabled;
-    }
-
-    /**
-     *
-     * @param {boolean} isEnabled - if enabled
-     * @private
-     */
-    set enabled(isEnabled) {
-        this._enabled = isEnabled;
-        this._$rpSelect.prop('disabled', !this._enabled);
-
-        if (!this._enabled) {
-            this.visible = false;
-        }
-    }
-
-    /**
-     *
-     * @param {string} county - the county
-     * @param {string} highway - the highway
-     * @param {string} [rp=undefined] - the reference point
-     */
-    setCountyAndHighway(county, highway, rp) {
-
-        highway = highwayConvert(highway);
-
-        $.get(this._rpUrl, {'county': county, 'highway': highway}, (d) => {
-            /**
-             * @type Array<object>
-             */
-            this._rpLayer.addFeatures(d);
-            this._sortedFeatures = new SortedFeatures(this._rpLayer.source.getFeatures(), 'rpId');
-
-            let rpArray = [];
-            this._$rpSelect.html('');
-
-            for (let f of this._sortedFeatures.sortedFeatures) {
-                let rpId = f.getProperties()['rpId'];
-                if (rpArray.indexOf(rpId) < 0) {
-                    rpArray.push(rpId);
-                    this._$rpSelect.append(`<option>${rpId}</option>`);
-                }
-            }
-            this.enabled = true;
-            this.extent = this._rpLayer.source.getExtent();
-            if (rp){
-                this.referencePointId = rp;
-            }
-        }, 'json');
-    }
-
-    clear(){
-        this.referencePointId = undefined;
-        this._$rpSelect.html('');
-        this._rpLayer.clear();
-        this.enabled = false;
-    }
-}
-
-nm.RpPicker = RpPicker;
-
-/**
- * Adds rp picker
- * @param {string} serviceUrl url for the points
- * @returns {RpPicker} a reference picker
- */
-$.fn.rpPicker = function (serviceUrl) {
-    return new RpPicker(this, serviceUrl);
-};
-
-export default undefined;
-
diff --git a/src/jquery-plugin/ssa-corridor-picker.js b/src/jquery-plugin/ssa-corridor-picker.js
deleted file mode 100644
index ba3aa0545722059e9782333eaae4f40ec3cc35e4..0000000000000000000000000000000000000000
--- a/src/jquery-plugin/ssa-corridor-picker.js
+++ /dev/null
@@ -1,734 +0,0 @@
-import $ from '../jquery';
-
-import quickMap from '../olHelpers/quickMap';
-import quickMapMulti from '../olHelpers/quickMapMulti';
-import LayerBaseVectorEsri from '../layers/LayerBaseVectorEsri';
-import LayerBaseVectorGeoJson from '../layers/LayerBaseVectorGeoJson';
-import LayerEsriMapServer from '../layers/LayerEsriMapServer';
-import provide from '../util/provide';
-import ol from '../ol/ol';
-
-
-const nm = provide('ssa');
-
-import {} from './rp-picker.js';
-
-function makeRpPickerContent(idx) {
-    "use strict";
-
-    return `<div class="lbl-select-container"><label>Ref. Point #${idx}</label><div id="rp-picker-${idx}" class="rp-picker-${idx}"></div></div>`;
-}
-
-let prefix = '/SSA/';
-let startCountyUrl = prefix + 'getStartCounties';
-let getHighwaysUrl = prefix + 'getHighways';
-let getEndCountyUrl = prefix + 'getEndCounties';
-let getFromRpUrl = prefix + 'getFromRps';
-let getToRpUrl = prefix + 'getFromRps';
-let getCorridorUrl = prefix + 'getCorridor';
-
-/**
- *
- * @type {Array}
- */
-let returnedColors = [];
-let colorOptions = ['Aquamarine', 'Chartreuse', 'CornflowerBlue', 'Cyan', 'DarkOrange', 'DeepSkyBlue', 'GreenYellow',
-    'Salmon', 'Magenta', 'Orchid', 'Turquoise ', 'Tomato'];
-
-function randomColor() {
-    "use strict";
-    if (returnedColors.length == colorOptions.length) {
-        returnedColors = [];
-    }
-    while (true) {
-        let c = colorOptions[Math.floor(parseInt(Math.random() * colorOptions.length))];
-        if (returnedColors.indexOf(c) < 0) {
-            returnedColors.push(c);
-
-            return c;
-        }
-    }
-}
-
-function layerConfigHelper(name, color, visible) {
-    "use strict";
-
-    return {
-        minZoom: 4,
-        name: name,
-        transform: {dataProjection: 'EPSG:3857', featureProjection: 'EPSG:3857'},
-        style: new ol.style.Style({
-            stroke: new ol.style.Stroke({
-                color: color,
-                width: 5
-            })
-        }),
-        visible: visible
-    };
-}
-
-let entityMap = {
-    "&": "&amp;",
-    "<": "&lt;",
-    ">": "&gt;",
-    '"': '&quot;',
-    "'": '&#39;',
-    "/": '&#x2F;'
-};
-
-function escapeHtml(string) {
-    return String(string).replace(/[&<>"'\/]/g, function (s) {
-        return entityMap[s];
-    });
-}
-
-class Corridor {
-
-    /**
-     *
-     * @param {string} fromRp from reference point
-     * @param {string} toRp to reference point
-     * @param {string} startCounty start county
-     * @param {string} endCounty end county
-     * @param {string} highway route
-     * @param {Array<object>|*} [features=[]] feature array
-     * @param {number|string|*} databaseId in the db
-     */
-    constructor(fromRp, toRp, startCounty, endCounty, highway, features, databaseId) {
-        features = features && features.constructor.name == 'Array' ? features : [];
-
-        this.databaseId = databaseId;
-        this.startCounty = startCounty;
-        this.endCounty = endCounty;
-        this.highway = highway;
-        this.fromRp = fromRp;
-        this.toRp = toRp;
-        this.clientId = (fromRp + '-' + toRp).replace(/ /g, '_');
-        this._color = randomColor();
-        this._corridorLayer = new LayerBaseVectorGeoJson('',
-            layerConfigHelper(this.fromRp + ' - ' + this.toRp, this._color, true)
-        );
-
-        if (features.length > 0) {
-            this._corridorLayer.source.addFeatures(features);
-        } else {
-            $.get(getCorridorUrl, {rp1: fromRp, rp2: toRp}, (d) => {
-                this._corridorLayer.addFeatures(d);
-            }, 'json');
-        }
-    }
-
-    getTableHtml() {
-        let outString = `<tr id="${this.clientId}" class="corridor-tr" style="background-color: ${this._color}">`;
-        outString += `<td>${this.startCounty}</td>`;
-        outString += `<td>${this.endCounty}</td>`;
-        outString += `<td>${this.highway}</td>`;
-        outString += `<td>${this.fromRp}</td>`;
-        outString += `<td>${this.toRp}</td>`;
-        outString += '</tr>';
-
-        return outString;
-    }
-
-    getDataHtml(i) {
-        let outString = '<div class="corridor-data">';
-        outString += `<input type="hidden" class="corridor-data-database-id" name="corridors[${i}].corridorId" value="${this.databaseId}"/>`;
-        outString += `<input type="hidden" class="corridor-data-start-county" name="corridors[${i}].startCounty" value="${this.startCounty}"/>`;
-        outString += `<input type="hidden" class="corridor-data-end-county" name="corridors[${i}].endCounty" value="${this.endCounty}"/>`;
-        outString += `<input type="hidden" class="corridor-data-highway" name="corridors[${i}].highway" value="${this.highway}"/>`;
-        outString += `<input type="hidden" class="corridor-data-from-rp" name="corridors[${i}].fromRp" value="${this.fromRp}"/>`;
-        outString += `<input type="hidden" class="corridor-data-to-rp" name="corridors[${i}].toRp" value="${this.toRp}"/>`;
-        outString += `</div>`;
-
-        return outString;
-    }
-
-    getDataHtmlDisp(i) {
-        let returnString = this.getDataHtml(i);
-        returnString = escapeHtml(returnString);
-        returnString = returnString.replace(/&quot;&#x2F;&gt;/g, '&quot;&#x2F;&gt;<br>');
-        returnString = returnString.replace(/corridor-data&quot;&gt;/g, 'corridor-data&quot;&gt;<br>');
-
-        return returnString + '<br>';
-    }
-
-    get olLayer() {
-        return this._corridorLayer.olLayer;
-
-    }
-
-    get layer() {
-        return this._corridorLayer;
-    }
-
-
-    /**
-     *
-     * @returns {boolean} if corridor layer is visible
-     */
-    get visible() {
-        return this._corridorLayer.visible;
-    }
-
-    /**
-     *
-     * @param {boolean} vis if corridor layer is visible
-     */
-    set visible(vis) {
-        this._corridorLayer.visible = vis;
-    }
-
-    /**
-     *
-     * @returns {Array.<ol.Feature>} an array of ol features
-     */
-    get features() {
-        return this._corridorLayer.features;
-    }
-
-    /**
-     *
-     * @param {Array.<ol.Feature>} feats array of ol features
-     */
-    set features(feats) {
-        this._corridorLayer.clear();
-        this._corridorLayer.source.addFeatures(feats);
-    }
-}
-
-nm.Corridor = Corridor;
-
-class SsaCorridorPicker {
-
-    /**
-     * constructor for the corridor picker
-     * @param {jQuery} jQueryRef reference to the jquery element
-     */
-    constructor(jQueryRef) {
-        /**
-         *
-         * @type {Array<Corridor>}
-         * @private
-         */
-
-        this._corridorArray = [];
-        this._corridorLookup = {};
-        this._$container = jQueryRef;
-        this._$container.addClass('ssa-corridor-picker-all');
-
-        /**
-         *
-         * @type {Corridor|*}
-         * @private
-         */
-        this.__selectedCorridor = undefined;
-        this.__selectedCorridorId = undefined;
-        this.__sidebarOpen = false;
-
-        let newContent = '';
-        //start top table/button container
-
-        // <editor-fold desc="table button container">
-        newContent += '<div class="ssa-corridor-table-button">';
-
-        // <editor-fold desc="top buttons">
-        newContent += '<div class="ssa-corridor-button-container">';
-        newContent += '<input type="button" value="Create Corridor" class="create-corridor"/>';
-        newContent += '<input type="button" value="Edit Corridor" class="edit-corridor ssa-hidden"/>';
-        newContent += '<input type="button" value="Delete Corridor" class="delete-corridor ssa-hidden"/>';
-        newContent += '<input type="button" value="Clear Selection" class="clear-selection-corridor ssa-hidden"/>';
-        newContent += '</div>';
-        // </editor-fold>
-
-        // <editor-fold desc="top table">
-        newContent += '<div class="ssa-corridor-table-container">';
-        newContent += '<table class="corridor-table">';
-        newContent += '<tr>';
-        newContent += '<th>Start County</th><th>End County</th><th>Highway</th><th>From RP</th><th>To RP</th>';
-        newContent += '</tr>';
-        newContent += '</table>';
-        newContent += '</div>';
-        // </editor-fold>
-
-        newContent += '</div>';
-        // </editor-fold>
-
-        // <editor-fold desc="sidebar and map">
-        newContent += '<div class="ssa-corridor-sidebar-map">';
-
-        // <editor-fold desc="sidebar">
-        newContent += '<div class="rp-picker-sidebar ssa-hidden">';
-        newContent += '<div class="rp-picker-sidebar-inputs">';
-        newContent += '<div class="lbl-select-container"><label>Start County</label><select class="start-county-select"></select></div>';
-        newContent += '<div class="lbl-select-container"><label>Highway</label><select class="highway-select"></select></div>';
-        newContent += '<div class="lbl-select-container"><label>End County</label><select class="end-county-select"></select></div>';
-        newContent += makeRpPickerContent(1);
-        newContent += makeRpPickerContent(2);
-        newContent += '</div>';
-        newContent += `<div class="lbl-select-container">`;
-        newContent += `<input type="button" class="rp-picker-preview-corridor" value="Preview"/>`;
-        newContent += `<input type="button" class="rp-picker-add-corridor ssa-hidden" disabled="disabled" value="Add"/>`;
-        newContent += `<input type="button" class="rp-picker-confirm-edit-corridor ssa-hidden" disabled="disabled" value="Confirm"/>`;
-        newContent += `<input type="button" class="rp-picker-cancel-corridor" value="Cancel"/>`;
-        newContent += '</div>';
-        newContent += '</div>';
-        // </editor-fold>
-
-        // add map div
-        newContent += `<div id="rp-main-map" class="rp-picker-main-map"></div>`;
-        newContent += '</div>';
-        // </editor-fold>
-
-        this._$container.append(newContent);
-
-        // <editor-fold desc="set jquery references">
-        this._$btnCreateCorridor = this._$container.find('.create-corridor');
-        this._$btnEditCorridor = this._$container.find('.edit-corridor');
-        this._$btnDeleteCorridor = this._$container.find('.delete-corridor');
-        this._$btnUnselectCorridor = this._$container.find('.clear-selection-corridor');
-
-        this._$corridorTable = this._$container.find('.corridor-table');
-
-        this._$rpPickerSidebar = this._$container.find('.rp-picker-sidebar');
-
-        this._$selectStartCounty = this._$container.find('.start-county-select');
-        this._$selectHighway = this._$container.find('.highway-select');
-        this._$selectEndCounty = this._$container.find('.end-county-select');
-        //this._$btnContainerTop = this._$container.find('.ssa-corridor-button-container');
-
-        this._$btnPreviewCorridor = this._$container.find('.rp-picker-preview-corridor');
-        this._$btnAddCorridor = this._$container.find('.rp-picker-add-corridor');
-        this._$btnConfirmEditCorridor = this._$container.find('.rp-picker-confirm-edit-corridor');
-        this._$btnCancelCorridor = this._$container.find('.rp-picker-cancel-corridor');
-        // </editor-fold>
-
-        // <editor-fold desc="picker setup">
-        this._rpPicker1 = jQueryRef.find('#rp-picker-1').rpPicker(getFromRpUrl);
-        this._rpPicker2 = jQueryRef.find('#rp-picker-2').rpPicker(getToRpUrl);
-
-        this._rpPicker1.addOtherPicker(this._rpPicker2);
-        this._rpPicker2.addOtherPicker(this._rpPicker1);
-
-        this._rpPicker1.rpSetCallback = (rpId, feat) => {
-            this._rpPicker2.otherFeature = feat;
-        };
-
-        this._rpPicker2.rpSetCallback = (rpId, feat) => {
-            this._rpPicker1.otherFeature = feat;
-        };
-        // </editor-fold>
-
-        // <editor-fold desc="top button events">
-        this._$btnCreateCorridor.click(() => {
-            this._sidebarOpen = true;
-            this._$btnAddCorridor.removeClass('ssa-hidden');
-        });
-
-        this._$btnEditCorridor.click(() => {
-            this._sidebarOpen = true;
-            this._$btnConfirmEditCorridor.removeClass('ssa-hidden');
-            this._workingLayer.source.addFeatures(this.__selectedCorridor.layer.source.getFeatures());
-            this._setMapToLayerExtent(this._workingLayer);
-            this._$selectStartCounty.val(this.__selectedCorridor.startCounty);
-            this._populateHighwaySelect(this.__selectedCorridor.startCounty, this.__selectedCorridor.highway);
-            this._populateEndCountySelect(this.__selectedCorridor.highway, this.__selectedCorridor.endCounty);
-
-            this._rpPicker1.setCountyAndHighway(
-                this.__selectedCorridor.startCounty, this.__selectedCorridor.highway, this.__selectedCorridor.fromRp);
-
-            this._rpPicker2.setCountyAndHighway(
-                this.__selectedCorridor.endCounty, this.__selectedCorridor.highway, this.__selectedCorridor.toRp);
-        });
-
-        this._$btnDeleteCorridor.click(() => {
-            let conf = confirm('Confirm delete corridor? (Changes saved to database on submit)');
-            if (conf) {
-                this._removeCorridor(this.__selectedCorridor);
-            }
-        });
-
-        this._$btnUnselectCorridor.click(() => {
-            this._selectedCorridorId = undefined;
-        });
-
-        // </editor-fold>
-
-        // <editor-fold desc="county highway change events">
-        this._populateStartCountySelect();
-
-        this._$selectStartCounty.change(() => {
-            console.log('start county changed');
-            this._clear();
-            this._populateHighwaySelect(this._$selectStartCounty.val());
-        });
-
-        this._$selectHighway.change(() => {
-            console.log('highway changed');
-            this._rpPicker2.clear();
-            this._populateEndCountySelect(this._$selectHighway.val());
-        });
-
-        this._$selectEndCounty.change(() => {
-            this._rpPicker1.setCountyAndHighway(this._$selectStartCounty.val(), this._$selectHighway.val());
-            this._rpPicker2.setCountyAndHighway(this._$selectEndCounty.val(), this._$selectHighway.val());
-            console.log('end county changed');
-        });
-
-
-        // </editor-fold>
-
-        // <editor-fold desc="map setup">
-        let multiMap = quickMapMulti({
-            divId: `rp-main-map`, minZoom: 6, zoom: 6
-        });
-        this._mainMap = multiMap.map;
-
-        ///**
-        // * @type MapMoveCls
-        // * @private
-        // */
-        //this._mainMapMove = multiMap.mapMove;
-
-        /**
-         * @type MapPopupCls
-         * @private
-         */
-        this._mainMapPopup = multiMap.mapPopup;
-
-        let metamanagerSegments = new LayerEsriMapServer(
-            'http://transportal.cee.wisc.edu/applications/arcgis2/rest/services/MetaManager/MM_All_Segments/MapServer',
-            {
-                minZoom: 7,
-                visible: true,
-                name: 'Metamanager Segments',
-                opacity: 0.5
-            });
-
-
-        this._selectionLayer = new LayerBaseVectorGeoJson('', layerConfigHelper('Selection', 'yellow', true));
-        this._selectionLayer.olLayer.setZIndex(50);
-        this._workingLayer = new LayerBaseVectorGeoJson('', layerConfigHelper('Working', 'orange', false));
-
-        this._mainMap.addLayer(metamanagerSegments.olLayer);
-        this._mainMap.addLayer(this._workingLayer.olLayer);
-        this._mainMap.addLayer(this._selectionLayer.olLayer);
-
-
-        // </editor-fold>
-
-        // <editor-fold desc="picker suppressor">
-        $(document).click((event) => {
-            if ($(event.target).parents('.rp-picker-container').length == 0) {
-                this._hidePickers();
-            }
-        });
-        // </editor-fold>
-
-        // <editor-fold desc="bottom button events">
-        this._$btnPreviewCorridor.click(() => {
-            if (this._rpPicker1.referencePointId == null || this._rpPicker2.referencePointId == null) {
-                console.log('not set');
-            } else {
-                $.get(getCorridorUrl,
-                    {rp1: this._rpPicker1.referencePointId, rp2: this._rpPicker2.referencePointId},
-                    (d) => {
-                        if (d['features'].length == 0) {
-                            alert('Corridor invalid, try an adjacent reference point');
-
-                            return;
-                        }
-                        this._workingLayer.clear();
-                        this._workingLayer.addFeatures(d);
-                        this._setMapToLayerExtent(this._workingLayer);
-                        this._$btnAddCorridor.prop('disabled', false);
-                        this._$btnConfirmEditCorridor.prop('disabled', false);
-                    }, 'json'
-                );
-            }
-        });
-
-        this._$btnAddCorridor.click(() => {
-            let newCorridor = new Corridor(
-                this._rpPicker1.referencePointId, this._rpPicker2.referencePointId,
-                this._$selectStartCounty.val(), this._$selectEndCounty.val(), this._$selectHighway.val(),
-                this._workingLayer.source.getFeatures());
-
-            if (this._corridorLookup[newCorridor.clientId] == undefined) {
-                this._addCorridor(newCorridor);
-                this._sidebarOpen = false;
-                this._refreshTable();
-            } else {
-                alert('A corridor with the same from and to RPs already exists');
-            }
-        });
-
-        this._$btnConfirmEditCorridor.click(() => {
-            this.__selectedCorridor.startCounty = this._$selectStartCounty.val();
-            this.__selectedCorridor.highway = this._$selectHighway.val();
-            this.__selectedCorridor.endCounty = this._$selectEndCounty.val();
-            this.__selectedCorridor.fromRp = this._rpPicker1.referencePointId;
-            this.__selectedCorridor.toRp = this._rpPicker2.referencePointId;
-            this.__selectedCorridor.features = this._workingLayer.source.getFeatures();
-            this._sidebarOpen = false;
-            this._refreshTable();
-        });
-
-        this._$btnCancelCorridor.click(() => {
-            this._sidebarOpen = false;
-        });
-        // </editor-fold>
-    }
-
-
-    // <editor-fold desc="county highway populators">
-    _populateStartCountySelect() {
-        $.get(startCountyUrl, {}, (d) => {
-            for (let c of d) {
-                this._$selectStartCounty.append(`<option>${c['name']}</option>`);
-            }
-        }, 'json');
-    }
-
-    /**
-     *
-     * @param {string} startCountyName the start county used to populate the highways
-     * @param {highway} [highway=undefined] optional the highway to select on load
-     * @private
-     */
-    _populateHighwaySelect(startCountyName, highway) {
-
-        this._$selectHighway.html('');
-
-        $.get(getHighwaysUrl, {startCountyName: startCountyName}, (d) => {
-            for (let c of d) {
-                this._$selectHighway.append(`<option>${c['name']}</option>`);
-            }
-            if (highway) {
-                this._$selectHighway.val(highway);
-            }
-
-        }, 'json');
-    }
-
-
-    /**
-     *
-     * @param {string} highway the highway
-     * @param {string} [endCounty=undefined] the county
-     * @private
-     */
-    _populateEndCountySelect(highway, endCounty) {
-
-        this._$selectEndCounty.html('');
-
-        $.get(getEndCountyUrl, {highwayName: highway}, (d) => {
-            for (let c of d) {
-                this._$selectEndCounty.append(`<option>${c['name']}</option>`);
-            }
-            if (endCounty) {
-                this._$selectEndCounty.val(endCounty);
-            }
-        }, 'json');
-
-
-    }
-
-    // </editor-fold>
-
-    _hidePickers() {
-        this._rpPicker1.visible = false;
-        this._rpPicker2.visible = false;
-    }
-
-    /**
-     *
-     * @param {Corridor} cor - corridor object
-     * @private
-     */
-    _addCorridor(cor) {
-        this._corridorArray.push(cor);
-        this._corridorLookup[cor.clientId] = cor;
-        this._mainMap.addLayer(cor.olLayer);
-
-        this._mainMapPopup.addVectorPopup(cor.layer, (props) => {
-            return `Metamanager PDP ID: ${props['pdpId']}`;
-        });
-    }
-
-    /**
-     *
-     * @param {Corridor} cor - corridor object
-     * @private
-     */
-    _removeCorridor(cor) {
-        this._mainMap.removeLayer(cor.olLayer);
-        let ix = this._corridorArray.indexOf(cor);
-        this._corridorArray.splice(ix, 1);
-        delete this._corridorLookup[cor.clientId];
-        this._mainMapPopup.removeVectorPopup(cor.layer);
-        this._selectedCorridorId = undefined;
-        this._refreshTable();
-    }
-
-    /**
-     *
-     * @param {LayerBaseVector} lyr - layer to use for extent
-     * @private
-     */
-    _setMapToLayerExtent(lyr) {
-        this._setExtent(lyr.source.getExtent());
-    }
-
-    _setExtent(extent) {
-        this._mainMap.getView().fit(extent, this._mainMap.getSize());
-    }
-
-    _clear() {
-        //this._$selectStartCounty.html('');
-        this._$selectHighway.html('');
-        this._$selectEndCounty.html('');
-        this._rpPicker1.clear();
-        this._rpPicker2.clear();
-    }
-
-    _refreshTable() {
-        this._$container.find('.corridor-tr').remove();
-        $('.corridor-data').remove();
-
-        let minX = 100E10;
-        let minY = 100E10;
-        let maxX = -100E10;
-        let maxY = -100E10;
-
-        let $form = $('form');
-        let $contentShow = $('#data-content-show');
-        $contentShow.html('');
-
-        for (let i = 0; i < this._corridorArray.length; i++) {
-            let cor = this._corridorArray[i];
-            this._$corridorTable.append(cor.getTableHtml(i));
-            $form.append(cor.getDataHtml(i));
-            $contentShow.append(cor.getDataHtmlDisp(i));
-            let ext = cor._corridorLayer.source.getExtent();
-            minX = ext[0] < minX ? ext[0] : minX;
-            minY = ext[1] < minY ? ext[1] : minY;
-            maxX = ext[2] > maxX ? ext[2] : maxX;
-            maxY = ext[3] > maxY ? ext[3] : maxY;
-        }
-
-        if (this._corridorArray.length > 0) {
-            //this._setExtent([minX, minY, maxX, maxY]);
-        }
-
-        let _this = this;
-        this._$container.find('.corridor-tr').click(function () {
-            if (_this._sidebarOpen) {
-                return;
-            }
-            _this._selectedCorridorId = this.id;
-        });
-    }
-
-    /**
-     * sets the selected corridor by the client id
-     * @param {string} corridorId - the corridor id
-     * @private
-     */
-    set _selectedCorridorId(corridorId) {
-        if (corridorId == this.__selectedCorridorId) {
-            return;
-        }
-
-        $('.corridor-tr-selected').removeClass('corridor-tr-selected');
-        this._selectionLayer.clear();
-        this._mainMapPopup.closePopup();
-
-        if (corridorId == undefined) {
-            this._$btnCreateCorridor.removeClass('ssa-hidden');
-            this._$btnEditCorridor.addClass('ssa-hidden');
-            this._$btnUnselectCorridor.addClass('ssa-hidden');
-            this._$btnDeleteCorridor.addClass('ssa-hidden');
-            this.__selectedCorridorId = undefined;
-            this.__selectedCorridor = undefined;
-        } else {
-            this._$btnCreateCorridor.addClass('ssa-hidden');
-            this._$btnEditCorridor.removeClass('ssa-hidden');
-            this._$btnDeleteCorridor.removeClass('ssa-hidden');
-            this._$btnUnselectCorridor.removeClass('ssa-hidden');
-            this.__selectedCorridorId = corridorId;
-            this.__selectedCorridor = this._corridorLookup[this.__selectedCorridorId];
-            $('#' + this.__selectedCorridorId).addClass('corridor-tr-selected');
-            this._selectionLayer.source.addFeatures(this.__selectedCorridor.layer.source.getFeatures());
-            this._setMapToLayerExtent(this._selectionLayer);
-        }
-    }
-
-    /**
-     *
-     * @returns {boolean} if sidebar is open
-     * @private
-     */
-    get _sidebarOpen() {
-        return this.__sidebarOpen;
-    }
-
-    /**
-     * open or close the sidebar
-     * @param {boolean} isOpen - if sidebar is open
-     * @private
-     */
-    set _sidebarOpen(isOpen) {
-        if (this.__sidebarOpen == isOpen) {
-            return;
-        }
-
-        this.__sidebarOpen = isOpen;
-
-        if (isOpen) {
-            this._$rpPickerSidebar.removeClass('ssa-hidden');
-            this._$btnCreateCorridor.addClass('ssa-hidden');
-            this._$btnEditCorridor.addClass('ssa-hidden');
-            this._$btnDeleteCorridor.addClass('ssa-hidden');
-            this._$btnUnselectCorridor.addClass('ssa-hidden');
-        } else {
-            this._clear();
-            this._$btnConfirmEditCorridor.addClass('ssa-hidden');
-            this._$btnAddCorridor.addClass('ssa-hidden');
-            this._$rpPickerSidebar.addClass('ssa-hidden');
-            this._$btnCreateCorridor.removeClass('ssa-hidden');
-
-        }
-
-        $('.corridor-tr-selected').removeClass('corridor-tr-selected');
-        this._$btnEditCorridor.addClass('ssa-hidden');
-        this._$btnUnselectCorridor.addClass('ssa-hidden');
-
-
-        this._workingLayer.visible = isOpen;
-        this._selectionLayer.visible = !isOpen;
-        this._selectionLayer.clear();
-        this._workingLayer.clear();
-
-
-        for (let l of this._corridorArray) {
-            l.visible = !isOpen;
-        }
-        //this._$btnPreviewCorridor.prop('disabled', true);
-        this._$btnAddCorridor.prop('disabled', true);
-        this._$btnConfirmEditCorridor.prop('disabled', true);
-        this._mainMap.updateSize();
-    }
-}
-
-nm.SsaCorridorPicker = SsaCorridorPicker;
-
-/**
- * Adds rp picker group
- * @returns {SsaCorridorPicker} the picker object
- * @this {jQuery}
- */
-$.fn.ssaCorridorPicker = function () {
-    return new SsaCorridorPicker(this);
-};
-
-export default Corridor;
diff --git a/src/layers/LayerBase.js b/src/layers/LayerBase.js
index 48f250ce349e8656cd0be3208f57825a2031160a..019f7ebb16e111c36807ea223e93cf02a38ace26 100644
--- a/src/layers/LayerBase.js
+++ b/src/layers/LayerBase.js
@@ -33,7 +33,9 @@ class LayerBase {
             throw 'Invalid URL';
         }
         this._url = url;
-
+        
+        
+        
         this._params = typeof options.params == 'object' ? options.params : {};
         this._legendCollapse = typeof options.legendCollapse == 'boolean' ? options.legendCollapse : false;
         this._legendCheckbox = typeof options.legendCheckbox == 'boolean' ? options.legendCheckbox : true;
@@ -50,7 +52,7 @@ class LayerBase {
         }
 
         this._visible = typeof options.visible === 'boolean' ? options.visible : true;
-
+        
         this._source = undefined;
         this.olLayer = undefined;
         this._loaded = false;
diff --git a/src/layers/LayerBaseVector.js b/src/layers/LayerBaseVector.js
index 2825b496fbaae088b51e53466699aba8c877bc87..808b7e124d317630f9a7a554561da57a38776e3c 100644
--- a/src/layers/LayerBaseVector.js
+++ b/src/layers/LayerBaseVector.js
@@ -89,6 +89,11 @@ class LayerBaseVector extends LayerBase {
         }
 
         this._source = new ol.source.Vector();
+
+        /**
+         *
+         * @type {ol.layer.Vector|ol.layer.Base}
+         */
         this.olLayer = new ol.layer.Vector(
             {
                 source: this._source,
@@ -212,7 +217,7 @@ class LayerBaseVector extends LayerBase {
 
     /**
      * get the map move object
-     * @type {MapMove|*}
+     * @type {MapMoveCls|*}
      */
     get mapMove() {
         return this._mapMove;
@@ -226,6 +231,14 @@ class LayerBaseVector extends LayerBase {
         return this._mapMoveParams;
     }
 
+        /**
+     * Get the layer visibility
+     * @type {boolean}
+     */
+    get visible() {
+        return super.visible;
+    }
+
     /**
      * Set the layer visibility
      * @type {boolean}
diff --git a/src/layers/LayerItsInventory.js b/src/layers/LayerItsInventory.js
index 1682ea9ea095aec5c64b2b18c016d010c8dccea7..64a9a2cf33628aa388fcb2c36f377ec544dc74f8 100644
--- a/src/layers/LayerItsInventory.js
+++ b/src/layers/LayerItsInventory.js
@@ -281,7 +281,7 @@ class LayerItsInventory extends LayerBaseVectorGeoJson {
         $.extend(options.params, {format: 'JSON', resource: options.itsType});
 
         super('http://transportal.cee.wisc.edu/its/inventory/', options);
-
+        
         //add any additional content to the legend
         this.addLegendContent(addToLegend);
 
diff --git a/src/ol/ol-build.js b/src/ol/ol-build.js
index 73ed3c780e2b6c0fa43bfc55d8442d840d193be3..e1f47570c7f1efdb3cd1c95f99215a8e926d0bda 100644
--- a/src/ol/ol-build.js
+++ b/src/ol/ol-build.js
@@ -14,11 +14,11 @@
 function ba(b){var c=typeof b;if("object"==c)if(b){if(b instanceof Array)return"array";if(b instanceof Object)return c;var d=Object.prototype.toString.call(b);if("[object Window]"==d)return"object";if("[object Array]"==d||"number"==typeof b.length&&"undefined"!=typeof b.splice&&"undefined"!=typeof b.propertyIsEnumerable&&!b.propertyIsEnumerable("splice"))return"array";if("[object Function]"==d||"undefined"!=typeof b.call&&"undefined"!=typeof b.propertyIsEnumerable&&!b.propertyIsEnumerable("call"))return"function"}else return"null";
 else if("function"==c&&"undefined"==typeof b.call)return"object";return c}function ca(b){var c=ba(b);return"array"==c||"object"==c&&"number"==typeof b.length}function da(b){return"string"==typeof b}function ea(b){return"number"==typeof b}function ga(b){return"function"==ba(b)}function ha(b){var c=typeof b;return"object"==c&&null!=b||"function"==c}function I(b){return b[ia]||(b[ia]=++ja)}var ia="closure_uid_"+(1E9*Math.random()>>>0),ja=0;function ka(b,c,d){return b.call.apply(b.bind,arguments)}
 function la(b,c,d){if(!b)throw Error();if(2<arguments.length){var e=Array.prototype.slice.call(arguments,2);return function(){var d=Array.prototype.slice.call(arguments);Array.prototype.unshift.apply(d,e);return b.apply(c,d)}}return function(){return b.apply(c,arguments)}}function ma(b,c,d){ma=Function.prototype.bind&&-1!=Function.prototype.bind.toString().indexOf("native code")?ka:la;return ma.apply(null,arguments)}
-function na(b,c){var d=Array.prototype.slice.call(arguments,1);return function(){var c=d.slice();c.push.apply(c,arguments);return b.apply(this,c)}}function M(b,c){function d(){}d.prototype=c.prototype;b.$=c.prototype;b.prototype=new d;b.prototype.constructor=b;b.Ve=function(b,d,g){for(var h=Array(arguments.length-2),k=2;k<arguments.length;k++)h[k-2]=arguments[k];return c.prototype[d].apply(b,h)}};var oa;function pa(){};var ra;var sa=String.prototype.trim?function(b){return b.trim()}:function(b){return b.replace(/^[\s\xa0]+|[\s\xa0]+$/g,"")};function ta(b){if(!ua.test(b))return b;-1!=b.indexOf("&")&&(b=b.replace(va,"&amp;"));-1!=b.indexOf("<")&&(b=b.replace(wa,"&lt;"));-1!=b.indexOf(">")&&(b=b.replace(xa,"&gt;"));-1!=b.indexOf('"')&&(b=b.replace(ya,"&quot;"));-1!=b.indexOf("'")&&(b=b.replace(za,"&#39;"));-1!=b.indexOf("\x00")&&(b=b.replace(Aa,"&#0;"));return b}var va=/&/g,wa=/</g,xa=/>/g,ya=/"/g,za=/'/g,Aa=/\x00/g,ua=/[\x00&<>"']/;
+function na(b,c){var d=Array.prototype.slice.call(arguments,1);return function(){var c=d.slice();c.push.apply(c,arguments);return b.apply(this,c)}}function M(b,c){function d(){}d.prototype=c.prototype;b.X=c.prototype;b.prototype=new d;b.prototype.constructor=b;b.We=function(b,d,g){for(var h=Array(arguments.length-2),k=2;k<arguments.length;k++)h[k-2]=arguments[k];return c.prototype[d].apply(b,h)}};var oa;function pa(){};var qa;var sa=String.prototype.trim?function(b){return b.trim()}:function(b){return b.replace(/^[\s\xa0]+|[\s\xa0]+$/g,"")};function ta(b){if(!ua.test(b))return b;-1!=b.indexOf("&")&&(b=b.replace(va,"&amp;"));-1!=b.indexOf("<")&&(b=b.replace(wa,"&lt;"));-1!=b.indexOf(">")&&(b=b.replace(xa,"&gt;"));-1!=b.indexOf('"')&&(b=b.replace(ya,"&quot;"));-1!=b.indexOf("'")&&(b=b.replace(za,"&#39;"));-1!=b.indexOf("\x00")&&(b=b.replace(Aa,"&#0;"));return b}var va=/&/g,wa=/</g,xa=/>/g,ya=/"/g,za=/'/g,Aa=/\x00/g,ua=/[\x00&<>"']/;
 function Ba(b,c){return b<c?-1:b>c?1:0};function Ca(b,c,d){return Math.min(Math.max(b,c),d)}var Da=function(){var b;"cosh"in Math?b=Math.cosh:b=function(b){b=Math.exp(b);return(b+1/b)/2};return b}();function Ea(b,c){var d=b%c;return 0>d*c?d+c:d};function Fa(b){return function(c){if(c)return[Ca(c[0],b[0],b[2]),Ca(c[1],b[1],b[3])]}}function Ga(b){return b};function Ha(b,c){return b>c?1:b<c?-1:0}function Ia(b,c,d){var e=b.length;if(b[0]<=c)return 0;if(!(c<=b[e-1]))if(0<d)for(d=1;d<e;++d){if(b[d]<c)return d-1}else if(0>d)for(d=1;d<e;++d){if(b[d]<=c)return d}else for(d=1;d<e;++d){if(b[d]==c)return d;if(b[d]<c)return b[d-1]-c<c-b[d]?d-1:d}return e-1}function Ja(b){return b.reduce(function(b,d){return Array.isArray(d)?b.concat(Ja(d)):b.concat(d)},[])}function Ka(b,c){var d,e=ca(c)?c:[c],f=e.length;for(d=0;d<f;d++)b[b.length]=e[d]}
 function La(b,c){var d=b.indexOf(c),e=-1<d;e&&b.splice(d,1);return e}function Ma(b,c){var d=b.length;if(d!==c.length)return!1;for(var e=0;e<d;e++)if(b[e]!==c[e])return!1;return!0}function Na(b){var c=Oa,d=b.length,e=Array(b.length),f;for(f=0;f<d;f++)e[f]={index:f,value:b[f]};e.sort(function(b,d){return c(b.value,d.value)||b.index-d.index});for(f=0;f<b.length;f++)b[f]=e[f].value};function Pa(b){return function(c,d,e){if(void 0!==c)return c=Ia(b,c,e),c=Ca(c+d,0,b.length-1),b[c]}}function Qa(b,c,d){return function(e,f,g){if(void 0!==e)return e=Math.max(Math.floor(Math.log(c/e)/Math.log(b)+(0<g?0:0>g?1:.5))+f,0),void 0!==d&&(e=Math.min(e,d)),c/Math.pow(b,e)}};function Ra(b){if(void 0!==b)return 0}function Sa(b,c){if(void 0!==b)return b+c}function Ta(b){var c=2*Math.PI/b;return function(b,e){if(void 0!==b)return b=Math.floor((b+e)/c+.5)*c}}function Ua(){var b=5*Math.PI/180;return function(c,d){if(void 0!==c)return Math.abs(c+d)<=b?0:c+d}};function Va(b,c,d){this.center=b;this.resolution=c;this.rotation=d};var Wa="function"===typeof Object.assign?Object.assign:function(b,c){if(void 0===b||null===b)throw new TypeError("Cannot convert undefined or null to object");for(var d=Object(b),e=1,f=arguments.length;e<f;++e){var g=arguments[e];if(void 0!==g&&null!==g)for(var h in g)g.hasOwnProperty(h)&&(d[h]=g[h])}return d};function Ya(b){for(var c in b)delete b[c]}function Za(b){var c=[],d;for(d in b)c.push(b[d]);return c}function $a(b){for(var c in b)return!1;return!c};var ab="olm_"+(1E4*Math.random()|0);function bb(b){function c(c){var e=b.listener,f=b.hc||b.target;b.kc&&N(b);return e.call(f,c)}return b.ic=c}function cb(b,c,d,e){for(var f,g=0,h=b.length;g<h;++g)if(f=b[g],f.listener===c&&f.hc===d)return e&&(f.deleteIndex=g),f}function db(b,c){var d=b[ab];return d?d[c]:void 0}function eb(b){var c=b[ab];c||(c=b[ab]={});return c}
 function fb(b,c){var d=db(b,c);if(d){for(var e=0,f=d.length;e<f;++e)b.removeEventListener(c,d[e].ic),Ya(d[e]);d.length=0;if(d=b[ab])delete d[c],0===Object.keys(d).length&&delete b[ab]}}function Q(b,c,d,e,f){var g=eb(b),h=g[c];h||(h=g[c]=[]);(g=cb(h,d,e,!1))?f||(g.kc=!1):(g={hc:e,kc:!!f,listener:d,target:b,type:c},b.addEventListener(c,bb(g)),h.push(g));return g}function gb(b,c,d,e){(b=db(b,c))&&(d=cb(b,d,e,!0))&&N(d)}
-function N(b){if(b&&b.target){b.target.removeEventListener(b.type,b.ic);var c=db(b.target,b.type);if(c){var d="deleteIndex"in b?b.deleteIndex:c.indexOf(b);-1!==d&&c.splice(d,1);0===c.length&&fb(b.target,b.type)}Ya(b)}}function hb(b){var c=eb(b),d;for(d in c)fb(b,d)};function ib(){}ib.prototype.ja=!1;function jb(b){b.ja||(b.ja=!0,b.J())}ib.prototype.J=pa;function R(b,c){this.type=b;this.target=c||null}R.prototype.preventDefault=R.prototype.stopPropagation=function(){this.we=!0};function kb(b){b.stopPropagation()}function lb(b){b.preventDefault()};function mb(){this.H={};this.A={}}M(mb,ib);mb.prototype.addEventListener=function(b,c){var d=this.A[b];d||(d=this.A[b]=[]);-1===d.indexOf(c)&&d.push(c)};function S(b,c){var d="string"===typeof c?new R(c):c,e=d.type;d.target=b;var f=b.A[e],g;if(f){e in b.H||(b.H[e]=0);for(var h=0,k=f.length;h<k;++h)if(!1===f[h].call(b,d)||d.we){g=!1;break}d=b.H[e];for(delete b.H[e];d--;)b.removeEventListener(e,pa);return g}}mb.prototype.J=function(){hb(this)};
+function N(b){if(b&&b.target){b.target.removeEventListener(b.type,b.ic);var c=db(b.target,b.type);if(c){var d="deleteIndex"in b?b.deleteIndex:c.indexOf(b);-1!==d&&c.splice(d,1);0===c.length&&fb(b.target,b.type)}Ya(b)}}function hb(b){var c=eb(b),d;for(d in c)fb(b,d)};function ib(){}ib.prototype.ja=!1;function jb(b){b.ja||(b.ja=!0,b.J())}ib.prototype.J=pa;function R(b,c){this.type=b;this.target=c||null}R.prototype.preventDefault=R.prototype.stopPropagation=function(){this.xe=!0};function kb(b){b.stopPropagation()}function lb(b){b.preventDefault()};function mb(){this.H={};this.A={}}M(mb,ib);mb.prototype.addEventListener=function(b,c){var d=this.A[b];d||(d=this.A[b]=[]);-1===d.indexOf(c)&&d.push(c)};function S(b,c){var d="string"===typeof c?new R(c):c,e=d.type;d.target=b;var f=b.A[e],g;if(f){e in b.H||(b.H[e]=0);for(var h=0,k=f.length;h<k;++h)if(!1===f[h].call(b,d)||d.xe){g=!1;break}d=b.H[e];for(delete b.H[e];d--;)b.removeEventListener(e,pa);return g}}mb.prototype.J=function(){hb(this)};
 function nb(b,c){return c?c in b.A:0<Object.keys(b.A).length}mb.prototype.removeEventListener=function(b,c){var d=this.A[b];if(d){var e=d.indexOf(c);b in this.H?(d[e]=pa,++this.H[b]):(d.splice(e,1),0===d.length&&delete this.A[b])}};function ob(){mb.call(this);this.f=0}M(ob,mb);ob.prototype.v=function(){++this.f;S(this,"change")};ob.prototype.ba=function(b,c,d){if(Array.isArray(b)){for(var e=b.length,f=Array(e),g=0;g<e;++g)f[g]=Q(this,b[g],c,d);return f}return Q(this,b,c,d)};function pb(b,c,d){R.call(this,b);this.key=c;this.oldValue=d}M(pb,R);function T(b){ob.call(this);I(this);this.K={};void 0!==b&&this.l(b)}M(T,ob);var qb={};function rb(b){return qb.hasOwnProperty(b)?qb[b]:qb[b]="change:"+b}T.prototype.get=function(b){var c;this.K.hasOwnProperty(b)&&(c=this.K[b]);return c};T.prototype.za=function(){return Wa({},this.K)};T.prototype.set=function(b,c,d){d?this.K[b]=c:(d=this.K[b],this.K[b]=c,d!==c&&(c=rb(b),S(this,new pb(c,b,d)),S(this,new pb("propertychange",b,d))))};
 T.prototype.l=function(b,c){for(var d in b)this.set(d,b[d],c)};function sb(b,c,d){void 0===d&&(d=[0,0]);d[0]=b[0]*c+.5|0;d[1]=b[1]*c+.5|0;return d}function tb(b,c){if(Array.isArray(b))return b;void 0===c?c=[b,b]:(c[0]=b,c[1]=b);return c};function ub(b,c){b[0]+=c[0];b[1]+=c[1]}function vb(b,c){var d=Math.cos(c),e=Math.sin(c),f=b[1]*d+b[0]*e;b[0]=b[0]*d-b[1]*e;b[1]=f};function wb(b){this.length=b.length||b;for(var c=0;c<this.length;c++)this[c]=b[c]||0}wb.prototype.BYTES_PER_ELEMENT=4;wb.prototype.set=function(b,c){c=c||0;for(var d=0;d<b.length&&c+d<this.length;d++)this[c+d]=b[d]};wb.prototype.toString=Array.prototype.join;"undefined"==typeof Float32Array&&(wb.BYTES_PER_ELEMENT=4,wb.prototype.BYTES_PER_ELEMENT=wb.prototype.BYTES_PER_ELEMENT,wb.prototype.set=wb.prototype.set,wb.prototype.toString=wb.prototype.toString,F("Float32Array",wb,void 0));function xb(b){this.length=b.length||b;for(var c=0;c<this.length;c++)this[c]=b[c]||0}xb.prototype.BYTES_PER_ELEMENT=8;xb.prototype.set=function(b,c){c=c||0;for(var d=0;d<b.length&&c+d<this.length;d++)this[c+d]=b[d]};xb.prototype.toString=Array.prototype.join;if("undefined"==typeof Float64Array){try{xb.BYTES_PER_ELEMENT=8}catch(b){}xb.prototype.BYTES_PER_ELEMENT=xb.prototype.BYTES_PER_ELEMENT;xb.prototype.set=xb.prototype.set;xb.prototype.toString=xb.prototype.toString;F("Float64Array",xb,void 0)};function yb(b,c,d,e,f){b[0]=c;b[1]=d;b[2]=e;b[3]=f};function zb(){var b=Array(16);Ab(b,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);return b}function Bb(){var b=Array(16);Ab(b,1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1);return b}function Ab(b,c,d,e,f,g,h,k,l,m,n,q,r,u,w,y,z){b[0]=c;b[1]=d;b[2]=e;b[3]=f;b[4]=g;b[5]=h;b[6]=k;b[7]=l;b[8]=m;b[9]=n;b[10]=q;b[11]=r;b[12]=u;b[13]=w;b[14]=y;b[15]=z}
 function Cb(b,c){b[0]=c[0];b[1]=c[1];b[2]=c[2];b[3]=c[3];b[4]=c[4];b[5]=c[5];b[6]=c[6];b[7]=c[7];b[8]=c[8];b[9]=c[9];b[10]=c[10];b[11]=c[11];b[12]=c[12];b[13]=c[13];b[14]=c[14];b[15]=c[15]}function Db(b){b[0]=1;b[1]=0;b[2]=0;b[3]=0;b[4]=0;b[5]=1;b[6]=0;b[7]=0;b[8]=0;b[9]=0;b[10]=1;b[11]=0;b[12]=0;b[13]=0;b[14]=0;b[15]=1}
@@ -40,21 +40,21 @@ function ic(b){this.qa=b.code;this.b=b.units;this.h=void 0!==b.extent?b.extent:n
 else{h=e(g,d);b=h.forward;h=h.inverse;var c=lc(c),k=lc(this);nc(c,k,oc(b));nc(k,c,oc(h))}}}}ic.prototype.l=function(){return this.qa};ic.prototype.C=function(){return this.h};function pc(b){return b.g||hc[b.b]}ic.prototype.j=function(b,c){if("degrees"==this.b)return b;var d=qc(this,lc("EPSG:4326")),e=[c[0]-b/2,c[1],c[0]+b/2,c[1],c[0],c[1]-b/2,c[0],c[1]+b/2],e=d(e,e,2),d=(fc(e.slice(0,2),e.slice(2,4))+fc(e.slice(4,6),e.slice(6,8)))/2,e=pc(this);void 0!==e&&(d/=e);return d};
 ic.prototype.getPointResolution=function(b,c){return this.i(b,c)};var jc={},rc={},kc=null;function mc(b){sc(b);b.forEach(function(c){b.forEach(function(b){c!==b&&nc(c,b,tc)})})}function uc(b){jc[b.qa]=b;nc(b,b,tc)}function sc(b){var c=[];b.forEach(function(b){c.push(uc(b))})}function vc(b){return b?"string"===typeof b?lc(b):b:lc("EPSG:3857")}function nc(b,c,d){b=b.qa;c=c.qa;b in rc||(rc[b]={});rc[b][c]=d}
 function oc(b){return function(c,d,e){var f=c.length;e=void 0!==e?e:2;d=void 0!==d?d:Array(f);var g,h;for(h=0;h<f;h+=e)for(g=b([c[h],c[h+1]]),d[h]=g[0],d[h+1]=g[1],g=e-1;2<=g;--g)d[h+g]=c[h+g];return d}}function lc(b){var c;if(b instanceof ic)c=b;else if("string"===typeof b){c=jc[b];var d=kc||x.proj4;void 0===c&&"function"==typeof d&&void 0!==d.defs(b)&&(c=new ic({code:b}),uc(c))}else c=null;return c}function wc(b,c){if(b===c)return!0;var d=b.b===c.b;return b.qa===c.qa?d:qc(b,c)===tc&&d}
-function xc(b,c){var d=lc(b),e=lc(c);return qc(d,e)}function qc(b,c){var d=b.qa,e=c.qa,f;d in rc&&e in rc[d]&&(f=rc[d][e]);void 0===f&&(f=yc);return f}function yc(b,c){if(void 0!==c&&b!==c){for(var d=0,e=b.length;d<e;++d)c[d]=b[d];b=c}return b}function tc(b,c){var d;if(void 0!==c){d=0;for(var e=b.length;d<e;++d)c[d]=b[d];d=c}else d=b.slice();return d};function zc(){T.call(this);this.u=Jb();this.w=-1;this.h={};this.s=this.i=0}M(zc,T);zc.prototype.C=function(b){this.w!=this.f&&(this.u=this.ib(this.u),this.w=this.f);var c=this.u;b?(b[0]=c[0],b[1]=c[1],b[2]=c[2],b[3]=c[3]):b=c;return b};zc.prototype.o=function(b,c){this.Db(xc(b,c));return this};function Ac(b,c,d,e,f,g){var h=f[0],k=f[1],l=f[4],m=f[5],n=f[12];f=f[13];for(var q=g?g:[],r=0;c<d;c+=e){var u=b[c],w=b[c+1];q[r++]=h*u+l*w+n;q[r++]=k*u+m*w+f}g&&q.length!=r&&(q.length=r);return q};function Bc(){zc.call(this);this.g="XY";this.b=2;this.a=null}M(Bc,zc);function Cc(b){if("XY"==b)return 2;if("XYZ"==b||"XYM"==b)return 3;if("XYZM"==b)return 4}p=Bc.prototype;p.ib=function(b){var c=this.a,d=this.a.length,e=this.b;b=Pb(b);return Tb(b,c,0,d,e)};
-p.Nb=function(b){this.s!=this.f&&(Ya(this.h),this.i=0,this.s=this.f);if(0>b||0!==this.i&&b<=this.i)return this;var c=b.toString();if(this.h.hasOwnProperty(c))return this.h[c];var d=this.Ma(b);if(d.a.length<this.a.length)return this.h[c]=d;this.i=b;return this};p.Ma=function(){return this};function U(b,c,d){b.b=Cc(c);b.g=c;b.a=d}function Dc(b,c,d,e){if(c)d=Cc(c);else{for(c=0;c<e;++c){if(0===d.length){b.g="XY";b.b=2;return}d=d[0]}d=d.length;c=2==d?"XY":3==d?"XYZ":4==d?"XYZM":void 0}b.g=c;b.b=d}
-p.Db=function(b){this.a&&(b(this.a,this.a,this.b),this.v())};p.rotate=function(b,c){var d=this.a;if(d){for(var e=d.length,f=this.b,g=d?d:[],h=Math.cos(b),k=Math.sin(b),l=c[0],m=c[1],n=0,q=0;q<e;q+=f){var r=d[q]-l,u=d[q+1]-m;g[n++]=l+r*h-u*k;g[n++]=m+r*k+u*h;for(r=q+2;r<q+f;++r)g[n++]=d[r]}d&&g.length!=n&&(g.length=n);this.v()}};function Ec(b,c){var d=0,e,f;e=0;for(f=c.length;e<f;++e)b[d++]=c[e];return d}function Fc(b,c,d,e){var f,g;f=0;for(g=d.length;f<g;++f){var h=d[f],k;for(k=0;k<e;++k)b[c++]=h[k]}return c}function Gc(b,c,d,e,f){f=f?f:[];var g=0,h,k;h=0;for(k=d.length;h<k;++h)c=Fc(b,c,d[h],e),f[g++]=c;f.length=g;return f};function Hc(b,c,d,e,f){f=void 0!==f?f:[];for(var g=0;c<d;c+=e)f[g++]=b.slice(c,c+e);f.length=g;return f}function Ic(b,c,d,e,f){f=void 0!==f?f:[];var g=0,h,k;h=0;for(k=d.length;h<k;++h){var l=d[h];f[g++]=Hc(b,c,l,e,f[g]);c=l}f.length=g;return f};function Jc(b,c,d,e,f,g,h){var k=(d-c)/e;if(3>k){for(;c<d;c+=e)g[h++]=b[c],g[h++]=b[c+1];return h}var l=Array(k);l[0]=1;l[k-1]=1;d=[c,d-e];for(var m=0,n;0<d.length;){var q=d.pop(),r=d.pop(),u=0,w=b[r],y=b[r+1],z=b[q],D=b[q+1];for(n=r+e;n<q;n+=e){var t,v=b[n];t=b[n+1];var B=w,E=y,C=z-B,G=D-E;if(0!==C||0!==G){var J=((v-B)*C+(t-E)*G)/(C*C+G*G);1<J?(B=z,E=D):0<J&&(B+=C*J,E+=G*J)}v=B-v;t=E-t;t=v*v+t*t;t>u&&(m=n,u=t)}u>f&&(l[(m-c)/e]=1,r+e<m&&d.push(r,m),m+e<q&&d.push(m,q))}for(n=0;n<k;++n)l[n]&&(g[h++]=
+function xc(b,c){var d=lc(b),e=lc(c);return qc(d,e)}function qc(b,c){var d=b.qa,e=c.qa,f;d in rc&&e in rc[d]&&(f=rc[d][e]);void 0===f&&(f=yc);return f}function yc(b,c){if(void 0!==c&&b!==c){for(var d=0,e=b.length;d<e;++d)c[d]=b[d];b=c}return b}function tc(b,c){var d;if(void 0!==c){d=0;for(var e=b.length;d<e;++d)c[d]=b[d];d=c}else d=b.slice();return d};function zc(){T.call(this);this.u=Jb();this.w=-1;this.h={};this.s=this.i=0}M(zc,T);zc.prototype.C=function(b){this.w!=this.f&&(this.u=this.ib(this.u),this.w=this.f);var c=this.u;b?(b[0]=c[0],b[1]=c[1],b[2]=c[2],b[3]=c[3]):b=c;return b};zc.prototype.o=function(b,c){this.Eb(xc(b,c));return this};function Ac(b,c,d,e,f,g){var h=f[0],k=f[1],l=f[4],m=f[5],n=f[12];f=f[13];for(var q=g?g:[],r=0;c<d;c+=e){var u=b[c],w=b[c+1];q[r++]=h*u+l*w+n;q[r++]=k*u+m*w+f}g&&q.length!=r&&(q.length=r);return q};function Bc(){zc.call(this);this.g="XY";this.b=2;this.a=null}M(Bc,zc);function Cc(b){if("XY"==b)return 2;if("XYZ"==b||"XYM"==b)return 3;if("XYZM"==b)return 4}p=Bc.prototype;p.ib=function(b){var c=this.a,d=this.a.length,e=this.b;b=Pb(b);return Tb(b,c,0,d,e)};
+p.Ob=function(b){this.s!=this.f&&(Ya(this.h),this.i=0,this.s=this.f);if(0>b||0!==this.i&&b<=this.i)return this;var c=b.toString();if(this.h.hasOwnProperty(c))return this.h[c];var d=this.Ma(b);if(d.a.length<this.a.length)return this.h[c]=d;this.i=b;return this};p.Ma=function(){return this};function U(b,c,d){b.b=Cc(c);b.g=c;b.a=d}function Dc(b,c,d,e){if(c)d=Cc(c);else{for(c=0;c<e;++c){if(0===d.length){b.g="XY";b.b=2;return}d=d[0]}d=d.length;c=2==d?"XY":3==d?"XYZ":4==d?"XYZM":void 0}b.g=c;b.b=d}
+p.Eb=function(b){this.a&&(b(this.a,this.a,this.b),this.v())};p.rotate=function(b,c){var d=this.a;if(d){for(var e=d.length,f=this.b,g=d?d:[],h=Math.cos(b),k=Math.sin(b),l=c[0],m=c[1],n=0,q=0;q<e;q+=f){var r=d[q]-l,u=d[q+1]-m;g[n++]=l+r*h-u*k;g[n++]=m+r*k+u*h;for(r=q+2;r<q+f;++r)g[n++]=d[r]}d&&g.length!=n&&(g.length=n);this.v()}};function Ec(b,c){var d=0,e,f;e=0;for(f=c.length;e<f;++e)b[d++]=c[e];return d}function Fc(b,c,d,e){var f,g;f=0;for(g=d.length;f<g;++f){var h=d[f],k;for(k=0;k<e;++k)b[c++]=h[k]}return c}function Gc(b,c,d,e,f){f=f?f:[];var g=0,h,k;h=0;for(k=d.length;h<k;++h)c=Fc(b,c,d[h],e),f[g++]=c;f.length=g;return f};function Hc(b,c,d,e,f){f=void 0!==f?f:[];for(var g=0;c<d;c+=e)f[g++]=b.slice(c,c+e);f.length=g;return f}function Ic(b,c,d,e,f){f=void 0!==f?f:[];var g=0,h,k;h=0;for(k=d.length;h<k;++h){var l=d[h];f[g++]=Hc(b,c,l,e,f[g]);c=l}f.length=g;return f};function Jc(b,c,d,e,f,g,h){var k=(d-c)/e;if(3>k){for(;c<d;c+=e)g[h++]=b[c],g[h++]=b[c+1];return h}var l=Array(k);l[0]=1;l[k-1]=1;d=[c,d-e];for(var m=0,n;0<d.length;){var q=d.pop(),r=d.pop(),u=0,w=b[r],y=b[r+1],z=b[q],D=b[q+1];for(n=r+e;n<q;n+=e){var t,v=b[n];t=b[n+1];var B=w,E=y,C=z-B,G=D-E;if(0!==C||0!==G){var J=((v-B)*C+(t-E)*G)/(C*C+G*G);1<J?(B=z,E=D):0<J&&(B+=C*J,E+=G*J)}v=B-v;t=E-t;t=v*v+t*t;t>u&&(m=n,u=t)}u>f&&(l[(m-c)/e]=1,r+e<m&&d.push(r,m),m+e<q&&d.push(m,q))}for(n=0;n<k;++n)l[n]&&(g[h++]=
 b[c+n*e],g[h++]=b[c+n*e+1]);return h}
 function Kc(b,c,d,e,f,g,h,k){var l,m;l=0;for(m=d.length;l<m;++l){var n=d[l];a:{var q=b,r=n,u=e,w=f,y=g;if(c!=r){var z=w*Math.round(q[c]/w),D=w*Math.round(q[c+1]/w);c+=u;y[h++]=z;y[h++]=D;var t=void 0,v=void 0;do if(t=w*Math.round(q[c]/w),v=w*Math.round(q[c+1]/w),c+=u,c==r){y[h++]=t;y[h++]=v;break a}while(t==z&&v==D);for(;c<r;){var B,E;B=w*Math.round(q[c]/w);E=w*Math.round(q[c+1]/w);c+=u;if(B!=t||E!=v){var C=t-z,G=v-D,J=B-z,A=E-D;C*A==G*J&&(0>C&&J<C||C==J||0<C&&J>C)&&(0>G&&A<G||G==A||0<G&&A>G)||(y[h++]=
 t,y[h++]=v,z=t,D=v);t=B;v=E}}y[h++]=t;y[h++]=v}}k.push(h);c=n}return h};function Lc(b,c){Bc.call(this);this.W(b,c)}M(Lc,Bc);p=Lc.prototype;p.clone=function(){var b=new Lc(null);U(b,this.g,this.a.slice());b.v();return b};p.ra=function(){return Hc(this.a,0,this.a.length,this.b)};p.Ma=function(b){var c=[];c.length=Jc(this.a,0,this.a.length,this.b,b,c,0);b=new Lc(null);U(b,"XY",c);b.v();return b};p.U=function(){return"LinearRing"};p.W=function(b,c){b?(Dc(this,c,b,1),this.a||(this.a=[]),this.a.length=Fc(this.a,0,b,this.b)):U(this,"XY",null);this.v()};function Mc(b,c){Bc.call(this);this.W(b,c)}M(Mc,Bc);p=Mc.prototype;p.clone=function(){var b=new Mc(null);U(b,this.g,this.a.slice());b.v();return b};p.ra=function(){return this.a?this.a.slice():[]};p.ib=function(b){return Qb(this.a,b)};p.U=function(){return"Point"};p.W=function(b,c){b?(Dc(this,c,b,0),this.a||(this.a=[]),this.a.length=Ec(this.a,b)):U(this,"XY",null);this.v()};function Nc(b,c,d,e,f,g){for(var h=!1,k=b[d-e],l=b[d-e+1];c<d;c+=e){var m=b[c],n=b[c+1];l>g!=n>g&&f<(m-k)*(g-l)/(n-l)+k&&(h=!h);k=m;l=n}return h};function Oc(b,c,d,e,f,g,h){var k,l,m,n,q,r=f[g+1],u=[],w=d[0];m=b[w-e];q=b[w-e+1];for(k=c;k<w;k+=e){n=b[k];l=b[k+1];if(r<=q&&l<=r||q<=r&&r<=l)m=(r-q)/(l-q)*(n-m)+m,u.push(m);m=n;q=l}w=NaN;q=-Infinity;u.sort(Ha);m=u[0];k=1;for(l=u.length;k<l;++k){n=u[k];var y=Math.abs(n-m);if(y>q){m=(m+n)/2;var z;a:if(0!==d.length&&Nc(b,c,d[0],e,m,r)){var D=z=void 0;z=1;for(D=d.length;z<D;++z)if(Nc(b,d[z-1],d[z],e,m,r)){z=!1;break a}z=!0}else z=!1;z&&(w=m,q=y)}m=n}isNaN(w)&&(w=f[g]);return h?(h.push(w,r),h):[w,r]}
 ;function Pc(b,c,d,e){for(var f=0,g=b[d-e],h=b[d-e+1];c<d;c+=e)var k=b[c],l=b[c+1],f=f+(k-g)*(l+h),g=k,h=l;return 0<f}function Qc(b,c,d,e){var f=0;e=void 0!==e?e:!1;var g,h;g=0;for(h=c.length;g<h;++g){var k=c[g],f=Pc(b,f,k,d);if(0===g){if(e&&f||!e&&!f)return!1}else if(e&&!f||!e&&f)return!1;f=k}return!0}
-function Rc(b,c,d,e,f){f=void 0!==f?f:!1;var g,h;g=0;for(h=d.length;g<h;++g){var k=d[g],l=Pc(b,c,k,e);if(0===g?f&&l||!f&&!l:f&&!l||!f&&l)for(var l=b,m=k,n=e;c<m-n;){var q;for(q=0;q<n;++q){var r=l[c+q];l[c+q]=l[m-n+q];l[m-n+q]=r}c+=n;m-=n}c=k}return c}function Sc(b,c,d,e){var f=0,g,h;g=0;for(h=c.length;g<h;++g)f=Rc(b,f,c[g],d,e);return f};function Tc(b,c){Bc.call(this);this.c=[];this.B=-1;this.D=null;this.G=-1;this.j=null;this.W(b,c)}M(Tc,Bc);p=Tc.prototype;p.clone=function(){var b=new Tc(null);Uc(b,this.g,this.a.slice(),this.c.slice());return b};p.ra=function(b){var c;void 0!==b?(c=Vc(this).slice(),Rc(c,0,this.c,this.b,b)):c=this.a;return Ic(c,0,this.c,this.b)};p.$a=function(){return this.c};function Wc(b){if(b.B!=b.f){var c=Yb(b.C());b.D=Oc(Vc(b),0,b.c,b.b,c,0);b.B=b.f}return b.D}
+function Rc(b,c,d,e,f){f=void 0!==f?f:!1;var g,h;g=0;for(h=d.length;g<h;++g){var k=d[g],l=Pc(b,c,k,e);if(0===g?f&&l||!f&&!l:f&&!l||!f&&l)for(var l=b,m=k,n=e;c<m-n;){var q;for(q=0;q<n;++q){var r=l[c+q];l[c+q]=l[m-n+q];l[m-n+q]=r}c+=n;m-=n}c=k}return c}function Sc(b,c,d,e){var f=0,g,h;g=0;for(h=c.length;g<h;++g)f=Rc(b,f,c[g],d,e);return f};function Tc(b,c){Bc.call(this);this.c=[];this.B=-1;this.D=null;this.G=-1;this.j=null;this.W(b,c)}M(Tc,Bc);p=Tc.prototype;p.clone=function(){var b=new Tc(null);Uc(b,this.g,this.a.slice(),this.c.slice());return b};p.ra=function(b){var c;void 0!==b?(c=Vc(this).slice(),Rc(c,0,this.c,this.b,b)):c=this.a;return Ic(c,0,this.c,this.b)};p.ab=function(){return this.c};function Wc(b){if(b.B!=b.f){var c=Yb(b.C());b.D=Oc(Vc(b),0,b.c,b.b,c,0);b.B=b.f}return b.D}
 function Vc(b){if(b.G!=b.f){var c=b.a;Qc(c,b.c,b.b)?b.j=c:(b.j=c.slice(),b.j.length=Rc(b.j,0,b.c,b.b));b.G=b.f}return b.j}p.Ma=function(b){var c=[],d=[];c.length=Kc(this.a,0,this.c,this.b,Math.sqrt(b),c,0,d);b=new Tc(null);Uc(b,"XY",c,d);return b};p.U=function(){return"Polygon"};p.W=function(b,c){if(b){Dc(this,c,b,2);this.a||(this.a=[]);var d=Gc(this.a,0,b,this.b,this.c);this.a.length=0===d.length?0:d[d.length-1];this.v()}else Uc(this,"XY",null,this.c)};function Uc(b,c,d,e){U(b,c,d);b.c=e;b.v()};function V(b){T.call(this);b=b||{};this.g=[0,0];var c={};c.center=void 0!==b.center?b.center:null;this.h=vc(b.projection);var d,e,f,g=void 0!==b.minZoom?b.minZoom:0;d=void 0!==b.maxZoom?b.maxZoom:28;var h=void 0!==b.zoomFactor?b.zoomFactor:2;if(void 0!==b.resolutions)d=b.resolutions,e=d[0],f=d[d.length-1],d=Pa(d);else{e=vc(b.projection);f=e.C();var k=(f?Math.max(Vb(f),Wb(f)):360*hc.degrees/pc(e))/256/Math.pow(2,0),l=k/Math.pow(2,28);e=b.maxResolution;void 0!==e?g=0:e=k/Math.pow(h,g);f=b.minResolution;
 void 0===f&&(f=void 0!==b.maxZoom?void 0!==b.maxResolution?e/Math.pow(h,d):k/Math.pow(h,d):l);d=g+Math.floor(Math.log(e/f)/Math.log(h));f=e/Math.pow(h,d-g);d=Qa(h,e,d-g)}this.b=e;this.i=f;this.c=g;g=void 0!==b.extent?Fa(b.extent):Ga;(void 0!==b.enableRotation?b.enableRotation:1)?(e=b.constrainRotation,e=void 0===e||!0===e?Ua():!1===e?Sa:ea(e)?Ta(e):Sa):e=Ra;this.a=new Va(g,d,e);void 0!==b.resolution?c.resolution=b.resolution:void 0!==b.zoom&&(c.resolution=this.constrainResolution(this.b,b.zoom-this.c));
-c.rotation=void 0!==b.rotation?b.rotation:0;this.l(c)}M(V,T);p=V.prototype;p.constrainResolution=function(b,c,d){return this.a.resolution(b,c||0,d||0)};p.constrainRotation=function(b,c){return this.a.rotation(b,c||0)};p.ia=function(){return this.get("center")};p.jc=function(b){var c=this.ia(),d=this.I(),e=this.Y();return Zb(c,d,e,b)};p.ke=function(){return this.h};p.I=function(){return this.get("resolution")};function Xc(b,c){return Math.max(Vb(b)/c[0],Wb(b)/c[1])}p.Y=function(){return this.get("rotation")};
-p.N=function(){var b=this.ia(),c=this.h,d=this.I(),e=this.Y();return{center:[Math.round(b[0]/d)*d,Math.round(b[1]/d)*d],projection:void 0!==c?c:null,resolution:d,rotation:e}};p.vd=function(){var b,c=this.I();if(void 0!==c){var d,e=0;do{d=this.constrainResolution(this.b,e);if(d==c){b=e;break}++e}while(d>this.i)}return void 0!==b?this.c+b:b};
-p.md=function(b,c,d){if(!(b instanceof Bc)){var e=b[0],f=b[1],g=b[2],h=b[3],e=[e,f,e,h,g,h,g,f,e,f],f=new Tc(null);Uc(f,"XY",e,[e.length]);b=f}e=d||{};d=void 0!==e.padding?e.padding:[0,0,0,0];var h=void 0!==e.constrainResolution?e.constrainResolution:!0,f=void 0!==e.nearest?e.nearest:!1,k;void 0!==e.minResolution?k=e.minResolution:void 0!==e.maxZoom?k=this.constrainResolution(this.b,e.maxZoom-this.c,0):k=0;var l=b.a,g=this.Y(),e=Math.cos(-g),g=Math.sin(-g),m=Infinity,n=Infinity,q=-Infinity,r=-Infinity;
+c.rotation=void 0!==b.rotation?b.rotation:0;this.l(c)}M(V,T);p=V.prototype;p.constrainResolution=function(b,c,d){return this.a.resolution(b,c||0,d||0)};p.constrainRotation=function(b,c){return this.a.rotation(b,c||0)};p.ia=function(){return this.get("center")};p.jc=function(b){var c=this.ia(),d=this.I(),e=this.Z();return Zb(c,d,e,b)};p.le=function(){return this.h};p.I=function(){return this.get("resolution")};function Xc(b,c){return Math.max(Vb(b)/c[0],Wb(b)/c[1])}p.Z=function(){return this.get("rotation")};
+p.N=function(){var b=this.ia(),c=this.h,d=this.I(),e=this.Z();return{center:[Math.round(b[0]/d)*d,Math.round(b[1]/d)*d],projection:void 0!==c?c:null,resolution:d,rotation:e}};p.wd=function(){var b,c=this.I();if(void 0!==c){var d,e=0;do{d=this.constrainResolution(this.b,e);if(d==c){b=e;break}++e}while(d>this.i)}return void 0!==b?this.c+b:b};
+p.nd=function(b,c,d){if(!(b instanceof Bc)){var e=b[0],f=b[1],g=b[2],h=b[3],e=[e,f,e,h,g,h,g,f,e,f],f=new Tc(null);Uc(f,"XY",e,[e.length]);b=f}e=d||{};d=void 0!==e.padding?e.padding:[0,0,0,0];var h=void 0!==e.constrainResolution?e.constrainResolution:!0,f=void 0!==e.nearest?e.nearest:!1,k;void 0!==e.minResolution?k=e.minResolution:void 0!==e.maxZoom?k=this.constrainResolution(this.b,e.maxZoom-this.c,0):k=0;var l=b.a,g=this.Z(),e=Math.cos(-g),g=Math.sin(-g),m=Infinity,n=Infinity,q=-Infinity,r=-Infinity;
 b=b.b;for(var u=0,w=l.length;u<w;u+=b)var y=l[u]*e-l[u+1]*g,z=l[u]*g+l[u+1]*e,m=Math.min(m,y),n=Math.min(n,z),q=Math.max(q,y),r=Math.max(r,z);c=Xc([m,n,q,r],[c[0]-d[1]-d[3],c[1]-d[0]-d[2]]);c=isNaN(c)?k:Math.max(c,k);h&&(k=this.constrainResolution(c,0,0),!f&&k<c&&(k=this.constrainResolution(k,-1,0)),c=k);Yc(this,c);g=-g;k=(m+q)/2+(d[1]-d[3])/2*c;c=(n+r)/2+(d[0]-d[2])/2*c;this.oa([k*e-c*g,c*e+k*g])};
-p.rotate=function(b,c){if(void 0!==c){var d,e=this.ia();void 0!==e&&(d=[e[0]-c[0],e[1]-c[1]],vb(d,b-this.Y()),ub(d,c));this.oa(d)}this.set("rotation",b)};p.oa=function(b){this.set("center",b)};function Zc(b,c){b.g[1]+=c}function Yc(b,c){b.set("resolution",c)}p.De=function(b){b=this.constrainResolution(this.b,b-this.c,0);Yc(this,b)};function $c(b){return 1-Math.pow(1-b,3)}function ad(b){return 3*b*b-2*b*b*b}function bd(b){return b};function cd(b){var c=b.source,d=b.start?b.start:Date.now(),e=c[0],f=c[1],g=void 0!==b.duration?b.duration:1E3,h=b.easing?b.easing:ad;return function(b,c){if(c.time<d)return c.animate=!0,c.viewHints[0]+=1,!0;if(c.time<d+g){var m=1-h((c.time-d)/g),n=e-c.viewState.center[0],q=f-c.viewState.center[1];c.animate=!0;c.viewState.center[0]+=m*n;c.viewState.center[1]+=m*q;c.viewHints[0]+=1;return!0}return!1}}
+p.rotate=function(b,c){if(void 0!==c){var d,e=this.ia();void 0!==e&&(d=[e[0]-c[0],e[1]-c[1]],vb(d,b-this.Z()),ub(d,c));this.oa(d)}this.set("rotation",b)};p.oa=function(b){this.set("center",b)};function Zc(b,c){b.g[1]+=c}function Yc(b,c){b.set("resolution",c)}p.Ee=function(b){b=this.constrainResolution(this.b,b-this.c,0);Yc(this,b)};function $c(b){return 1-Math.pow(1-b,3)}function ad(b){return 3*b*b-2*b*b*b}function bd(b){return b};function cd(b){var c=b.source,d=b.start?b.start:Date.now(),e=c[0],f=c[1],g=void 0!==b.duration?b.duration:1E3,h=b.easing?b.easing:ad;return function(b,c){if(c.time<d)return c.animate=!0,c.viewHints[0]+=1,!0;if(c.time<d+g){var m=1-h((c.time-d)/g),n=e-c.viewState.center[0],q=f-c.viewState.center[1];c.animate=!0;c.viewState.center[0]+=m*n;c.viewState.center[1]+=m*q;c.viewHints[0]+=1;return!0}return!1}}
 function dd(b){var c=b.rotation?b.rotation:0,d=b.start?b.start:Date.now(),e=void 0!==b.duration?b.duration:1E3,f=b.easing?b.easing:ad,g=b.anchor?b.anchor:null;return function(b,k){if(k.time<d)return k.animate=!0,k.viewHints[0]+=1,!0;if(k.time<d+e){var l=1-f((k.time-d)/e),l=(c-k.viewState.rotation)*l;k.animate=!0;k.viewState.rotation+=l;if(g){var m=k.viewState.center;m[0]-=g[0];m[1]-=g[1];vb(m,l);ub(m,g)}k.viewHints[0]+=1;return!0}return!1}}
 function ed(b){var c=b.resolution,d=b.start?b.start:Date.now(),e=void 0!==b.duration?b.duration:1E3,f=b.easing?b.easing:ad;return function(b,h){if(h.time<d)return h.animate=!0,h.viewHints[0]+=1,!0;if(h.time<d+e){var k=1-f((h.time-d)/e),l=c-h.viewState.resolution;h.animate=!0;h.viewState.resolution+=k*l;h.viewHints[0]+=1;return!0}return!1}};function fd(b,c,d,e){this.a=b;this.f=c;this.b=d;this.c=e}function gd(b,c,d){return b.a<=c&&c<=b.f&&b.b<=d&&d<=b.c}function hd(b,c){return b.a==c.a&&b.b==c.b&&b.f==c.f&&b.c==c.c}fd.prototype.ha=function(){return this.f-this.a+1};function id(b,c){return b.a<=c.f&&b.f>=c.a&&b.b<=c.c&&b.c>=c.b};function jd(b){this.b=b.html;this.a=b.tileRanges?b.tileRanges:null};function kd(b,c,d){R.call(this,b,d);this.element=c}M(kd,R);function ld(b){T.call(this);this.a=b?b:[];md(this)}M(ld,T);p=ld.prototype;p.clear=function(){for(;0<this.get("length");)this.pop()};function nd(b,c,d){b.a.forEach(c,d)}p.item=function(b){return this.a[b]};p.pop=function(){return od(this,this.get("length")-1)};p.push=function(b){var c=this.a.length;this.a.splice(c,0,b);md(this);S(this,new kd("add",b,this));return c};
 p.remove=function(b){var c=this.a,d,e;d=0;for(e=c.length;d<e;++d)if(c[d]===b)return od(this,d)};function od(b,c){var d=b.a[c];b.a.splice(c,1);md(b);S(b,new kd("remove",d,b));return d}function md(b){b.set("length",b.a.length)};function pd(b,c){Array.prototype.forEach.call(b,c,void 0)}function qd(b){var c=b.length;if(0<c){for(var d=Array(c),e=0;e<c;e++)d[e]=b[e];return d}return[]}function rd(b,c,d){return 2>=arguments.length?Array.prototype.slice.call(b,c):Array.prototype.slice.call(b,c,d)};var sd=/^#(?:[0-9a-f]{3}){1,2}$/i,td=/^(?:rgb)?\((0|[1-9]\d{0,2}),\s?(0|[1-9]\d{0,2}),\s?(0|[1-9]\d{0,2})\)$/i,ud=/^(?:rgba)?\((0|[1-9]\d{0,2}),\s?(0|[1-9]\d{0,2}),\s?(0|[1-9]\d{0,2}),\s?(0|1|0\.\d{0,10})\)$/i;function vd(b){if("string"!==typeof b){var c=b[0];c!=(c|0)&&(c=c+.5|0);var d=b[1];d!=(d|0)&&(d=d+.5|0);var e=b[2];e!=(e|0)&&(e=e+.5|0);b="rgba("+c+","+d+","+e+","+(void 0===b[3]?1:b[3])+")"}return b}
@@ -62,94 +62,98 @@ var xd=function(){var b={},c=0;return function(d){var e;if(b.hasOwnProperty(d))e
 e=[e,f,g,1],e=wd(e,e)):e=void 0;b[d]=e;++c}return e}}();function wd(b,c){var d=c||[];d[0]=Ca(b[0]+.5|0,0,255);d[1]=Ca(b[1]+.5|0,0,255);d[2]=Ca(b[2]+.5|0,0,255);d[3]=Ca(b[3],0,1);return d};function yd(b){return"string"===typeof b||b instanceof CanvasPattern||b instanceof CanvasGradient?b:vd(b)};var zd;a:{var Ad=x.navigator;if(Ad){var Bd=Ad.userAgent;if(Bd){zd=Bd;break a}}zd=""}function W(b){return-1!=zd.indexOf(b)};function Cd(b,c){for(var d in b)c.call(void 0,b[d],d,b)}var Dd="constructor hasOwnProperty isPrototypeOf propertyIsEnumerable toLocaleString toString valueOf".split(" ");function Ed(b,c){for(var d,e,f=1;f<arguments.length;f++){e=arguments[f];for(d in e)b[d]=e[d];for(var g=0;g<Dd.length;g++)d=Dd[g],Object.prototype.hasOwnProperty.call(e,d)&&(b[d]=e[d])}};var Fd=W("Opera")||W("OPR"),Gd=W("Trident")||W("MSIE"),Hd=W("Edge"),Id=W("Gecko")&&!(-1!=zd.toLowerCase().indexOf("webkit")&&!W("Edge"))&&!(W("Trident")||W("MSIE"))&&!W("Edge"),Jd=-1!=zd.toLowerCase().indexOf("webkit")&&!W("Edge");function Kd(){var b=x.document;return b?b.documentMode:void 0}var Ld;
 a:{var Md="",Nd=function(){var b=zd;if(Id)return/rv\:([^\);]+)(\)|;)/.exec(b);if(Hd)return/Edge\/([\d\.]+)/.exec(b);if(Gd)return/\b(?:MSIE|rv)[: ]([^\);]+)(\)|;)/.exec(b);if(Jd)return/WebKit\/(\S+)/.exec(b);if(Fd)return/(?:Version)[ \/]?(\S+)/.exec(b)}();Nd&&(Md=Nd?Nd[1]:"");if(Gd){var Od=Kd();if(null!=Od&&Od>parseFloat(Md)){Ld=String(Od);break a}}Ld=Md}var Pd={};
 function Qd(b){var c;if(!(c=Pd[b])){c=0;for(var d=sa(String(Ld)).split("."),e=sa(String(b)).split("."),f=Math.max(d.length,e.length),g=0;0==c&&g<f;g++){var h=d[g]||"",k=e[g]||"",l=RegExp("(\\d*)(\\D*)","g"),m=RegExp("(\\d*)(\\D*)","g");do{var n=l.exec(h)||["","",""],q=m.exec(k)||["","",""];if(0==n[0].length&&0==q[0].length)break;c=Ba(0==n[1].length?0:parseInt(n[1],10),0==q[1].length?0:parseInt(q[1],10))||Ba(0==n[2].length,0==q[2].length)||Ba(n[2],q[2])}while(0==c)}c=Pd[b]=0<=c}return c}
-var Rd=x.document,Sd=Rd&&Gd?Kd()||("CSS1Compat"==Rd.compatMode?parseInt(Ld,10):5):void 0;var Td=!Gd||9<=Number(Sd);!Id&&!Gd||Gd&&9<=Number(Sd)||Id&&Qd("1.9.1");Gd&&Qd("9");function Ud(b,c){this.x=void 0!==b?b:0;this.y=void 0!==c?c:0}p=Ud.prototype;p.clone=function(){return new Ud(this.x,this.y)};p.ceil=function(){this.x=Math.ceil(this.x);this.y=Math.ceil(this.y);return this};p.floor=function(){this.x=Math.floor(this.x);this.y=Math.floor(this.y);return this};p.round=function(){this.x=Math.round(this.x);this.y=Math.round(this.y);return this};p.scale=function(b,c){var d=ea(c)?c:b;this.x*=b;this.y*=d;return this};function Vd(b,c){this.width=b;this.height=c}p=Vd.prototype;p.clone=function(){return new Vd(this.width,this.height)};p.ceil=function(){this.width=Math.ceil(this.width);this.height=Math.ceil(this.height);return this};p.floor=function(){this.width=Math.floor(this.width);this.height=Math.floor(this.height);return this};p.round=function(){this.width=Math.round(this.width);this.height=Math.round(this.height);return this};p.scale=function(b,c){var d=ea(c)?c:b;this.width*=b;this.height*=d;return this};function Wd(b){return b?new Xd(Yd(b)):ra||(ra=new Xd)}function Zd(b){var c=document;return da(b)?c.getElementById(b):b}function $d(b,c){Cd(c,function(c,e){"style"==e?b.style.cssText=c:"class"==e?b.className=c:"for"==e?b.htmlFor=c:ae.hasOwnProperty(e)?b.setAttribute(ae[e],c):0==e.lastIndexOf("aria-",0)||0==e.lastIndexOf("data-",0)?b.setAttribute(e,c):b[e]=c})}
+var Rd=x.document,Sd=Rd&&Gd?Kd()||("CSS1Compat"==Rd.compatMode?parseInt(Ld,10):5):void 0;var Td=!Gd||9<=Number(Sd);!Id&&!Gd||Gd&&9<=Number(Sd)||Id&&Qd("1.9.1");Gd&&Qd("9");function Ud(b,c){this.x=void 0!==b?b:0;this.y=void 0!==c?c:0}p=Ud.prototype;p.clone=function(){return new Ud(this.x,this.y)};p.ceil=function(){this.x=Math.ceil(this.x);this.y=Math.ceil(this.y);return this};p.floor=function(){this.x=Math.floor(this.x);this.y=Math.floor(this.y);return this};p.round=function(){this.x=Math.round(this.x);this.y=Math.round(this.y);return this};p.scale=function(b,c){var d=ea(c)?c:b;this.x*=b;this.y*=d;return this};function Vd(b,c){this.width=b;this.height=c}p=Vd.prototype;p.clone=function(){return new Vd(this.width,this.height)};p.ceil=function(){this.width=Math.ceil(this.width);this.height=Math.ceil(this.height);return this};p.floor=function(){this.width=Math.floor(this.width);this.height=Math.floor(this.height);return this};p.round=function(){this.width=Math.round(this.width);this.height=Math.round(this.height);return this};p.scale=function(b,c){var d=ea(c)?c:b;this.width*=b;this.height*=d;return this};function Wd(b){return b?new Xd(Yd(b)):qa||(qa=new Xd)}function Zd(b){var c=document;return da(b)?c.getElementById(b):b}function $d(b,c){Cd(c,function(c,e){"style"==e?b.style.cssText=c:"class"==e?b.className=c:"for"==e?b.htmlFor=c:ae.hasOwnProperty(e)?b.setAttribute(ae[e],c):0==e.lastIndexOf("aria-",0)||0==e.lastIndexOf("data-",0)?b.setAttribute(e,c):b[e]=c})}
 var ae={cellpadding:"cellPadding",cellspacing:"cellSpacing",colspan:"colSpan",frameborder:"frameBorder",height:"height",maxlength:"maxLength",nonce:"nonce",role:"role",rowspan:"rowSpan",type:"type",usemap:"useMap",valign:"vAlign",width:"width"};
 function be(b,c,d){var e=arguments,f=document,g=e[0],h=e[1];if(!Td&&h&&(h.name||h.type)){g=["<",g];h.name&&g.push(' name="',ta(h.name),'"');if(h.type){g.push(' type="',ta(h.type),'"');var k={};Ed(k,h);delete k.type;h=k}g.push(">");g=g.join("")}g=f.createElement(g);h&&(da(h)?g.className=h:"array"==ba(h)?g.className=h.join(" "):$d(g,h));2<e.length&&ce(f,g,e);return g}
-function ce(b,c,d){function e(d){d&&c.appendChild(da(d)?b.createTextNode(d):d)}for(var f=2;f<d.length;f++){var g=d[f];!ca(g)||ha(g)&&0<g.nodeType?e(g):pd(de(g)?qd(g):g,e)}}function ee(b){for(var c;c=b.firstChild;)b.removeChild(c)}function fe(b,c,d){b.insertBefore(c,b.childNodes[d]||null)}function ge(b){b&&b.parentNode&&b.parentNode.removeChild(b)}
-function he(b,c){if(!b||!c)return!1;if(b.contains&&1==c.nodeType)return b==c||b.contains(c);if("undefined"!=typeof b.compareDocumentPosition)return b==c||!!(b.compareDocumentPosition(c)&16);for(;c&&b!=c;)c=c.parentNode;return c==b}function Yd(b){return 9==b.nodeType?b:b.ownerDocument||b.document}function de(b){if(b&&"number"==typeof b.length){if(ha(b))return"function"==typeof b.item||"string"==typeof b.item;if(ga(b))return"function"==typeof b.item}return!1}
-function Xd(b){this.a=b||x.document||document}Xd.prototype.appendChild=function(b,c){b.appendChild(c)};function ie(b,c,d,e){this.top=b;this.right=c;this.bottom=d;this.left=e}p=ie.prototype;p.ha=function(){return this.right-this.left};p.clone=function(){return new ie(this.top,this.right,this.bottom,this.left)};p.ceil=function(){this.top=Math.ceil(this.top);this.right=Math.ceil(this.right);this.bottom=Math.ceil(this.bottom);this.left=Math.ceil(this.left);return this};
-p.floor=function(){this.top=Math.floor(this.top);this.right=Math.floor(this.right);this.bottom=Math.floor(this.bottom);this.left=Math.floor(this.left);return this};p.round=function(){this.top=Math.round(this.top);this.right=Math.round(this.right);this.bottom=Math.round(this.bottom);this.left=Math.round(this.left);return this};p.scale=function(b,c){var d=ea(c)?c:b;this.left*=b;this.right*=b;this.top*=d;this.bottom*=d;return this};function je(b,c){var d=Yd(b);return d.defaultView&&d.defaultView.getComputedStyle&&(d=d.defaultView.getComputedStyle(b,null))?d[c]||d.getPropertyValue(c)||"":""}function ke(b){var c;try{c=b.getBoundingClientRect()}catch(d){return{left:0,top:0,right:0,bottom:0}}Gd&&b.ownerDocument.body&&(b=b.ownerDocument,c.left-=b.documentElement.clientLeft+b.body.clientLeft,c.top-=b.documentElement.clientTop+b.body.clientTop);return c}
-function le(b){var c=me;if("none"!=(je(b,"display")||(b.currentStyle?b.currentStyle.display:null)||b.style&&b.style.display))return c(b);var d=b.style,e=d.display,f=d.visibility,g=d.position;d.visibility="hidden";d.position="absolute";d.display="inline";b=c(b);d.display=e;d.position=g;d.visibility=f;return b}function me(b){var c=b.offsetWidth,d=b.offsetHeight,e=Jd&&!c&&!d;return(void 0===c||e)&&b.getBoundingClientRect?(b=ke(b),new Vd(b.right-b.left,b.bottom-b.top)):new Vd(c,d)}
-function ne(b,c){b.style.display=c?"":"none"}function oe(b,c,d,e){if(/^\d+px?$/.test(c))return parseInt(c,10);var f=b.style[d],g=b.runtimeStyle[d];b.runtimeStyle[d]=b.currentStyle[d];b.style[d]=c;c=b.style[e];b.style[d]=f;b.runtimeStyle[d]=g;return c}function pe(b,c){var d=b.currentStyle?b.currentStyle[c]:null;return d?oe(b,d,"left","pixelLeft"):0}var qe={thin:2,medium:4,thick:6};
-function re(b,c){if("none"==(b.currentStyle?b.currentStyle[c+"Style"]:null))return 0;var d=b.currentStyle?b.currentStyle[c+"Width"]:null;return d in qe?qe[d]:oe(b,d,"left","pixelLeft")};function se(b,c,d){R.call(this,b);this.map=c;this.frameState=void 0!==d?d:null}M(se,R);function te(b){T.call(this);this.element=b.element?b.element:null;this.g=this.B=null;this.i=[];this.render=b.render?b.render:pa;b.target&&(this.B=Zd(b.target))}M(te,T);te.prototype.J=function(){ge(this.element);te.$.J.call(this)};te.prototype.setMap=function(b){this.g&&ge(this.element);for(var c=0,d=this.i.length;c<d;++c)N(this.i[c]);this.i.length=0;if(this.g=b)(this.B?this.B:b.j).appendChild(this.element),this.render!==pa&&this.i.push(Q(b,"postrender",this.render,this)),b.render()};function ue(){this.f=0;this.c={};this.b=this.a=null}p=ue.prototype;p.clear=function(){this.f=0;this.c={};this.b=this.a=null};function ve(b,c){return b.c.hasOwnProperty(c)}function we(b,c){for(var d=b.a;d;)c.call(void 0,d.Ia,d.Qb,b),d=d.ma}p.get=function(b){b=this.c[b];if(b===this.b)return b.Ia;b===this.a?(this.a=this.a.ma,this.a.Qa=null):(b.ma.Qa=b.Qa,b.Qa.ma=b.ma);b.ma=null;b.Qa=this.b;this.b=this.b.ma=b;return b.Ia};
-p.pop=function(){var b=this.a;delete this.c[b.Qb];b.ma&&(b.ma.Qa=null);this.a=b.ma;this.a||(this.b=null);--this.f;return b.Ia};p.replace=function(b,c){this.get(b);this.c[b].Ia=c};p.set=function(b,c){var d={Qb:b,ma:null,Qa:this.b,Ia:c};this.b?this.b.ma=d:this.a=d;this.b=d;this.c[b]=d;++this.f};function xe(b){ue.call(this);this.g=void 0!==b?b:2048}M(xe,ue);function ye(b){return b.f>b.g}function ze(b,c){for(var d,e;ye(b);){d=b.a.Ia;e=d.L[0].toString();var f;if(f=e in c)d=d.L,f=gd(c[e],d[1],d[2]);if(f)break;else jb(b.pop())}};function Ae(b,c){mb.call(this);this.L=b;this.state=c;this.a=null;this.key=""}M(Ae,mb);function Be(b){S(b,"change")}Ae.prototype.getKey=function(){return I(this).toString()};Ae.prototype.N=function(){return this.state};function Ce(b){T.call(this);this.c=lc(b.projection);this.i=De(b.attributions);this.w=b.logo;this.B=void 0!==b.state?b.state:"ready";this.j=void 0!==b.wrapX?b.wrapX:!1}M(Ce,T);function De(b){if("string"===typeof b)return[new jd({html:b})];if(b instanceof jd)return[b];if(Array.isArray(b)){for(var c=b.length,d=Array(c),e=0;e<c;e++){var f=b[e];d[e]="string"===typeof f?new jd({html:f}):f}return d}return null}Ce.prototype.N=function(){return this.B};Ce.prototype.wa=function(){this.v()};function Ee(b){this.minZoom=void 0!==b.minZoom?b.minZoom:0;this.b=b.resolutions;this.maxZoom=this.b.length-1;this.f=void 0!==b.origin?b.origin:null;this.g=null;void 0!==b.origins&&(this.g=b.origins);var c=b.extent;void 0===c||this.f||this.g||(this.f=bc(c));this.h=null;void 0!==b.tileSizes&&(this.h=b.tileSizes);this.l=void 0!==b.tileSize?b.tileSize:this.h?null:256;this.i=void 0!==c?c:null;this.a=null;void 0!==b.sizes?this.a=b.sizes.map(function(b){return new fd(Math.min(0,b[0]),Math.max(b[0]-1,-1),
-Math.min(0,b[1]),Math.max(b[1]-1,-1))},this):c&&Fe(this,c);this.c=[0,0]}var Ge=[0,0,0];function He(b,c,d,e,f){f=Ie(b,c,f);for(c=c[0]-1;c>=b.minZoom;){if(d.call(null,c,Je(b,f,c,e)))return!0;--c}return!1}Ee.prototype.C=function(){return this.i};Ee.prototype.ka=function(b){return this.f?this.f:this.g[b]};Ee.prototype.I=function(b){return this.b[b]};Ee.prototype.Mb=function(){return this.b};function Ke(b,c,d,e){return c[0]<b.maxZoom?(e=Ie(b,c,e),Je(b,e,c[0]+1,d)):null}
-function Le(b,c,d,e){Me(b,c[0],c[1],d,!1,Ge);var f=Ge[1],g=Ge[2];Me(b,c[2],c[3],d,!0,Ge);b=Ge[1];c=Ge[2];void 0!==e?(e.a=f,e.f=b,e.b=g,e.c=c):e=new fd(f,b,g,c);return e}function Je(b,c,d,e){d=b.I(d);return Le(b,c,d,e)}function Ne(b,c){var d=b.ka(c[0]),e=b.I(c[0]),f=tb(Oe(b,c[0]),b.c);return[d[0]+(c[1]+.5)*f[0]*e,d[1]+(c[2]+.5)*f[1]*e]}function Ie(b,c,d){var e=b.ka(c[0]),f=b.I(c[0]);b=tb(Oe(b,c[0]),b.c);var g=e[0]+c[1]*b[0]*f;c=e[1]+c[2]*b[1]*f;return Ob(g,c,g+b[0]*f,c+b[1]*f,d)}
-function Me(b,c,d,e,f,g){var h=Pe(b,e),k=e/b.I(h),l=b.ka(h);b=tb(Oe(b,h),b.c);c=k*Math.floor((c-l[0])/e+(f?.5:0))/b[0];d=k*Math.floor((d-l[1])/e+(f?0:.5))/b[1];f?(c=Math.ceil(c)-1,d=Math.ceil(d)-1):(c=Math.floor(c),d=Math.floor(d));f=c;void 0!==g?(g[0]=h,g[1]=f,g[2]=d):g=[h,f,d];return g}function Qe(b,c,d){d=b.I(d);return Me(b,c[0],c[1],d,!1,void 0)}function Oe(b,c){return b.l?b.l:b.h[c]}function Pe(b,c){var d=Ia(b.b,c,0);return Ca(d,b.minZoom,b.maxZoom)}
-function Fe(b,c){for(var d=b.b.length,e=Array(d),f=b.minZoom;f<d;++f)e[f]=Je(b,c,f);b.a=e}function Re(b){var c=b.c;if(!c){var c=Se(b),d=Te(c,void 0,void 0),c=new Ee({extent:c,origin:bc(c),resolutions:d,tileSize:void 0});b.c=c}return c}function Te(b,c,d){c=void 0!==c?c:42;var e=Wb(b);b=Vb(b);d=tb(void 0!==d?d:256);d=Math.max(b/d[0],e/d[1]);c+=1;e=Array(c);for(b=0;b<c;++b)e[b]=d/Math.pow(2,b);return e}function Se(b){b=lc(b);var c=b.C();c||(b=180*hc.degrees/pc(b),c=Ob(-b,-b,b,b));return c};function Ue(b){Ce.call(this,{attributions:b.attributions,extent:b.extent,logo:b.logo,projection:b.projection,state:b.state,wrapX:b.wrapX});this.G=void 0!==b.opaque?b.opaque:!1;this.X=void 0!==b.tilePixelRatio?b.tilePixelRatio:1;this.tileGrid=void 0!==b.tileGrid?b.tileGrid:null;this.a=new xe(b.cacheSize);this.h=[0,0]}M(Ue,Ce);p=Ue.prototype;p.Qc=function(){return ye(this.a)};p.Rc=function(b,c){var d=this.bb(b);d&&ze(d,c)};
-function Ve(b,c,d,e,f){c=b.bb(c);if(!c)return!1;for(var g=!0,h,k,l=e.a;l<=e.f;++l)for(var m=e.b;m<=e.c;++m)h=b.lb(d,l,m),k=!1,ve(c,h)&&(h=c.get(h),(k=2===h.N())&&(k=!1!==f(h))),k||(g=!1);return g}p.kb=function(){return 0};p.lb=function(b,c,d){return b+"/"+c+"/"+d};p.Lb=function(){return this.G};p.Mb=function(){return this.tileGrid.Mb()};p.la=function(b){return this.tileGrid?this.tileGrid:Re(b)};p.bb=function(b){var c=this.c;return c&&!wc(c,b)?null:this.a};p.mb=function(){return this.X};
-function We(b,c,d,e){e=b.la(e);d=b.mb(d);c=tb(Oe(e,c),b.h);return 1==d?c:sb(c,d,b.h)}function Xe(b,c,d){var e=void 0!==d?d:b.c;d=b.la(e);if(b.j&&e.f){var f=c;c=f[0];b=Ne(d,f);var e=Se(e),g=b[0],h=b[1];e[0]<=g&&g<=e[2]&&e[1]<=h&&h<=e[3]?c=f:(f=Vb(e),b[0]+=f*Math.ceil((e[0]-b[0])/f),c=Qe(d,b,c))}e=c[0];b=c[1];f=c[2];d=d.minZoom>e||e>d.maxZoom?!1:(d=(g=d.C())?Je(d,g,e):d.a?d.a[e]:null)?gd(d,b,f):!0;return d?c:null}p.wa=function(){this.a.clear();this.v()};p.Yc=pa;
-function Ye(b,c){R.call(this,b);this.tile=c}M(Ye,R);function Ze(b){b=b?b:{};this.s=document.createElement("UL");this.j=document.createElement("LI");this.s.appendChild(this.j);ne(this.j,!1);this.c=void 0!==b.collapsed?b.collapsed:!0;this.h=void 0!==b.collapsible?b.collapsible:!0;this.h||(this.c=!1);var c=void 0!==b.className?b.className:"ol-attribution",d=void 0!==b.tipLabel?b.tipLabel:"Attributions",e=void 0!==b.collapseLabel?b.collapseLabel:"\u00bb";this.u="string"===typeof e?be("SPAN",{},e):e;e=void 0!==b.label?b.label:"i";this.w="string"===typeof e?
-be("SPAN",{},e):e;d=be("BUTTON",{type:"button",title:d},this.h&&!this.c?this.u:this.w);Q(d,"click",this.G,this);c=be("DIV",c+" ol-unselectable ol-control"+(this.c&&this.h?" ol-collapsed":"")+(this.h?"":" ol-uncollapsible"),this.s,d);te.call(this,{element:c,render:b.render?b.render:$e,target:b.target});this.o=!0;this.b={};this.a={};this.D={}}M(Ze,te);
-function $e(b){if(b=b.frameState){var c,d,e,f,g,h,k,l,m,n,q,r=b.layerStatesArray,u=Wa({},b.attributions),w={},y=b.viewState.projection;d=0;for(c=r.length;d<c;d++)if(h=r[d].layer.V())if(n=I(h).toString(),m=h.i)for(e=0,f=m.length;e<f;e++)if(k=m[e],l=I(k).toString(),!(l in u)){if(g=b.usedTiles[n]){var z=h.la(y);a:{q=k;var D=y;if(q.a){var t=void 0,v=void 0,B=void 0,E=void 0;for(E in g)if(E in q.a)for(var B=g[E],C,t=0,v=q.a[E].length;t<v;++t){C=q.a[E][t];if(id(C,B)){q=!0;break a}var G=Je(z,Se(D),parseInt(E,
-10)),J=G.ha();if(B.a<G.a||B.f>G.f)if(id(C,new fd(Ea(B.a,J),Ea(B.f,J),B.b,B.c))||B.ha()>J&&id(C,G)){q=!0;break a}}q=!1}else q=!0}}else q=!1;q?(l in w&&delete w[l],u[l]=k):w[l]=k}c=[u,w];d=c[0];c=c[1];for(var A in this.b)A in d?(this.a[A]||(ne(this.b[A],!0),this.a[A]=!0),delete d[A]):A in c?(this.a[A]&&(ne(this.b[A],!1),delete this.a[A]),delete c[A]):(ge(this.b[A]),delete this.b[A],delete this.a[A]);for(A in d)e=document.createElement("LI"),e.innerHTML=d[A].b,this.s.appendChild(e),this.b[A]=e,this.a[A]=
-!0;for(A in c)e=document.createElement("LI"),e.innerHTML=c[A].b,ne(e,!1),this.s.appendChild(e),this.b[A]=e;A=!$a(this.a)||!$a(b.logos);this.o!=A&&(ne(this.element,A),this.o=A);A&&$a(this.a)?this.element.classList.add("ol-logo-only"):this.element.classList.remove("ol-logo-only");var H;b=b.logos;A=this.D;for(H in A)H in b||(ge(A[H]),delete A[H]);for(var O in b)O in A||(H=new Image,H.src=O,d=b[O],""===d?d=H:(d=be("A",{href:d}),d.appendChild(H)),this.j.appendChild(d),A[O]=d);ne(this.j,!$a(b))}else this.o&&
-(ne(this.element,!1),this.o=!1)}Ze.prototype.G=function(b){b.preventDefault();this.element.classList.toggle("ol-collapsed");if(this.c){b=this.w;var c=b.parentNode;c&&c.replaceChild(this.u,b)}else b=this.u,(c=b.parentNode)&&c.replaceChild(this.w,b);this.c=!this.c};function af(b){b=b?b:{};var c=void 0!==b.className?b.className:"ol-rotate",d=void 0!==b.label?b.label:"\u21e7";this.a=null;"string"===typeof d?this.a=be("SPAN","ol-compass",d):(this.a=d,this.a.classList.add(this.a,"ol-compass"));d=be("BUTTON",{"class":c+"-reset",type:"button",title:b.tipLabel?b.tipLabel:"Reset rotation"},this.a);Q(d,"click",af.prototype.o,this);c=be("DIV",c+" ol-unselectable ol-control",d);d=b.render?b.render:bf;this.c=b.resetNorth?b.resetNorth:void 0;te.call(this,{element:c,render:d,
-target:b.target});this.h=void 0!==b.duration?b.duration:250;this.b=void 0!==b.autoHide?b.autoHide:!0;this.j=void 0;this.b&&this.element.classList.add("ol-hidden")}M(af,te);af.prototype.o=function(b){b.preventDefault();if(void 0!==this.c)this.c();else{b=this.g;var c=b.O();if(c){var d=c.Y();void 0!==d&&(0<this.h&&(d%=2*Math.PI,d<-Math.PI&&(d+=2*Math.PI),d>Math.PI&&(d-=2*Math.PI),b.fa(dd({rotation:d,duration:this.h,easing:$c}))),c.set("rotation",0))}}};
-function bf(b){if(b=b.frameState){b=b.viewState.rotation;if(b!=this.j){var c="rotate("+b+"rad)";if(this.b){var d=this.element.classList.contains("ol-hidden");d||0!==b?d&&0!==b&&this.element.classList.remove("ol-hidden"):this.element.classList.add("ol-hidden")}this.a.style.msTransform=c;this.a.style.webkitTransform=c;this.a.style.transform=c}this.j=b}};function cf(b){b=b?b:{};var c=void 0!==b.className?b.className:"ol-zoom",d=void 0!==b.delta?b.delta:1,e=void 0!==b.zoomOutLabel?b.zoomOutLabel:"\u2212",f=void 0!==b.zoomOutTipLabel?b.zoomOutTipLabel:"Zoom out",g=be("BUTTON",{"class":c+"-in",type:"button",title:void 0!==b.zoomInTipLabel?b.zoomInTipLabel:"Zoom in"},void 0!==b.zoomInLabel?b.zoomInLabel:"+");Q(g,"click",na(cf.prototype.b,d),this);e=be("BUTTON",{"class":c+"-out",type:"button",title:f},e);Q(e,"click",na(cf.prototype.b,-d),this);c=be("DIV",
-c+" ol-unselectable ol-control",g,e);te.call(this,{element:c,target:b.target});this.a=void 0!==b.duration?b.duration:250}M(cf,te);cf.prototype.b=function(b,c){c.preventDefault();var d=this.g,e=d.O();if(e){var f=e.I();f&&(0<this.a&&d.fa(ed({resolution:f,duration:this.a,easing:$c})),d=e.constrainResolution(f,b),Yc(e,d))}};function df(b){b=b?b:{};var c=new ld;(void 0!==b.zoom?b.zoom:1)&&c.push(new cf(b.zoomOptions));(void 0!==b.rotate?b.rotate:1)&&c.push(new af(b.rotateOptions));(void 0!==b.attribution?b.attribution:1)&&c.push(new Ze(b.attributionOptions));return c};var ef;
-function ff(){var b=x.MessageChannel;"undefined"===typeof b&&"undefined"!==typeof window&&window.postMessage&&window.addEventListener&&!W("Presto")&&(b=function(){var b=document.createElement("IFRAME");b.style.display="none";b.src="";document.documentElement.appendChild(b);var c=b.contentWindow,b=c.document;b.open();b.write("");b.close();var d="callImmediate"+Math.random(),e="file:"==c.location.protocol?"*":c.location.protocol+"//"+c.location.host,b=ma(function(b){if(("*"==e||b.origin==e)&&b.data==
+function ce(b,c,d){function e(d){d&&c.appendChild(da(d)?b.createTextNode(d):d)}for(var f=2;f<d.length;f++){var g=d[f];!ca(g)||ha(g)&&0<g.nodeType?e(g):pd(de(g)?qd(g):g,e)}}function ee(b){for(var c;c=b.firstChild;)b.removeChild(c)}function fe(b,c,d){b.insertBefore(c,b.childNodes[d]||null)}function ge(b){b&&b.parentNode&&b.parentNode.removeChild(b)}function he(b,c){var d=c.parentNode;d&&d.replaceChild(b,c)}
+function ie(b,c){if(!b||!c)return!1;if(b.contains&&1==c.nodeType)return b==c||b.contains(c);if("undefined"!=typeof b.compareDocumentPosition)return b==c||!!(b.compareDocumentPosition(c)&16);for(;c&&b!=c;)c=c.parentNode;return c==b}function Yd(b){return 9==b.nodeType?b:b.ownerDocument||b.document}function de(b){if(b&&"number"==typeof b.length){if(ha(b))return"function"==typeof b.item||"string"==typeof b.item;if(ga(b))return"function"==typeof b.item}return!1}
+function Xd(b){this.a=b||x.document||document}Xd.prototype.appendChild=function(b,c){b.appendChild(c)};function je(b,c,d,e){this.top=b;this.right=c;this.bottom=d;this.left=e}p=je.prototype;p.ha=function(){return this.right-this.left};p.clone=function(){return new je(this.top,this.right,this.bottom,this.left)};p.ceil=function(){this.top=Math.ceil(this.top);this.right=Math.ceil(this.right);this.bottom=Math.ceil(this.bottom);this.left=Math.ceil(this.left);return this};
+p.floor=function(){this.top=Math.floor(this.top);this.right=Math.floor(this.right);this.bottom=Math.floor(this.bottom);this.left=Math.floor(this.left);return this};p.round=function(){this.top=Math.round(this.top);this.right=Math.round(this.right);this.bottom=Math.round(this.bottom);this.left=Math.round(this.left);return this};p.scale=function(b,c){var d=ea(c)?c:b;this.left*=b;this.right*=b;this.top*=d;this.bottom*=d;return this};function ke(b,c){var d=Yd(b);return d.defaultView&&d.defaultView.getComputedStyle&&(d=d.defaultView.getComputedStyle(b,null))?d[c]||d.getPropertyValue(c)||"":""}function le(b){var c;try{c=b.getBoundingClientRect()}catch(d){return{left:0,top:0,right:0,bottom:0}}Gd&&b.ownerDocument.body&&(b=b.ownerDocument,c.left-=b.documentElement.clientLeft+b.body.clientLeft,c.top-=b.documentElement.clientTop+b.body.clientTop);return c}
+function me(b){var c=ne;if("none"!=(ke(b,"display")||(b.currentStyle?b.currentStyle.display:null)||b.style&&b.style.display))return c(b);var d=b.style,e=d.display,f=d.visibility,g=d.position;d.visibility="hidden";d.position="absolute";d.display="inline";b=c(b);d.display=e;d.position=g;d.visibility=f;return b}function ne(b){var c=b.offsetWidth,d=b.offsetHeight,e=Jd&&!c&&!d;return(void 0===c||e)&&b.getBoundingClientRect?(b=le(b),new Vd(b.right-b.left,b.bottom-b.top)):new Vd(c,d)}
+function oe(b,c){b.style.display=c?"":"none"}function pe(b,c,d,e){if(/^\d+px?$/.test(c))return parseInt(c,10);var f=b.style[d],g=b.runtimeStyle[d];b.runtimeStyle[d]=b.currentStyle[d];b.style[d]=c;c=b.style[e];b.style[d]=f;b.runtimeStyle[d]=g;return c}function qe(b,c){var d=b.currentStyle?b.currentStyle[c]:null;return d?pe(b,d,"left","pixelLeft"):0}var re={thin:2,medium:4,thick:6};
+function se(b,c){if("none"==(b.currentStyle?b.currentStyle[c+"Style"]:null))return 0;var d=b.currentStyle?b.currentStyle[c+"Width"]:null;return d in re?re[d]:pe(b,d,"left","pixelLeft")};function te(b,c,d){R.call(this,b);this.map=c;this.frameState=void 0!==d?d:null}M(te,R);function ue(b){T.call(this);this.element=b.element?b.element:null;this.c=this.B=null;this.h=[];this.render=b.render?b.render:pa;b.target&&(this.B=Zd(b.target))}M(ue,T);ue.prototype.J=function(){ge(this.element);ue.X.J.call(this)};ue.prototype.setMap=function(b){this.c&&ge(this.element);for(var c=0,d=this.h.length;c<d;++c)N(this.h[c]);this.h.length=0;if(this.c=b)(this.B?this.B:b.j).appendChild(this.element),this.render!==pa&&this.h.push(Q(b,"postrender",this.render,this)),b.render()};function ve(){this.f=0;this.c={};this.b=this.a=null}p=ve.prototype;p.clear=function(){this.f=0;this.c={};this.b=this.a=null};function we(b,c){return b.c.hasOwnProperty(c)}function xe(b,c){for(var d=b.a;d;)c.call(void 0,d.Ia,d.Rb,b),d=d.ma}p.get=function(b){b=this.c[b];if(b===this.b)return b.Ia;b===this.a?(this.a=this.a.ma,this.a.Ra=null):(b.ma.Ra=b.Ra,b.Ra.ma=b.ma);b.ma=null;b.Ra=this.b;this.b=this.b.ma=b;return b.Ia};
+p.pop=function(){var b=this.a;delete this.c[b.Rb];b.ma&&(b.ma.Ra=null);this.a=b.ma;this.a||(this.b=null);--this.f;return b.Ia};p.replace=function(b,c){this.get(b);this.c[b].Ia=c};p.set=function(b,c){var d={Rb:b,ma:null,Ra:this.b,Ia:c};this.b?this.b.ma=d:this.a=d;this.b=d;this.c[b]=d;++this.f};function ye(b){ve.call(this);this.g=void 0!==b?b:2048}M(ye,ve);function ze(b){return b.f>b.g}function Ae(b,c){for(var d,e;ze(b);){d=b.a.Ia;e=d.L[0].toString();var f;if(f=e in c)d=d.L,f=gd(c[e],d[1],d[2]);if(f)break;else jb(b.pop())}};function Be(b,c){mb.call(this);this.L=b;this.state=c;this.a=null;this.key=""}M(Be,mb);function Ce(b){S(b,"change")}Be.prototype.getKey=function(){return I(this).toString()};Be.prototype.N=function(){return this.state};function De(b){T.call(this);this.c=lc(b.projection);this.i=Ee(b.attributions);this.w=b.logo;this.B=void 0!==b.state?b.state:"ready";this.j=void 0!==b.wrapX?b.wrapX:!1}M(De,T);function Ee(b){if("string"===typeof b)return[new jd({html:b})];if(b instanceof jd)return[b];if(Array.isArray(b)){for(var c=b.length,d=Array(c),e=0;e<c;e++){var f=b[e];d[e]="string"===typeof f?new jd({html:f}):f}return d}return null}De.prototype.N=function(){return this.B};De.prototype.wa=function(){this.v()};function Fe(b){this.minZoom=void 0!==b.minZoom?b.minZoom:0;this.b=b.resolutions;this.maxZoom=this.b.length-1;this.f=void 0!==b.origin?b.origin:null;this.g=null;void 0!==b.origins&&(this.g=b.origins);var c=b.extent;void 0===c||this.f||this.g||(this.f=bc(c));this.h=null;void 0!==b.tileSizes&&(this.h=b.tileSizes);this.l=void 0!==b.tileSize?b.tileSize:this.h?null:256;this.i=void 0!==c?c:null;this.a=null;void 0!==b.sizes?this.a=b.sizes.map(function(b){return new fd(Math.min(0,b[0]),Math.max(b[0]-1,-1),
+Math.min(0,b[1]),Math.max(b[1]-1,-1))},this):c&&Ge(this,c);this.c=[0,0]}var He=[0,0,0];function Ie(b,c,d,e,f){f=Je(b,c,f);for(c=c[0]-1;c>=b.minZoom;){if(d.call(null,c,Ke(b,f,c,e)))return!0;--c}return!1}Fe.prototype.C=function(){return this.i};Fe.prototype.ka=function(b){return this.f?this.f:this.g[b]};Fe.prototype.I=function(b){return this.b[b]};Fe.prototype.Nb=function(){return this.b};function Le(b,c,d,e){return c[0]<b.maxZoom?(e=Je(b,c,e),Ke(b,e,c[0]+1,d)):null}
+function Me(b,c,d,e){Ne(b,c[0],c[1],d,!1,He);var f=He[1],g=He[2];Ne(b,c[2],c[3],d,!0,He);b=He[1];c=He[2];void 0!==e?(e.a=f,e.f=b,e.b=g,e.c=c):e=new fd(f,b,g,c);return e}function Ke(b,c,d,e){d=b.I(d);return Me(b,c,d,e)}function Oe(b,c){var d=b.ka(c[0]),e=b.I(c[0]),f=tb(Pe(b,c[0]),b.c);return[d[0]+(c[1]+.5)*f[0]*e,d[1]+(c[2]+.5)*f[1]*e]}function Je(b,c,d){var e=b.ka(c[0]),f=b.I(c[0]);b=tb(Pe(b,c[0]),b.c);var g=e[0]+c[1]*b[0]*f;c=e[1]+c[2]*b[1]*f;return Ob(g,c,g+b[0]*f,c+b[1]*f,d)}
+function Ne(b,c,d,e,f,g){var h=Qe(b,e),k=e/b.I(h),l=b.ka(h);b=tb(Pe(b,h),b.c);c=k*Math.floor((c-l[0])/e+(f?.5:0))/b[0];d=k*Math.floor((d-l[1])/e+(f?0:.5))/b[1];f?(c=Math.ceil(c)-1,d=Math.ceil(d)-1):(c=Math.floor(c),d=Math.floor(d));f=c;void 0!==g?(g[0]=h,g[1]=f,g[2]=d):g=[h,f,d];return g}function Re(b,c,d){d=b.I(d);return Ne(b,c[0],c[1],d,!1,void 0)}function Pe(b,c){return b.l?b.l:b.h[c]}function Qe(b,c){var d=Ia(b.b,c,0);return Ca(d,b.minZoom,b.maxZoom)}
+function Ge(b,c){for(var d=b.b.length,e=Array(d),f=b.minZoom;f<d;++f)e[f]=Ke(b,c,f);b.a=e}function Se(b){var c=b.c;if(!c){var c=Te(b),d=Ue(c,void 0,void 0),c=new Fe({extent:c,origin:bc(c),resolutions:d,tileSize:void 0});b.c=c}return c}function Ue(b,c,d){c=void 0!==c?c:42;var e=Wb(b);b=Vb(b);d=tb(void 0!==d?d:256);d=Math.max(b/d[0],e/d[1]);c+=1;e=Array(c);for(b=0;b<c;++b)e[b]=d/Math.pow(2,b);return e}function Te(b){b=lc(b);var c=b.C();c||(b=180*hc.degrees/pc(b),c=Ob(-b,-b,b,b));return c};function Ve(b){De.call(this,{attributions:b.attributions,extent:b.extent,logo:b.logo,projection:b.projection,state:b.state,wrapX:b.wrapX});this.G=void 0!==b.opaque?b.opaque:!1;this.Y=void 0!==b.tilePixelRatio?b.tilePixelRatio:1;this.tileGrid=void 0!==b.tileGrid?b.tileGrid:null;this.a=new ye(b.cacheSize);this.h=[0,0]}M(Ve,De);p=Ve.prototype;p.Qc=function(){return ze(this.a)};p.Rc=function(b,c){var d=this.bb(b);d&&Ae(d,c)};
+function We(b,c,d,e,f){c=b.bb(c);if(!c)return!1;for(var g=!0,h,k,l=e.a;l<=e.f;++l)for(var m=e.b;m<=e.c;++m)h=b.lb(d,l,m),k=!1,we(c,h)&&(h=c.get(h),(k=2===h.N())&&(k=!1!==f(h))),k||(g=!1);return g}p.kb=function(){return 0};p.lb=function(b,c,d){return b+"/"+c+"/"+d};p.Mb=function(){return this.G};p.Nb=function(){return this.tileGrid.Nb()};p.la=function(b){return this.tileGrid?this.tileGrid:Se(b)};p.bb=function(b){var c=this.c;return c&&!wc(c,b)?null:this.a};p.mb=function(){return this.Y};
+function Xe(b,c,d,e){e=b.la(e);d=b.mb(d);c=tb(Pe(e,c),b.h);return 1==d?c:sb(c,d,b.h)}function Ye(b,c,d){var e=void 0!==d?d:b.c;d=b.la(e);if(b.j&&e.f){var f=c;c=f[0];b=Oe(d,f);var e=Te(e),g=b[0],h=b[1];e[0]<=g&&g<=e[2]&&e[1]<=h&&h<=e[3]?c=f:(f=Vb(e),b[0]+=f*Math.ceil((e[0]-b[0])/f),c=Re(d,b,c))}e=c[0];b=c[1];f=c[2];d=d.minZoom>e||e>d.maxZoom?!1:(d=(g=d.C())?Ke(d,g,e):d.a?d.a[e]:null)?gd(d,b,f):!0;return d?c:null}p.wa=function(){this.a.clear();this.v()};p.Yc=pa;
+function Ze(b,c){R.call(this,b);this.tile=c}M(Ze,R);function $e(b){b=b?b:{};this.s=document.createElement("UL");this.j=document.createElement("LI");this.s.appendChild(this.j);oe(this.j,!1);this.g=void 0!==b.collapsed?b.collapsed:!0;this.i=void 0!==b.collapsible?b.collapsible:!0;this.i||(this.g=!1);var c=void 0!==b.className?b.className:"ol-attribution",d=void 0!==b.tipLabel?b.tipLabel:"Attributions",e=void 0!==b.collapseLabel?b.collapseLabel:"\u00bb";this.u="string"===typeof e?be("SPAN",{},e):e;e=void 0!==b.label?b.label:"i";this.w="string"===typeof e?
+be("SPAN",{},e):e;d=be("BUTTON",{type:"button",title:d},this.i&&!this.g?this.u:this.w);Q(d,"click",this.G,this);c=be("DIV",c+" ol-unselectable ol-control"+(this.g&&this.i?" ol-collapsed":"")+(this.i?"":" ol-uncollapsible"),this.s,d);ue.call(this,{element:c,render:b.render?b.render:af,target:b.target});this.o=!0;this.b={};this.a={};this.D={}}M($e,ue);
+function af(b){if(b=b.frameState){var c,d,e,f,g,h,k,l,m,n,q,r=b.layerStatesArray,u=Wa({},b.attributions),w={},y=b.viewState.projection;d=0;for(c=r.length;d<c;d++)if(h=r[d].layer.V())if(n=I(h).toString(),m=h.i)for(e=0,f=m.length;e<f;e++)if(k=m[e],l=I(k).toString(),!(l in u)){if(g=b.usedTiles[n]){var z=h.la(y);a:{q=k;var D=y;if(q.a){var t=void 0,v=void 0,B=void 0,E=void 0;for(E in g)if(E in q.a)for(var B=g[E],C,t=0,v=q.a[E].length;t<v;++t){C=q.a[E][t];if(id(C,B)){q=!0;break a}var G=Ke(z,Te(D),parseInt(E,
+10)),J=G.ha();if(B.a<G.a||B.f>G.f)if(id(C,new fd(Ea(B.a,J),Ea(B.f,J),B.b,B.c))||B.ha()>J&&id(C,G)){q=!0;break a}}q=!1}else q=!0}}else q=!1;q?(l in w&&delete w[l],u[l]=k):w[l]=k}c=[u,w];d=c[0];c=c[1];for(var A in this.b)A in d?(this.a[A]||(oe(this.b[A],!0),this.a[A]=!0),delete d[A]):A in c?(this.a[A]&&(oe(this.b[A],!1),delete this.a[A]),delete c[A]):(ge(this.b[A]),delete this.b[A],delete this.a[A]);for(A in d)e=document.createElement("LI"),e.innerHTML=d[A].b,this.s.appendChild(e),this.b[A]=e,this.a[A]=
+!0;for(A in c)e=document.createElement("LI"),e.innerHTML=c[A].b,oe(e,!1),this.s.appendChild(e),this.b[A]=e;A=!$a(this.a)||!$a(b.logos);this.o!=A&&(oe(this.element,A),this.o=A);A&&$a(this.a)?this.element.classList.add("ol-logo-only"):this.element.classList.remove("ol-logo-only");var H;b=b.logos;A=this.D;for(H in A)H in b||(ge(A[H]),delete A[H]);for(var O in b)O in A||(H=new Image,H.src=O,d=b[O],""===d?d=H:(d=be("A",{href:d}),d.appendChild(H)),this.j.appendChild(d),A[O]=d);oe(this.j,!$a(b))}else this.o&&
+(oe(this.element,!1),this.o=!1)}$e.prototype.G=function(b){b.preventDefault();this.element.classList.toggle("ol-collapsed");this.g?he(this.u,this.w):he(this.w,this.u);this.g=!this.g};function bf(b){b=b?b:{};var c=void 0!==b.className?b.className:"ol-rotate",d=void 0!==b.label?b.label:"\u21e7";this.a=null;"string"===typeof d?this.a=be("SPAN","ol-compass",d):(this.a=d,this.a.classList.add(this.a,"ol-compass"));d=be("BUTTON",{"class":c+"-reset",type:"button",title:b.tipLabel?b.tipLabel:"Reset rotation"},this.a);Q(d,"click",bf.prototype.o,this);c=be("DIV",c+" ol-unselectable ol-control",d);d=b.render?b.render:cf;this.g=b.resetNorth?b.resetNorth:void 0;ue.call(this,{element:c,render:d,
+target:b.target});this.i=void 0!==b.duration?b.duration:250;this.b=void 0!==b.autoHide?b.autoHide:!0;this.j=void 0;this.b&&this.element.classList.add("ol-hidden")}M(bf,ue);bf.prototype.o=function(b){b.preventDefault();if(void 0!==this.g)this.g();else{b=this.c;var c=b.O();if(c){var d=c.Z();void 0!==d&&(0<this.i&&(d%=2*Math.PI,d<-Math.PI&&(d+=2*Math.PI),d>Math.PI&&(d-=2*Math.PI),b.fa(dd({rotation:d,duration:this.i,easing:$c}))),c.set("rotation",0))}}};
+function cf(b){if(b=b.frameState){b=b.viewState.rotation;if(b!=this.j){var c="rotate("+b+"rad)";if(this.b){var d=this.element.classList.contains("ol-hidden");d||0!==b?d&&0!==b&&this.element.classList.remove("ol-hidden"):this.element.classList.add("ol-hidden")}this.a.style.msTransform=c;this.a.style.webkitTransform=c;this.a.style.transform=c}this.j=b}};function df(b){b=b?b:{};var c=void 0!==b.className?b.className:"ol-zoom",d=void 0!==b.delta?b.delta:1,e=void 0!==b.zoomOutLabel?b.zoomOutLabel:"\u2212",f=void 0!==b.zoomOutTipLabel?b.zoomOutTipLabel:"Zoom out",g=be("BUTTON",{"class":c+"-in",type:"button",title:void 0!==b.zoomInTipLabel?b.zoomInTipLabel:"Zoom in"},void 0!==b.zoomInLabel?b.zoomInLabel:"+");Q(g,"click",na(df.prototype.b,d),this);e=be("BUTTON",{"class":c+"-out",type:"button",title:f},e);Q(e,"click",na(df.prototype.b,-d),this);c=be("DIV",
+c+" ol-unselectable ol-control",g,e);ue.call(this,{element:c,target:b.target});this.a=void 0!==b.duration?b.duration:250}M(df,ue);df.prototype.b=function(b,c){c.preventDefault();var d=this.c,e=d.O();if(e){var f=e.I();f&&(0<this.a&&d.fa(ed({resolution:f,duration:this.a,easing:$c})),d=e.constrainResolution(f,b),Yc(e,d))}};function ef(b){b=b?b:{};var c=new ld;(void 0!==b.zoom?b.zoom:1)&&c.push(new df(b.zoomOptions));(void 0!==b.rotate?b.rotate:1)&&c.push(new bf(b.rotateOptions));(void 0!==b.attribution?b.attribution:1)&&c.push(new $e(b.attributionOptions));return c};var ff=Jd?"webkitfullscreenchange":Id?"mozfullscreenchange":Gd?"MSFullscreenChange":"fullscreenchange";function gf(){var b=Wd().a,c=b.body;return!!(c.webkitRequestFullscreen||c.mozRequestFullScreen&&b.mozFullScreenEnabled||c.msRequestFullscreen&&b.msFullscreenEnabled||c.requestFullscreen&&b.fullscreenEnabled)}
+function hf(b){b.webkitRequestFullscreen?b.webkitRequestFullscreen():b.mozRequestFullScreen?b.mozRequestFullScreen():b.msRequestFullscreen?b.msRequestFullscreen():b.requestFullscreen&&b.requestFullscreen()}function jf(){var b=Wd().a;return!!(b.webkitIsFullScreen||b.mozFullScreen||b.msFullscreenElement||b.fullscreenElement)};function kf(b){b=b?b:{};this.a=void 0!==b.className?b.className:"ol-full-screen";var c=void 0!==b.label?b.label:"\u2922";this.b="string"===typeof c?document.createTextNode(c):c;c=void 0!==b.labelActive?b.labelActive:"\u00d7";this.g="string"===typeof c?document.createTextNode(c):c;c=b.tipLabel?b.tipLabel:"Toggle full-screen";c=be("BUTTON",{"class":this.a+"-"+jf(),type:"button",title:c},this.b);Q(c,"click",this.s,this);var d=this.a+" ol-unselectable ol-control "+(gf()?"":"ol-unsupported"),c=be("DIV",
+d,c);ue.call(this,{element:c,target:b.target});this.o=void 0!==b.keys?b.keys:!1;this.i=b.source}M(kf,ue);
+kf.prototype.s=function(b){b.preventDefault();gf()&&(b=this.c)&&(jf()?(b=Wd().a,b.webkitCancelFullScreen?b.webkitCancelFullScreen():b.mozCancelFullScreen?b.mozCancelFullScreen():b.msExitFullscreen?b.msExitFullscreen():b.exitFullscreen&&b.exitFullscreen()):(b=this.i?Zd(this.i):b.Na(),this.o?b.mozRequestFullScreenWithKeys?b.mozRequestFullScreenWithKeys():b.webkitRequestFullscreen?b.webkitRequestFullscreen():hf(b):hf(b)))};
+kf.prototype.j=function(){var b=this.element.firstElementChild,c=this.c;jf()?(b.className=this.a+"-true",he(this.g,this.b)):(b.className=this.a+"-false",he(this.b,this.g));c&&c.vb()};kf.prototype.setMap=function(b){kf.X.setMap.call(this,b);b&&this.h.push(Q(x.document,ff,this.j,this))};var lf;
+function mf(){var b=x.MessageChannel;"undefined"===typeof b&&"undefined"!==typeof window&&window.postMessage&&window.addEventListener&&!W("Presto")&&(b=function(){var b=document.createElement("IFRAME");b.style.display="none";b.src="";document.documentElement.appendChild(b);var c=b.contentWindow,b=c.document;b.open();b.write("");b.close();var d="callImmediate"+Math.random(),e="file:"==c.location.protocol?"*":c.location.protocol+"//"+c.location.host,b=ma(function(b){if(("*"==e||b.origin==e)&&b.data==
 d)this.port1.onmessage()},this);c.addEventListener("message",b,!1);this.port1={};this.port2={postMessage:function(){c.postMessage(d,e)}}});if("undefined"!==typeof b&&!W("Trident")&&!W("MSIE")){var c=new b,d={},e=d;c.port1.onmessage=function(){if(void 0!==d.next){d=d.next;var b=d.lc;d.lc=null;b()}};return function(b){e.next={lc:b};e=e.next;c.port2.postMessage(0)}}return"undefined"!==typeof document&&"onreadystatechange"in document.createElement("SCRIPT")?function(b){var c=document.createElement("SCRIPT");
-c.onreadystatechange=function(){c.onreadystatechange=null;c.parentNode.removeChild(c);c=null;b();b=null};document.documentElement.appendChild(c)}:function(b){x.setTimeout(b,0)}};function gf(b,c,d){R.call(this,b);this.a=c;b=d?d:{};this.buttons=hf(b);this.pressure=jf(b,this.buttons);this.bubbles="bubbles"in b?b.bubbles:!1;this.cancelable="cancelable"in b?b.cancelable:!1;this.view="view"in b?b.view:null;this.detail="detail"in b?b.detail:null;this.screenX="screenX"in b?b.screenX:0;this.screenY="screenY"in b?b.screenY:0;this.clientX="clientX"in b?b.clientX:0;this.clientY="clientY"in b?b.clientY:0;this.button="button"in b?b.button:0;this.relatedTarget="relatedTarget"in b?b.relatedTarget:
-null;this.pointerId="pointerId"in b?b.pointerId:0;this.width="width"in b?b.width:0;this.height="height"in b?b.height:0;this.pointerType="pointerType"in b?b.pointerType:"";this.isPrimary="isPrimary"in b?b.isPrimary:!1;c.preventDefault&&(this.preventDefault=function(){c.preventDefault()})}M(gf,R);function hf(b){if(b.buttons||kf)b=b.buttons;else switch(b.which){case 1:b=1;break;case 2:b=4;break;case 3:b=2;break;default:b=0}return b}function jf(b,c){var d=0;b.pressure?d=b.pressure:d=c?.5:0;return d}
-var kf=!1;try{kf=1===(new MouseEvent("click",{buttons:1})).buttons}catch(b){};function lf(b,c){var d=document.createElement("CANVAS");b&&(d.width=b);c&&(d.height=c);return d.getContext("2d")}
-var mf=function(){var b;return function(){if(void 0===b){var c=document.createElement("P"),d,e={webkitTransform:"-webkit-transform",OTransform:"-o-transform",msTransform:"-ms-transform",MozTransform:"-moz-transform",transform:"transform"};document.body.appendChild(c);for(var f in e)f in c.style&&(c.style[f]="translate(1px,1px)",d=x.getComputedStyle(c).getPropertyValue(e[f]));document.body.removeChild(c);b=d&&"none"!==d}return b}}(),nf=function(){var b;return function(){if(void 0===b){var c=document.createElement("P"),
+c.onreadystatechange=function(){c.onreadystatechange=null;c.parentNode.removeChild(c);c=null;b();b=null};document.documentElement.appendChild(c)}:function(b){x.setTimeout(b,0)}};function nf(b,c,d){R.call(this,b);this.a=c;b=d?d:{};this.buttons=of(b);this.pressure=pf(b,this.buttons);this.bubbles="bubbles"in b?b.bubbles:!1;this.cancelable="cancelable"in b?b.cancelable:!1;this.view="view"in b?b.view:null;this.detail="detail"in b?b.detail:null;this.screenX="screenX"in b?b.screenX:0;this.screenY="screenY"in b?b.screenY:0;this.clientX="clientX"in b?b.clientX:0;this.clientY="clientY"in b?b.clientY:0;this.button="button"in b?b.button:0;this.relatedTarget="relatedTarget"in b?b.relatedTarget:
+null;this.pointerId="pointerId"in b?b.pointerId:0;this.width="width"in b?b.width:0;this.height="height"in b?b.height:0;this.pointerType="pointerType"in b?b.pointerType:"";this.isPrimary="isPrimary"in b?b.isPrimary:!1;c.preventDefault&&(this.preventDefault=function(){c.preventDefault()})}M(nf,R);function of(b){if(b.buttons||qf)b=b.buttons;else switch(b.which){case 1:b=1;break;case 2:b=4;break;case 3:b=2;break;default:b=0}return b}function pf(b,c){var d=0;b.pressure?d=b.pressure:d=c?.5:0;return d}
+var qf=!1;try{qf=1===(new MouseEvent("click",{buttons:1})).buttons}catch(b){};function rf(b,c){var d=document.createElement("CANVAS");b&&(d.width=b);c&&(d.height=c);return d.getContext("2d")}
+var sf=function(){var b;return function(){if(void 0===b){var c=document.createElement("P"),d,e={webkitTransform:"-webkit-transform",OTransform:"-o-transform",msTransform:"-ms-transform",MozTransform:"-moz-transform",transform:"transform"};document.body.appendChild(c);for(var f in e)f in c.style&&(c.style[f]="translate(1px,1px)",d=x.getComputedStyle(c).getPropertyValue(e[f]));document.body.removeChild(c);b=d&&"none"!==d}return b}}(),tf=function(){var b;return function(){if(void 0===b){var c=document.createElement("P"),
 d,e={webkitTransform:"-webkit-transform",OTransform:"-o-transform",msTransform:"-ms-transform",MozTransform:"-moz-transform",transform:"transform"};document.body.appendChild(c);for(var f in e)f in c.style&&(c.style[f]="translate3d(1px,1px,1px)",d=x.getComputedStyle(c).getPropertyValue(e[f]));document.body.removeChild(c);b=d&&"none"!==d}return b}}();
-function of(b,c){var d=b.style;d.WebkitTransform=c;d.MozTransform=c;d.a=c;d.msTransform=c;d.transform=c;Gd&&Qd("9.0")&&(b.style.transformOrigin="0 0")}function pf(b,c){var d;if(nf()){var e=Array(16);for(d=0;16>d;++d)e[d]=c[d].toFixed(6);of(b,"matrix3d("+e.join(",")+")")}else if(mf()){var e=[c[0],c[1],c[4],c[5],c[12],c[13]],f=Array(6);for(d=0;6>d;++d)f[d]=e[d].toFixed(6);of(b,"matrix("+f.join(",")+")")}else b.style.left=Math.round(c[12])+"px",b.style.top=Math.round(c[13])+"px"};var qf=["experimental-webgl","webgl","webkit-3d","moz-webgl"];function rf(b,c){var d,e,f=qf.length;for(e=0;e<f;++e)try{if(d=b.getContext(qf[e],c))return d}catch(g){}return null};var sf,tf="undefined"!==typeof navigator?navigator.userAgent.toLowerCase():"",uf=-1!==tf.indexOf("firefox"),vf=-1!==tf.indexOf("safari")&&-1===tf.indexOf("chrom"),wf=-1!==tf.indexOf("macintosh"),xf=x.devicePixelRatio||1,yf=!1,zf=function(){if(!("HTMLCanvasElement"in x))return!1;try{var b=lf();return b?(void 0!==b.setLineDash&&(yf=!0),!0):!1}catch(c){return!1}}(),Af="ontouchstart"in x,Bf="PointerEvent"in x,Cf=!!x.navigator.msPointerEnabled,Df=!1,Ef=[];
-if("WebGLRenderingContext"in x)try{var Ff=rf(document.createElement("CANVAS"),{failIfMajorPerformanceCaveat:!0});Ff&&(Df=!0,Ef=Ff.getSupportedExtensions())}catch(b){}sf=Df;oa=Ef;function Gf(b,c){this.a=b;this.g=c};function Hf(b){Gf.call(this,b,{mousedown:this.Ud,mousemove:this.Vd,mouseup:this.Yd,mouseover:this.Xd,mouseout:this.Wd});this.b=b.b;this.f=[]}M(Hf,Gf);function If(b,c){for(var d=b.f,e=c.clientX,f=c.clientY,g=0,h=d.length,k;g<h&&(k=d[g]);g++){var l=Math.abs(f-k[1]);if(25>=Math.abs(e-k[0])&&25>=l)return!0}return!1}function Jf(b){var c=Kf(b,b),d=c.preventDefault;c.preventDefault=function(){b.preventDefault();d()};c.pointerId=1;c.isPrimary=!0;c.pointerType="mouse";return c}p=Hf.prototype;
-p.Ud=function(b){if(!If(this,b)){if((1).toString()in this.b){var c=Jf(b);Lf(this.a,Mf,c,b);delete this.b[(1).toString()]}c=Jf(b);this.b[(1).toString()]=b;Lf(this.a,Nf,c,b)}};p.Vd=function(b){if(!If(this,b)){var c=Jf(b);Lf(this.a,Of,c,b)}};p.Yd=function(b){if(!If(this,b)){var c=this.b[(1).toString()];c&&c.button===b.button&&(c=Jf(b),Lf(this.a,Pf,c,b),delete this.b[(1).toString()])}};p.Xd=function(b){if(!If(this,b)){var c=Jf(b);Qf(this.a,c,b)}};
-p.Wd=function(b){if(!If(this,b)){var c=Jf(b);Rf(this.a,c,b)}};function Sf(b){Gf.call(this,b,{MSPointerDown:this.ce,MSPointerMove:this.de,MSPointerUp:this.ge,MSPointerOut:this.ee,MSPointerOver:this.fe,MSPointerCancel:this.be,MSGotPointerCapture:this.$d,MSLostPointerCapture:this.ae});this.b=b.b;this.f=["","unavailable","touch","pen","mouse"]}M(Sf,Gf);function Tf(b,c){var d=c;ea(c.pointerType)&&(d=Kf(c,c),d.pointerType=b.f[c.pointerType]);return d}p=Sf.prototype;p.ce=function(b){this.b[b.pointerId.toString()]=b;var c=Tf(this,b);Lf(this.a,Nf,c,b)};
-p.de=function(b){var c=Tf(this,b);Lf(this.a,Of,c,b)};p.ge=function(b){var c=Tf(this,b);Lf(this.a,Pf,c,b);delete this.b[b.pointerId.toString()]};p.ee=function(b){var c=Tf(this,b);Rf(this.a,c,b)};p.fe=function(b){var c=Tf(this,b);Qf(this.a,c,b)};p.be=function(b){var c=Tf(this,b);Lf(this.a,Mf,c,b);delete this.b[b.pointerId.toString()]};p.ae=function(b){S(this.a,new gf("lostpointercapture",b,b))};p.$d=function(b){S(this.a,new gf("gotpointercapture",b,b))};function Uf(b){Gf.call(this,b,{pointerdown:this.re,pointermove:this.se,pointerup:this.ve,pointerout:this.te,pointerover:this.ue,pointercancel:this.qe,gotpointercapture:this.wd,lostpointercapture:this.Td})}M(Uf,Gf);p=Uf.prototype;p.re=function(b){Vf(this.a,b)};p.se=function(b){Vf(this.a,b)};p.ve=function(b){Vf(this.a,b)};p.te=function(b){Vf(this.a,b)};p.ue=function(b){Vf(this.a,b)};p.qe=function(b){Vf(this.a,b)};p.Td=function(b){Vf(this.a,b)};p.wd=function(b){Vf(this.a,b)};function Wf(b,c){Gf.call(this,b,{touchstart:this.He,touchmove:this.Ge,touchend:this.Fe,touchcancel:this.Ee});this.b=b.b;this.l=c;this.f=void 0;this.h=0;this.c=void 0}M(Wf,Gf);p=Wf.prototype;p.Vc=function(){this.h=0;this.c=void 0};
-function Xf(b,c,d){c=Kf(c,d);c.pointerId=d.identifier+2;c.bubbles=!0;c.cancelable=!0;c.detail=b.h;c.button=0;c.buttons=1;c.width=d.webkitRadiusX||d.radiusX||0;c.height=d.webkitRadiusY||d.radiusY||0;c.pressure=d.webkitForce||d.force||.5;c.isPrimary=b.f===d.identifier;c.pointerType="touch";c.clientX=d.clientX;c.clientY=d.clientY;c.screenX=d.screenX;c.screenY=d.screenY;return c}
-function Yf(b,c,d){function e(){c.preventDefault()}var f=Array.prototype.slice.call(c.changedTouches),g=f.length,h,k;for(h=0;h<g;++h)k=Xf(b,c,f[h]),k.preventDefault=e,d.call(b,c,k)}
-p.He=function(b){var c=b.touches,d=Object.keys(this.b),e=d.length;if(e>=c.length){var f=[],g,h,k;for(g=0;g<e;++g){h=d[g];k=this.b[h];var l;if(!(l=1==h))a:{l=c.length;for(var m=void 0,n=0;n<l;n++)if(m=c[n],m.identifier===h-2){l=!0;break a}l=!1}l||f.push(k.out)}for(g=0;g<f.length;++g)this.Eb(b,f[g])}c=b.changedTouches[0];d=Object.keys(this.b).length;if(0===d||1===d&&(1).toString()in this.b)this.f=c.identifier,void 0!==this.c&&x.clearTimeout(this.c);Zf(this,b);this.h++;Yf(this,b,this.pe)};
-p.pe=function(b,c){this.b[c.pointerId]={target:c.target,out:c,Sc:c.target};var d=this.a;c.bubbles=!0;Lf(d,$f,c,b);d=this.a;c.bubbles=!1;Lf(d,ag,c,b);Lf(this.a,Nf,c,b)};p.Ge=function(b){b.preventDefault();Yf(this,b,this.Zd)};p.Zd=function(b,c){var d=this.b[c.pointerId];if(d){var e=d.out,f=d.Sc;Lf(this.a,Of,c,b);e&&f!==c.target&&(e.relatedTarget=c.target,c.relatedTarget=f,e.target=f,c.target?(Rf(this.a,e,b),Qf(this.a,c,b)):(c.target=f,c.relatedTarget=null,this.Eb(b,c)));d.out=c;d.Sc=c.target}};
-p.Fe=function(b){Zf(this,b);Yf(this,b,this.Ie)};p.Ie=function(b,c){Lf(this.a,Pf,c,b);this.a.out(c,b);var d=this.a;c.bubbles=!1;Lf(d,bg,c,b);delete this.b[c.pointerId];c.isPrimary&&(this.f=void 0,this.c=x.setTimeout(this.Vc.bind(this),200))};p.Ee=function(b){Yf(this,b,this.Eb)};p.Eb=function(b,c){Lf(this.a,Mf,c,b);this.a.out(c,b);var d=this.a;c.bubbles=!1;Lf(d,bg,c,b);delete this.b[c.pointerId];c.isPrimary&&(this.f=void 0,this.c=x.setTimeout(this.Vc.bind(this),200))};
-function Zf(b,c){var d=b.l.f,e=c.changedTouches[0];if(b.f===e.identifier){var f=[e.clientX,e.clientY];d.push(f);x.setTimeout(function(){La(d,f)},2500)}};function cg(b){mb.call(this);this.g=b;this.b={};this.c={};this.a=[];Bf?dg(this,new Uf(this)):Cf?dg(this,new Sf(this)):(b=new Hf(this),dg(this,b),Af&&dg(this,new Wf(this,b)));b=this.a.length;for(var c,d=0;d<b;d++)c=this.a[d],eg(this,Object.keys(c.g))}M(cg,mb);function dg(b,c){var d=Object.keys(c.g);d&&(d.forEach(function(b){var d=c.g[b];d&&(this.c[b]=d.bind(c))},b),b.a.push(c))}cg.prototype.f=function(b){var c=this.c[b.type];c&&c(b)};
-function eg(b,c){c.forEach(function(b){Q(this.g,b,this.f,this)},b)}function fg(b,c){c.forEach(function(b){gb(this.g,b,this.f,this)},b)}function Kf(b,c){for(var d={},e,f=0,g=gg.length;f<g;f++)e=gg[f][0],d[e]=b[e]||c[e]||gg[f][1];return d}cg.prototype.out=function(b,c){b.bubbles=!0;Lf(this,hg,b,c)};function Rf(b,c,d){b.out(c,d);var e=c.relatedTarget;e&&he(c.target,e)||(c.bubbles=!1,Lf(b,bg,c,d))}
-function Qf(b,c,d){c.bubbles=!0;Lf(b,$f,c,d);var e=c.relatedTarget;e&&he(c.target,e)||(c.bubbles=!1,Lf(b,ag,c,d))}function Lf(b,c,d,e){S(b,new gf(c,e,d))}function Vf(b,c){S(b,new gf(c.type,c,c))}cg.prototype.J=function(){for(var b=this.a.length,c,d=0;d<b;d++)c=this.a[d],fg(this,Object.keys(c.g));cg.$.J.call(this)};
-var Of="pointermove",Nf="pointerdown",Pf="pointerup",$f="pointerover",hg="pointerout",ag="pointerenter",bg="pointerleave",Mf="pointercancel",gg=[["bubbles",!1],["cancelable",!1],["view",null],["detail",null],["screenX",0],["screenY",0],["clientX",0],["clientY",0],["ctrlKey",!1],["altKey",!1],["shiftKey",!1],["metaKey",!1],["button",0],["relatedTarget",null],["buttons",0],["pointerId",0],["width",0],["height",0],["pressure",0],["tiltX",0],["tiltY",0],["pointerType",""],["hwTimestamp",0],["isPrimary",
-!1],["type",""],["target",null],["currentTarget",null],["which",0]];function ig(b,c,d,e,f){se.call(this,b,c,f);this.originalEvent=d;this.pixel=c.vc(d);this.coordinate=c.ta(this.pixel);this.dragging=void 0!==e?e:!1}M(ig,se);ig.prototype.preventDefault=function(){ig.$.preventDefault.call(this);this.originalEvent.preventDefault()};ig.prototype.stopPropagation=function(){ig.$.stopPropagation.call(this);this.originalEvent.stopPropagation()};function jg(b,c,d,e,f){ig.call(this,b,c,d.a,e,f);this.a=d}M(jg,ig);
-function kg(b){mb.call(this);this.f=b;this.h=0;this.l=!1;this.c=[];this.b=null;b=this.f.a;this.s=0;this.o={};this.g=new cg(b);this.a=null;this.i=Q(this.g,Nf,this.Id,this);this.j=Q(this.g,Of,this.xe,this)}M(kg,mb);function lg(b,c){var d;d=new jg(mg,b.f,c);S(b,d);0!==b.h?(x.clearTimeout(b.h),b.h=0,d=new jg(ng,b.f,c),S(b,d)):b.h=x.setTimeout(function(){this.h=0;var b=new jg(og,this.f,c);S(this,b)}.bind(b),250)}
-function pg(b,c){c.type==qg||c.type==rg?delete b.o[c.pointerId]:c.type==sg&&(b.o[c.pointerId]=!0);b.s=Object.keys(b.o).length}p=kg.prototype;p.zc=function(b){pg(this,b);var c=new jg(qg,this.f,b);S(this,c);!this.l&&0===b.button&&lg(this,this.b);0===this.s&&(this.c.forEach(N),this.c.length=0,this.l=!1,this.b=null,jb(this.a),this.a=null)};
-p.Id=function(b){pg(this,b);var c=new jg(sg,this.f,b);S(this,c);this.b=b;0===this.c.length&&(this.a=new cg(document),this.c.push(Q(this.a,tg,this.je,this),Q(this.a,qg,this.zc,this),Q(this.g,rg,this.zc,this)))};p.je=function(b){if(b.clientX!=this.b.clientX||b.clientY!=this.b.clientY){this.l=!0;var c=new jg(ug,this.f,b,this.l);S(this,c)}b.preventDefault()};p.xe=function(b){S(this,new jg(b.type,this.f,b,!(!this.b||b.clientX==this.b.clientX&&b.clientY==this.b.clientY)))};
-p.J=function(){this.j&&(N(this.j),this.j=null);this.i&&(N(this.i),this.i=null);this.c.forEach(N);this.c.length=0;this.a&&(jb(this.a),this.a=null);this.g&&(jb(this.g),this.g=null);kg.$.J.call(this)};var og="singleclick",mg="click",ng="dblclick",ug="pointerdrag",tg="pointermove",sg="pointerdown",qg="pointerup",rg="pointercancel",vg={Ue:og,Je:mg,Ke:ng,Ne:ug,Qe:tg,Me:sg,Te:qg,Se:"pointerover",Re:"pointerout",Oe:"pointerenter",Pe:"pointerleave",Le:rg};function wg(b){T.call(this);var c=Wa({},b);c.opacity=void 0!==b.opacity?b.opacity:1;c.visible=void 0!==b.visible?b.visible:!0;c.zIndex=void 0!==b.zIndex?b.zIndex:0;c.maxResolution=void 0!==b.maxResolution?b.maxResolution:Infinity;c.minResolution=void 0!==b.minResolution?b.minResolution:0;this.l(c)}M(wg,T);
-function xg(b){var c=b.Tb(),d=b.Ob(),e=b.cb(),f=b.C(),g=b.Ub(),h=b.get("maxResolution"),k=b.get("minResolution");return{layer:b,opacity:Ca(c,0,1),Zb:d,visible:e,eb:!0,extent:f,zIndex:g,maxResolution:h,minResolution:Math.max(k,0)}}p=wg.prototype;p.C=function(){return this.get("extent")};p.Tb=function(){return this.get("opacity")};p.cb=function(){return this.get("visible")};p.Ub=function(){return this.get("zIndex")};p.Fc=function(b){this.set("opacity",b)};p.Gc=function(b){this.set("visible",b)};
-p.Hc=function(b){this.set("zIndex",b)};function yg(){};function zg(b,c,d,e,f,g){R.call(this,b,c);this.vectorContext=d;this.frameState=e;this.context=f;this.glContext=g}M(zg,R);function Ag(b){var c=Wa({},b);delete c.source;wg.call(this,c);this.h=this.c=this.b=null;b.map&&this.setMap(b.map);Q(this,rb("source"),this.Nd,this);this.Yb(b.source?b.source:null)}M(Ag,wg);function Bg(b,c){return b.visible&&c>=b.minResolution&&c<b.maxResolution}p=Ag.prototype;p.Kb=function(b){b=b?b:[];b.push(xg(this));return b};p.V=function(){return this.get("source")||null};p.Ob=function(){var b=this.V();return b?b.N():"undefined"};p.le=function(){this.v()};
-p.Nd=function(){this.h&&(N(this.h),this.h=null);var b=this.V();b&&(this.h=Q(b,"change",this.le,this));this.v()};p.setMap=function(b){this.b&&(N(this.b),this.b=null);b||this.v();this.c&&(N(this.c),this.c=null);b&&(this.b=Q(b,"precompose",function(b){var d=xg(this);d.eb=!1;d.zIndex=Infinity;b.frameState.layerStatesArray.push(d);b.frameState.layerStates[I(this)]=d},this),this.c=Q(this,"change",b.render,b),this.v())};p.Yb=function(b){this.set("source",b)};function Cg(b,c,d,e,f,g,h,k){Db(b);0===c&&0===d||Fb(b,c,d);1==e&&1==f||Gb(b,e,f);0!==g&&Hb(b,g);0===h&&0===k||Fb(b,h,k);return b}function Dg(b,c){return b[0]==c[0]&&b[1]==c[1]&&b[4]==c[4]&&b[5]==c[5]&&b[12]==c[12]&&b[13]==c[13]}function Eg(b,c,d){var e=b[1],f=b[5],g=b[13],h=c[0];c=c[1];d[0]=b[0]*h+b[4]*c+b[12];d[1]=e*h+f*c+g;return d};function Fg(b){ob.call(this);this.a=b}M(Fg,ob);Fg.prototype.fb=pa;Fg.prototype.Ic=dc;Fg.prototype.l=function(b,c,d){return function(e,f){return Ve(b,c,e,f,function(b){d[e]||(d[e]={});d[e][b.L.toString()]=b})}};function Gg(b){var c=b.a;c.cb()&&"ready"==c.Ob()&&b.v()}function Hg(b,c){c.Qc()&&b.postRenderFunctions.push(na(function(b,c,f){c=I(b).toString();b.Rc(f.viewState.projection,f.usedTiles[c])},c))}function Ig(b,c){if(c){var d,e,f;e=0;for(f=c.length;e<f;++e)d=c[e],b[I(d).toString()]=d}}
-function Jg(b,c){var d=c.w;void 0!==d&&("string"===typeof d?b.logos[d]="":ha(d)&&(b.logos[d.src]=d.href))}function Kg(b,c,d,e){c=I(c).toString();d=d.toString();c in b?d in b[c]?(b=b[c][d],e.a<b.a&&(b.a=e.a),e.f>b.f&&(b.f=e.f),e.b<b.b&&(b.b=e.b),e.c>b.c&&(b.c=e.c)):b[c][d]=e:(b[c]={},b[c][d]=e)}function Lg(b,c,d){return[c*(Math.round(b[0]/c)+d[0]%2/2),c*(Math.round(b[1]/c)+d[1]%2/2)]}
-function Mg(b,c,d,e,f,g,h,k,l,m){var n=I(c).toString();n in b.wantedTiles||(b.wantedTiles[n]={});var q=b.wantedTiles[n];b=b.tileQueue;var r=d.minZoom,u,w,y,z,D,t;for(t=h;t>=r;--t)for(w=Je(d,g,t,w),y=d.I(t),z=w.a;z<=w.f;++z)for(D=w.b;D<=w.c;++D)h-t<=k?(u=Ng(c,t,z,D,e,f),0==u.N()&&(q[u.L.toString()]=!0,u.getKey()in b.f||b.c([u,n,Ne(d,u.L),y])),void 0!==l&&l.call(m,u)):c.Yc(t,z,D,f)};function Og(b){this.l=b.opacity;this.i=b.rotateWithView;this.H=b.rotation;this.gb=b.scale;this.u=b.snapToPixel}Og.prototype.Y=function(){return this.H};function Pg(b){b=b||{};this.g=void 0!==b.anchor?b.anchor:[.5,.5];this.c=null;this.b=void 0!==b.anchorOrigin?b.anchorOrigin:"top-left";this.j=void 0!==b.anchorXUnits?b.anchorXUnits:"fraction";this.A=void 0!==b.anchorYUnits?b.anchorYUnits:"fraction";var c=void 0!==b.crossOrigin?b.crossOrigin:null,d=void 0!==b.img?b.img:null,e=void 0!==b.imgSize?b.imgSize:null,f=b.src;void 0!==f&&0!==f.length||!d||(f=d.src||I(d).toString());var g=void 0!==b.src?0:2,h;void 0!==b.color?(h=b.color,h=Array.isArray(h)?h:
-xd(h)):h=null;var k=Qg.ua(),l=k.get(f,c,h);l||(l=new Rg(d,f,e,c,g,h),k.set(f,c,h,l));this.a=l;this.s=void 0!==b.offset?b.offset:[0,0];this.f=void 0!==b.offsetOrigin?b.offsetOrigin:"top-left";this.h=null;this.o=void 0!==b.size?b.size:null;Og.call(this,{opacity:void 0!==b.opacity?b.opacity:1,rotation:void 0!==b.rotation?b.rotation:0,scale:void 0!==b.scale?b.scale:1,snapToPixel:void 0!==b.snapToPixel?b.snapToPixel:!0,rotateWithView:void 0!==b.rotateWithView?b.rotateWithView:!1})}M(Pg,Og);p=Pg.prototype;
-p.jb=function(){if(this.c)return this.c;var b=this.g,c=this.Pa();if("fraction"==this.j||"fraction"==this.A){if(!c)return null;b=this.g.slice();"fraction"==this.j&&(b[0]*=c[0]);"fraction"==this.A&&(b[1]*=c[1])}if("top-left"!=this.b){if(!c)return null;b===this.g&&(b=this.g.slice());if("top-right"==this.b||"bottom-right"==this.b)b[0]=-b[0]+c[0];if("bottom-left"==this.b||"bottom-right"==this.b)b[1]=-b[1]+c[1]}return this.c=b};p.T=function(b){return this.a.T(b)};p.wc=function(){return this.a.b};p.rb=function(){return this.a.f};
-p.Wb=function(){var b=this.a;if(!b.l)if(b.i){var c=b.b[0],d=b.b[1],e=lf(c,d);e.fillRect(0,0,c,d);b.l=e.canvas}else b.l=b.a;return b.l};p.ka=function(){if(this.h)return this.h;var b=this.s;if("top-left"!=this.f){var c=this.Pa(),d=this.a.b;if(!c||!d)return null;b=b.slice();if("top-right"==this.f||"bottom-right"==this.f)b[0]=d[0]-c[0]-b[0];if("bottom-left"==this.f||"bottom-right"==this.f)b[1]=d[1]-c[1]-b[1]}return this.h=b};p.Pa=function(){return this.o?this.o:this.a.b};
-p.Bc=function(b,c){return Q(this.a,"change",b,c)};p.load=function(){this.a.load()};p.Xc=function(b,c){gb(this.a,"change",b,c)};function Rg(b,c,d,e,f,g){mb.call(this);this.l=null;this.a=b?b:new Image;null!==e&&(this.a.crossOrigin=e);this.c=g?document.createElement("CANVAS"):null;this.h=g;this.g=null;this.f=f;this.b=d;this.o=c;this.i=!1;2==this.f&&Sg(this)}M(Rg,mb);function Sg(b){var c=lf(1,1);try{c.drawImage(b.a,0,0),c.getImageData(0,0,1,1)}catch(d){b.i=!0}}
-Rg.prototype.j=function(){this.f=3;this.g.forEach(N);this.g=null;S(this,"change")};
-Rg.prototype.s=function(){this.f=2;this.b&&(this.a.width=this.b[0],this.a.height=this.b[1]);this.b=[this.a.width,this.a.height];this.g.forEach(N);this.g=null;Sg(this);if(!this.i&&null!==this.h){this.c.width=this.a.width;this.c.height=this.a.height;var b=this.c.getContext("2d");b.drawImage(this.a,0,0);for(var c=b.getImageData(0,0,this.a.width,this.a.height),d=c.data,e=this.h[0]/255,f=this.h[1]/255,g=this.h[2]/255,h=0,k=d.length;h<k;h+=4)d[h]*=e,d[h+1]*=f,d[h+2]*=g;b.putImageData(c,0,0)}S(this,"change")};
-Rg.prototype.T=function(){return this.c?this.c:this.a};Rg.prototype.load=function(){if(0==this.f){this.f=1;this.g=[Q(this.a,"error",this.j,this,!0),Q(this.a,"load",this.s,this,!0)];try{this.a.src=this.o}catch(b){this.j()}}};function Qg(){this.a={};this.b=0}aa(Qg);Qg.prototype.clear=function(){this.a={};this.b=0};Qg.prototype.get=function(b,c,d){b=c+":"+b+":"+(d?vd(d):"null");return b in this.a?this.a[b]:null};Qg.prototype.set=function(b,c,d,e){this.a[c+":"+b+":"+(d?vd(d):"null")]=e;++this.b};function Tg(b,c){this.h=c;this.f={};this.A={}}M(Tg,ib);function Ug(b){var c=b.viewState,d=b.coordinateToPixelMatrix;Cg(d,b.size[0]/2,b.size[1]/2,1/c.resolution,-1/c.resolution,-c.rotation,-c.center[0],-c.center[1]);Eb(d,b.pixelToCoordinateMatrix)}p=Tg.prototype;p.J=function(){for(var b in this.f)jb(this.f[b])};function Vg(){var b=Qg.ua();if(32<b.b){var c=0,d,e;for(d in b.a)e=b.a[d],0!==(c++&3)||nb(e)||(delete b.a[d],--b.b)}}
-p.Vb=function(b,c,d,e,f,g){function h(b,f){var g=I(b).toString(),h=c.layerStates[I(f)].eb;if(!(g in c.skippedFeatureUids)||h)return d.call(e,b,h?f:null)}var k,l=c.viewState,m=l.resolution,n=l.projection,l=b;if(n.a){var n=n.C(),q=Vb(n),r=b[0];if(r<n[0]||r>n[2])l=[r+q*Math.ceil((n[0]-r)/q),b[1]]}n=c.layerStatesArray;for(q=n.length-1;0<=q;--q){var u=n[q],r=u.layer;if(Bg(u,m)&&f.call(g,r)&&(u=Wg(this,r),r.V()&&(k=u.fb(r.V().j?l:b,c,h,e)),k))return k}};
-p.Jc=function(b,c,d,e){return void 0!==this.Vb(b,c,cc,this,d,e)};function Wg(b,c){var d=I(c).toString();if(d in b.f)return b.f[d];var e=b.Ib(c);b.f[d]=e;b.A[d]=Q(e,"change",b.Cd,b);return e}p.Cd=function(){this.h.render()};p.sb=pa;p.Ae=function(b,c){for(var d in this.f)if(!(c&&d in c.layerStates)){var e=d,f=this.f[e];delete this.f[e];N(this.A[e]);delete this.A[e];jb(f)}};function Xg(b,c){for(var d in b.f)if(!(d in c.layerStates)){c.postRenderFunctions.push(b.Ae.bind(b));break}}
-function Oa(b,c){return b.zIndex-c.zIndex};function Yg(b,c){this.j=b;this.l=c;this.a=[];this.b=[];this.f={}}Yg.prototype.clear=function(){this.a.length=0;this.b.length=0;Ya(this.f)};function Zg(b){var c=b.a,d=b.b,e=c[0];1==c.length?(c.length=0,d.length=0):(c[0]=c.pop(),d[0]=d.pop(),$g(b,0));c=b.l(e);delete b.f[c];return e}Yg.prototype.c=function(b){var c=this.j(b);return Infinity!=c?(this.a.push(b),this.b.push(c),this.f[this.l(b)]=!0,ah(this,0,this.a.length-1),!0):!1};
-function $g(b,c){for(var d=b.a,e=b.b,f=d.length,g=d[c],h=e[c],k=c;c<f>>1;){var l=2*c+1,m=2*c+2,l=m<f&&e[m]<e[l]?m:l;d[c]=d[l];e[c]=e[l];c=l}d[c]=g;e[c]=h;ah(b,k,c)}function ah(b,c,d){var e=b.a;b=b.b;for(var f=e[d],g=b[d];d>c;){var h=d-1>>1;if(b[h]>g)e[d]=e[h],b[d]=b[h],d=h;else break}e[d]=f;b[d]=g}function bh(b){var c=b.j,d=b.a,e=b.b,f=0,g=d.length,h,k,l;for(k=0;k<g;++k)h=d[k],l=c(h),Infinity==l?delete b.f[b.l(h)]:(e[f]=l,d[f++]=h);d.length=f;e.length=f;for(c=(b.a.length>>1)-1;0<=c;c--)$g(b,c)};function ch(b,c){Yg.call(this,function(c){return b.apply(null,c)},function(b){return b[0].getKey()});this.A=c;this.h=0;this.g={}}M(ch,Yg);ch.prototype.c=function(b){var c=ch.$.c.call(this,b);c&&Q(b[0],"change",this.i,this);return c};ch.prototype.i=function(b){b=b.target;var c=b.N();if(2===c||3===c||4===c||5===c)gb(b,"change",this.i,this),b=b.getKey(),b in this.g&&(delete this.g[b],--this.h),this.A()};function dh(){this.a=[];this.b=this.f=0}function eh(b,c){var d=b.b,e=.05-d,f=Math.log(.05/b.b)/-.005;return cd({source:c,duration:f,easing:function(b){return d*(Math.exp(-.005*b*f)-1)/e}})};function fh(b){T.call(this);this.S=null;this.set("active",!0);this.handleEvent=b.handleEvent}M(fh,T);fh.prototype.setMap=function(b){this.S=b};function gh(b,c,d,e,f){if(void 0!==d){var g=c.Y(),h=c.ia();void 0!==g&&h&&f&&0<f&&(b.fa(dd({rotation:g,duration:f,easing:$c})),e&&b.fa(cd({source:h,duration:f,easing:$c})));c.rotate(d,e)}}function hh(b,c,d,e,f){var g=c.I();d=c.constrainResolution(g,d,0);ih(b,c,d,e,f)}
-function ih(b,c,d,e,f){if(d){var g=c.I(),h=c.ia();void 0!==g&&h&&d!==g&&f&&0<f&&(b.fa(ed({resolution:g,duration:f,easing:$c})),e&&b.fa(cd({source:h,duration:f,easing:$c})));if(e){var k;b=c.ia();f=c.I();void 0!==b&&void 0!==f&&(k=[e[0]-d*(e[0]-b[0])/f,e[1]-d*(e[1]-b[1])/f]);c.oa(k)}Yc(c,d)}};function jh(b){b=b?b:{};this.a=b.delta?b.delta:1;fh.call(this,{handleEvent:kh});this.b=void 0!==b.duration?b.duration:250}M(jh,fh);function kh(b){var c=!1,d=b.originalEvent;if(b.type==ng){var c=b.map,e=b.coordinate,d=d.shiftKey?-this.a:this.a,f=c.O();hh(c,f,d,e,this.b);b.preventDefault();c=!0}return!c};function lh(b){b=b.originalEvent;return b.altKey&&!(b.metaKey||b.ctrlKey)&&b.shiftKey}function mh(b){b=b.originalEvent;return 0==b.button&&!(Jd&&wf&&b.ctrlKey)}function nh(b){b=b.originalEvent;return!b.altKey&&!(b.metaKey||b.ctrlKey)&&!b.shiftKey}function oh(b){b=b.originalEvent;return!b.altKey&&!(b.metaKey||b.ctrlKey)&&b.shiftKey}function ph(b){b=b.originalEvent.target.tagName;return"INPUT"!==b&&"SELECT"!==b&&"TEXTAREA"!==b}function qh(b){return"mouse"==b.a.pointerType};function rh(b){b=b?b:{};fh.call(this,{handleEvent:b.handleEvent?b.handleEvent:sh});this.vb=b.handleDownEvent?b.handleDownEvent:dc;this.wb=b.handleDragEvent?b.handleDragEvent:pa;this.xb=b.handleMoveEvent?b.handleMoveEvent:pa;this.yb=b.handleUpEvent?b.handleUpEvent:dc;this.s=!1;this.G={};this.c=[]}M(rh,fh);function th(b){for(var c=b.length,d=0,e=0,f=0;f<c;f++)d+=b[f].clientX,e+=b[f].clientY;return[d/c,e/c]}
-function sh(b){if(!(b instanceof jg))return!0;var c=!1,d=b.type;if(d===sg||d===ug||d===qg)d=b.a,b.type==qg?delete this.G[d.pointerId]:b.type==sg?this.G[d.pointerId]=d:d.pointerId in this.G&&(this.G[d.pointerId]=d),this.c=Za(this.G);this.s&&(b.type==ug?this.wb(b):b.type==qg&&(this.s=this.yb(b)));b.type==sg?(this.s=b=this.vb(b),c=this.w(b)):b.type==tg&&this.xb(b);return!c}rh.prototype.w=function(b){return b};function uh(b){rh.call(this,{handleDownEvent:vh,handleDragEvent:wh,handleUpEvent:xh});b=b?b:{};this.a=b.kinetic;this.b=this.g=null;this.i=b.condition?b.condition:nh;this.h=!1}M(uh,rh);function wh(b){var c=th(this.c);this.a&&this.a.a.push(c[0],c[1],Date.now());if(this.b){var d=this.b[0]-c[0],e=c[1]-this.b[1];b=b.map;var f=b.O(),g=f.N(),e=d=[d,e],h=g.resolution;e[0]*=h;e[1]*=h;vb(d,g.rotation);ub(d,g.center);d=f.a.center(d);b.render();f.oa(d)}this.b=c}
-function xh(b){b=b.map;var c=b.O();if(0===this.c.length){var d;if(d=!this.h&&this.a)if(d=this.a,6>d.a.length)d=!1;else{var e=Date.now()-100,f=d.a.length-3;if(d.a[f+2]<e)d=!1;else{for(var g=f-3;0<g&&d.a[g+2]>e;)g-=3;var e=d.a[f+2]-d.a[g+2],h=d.a[f]-d.a[g],f=d.a[f+1]-d.a[g+1];d.f=Math.atan2(f,h);d.b=Math.sqrt(h*h+f*f)/e;d=.05<d.b}}d&&(d=(.05-this.a.b)/-.005,f=this.a.f,g=c.ia(),this.g=eh(this.a,g),b.fa(this.g),g=yh(b,g),d=b.ta([g[0]-d*Math.cos(f),g[1]-d*Math.sin(f)]),d=c.a.center(d),c.oa(d));Zc(c,-1);
-b.render();return!1}this.b=null;return!0}function vh(b){if(0<this.c.length&&this.i(b)){var c=b.map,d=c.O();this.b=null;this.s||Zc(d,1);c.render();this.g&&La(c.w,this.g)&&(d.oa(b.frameState.viewState.center),this.g=null);this.a&&(b=this.a,b.a.length=0,b.f=0,b.b=0);this.h=1<this.c.length;return!0}return!1}uh.prototype.w=dc;function zh(b){b=b?b:{};rh.call(this,{handleDownEvent:Ah,handleDragEvent:Bh,handleUpEvent:Ch});this.b=b.condition?b.condition:lh;this.a=void 0;this.g=void 0!==b.duration?b.duration:250}M(zh,rh);function Bh(b){if(qh(b)){var c=b.map,d=c.Oa();b=b.pixel;d=Math.atan2(d[1]/2-b[1],b[0]-d[0]/2);if(void 0!==this.a){b=d-this.a;var e=c.O(),f=e.Y();c.render();gh(c,e,f-b)}this.a=d}}
-function Ch(b){if(!qh(b))return!0;b=b.map;var c=b.O();Zc(c,-1);var d=c.Y(),e=this.g,d=c.constrainRotation(d,0);gh(b,c,d,void 0,e);return!1}function Ah(b){return qh(b)&&mh(b)&&this.b(b)?(b=b.map,Zc(b.O(),1),b.render(),this.a=void 0,!0):!1}zh.prototype.w=dc;function Dh(b){this.c=null;this.b=document.createElement("div");this.b.style.position="absolute";this.b.className="ol-box "+b;this.f=this.g=this.a=null}M(Dh,ib);Dh.prototype.J=function(){this.setMap(null)};function Eh(b){var c=b.g,d=b.f;b=b.b.style;b.left=Math.min(c[0],d[0])+"px";b.top=Math.min(c[1],d[1])+"px";b.width=Math.abs(d[0]-c[0])+"px";b.height=Math.abs(d[1]-c[1])+"px"}
-Dh.prototype.setMap=function(b){if(this.a){this.a.o.removeChild(this.b);var c=this.b.style;c.left=c.top=c.width=c.height="inherit"}(this.a=b)&&this.a.o.appendChild(this.b)};function Fh(b){var c=b.g,d=b.f,c=[c,[c[0],d[1]],d,[d[0],c[1]]].map(b.a.ta,b.a);c[4]=c[0].slice();b.c?b.c.W([c]):b.c=new Tc([c])}Dh.prototype.M=function(){return this.c};function Gh(b,c,d){R.call(this,b);this.coordinate=c;this.mapBrowserEvent=d}M(Gh,R);function Hh(b){rh.call(this,{handleDownEvent:Ih,handleDragEvent:Jh,handleUpEvent:Kh});b=b?b:{};this.a=new Dh(b.className||"ol-dragbox");this.b=null;this.j=b.condition?b.condition:cc;this.i=b.boxEndCondition?b.boxEndCondition:Lh}M(Hh,rh);function Lh(b,c,d){b=d[0]-c[0];c=d[1]-c[1];return 64<=b*b+c*c}
-function Jh(b){if(qh(b)){var c=this.a,d=b.pixel;c.g=this.b;c.f=d;Fh(c);Eh(c);S(this,new Gh("boxdrag",b.coordinate,b))}}Hh.prototype.M=function(){return this.a.M()};Hh.prototype.h=pa;function Kh(b){if(!qh(b))return!0;this.a.setMap(null);this.i(b,this.b,b.pixel)&&(this.h(b),S(this,new Gh("boxend",b.coordinate,b)));return!1}
-function Ih(b){if(qh(b)&&mh(b)&&this.j(b)){this.b=b.pixel;this.a.setMap(b.map);var c=this.a,d=this.b;c.g=this.b;c.f=d;Fh(c);Eh(c);S(this,new Gh("boxstart",b.coordinate,b));return!0}return!1};function Mh(b){b=b?b:{};var c=b.condition?b.condition:oh;this.g=void 0!==b.duration?b.duration:200;this.o=void 0!==b.out?b.out:!1;Hh.call(this,{condition:c,className:b.className||"ol-dragzoom"})}M(Mh,Hh);
-Mh.prototype.h=function(){var b=this.S,c=b.O(),d=b.Oa(),e=this.M().C();if(this.o){var f=c.jc(d),e=[yh(b,Xb(e)),yh(b,[e[2],e[3]])],g=Pb(void 0),h,k;h=0;for(k=e.length;h<k;++h)Kb(g,e[h]);g=1/Xc(g,d);e=(f[2]-f[0])/2*(g-1);g=(f[3]-f[1])/2*(g-1);f[0]-=e;f[2]+=e;f[1]-=g;f[3]+=g;e=f}d=c.constrainResolution(Xc(e,d));f=c.I();g=c.ia();b.fa(ed({resolution:f,duration:this.g,easing:$c}));b.fa(cd({source:g,duration:this.g,easing:$c}));c.oa(Yb(e));Yc(c,d)};function Nh(b){fh.call(this,{handleEvent:Oh});b=b||{};this.a=function(b){return nh.call(this,b)&&ph.call(this,b)};this.b=void 0!==b.condition?b.condition:this.a;this.c=void 0!==b.duration?b.duration:100;this.g=void 0!==b.pixelDelta?b.pixelDelta:128}M(Nh,fh);
-function Oh(b){var c=!1;if("keydown"==b.type){var d=b.originalEvent.keyCode;if(this.b(b)&&(40==d||37==d||39==d||38==d)){var e=b.map,c=e.O(),f=c.I()*this.g,g=0,h=0;40==d?h=-f:37==d?g=-f:39==d?g=f:h=f;d=[g,h];vb(d,c.Y());f=this.c;if(g=c.ia())f&&0<f&&e.fa(cd({source:g,duration:f,easing:bd})),e=c.a.center([g[0]+d[0],g[1]+d[1]]),c.oa(e);b.preventDefault();c=!0}}return!c};function Ph(b){fh.call(this,{handleEvent:Qh});b=b?b:{};this.b=b.condition?b.condition:ph;this.a=b.delta?b.delta:1;this.c=void 0!==b.duration?b.duration:100}M(Ph,fh);function Qh(b){var c=!1;if("keydown"==b.type||"keypress"==b.type){var d=b.originalEvent.charCode;if(this.b(b)&&(43==d||45==d)){c=b.map;d=43==d?this.a:-this.a;c.render();var e=c.O();hh(c,e,d,void 0,this.c);b.preventDefault();c=!0}}return!c};function Rh(b){fh.call(this,{handleEvent:Sh});b=b||{};this.a=0;this.i=void 0!==b.duration?b.duration:250;this.j=void 0!==b.useAnchor?b.useAnchor:!0;this.c=null;this.g=this.b=void 0}M(Rh,fh);
-function Sh(b){var c=!1;if("wheel"==b.type||"mousewheel"==b.type){var c=b.map,d=b.originalEvent;this.j&&(this.c=b.coordinate);var e;"wheel"==b.type?(e=d.deltaY,uf&&d.deltaMode===x.WheelEvent.DOM_DELTA_PIXEL&&(e/=xf),d.deltaMode===x.WheelEvent.DOM_DELTA_LINE&&(e*=40)):"mousewheel"==b.type&&(e=-d.wheelDeltaY,vf&&(e/=3));this.a+=e;void 0===this.b&&(this.b=Date.now());e=Math.max(80-(Date.now()-this.b),0);x.clearTimeout(this.g);this.g=x.setTimeout(this.h.bind(this,c),e);b.preventDefault();c=!0}return!c}
-Rh.prototype.h=function(b){var c=Ca(this.a,-1,1),d=b.O();b.render();hh(b,d,-c,this.c,this.i);this.a=0;this.c=null;this.g=this.b=void 0};function Th(b){rh.call(this,{handleDownEvent:Uh,handleDragEvent:Vh,handleUpEvent:Wh});b=b||{};this.b=null;this.g=void 0;this.a=!1;this.h=0;this.j=void 0!==b.threshold?b.threshold:.3;this.i=void 0!==b.duration?b.duration:250}M(Th,rh);
-function Vh(b){var c=0,d=this.c[0],e=this.c[1],d=Math.atan2(e.clientY-d.clientY,e.clientX-d.clientX);void 0!==this.g&&(c=d-this.g,this.h+=c,!this.a&&Math.abs(this.h)>this.j&&(this.a=!0));this.g=d;b=b.map;d=b.a.getBoundingClientRect();e=th(this.c);e[0]-=d.left;e[1]-=d.top;this.b=b.ta(e);this.a&&(d=b.O(),e=d.Y(),b.render(),gh(b,d,e+c,this.b))}
-function Wh(b){if(2>this.c.length){b=b.map;var c=b.O();Zc(c,-1);if(this.a){var d=c.Y(),e=this.b,f=this.i,d=c.constrainRotation(d,0);gh(b,c,d,e,f)}return!1}return!0}function Uh(b){return 2<=this.c.length?(b=b.map,this.b=null,this.g=void 0,this.a=!1,this.h=0,this.s||Zc(b.O(),1),b.render(),!0):!1}Th.prototype.w=dc;function Xh(b){rh.call(this,{handleDownEvent:Yh,handleDragEvent:Zh,handleUpEvent:$h});b=b?b:{};this.b=null;this.h=void 0!==b.duration?b.duration:400;this.a=void 0;this.g=1}M(Xh,rh);function Zh(b){var c=1,d=this.c[0],e=this.c[1],f=d.clientX-e.clientX,d=d.clientY-e.clientY,f=Math.sqrt(f*f+d*d);void 0!==this.a&&(c=this.a/f);this.a=f;1!=c&&(this.g=c);b=b.map;var f=b.O(),d=f.I(),e=b.a.getBoundingClientRect(),g=th(this.c);g[0]-=e.left;g[1]-=e.top;this.b=b.ta(g);b.render();ih(b,f,d*c,this.b)}
-function $h(b){if(2>this.c.length){b=b.map;var c=b.O();Zc(c,-1);var d=c.I(),e=this.b,f=this.h,d=c.constrainResolution(d,0,this.g-1);ih(b,c,d,e,f);return!1}return!0}function Yh(b){return 2<=this.c.length?(b=b.map,this.b=null,this.a=void 0,this.g=1,this.s||Zc(b.O(),1),b.render(),!0):!1}Xh.prototype.w=dc;function ai(b){var c=b||{};b=Wa({},c);delete b.layers;c=c.layers;wg.call(this,b);this.b=[];this.a={};Q(this,rb("layers"),this.Ed,this);c?Array.isArray(c)&&(c=new ld(c.slice())):c=new ld;this.set("layers",c)}M(ai,wg);p=ai.prototype;p.ob=function(){this.cb()&&this.v()};
-p.Ed=function(){this.b.forEach(N);this.b.length=0;var b=this.get("layers");this.b.push(Q(b,"add",this.Dd,this),Q(b,"remove",this.Fd,this));for(var c in this.a)this.a[c].forEach(N);Ya(this.a);var b=b.a,d,e;c=0;for(d=b.length;c<d;c++)e=b[c],this.a[I(e).toString()]=[Q(e,"propertychange",this.ob,this),Q(e,"change",this.ob,this)];this.v()};p.Dd=function(b){b=b.element;var c=I(b).toString();this.a[c]=[Q(b,"propertychange",this.ob,this),Q(b,"change",this.ob,this)];this.v()};
-p.Fd=function(b){b=I(b.element).toString();this.a[b].forEach(N);delete this.a[b];this.v()};p.Kb=function(b){var c=void 0!==b?b:[],d=c.length;nd(this.get("layers"),function(b){b.Kb(c)});b=xg(this);var e,f;for(e=c.length;d<e;d++)f=c[d],f.opacity*=b.opacity,f.visible=f.visible&&b.visible,f.maxResolution=Math.min(f.maxResolution,b.maxResolution),f.minResolution=Math.max(f.minResolution,b.minResolution),void 0!==b.extent&&(f.extent=void 0!==f.extent?$b(f.extent,b.extent):b.extent);return c};p.Ob=function(){return"ready"};function bi(b){ic.call(this,{code:b,units:"m",extent:ci,global:!0,worldExtent:di})}M(bi,ic);bi.prototype.getPointResolution=function(b,c){return b/Da(c[1]/6378137)};var ei=6378137*Math.PI,ci=[-ei,-ei,ei,ei],di=[-180,-85,180,85],fi="EPSG:3857 EPSG:102100 EPSG:102113 EPSG:900913 urn:ogc:def:crs:EPSG:6.18:3:3857 urn:ogc:def:crs:EPSG::3857 http://www.opengis.net/gml/srs/epsg.xml#3857".split(" ").map(function(b){return new bi(b)});
-function gi(b,c,d){var e=b.length;d=1<d?d:2;void 0===c&&(2<d?c=b.slice():c=Array(e));for(var f=0;f<e;f+=d)c[f]=6378137*Math.PI*b[f]/180,c[f+1]=6378137*Math.log(Math.tan(Math.PI*(b[f+1]+90)/360));return c}function hi(b,c,d){var e=b.length;d=1<d?d:2;void 0===c&&(2<d?c=b.slice():c=Array(e));for(var f=0;f<e;f+=d)c[f]=180*b[f]/(6378137*Math.PI),c[f+1]=360*Math.atan(Math.exp(b[f+1]/6378137))/Math.PI-90;return c};var ii=new ec(6378137);function ji(b,c){ic.call(this,{code:b,units:"degrees",extent:ki,axisOrientation:c,global:!0,metersPerUnit:li,worldExtent:ki})}M(ji,ic);ji.prototype.getPointResolution=function(b){return b};
-var ki=[-180,-90,180,90],li=Math.PI*ii.radius/180,mi=[new ji("CRS:84"),new ji("EPSG:4326","neu"),new ji("urn:ogc:def:crs:EPSG::4326","neu"),new ji("urn:ogc:def:crs:EPSG:6.6:4326","neu"),new ji("urn:ogc:def:crs:OGC:1.3:CRS84"),new ji("urn:ogc:def:crs:OGC:2:84"),new ji("http://www.opengis.net/gml/srs/epsg.xml#4326","neu"),new ji("urn:x-ogc:def:crs:EPSG:4326","neu")];function X(b){b=b?b:{};var c=Wa({},b);delete c.preload;delete c.useInterimTilesOnError;Ag.call(this,c);this.set("preload",void 0!==b.preload?b.preload:0);this.set("useInterimTilesOnError",void 0!==b.useInterimTilesOnError?b.useInterimTilesOnError:!0)}M(X,Ag);function ni(b){return b.get("useInterimTilesOnError")};var oi=[0,0,0,1],pi=[],qi=[0,0,0,1];function ri(b,c,d,e){0!==c&&(b.translate(d,e),b.rotate(c),b.translate(-d,-e))};function si(b){b=b||{};this.a=void 0!==b.color?b.color:null;this.b=void 0}si.prototype.ga=function(){return this.a};function ti(){this.b=-1};function ui(){this.b=-1;this.b=64;this.a=Array(4);this.g=Array(this.b);this.c=this.f=0;this.a[0]=1732584193;this.a[1]=4023233417;this.a[2]=2562383102;this.a[3]=271733878;this.c=this.f=0}M(ui,ti);
-function vi(b,c,d){d||(d=0);var e=Array(16);if(da(c))for(var f=0;16>f;++f)e[f]=c.charCodeAt(d++)|c.charCodeAt(d++)<<8|c.charCodeAt(d++)<<16|c.charCodeAt(d++)<<24;else for(f=0;16>f;++f)e[f]=c[d++]|c[d++]<<8|c[d++]<<16|c[d++]<<24;c=b.a[0];d=b.a[1];var f=b.a[2],g=b.a[3],h=0,h=c+(g^d&(f^g))+e[0]+3614090360&4294967295;c=d+(h<<7&4294967295|h>>>25);h=g+(f^c&(d^f))+e[1]+3905402710&4294967295;g=c+(h<<12&4294967295|h>>>20);h=f+(d^g&(c^d))+e[2]+606105819&4294967295;f=g+(h<<17&4294967295|h>>>15);h=d+(c^f&(g^
+function uf(b,c){var d=b.style;d.WebkitTransform=c;d.MozTransform=c;d.a=c;d.msTransform=c;d.transform=c;Gd&&Qd("9.0")&&(b.style.transformOrigin="0 0")}function vf(b,c){var d;if(tf()){var e=Array(16);for(d=0;16>d;++d)e[d]=c[d].toFixed(6);uf(b,"matrix3d("+e.join(",")+")")}else if(sf()){var e=[c[0],c[1],c[4],c[5],c[12],c[13]],f=Array(6);for(d=0;6>d;++d)f[d]=e[d].toFixed(6);uf(b,"matrix("+f.join(",")+")")}else b.style.left=Math.round(c[12])+"px",b.style.top=Math.round(c[13])+"px"};var wf=["experimental-webgl","webgl","webkit-3d","moz-webgl"];function xf(b,c){var d,e,f=wf.length;for(e=0;e<f;++e)try{if(d=b.getContext(wf[e],c))return d}catch(g){}return null};var yf,zf="undefined"!==typeof navigator?navigator.userAgent.toLowerCase():"",Af=-1!==zf.indexOf("firefox"),Bf=-1!==zf.indexOf("safari")&&-1===zf.indexOf("chrom"),Cf=-1!==zf.indexOf("macintosh"),Df=x.devicePixelRatio||1,Ef=!1,Ff=function(){if(!("HTMLCanvasElement"in x))return!1;try{var b=rf();return b?(void 0!==b.setLineDash&&(Ef=!0),!0):!1}catch(c){return!1}}(),Gf="ontouchstart"in x,Hf="PointerEvent"in x,If=!!x.navigator.msPointerEnabled,Jf=!1,Kf=[];
+if("WebGLRenderingContext"in x)try{var Lf=xf(document.createElement("CANVAS"),{failIfMajorPerformanceCaveat:!0});Lf&&(Jf=!0,Kf=Lf.getSupportedExtensions())}catch(b){}yf=Jf;oa=Kf;function Mf(b,c){this.a=b;this.g=c};function Nf(b){Mf.call(this,b,{mousedown:this.Vd,mousemove:this.Wd,mouseup:this.Zd,mouseover:this.Yd,mouseout:this.Xd});this.b=b.b;this.f=[]}M(Nf,Mf);function Of(b,c){for(var d=b.f,e=c.clientX,f=c.clientY,g=0,h=d.length,k;g<h&&(k=d[g]);g++){var l=Math.abs(f-k[1]);if(25>=Math.abs(e-k[0])&&25>=l)return!0}return!1}function Pf(b){var c=Qf(b,b),d=c.preventDefault;c.preventDefault=function(){b.preventDefault();d()};c.pointerId=1;c.isPrimary=!0;c.pointerType="mouse";return c}p=Nf.prototype;
+p.Vd=function(b){if(!Of(this,b)){if((1).toString()in this.b){var c=Pf(b);Rf(this.a,Sf,c,b);delete this.b[(1).toString()]}c=Pf(b);this.b[(1).toString()]=b;Rf(this.a,Tf,c,b)}};p.Wd=function(b){if(!Of(this,b)){var c=Pf(b);Rf(this.a,Uf,c,b)}};p.Zd=function(b){if(!Of(this,b)){var c=this.b[(1).toString()];c&&c.button===b.button&&(c=Pf(b),Rf(this.a,Vf,c,b),delete this.b[(1).toString()])}};p.Yd=function(b){if(!Of(this,b)){var c=Pf(b);Wf(this.a,c,b)}};
+p.Xd=function(b){if(!Of(this,b)){var c=Pf(b);Xf(this.a,c,b)}};function Yf(b){Mf.call(this,b,{MSPointerDown:this.de,MSPointerMove:this.ee,MSPointerUp:this.he,MSPointerOut:this.fe,MSPointerOver:this.ge,MSPointerCancel:this.ce,MSGotPointerCapture:this.ae,MSLostPointerCapture:this.be});this.b=b.b;this.f=["","unavailable","touch","pen","mouse"]}M(Yf,Mf);function Zf(b,c){var d=c;ea(c.pointerType)&&(d=Qf(c,c),d.pointerType=b.f[c.pointerType]);return d}p=Yf.prototype;p.de=function(b){this.b[b.pointerId.toString()]=b;var c=Zf(this,b);Rf(this.a,Tf,c,b)};
+p.ee=function(b){var c=Zf(this,b);Rf(this.a,Uf,c,b)};p.he=function(b){var c=Zf(this,b);Rf(this.a,Vf,c,b);delete this.b[b.pointerId.toString()]};p.fe=function(b){var c=Zf(this,b);Xf(this.a,c,b)};p.ge=function(b){var c=Zf(this,b);Wf(this.a,c,b)};p.ce=function(b){var c=Zf(this,b);Rf(this.a,Sf,c,b);delete this.b[b.pointerId.toString()]};p.be=function(b){S(this.a,new nf("lostpointercapture",b,b))};p.ae=function(b){S(this.a,new nf("gotpointercapture",b,b))};function $f(b){Mf.call(this,b,{pointerdown:this.se,pointermove:this.te,pointerup:this.we,pointerout:this.ue,pointerover:this.ve,pointercancel:this.re,gotpointercapture:this.xd,lostpointercapture:this.Ud})}M($f,Mf);p=$f.prototype;p.se=function(b){ag(this.a,b)};p.te=function(b){ag(this.a,b)};p.we=function(b){ag(this.a,b)};p.ue=function(b){ag(this.a,b)};p.ve=function(b){ag(this.a,b)};p.re=function(b){ag(this.a,b)};p.Ud=function(b){ag(this.a,b)};p.xd=function(b){ag(this.a,b)};function bg(b,c){Mf.call(this,b,{touchstart:this.Ie,touchmove:this.He,touchend:this.Ge,touchcancel:this.Fe});this.b=b.b;this.l=c;this.f=void 0;this.h=0;this.c=void 0}M(bg,Mf);p=bg.prototype;p.Vc=function(){this.h=0;this.c=void 0};
+function cg(b,c,d){c=Qf(c,d);c.pointerId=d.identifier+2;c.bubbles=!0;c.cancelable=!0;c.detail=b.h;c.button=0;c.buttons=1;c.width=d.webkitRadiusX||d.radiusX||0;c.height=d.webkitRadiusY||d.radiusY||0;c.pressure=d.webkitForce||d.force||.5;c.isPrimary=b.f===d.identifier;c.pointerType="touch";c.clientX=d.clientX;c.clientY=d.clientY;c.screenX=d.screenX;c.screenY=d.screenY;return c}
+function dg(b,c,d){function e(){c.preventDefault()}var f=Array.prototype.slice.call(c.changedTouches),g=f.length,h,k;for(h=0;h<g;++h)k=cg(b,c,f[h]),k.preventDefault=e,d.call(b,c,k)}
+p.Ie=function(b){var c=b.touches,d=Object.keys(this.b),e=d.length;if(e>=c.length){var f=[],g,h,k;for(g=0;g<e;++g){h=d[g];k=this.b[h];var l;if(!(l=1==h))a:{l=c.length;for(var m=void 0,n=0;n<l;n++)if(m=c[n],m.identifier===h-2){l=!0;break a}l=!1}l||f.push(k.out)}for(g=0;g<f.length;++g)this.Fb(b,f[g])}c=b.changedTouches[0];d=Object.keys(this.b).length;if(0===d||1===d&&(1).toString()in this.b)this.f=c.identifier,void 0!==this.c&&x.clearTimeout(this.c);eg(this,b);this.h++;dg(this,b,this.qe)};
+p.qe=function(b,c){this.b[c.pointerId]={target:c.target,out:c,Sc:c.target};var d=this.a;c.bubbles=!0;Rf(d,fg,c,b);d=this.a;c.bubbles=!1;Rf(d,gg,c,b);Rf(this.a,Tf,c,b)};p.He=function(b){b.preventDefault();dg(this,b,this.$d)};p.$d=function(b,c){var d=this.b[c.pointerId];if(d){var e=d.out,f=d.Sc;Rf(this.a,Uf,c,b);e&&f!==c.target&&(e.relatedTarget=c.target,c.relatedTarget=f,e.target=f,c.target?(Xf(this.a,e,b),Wf(this.a,c,b)):(c.target=f,c.relatedTarget=null,this.Fb(b,c)));d.out=c;d.Sc=c.target}};
+p.Ge=function(b){eg(this,b);dg(this,b,this.Je)};p.Je=function(b,c){Rf(this.a,Vf,c,b);this.a.out(c,b);var d=this.a;c.bubbles=!1;Rf(d,hg,c,b);delete this.b[c.pointerId];c.isPrimary&&(this.f=void 0,this.c=x.setTimeout(this.Vc.bind(this),200))};p.Fe=function(b){dg(this,b,this.Fb)};p.Fb=function(b,c){Rf(this.a,Sf,c,b);this.a.out(c,b);var d=this.a;c.bubbles=!1;Rf(d,hg,c,b);delete this.b[c.pointerId];c.isPrimary&&(this.f=void 0,this.c=x.setTimeout(this.Vc.bind(this),200))};
+function eg(b,c){var d=b.l.f,e=c.changedTouches[0];if(b.f===e.identifier){var f=[e.clientX,e.clientY];d.push(f);x.setTimeout(function(){La(d,f)},2500)}};function ig(b){mb.call(this);this.g=b;this.b={};this.c={};this.a=[];Hf?jg(this,new $f(this)):If?jg(this,new Yf(this)):(b=new Nf(this),jg(this,b),Gf&&jg(this,new bg(this,b)));b=this.a.length;for(var c,d=0;d<b;d++)c=this.a[d],kg(this,Object.keys(c.g))}M(ig,mb);function jg(b,c){var d=Object.keys(c.g);d&&(d.forEach(function(b){var d=c.g[b];d&&(this.c[b]=d.bind(c))},b),b.a.push(c))}ig.prototype.f=function(b){var c=this.c[b.type];c&&c(b)};
+function kg(b,c){c.forEach(function(b){Q(this.g,b,this.f,this)},b)}function lg(b,c){c.forEach(function(b){gb(this.g,b,this.f,this)},b)}function Qf(b,c){for(var d={},e,f=0,g=mg.length;f<g;f++)e=mg[f][0],d[e]=b[e]||c[e]||mg[f][1];return d}ig.prototype.out=function(b,c){b.bubbles=!0;Rf(this,ng,b,c)};function Xf(b,c,d){b.out(c,d);var e=c.relatedTarget;e&&ie(c.target,e)||(c.bubbles=!1,Rf(b,hg,c,d))}
+function Wf(b,c,d){c.bubbles=!0;Rf(b,fg,c,d);var e=c.relatedTarget;e&&ie(c.target,e)||(c.bubbles=!1,Rf(b,gg,c,d))}function Rf(b,c,d,e){S(b,new nf(c,e,d))}function ag(b,c){S(b,new nf(c.type,c,c))}ig.prototype.J=function(){for(var b=this.a.length,c,d=0;d<b;d++)c=this.a[d],lg(this,Object.keys(c.g));ig.X.J.call(this)};
+var Uf="pointermove",Tf="pointerdown",Vf="pointerup",fg="pointerover",ng="pointerout",gg="pointerenter",hg="pointerleave",Sf="pointercancel",mg=[["bubbles",!1],["cancelable",!1],["view",null],["detail",null],["screenX",0],["screenY",0],["clientX",0],["clientY",0],["ctrlKey",!1],["altKey",!1],["shiftKey",!1],["metaKey",!1],["button",0],["relatedTarget",null],["buttons",0],["pointerId",0],["width",0],["height",0],["pressure",0],["tiltX",0],["tiltY",0],["pointerType",""],["hwTimestamp",0],["isPrimary",
+!1],["type",""],["target",null],["currentTarget",null],["which",0]];function og(b,c,d,e,f){te.call(this,b,c,f);this.originalEvent=d;this.pixel=c.vc(d);this.coordinate=c.ta(this.pixel);this.dragging=void 0!==e?e:!1}M(og,te);og.prototype.preventDefault=function(){og.X.preventDefault.call(this);this.originalEvent.preventDefault()};og.prototype.stopPropagation=function(){og.X.stopPropagation.call(this);this.originalEvent.stopPropagation()};function pg(b,c,d,e,f){og.call(this,b,c,d.a,e,f);this.a=d}M(pg,og);
+function qg(b){mb.call(this);this.f=b;this.h=0;this.l=!1;this.c=[];this.b=null;b=this.f.a;this.s=0;this.o={};this.g=new ig(b);this.a=null;this.i=Q(this.g,Tf,this.Jd,this);this.j=Q(this.g,Uf,this.ye,this)}M(qg,mb);function rg(b,c){var d;d=new pg(sg,b.f,c);S(b,d);0!==b.h?(x.clearTimeout(b.h),b.h=0,d=new pg(tg,b.f,c),S(b,d)):b.h=x.setTimeout(function(){this.h=0;var b=new pg(ug,this.f,c);S(this,b)}.bind(b),250)}
+function vg(b,c){c.type==wg||c.type==xg?delete b.o[c.pointerId]:c.type==yg&&(b.o[c.pointerId]=!0);b.s=Object.keys(b.o).length}p=qg.prototype;p.zc=function(b){vg(this,b);var c=new pg(wg,this.f,b);S(this,c);!this.l&&0===b.button&&rg(this,this.b);0===this.s&&(this.c.forEach(N),this.c.length=0,this.l=!1,this.b=null,jb(this.a),this.a=null)};
+p.Jd=function(b){vg(this,b);var c=new pg(yg,this.f,b);S(this,c);this.b=b;0===this.c.length&&(this.a=new ig(document),this.c.push(Q(this.a,zg,this.ke,this),Q(this.a,wg,this.zc,this),Q(this.g,xg,this.zc,this)))};p.ke=function(b){if(b.clientX!=this.b.clientX||b.clientY!=this.b.clientY){this.l=!0;var c=new pg(Ag,this.f,b,this.l);S(this,c)}b.preventDefault()};p.ye=function(b){S(this,new pg(b.type,this.f,b,!(!this.b||b.clientX==this.b.clientX&&b.clientY==this.b.clientY)))};
+p.J=function(){this.j&&(N(this.j),this.j=null);this.i&&(N(this.i),this.i=null);this.c.forEach(N);this.c.length=0;this.a&&(jb(this.a),this.a=null);this.g&&(jb(this.g),this.g=null);qg.X.J.call(this)};var ug="singleclick",sg="click",tg="dblclick",Ag="pointerdrag",zg="pointermove",yg="pointerdown",wg="pointerup",xg="pointercancel",Bg={Ve:ug,Ke:sg,Le:tg,Oe:Ag,Re:zg,Ne:yg,Ue:wg,Te:"pointerover",Se:"pointerout",Pe:"pointerenter",Qe:"pointerleave",Me:xg};function Cg(b){T.call(this);var c=Wa({},b);c.opacity=void 0!==b.opacity?b.opacity:1;c.visible=void 0!==b.visible?b.visible:!0;c.zIndex=void 0!==b.zIndex?b.zIndex:0;c.maxResolution=void 0!==b.maxResolution?b.maxResolution:Infinity;c.minResolution=void 0!==b.minResolution?b.minResolution:0;this.l(c)}M(Cg,T);
+function Dg(b){var c=b.Ub(),d=b.Pb(),e=b.cb(),f=b.C(),g=b.Vb(),h=b.get("maxResolution"),k=b.get("minResolution");return{layer:b,opacity:Ca(c,0,1),$b:d,visible:e,eb:!0,extent:f,zIndex:g,maxResolution:h,minResolution:Math.max(k,0)}}p=Cg.prototype;p.C=function(){return this.get("extent")};p.Ub=function(){return this.get("opacity")};p.cb=function(){return this.get("visible")};p.Vb=function(){return this.get("zIndex")};p.Fc=function(b){this.set("opacity",b)};p.Gc=function(b){this.set("visible",b)};
+p.Hc=function(b){this.set("zIndex",b)};function Eg(){};function Fg(b,c,d,e,f,g){R.call(this,b,c);this.vectorContext=d;this.frameState=e;this.context=f;this.glContext=g}M(Fg,R);function Gg(b){var c=Wa({},b);delete c.source;Cg.call(this,c);this.h=this.c=this.b=null;b.map&&this.setMap(b.map);Q(this,rb("source"),this.Od,this);this.Zb(b.source?b.source:null)}M(Gg,Cg);function Hg(b,c){return b.visible&&c>=b.minResolution&&c<b.maxResolution}p=Gg.prototype;p.Lb=function(b){b=b?b:[];b.push(Dg(this));return b};p.V=function(){return this.get("source")||null};p.Pb=function(){var b=this.V();return b?b.N():"undefined"};p.me=function(){this.v()};
+p.Od=function(){this.h&&(N(this.h),this.h=null);var b=this.V();b&&(this.h=Q(b,"change",this.me,this));this.v()};p.setMap=function(b){this.b&&(N(this.b),this.b=null);b||this.v();this.c&&(N(this.c),this.c=null);b&&(this.b=Q(b,"precompose",function(b){var d=Dg(this);d.eb=!1;d.zIndex=Infinity;b.frameState.layerStatesArray.push(d);b.frameState.layerStates[I(this)]=d},this),this.c=Q(this,"change",b.render,b),this.v())};p.Zb=function(b){this.set("source",b)};function Ig(b,c,d,e,f,g,h,k){Db(b);0===c&&0===d||Fb(b,c,d);1==e&&1==f||Gb(b,e,f);0!==g&&Hb(b,g);0===h&&0===k||Fb(b,h,k);return b}function Jg(b,c){return b[0]==c[0]&&b[1]==c[1]&&b[4]==c[4]&&b[5]==c[5]&&b[12]==c[12]&&b[13]==c[13]}function Kg(b,c,d){var e=b[1],f=b[5],g=b[13],h=c[0];c=c[1];d[0]=b[0]*h+b[4]*c+b[12];d[1]=e*h+f*c+g;return d};function Lg(b){ob.call(this);this.a=b}M(Lg,ob);Lg.prototype.fb=pa;Lg.prototype.Ic=dc;Lg.prototype.l=function(b,c,d){return function(e,f){return We(b,c,e,f,function(b){d[e]||(d[e]={});d[e][b.L.toString()]=b})}};function Mg(b){var c=b.a;c.cb()&&"ready"==c.Pb()&&b.v()}function Ng(b,c){c.Qc()&&b.postRenderFunctions.push(na(function(b,c,f){c=I(b).toString();b.Rc(f.viewState.projection,f.usedTiles[c])},c))}function Og(b,c){if(c){var d,e,f;e=0;for(f=c.length;e<f;++e)d=c[e],b[I(d).toString()]=d}}
+function Pg(b,c){var d=c.w;void 0!==d&&("string"===typeof d?b.logos[d]="":ha(d)&&(b.logos[d.src]=d.href))}function Qg(b,c,d,e){c=I(c).toString();d=d.toString();c in b?d in b[c]?(b=b[c][d],e.a<b.a&&(b.a=e.a),e.f>b.f&&(b.f=e.f),e.b<b.b&&(b.b=e.b),e.c>b.c&&(b.c=e.c)):b[c][d]=e:(b[c]={},b[c][d]=e)}function Rg(b,c,d){return[c*(Math.round(b[0]/c)+d[0]%2/2),c*(Math.round(b[1]/c)+d[1]%2/2)]}
+function Sg(b,c,d,e,f,g,h,k,l,m){var n=I(c).toString();n in b.wantedTiles||(b.wantedTiles[n]={});var q=b.wantedTiles[n];b=b.tileQueue;var r=d.minZoom,u,w,y,z,D,t;for(t=h;t>=r;--t)for(w=Ke(d,g,t,w),y=d.I(t),z=w.a;z<=w.f;++z)for(D=w.b;D<=w.c;++D)h-t<=k?(u=Tg(c,t,z,D,e,f),0==u.N()&&(q[u.L.toString()]=!0,u.getKey()in b.f||b.c([u,n,Oe(d,u.L),y])),void 0!==l&&l.call(m,u)):c.Yc(t,z,D,f)};function Ug(b){this.l=b.opacity;this.i=b.rotateWithView;this.H=b.rotation;this.gb=b.scale;this.u=b.snapToPixel}Ug.prototype.Z=function(){return this.H};function Vg(b){b=b||{};this.g=void 0!==b.anchor?b.anchor:[.5,.5];this.c=null;this.b=void 0!==b.anchorOrigin?b.anchorOrigin:"top-left";this.j=void 0!==b.anchorXUnits?b.anchorXUnits:"fraction";this.A=void 0!==b.anchorYUnits?b.anchorYUnits:"fraction";var c=void 0!==b.crossOrigin?b.crossOrigin:null,d=void 0!==b.img?b.img:null,e=void 0!==b.imgSize?b.imgSize:null,f=b.src;void 0!==f&&0!==f.length||!d||(f=d.src||I(d).toString());var g=void 0!==b.src?0:2,h;void 0!==b.color?(h=b.color,h=Array.isArray(h)?h:
+xd(h)):h=null;var k=Wg.ua(),l=k.get(f,c,h);l||(l=new Xg(d,f,e,c,g,h),k.set(f,c,h,l));this.a=l;this.s=void 0!==b.offset?b.offset:[0,0];this.f=void 0!==b.offsetOrigin?b.offsetOrigin:"top-left";this.h=null;this.o=void 0!==b.size?b.size:null;Ug.call(this,{opacity:void 0!==b.opacity?b.opacity:1,rotation:void 0!==b.rotation?b.rotation:0,scale:void 0!==b.scale?b.scale:1,snapToPixel:void 0!==b.snapToPixel?b.snapToPixel:!0,rotateWithView:void 0!==b.rotateWithView?b.rotateWithView:!1})}M(Vg,Ug);p=Vg.prototype;
+p.jb=function(){if(this.c)return this.c;var b=this.g,c=this.Qa();if("fraction"==this.j||"fraction"==this.A){if(!c)return null;b=this.g.slice();"fraction"==this.j&&(b[0]*=c[0]);"fraction"==this.A&&(b[1]*=c[1])}if("top-left"!=this.b){if(!c)return null;b===this.g&&(b=this.g.slice());if("top-right"==this.b||"bottom-right"==this.b)b[0]=-b[0]+c[0];if("bottom-left"==this.b||"bottom-right"==this.b)b[1]=-b[1]+c[1]}return this.c=b};p.T=function(b){return this.a.T(b)};p.wc=function(){return this.a.b};p.rb=function(){return this.a.f};
+p.Xb=function(){var b=this.a;if(!b.l)if(b.i){var c=b.b[0],d=b.b[1],e=rf(c,d);e.fillRect(0,0,c,d);b.l=e.canvas}else b.l=b.a;return b.l};p.ka=function(){if(this.h)return this.h;var b=this.s;if("top-left"!=this.f){var c=this.Qa(),d=this.a.b;if(!c||!d)return null;b=b.slice();if("top-right"==this.f||"bottom-right"==this.f)b[0]=d[0]-c[0]-b[0];if("bottom-left"==this.f||"bottom-right"==this.f)b[1]=d[1]-c[1]-b[1]}return this.h=b};p.Qa=function(){return this.o?this.o:this.a.b};
+p.Bc=function(b,c){return Q(this.a,"change",b,c)};p.load=function(){this.a.load()};p.Xc=function(b,c){gb(this.a,"change",b,c)};function Xg(b,c,d,e,f,g){mb.call(this);this.l=null;this.a=b?b:new Image;null!==e&&(this.a.crossOrigin=e);this.c=g?document.createElement("CANVAS"):null;this.h=g;this.g=null;this.f=f;this.b=d;this.o=c;this.i=!1;2==this.f&&Yg(this)}M(Xg,mb);function Yg(b){var c=rf(1,1);try{c.drawImage(b.a,0,0),c.getImageData(0,0,1,1)}catch(d){b.i=!0}}
+Xg.prototype.j=function(){this.f=3;this.g.forEach(N);this.g=null;S(this,"change")};
+Xg.prototype.s=function(){this.f=2;this.b&&(this.a.width=this.b[0],this.a.height=this.b[1]);this.b=[this.a.width,this.a.height];this.g.forEach(N);this.g=null;Yg(this);if(!this.i&&null!==this.h){this.c.width=this.a.width;this.c.height=this.a.height;var b=this.c.getContext("2d");b.drawImage(this.a,0,0);for(var c=b.getImageData(0,0,this.a.width,this.a.height),d=c.data,e=this.h[0]/255,f=this.h[1]/255,g=this.h[2]/255,h=0,k=d.length;h<k;h+=4)d[h]*=e,d[h+1]*=f,d[h+2]*=g;b.putImageData(c,0,0)}S(this,"change")};
+Xg.prototype.T=function(){return this.c?this.c:this.a};Xg.prototype.load=function(){if(0==this.f){this.f=1;this.g=[Q(this.a,"error",this.j,this,!0),Q(this.a,"load",this.s,this,!0)];try{this.a.src=this.o}catch(b){this.j()}}};function Wg(){this.a={};this.b=0}aa(Wg);Wg.prototype.clear=function(){this.a={};this.b=0};Wg.prototype.get=function(b,c,d){b=c+":"+b+":"+(d?vd(d):"null");return b in this.a?this.a[b]:null};Wg.prototype.set=function(b,c,d,e){this.a[c+":"+b+":"+(d?vd(d):"null")]=e;++this.b};function Zg(b,c){this.h=c;this.f={};this.A={}}M(Zg,ib);function $g(b){var c=b.viewState,d=b.coordinateToPixelMatrix;Ig(d,b.size[0]/2,b.size[1]/2,1/c.resolution,-1/c.resolution,-c.rotation,-c.center[0],-c.center[1]);Eb(d,b.pixelToCoordinateMatrix)}p=Zg.prototype;p.J=function(){for(var b in this.f)jb(this.f[b])};function ah(){var b=Wg.ua();if(32<b.b){var c=0,d,e;for(d in b.a)e=b.a[d],0!==(c++&3)||nb(e)||(delete b.a[d],--b.b)}}
+p.Wb=function(b,c,d,e,f,g){function h(b,f){var g=I(b).toString(),h=c.layerStates[I(f)].eb;if(!(g in c.skippedFeatureUids)||h)return d.call(e,b,h?f:null)}var k,l=c.viewState,m=l.resolution,n=l.projection,l=b;if(n.a){var n=n.C(),q=Vb(n),r=b[0];if(r<n[0]||r>n[2])l=[r+q*Math.ceil((n[0]-r)/q),b[1]]}n=c.layerStatesArray;for(q=n.length-1;0<=q;--q){var u=n[q],r=u.layer;if(Hg(u,m)&&f.call(g,r)&&(u=bh(this,r),r.V()&&(k=u.fb(r.V().j?l:b,c,h,e)),k))return k}};
+p.Jc=function(b,c,d,e){return void 0!==this.Wb(b,c,cc,this,d,e)};function bh(b,c){var d=I(c).toString();if(d in b.f)return b.f[d];var e=b.Jb(c);b.f[d]=e;b.A[d]=Q(e,"change",b.Dd,b);return e}p.Dd=function(){this.h.render()};p.sb=pa;p.Be=function(b,c){for(var d in this.f)if(!(c&&d in c.layerStates)){var e=d,f=this.f[e];delete this.f[e];N(this.A[e]);delete this.A[e];jb(f)}};function ch(b,c){for(var d in b.f)if(!(d in c.layerStates)){c.postRenderFunctions.push(b.Be.bind(b));break}}
+function Oa(b,c){return b.zIndex-c.zIndex};function dh(b,c){this.j=b;this.l=c;this.a=[];this.b=[];this.f={}}dh.prototype.clear=function(){this.a.length=0;this.b.length=0;Ya(this.f)};function eh(b){var c=b.a,d=b.b,e=c[0];1==c.length?(c.length=0,d.length=0):(c[0]=c.pop(),d[0]=d.pop(),fh(b,0));c=b.l(e);delete b.f[c];return e}dh.prototype.c=function(b){var c=this.j(b);return Infinity!=c?(this.a.push(b),this.b.push(c),this.f[this.l(b)]=!0,gh(this,0,this.a.length-1),!0):!1};
+function fh(b,c){for(var d=b.a,e=b.b,f=d.length,g=d[c],h=e[c],k=c;c<f>>1;){var l=2*c+1,m=2*c+2,l=m<f&&e[m]<e[l]?m:l;d[c]=d[l];e[c]=e[l];c=l}d[c]=g;e[c]=h;gh(b,k,c)}function gh(b,c,d){var e=b.a;b=b.b;for(var f=e[d],g=b[d];d>c;){var h=d-1>>1;if(b[h]>g)e[d]=e[h],b[d]=b[h],d=h;else break}e[d]=f;b[d]=g}function hh(b){var c=b.j,d=b.a,e=b.b,f=0,g=d.length,h,k,l;for(k=0;k<g;++k)h=d[k],l=c(h),Infinity==l?delete b.f[b.l(h)]:(e[f]=l,d[f++]=h);d.length=f;e.length=f;for(c=(b.a.length>>1)-1;0<=c;c--)fh(b,c)};function ih(b,c){dh.call(this,function(c){return b.apply(null,c)},function(b){return b[0].getKey()});this.A=c;this.h=0;this.g={}}M(ih,dh);ih.prototype.c=function(b){var c=ih.X.c.call(this,b);c&&Q(b[0],"change",this.i,this);return c};ih.prototype.i=function(b){b=b.target;var c=b.N();if(2===c||3===c||4===c||5===c)gb(b,"change",this.i,this),b=b.getKey(),b in this.g&&(delete this.g[b],--this.h),this.A()};function jh(){this.a=[];this.b=this.f=0}function kh(b,c){var d=b.b,e=.05-d,f=Math.log(.05/b.b)/-.005;return cd({source:c,duration:f,easing:function(b){return d*(Math.exp(-.005*b*f)-1)/e}})};function lh(b){T.call(this);this.S=null;this.set("active",!0);this.handleEvent=b.handleEvent}M(lh,T);lh.prototype.setMap=function(b){this.S=b};function mh(b,c,d,e,f){if(void 0!==d){var g=c.Z(),h=c.ia();void 0!==g&&h&&f&&0<f&&(b.fa(dd({rotation:g,duration:f,easing:$c})),e&&b.fa(cd({source:h,duration:f,easing:$c})));c.rotate(d,e)}}function nh(b,c,d,e,f){var g=c.I();d=c.constrainResolution(g,d,0);oh(b,c,d,e,f)}
+function oh(b,c,d,e,f){if(d){var g=c.I(),h=c.ia();void 0!==g&&h&&d!==g&&f&&0<f&&(b.fa(ed({resolution:g,duration:f,easing:$c})),e&&b.fa(cd({source:h,duration:f,easing:$c})));if(e){var k;b=c.ia();f=c.I();void 0!==b&&void 0!==f&&(k=[e[0]-d*(e[0]-b[0])/f,e[1]-d*(e[1]-b[1])/f]);c.oa(k)}Yc(c,d)}};function ph(b){b=b?b:{};this.a=b.delta?b.delta:1;lh.call(this,{handleEvent:qh});this.b=void 0!==b.duration?b.duration:250}M(ph,lh);function qh(b){var c=!1,d=b.originalEvent;if(b.type==tg){var c=b.map,e=b.coordinate,d=d.shiftKey?-this.a:this.a,f=c.O();nh(c,f,d,e,this.b);b.preventDefault();c=!0}return!c};function rh(b){b=b.originalEvent;return b.altKey&&!(b.metaKey||b.ctrlKey)&&b.shiftKey}function sh(b){b=b.originalEvent;return 0==b.button&&!(Jd&&Cf&&b.ctrlKey)}function th(b){b=b.originalEvent;return!b.altKey&&!(b.metaKey||b.ctrlKey)&&!b.shiftKey}function uh(b){b=b.originalEvent;return!b.altKey&&!(b.metaKey||b.ctrlKey)&&b.shiftKey}function vh(b){b=b.originalEvent.target.tagName;return"INPUT"!==b&&"SELECT"!==b&&"TEXTAREA"!==b}function wh(b){return"mouse"==b.a.pointerType};function xh(b){b=b?b:{};lh.call(this,{handleEvent:b.handleEvent?b.handleEvent:yh});this.wb=b.handleDownEvent?b.handleDownEvent:dc;this.xb=b.handleDragEvent?b.handleDragEvent:pa;this.yb=b.handleMoveEvent?b.handleMoveEvent:pa;this.zb=b.handleUpEvent?b.handleUpEvent:dc;this.s=!1;this.G={};this.c=[]}M(xh,lh);function zh(b){for(var c=b.length,d=0,e=0,f=0;f<c;f++)d+=b[f].clientX,e+=b[f].clientY;return[d/c,e/c]}
+function yh(b){if(!(b instanceof pg))return!0;var c=!1,d=b.type;if(d===yg||d===Ag||d===wg)d=b.a,b.type==wg?delete this.G[d.pointerId]:b.type==yg?this.G[d.pointerId]=d:d.pointerId in this.G&&(this.G[d.pointerId]=d),this.c=Za(this.G);this.s&&(b.type==Ag?this.xb(b):b.type==wg&&(this.s=this.zb(b)));b.type==yg?(this.s=b=this.wb(b),c=this.w(b)):b.type==zg&&this.yb(b);return!c}xh.prototype.w=function(b){return b};function Ah(b){xh.call(this,{handleDownEvent:Bh,handleDragEvent:Ch,handleUpEvent:Dh});b=b?b:{};this.a=b.kinetic;this.b=this.g=null;this.i=b.condition?b.condition:th;this.h=!1}M(Ah,xh);function Ch(b){var c=zh(this.c);this.a&&this.a.a.push(c[0],c[1],Date.now());if(this.b){var d=this.b[0]-c[0],e=c[1]-this.b[1];b=b.map;var f=b.O(),g=f.N(),e=d=[d,e],h=g.resolution;e[0]*=h;e[1]*=h;vb(d,g.rotation);ub(d,g.center);d=f.a.center(d);b.render();f.oa(d)}this.b=c}
+function Dh(b){b=b.map;var c=b.O();if(0===this.c.length){var d;if(d=!this.h&&this.a)if(d=this.a,6>d.a.length)d=!1;else{var e=Date.now()-100,f=d.a.length-3;if(d.a[f+2]<e)d=!1;else{for(var g=f-3;0<g&&d.a[g+2]>e;)g-=3;var e=d.a[f+2]-d.a[g+2],h=d.a[f]-d.a[g],f=d.a[f+1]-d.a[g+1];d.f=Math.atan2(f,h);d.b=Math.sqrt(h*h+f*f)/e;d=.05<d.b}}d&&(d=(.05-this.a.b)/-.005,f=this.a.f,g=c.ia(),this.g=kh(this.a,g),b.fa(this.g),g=Eh(b,g),d=b.ta([g[0]-d*Math.cos(f),g[1]-d*Math.sin(f)]),d=c.a.center(d),c.oa(d));Zc(c,-1);
+b.render();return!1}this.b=null;return!0}function Bh(b){if(0<this.c.length&&this.i(b)){var c=b.map,d=c.O();this.b=null;this.s||Zc(d,1);c.render();this.g&&La(c.B,this.g)&&(d.oa(b.frameState.viewState.center),this.g=null);this.a&&(b=this.a,b.a.length=0,b.f=0,b.b=0);this.h=1<this.c.length;return!0}return!1}Ah.prototype.w=dc;function Fh(b){b=b?b:{};xh.call(this,{handleDownEvent:Gh,handleDragEvent:Hh,handleUpEvent:Ih});this.b=b.condition?b.condition:rh;this.a=void 0;this.g=void 0!==b.duration?b.duration:250}M(Fh,xh);function Hh(b){if(wh(b)){var c=b.map,d=c.Pa();b=b.pixel;d=Math.atan2(d[1]/2-b[1],b[0]-d[0]/2);if(void 0!==this.a){b=d-this.a;var e=c.O(),f=e.Z();c.render();mh(c,e,f-b)}this.a=d}}
+function Ih(b){if(!wh(b))return!0;b=b.map;var c=b.O();Zc(c,-1);var d=c.Z(),e=this.g,d=c.constrainRotation(d,0);mh(b,c,d,void 0,e);return!1}function Gh(b){return wh(b)&&sh(b)&&this.b(b)?(b=b.map,Zc(b.O(),1),b.render(),this.a=void 0,!0):!1}Fh.prototype.w=dc;function Jh(b){this.c=null;this.b=document.createElement("div");this.b.style.position="absolute";this.b.className="ol-box "+b;this.f=this.g=this.a=null}M(Jh,ib);Jh.prototype.J=function(){this.setMap(null)};function Kh(b){var c=b.g,d=b.f;b=b.b.style;b.left=Math.min(c[0],d[0])+"px";b.top=Math.min(c[1],d[1])+"px";b.width=Math.abs(d[0]-c[0])+"px";b.height=Math.abs(d[1]-c[1])+"px"}
+Jh.prototype.setMap=function(b){if(this.a){this.a.o.removeChild(this.b);var c=this.b.style;c.left=c.top=c.width=c.height="inherit"}(this.a=b)&&this.a.o.appendChild(this.b)};function Lh(b){var c=b.g,d=b.f,c=[c,[c[0],d[1]],d,[d[0],c[1]]].map(b.a.ta,b.a);c[4]=c[0].slice();b.c?b.c.W([c]):b.c=new Tc([c])}Jh.prototype.M=function(){return this.c};function Mh(b,c,d){R.call(this,b);this.coordinate=c;this.mapBrowserEvent=d}M(Mh,R);function Nh(b){xh.call(this,{handleDownEvent:Oh,handleDragEvent:Ph,handleUpEvent:Qh});b=b?b:{};this.a=new Jh(b.className||"ol-dragbox");this.b=null;this.j=b.condition?b.condition:cc;this.i=b.boxEndCondition?b.boxEndCondition:Rh}M(Nh,xh);function Rh(b,c,d){b=d[0]-c[0];c=d[1]-c[1];return 64<=b*b+c*c}
+function Ph(b){if(wh(b)){var c=this.a,d=b.pixel;c.g=this.b;c.f=d;Lh(c);Kh(c);S(this,new Mh("boxdrag",b.coordinate,b))}}Nh.prototype.M=function(){return this.a.M()};Nh.prototype.h=pa;function Qh(b){if(!wh(b))return!0;this.a.setMap(null);this.i(b,this.b,b.pixel)&&(this.h(b),S(this,new Mh("boxend",b.coordinate,b)));return!1}
+function Oh(b){if(wh(b)&&sh(b)&&this.j(b)){this.b=b.pixel;this.a.setMap(b.map);var c=this.a,d=this.b;c.g=this.b;c.f=d;Lh(c);Kh(c);S(this,new Mh("boxstart",b.coordinate,b));return!0}return!1};function Sh(b){b=b?b:{};var c=b.condition?b.condition:uh;this.g=void 0!==b.duration?b.duration:200;this.o=void 0!==b.out?b.out:!1;Nh.call(this,{condition:c,className:b.className||"ol-dragzoom"})}M(Sh,Nh);
+Sh.prototype.h=function(){var b=this.S,c=b.O(),d=b.Pa(),e=this.M().C();if(this.o){var f=c.jc(d),e=[Eh(b,Xb(e)),Eh(b,[e[2],e[3]])],g=Pb(void 0),h,k;h=0;for(k=e.length;h<k;++h)Kb(g,e[h]);g=1/Xc(g,d);e=(f[2]-f[0])/2*(g-1);g=(f[3]-f[1])/2*(g-1);f[0]-=e;f[2]+=e;f[1]-=g;f[3]+=g;e=f}d=c.constrainResolution(Xc(e,d));f=c.I();g=c.ia();b.fa(ed({resolution:f,duration:this.g,easing:$c}));b.fa(cd({source:g,duration:this.g,easing:$c}));c.oa(Yb(e));Yc(c,d)};function Th(b){lh.call(this,{handleEvent:Uh});b=b||{};this.a=function(b){return th.call(this,b)&&vh.call(this,b)};this.b=void 0!==b.condition?b.condition:this.a;this.c=void 0!==b.duration?b.duration:100;this.g=void 0!==b.pixelDelta?b.pixelDelta:128}M(Th,lh);
+function Uh(b){var c=!1;if("keydown"==b.type){var d=b.originalEvent.keyCode;if(this.b(b)&&(40==d||37==d||39==d||38==d)){var e=b.map,c=e.O(),f=c.I()*this.g,g=0,h=0;40==d?h=-f:37==d?g=-f:39==d?g=f:h=f;d=[g,h];vb(d,c.Z());f=this.c;if(g=c.ia())f&&0<f&&e.fa(cd({source:g,duration:f,easing:bd})),e=c.a.center([g[0]+d[0],g[1]+d[1]]),c.oa(e);b.preventDefault();c=!0}}return!c};function Vh(b){lh.call(this,{handleEvent:Wh});b=b?b:{};this.b=b.condition?b.condition:vh;this.a=b.delta?b.delta:1;this.c=void 0!==b.duration?b.duration:100}M(Vh,lh);function Wh(b){var c=!1;if("keydown"==b.type||"keypress"==b.type){var d=b.originalEvent.charCode;if(this.b(b)&&(43==d||45==d)){c=b.map;d=43==d?this.a:-this.a;c.render();var e=c.O();nh(c,e,d,void 0,this.c);b.preventDefault();c=!0}}return!c};function Xh(b){lh.call(this,{handleEvent:Yh});b=b||{};this.a=0;this.i=void 0!==b.duration?b.duration:250;this.j=void 0!==b.useAnchor?b.useAnchor:!0;this.c=null;this.g=this.b=void 0}M(Xh,lh);
+function Yh(b){var c=!1;if("wheel"==b.type||"mousewheel"==b.type){var c=b.map,d=b.originalEvent;this.j&&(this.c=b.coordinate);var e;"wheel"==b.type?(e=d.deltaY,Af&&d.deltaMode===x.WheelEvent.DOM_DELTA_PIXEL&&(e/=Df),d.deltaMode===x.WheelEvent.DOM_DELTA_LINE&&(e*=40)):"mousewheel"==b.type&&(e=-d.wheelDeltaY,Bf&&(e/=3));this.a+=e;void 0===this.b&&(this.b=Date.now());e=Math.max(80-(Date.now()-this.b),0);x.clearTimeout(this.g);this.g=x.setTimeout(this.h.bind(this,c),e);b.preventDefault();c=!0}return!c}
+Xh.prototype.h=function(b){var c=Ca(this.a,-1,1),d=b.O();b.render();nh(b,d,-c,this.c,this.i);this.a=0;this.c=null;this.g=this.b=void 0};function Zh(b){xh.call(this,{handleDownEvent:$h,handleDragEvent:ai,handleUpEvent:bi});b=b||{};this.b=null;this.g=void 0;this.a=!1;this.h=0;this.j=void 0!==b.threshold?b.threshold:.3;this.i=void 0!==b.duration?b.duration:250}M(Zh,xh);
+function ai(b){var c=0,d=this.c[0],e=this.c[1],d=Math.atan2(e.clientY-d.clientY,e.clientX-d.clientX);void 0!==this.g&&(c=d-this.g,this.h+=c,!this.a&&Math.abs(this.h)>this.j&&(this.a=!0));this.g=d;b=b.map;d=b.a.getBoundingClientRect();e=zh(this.c);e[0]-=d.left;e[1]-=d.top;this.b=b.ta(e);this.a&&(d=b.O(),e=d.Z(),b.render(),mh(b,d,e+c,this.b))}
+function bi(b){if(2>this.c.length){b=b.map;var c=b.O();Zc(c,-1);if(this.a){var d=c.Z(),e=this.b,f=this.i,d=c.constrainRotation(d,0);mh(b,c,d,e,f)}return!1}return!0}function $h(b){return 2<=this.c.length?(b=b.map,this.b=null,this.g=void 0,this.a=!1,this.h=0,this.s||Zc(b.O(),1),b.render(),!0):!1}Zh.prototype.w=dc;function ci(b){xh.call(this,{handleDownEvent:di,handleDragEvent:ei,handleUpEvent:fi});b=b?b:{};this.b=null;this.h=void 0!==b.duration?b.duration:400;this.a=void 0;this.g=1}M(ci,xh);function ei(b){var c=1,d=this.c[0],e=this.c[1],f=d.clientX-e.clientX,d=d.clientY-e.clientY,f=Math.sqrt(f*f+d*d);void 0!==this.a&&(c=this.a/f);this.a=f;1!=c&&(this.g=c);b=b.map;var f=b.O(),d=f.I(),e=b.a.getBoundingClientRect(),g=zh(this.c);g[0]-=e.left;g[1]-=e.top;this.b=b.ta(g);b.render();oh(b,f,d*c,this.b)}
+function fi(b){if(2>this.c.length){b=b.map;var c=b.O();Zc(c,-1);var d=c.I(),e=this.b,f=this.h,d=c.constrainResolution(d,0,this.g-1);oh(b,c,d,e,f);return!1}return!0}function di(b){return 2<=this.c.length?(b=b.map,this.b=null,this.a=void 0,this.g=1,this.s||Zc(b.O(),1),b.render(),!0):!1}ci.prototype.w=dc;function gi(b){var c=b||{};b=Wa({},c);delete b.layers;c=c.layers;Cg.call(this,b);this.b=[];this.a={};Q(this,rb("layers"),this.Fd,this);c?Array.isArray(c)&&(c=new ld(c.slice())):c=new ld;this.set("layers",c)}M(gi,Cg);p=gi.prototype;p.ob=function(){this.cb()&&this.v()};
+p.Fd=function(){this.b.forEach(N);this.b.length=0;var b=this.get("layers");this.b.push(Q(b,"add",this.Ed,this),Q(b,"remove",this.Gd,this));for(var c in this.a)this.a[c].forEach(N);Ya(this.a);var b=b.a,d,e;c=0;for(d=b.length;c<d;c++)e=b[c],this.a[I(e).toString()]=[Q(e,"propertychange",this.ob,this),Q(e,"change",this.ob,this)];this.v()};p.Ed=function(b){b=b.element;var c=I(b).toString();this.a[c]=[Q(b,"propertychange",this.ob,this),Q(b,"change",this.ob,this)];this.v()};
+p.Gd=function(b){b=I(b.element).toString();this.a[b].forEach(N);delete this.a[b];this.v()};p.Lb=function(b){var c=void 0!==b?b:[],d=c.length;nd(this.get("layers"),function(b){b.Lb(c)});b=Dg(this);var e,f;for(e=c.length;d<e;d++)f=c[d],f.opacity*=b.opacity,f.visible=f.visible&&b.visible,f.maxResolution=Math.min(f.maxResolution,b.maxResolution),f.minResolution=Math.max(f.minResolution,b.minResolution),void 0!==b.extent&&(f.extent=void 0!==f.extent?$b(f.extent,b.extent):b.extent);return c};p.Pb=function(){return"ready"};function hi(b){ic.call(this,{code:b,units:"m",extent:ii,global:!0,worldExtent:ji})}M(hi,ic);hi.prototype.getPointResolution=function(b,c){return b/Da(c[1]/6378137)};var ki=6378137*Math.PI,ii=[-ki,-ki,ki,ki],ji=[-180,-85,180,85],li="EPSG:3857 EPSG:102100 EPSG:102113 EPSG:900913 urn:ogc:def:crs:EPSG:6.18:3:3857 urn:ogc:def:crs:EPSG::3857 http://www.opengis.net/gml/srs/epsg.xml#3857".split(" ").map(function(b){return new hi(b)});
+function mi(b,c,d){var e=b.length;d=1<d?d:2;void 0===c&&(2<d?c=b.slice():c=Array(e));for(var f=0;f<e;f+=d)c[f]=6378137*Math.PI*b[f]/180,c[f+1]=6378137*Math.log(Math.tan(Math.PI*(b[f+1]+90)/360));return c}function ni(b,c,d){var e=b.length;d=1<d?d:2;void 0===c&&(2<d?c=b.slice():c=Array(e));for(var f=0;f<e;f+=d)c[f]=180*b[f]/(6378137*Math.PI),c[f+1]=360*Math.atan(Math.exp(b[f+1]/6378137))/Math.PI-90;return c};var oi=new ec(6378137);function pi(b,c){ic.call(this,{code:b,units:"degrees",extent:qi,axisOrientation:c,global:!0,metersPerUnit:ri,worldExtent:qi})}M(pi,ic);pi.prototype.getPointResolution=function(b){return b};
+var qi=[-180,-90,180,90],ri=Math.PI*oi.radius/180,si=[new pi("CRS:84"),new pi("EPSG:4326","neu"),new pi("urn:ogc:def:crs:EPSG::4326","neu"),new pi("urn:ogc:def:crs:EPSG:6.6:4326","neu"),new pi("urn:ogc:def:crs:OGC:1.3:CRS84"),new pi("urn:ogc:def:crs:OGC:2:84"),new pi("http://www.opengis.net/gml/srs/epsg.xml#4326","neu"),new pi("urn:x-ogc:def:crs:EPSG:4326","neu")];function X(b){b=b?b:{};var c=Wa({},b);delete c.preload;delete c.useInterimTilesOnError;Gg.call(this,c);this.set("preload",void 0!==b.preload?b.preload:0);this.set("useInterimTilesOnError",void 0!==b.useInterimTilesOnError?b.useInterimTilesOnError:!0)}M(X,Gg);function ti(b){return b.get("useInterimTilesOnError")};var ui=[0,0,0,1],vi=[],wi=[0,0,0,1];function xi(b,c,d,e){0!==c&&(b.translate(d,e),b.rotate(c),b.translate(-d,-e))};function yi(b){b=b||{};this.a=void 0!==b.color?b.color:null;this.b=void 0}yi.prototype.ga=function(){return this.a};function zi(){this.b=-1};function Ai(){this.b=-1;this.b=64;this.a=Array(4);this.g=Array(this.b);this.c=this.f=0;this.a[0]=1732584193;this.a[1]=4023233417;this.a[2]=2562383102;this.a[3]=271733878;this.c=this.f=0}M(Ai,zi);
+function Bi(b,c,d){d||(d=0);var e=Array(16);if(da(c))for(var f=0;16>f;++f)e[f]=c.charCodeAt(d++)|c.charCodeAt(d++)<<8|c.charCodeAt(d++)<<16|c.charCodeAt(d++)<<24;else for(f=0;16>f;++f)e[f]=c[d++]|c[d++]<<8|c[d++]<<16|c[d++]<<24;c=b.a[0];d=b.a[1];var f=b.a[2],g=b.a[3],h=0,h=c+(g^d&(f^g))+e[0]+3614090360&4294967295;c=d+(h<<7&4294967295|h>>>25);h=g+(f^c&(d^f))+e[1]+3905402710&4294967295;g=c+(h<<12&4294967295|h>>>20);h=f+(d^g&(c^d))+e[2]+606105819&4294967295;f=g+(h<<17&4294967295|h>>>15);h=d+(c^f&(g^
 c))+e[3]+3250441966&4294967295;d=f+(h<<22&4294967295|h>>>10);h=c+(g^d&(f^g))+e[4]+4118548399&4294967295;c=d+(h<<7&4294967295|h>>>25);h=g+(f^c&(d^f))+e[5]+1200080426&4294967295;g=c+(h<<12&4294967295|h>>>20);h=f+(d^g&(c^d))+e[6]+2821735955&4294967295;f=g+(h<<17&4294967295|h>>>15);h=d+(c^f&(g^c))+e[7]+4249261313&4294967295;d=f+(h<<22&4294967295|h>>>10);h=c+(g^d&(f^g))+e[8]+1770035416&4294967295;c=d+(h<<7&4294967295|h>>>25);h=g+(f^c&(d^f))+e[9]+2336552879&4294967295;g=c+(h<<12&4294967295|h>>>20);h=f+
 (d^g&(c^d))+e[10]+4294925233&4294967295;f=g+(h<<17&4294967295|h>>>15);h=d+(c^f&(g^c))+e[11]+2304563134&4294967295;d=f+(h<<22&4294967295|h>>>10);h=c+(g^d&(f^g))+e[12]+1804603682&4294967295;c=d+(h<<7&4294967295|h>>>25);h=g+(f^c&(d^f))+e[13]+4254626195&4294967295;g=c+(h<<12&4294967295|h>>>20);h=f+(d^g&(c^d))+e[14]+2792965006&4294967295;f=g+(h<<17&4294967295|h>>>15);h=d+(c^f&(g^c))+e[15]+1236535329&4294967295;d=f+(h<<22&4294967295|h>>>10);h=c+(f^g&(d^f))+e[1]+4129170786&4294967295;c=d+(h<<5&4294967295|
 h>>>27);h=g+(d^f&(c^d))+e[6]+3225465664&4294967295;g=c+(h<<9&4294967295|h>>>23);h=f+(c^d&(g^c))+e[11]+643717713&4294967295;f=g+(h<<14&4294967295|h>>>18);h=d+(g^c&(f^g))+e[0]+3921069994&4294967295;d=f+(h<<20&4294967295|h>>>12);h=c+(f^g&(d^f))+e[5]+3593408605&4294967295;c=d+(h<<5&4294967295|h>>>27);h=g+(d^f&(c^d))+e[10]+38016083&4294967295;g=c+(h<<9&4294967295|h>>>23);h=f+(c^d&(g^c))+e[15]+3634488961&4294967295;f=g+(h<<14&4294967295|h>>>18);h=d+(g^c&(f^g))+e[4]+3889429448&4294967295;d=f+(h<<20&4294967295|
@@ -159,238 +163,238 @@ c^d)+e[7]+4139469664&4294967295;f=g+(h<<16&4294967295|h>>>16);h=d+(f^g^c)+e[10]+
 g=c+(h<<11&4294967295|h>>>21);h=f+(g^c^d)+e[15]+530742520&4294967295;f=g+(h<<16&4294967295|h>>>16);h=d+(f^g^c)+e[2]+3299628645&4294967295;d=f+(h<<23&4294967295|h>>>9);h=c+(f^(d|~g))+e[0]+4096336452&4294967295;c=d+(h<<6&4294967295|h>>>26);h=g+(d^(c|~f))+e[7]+1126891415&4294967295;g=c+(h<<10&4294967295|h>>>22);h=f+(c^(g|~d))+e[14]+2878612391&4294967295;f=g+(h<<15&4294967295|h>>>17);h=d+(g^(f|~c))+e[5]+4237533241&4294967295;d=f+(h<<21&4294967295|h>>>11);h=c+(f^(d|~g))+e[12]+1700485571&4294967295;c=d+
 (h<<6&4294967295|h>>>26);h=g+(d^(c|~f))+e[3]+2399980690&4294967295;g=c+(h<<10&4294967295|h>>>22);h=f+(c^(g|~d))+e[10]+4293915773&4294967295;f=g+(h<<15&4294967295|h>>>17);h=d+(g^(f|~c))+e[1]+2240044497&4294967295;d=f+(h<<21&4294967295|h>>>11);h=c+(f^(d|~g))+e[8]+1873313359&4294967295;c=d+(h<<6&4294967295|h>>>26);h=g+(d^(c|~f))+e[15]+4264355552&4294967295;g=c+(h<<10&4294967295|h>>>22);h=f+(c^(g|~d))+e[6]+2734768916&4294967295;f=g+(h<<15&4294967295|h>>>17);h=d+(g^(f|~c))+e[13]+1309151649&4294967295;
 d=f+(h<<21&4294967295|h>>>11);h=c+(f^(d|~g))+e[4]+4149444226&4294967295;c=d+(h<<6&4294967295|h>>>26);h=g+(d^(c|~f))+e[11]+3174756917&4294967295;g=c+(h<<10&4294967295|h>>>22);h=f+(c^(g|~d))+e[2]+718787259&4294967295;f=g+(h<<15&4294967295|h>>>17);h=d+(g^(f|~c))+e[9]+3951481745&4294967295;b.a[0]=b.a[0]+c&4294967295;b.a[1]=b.a[1]+(f+(h<<21&4294967295|h>>>11))&4294967295;b.a[2]=b.a[2]+f&4294967295;b.a[3]=b.a[3]+g&4294967295}
-function wi(b,c){var d;void 0===d&&(d=c.length);for(var e=d-b.b,f=b.g,g=b.f,h=0;h<d;){if(0==g)for(;h<=e;)vi(b,c,h),h+=b.b;if(da(c))for(;h<d;){if(f[g++]=c.charCodeAt(h++),g==b.b){vi(b,f);g=0;break}}else for(;h<d;)if(f[g++]=c[h++],g==b.b){vi(b,f);g=0;break}}b.f=g;b.c+=d};function xi(b){b=b||{};this.f=void 0!==b.color?b.color:null;this.Da=b.lineCap;this.a=void 0!==b.lineDash?b.lineDash:null;this.Ea=b.lineJoin;this.Fa=b.miterLimit;this.c=b.width;this.b=void 0}xi.prototype.ga=function(){return this.f};xi.prototype.getLineDash=function(){return this.a};xi.prototype.ha=function(){return this.c};function yi(b){b=b||{};this.h=this.a=this.g=null;this.f=void 0!==b.fill?b.fill:null;this.b=void 0!==b.stroke?b.stroke:null;this.c=b.radius;this.o=[0,0];this.j=this.s=this.A=null;var c=b.atlasManager,d,e=null,f,g=0;this.b&&(f=vd(this.b.ga()),g=this.b.ha(),void 0===g&&(g=1),e=this.b.getLineDash(),yf||(e=null));var h=2*(this.c+g)+1;f={strokeStyle:f,Wc:g,size:h,lineDash:e};if(void 0===c)this.a=document.createElement("CANVAS"),this.a.height=h,this.a.width=h,d=h=this.a.width,c=this.a.getContext("2d"),this.tc(f,
-c,0,0),this.f?this.h=this.a:(c=this.h=document.createElement("CANVAS"),c.height=f.size,c.width=f.size,c=c.getContext("2d"),this.oc(f,c,0,0));else{h=Math.round(h);(e=!this.f)&&(d=this.oc.bind(this,f));if(this.b){g=this.b;if(void 0===g.b){var k="s"+(g.f?vd(g.f):"-")+","+(void 0!==g.Da?g.Da.toString():"-")+","+(g.a?g.a.toString():"-")+","+(void 0!==g.Ea?g.Ea:"-")+","+(void 0!==g.Fa?g.Fa.toString():"-")+","+(void 0!==g.c?g.c.toString():"-"),l=new ui;wi(l,k);var m=Array((56>l.f?l.b:2*l.b)-l.f);m[0]=128;
-for(k=1;k<m.length-8;++k)m[k]=0;for(var n=8*l.c,k=m.length-8;k<m.length;++k)m[k]=n&255,n/=256;wi(l,m);m=Array(16);for(k=n=0;4>k;++k)for(var q=0;32>q;q+=8)m[n++]=l.a[k]>>>q&255;if(8192>=m.length)l=String.fromCharCode.apply(null,m);else for(l="",k=0;k<m.length;k+=8192)l+=String.fromCharCode.apply(null,rd(m,k,k+8192));g.b=l}g=g.b}else g="-";this.f?(l=this.f,void 0===l.b&&(l.b=l.a instanceof CanvasPattern||l.a instanceof CanvasGradient?I(l.a).toString():"f"+(l.a?vd(l.a):"-")),l=l.b):l="-";this.g&&g==
-this.g[1]&&l==this.g[2]&&this.c==this.g[3]||(this.g=["c"+g+l+(void 0!==this.c?this.c.toString():"-"),g,l,this.c]);f=c.add(this.g[0],h,h,this.tc.bind(this,f),d);this.a=f.image;this.o=[f.offsetX,f.offsetY];d=f.image.width;e?this.h=f.Xe:this.h=this.a}this.A=[h/2,h/2];this.s=[h,h];this.j=[d,d];Og.call(this,{opacity:1,rotateWithView:!1,rotation:0,scale:1,snapToPixel:void 0!==b.snapToPixel?b.snapToPixel:!0})}M(yi,Og);p=yi.prototype;p.jb=function(){return this.A};p.Ka=function(){return this.f};p.Wb=function(){return this.h};
-p.T=function(){return this.a};p.rb=function(){return 2};p.wc=function(){return this.j};p.ka=function(){return this.o};p.Pa=function(){return this.s};p.va=function(){return this.b};p.Bc=pa;p.load=pa;p.Xc=pa;p.tc=function(b,c,d,e){c.setTransform(1,0,0,1,0,0);c.translate(d,e);c.beginPath();c.arc(b.size/2,b.size/2,this.c,0,2*Math.PI,!0);this.f&&(c.fillStyle=yd(this.f.ga()),c.fill());this.b&&(c.strokeStyle=b.strokeStyle,c.lineWidth=b.Wc,b.lineDash&&c.setLineDash(b.lineDash),c.stroke());c.closePath()};
-p.oc=function(b,c,d,e){c.setTransform(1,0,0,1,0,0);c.translate(d,e);c.beginPath();c.arc(b.size/2,b.size/2,this.c,0,2*Math.PI,!0);c.fillStyle=vd(oi);c.fill();this.b&&(c.strokeStyle=b.strokeStyle,c.lineWidth=b.Wc,b.lineDash&&c.setLineDash(b.lineDash),c.stroke());c.closePath()};function zi(b){b=b||{};this.f=null;this.b=Ai;void 0!==b.geometry&&Bi(this,b.geometry);this.c=void 0!==b.fill?b.fill:null;this.g=void 0!==b.image?b.image:null;this.h=void 0!==b.stroke?b.stroke:null;this.sa=void 0!==b.text?b.text:null;this.a=b.zIndex}zi.prototype.M=function(){return this.f};zi.prototype.Ka=function(){return this.c};zi.prototype.T=function(){return this.g};zi.prototype.va=function(){return this.h};
-function Bi(b,c){ga(c)?b.b=c:"string"===typeof c?b.b=function(b){return b.get(c)}:c?void 0!==c&&(b.b=function(){return c}):b.b=Ai;b.f=c}function Ci(b){if(!ga(b)){var c;c=Array.isArray(b)?b:[b];b=function(){return c}}return b}var Di=null;function Ei(){if(!Di){var b=new si({color:"rgba(255,255,255,0.4)"}),c=new xi({color:"#3399CC",width:1.25});Di=[new zi({image:new yi({fill:b,stroke:c,radius:5}),fill:b,stroke:c})]}return Di}
-function Fi(){var b={},c=[255,255,255,1],d=[0,153,255,1];b.Polygon=[new zi({fill:new si({color:[255,255,255,.5]})})];b.MultiPolygon=b.Polygon;b.LineString=[new zi({stroke:new xi({color:c,width:5})}),new zi({stroke:new xi({color:d,width:3})})];b.MultiLineString=b.LineString;b.Circle=b.Polygon.concat(b.LineString);b.Point=[new zi({image:new yi({radius:6,fill:new si({color:d}),stroke:new xi({color:c,width:1.5})}),zIndex:Infinity})];b.MultiPoint=b.Point;b.GeometryCollection=b.Polygon.concat(b.LineString,
-b.Point);return b}function Ai(b){return b.M()};function Y(b){b=b?b:{};var c=Wa({},b);delete c.style;delete c.renderBuffer;delete c.updateWhileAnimating;delete c.updateWhileInteracting;Ag.call(this,c);this.a=void 0!==b.renderBuffer?b.renderBuffer:100;this.o=null;this.g=void 0;this.s(b.style);this.i=void 0!==b.updateWhileAnimating?b.updateWhileAnimating:!1;this.j=void 0!==b.updateWhileInteracting?b.updateWhileInteracting:!1}M(Y,Ag);Y.prototype.s=function(b){this.o=void 0!==b?b:Ei;this.g=null===b?void 0:Ci(this.o);this.v()};function Gi(b,c,d,e,f){this.c=b;this.u=c;this.l=d;this.w=e;this.Ja=f;this.g=this.a=this.b=this.X=this.ba=this.S=null;this.aa=this.ja=this.o=this.D=this.K=this.B=0;this.ea=!1;this.h=this.na=0;this.za=!1;this.G=0;this.f="";this.j=this.H=this.Aa=this.pa=0;this.P=this.A=this.i=null;this.s=[];this.Ba=zb()}M(Gi,yg);
-function Hi(b,c,d){if(b.g){c=Ac(c,0,d,2,b.w,b.s);d=b.c;var e=b.Ba,f=d.globalAlpha;1!=b.o&&(d.globalAlpha=f*b.o);var g=b.na;b.ea&&(g+=b.Ja);var h,k;h=0;for(k=c.length;h<k;h+=2){var l=c[h]-b.B,m=c[h+1]-b.K;b.za&&(l=Math.round(l),m=Math.round(m));if(0!==g||1!=b.h){var n=l+b.B,q=m+b.K;Cg(e,n,q,b.h,b.h,g,-n,-q);d.setTransform(e[0],e[1],e[4],e[5],e[12],e[13])}d.drawImage(b.g,b.ja,b.aa,b.G,b.D,l,m,b.G,b.D)}0===g&&1==b.h||d.setTransform(1,0,0,1,0,0);1!=b.o&&(d.globalAlpha=f)}}
-function Ii(b,c,d,e){var f=0;if(b.P&&""!==b.f){b.i&&Ji(b,b.i);b.A&&Ki(b,b.A);var g=b.P,h=b.c,k=b.X;k?(k.font!=g.font&&(k.font=h.font=g.font),k.textAlign!=g.textAlign&&(k.textAlign=h.textAlign=g.textAlign),k.textBaseline!=g.textBaseline&&(k.textBaseline=h.textBaseline=g.textBaseline)):(h.font=g.font,h.textAlign=g.textAlign,h.textBaseline=g.textBaseline,b.X={font:g.font,textAlign:g.textAlign,textBaseline:g.textBaseline});c=Ac(c,f,d,e,b.w,b.s);for(g=b.c;f<d;f+=e){h=c[f]+b.pa;k=c[f+1]+b.Aa;if(0!==b.H||
-1!=b.j){var l=Cg(b.Ba,h,k,b.j,b.j,b.H,-h,-k);g.setTransform(l[0],l[1],l[4],l[5],l[12],l[13])}b.A&&g.strokeText(b.f,h,k);b.i&&g.fillText(b.f,h,k)}0===b.H&&1==b.j||g.setTransform(1,0,0,1,0,0)}}function Li(b,c,d,e,f,g){var h=b.c;b=Ac(c,d,e,f,b.w,b.s);h.moveTo(b[0],b[1]);c=b.length;g&&(c-=2);for(d=2;d<c;d+=2)h.lineTo(b[d],b[d+1]);g&&h.closePath();return e}function Mi(b,c,d,e,f){var g,h;g=0;for(h=e.length;g<h;++g)d=Li(b,c,d,e[g],f,!0);return d}p=Gi.prototype;
-p.nc=function(b){if(ac(this.l,b.C())){if(this.b||this.a){this.b&&Ji(this,this.b);this.a&&Ki(this,this.a);var c;c=this.w;var d=this.s,e=b.a;c=e?Ac(e,0,e.length,b.b,c,d):null;d=c[2]-c[0];e=c[3]-c[1];d=Math.sqrt(d*d+e*e);e=this.c;e.beginPath();e.arc(c[0],c[1],d,0,2*Math.PI);this.b&&e.fill();this.a&&e.stroke()}""!==this.f&&Ii(this,b.a.slice(0,b.b),2,2)}};p.Za=function(b){var c=b.a;b=b.b;this.g&&Hi(this,c,c.length);""!==this.f&&Ii(this,c,c.length,b)};
-p.Ya=function(b){var c=b.a;b=b.b;this.g&&Hi(this,c,c.length);""!==this.f&&Ii(this,c,c.length,b)};p.pc=function(b){if(ac(this.l,b.C())){if(this.a){Ki(this,this.a);var c=this.c,d=b.a;c.beginPath();Li(this,d,0,d.length,b.b,!1);c.stroke()}""!==this.f&&(b=Ni(b),Ii(this,b,2,2))}};
-p.qc=function(b){var c=b.C();if(ac(this.l,c)){if(this.a){Ki(this,this.a);var c=this.c,d=b.a,e=0,f=b.$a(),g=b.b;c.beginPath();var h,k;h=0;for(k=f.length;h<k;++h)e=Li(this,d,e,f[h],g,!1);c.stroke()}""!==this.f&&(b=Oi(b),Ii(this,b,b.length,2))}};p.sc=function(b){if(ac(this.l,b.C())){if(this.a||this.b){this.b&&Ji(this,this.b);this.a&&Ki(this,this.a);var c=this.c;c.beginPath();Mi(this,Vc(b),0,b.$a(),b.b);this.b&&c.fill();this.a&&c.stroke()}""!==this.f&&(b=Wc(b),Ii(this,b,2,2))}};
-p.rc=function(b){if(ac(this.l,b.C())){if(this.a||this.b){this.b&&Ji(this,this.b);this.a&&Ki(this,this.a);var c=this.c,d=Pi(b),e=0,f=b.c,g=b.b,h,k;h=0;for(k=f.length;h<k;++h){var l=f[h];c.beginPath();e=Mi(this,d,e,l,g);this.b&&c.fill();this.a&&c.stroke()}}""!==this.f&&(b=Qi(b),Ii(this,b,b.length,2))}};function Ji(b,c){var d=b.c,e=b.S;e?e.fillStyle!=c.fillStyle&&(e.fillStyle=d.fillStyle=c.fillStyle):(d.fillStyle=c.fillStyle,b.S={fillStyle:c.fillStyle})}
-function Ki(b,c){var d=b.c,e=b.ba;e?(e.lineCap!=c.lineCap&&(e.lineCap=d.lineCap=c.lineCap),yf&&!Ma(e.lineDash,c.lineDash)&&d.setLineDash(e.lineDash=c.lineDash),e.lineJoin!=c.lineJoin&&(e.lineJoin=d.lineJoin=c.lineJoin),e.lineWidth!=c.lineWidth&&(e.lineWidth=d.lineWidth=c.lineWidth),e.miterLimit!=c.miterLimit&&(e.miterLimit=d.miterLimit=c.miterLimit),e.strokeStyle!=c.strokeStyle&&(e.strokeStyle=d.strokeStyle=c.strokeStyle)):(d.lineCap=c.lineCap,yf&&d.setLineDash(c.lineDash),d.lineJoin=c.lineJoin,d.lineWidth=
+function Ci(b,c){var d;void 0===d&&(d=c.length);for(var e=d-b.b,f=b.g,g=b.f,h=0;h<d;){if(0==g)for(;h<=e;)Bi(b,c,h),h+=b.b;if(da(c))for(;h<d;){if(f[g++]=c.charCodeAt(h++),g==b.b){Bi(b,f);g=0;break}}else for(;h<d;)if(f[g++]=c[h++],g==b.b){Bi(b,f);g=0;break}}b.f=g;b.c+=d};function Di(b){b=b||{};this.f=void 0!==b.color?b.color:null;this.Da=b.lineCap;this.a=void 0!==b.lineDash?b.lineDash:null;this.Ea=b.lineJoin;this.Fa=b.miterLimit;this.c=b.width;this.b=void 0}Di.prototype.ga=function(){return this.f};Di.prototype.getLineDash=function(){return this.a};Di.prototype.ha=function(){return this.c};function Ei(b){b=b||{};this.h=this.a=this.g=null;this.f=void 0!==b.fill?b.fill:null;this.b=void 0!==b.stroke?b.stroke:null;this.c=b.radius;this.o=[0,0];this.j=this.s=this.A=null;var c=b.atlasManager,d,e=null,f,g=0;this.b&&(f=vd(this.b.ga()),g=this.b.ha(),void 0===g&&(g=1),e=this.b.getLineDash(),Ef||(e=null));var h=2*(this.c+g)+1;f={strokeStyle:f,Wc:g,size:h,lineDash:e};if(void 0===c)this.a=document.createElement("CANVAS"),this.a.height=h,this.a.width=h,d=h=this.a.width,c=this.a.getContext("2d"),this.tc(f,
+c,0,0),this.f?this.h=this.a:(c=this.h=document.createElement("CANVAS"),c.height=f.size,c.width=f.size,c=c.getContext("2d"),this.oc(f,c,0,0));else{h=Math.round(h);(e=!this.f)&&(d=this.oc.bind(this,f));if(this.b){g=this.b;if(void 0===g.b){var k="s"+(g.f?vd(g.f):"-")+","+(void 0!==g.Da?g.Da.toString():"-")+","+(g.a?g.a.toString():"-")+","+(void 0!==g.Ea?g.Ea:"-")+","+(void 0!==g.Fa?g.Fa.toString():"-")+","+(void 0!==g.c?g.c.toString():"-"),l=new Ai;Ci(l,k);var m=Array((56>l.f?l.b:2*l.b)-l.f);m[0]=128;
+for(k=1;k<m.length-8;++k)m[k]=0;for(var n=8*l.c,k=m.length-8;k<m.length;++k)m[k]=n&255,n/=256;Ci(l,m);m=Array(16);for(k=n=0;4>k;++k)for(var q=0;32>q;q+=8)m[n++]=l.a[k]>>>q&255;if(8192>=m.length)l=String.fromCharCode.apply(null,m);else for(l="",k=0;k<m.length;k+=8192)l+=String.fromCharCode.apply(null,rd(m,k,k+8192));g.b=l}g=g.b}else g="-";this.f?(l=this.f,void 0===l.b&&(l.b=l.a instanceof CanvasPattern||l.a instanceof CanvasGradient?I(l.a).toString():"f"+(l.a?vd(l.a):"-")),l=l.b):l="-";this.g&&g==
+this.g[1]&&l==this.g[2]&&this.c==this.g[3]||(this.g=["c"+g+l+(void 0!==this.c?this.c.toString():"-"),g,l,this.c]);f=c.add(this.g[0],h,h,this.tc.bind(this,f),d);this.a=f.image;this.o=[f.offsetX,f.offsetY];d=f.image.width;e?this.h=f.Ye:this.h=this.a}this.A=[h/2,h/2];this.s=[h,h];this.j=[d,d];Ug.call(this,{opacity:1,rotateWithView:!1,rotation:0,scale:1,snapToPixel:void 0!==b.snapToPixel?b.snapToPixel:!0})}M(Ei,Ug);p=Ei.prototype;p.jb=function(){return this.A};p.Ka=function(){return this.f};p.Xb=function(){return this.h};
+p.T=function(){return this.a};p.rb=function(){return 2};p.wc=function(){return this.j};p.ka=function(){return this.o};p.Qa=function(){return this.s};p.va=function(){return this.b};p.Bc=pa;p.load=pa;p.Xc=pa;p.tc=function(b,c,d,e){c.setTransform(1,0,0,1,0,0);c.translate(d,e);c.beginPath();c.arc(b.size/2,b.size/2,this.c,0,2*Math.PI,!0);this.f&&(c.fillStyle=yd(this.f.ga()),c.fill());this.b&&(c.strokeStyle=b.strokeStyle,c.lineWidth=b.Wc,b.lineDash&&c.setLineDash(b.lineDash),c.stroke());c.closePath()};
+p.oc=function(b,c,d,e){c.setTransform(1,0,0,1,0,0);c.translate(d,e);c.beginPath();c.arc(b.size/2,b.size/2,this.c,0,2*Math.PI,!0);c.fillStyle=vd(ui);c.fill();this.b&&(c.strokeStyle=b.strokeStyle,c.lineWidth=b.Wc,b.lineDash&&c.setLineDash(b.lineDash),c.stroke());c.closePath()};function Fi(b){b=b||{};this.f=null;this.b=Gi;void 0!==b.geometry&&Hi(this,b.geometry);this.c=void 0!==b.fill?b.fill:null;this.g=void 0!==b.image?b.image:null;this.h=void 0!==b.stroke?b.stroke:null;this.sa=void 0!==b.text?b.text:null;this.a=b.zIndex}Fi.prototype.M=function(){return this.f};Fi.prototype.Ka=function(){return this.c};Fi.prototype.T=function(){return this.g};Fi.prototype.va=function(){return this.h};
+function Hi(b,c){ga(c)?b.b=c:"string"===typeof c?b.b=function(b){return b.get(c)}:c?void 0!==c&&(b.b=function(){return c}):b.b=Gi;b.f=c}function Ii(b){if(!ga(b)){var c;c=Array.isArray(b)?b:[b];b=function(){return c}}return b}var Ji=null;function Ki(){if(!Ji){var b=new yi({color:"rgba(255,255,255,0.4)"}),c=new Di({color:"#3399CC",width:1.25});Ji=[new Fi({image:new Ei({fill:b,stroke:c,radius:5}),fill:b,stroke:c})]}return Ji}
+function Li(){var b={},c=[255,255,255,1],d=[0,153,255,1];b.Polygon=[new Fi({fill:new yi({color:[255,255,255,.5]})})];b.MultiPolygon=b.Polygon;b.LineString=[new Fi({stroke:new Di({color:c,width:5})}),new Fi({stroke:new Di({color:d,width:3})})];b.MultiLineString=b.LineString;b.Circle=b.Polygon.concat(b.LineString);b.Point=[new Fi({image:new Ei({radius:6,fill:new yi({color:d}),stroke:new Di({color:c,width:1.5})}),zIndex:Infinity})];b.MultiPoint=b.Point;b.GeometryCollection=b.Polygon.concat(b.LineString,
+b.Point);return b}function Gi(b){return b.M()};function Y(b){b=b?b:{};var c=Wa({},b);delete c.style;delete c.renderBuffer;delete c.updateWhileAnimating;delete c.updateWhileInteracting;Gg.call(this,c);this.a=void 0!==b.renderBuffer?b.renderBuffer:100;this.o=null;this.g=void 0;this.s(b.style);this.i=void 0!==b.updateWhileAnimating?b.updateWhileAnimating:!1;this.j=void 0!==b.updateWhileInteracting?b.updateWhileInteracting:!1}M(Y,Gg);Y.prototype.s=function(b){this.o=void 0!==b?b:Ki;this.g=null===b?void 0:Ii(this.o);this.v()};function Mi(b,c,d,e,f){this.c=b;this.u=c;this.l=d;this.w=e;this.Ja=f;this.g=this.a=this.b=this.Y=this.ba=this.S=null;this.aa=this.ja=this.o=this.D=this.K=this.B=0;this.ea=!1;this.h=this.na=0;this.za=!1;this.G=0;this.f="";this.j=this.H=this.Aa=this.pa=0;this.P=this.A=this.i=null;this.s=[];this.Ba=zb()}M(Mi,Eg);
+function Ni(b,c,d){if(b.g){c=Ac(c,0,d,2,b.w,b.s);d=b.c;var e=b.Ba,f=d.globalAlpha;1!=b.o&&(d.globalAlpha=f*b.o);var g=b.na;b.ea&&(g+=b.Ja);var h,k;h=0;for(k=c.length;h<k;h+=2){var l=c[h]-b.B,m=c[h+1]-b.K;b.za&&(l=Math.round(l),m=Math.round(m));if(0!==g||1!=b.h){var n=l+b.B,q=m+b.K;Ig(e,n,q,b.h,b.h,g,-n,-q);d.setTransform(e[0],e[1],e[4],e[5],e[12],e[13])}d.drawImage(b.g,b.ja,b.aa,b.G,b.D,l,m,b.G,b.D)}0===g&&1==b.h||d.setTransform(1,0,0,1,0,0);1!=b.o&&(d.globalAlpha=f)}}
+function Oi(b,c,d,e){var f=0;if(b.P&&""!==b.f){b.i&&Pi(b,b.i);b.A&&Qi(b,b.A);var g=b.P,h=b.c,k=b.Y;k?(k.font!=g.font&&(k.font=h.font=g.font),k.textAlign!=g.textAlign&&(k.textAlign=h.textAlign=g.textAlign),k.textBaseline!=g.textBaseline&&(k.textBaseline=h.textBaseline=g.textBaseline)):(h.font=g.font,h.textAlign=g.textAlign,h.textBaseline=g.textBaseline,b.Y={font:g.font,textAlign:g.textAlign,textBaseline:g.textBaseline});c=Ac(c,f,d,e,b.w,b.s);for(g=b.c;f<d;f+=e){h=c[f]+b.pa;k=c[f+1]+b.Aa;if(0!==b.H||
+1!=b.j){var l=Ig(b.Ba,h,k,b.j,b.j,b.H,-h,-k);g.setTransform(l[0],l[1],l[4],l[5],l[12],l[13])}b.A&&g.strokeText(b.f,h,k);b.i&&g.fillText(b.f,h,k)}0===b.H&&1==b.j||g.setTransform(1,0,0,1,0,0)}}function Ri(b,c,d,e,f,g){var h=b.c;b=Ac(c,d,e,f,b.w,b.s);h.moveTo(b[0],b[1]);c=b.length;g&&(c-=2);for(d=2;d<c;d+=2)h.lineTo(b[d],b[d+1]);g&&h.closePath();return e}function Si(b,c,d,e,f){var g,h;g=0;for(h=e.length;g<h;++g)d=Ri(b,c,d,e[g],f,!0);return d}p=Mi.prototype;
+p.nc=function(b){if(ac(this.l,b.C())){if(this.b||this.a){this.b&&Pi(this,this.b);this.a&&Qi(this,this.a);var c;c=this.w;var d=this.s,e=b.a;c=e?Ac(e,0,e.length,b.b,c,d):null;d=c[2]-c[0];e=c[3]-c[1];d=Math.sqrt(d*d+e*e);e=this.c;e.beginPath();e.arc(c[0],c[1],d,0,2*Math.PI);this.b&&e.fill();this.a&&e.stroke()}""!==this.f&&Oi(this,b.a.slice(0,b.b),2,2)}};p.$a=function(b){var c=b.a;b=b.b;this.g&&Ni(this,c,c.length);""!==this.f&&Oi(this,c,c.length,b)};
+p.Za=function(b){var c=b.a;b=b.b;this.g&&Ni(this,c,c.length);""!==this.f&&Oi(this,c,c.length,b)};p.pc=function(b){if(ac(this.l,b.C())){if(this.a){Qi(this,this.a);var c=this.c,d=b.a;c.beginPath();Ri(this,d,0,d.length,b.b,!1);c.stroke()}""!==this.f&&(b=Ti(b),Oi(this,b,2,2))}};
+p.qc=function(b){var c=b.C();if(ac(this.l,c)){if(this.a){Qi(this,this.a);var c=this.c,d=b.a,e=0,f=b.ab(),g=b.b;c.beginPath();var h,k;h=0;for(k=f.length;h<k;++h)e=Ri(this,d,e,f[h],g,!1);c.stroke()}""!==this.f&&(b=Ui(b),Oi(this,b,b.length,2))}};p.sc=function(b){if(ac(this.l,b.C())){if(this.a||this.b){this.b&&Pi(this,this.b);this.a&&Qi(this,this.a);var c=this.c;c.beginPath();Si(this,Vc(b),0,b.ab(),b.b);this.b&&c.fill();this.a&&c.stroke()}""!==this.f&&(b=Wc(b),Oi(this,b,2,2))}};
+p.rc=function(b){if(ac(this.l,b.C())){if(this.a||this.b){this.b&&Pi(this,this.b);this.a&&Qi(this,this.a);var c=this.c,d=Vi(b),e=0,f=b.c,g=b.b,h,k;h=0;for(k=f.length;h<k;++h){var l=f[h];c.beginPath();e=Si(this,d,e,l,g);this.b&&c.fill();this.a&&c.stroke()}}""!==this.f&&(b=Wi(b),Oi(this,b,b.length,2))}};function Pi(b,c){var d=b.c,e=b.S;e?e.fillStyle!=c.fillStyle&&(e.fillStyle=d.fillStyle=c.fillStyle):(d.fillStyle=c.fillStyle,b.S={fillStyle:c.fillStyle})}
+function Qi(b,c){var d=b.c,e=b.ba;e?(e.lineCap!=c.lineCap&&(e.lineCap=d.lineCap=c.lineCap),Ef&&!Ma(e.lineDash,c.lineDash)&&d.setLineDash(e.lineDash=c.lineDash),e.lineJoin!=c.lineJoin&&(e.lineJoin=d.lineJoin=c.lineJoin),e.lineWidth!=c.lineWidth&&(e.lineWidth=d.lineWidth=c.lineWidth),e.miterLimit!=c.miterLimit&&(e.miterLimit=d.miterLimit=c.miterLimit),e.strokeStyle!=c.strokeStyle&&(e.strokeStyle=d.strokeStyle=c.strokeStyle)):(d.lineCap=c.lineCap,Ef&&d.setLineDash(c.lineDash),d.lineJoin=c.lineJoin,d.lineWidth=
 c.lineWidth,d.miterLimit=c.miterLimit,d.strokeStyle=c.strokeStyle,b.ba={lineCap:c.lineCap,lineDash:c.lineDash,lineJoin:c.lineJoin,lineWidth:c.lineWidth,miterLimit:c.miterLimit,strokeStyle:c.strokeStyle})}
-p.Ga=function(b,c){if(b){var d=b.ga();this.b={fillStyle:yd(d?d:oi)}}else this.b=null;if(c){var d=c.ga(),e=c.Da,f=c.getLineDash(),g=c.Ea,h=c.ha(),k=c.Fa;this.a={lineCap:void 0!==e?e:"round",lineDash:f?f:pi,lineJoin:void 0!==g?g:"round",lineWidth:this.u*(void 0!==h?h:1),miterLimit:void 0!==k?k:10,strokeStyle:vd(d?d:qi)}}else this.a=null};
-p.Ha=function(b){if(b){var c=b.jb(),d=b.T(1),e=b.ka(),f=b.Pa();this.B=c[0];this.K=c[1];this.D=f[1];this.g=d;this.o=b.l;this.ja=e[0];this.aa=e[1];this.ea=b.i;this.na=b.Y();this.h=b.gb;this.za=b.u;this.G=f[0]}else this.g=null};
-p.xa=function(b){if(b){var c=b.Ka();c?(c=c.ga(),this.i={fillStyle:yd(c?c:oi)}):this.i=null;var d=b.va();if(d){var c=d.ga(),e=d.Da,f=d.getLineDash(),g=d.Ea,h=d.ha(),d=d.Fa;this.A={lineCap:void 0!==e?e:"round",lineDash:f?f:pi,lineJoin:void 0!==g?g:"round",lineWidth:void 0!==h?h:1,miterLimit:void 0!==d?d:10,strokeStyle:vd(c?c:qi)}}else this.A=null;var c=b.pd(),e=b.qd(),f=b.rd(),g=b.Y(),h=b.gb,d=b.sa,k=b.sd();b=b.td();this.P={font:void 0!==c?c:"10px sans-serif",textAlign:void 0!==k?k:"center",textBaseline:void 0!==
-b?b:"middle"};this.f=void 0!==d?d:"";this.pa=void 0!==e?this.u*e:0;this.Aa=void 0!==f?this.u*f:0;this.H=void 0!==g?g:0;this.j=this.u*(void 0!==h?h:1)}else this.f=""};function Ri(b){Fg.call(this,b);this.K=zb()}M(Ri,Fg);
-Ri.prototype.g=function(b,c,d){Si(this,"precompose",d,b,void 0);var e=this.T();if(e){var f=c.extent,g=void 0!==f;if(g){var h=b.pixelRatio,k=b.size[0]*h,l=b.size[1]*h,m=b.viewState.rotation,n=bc(f),q=[f[2],f[3]],r=[f[2],f[1]],f=Xb(f);Eg(b.coordinateToPixelMatrix,n,n);Eg(b.coordinateToPixelMatrix,q,q);Eg(b.coordinateToPixelMatrix,r,r);Eg(b.coordinateToPixelMatrix,f,f);d.save();ri(d,-m,k/2,l/2);d.beginPath();d.moveTo(n[0]*h,n[1]*h);d.lineTo(q[0]*h,q[1]*h);d.lineTo(r[0]*h,r[1]*h);d.lineTo(f[0]*h,f[1]*
-h);d.clip();ri(d,m,k/2,l/2)}h=this.D;k=d.globalAlpha;d.globalAlpha=c.opacity;d.drawImage(e,0,0,+e.width,+e.height,Math.round(h[12]),Math.round(h[13]),Math.round(e.width*h[0]),Math.round(e.height*h[5]));d.globalAlpha=k;g&&d.restore()}Si(this,"postcompose",d,b,void 0)};
-function Si(b,c,d,e,f){var g=b.a;if(nb(g,c)){var h=e.size[0]*e.pixelRatio,k=e.size[1]*e.pixelRatio,l=e.viewState.rotation;ri(d,-l,h/2,k/2);b=void 0!==f?f:Ti(b,e,0);b=new Gi(d,e.pixelRatio,e.extent,b,e.viewState.rotation);S(g,new zg(c,g,b,e,d,null));ri(d,l,h/2,k/2)}}function Ti(b,c,d){var e=c.viewState,f=c.pixelRatio;return Cg(b.K,f*c.size[0]/2,f*c.size[1]/2,f/e.resolution,-f/e.resolution,-e.rotation,-e.center[0]+d,-e.center[1])};var Ui=["Polygon","LineString","Image","Text"];function Vi(b,c,d){this.aa=b;this.P=c;this.c=null;this.g=0;this.resolution=d;this.D=this.K=null;this.b=[];this.coordinates=[];this.ba=zb();this.a=[];this.S=[];this.X=zb();this.ja=zb()}M(Vi,yg);
-function Wi(b,c,d,e,f,g){var h=b.coordinates.length,k=b.Jb(),l=[c[d],c[d+1]],m=[NaN,NaN],n=!0,q,r,u;for(q=d+f;q<e;q+=f){m[0]=c[q];m[1]=c[q+1];u=k[1];var w=k[2],y=k[3],z=m[0],D=m[1],t=0;z<k[0]?t=t|16:z>w&&(t=t|4);D<u?t|=8:D>y&&(t|=2);0===t&&(t=1);u=t;u!==r?(n&&(b.coordinates[h++]=l[0],b.coordinates[h++]=l[1]),b.coordinates[h++]=m[0],b.coordinates[h++]=m[1],n=!1):1===u?(b.coordinates[h++]=m[0],b.coordinates[h++]=m[1],n=!1):n=!0;l[0]=m[0];l[1]=m[1];r=u}q===d+f&&(b.coordinates[h++]=l[0],b.coordinates[h++]=
-l[1]);g&&(b.coordinates[h++]=c[d],b.coordinates[h++]=c[d+1]);return h}function Xi(b,c){b.K=[0,c,0];b.b.push(b.K);b.D=[0,c,0];b.a.push(b.D)}
-function Yi(b,c,d,e,f,g,h,k,l){var m;Dg(e,b.ba)?m=b.S:(m=Ac(b.coordinates,0,b.coordinates.length,2,e,b.S),Cb(b.ba,e));e=!$a(g);var n=0,q=h.length,r=0,u,w=b.X;b=b.ja;for(var y,z,D,t;n<q;){var v=h[n],B,E,C,G;switch(v[0]){case 0:r=v[1];e&&g[I(r).toString()]||!r.M()?n=v[2]:void 0===l||ac(l,r.M().C())?++n:n=v[2];break;case 1:c.beginPath();++n;break;case 2:r=v[1];u=m[r];v=m[r+1];D=m[r+2]-u;r=m[r+3]-v;c.arc(u,v,Math.sqrt(D*D+r*r),0,2*Math.PI,!0);++n;break;case 3:c.closePath();++n;break;case 4:r=v[1];u=v[2];
-B=v[3];C=v[4]*d;var J=v[5]*d,A=v[6];E=v[7];var H=v[8],O=v[9];D=v[11];t=v[12];var P=v[13],L=v[14];for(v[10]&&(D+=f);r<u;r+=2){v=m[r]-C;G=m[r+1]-J;P&&(v=Math.round(v),G=Math.round(G));if(1!=t||0!==D){var K=v+C,fa=G+J;Cg(w,K,fa,t,t,D,-K,-fa);c.transform(w[0],w[1],w[4],w[5],w[12],w[13])}K=c.globalAlpha;1!=E&&(c.globalAlpha=K*E);var fa=L+H>B.width?B.width-H:L,qa=A+O>B.height?B.height-O:A;c.drawImage(B,H,O,fa,qa,v,G,fa*d,qa*d);1!=E&&(c.globalAlpha=K);if(1!=t||0!==D)Eb(w,b),c.transform(b[0],b[1],b[4],b[5],
-b[12],b[13])}++n;break;case 5:r=v[1];u=v[2];C=v[3];J=v[4]*d;A=v[5]*d;D=v[6];t=v[7]*d;B=v[8];for(E=v[9];r<u;r+=2){v=m[r]+J;G=m[r+1]+A;if(1!=t||0!==D)Cg(w,v,G,t,t,D,-v,-G),c.transform(w[0],w[1],w[4],w[5],w[12],w[13]);H=C.split("\n");O=H.length;1<O?(P=Math.round(1.5*c.measureText("M").width),G-=(O-1)/2*P):P=0;for(L=0;L<O;L++)K=H[L],E&&c.strokeText(K,v,G),B&&c.fillText(K,v,G),G+=P;if(1!=t||0!==D)Eb(w,b),c.transform(b[0],b[1],b[4],b[5],b[12],b[13])}++n;break;case 6:if(void 0!==k&&(r=v[1],r=k(r)))return r;
-++n;break;case 7:c.fill();++n;break;case 8:r=v[1];u=v[2];v=m[r];G=m[r+1];D=v+.5|0;t=G+.5|0;if(D!==y||t!==z)c.moveTo(v,G),y=D,z=t;for(r+=2;r<u;r+=2)if(v=m[r],G=m[r+1],D=v+.5|0,t=G+.5|0,D!==y||t!==z)c.lineTo(v,G),y=D,z=t;++n;break;case 9:c.fillStyle=v[1];++n;break;case 10:y=void 0!==v[7]?v[7]:!0;z=v[2];c.strokeStyle=v[1];c.lineWidth=y?z*d:z;c.lineCap=v[3];c.lineJoin=v[4];c.miterLimit=v[5];yf&&c.setLineDash(v[6]);z=y=NaN;++n;break;case 11:c.font=v[1];c.textAlign=v[2];c.textBaseline=v[3];++n;break;case 12:c.stroke();
-++n;break;default:++n}}}function Zi(b){var c=b.a;c.reverse();var d,e=c.length,f,g,h=-1;for(d=0;d<e;++d)if(f=c[d],g=f[0],6==g)h=d;else if(0==g){f[2]=d;f=b.a;for(g=d;h<g;){var k=f[h];f[h]=f[g];f[g]=k;++h;--g}h=-1}}function $i(b,c){b.K[2]=b.b.length;b.K=null;b.D[2]=b.a.length;b.D=null;var d=[6,c];b.b.push(d);b.a.push(d)}Vi.prototype.qb=pa;Vi.prototype.Jb=function(){return this.P};
-function aj(b,c,d){Vi.call(this,b,c,d);this.i=this.G=null;this.B=this.w=this.H=this.u=this.s=this.o=this.A=this.j=this.l=this.h=this.f=void 0}M(aj,Vi);aj.prototype.Za=function(b,c){if(this.i){Xi(this,c);var d=b.a,e=this.coordinates.length,d=Wi(this,d,0,d.length,b.b,!1);this.b.push([4,e,d,this.i,this.f,this.h,this.l,this.j,this.A,this.o,this.s,this.u,this.H,this.w,this.B]);this.a.push([4,e,d,this.G,this.f,this.h,this.l,this.j,this.A,this.o,this.s,this.u,this.H,this.w,this.B]);$i(this,c)}};
-aj.prototype.Ya=function(b,c){if(this.i){Xi(this,c);var d=b.a,e=this.coordinates.length,d=Wi(this,d,0,d.length,b.b,!1);this.b.push([4,e,d,this.i,this.f,this.h,this.l,this.j,this.A,this.o,this.s,this.u,this.H,this.w,this.B]);this.a.push([4,e,d,this.G,this.f,this.h,this.l,this.j,this.A,this.o,this.s,this.u,this.H,this.w,this.B]);$i(this,c)}};aj.prototype.qb=function(){Zi(this);this.h=this.f=void 0;this.i=this.G=null;this.B=this.w=this.u=this.s=this.o=this.A=this.j=this.H=this.l=void 0};
-aj.prototype.Ha=function(b){var c=b.jb(),d=b.Pa(),e=b.Wb(1),f=b.T(1),g=b.ka();this.f=c[0];this.h=c[1];this.G=e;this.i=f;this.l=d[1];this.j=b.l;this.A=g[0];this.o=g[1];this.s=b.i;this.u=b.Y();this.H=b.gb;this.w=b.u;this.B=d[0]};function bj(b,c,d){Vi.call(this,b,c,d);this.f={Xa:void 0,Sa:void 0,Ta:null,Ua:void 0,Va:void 0,Wa:void 0,Rb:0,strokeStyle:void 0,lineCap:void 0,lineDash:null,lineJoin:void 0,lineWidth:void 0,miterLimit:void 0}}M(bj,Vi);
-function cj(b,c,d,e,f){var g=b.coordinates.length;c=Wi(b,c,d,e,f,!1);g=[8,g,c];b.b.push(g);b.a.push(g);return e}p=bj.prototype;p.Jb=function(){this.c||(this.c=Mb(this.P),0<this.g&&Lb(this.c,this.resolution*(this.g+1)/2,this.c));return this.c};
-function dj(b){var c=b.f,d=c.strokeStyle,e=c.lineCap,f=c.lineDash,g=c.lineJoin,h=c.lineWidth,k=c.miterLimit;c.Xa==d&&c.Sa==e&&Ma(c.Ta,f)&&c.Ua==g&&c.Va==h&&c.Wa==k||(c.Rb!=b.coordinates.length&&(b.b.push([12]),c.Rb=b.coordinates.length),b.b.push([10,d,h,e,g,k,f],[1]),c.Xa=d,c.Sa=e,c.Ta=f,c.Ua=g,c.Va=h,c.Wa=k)}
-p.pc=function(b,c){var d=this.f,e=d.lineWidth;void 0!==d.strokeStyle&&void 0!==e&&(dj(this),Xi(this,c),this.a.push([10,d.strokeStyle,d.lineWidth,d.lineCap,d.lineJoin,d.miterLimit,d.lineDash],[1]),d=b.a,cj(this,d,0,d.length,b.b),this.a.push([12]),$i(this,c))};
-p.qc=function(b,c){var d=this.f,e=d.lineWidth;if(void 0!==d.strokeStyle&&void 0!==e){dj(this);Xi(this,c);this.a.push([10,d.strokeStyle,d.lineWidth,d.lineCap,d.lineJoin,d.miterLimit,d.lineDash],[1]);var d=b.$a(),e=b.a,f=b.b,g=0,h,k;h=0;for(k=d.length;h<k;++h)g=cj(this,e,g,d[h],f);this.a.push([12]);$i(this,c)}};p.qb=function(){this.f.Rb!=this.coordinates.length&&this.b.push([12]);Zi(this);this.f=null};
-p.Ga=function(b,c){var d=c.ga();this.f.strokeStyle=vd(d?d:qi);d=c.Da;this.f.lineCap=void 0!==d?d:"round";d=c.getLineDash();this.f.lineDash=d?d:pi;d=c.Ea;this.f.lineJoin=void 0!==d?d:"round";d=c.ha();this.f.lineWidth=void 0!==d?d:1;d=c.Fa;this.f.miterLimit=void 0!==d?d:10;this.f.lineWidth>this.g&&(this.g=this.f.lineWidth,this.c=null)};
-function ej(b,c,d){Vi.call(this,b,c,d);this.f={mc:void 0,Xa:void 0,Sa:void 0,Ta:null,Ua:void 0,Va:void 0,Wa:void 0,fillStyle:void 0,strokeStyle:void 0,lineCap:void 0,lineDash:null,lineJoin:void 0,lineWidth:void 0,miterLimit:void 0}}M(ej,Vi);
-function fj(b,c,d,e,f){var g=b.f,h=[1];b.b.push(h);b.a.push(h);var k,h=0;for(k=e.length;h<k;++h){var l=e[h],m=b.coordinates.length;d=Wi(b,c,d,l,f,!0);d=[8,m,d];m=[3];b.b.push(d,m);b.a.push(d,m);d=l}c=[7];b.a.push(c);void 0!==g.fillStyle&&b.b.push(c);void 0!==g.strokeStyle&&(g=[12],b.b.push(g),b.a.push(g));return d}p=ej.prototype;
-p.nc=function(b,c){var d=this.f,e=d.strokeStyle;if(void 0!==d.fillStyle||void 0!==e){gj(this);Xi(this,c);this.a.push([9,vd(oi)]);void 0!==d.strokeStyle&&this.a.push([10,d.strokeStyle,d.lineWidth,d.lineCap,d.lineJoin,d.miterLimit,d.lineDash]);var f=b.a,e=this.coordinates.length;Wi(this,f,0,f.length,b.b,!1);f=[1];e=[2,e];this.b.push(f,e);this.a.push(f,e);e=[7];this.a.push(e);void 0!==d.fillStyle&&this.b.push(e);void 0!==d.strokeStyle&&(d=[12],this.b.push(d),this.a.push(d));$i(this,c)}};
-p.sc=function(b,c){var d=this.f,e=d.strokeStyle;if(void 0!==d.fillStyle||void 0!==e)gj(this),Xi(this,c),this.a.push([9,vd(oi)]),void 0!==d.strokeStyle&&this.a.push([10,d.strokeStyle,d.lineWidth,d.lineCap,d.lineJoin,d.miterLimit,d.lineDash]),d=b.$a(),e=Vc(b),fj(this,e,0,d,b.b),$i(this,c)};
-p.rc=function(b,c){var d=this.f,e=d.strokeStyle;if(void 0!==d.fillStyle||void 0!==e){gj(this);Xi(this,c);this.a.push([9,vd(oi)]);void 0!==d.strokeStyle&&this.a.push([10,d.strokeStyle,d.lineWidth,d.lineCap,d.lineJoin,d.miterLimit,d.lineDash]);var d=b.c,e=Pi(b),f=b.b,g=0,h,k;h=0;for(k=d.length;h<k;++h)g=fj(this,e,g,d[h],f);$i(this,c)}};p.qb=function(){Zi(this);this.f=null;var b=this.aa;if(0!==b){var c=this.coordinates,d,e;d=0;for(e=c.length;d<e;++d)c[d]=b*Math.round(c[d]/b)}};
-p.Jb=function(){this.c||(this.c=Mb(this.P),0<this.g&&Lb(this.c,this.resolution*(this.g+1)/2,this.c));return this.c};
-p.Ga=function(b,c){var d=this.f;if(b){var e=b.ga();d.fillStyle=yd(e?e:oi)}else d.fillStyle=void 0;c?(e=c.ga(),d.strokeStyle=vd(e?e:qi),e=c.Da,d.lineCap=void 0!==e?e:"round",e=c.getLineDash(),d.lineDash=e?e.slice():pi,e=c.Ea,d.lineJoin=void 0!==e?e:"round",e=c.ha(),d.lineWidth=void 0!==e?e:1,e=c.Fa,d.miterLimit=void 0!==e?e:10,d.lineWidth>this.g&&(this.g=d.lineWidth,this.c=null)):(d.strokeStyle=void 0,d.lineCap=void 0,d.lineDash=null,d.lineJoin=void 0,d.lineWidth=void 0,d.miterLimit=void 0)};
-function gj(b){var c=b.f,d=c.fillStyle,e=c.strokeStyle,f=c.lineCap,g=c.lineDash,h=c.lineJoin,k=c.lineWidth,l=c.miterLimit;void 0!==d&&c.mc!=d&&(b.b.push([9,d]),c.mc=c.fillStyle);void 0===e||c.Xa==e&&c.Sa==f&&c.Ta==g&&c.Ua==h&&c.Va==k&&c.Wa==l||(b.b.push([10,e,k,f,h,l,g]),c.Xa=e,c.Sa=f,c.Ta=g,c.Ua=h,c.Va=k,c.Wa=l)}function hj(b,c,d){Vi.call(this,b,c,d);this.w=this.H=this.u=null;this.i="";this.s=this.o=this.A=this.j=0;this.l=this.h=this.f=null}M(hj,Vi);
-function ij(b,c,d,e,f){if(""!==b.i&&b.l&&(b.f||b.h)){if(b.f){var g=b.f,h=b.u;if(!h||h.fillStyle!=g.fillStyle){var k=[9,g.fillStyle];b.b.push(k);b.a.push(k);h?h.fillStyle=g.fillStyle:b.u={fillStyle:g.fillStyle}}}b.h&&(g=b.h,h=b.H,h&&h.lineCap==g.lineCap&&h.lineDash==g.lineDash&&h.lineJoin==g.lineJoin&&h.lineWidth==g.lineWidth&&h.miterLimit==g.miterLimit&&h.strokeStyle==g.strokeStyle||(k=[10,g.strokeStyle,g.lineWidth,g.lineCap,g.lineJoin,g.miterLimit,g.lineDash,!1],b.b.push(k),b.a.push(k),h?(h.lineCap=
+p.Ga=function(b,c){if(b){var d=b.ga();this.b={fillStyle:yd(d?d:ui)}}else this.b=null;if(c){var d=c.ga(),e=c.Da,f=c.getLineDash(),g=c.Ea,h=c.ha(),k=c.Fa;this.a={lineCap:void 0!==e?e:"round",lineDash:f?f:vi,lineJoin:void 0!==g?g:"round",lineWidth:this.u*(void 0!==h?h:1),miterLimit:void 0!==k?k:10,strokeStyle:vd(d?d:wi)}}else this.a=null};
+p.Ha=function(b){if(b){var c=b.jb(),d=b.T(1),e=b.ka(),f=b.Qa();this.B=c[0];this.K=c[1];this.D=f[1];this.g=d;this.o=b.l;this.ja=e[0];this.aa=e[1];this.ea=b.i;this.na=b.Z();this.h=b.gb;this.za=b.u;this.G=f[0]}else this.g=null};
+p.xa=function(b){if(b){var c=b.Ka();c?(c=c.ga(),this.i={fillStyle:yd(c?c:ui)}):this.i=null;var d=b.va();if(d){var c=d.ga(),e=d.Da,f=d.getLineDash(),g=d.Ea,h=d.ha(),d=d.Fa;this.A={lineCap:void 0!==e?e:"round",lineDash:f?f:vi,lineJoin:void 0!==g?g:"round",lineWidth:void 0!==h?h:1,miterLimit:void 0!==d?d:10,strokeStyle:vd(c?c:wi)}}else this.A=null;var c=b.qd(),e=b.rd(),f=b.sd(),g=b.Z(),h=b.gb,d=b.sa,k=b.td();b=b.ud();this.P={font:void 0!==c?c:"10px sans-serif",textAlign:void 0!==k?k:"center",textBaseline:void 0!==
+b?b:"middle"};this.f=void 0!==d?d:"";this.pa=void 0!==e?this.u*e:0;this.Aa=void 0!==f?this.u*f:0;this.H=void 0!==g?g:0;this.j=this.u*(void 0!==h?h:1)}else this.f=""};function Xi(b){Lg.call(this,b);this.K=zb()}M(Xi,Lg);
+Xi.prototype.g=function(b,c,d){Yi(this,"precompose",d,b,void 0);var e=this.T();if(e){var f=c.extent,g=void 0!==f;if(g){var h=b.pixelRatio,k=b.size[0]*h,l=b.size[1]*h,m=b.viewState.rotation,n=bc(f),q=[f[2],f[3]],r=[f[2],f[1]],f=Xb(f);Kg(b.coordinateToPixelMatrix,n,n);Kg(b.coordinateToPixelMatrix,q,q);Kg(b.coordinateToPixelMatrix,r,r);Kg(b.coordinateToPixelMatrix,f,f);d.save();xi(d,-m,k/2,l/2);d.beginPath();d.moveTo(n[0]*h,n[1]*h);d.lineTo(q[0]*h,q[1]*h);d.lineTo(r[0]*h,r[1]*h);d.lineTo(f[0]*h,f[1]*
+h);d.clip();xi(d,m,k/2,l/2)}h=this.D;k=d.globalAlpha;d.globalAlpha=c.opacity;d.drawImage(e,0,0,+e.width,+e.height,Math.round(h[12]),Math.round(h[13]),Math.round(e.width*h[0]),Math.round(e.height*h[5]));d.globalAlpha=k;g&&d.restore()}Yi(this,"postcompose",d,b,void 0)};
+function Yi(b,c,d,e,f){var g=b.a;if(nb(g,c)){var h=e.size[0]*e.pixelRatio,k=e.size[1]*e.pixelRatio,l=e.viewState.rotation;xi(d,-l,h/2,k/2);b=void 0!==f?f:Zi(b,e,0);b=new Mi(d,e.pixelRatio,e.extent,b,e.viewState.rotation);S(g,new Fg(c,g,b,e,d,null));xi(d,l,h/2,k/2)}}function Zi(b,c,d){var e=c.viewState,f=c.pixelRatio;return Ig(b.K,f*c.size[0]/2,f*c.size[1]/2,f/e.resolution,-f/e.resolution,-e.rotation,-e.center[0]+d,-e.center[1])};var $i=["Polygon","LineString","Image","Text"];function aj(b,c,d){this.aa=b;this.P=c;this.c=null;this.g=0;this.resolution=d;this.D=this.K=null;this.b=[];this.coordinates=[];this.ba=zb();this.a=[];this.S=[];this.Y=zb();this.ja=zb()}M(aj,Eg);
+function bj(b,c,d,e,f,g){var h=b.coordinates.length,k=b.Kb(),l=[c[d],c[d+1]],m=[NaN,NaN],n=!0,q,r,u;for(q=d+f;q<e;q+=f){m[0]=c[q];m[1]=c[q+1];u=k[1];var w=k[2],y=k[3],z=m[0],D=m[1],t=0;z<k[0]?t=t|16:z>w&&(t=t|4);D<u?t|=8:D>y&&(t|=2);0===t&&(t=1);u=t;u!==r?(n&&(b.coordinates[h++]=l[0],b.coordinates[h++]=l[1]),b.coordinates[h++]=m[0],b.coordinates[h++]=m[1],n=!1):1===u?(b.coordinates[h++]=m[0],b.coordinates[h++]=m[1],n=!1):n=!0;l[0]=m[0];l[1]=m[1];r=u}q===d+f&&(b.coordinates[h++]=l[0],b.coordinates[h++]=
+l[1]);g&&(b.coordinates[h++]=c[d],b.coordinates[h++]=c[d+1]);return h}function cj(b,c){b.K=[0,c,0];b.b.push(b.K);b.D=[0,c,0];b.a.push(b.D)}
+function dj(b,c,d,e,f,g,h,k,l){var m;Jg(e,b.ba)?m=b.S:(m=Ac(b.coordinates,0,b.coordinates.length,2,e,b.S),Cb(b.ba,e));e=!$a(g);var n=0,q=h.length,r=0,u,w=b.Y;b=b.ja;for(var y,z,D,t;n<q;){var v=h[n],B,E,C,G;switch(v[0]){case 0:r=v[1];e&&g[I(r).toString()]||!r.M()?n=v[2]:void 0===l||ac(l,r.M().C())?++n:n=v[2];break;case 1:c.beginPath();++n;break;case 2:r=v[1];u=m[r];v=m[r+1];D=m[r+2]-u;r=m[r+3]-v;c.arc(u,v,Math.sqrt(D*D+r*r),0,2*Math.PI,!0);++n;break;case 3:c.closePath();++n;break;case 4:r=v[1];u=v[2];
+B=v[3];C=v[4]*d;var J=v[5]*d,A=v[6];E=v[7];var H=v[8],O=v[9];D=v[11];t=v[12];var P=v[13],L=v[14];for(v[10]&&(D+=f);r<u;r+=2){v=m[r]-C;G=m[r+1]-J;P&&(v=Math.round(v),G=Math.round(G));if(1!=t||0!==D){var K=v+C,fa=G+J;Ig(w,K,fa,t,t,D,-K,-fa);c.transform(w[0],w[1],w[4],w[5],w[12],w[13])}K=c.globalAlpha;1!=E&&(c.globalAlpha=K*E);var fa=L+H>B.width?B.width-H:L,ra=A+O>B.height?B.height-O:A;c.drawImage(B,H,O,fa,ra,v,G,fa*d,ra*d);1!=E&&(c.globalAlpha=K);if(1!=t||0!==D)Eb(w,b),c.transform(b[0],b[1],b[4],b[5],
+b[12],b[13])}++n;break;case 5:r=v[1];u=v[2];C=v[3];J=v[4]*d;A=v[5]*d;D=v[6];t=v[7]*d;B=v[8];for(E=v[9];r<u;r+=2){v=m[r]+J;G=m[r+1]+A;if(1!=t||0!==D)Ig(w,v,G,t,t,D,-v,-G),c.transform(w[0],w[1],w[4],w[5],w[12],w[13]);H=C.split("\n");O=H.length;1<O?(P=Math.round(1.5*c.measureText("M").width),G-=(O-1)/2*P):P=0;for(L=0;L<O;L++)K=H[L],E&&c.strokeText(K,v,G),B&&c.fillText(K,v,G),G+=P;if(1!=t||0!==D)Eb(w,b),c.transform(b[0],b[1],b[4],b[5],b[12],b[13])}++n;break;case 6:if(void 0!==k&&(r=v[1],r=k(r)))return r;
+++n;break;case 7:c.fill();++n;break;case 8:r=v[1];u=v[2];v=m[r];G=m[r+1];D=v+.5|0;t=G+.5|0;if(D!==y||t!==z)c.moveTo(v,G),y=D,z=t;for(r+=2;r<u;r+=2)if(v=m[r],G=m[r+1],D=v+.5|0,t=G+.5|0,D!==y||t!==z)c.lineTo(v,G),y=D,z=t;++n;break;case 9:c.fillStyle=v[1];++n;break;case 10:y=void 0!==v[7]?v[7]:!0;z=v[2];c.strokeStyle=v[1];c.lineWidth=y?z*d:z;c.lineCap=v[3];c.lineJoin=v[4];c.miterLimit=v[5];Ef&&c.setLineDash(v[6]);z=y=NaN;++n;break;case 11:c.font=v[1];c.textAlign=v[2];c.textBaseline=v[3];++n;break;case 12:c.stroke();
+++n;break;default:++n}}}function ej(b){var c=b.a;c.reverse();var d,e=c.length,f,g,h=-1;for(d=0;d<e;++d)if(f=c[d],g=f[0],6==g)h=d;else if(0==g){f[2]=d;f=b.a;for(g=d;h<g;){var k=f[h];f[h]=f[g];f[g]=k;++h;--g}h=-1}}function fj(b,c){b.K[2]=b.b.length;b.K=null;b.D[2]=b.a.length;b.D=null;var d=[6,c];b.b.push(d);b.a.push(d)}aj.prototype.qb=pa;aj.prototype.Kb=function(){return this.P};
+function gj(b,c,d){aj.call(this,b,c,d);this.i=this.G=null;this.B=this.w=this.H=this.u=this.s=this.o=this.A=this.j=this.l=this.h=this.f=void 0}M(gj,aj);gj.prototype.$a=function(b,c){if(this.i){cj(this,c);var d=b.a,e=this.coordinates.length,d=bj(this,d,0,d.length,b.b,!1);this.b.push([4,e,d,this.i,this.f,this.h,this.l,this.j,this.A,this.o,this.s,this.u,this.H,this.w,this.B]);this.a.push([4,e,d,this.G,this.f,this.h,this.l,this.j,this.A,this.o,this.s,this.u,this.H,this.w,this.B]);fj(this,c)}};
+gj.prototype.Za=function(b,c){if(this.i){cj(this,c);var d=b.a,e=this.coordinates.length,d=bj(this,d,0,d.length,b.b,!1);this.b.push([4,e,d,this.i,this.f,this.h,this.l,this.j,this.A,this.o,this.s,this.u,this.H,this.w,this.B]);this.a.push([4,e,d,this.G,this.f,this.h,this.l,this.j,this.A,this.o,this.s,this.u,this.H,this.w,this.B]);fj(this,c)}};gj.prototype.qb=function(){ej(this);this.h=this.f=void 0;this.i=this.G=null;this.B=this.w=this.u=this.s=this.o=this.A=this.j=this.H=this.l=void 0};
+gj.prototype.Ha=function(b){var c=b.jb(),d=b.Qa(),e=b.Xb(1),f=b.T(1),g=b.ka();this.f=c[0];this.h=c[1];this.G=e;this.i=f;this.l=d[1];this.j=b.l;this.A=g[0];this.o=g[1];this.s=b.i;this.u=b.Z();this.H=b.gb;this.w=b.u;this.B=d[0]};function hj(b,c,d){aj.call(this,b,c,d);this.f={Ya:void 0,Ta:void 0,Ua:null,Va:void 0,Wa:void 0,Xa:void 0,Sb:0,strokeStyle:void 0,lineCap:void 0,lineDash:null,lineJoin:void 0,lineWidth:void 0,miterLimit:void 0}}M(hj,aj);
+function ij(b,c,d,e,f){var g=b.coordinates.length;c=bj(b,c,d,e,f,!1);g=[8,g,c];b.b.push(g);b.a.push(g);return e}p=hj.prototype;p.Kb=function(){this.c||(this.c=Mb(this.P),0<this.g&&Lb(this.c,this.resolution*(this.g+1)/2,this.c));return this.c};
+function jj(b){var c=b.f,d=c.strokeStyle,e=c.lineCap,f=c.lineDash,g=c.lineJoin,h=c.lineWidth,k=c.miterLimit;c.Ya==d&&c.Ta==e&&Ma(c.Ua,f)&&c.Va==g&&c.Wa==h&&c.Xa==k||(c.Sb!=b.coordinates.length&&(b.b.push([12]),c.Sb=b.coordinates.length),b.b.push([10,d,h,e,g,k,f],[1]),c.Ya=d,c.Ta=e,c.Ua=f,c.Va=g,c.Wa=h,c.Xa=k)}
+p.pc=function(b,c){var d=this.f,e=d.lineWidth;void 0!==d.strokeStyle&&void 0!==e&&(jj(this),cj(this,c),this.a.push([10,d.strokeStyle,d.lineWidth,d.lineCap,d.lineJoin,d.miterLimit,d.lineDash],[1]),d=b.a,ij(this,d,0,d.length,b.b),this.a.push([12]),fj(this,c))};
+p.qc=function(b,c){var d=this.f,e=d.lineWidth;if(void 0!==d.strokeStyle&&void 0!==e){jj(this);cj(this,c);this.a.push([10,d.strokeStyle,d.lineWidth,d.lineCap,d.lineJoin,d.miterLimit,d.lineDash],[1]);var d=b.ab(),e=b.a,f=b.b,g=0,h,k;h=0;for(k=d.length;h<k;++h)g=ij(this,e,g,d[h],f);this.a.push([12]);fj(this,c)}};p.qb=function(){this.f.Sb!=this.coordinates.length&&this.b.push([12]);ej(this);this.f=null};
+p.Ga=function(b,c){var d=c.ga();this.f.strokeStyle=vd(d?d:wi);d=c.Da;this.f.lineCap=void 0!==d?d:"round";d=c.getLineDash();this.f.lineDash=d?d:vi;d=c.Ea;this.f.lineJoin=void 0!==d?d:"round";d=c.ha();this.f.lineWidth=void 0!==d?d:1;d=c.Fa;this.f.miterLimit=void 0!==d?d:10;this.f.lineWidth>this.g&&(this.g=this.f.lineWidth,this.c=null)};
+function kj(b,c,d){aj.call(this,b,c,d);this.f={mc:void 0,Ya:void 0,Ta:void 0,Ua:null,Va:void 0,Wa:void 0,Xa:void 0,fillStyle:void 0,strokeStyle:void 0,lineCap:void 0,lineDash:null,lineJoin:void 0,lineWidth:void 0,miterLimit:void 0}}M(kj,aj);
+function lj(b,c,d,e,f){var g=b.f,h=[1];b.b.push(h);b.a.push(h);var k,h=0;for(k=e.length;h<k;++h){var l=e[h],m=b.coordinates.length;d=bj(b,c,d,l,f,!0);d=[8,m,d];m=[3];b.b.push(d,m);b.a.push(d,m);d=l}c=[7];b.a.push(c);void 0!==g.fillStyle&&b.b.push(c);void 0!==g.strokeStyle&&(g=[12],b.b.push(g),b.a.push(g));return d}p=kj.prototype;
+p.nc=function(b,c){var d=this.f,e=d.strokeStyle;if(void 0!==d.fillStyle||void 0!==e){mj(this);cj(this,c);this.a.push([9,vd(ui)]);void 0!==d.strokeStyle&&this.a.push([10,d.strokeStyle,d.lineWidth,d.lineCap,d.lineJoin,d.miterLimit,d.lineDash]);var f=b.a,e=this.coordinates.length;bj(this,f,0,f.length,b.b,!1);f=[1];e=[2,e];this.b.push(f,e);this.a.push(f,e);e=[7];this.a.push(e);void 0!==d.fillStyle&&this.b.push(e);void 0!==d.strokeStyle&&(d=[12],this.b.push(d),this.a.push(d));fj(this,c)}};
+p.sc=function(b,c){var d=this.f,e=d.strokeStyle;if(void 0!==d.fillStyle||void 0!==e)mj(this),cj(this,c),this.a.push([9,vd(ui)]),void 0!==d.strokeStyle&&this.a.push([10,d.strokeStyle,d.lineWidth,d.lineCap,d.lineJoin,d.miterLimit,d.lineDash]),d=b.ab(),e=Vc(b),lj(this,e,0,d,b.b),fj(this,c)};
+p.rc=function(b,c){var d=this.f,e=d.strokeStyle;if(void 0!==d.fillStyle||void 0!==e){mj(this);cj(this,c);this.a.push([9,vd(ui)]);void 0!==d.strokeStyle&&this.a.push([10,d.strokeStyle,d.lineWidth,d.lineCap,d.lineJoin,d.miterLimit,d.lineDash]);var d=b.c,e=Vi(b),f=b.b,g=0,h,k;h=0;for(k=d.length;h<k;++h)g=lj(this,e,g,d[h],f);fj(this,c)}};p.qb=function(){ej(this);this.f=null;var b=this.aa;if(0!==b){var c=this.coordinates,d,e;d=0;for(e=c.length;d<e;++d)c[d]=b*Math.round(c[d]/b)}};
+p.Kb=function(){this.c||(this.c=Mb(this.P),0<this.g&&Lb(this.c,this.resolution*(this.g+1)/2,this.c));return this.c};
+p.Ga=function(b,c){var d=this.f;if(b){var e=b.ga();d.fillStyle=yd(e?e:ui)}else d.fillStyle=void 0;c?(e=c.ga(),d.strokeStyle=vd(e?e:wi),e=c.Da,d.lineCap=void 0!==e?e:"round",e=c.getLineDash(),d.lineDash=e?e.slice():vi,e=c.Ea,d.lineJoin=void 0!==e?e:"round",e=c.ha(),d.lineWidth=void 0!==e?e:1,e=c.Fa,d.miterLimit=void 0!==e?e:10,d.lineWidth>this.g&&(this.g=d.lineWidth,this.c=null)):(d.strokeStyle=void 0,d.lineCap=void 0,d.lineDash=null,d.lineJoin=void 0,d.lineWidth=void 0,d.miterLimit=void 0)};
+function mj(b){var c=b.f,d=c.fillStyle,e=c.strokeStyle,f=c.lineCap,g=c.lineDash,h=c.lineJoin,k=c.lineWidth,l=c.miterLimit;void 0!==d&&c.mc!=d&&(b.b.push([9,d]),c.mc=c.fillStyle);void 0===e||c.Ya==e&&c.Ta==f&&c.Ua==g&&c.Va==h&&c.Wa==k&&c.Xa==l||(b.b.push([10,e,k,f,h,l,g]),c.Ya=e,c.Ta=f,c.Ua=g,c.Va=h,c.Wa=k,c.Xa=l)}function nj(b,c,d){aj.call(this,b,c,d);this.w=this.H=this.u=null;this.i="";this.s=this.o=this.A=this.j=0;this.l=this.h=this.f=null}M(nj,aj);
+function oj(b,c,d,e,f){if(""!==b.i&&b.l&&(b.f||b.h)){if(b.f){var g=b.f,h=b.u;if(!h||h.fillStyle!=g.fillStyle){var k=[9,g.fillStyle];b.b.push(k);b.a.push(k);h?h.fillStyle=g.fillStyle:b.u={fillStyle:g.fillStyle}}}b.h&&(g=b.h,h=b.H,h&&h.lineCap==g.lineCap&&h.lineDash==g.lineDash&&h.lineJoin==g.lineJoin&&h.lineWidth==g.lineWidth&&h.miterLimit==g.miterLimit&&h.strokeStyle==g.strokeStyle||(k=[10,g.strokeStyle,g.lineWidth,g.lineCap,g.lineJoin,g.miterLimit,g.lineDash,!1],b.b.push(k),b.a.push(k),h?(h.lineCap=
 g.lineCap,h.lineDash=g.lineDash,h.lineJoin=g.lineJoin,h.lineWidth=g.lineWidth,h.miterLimit=g.miterLimit,h.strokeStyle=g.strokeStyle):b.H={lineCap:g.lineCap,lineDash:g.lineDash,lineJoin:g.lineJoin,lineWidth:g.lineWidth,miterLimit:g.miterLimit,strokeStyle:g.strokeStyle}));g=b.l;h=b.w;h&&h.font==g.font&&h.textAlign==g.textAlign&&h.textBaseline==g.textBaseline||(k=[11,g.font,g.textAlign,g.textBaseline],b.b.push(k),b.a.push(k),h?(h.font=g.font,h.textAlign=g.textAlign,h.textBaseline=g.textBaseline):b.w=
-{font:g.font,textAlign:g.textAlign,textBaseline:g.textBaseline});Xi(b,f);g=b.coordinates.length;c=Wi(b,c,0,d,e,!1);c=[5,g,c,b.i,b.j,b.A,b.o,b.s,!!b.f,!!b.h];b.b.push(c);b.a.push(c);$i(b,f)}}
-hj.prototype.xa=function(b){if(b){var c=b.Ka();c?(c=c.ga(),c=yd(c?c:oi),this.f?this.f.fillStyle=c:this.f={fillStyle:c}):this.f=null;var d=b.va();if(d){var c=d.ga(),e=d.Da,f=d.getLineDash(),g=d.Ea,h=d.ha(),d=d.Fa,e=void 0!==e?e:"round",f=f?f.slice():pi,g=void 0!==g?g:"round",h=void 0!==h?h:1,d=void 0!==d?d:10,c=vd(c?c:qi);if(this.h){var k=this.h;k.lineCap=e;k.lineDash=f;k.lineJoin=g;k.lineWidth=h;k.miterLimit=d;k.strokeStyle=c}else this.h={lineCap:e,lineDash:f,lineJoin:g,lineWidth:h,miterLimit:d,strokeStyle:c}}else this.h=
-null;var l=b.pd(),c=b.qd(),e=b.rd(),f=b.Y(),h=b.gb,d=b.sa,g=b.sd(),k=b.td();b=void 0!==l?l:"10px sans-serif";g=void 0!==g?g:"center";k=void 0!==k?k:"middle";this.l?(l=this.l,l.font=b,l.textAlign=g,l.textBaseline=k):this.l={font:b,textAlign:g,textBaseline:k};this.i=void 0!==d?d:"";this.j=void 0!==c?c:0;this.A=void 0!==e?e:0;this.o=void 0!==f?f:0;this.s=void 0!==h?h:1}else this.i=""};function jj(b,c,d,e){this.o=b;this.h=c;this.A=d;this.l=e;this.b={};this.i=lf(1,1);this.j=zb()}
-function kj(b){for(var c in b.b){var d=b.b[c],e;for(e in d)d[e].qb()}}jj.prototype.g=function(b,c,d,e,f){var g=this.j;Cg(g,.5,.5,1/c,-1/c,-d,-b[0],-b[1]);var h=this.i;h.clearRect(0,0,1,1);var k;void 0!==this.l&&(k=Jb(),Kb(k,b),Lb(k,c*this.l,k));return lj(this,h,g,d,e,function(b){if(0<h.getImageData(0,0,1,1).data[3]){if(b=f(b))return b;h.clearRect(0,0,1,1)}},k)};
-jj.prototype.a=function(b,c){var d=void 0!==b?b.toString():"0",e=this.b[d];void 0===e&&(e={},this.b[d]=e);d=e[c];void 0===d&&(d=new mj[c](this.o,this.h,this.A),e[c]=d);return d};jj.prototype.c=function(){return $a(this.b)};
-jj.prototype.f=function(b,c,d,e,f,g){var h=Object.keys(this.b).map(Number);h.sort(Ha);if(!1!==g){var k=this.h;g=k[0];var l=k[1],m=k[2],k=k[3];g=[g,l,g,k,m,k,m,l];Ac(g,0,8,2,d,g);b.save();b.beginPath();b.moveTo(g[0],g[1]);b.lineTo(g[2],g[3]);b.lineTo(g[4],g[5]);b.lineTo(g[6],g[7]);b.closePath();b.clip()}var n,q;g=0;for(l=h.length;g<l;++g)for(n=this.b[h[g].toString()],m=0,k=Ui.length;m<k;++m)q=n[Ui[m]],void 0!==q&&Yi(q,b,c,d,e,f,q.b,void 0);b.restore()};
-function lj(b,c,d,e,f,g,h){var k=Object.keys(b.b).map(Number);k.sort(function(b,c){return c-b});var l,m,n,q,r;l=0;for(m=k.length;l<m;++l)for(q=b.b[k[l].toString()],n=Ui.length-1;0<=n;--n)if(r=q[Ui[n]],void 0!==r&&(r=Yi(r,c,1,d,e,f,r.a,g,h)))return r}var mj={Image:aj,LineString:bj,Polygon:ej,Text:hj};function nj(b,c){return I(b)-I(c)}function oj(b,c){var d=.5*b/c;return d*d}function pj(b,c,d,e,f,g){var h=!1,k,l;if(k=d.T())l=k.rb(),2==l||3==l?k.Xc(f,g):(0==l&&k.load(),k.Bc(f,g),h=!0);if(f=(0,d.b)(c))e=f.Nb(e),(0,qj[e.U()])(b,e,d,c);return h}
-var qj={Point:function(b,c,d,e){var f=d.T();if(f){if(2!=f.rb())return;var g=b.a(d.a,"Image");g.Ha(f);g.Za(c,e)}if(f=d.sa)b=b.a(d.a,"Text"),b.xa(f),ij(b,c.a,2,2,e)},LineString:function(b,c,d,e){var f=d.va();if(f){var g=b.a(d.a,"LineString");g.Ga(null,f);g.pc(c,e)}if(f=d.sa)b=b.a(d.a,"Text"),b.xa(f),ij(b,Ni(c),2,2,e)},Polygon:function(b,c,d,e){var f=d.Ka(),g=d.va();if(f||g){var h=b.a(d.a,"Polygon");h.Ga(f,g);h.sc(c,e)}if(f=d.sa)b=b.a(d.a,"Text"),b.xa(f),ij(b,Wc(c),2,2,e)},MultiPoint:function(b,c,d,
-e){var f=d.T();if(f){if(2!=f.rb())return;var g=b.a(d.a,"Image");g.Ha(f);g.Ya(c,e)}if(f=d.sa)b=b.a(d.a,"Text"),b.xa(f),d=c.a,ij(b,d,d.length,c.b,e)},MultiLineString:function(b,c,d,e){var f=d.va();if(f){var g=b.a(d.a,"LineString");g.Ga(null,f);g.qc(c,e)}if(f=d.sa)b=b.a(d.a,"Text"),b.xa(f),c=Oi(c),ij(b,c,c.length,2,e)},MultiPolygon:function(b,c,d,e){var f=d.Ka(),g=d.va();if(g||f){var h=b.a(d.a,"Polygon");h.Ga(f,g);h.rc(c,e)}if(f=d.sa)b=b.a(d.a,"Text"),b.xa(f),c=Qi(c),ij(b,c,c.length,2,e)},GeometryCollection:function(b,
-c,d,e){c=c.a;var f,g;f=0;for(g=c.length;f<g;++f)(0,qj[c[f].U()])(b,c[f],d,e)},Circle:function(b,c,d,e){var f=d.Ka(),g=d.va();if(f||g){var h=b.a(d.a,"Polygon");h.Ga(f,g);h.nc(c,e)}if(f=d.sa)b=b.a(d.a,"Text"),b.xa(f),ij(b,c.a.slice(0,c.b),2,2,e)}};var rj=!((W("Chrome")||W("CriOS"))&&!W("Opera")&&!W("OPR")&&!W("Edge"))||W("iPhone")&&!W("iPod")&&!W("iPad")||W("iPad")||W("iPod");function sj(b,c,d,e){b=d-b;c=e-c;var f=Math.sqrt(b*b+c*c);return[Math.round(d+b/f),Math.round(e+c/f)]}
-function tj(b,c,d,e,f,g,h,k,l,m,n){var q=lf(Math.round(d*b),Math.round(d*c));if(0===l.length)return q.canvas;q.scale(d,d);var r=Jb();l.forEach(function(b){Sb(r,b.extent)});var u=lf(Math.round(d*Vb(r)/e),Math.round(d*Wb(r)/e)),w=d/e;l.forEach(function(b){u.drawImage(b.image,m,m,b.image.width-2*m,b.image.height-2*m,(b.extent[0]-r[0])*w,-(b.extent[3]-r[3])*w,Vb(b.extent)*w,Wb(b.extent)*w)});var y=bc(h);k.c.forEach(function(b){var c=b.source,f=b.target,h=c[1][0],k=c[1][1],l=c[2][0],m=c[2][1];b=(f[0][0]-
+{font:g.font,textAlign:g.textAlign,textBaseline:g.textBaseline});cj(b,f);g=b.coordinates.length;c=bj(b,c,0,d,e,!1);c=[5,g,c,b.i,b.j,b.A,b.o,b.s,!!b.f,!!b.h];b.b.push(c);b.a.push(c);fj(b,f)}}
+nj.prototype.xa=function(b){if(b){var c=b.Ka();c?(c=c.ga(),c=yd(c?c:ui),this.f?this.f.fillStyle=c:this.f={fillStyle:c}):this.f=null;var d=b.va();if(d){var c=d.ga(),e=d.Da,f=d.getLineDash(),g=d.Ea,h=d.ha(),d=d.Fa,e=void 0!==e?e:"round",f=f?f.slice():vi,g=void 0!==g?g:"round",h=void 0!==h?h:1,d=void 0!==d?d:10,c=vd(c?c:wi);if(this.h){var k=this.h;k.lineCap=e;k.lineDash=f;k.lineJoin=g;k.lineWidth=h;k.miterLimit=d;k.strokeStyle=c}else this.h={lineCap:e,lineDash:f,lineJoin:g,lineWidth:h,miterLimit:d,strokeStyle:c}}else this.h=
+null;var l=b.qd(),c=b.rd(),e=b.sd(),f=b.Z(),h=b.gb,d=b.sa,g=b.td(),k=b.ud();b=void 0!==l?l:"10px sans-serif";g=void 0!==g?g:"center";k=void 0!==k?k:"middle";this.l?(l=this.l,l.font=b,l.textAlign=g,l.textBaseline=k):this.l={font:b,textAlign:g,textBaseline:k};this.i=void 0!==d?d:"";this.j=void 0!==c?c:0;this.A=void 0!==e?e:0;this.o=void 0!==f?f:0;this.s=void 0!==h?h:1}else this.i=""};function pj(b,c,d,e){this.o=b;this.h=c;this.A=d;this.l=e;this.b={};this.i=rf(1,1);this.j=zb()}
+function qj(b){for(var c in b.b){var d=b.b[c],e;for(e in d)d[e].qb()}}pj.prototype.g=function(b,c,d,e,f){var g=this.j;Ig(g,.5,.5,1/c,-1/c,-d,-b[0],-b[1]);var h=this.i;h.clearRect(0,0,1,1);var k;void 0!==this.l&&(k=Jb(),Kb(k,b),Lb(k,c*this.l,k));return rj(this,h,g,d,e,function(b){if(0<h.getImageData(0,0,1,1).data[3]){if(b=f(b))return b;h.clearRect(0,0,1,1)}},k)};
+pj.prototype.a=function(b,c){var d=void 0!==b?b.toString():"0",e=this.b[d];void 0===e&&(e={},this.b[d]=e);d=e[c];void 0===d&&(d=new sj[c](this.o,this.h,this.A),e[c]=d);return d};pj.prototype.c=function(){return $a(this.b)};
+pj.prototype.f=function(b,c,d,e,f,g){var h=Object.keys(this.b).map(Number);h.sort(Ha);if(!1!==g){var k=this.h;g=k[0];var l=k[1],m=k[2],k=k[3];g=[g,l,g,k,m,k,m,l];Ac(g,0,8,2,d,g);b.save();b.beginPath();b.moveTo(g[0],g[1]);b.lineTo(g[2],g[3]);b.lineTo(g[4],g[5]);b.lineTo(g[6],g[7]);b.closePath();b.clip()}var n,q;g=0;for(l=h.length;g<l;++g)for(n=this.b[h[g].toString()],m=0,k=$i.length;m<k;++m)q=n[$i[m]],void 0!==q&&dj(q,b,c,d,e,f,q.b,void 0);b.restore()};
+function rj(b,c,d,e,f,g,h){var k=Object.keys(b.b).map(Number);k.sort(function(b,c){return c-b});var l,m,n,q,r;l=0;for(m=k.length;l<m;++l)for(q=b.b[k[l].toString()],n=$i.length-1;0<=n;--n)if(r=q[$i[n]],void 0!==r&&(r=dj(r,c,1,d,e,f,r.a,g,h)))return r}var sj={Image:gj,LineString:hj,Polygon:kj,Text:nj};function tj(b,c){return I(b)-I(c)}function uj(b,c){var d=.5*b/c;return d*d}function vj(b,c,d,e,f,g){var h=!1,k,l;if(k=d.T())l=k.rb(),2==l||3==l?k.Xc(f,g):(0==l&&k.load(),k.Bc(f,g),h=!0);if(f=(0,d.b)(c))e=f.Ob(e),(0,wj[e.U()])(b,e,d,c);return h}
+var wj={Point:function(b,c,d,e){var f=d.T();if(f){if(2!=f.rb())return;var g=b.a(d.a,"Image");g.Ha(f);g.$a(c,e)}if(f=d.sa)b=b.a(d.a,"Text"),b.xa(f),oj(b,c.a,2,2,e)},LineString:function(b,c,d,e){var f=d.va();if(f){var g=b.a(d.a,"LineString");g.Ga(null,f);g.pc(c,e)}if(f=d.sa)b=b.a(d.a,"Text"),b.xa(f),oj(b,Ti(c),2,2,e)},Polygon:function(b,c,d,e){var f=d.Ka(),g=d.va();if(f||g){var h=b.a(d.a,"Polygon");h.Ga(f,g);h.sc(c,e)}if(f=d.sa)b=b.a(d.a,"Text"),b.xa(f),oj(b,Wc(c),2,2,e)},MultiPoint:function(b,c,d,
+e){var f=d.T();if(f){if(2!=f.rb())return;var g=b.a(d.a,"Image");g.Ha(f);g.Za(c,e)}if(f=d.sa)b=b.a(d.a,"Text"),b.xa(f),d=c.a,oj(b,d,d.length,c.b,e)},MultiLineString:function(b,c,d,e){var f=d.va();if(f){var g=b.a(d.a,"LineString");g.Ga(null,f);g.qc(c,e)}if(f=d.sa)b=b.a(d.a,"Text"),b.xa(f),c=Ui(c),oj(b,c,c.length,2,e)},MultiPolygon:function(b,c,d,e){var f=d.Ka(),g=d.va();if(g||f){var h=b.a(d.a,"Polygon");h.Ga(f,g);h.rc(c,e)}if(f=d.sa)b=b.a(d.a,"Text"),b.xa(f),c=Wi(c),oj(b,c,c.length,2,e)},GeometryCollection:function(b,
+c,d,e){c=c.a;var f,g;f=0;for(g=c.length;f<g;++f)(0,wj[c[f].U()])(b,c[f],d,e)},Circle:function(b,c,d,e){var f=d.Ka(),g=d.va();if(f||g){var h=b.a(d.a,"Polygon");h.Ga(f,g);h.nc(c,e)}if(f=d.sa)b=b.a(d.a,"Text"),b.xa(f),oj(b,c.a.slice(0,c.b),2,2,e)}};var xj=!((W("Chrome")||W("CriOS"))&&!W("Opera")&&!W("OPR")&&!W("Edge"))||W("iPhone")&&!W("iPod")&&!W("iPad")||W("iPad")||W("iPod");function yj(b,c,d,e){b=d-b;c=e-c;var f=Math.sqrt(b*b+c*c);return[Math.round(d+b/f),Math.round(e+c/f)]}
+function zj(b,c,d,e,f,g,h,k,l,m,n){var q=rf(Math.round(d*b),Math.round(d*c));if(0===l.length)return q.canvas;q.scale(d,d);var r=Jb();l.forEach(function(b){Sb(r,b.extent)});var u=rf(Math.round(d*Vb(r)/e),Math.round(d*Wb(r)/e)),w=d/e;l.forEach(function(b){u.drawImage(b.image,m,m,b.image.width-2*m,b.image.height-2*m,(b.extent[0]-r[0])*w,-(b.extent[3]-r[3])*w,Vb(b.extent)*w,Wb(b.extent)*w)});var y=bc(h);k.c.forEach(function(b){var c=b.source,f=b.target,h=c[1][0],k=c[1][1],l=c[2][0],m=c[2][1];b=(f[0][0]-
 y[0])/g;var w=-(f[0][1]-y[1])/g,n=(f[1][0]-y[0])/g,A=-(f[1][1]-y[1])/g,H=(f[2][0]-y[0])/g,O=-(f[2][1]-y[1])/g,f=c[0][0],c=c[0][1],h=h-f,k=k-c,l=l-f,m=m-c;a:{h=[[h,k,0,0,n-b],[l,m,0,0,H-b],[0,0,h,k,A-w],[0,0,l,m,O-w]];k=h.length;for(l=0;l<k;l++){for(var m=l,P=Math.abs(h[l][l]),L=l+1;L<k;L++){var K=Math.abs(h[L][l]);K>P&&(P=K,m=L)}if(0===P){h=null;break a}P=h[m];h[m]=h[l];h[l]=P;for(m=l+1;m<k;m++)for(P=-h[m][l]/h[l][l],L=l;L<k+1;L++)h[m][L]=l==L?0:h[m][L]+P*h[l][L]}l=Array(k);for(m=k-1;0<=m;m--)for(l[m]=
-h[m][k]/h[m][m],P=m-1;0<=P;P--)h[P][k]-=h[P][m]*l[m];h=l}h&&(q.save(),q.beginPath(),rj?(l=(b+n+H)/3,m=(w+A+O)/3,k=sj(l,m,b,w),n=sj(l,m,n,A),H=sj(l,m,H,O),q.moveTo(k[0],k[1]),q.lineTo(n[0],n[1]),q.lineTo(H[0],H[1])):(q.moveTo(b,w),q.lineTo(n,A),q.lineTo(H,O)),q.closePath(),q.clip(),q.transform(h[0],h[2],h[1],h[3],b,w),q.translate(r[0]-f,r[3]-c),q.scale(e/d,-e/d),q.drawImage(u.canvas,0,0),q.restore())});n&&(q.save(),q.strokeStyle="black",q.lineWidth=1,k.c.forEach(function(b){var c=b.target;b=(c[0][0]-
-y[0])/g;var d=-(c[0][1]-y[1])/g,e=(c[1][0]-y[0])/g,f=-(c[1][1]-y[1])/g,h=(c[2][0]-y[0])/g,c=-(c[2][1]-y[1])/g;q.beginPath();q.moveTo(b,d);q.lineTo(e,f);q.lineTo(h,c);q.closePath();q.stroke()}),q.restore());return q.canvas};function uj(b,c,d,e,f){this.f=b;this.g=c;var g={},h=xc(this.g,this.f);this.b=function(b){var c=b[0]+"/"+b[1];g[c]||(g[c]=h(b));return g[c]};this.h=e;this.A=f*f;this.c=[];this.i=!1;this.j=this.f.a&&!!e&&!!this.f.C()&&Vb(e)==Vb(this.f.C());this.a=this.f.C()?Vb(this.f.C()):null;this.l=this.g.C()?Vb(this.g.C()):null;b=bc(d);c=[d[2],d[3]];e=[d[2],d[1]];d=Xb(d);f=this.b(b);var k=this.b(c),l=this.b(e),m=this.b(d);vj(this,b,c,e,d,f,k,l,m,10);if(this.i){var n=Infinity;this.c.forEach(function(b){n=Math.min(n,
+h[m][k]/h[m][m],P=m-1;0<=P;P--)h[P][k]-=h[P][m]*l[m];h=l}h&&(q.save(),q.beginPath(),xj?(l=(b+n+H)/3,m=(w+A+O)/3,k=yj(l,m,b,w),n=yj(l,m,n,A),H=yj(l,m,H,O),q.moveTo(k[0],k[1]),q.lineTo(n[0],n[1]),q.lineTo(H[0],H[1])):(q.moveTo(b,w),q.lineTo(n,A),q.lineTo(H,O)),q.closePath(),q.clip(),q.transform(h[0],h[2],h[1],h[3],b,w),q.translate(r[0]-f,r[3]-c),q.scale(e/d,-e/d),q.drawImage(u.canvas,0,0),q.restore())});n&&(q.save(),q.strokeStyle="black",q.lineWidth=1,k.c.forEach(function(b){var c=b.target;b=(c[0][0]-
+y[0])/g;var d=-(c[0][1]-y[1])/g,e=(c[1][0]-y[0])/g,f=-(c[1][1]-y[1])/g,h=(c[2][0]-y[0])/g,c=-(c[2][1]-y[1])/g;q.beginPath();q.moveTo(b,d);q.lineTo(e,f);q.lineTo(h,c);q.closePath();q.stroke()}),q.restore());return q.canvas};function Aj(b,c,d,e,f){this.f=b;this.g=c;var g={},h=xc(this.g,this.f);this.b=function(b){var c=b[0]+"/"+b[1];g[c]||(g[c]=h(b));return g[c]};this.h=e;this.A=f*f;this.c=[];this.i=!1;this.j=this.f.a&&!!e&&!!this.f.C()&&Vb(e)==Vb(this.f.C());this.a=this.f.C()?Vb(this.f.C()):null;this.l=this.g.C()?Vb(this.g.C()):null;b=bc(d);c=[d[2],d[3]];e=[d[2],d[1]];d=Xb(d);f=this.b(b);var k=this.b(c),l=this.b(e),m=this.b(d);Bj(this,b,c,e,d,f,k,l,m,10);if(this.i){var n=Infinity;this.c.forEach(function(b){n=Math.min(n,
 b.source[0][0],b.source[1][0],b.source[2][0])});this.c.forEach(function(b){if(Math.max(b.source[0][0],b.source[1][0],b.source[2][0])-n>this.a/2){var c=[[b.source[0][0],b.source[0][1]],[b.source[1][0],b.source[1][1]],[b.source[2][0],b.source[2][1]]];c[0][0]-n>this.a/2&&(c[0][0]-=this.a);c[1][0]-n>this.a/2&&(c[1][0]-=this.a);c[2][0]-n>this.a/2&&(c[2][0]-=this.a);Math.max(c[0][0],c[1][0],c[2][0])-Math.min(c[0][0],c[1][0],c[2][0])<this.a/2&&(b.source=c)}},this)}g={}}
-function vj(b,c,d,e,f,g,h,k,l,m){var n=Ib([g,h,k,l]),q=b.a?Vb(n)/b.a:null,r=b.f.a&&.5<q&&1>q,u=!1;if(0<m){if(b.g.f&&b.l)var w=Ib([c,d,e,f]),u=u|.25<Vb(w)/b.l;!r&&b.f.f&&q&&(u|=.25<q)}if(u||!b.h||ac(n,b.h)){if(!(u||isFinite(g[0])&&isFinite(g[1])&&isFinite(h[0])&&isFinite(h[1])&&isFinite(k[0])&&isFinite(k[1])&&isFinite(l[0])&&isFinite(l[1])))if(0<m)u=!0;else return;if(0<m&&(u||(q=b.b([(c[0]+e[0])/2,(c[1]+e[1])/2]),n=r?(Ea(g[0],b.a)+Ea(k[0],b.a))/2-Ea(q[0],b.a):(g[0]+k[0])/2-q[0],q=(g[1]+k[1])/2-q[1],
-u=n*n+q*q>b.A),u)){Math.abs(c[0]-e[0])<=Math.abs(c[1]-e[1])?(r=[(d[0]+e[0])/2,(d[1]+e[1])/2],n=b.b(r),q=[(f[0]+c[0])/2,(f[1]+c[1])/2],u=b.b(q),vj(b,c,d,r,q,g,h,n,u,m-1),vj(b,q,r,e,f,u,n,k,l,m-1)):(r=[(c[0]+d[0])/2,(c[1]+d[1])/2],n=b.b(r),q=[(e[0]+f[0])/2,(e[1]+f[1])/2],u=b.b(q),vj(b,c,r,q,f,g,n,u,l,m-1),vj(b,r,d,e,q,n,h,k,u,m-1));return}if(r){if(!b.j)return;b.i=!0}b.c.push({source:[g,k,l],target:[c,e,f]});b.c.push({source:[g,h,k],target:[c,d,e]})}}
-function wj(b){var c=Jb();b.c.forEach(function(b){b=b.source;Kb(c,b[0]);Kb(c,b[1]);Kb(c,b[2])});return c};function xj(b){T.call(this);this.g=void 0;this.a="geometry";this.h=null;this.c=void 0;this.b=null;Q(this,rb(this.a),this.nb,this);void 0!==b&&(b instanceof zc||!b?yj(this,b):this.l(b))}M(xj,T);p=xj.prototype;p.clone=function(){var b=new xj(this.za());zj(b,this.a);var c=this.M();c&&yj(b,c.clone());if(c=this.h)b.h=c,b.c=c?Aj(c):void 0,b.v();return b};p.M=function(){return this.get(this.a)};p.La=function(){return this.g};p.yd=function(){this.v()};
-p.nb=function(){this.b&&(N(this.b),this.b=null);var b=this.M();b&&(this.b=Q(b,"change",this.yd,this));this.v()};function yj(b,c){b.set(b.a,c)}function zj(b,c){gb(b,rb(b.a),b.nb,b);b.a=c;Q(b,rb(b.a),b.nb,b);b.nb()}function Aj(b){if(!ga(b)){var c;c=Array.isArray(b)?b:[b];b=function(){return c}}return b};function Bj(b,c,d){return function(e,f,g){var h=new XMLHttpRequest;h.open("GET",ga(b)?b(e,f,g):b,!0);"arraybuffer"==c.U()&&(h.responseType="arraybuffer");h.onload=function(){if(200<=h.status&&300>h.status){var b=c.U(),e;"json"==b||"text"==b?e=h.responseText:"xml"==b?(e=h.responseXML,e||(b=h.responseText,e=(new DOMParser).parseFromString(b,"application/xml"))):"arraybuffer"==b&&(e=h.response);e&&d.call(this,c.b(e,{featureProjection:g}),c.f(Cj(e)))}}.bind(this);h.send()}}
-function Dj(b,c){return Bj(b,c,function(b){this.Cb(b)})};function Ej(){return[[-Infinity,-Infinity,Infinity,Infinity]]};var Fj;
-(function(){var b={uc:{}};(function(){function c(b,d){if(!(this instanceof c))return new c(b,d);this.Ab=Math.max(4,b||9);this.ec=Math.max(2,Math.ceil(.4*this.Ab));d&&this.ed(d);this.clear()}function d(b,c){b.bbox=e(b,0,b.children.length,c)}function e(b,c,d,e){for(var g=[Infinity,Infinity,-Infinity,-Infinity],h;c<d;c++)h=b.children[c],f(g,b.Z?e(h):h.bbox);return g}function f(b,c){b[0]=Math.min(b[0],c[0]);b[1]=Math.min(b[1],c[1]);b[2]=Math.max(b[2],c[2]);b[3]=Math.max(b[3],c[3])}function g(b,c){return b.bbox[0]-
+function Bj(b,c,d,e,f,g,h,k,l,m){var n=Ib([g,h,k,l]),q=b.a?Vb(n)/b.a:null,r=b.f.a&&.5<q&&1>q,u=!1;if(0<m){if(b.g.f&&b.l)var w=Ib([c,d,e,f]),u=u|.25<Vb(w)/b.l;!r&&b.f.f&&q&&(u|=.25<q)}if(u||!b.h||ac(n,b.h)){if(!(u||isFinite(g[0])&&isFinite(g[1])&&isFinite(h[0])&&isFinite(h[1])&&isFinite(k[0])&&isFinite(k[1])&&isFinite(l[0])&&isFinite(l[1])))if(0<m)u=!0;else return;if(0<m&&(u||(q=b.b([(c[0]+e[0])/2,(c[1]+e[1])/2]),n=r?(Ea(g[0],b.a)+Ea(k[0],b.a))/2-Ea(q[0],b.a):(g[0]+k[0])/2-q[0],q=(g[1]+k[1])/2-q[1],
+u=n*n+q*q>b.A),u)){Math.abs(c[0]-e[0])<=Math.abs(c[1]-e[1])?(r=[(d[0]+e[0])/2,(d[1]+e[1])/2],n=b.b(r),q=[(f[0]+c[0])/2,(f[1]+c[1])/2],u=b.b(q),Bj(b,c,d,r,q,g,h,n,u,m-1),Bj(b,q,r,e,f,u,n,k,l,m-1)):(r=[(c[0]+d[0])/2,(c[1]+d[1])/2],n=b.b(r),q=[(e[0]+f[0])/2,(e[1]+f[1])/2],u=b.b(q),Bj(b,c,r,q,f,g,n,u,l,m-1),Bj(b,r,d,e,q,n,h,k,u,m-1));return}if(r){if(!b.j)return;b.i=!0}b.c.push({source:[g,k,l],target:[c,e,f]});b.c.push({source:[g,h,k],target:[c,d,e]})}}
+function Cj(b){var c=Jb();b.c.forEach(function(b){b=b.source;Kb(c,b[0]);Kb(c,b[1]);Kb(c,b[2])});return c};function Dj(b){T.call(this);this.g=void 0;this.a="geometry";this.h=null;this.c=void 0;this.b=null;Q(this,rb(this.a),this.nb,this);void 0!==b&&(b instanceof zc||!b?Ej(this,b):this.l(b))}M(Dj,T);p=Dj.prototype;p.clone=function(){var b=new Dj(this.za());Fj(b,this.a);var c=this.M();c&&Ej(b,c.clone());if(c=this.h)b.h=c,b.c=c?Gj(c):void 0,b.v();return b};p.M=function(){return this.get(this.a)};p.La=function(){return this.g};p.zd=function(){this.v()};
+p.nb=function(){this.b&&(N(this.b),this.b=null);var b=this.M();b&&(this.b=Q(b,"change",this.zd,this));this.v()};function Ej(b,c){b.set(b.a,c)}function Fj(b,c){gb(b,rb(b.a),b.nb,b);b.a=c;Q(b,rb(b.a),b.nb,b);b.nb()}function Gj(b){if(!ga(b)){var c;c=Array.isArray(b)?b:[b];b=function(){return c}}return b};function Hj(b,c,d){return function(e,f,g){var h=new XMLHttpRequest;h.open("GET",ga(b)?b(e,f,g):b,!0);"arraybuffer"==c.U()&&(h.responseType="arraybuffer");h.onload=function(){if(200<=h.status&&300>h.status){var b=c.U(),e;"json"==b||"text"==b?e=h.responseText:"xml"==b?(e=h.responseXML,e||(b=h.responseText,e=(new DOMParser).parseFromString(b,"application/xml"))):"arraybuffer"==b&&(e=h.response);e&&d.call(this,c.b(e,{featureProjection:g}),c.f(Ij(e)))}}.bind(this);h.send()}}
+function Jj(b,c){return Hj(b,c,function(b){this.Db(b)})};function Kj(){return[[-Infinity,-Infinity,Infinity,Infinity]]};var Lj;
+(function(){var b={uc:{}};(function(){function c(b,d){if(!(this instanceof c))return new c(b,d);this.Bb=Math.max(4,b||9);this.ec=Math.max(2,Math.ceil(.4*this.Bb));d&&this.ed(d);this.clear()}function d(b,c){b.bbox=e(b,0,b.children.length,c)}function e(b,c,d,e){for(var g=[Infinity,Infinity,-Infinity,-Infinity],h;c<d;c++)h=b.children[c],f(g,b.$?e(h):h.bbox);return g}function f(b,c){b[0]=Math.min(b[0],c[0]);b[1]=Math.min(b[1],c[1]);b[2]=Math.max(b[2],c[2]);b[3]=Math.max(b[3],c[3])}function g(b,c){return b.bbox[0]-
 c.bbox[0]}function h(b,c){return b.bbox[1]-c.bbox[1]}function k(b){return(b[2]-b[0])*(b[3]-b[1])}function l(b){return b[2]-b[0]+(b[3]-b[1])}function m(b,c){return b[0]<=c[0]&&b[1]<=c[1]&&c[2]<=b[2]&&c[3]<=b[3]}function n(b,c){return c[0]<=b[2]&&c[1]<=b[3]&&c[2]>=b[0]&&c[3]>=b[1]}function q(b,c,d,e,f){for(var g=[c,d],h;g.length;)d=g.pop(),c=g.pop(),d-c<=e||(h=c+Math.ceil((d-c)/e/2)*e,r(b,c,d,h,f),g.push(c,h,h,d))}function r(b,c,d,e,f){for(var g,h,k,l,m;d>c;){600<d-c&&(g=d-c+1,h=e-c+1,k=Math.log(g),
 l=.5*Math.exp(2*k/3),m=.5*Math.sqrt(k*l*(g-l)/g)*(0>h-g/2?-1:1),k=Math.max(c,Math.floor(e-h*l/g+m)),h=Math.min(d,Math.floor(e+(g-h)*l/g+m)),r(b,k,h,e,f));g=b[e];h=c;l=d;u(b,c,e);for(0<f(b[d],g)&&u(b,c,d);h<l;){u(b,h,l);h++;for(l--;0>f(b[h],g);)h++;for(;0<f(b[l],g);)l--}0===f(b[c],g)?u(b,c,l):(l++,u(b,l,d));l<=e&&(c=l+1);e<=l&&(d=l-1)}}function u(b,c,d){var e=b[c];b[c]=b[d];b[d]=e}c.prototype={all:function(){return this.ac(this.data,[])},search:function(b){var c=this.data,d=[],e=this.da;if(!n(b,c.bbox))return d;
-for(var f=[],g,h,k,l;c;){g=0;for(h=c.children.length;g<h;g++)k=c.children[g],l=c.Z?e(k):k.bbox,n(b,l)&&(c.Z?d.push(k):m(b,l)?this.ac(k,d):f.push(k));c=f.pop()}return d},load:function(b){if(!b||!b.length)return this;if(b.length<this.ec){for(var c=0,d=b.length;c<d;c++)this.Ca(b[c]);return this}b=this.cc(b.slice(),0,b.length-1,0);this.data.children.length?this.data.height===b.height?this.fc(this.data,b):(this.data.height<b.height&&(c=this.data,this.data=b,b=c),this.dc(b,this.data.height-b.height-1,!0)):
-this.data=b;return this},Ca:function(b){b&&this.dc(b,this.data.height-1);return this},clear:function(){this.data={children:[],height:1,bbox:[Infinity,Infinity,-Infinity,-Infinity],Z:!0};return this},remove:function(b){if(!b)return this;for(var c=this.data,d=this.da(b),e=[],f=[],g,h,k,l;c||e.length;){c||(c=e.pop(),h=e[e.length-1],g=f.pop(),l=!0);if(c.Z&&(k=c.children.indexOf(b),-1!==k)){c.children.splice(k,1);e.push(c);this.dd(e);break}l||c.Z||!m(c.bbox,d)?h?(g++,c=h.children[g],l=!1):c=null:(e.push(c),
-f.push(g),g=0,h=c,c=c.children[0])}return this},da:function(b){return b},Gb:function(b,c){return b[0]-c[0]},Hb:function(b,c){return b[1]-c[1]},toJSON:function(){return this.data},ac:function(b,c){for(var d=[];b;)b.Z?c.push.apply(c,b.children):d.push.apply(d,b.children),b=d.pop();return c},cc:function(b,c,e,f){var g=e-c+1,h=this.Ab,k;if(g<=h)return k={children:b.slice(c,e+1),height:1,bbox:null,Z:!0},d(k,this.da),k;f||(f=Math.ceil(Math.log(g)/Math.log(h)),h=Math.ceil(g/Math.pow(h,f-1)));k={children:[],
-height:f,bbox:null,Z:!1};var g=Math.ceil(g/h),h=g*Math.ceil(Math.sqrt(h)),l,m,n;for(q(b,c,e,h,this.Gb);c<=e;c+=h)for(m=Math.min(c+h-1,e),q(b,c,m,g,this.Hb),l=c;l<=m;l+=g)n=Math.min(l+g-1,m),k.children.push(this.cc(b,l,n,f-1));d(k,this.da);return k},cd:function(b,c,d,e){for(var f,g,h,l,m,n,q,r;;){e.push(c);if(c.Z||e.length-1===d)break;q=r=Infinity;f=0;for(g=c.children.length;f<g;f++)h=c.children[f],m=k(h.bbox),n=h.bbox,n=(Math.max(n[2],b[2])-Math.min(n[0],b[0]))*(Math.max(n[3],b[3])-Math.min(n[1],
-b[1]))-m,n<r?(r=n,q=m<q?m:q,l=h):n===r&&m<q&&(q=m,l=h);c=l}return c},dc:function(b,c,d){var e=this.da;d=d?b.bbox:e(b);var e=[],g=this.cd(d,this.data,c,e);g.children.push(b);for(f(g.bbox,d);0<=c;)if(e[c].children.length>this.Ab)this.fd(e,c),c--;else break;this.$c(d,e,c)},fd:function(b,c){var e=b[c],f=e.children.length,g=this.ec;this.ad(e,g,f);f=this.bd(e,g,f);f={children:e.children.splice(f,e.children.length-f),height:e.height,bbox:null,Z:!1};e.Z&&(f.Z=!0);d(e,this.da);d(f,this.da);c?b[c-1].children.push(f):
-this.fc(e,f)},fc:function(b,c){this.data={children:[b,c],height:b.height+1,bbox:null,Z:!1};d(this.data,this.da)},bd:function(b,c,d){var f,g,h,l,m,n,q;m=n=Infinity;for(f=c;f<=d-c;f++)g=e(b,0,f,this.da),h=e(b,f,d,this.da),l=Math.max(0,Math.min(g[2],h[2])-Math.max(g[0],h[0]))*Math.max(0,Math.min(g[3],h[3])-Math.max(g[1],h[1])),g=k(g)+k(h),l<m?(m=l,q=f,n=g<n?g:n):l===m&&g<n&&(n=g,q=f);return q},ad:function(b,c,d){var e=b.Z?this.Gb:g,f=b.Z?this.Hb:h,k=this.bc(b,c,d,e);c=this.bc(b,c,d,f);k<c&&b.children.sort(e)},
-bc:function(b,c,d,g){b.children.sort(g);g=this.da;var h=e(b,0,c,g),k=e(b,d-c,d,g),m=l(h)+l(k),n,q;for(n=c;n<d-c;n++)q=b.children[n],f(h,b.Z?g(q):q.bbox),m+=l(h);for(n=d-c-1;n>=c;n--)q=b.children[n],f(k,b.Z?g(q):q.bbox),m+=l(k);return m},$c:function(b,c,d){for(;0<=d;d--)f(c[d].bbox,b)},dd:function(b){for(var c=b.length-1,e;0<=c;c--)0===b[c].children.length?0<c?(e=b[c-1].children,e.splice(e.indexOf(b[c]),1)):this.clear():d(b[c],this.da)},ed:function(b){var c=["return a"," - b",";"];this.Gb=new Function("a",
-"b",c.join(b[0]));this.Hb=new Function("a","b",c.join(b[1]));this.da=new Function("a","return [a"+b.join(", a")+"];")}};"undefined"!==typeof b?b.uc=c:"undefined"!==typeof self?self.a=c:window.a=c})();Fj=b.uc})();function Gj(b){this.a=Fj(b);this.b={}}p=Gj.prototype;p.Ca=function(b,c){var d=[b[0],b[1],b[2],b[3],c];this.a.Ca(d);this.b[I(c)]=d};p.load=function(b,c){for(var d=Array(c.length),e=0,f=c.length;e<f;e++){var g=b[e],h=c[e],g=[g[0],g[1],g[2],g[3],h];d[e]=g;this.b[I(h)]=g}this.a.load(d)};p.remove=function(b){b=I(b);var c=this.b[b];delete this.b[b];return null!==this.a.remove(c)};function Hj(b){return b.a.all().map(function(b){return b[4]})}
-function Ij(b,c){return b.a.search(c).map(function(b){return b[4]})}function Jj(b,c,d,e){return Kj(Ij(b,c),d,e)}function Kj(b,c,d){for(var e,f=0,g=b.length;f<g&&!(e=c.call(d,b[f]));f++);return e}p.clear=function(){this.a.clear();this.b={}};p.C=function(){return this.a.data.bbox};function Lj(b){b=b||{};Ce.call(this,{attributions:b.attributions,logo:b.logo,projection:void 0,state:"ready",wrapX:void 0!==b.wrapX?b.wrapX:!0});this.o=pa;this.D=b.format;this.u=b.url;void 0!==b.loader?this.o=b.loader:void 0!==this.u&&(this.o=Dj(this.u,this.D));this.G=void 0!==b.strategy?b.strategy:Ej;var c=void 0!==b.useSpatialIndex?b.useSpatialIndex:!0;this.R=c?new Gj:null;this.s=new Gj;this.ca={};this.b={};this.g={};this.h={};this.a=null;var d,e;b.features instanceof ld?(d=b.features,e=d.a):Array.isArray(b.features)&&
-(e=b.features);c||void 0!==d||(d=new ld(e));void 0!==e&&Mj(this,e);void 0!==d&&Nj(this,d)}M(Lj,Ce);p=Lj.prototype;p.Bb=function(b){var c=I(b).toString();if(Oj(this,c,b)){Pj(this,c,b);var d=b.M();d?(c=d.C(),this.R&&this.R.Ca(c,b)):this.ca[c]=b;S(this,new Qj("addfeature",b))}this.v()};function Pj(b,c,d){b.h[c]=[Q(d,"change",b.xc,b),Q(d,"propertychange",b.xc,b)]}function Oj(b,c,d){var e=!0,f=d.La();void 0!==f?f.toString()in b.b?e=!1:b.b[f.toString()]=d:b.g[c]=d;return e}p.Cb=function(b){Mj(this,b);this.v()};
-function Mj(b,c){var d,e,f,g,h=[],k=[],l=[];e=0;for(f=c.length;e<f;e++)g=c[e],d=I(g).toString(),Oj(b,d,g)&&k.push(g);e=0;for(f=k.length;e<f;e++){g=k[e];d=I(g).toString();Pj(b,d,g);var m=g.M();m?(d=m.C(),h.push(d),l.push(g)):b.ca[d]=g}b.R&&b.R.load(h,l);e=0;for(f=k.length;e<f;e++)S(b,new Qj("addfeature",k[e]))}
-function Nj(b,c){var d=!1;Q(b,"addfeature",function(b){d||(d=!0,c.push(b.feature),d=!1)});Q(b,"removefeature",function(b){d||(d=!0,c.remove(b.feature),d=!1)});Q(c,"add",function(b){d||(b=b.element,d=!0,this.Bb(b),d=!1)},b);Q(c,"remove",function(b){if(!d){b=b.element;d=!0;var c=I(b).toString();c in this.ca?delete this.ca[c]:this.R&&this.R.remove(b);this.Xb(b);this.v();d=!1}},b);b.a=c}
-p.clear=function(b){if(b){for(var c in this.h)this.h[c].forEach(N);this.a||(this.h={},this.b={},this.g={})}else if(this.R){b=this.Xb;Kj(Hj(this.R),b,this);for(var d in this.ca)this.Xb(this.ca[d])}this.a&&this.a.clear();this.R&&this.R.clear();this.s.clear();this.ca={};S(this,new Qj("clear"));this.v()};p.nd=function(b,c){if(this.R)return Kj(Hj(this.R),b,c);if(this.a)return nd(this.a,b,c)};function Rj(b,c,d,e){b.R?Jj(b.R,c,d,e):b.a&&nd(b.a,d,e)}
-p.oe=function(){var b;this.a?b=this.a.a:this.R&&(b=Hj(this.R),$a(this.ca)||Ka(b,Za(this.ca)));return b};p.C=function(){return this.R.C()};
-p.xc=function(b){b=b.target;var c=I(b).toString(),d=b.M();if(d)if(d=d.C(),c in this.ca)delete this.ca[c],this.R&&this.R.Ca(d,b);else{if(this.R){var e=this.R,f=I(b);Rb(e.b[f].slice(0,4),d)||(e.remove(b),e.Ca(d,b))}}else c in this.ca||(this.R&&this.R.remove(b),this.ca[c]=b);d=b.La();void 0!==d?(d=d.toString(),c in this.g?(delete this.g[c],this.b[d]=b):this.b[d]!==b&&(Sj(this,b),this.b[d]=b)):c in this.g||(Sj(this,b),this.g[c]=b);this.v();S(this,new Qj("changefeature",b))};
-function Tj(b,c,d,e){var f=b.s;c=b.G(c,d);var g,h;g=0;for(h=c.length;g<h;++g){var k=c[g];Jj(f,k,function(b){return Nb(b.extent,k)})||(b.o.call(b,k,d,e),f.Ca(k,{extent:k.slice()}))}}p.Xb=function(b){var c=I(b).toString();this.h[c].forEach(N);delete this.h[c];var d=b.La();void 0!==d?delete this.b[d.toString()]:delete this.g[c];S(this,new Qj("removefeature",b))};function Sj(b,c){for(var d in b.b)if(b.b[d]===c){delete b.b[d];break}}function Qj(b,c){R.call(this,b);this.feature=c}M(Qj,R);function Uj(b){Ri.call(this,b);this.c=lf();this.b=null;this.j=Jb();this.h=zb()}M(Uj,Ri);
-Uj.prototype.g=function(b,c,d){var e=b.pixelRatio,f=b.viewState,g=f.center,h=f.projection,k=f.rotation,l=b.size,m=Math.round(e*l[0]/2),n=Math.round(e*l[1]/2),q=e/f.resolution,r=this.a,u=r.V(),w=u.kb(h),f=Ti(this,b,0);Si(this,"precompose",d,b,f);var l=d,r=nb(r,"render"),y,z,D,t;if(k||r){l=this.c;y=l.canvas;D=u.mb(e)/e;var v=d.canvas.width*D;z=d.canvas.height*D;t=Math.round(Math.sqrt(v*v+z*z));y.width!=t?y.width=y.height=t:l.clearRect(0,0,t,t);y=(t-v)/2/D;z=(t-z)/2/D;q*=D;m=Math.round(D*(m+y));n=Math.round(D*
-(n+z))}v=l.globalAlpha;l.globalAlpha=c.opacity;var B=u.la(h),E=this.b,C;c=u.Lb(h)&&1==c.opacity;c||(E.reverse(),C=[]);for(var G=0,J=E.length;G<J;++G){var A=E[G],H=A.L,O=Ie(B,H,this.j),P=H[0],L=Xb(Ie(B,Qe(B,g,P))),H=Math.round(Vb(O)*q),K=Math.round(Wb(O)*q),fa=Math.round((O[0]-L[0])*q/H)*H+m+Math.round((L[0]-g[0])*q),O=Math.round((L[1]-O[3])*q/K)*K+n+Math.round((g[1]-L[1])*q);if(!c){L=[fa,O,fa+H,O+K];l.save();for(var qa=0,Ql=C.length;qa<Ql;++qa){var Xa=C[qa];ac(L,Xa)&&(l.beginPath(),l.moveTo(L[0],
-L[1]),l.lineTo(L[0],L[3]),l.lineTo(L[2],L[3]),l.lineTo(L[2],L[1]),l.moveTo(Xa[0],Xa[1]),l.lineTo(Xa[2],Xa[1]),l.lineTo(Xa[2],Xa[3]),l.lineTo(Xa[0],Xa[3]),l.closePath(),l.clip())}C.push(L)}P=We(u,P,e,h);l.drawImage(A.T(),w,w,P[0],P[1],fa,O,H,K);c||l.restore()}r&&(e=y-m/D+m,h=z-n/D+n,g=Cg(this.h,t/2-e,t/2-h,q,-q,-k,-g[0]+e/q,-g[1]-h/q),Si(this,"render",l,b,g));(k||r)&&d.drawImage(l.canvas,-Math.round(y),-Math.round(z),t/D,t/D);l.globalAlpha=v;Si(this,"postcompose",d,b,f)};
-Uj.prototype.i=function(b,c){function d(b){b=b.N();return 2==b||4==b||3==b&&!u}var e=b.pixelRatio,f=b.viewState,g=f.projection,h=this.a,k=h.V(),l=k.la(g),m=Pe(l,f.resolution),n=l.I(m),q=f.center;n==f.resolution?(q=Lg(q,n,b.size),f=Zb(q,n,f.rotation,b.size)):f=b.extent;void 0!==c.extent&&(f=$b(f,c.extent));if(f[2]<f[0]||f[3]<f[1])return!1;n=Le(l,f,n);q={};q[m]={};var r=this.l(k,g,q),u=ni(h),w=Jb(),y=new fd(0,0,0,0),z,D,t,v;for(t=n.a;t<=n.f;++t)for(v=n.b;v<=n.c;++v)z=Ng(k,m,t,v,e,g),!d(z)&&z.a&&(z=
-z.a),d(z)?q[m][z.L.toString()]=z:(D=He(l,z.L,r,y,w),D||(z=Ke(l,z.L,y,w))&&r(m+1,z));r=Object.keys(q).map(Number);r.sort(Ha);var w=[],B,y=0;for(t=r.length;y<t;++y)for(B in z=r[y],v=q[z],v)z=v[B],2==z.N()&&w.push(z);this.b=w;Kg(b.usedTiles,k,m,n);Mg(b,k,l,e,g,f,m,h.get("preload"));Hg(b,k);Jg(b,k);return!0};function Vj(b){Ri.call(this,b);this.b=!1;this.w=-1;this.u=NaN;this.j=Jb();this.c=this.o=null;this.h=lf()}M(Vj,Ri);
-Vj.prototype.g=function(b,c,d){var e=b.extent,f=b.pixelRatio,g=c.eb?b.skippedFeatureUids:{},h=b.viewState,k=h.projection,h=h.rotation,l=k.C(),m=this.a.V(),n=Ti(this,b,0);Si(this,"precompose",d,b,n);var q=this.c;if(q&&!q.c()){var r;nb(this.a,"render")?(this.h.canvas.width=d.canvas.width,this.h.canvas.height=d.canvas.height,r=this.h):r=d;var u=r.globalAlpha;r.globalAlpha=c.opacity;c=b.size[0]*f;var w=b.size[1]*f;ri(r,-h,c/2,w/2);q.f(r,f,n,h,g);if(m.j&&k.a&&!Nb(l,e)){for(var k=e[0],m=Vb(l),y=0;k<l[0];)--y,
-n=m*y,n=Ti(this,b,n),q.f(r,f,n,h,g),k+=m;y=0;for(k=e[2];k>l[2];)++y,n=m*y,n=Ti(this,b,n),q.f(r,f,n,h,g),k-=m;n=Ti(this,b,0)}ri(r,h,c/2,w/2);r!=d&&(Si(this,"render",r,b,n),d.drawImage(r.canvas,0,0));r.globalAlpha=u}Si(this,"postcompose",d,b,n)};Vj.prototype.fb=function(b,c,d,e){if(this.c){var f=this.a,g={};return this.c.g(b,c.viewState.resolution,c.viewState.rotation,{},function(b){var c=I(b).toString();if(!(c in g))return g[c]=!0,d.call(e,b,f)})}};Vj.prototype.B=function(){Gg(this)};
-Vj.prototype.i=function(b){function c(b){var c,e=b.c;e?c=e.call(b,m):(e=d.g)&&(c=e(b,m));if(c){if(c){e=!1;if(Array.isArray(c))for(var f=0,g=c.length;f<g;++f)e=pj(r,b,c[f],oj(m,n),this.B,this)||e;else e=pj(r,b,c,oj(m,n),this.B,this)||e;b=e}else b=!1;this.b=this.b||b}}var d=this.a,e=d.V();Ig(b.attributions,e.i);Jg(b,e);var f=b.viewHints[0],g=b.viewHints[1],h=d.i,k=d.j;if(!this.b&&!h&&f||!k&&g)return!0;var l=b.extent,k=b.viewState,f=k.projection,m=k.resolution,n=b.pixelRatio,g=d.f,q=d.a,h=d.get("renderOrder");
-void 0===h&&(h=nj);l=Lb(l,q*m);q=k.projection.C();e.j&&k.projection.a&&!Nb(q,b.extent)&&(b=Math.max(Vb(l)/2,Vb(q)),l[0]=q[0]-b,l[2]=q[2]+b);if(!this.b&&this.u==m&&this.w==g&&this.o==h&&Nb(this.j,l))return!0;this.c=null;this.b=!1;var r=new jj(.5*m/n,l,m,d.a);Tj(e,l,m,f);if(h){var u=[];Rj(e,l,function(b){u.push(b)},this);u.sort(h);u.forEach(c,this)}else Rj(e,l,c,this);kj(r);this.u=m;this.w=g;this.o=h;this.j=l;this.c=r;return!0};function Wj(b,c){var d=/\{z\}/g,e=/\{x\}/g,f=/\{y\}/g,g=/\{-y\}/g;return function(h){if(h)return b.replace(d,h[0].toString()).replace(e,h[1].toString()).replace(f,function(){return(-h[2]-1).toString()}).replace(g,function(){var b=c.a?c.a[h[0]]:null;return(b.c-b.b+1+h[2]).toString()})}}function Xj(b,c){for(var d=b.length,e=Array(d),f=0;f<d;++f)e[f]=Wj(b[f],c);return Yj(e)}function Yj(b){return 1===b.length?b[0]:function(c,d,e){if(c)return b[Ea((c[1]<<c[0])+c[2],b.length)](c,d,e)}}function Zj(){};function ak(b){Ue.call(this,{attributions:b.attributions,cacheSize:b.cacheSize,extent:b.extent,logo:b.logo,opaque:b.opaque,projection:b.projection,state:b.state,tileGrid:b.tileGrid,tilePixelRatio:b.tilePixelRatio,wrapX:b.wrapX});this.tileLoadFunction=b.tileLoadFunction;this.tileUrlFunction=this.g?this.g.bind(this):Zj;this.urls=null;if(b.urls){var c=b.urls;this.urls=c;bk(this,this.g?this.g.bind(this):Xj(c,this.tileGrid))}else b.url&&this.s(b.url);b.tileUrlFunction&&bk(this,b.tileUrlFunction)}
-M(ak,Ue);ak.prototype.D=function(b){b=b.target;switch(b.N()){case 1:S(this,new Ye("tileloadstart",b));break;case 2:S(this,new Ye("tileloadend",b));break;case 3:S(this,new Ye("tileloaderror",b))}};function bk(b,c){b.a.clear();b.tileUrlFunction=c;b.v()}
-ak.prototype.s=function(b){var c=[],d=/\{(\d)-(\d)\}/.exec(b)||/\{([a-z])-([a-z])\}/.exec(b);if(d){var e=d[2].charCodeAt(0),f;for(f=d[1].charCodeAt(0);f<=e;++f)c.push(b.replace(d[0],String.fromCharCode(f)))}else c.push(b);b=this.urls=c;bk(this,this.g?this.g.bind(this):Xj(b,this.tileGrid))};ak.prototype.Yc=function(b,c,d){b=this.lb(b,c,d);ve(this.a,b)&&this.a.get(b)};function ck(b,c){Tg.call(this,0,c);this.c=lf();lf();this.a=this.c.canvas;this.a.style.width="100%";this.a.style.height="100%";this.a.className="ol-unselectable";fe(b,this.a,0);this.b=!0;this.g=zb()}M(ck,Tg);ck.prototype.Ib=function(b){return b instanceof X?new Uj(b):b instanceof Y?new Vj(b):null};
-function dk(b,c,d){var e=b.h,f=b.c;if(nb(e,c)){var g=d.extent,h=d.pixelRatio,k=d.viewState.rotation,l=d.pixelRatio,m=d.viewState,n=m.resolution;b=Cg(b.g,b.a.width/2,b.a.height/2,l/n,-l/n,-m.rotation,-m.center[0],-m.center[1]);g=new Gi(f,h,g,b,k);S(e,new zg(c,e,g,d,f,null))}}ck.prototype.U=function(){return"canvas"};
-ck.prototype.sb=function(b){if(b){var c=this.c,d=b.pixelRatio,e=Math.round(b.size[0]*d),d=Math.round(b.size[1]*d);this.a.width!=e||this.a.height!=d?(this.a.width=e,this.a.height=d):c.clearRect(0,0,e,d);var f=b.viewState.rotation;Ug(b);dk(this,"precompose",b);var g=b.layerStatesArray;Na(g);ri(c,f,e/2,d/2);var h=b.viewState.resolution,k,l,m,n;k=0;for(l=g.length;k<l;++k)n=g[k],m=n.layer,m=Wg(this,m),Bg(n,h)&&"ready"==n.Zb&&m.i(b,n)&&m.g(b,n,c);ri(c,-f,e/2,d/2);dk(this,"postcompose",b);this.b||(ne(this.a,
-!0),this.b=!0);Xg(this,b);b.postRenderFunctions.push(Vg)}else this.b&&(ne(this.a,!1),this.b=!1)};function ek(b,c){Fg.call(this,b);this.target=c}M(ek,Fg);ek.prototype.Fb=pa;ek.prototype.Kc=pa;function fk(b){var c=document.createElement("DIV");c.style.position="absolute";ek.call(this,b,c);this.c=!0;this.h=1;this.g=0;this.b={}}M(fk,ek);fk.prototype.Fb=function(){ee(this.target);this.g=0};
-fk.prototype.Lc=function(b,c){if(!c.visible)return this.c&&(ne(this.target,!1),this.c=!1),!0;var d=b.pixelRatio,e=b.viewState,f=e.projection,g=this.a,h=g.V(),k=h.la(f),l=h.kb(f),m=Pe(k,e.resolution),n=k.I(m),q=e.center,r;n==e.resolution?(q=Lg(q,n,b.size),r=Zb(q,n,e.rotation,b.size)):r=b.extent;void 0!==c.extent&&(r=$b(r,c.extent));var n=Le(k,r,n),u={};u[m]={};var w=this.l(h,f,u),y=ni(g),z=Jb(),D=new fd(0,0,0,0),t,v,B,E;for(B=n.a;B<=n.f;++B)for(E=n.b;E<=n.c;++E)t=Ng(h,m,B,E,d,f),v=t.N(),v=2==v||4==
-v||3==v&&!y,!v&&t.a&&(t=t.a),v=t.N(),2==v?u[m][t.L.toString()]=t:4==v||3==v&&!y||(v=He(k,t.L,w,D,z),v||(t=Ke(k,t.L,D,z))&&w(m+1,t));var C;if(this.g!=h.f){for(C in this.b)y=this.b[+C],ge(y.target);this.b={};this.g=h.f}z=Object.keys(u).map(Number);z.sort(Ha);var w={},G;B=0;for(E=z.length;B<E;++B){C=z[B];C in this.b?y=this.b[C]:(y=Qe(k,q,C),y=new gk(k,y),w[C]=!0,this.b[C]=y);C=u[C];for(G in C){t=y;v=C[G];var J=l,A=v.L,H=A[0],O=A[1],P=A[2],A=A.toString();if(!(A in t.b)){var H=tb(Oe(t.g,H),t.i),L=v.T(t),
-K=L.style;K.maxWidth="none";var fa=void 0,qa=void 0;0<J?(fa=document.createElement("DIV"),qa=fa.style,qa.overflow="hidden",qa.width=H[0]+"px",qa.height=H[1]+"px",K.position="absolute",K.left=-J+"px",K.top=-J+"px",K.width=H[0]+2*J+"px",K.height=H[1]+2*J+"px",fa.appendChild(L)):(K.width=H[0]+"px",K.height=H[1]+"px",fa=L,qa=K);qa.position="absolute";qa.left=(O-t.f[1])*H[0]+"px";qa.top=(t.f[2]-P)*H[1]+"px";t.a||(t.a=document.createDocumentFragment());t.a.appendChild(fa);t.b[A]=v}}y.a&&(y.target.appendChild(y.a),
-y.a=null)}l=Object.keys(this.b).map(Number);l.sort(Ha);B=zb();G=0;for(z=l.length;G<z;++G)if(C=l[G],y=this.b[C],C in u)if(t=y.I(),E=y.ka(),Cg(B,b.size[0]/2,b.size[1]/2,t/e.resolution,t/e.resolution,e.rotation,(E[0]-q[0])/t,(q[1]-E[1])/t),y.setTransform(B),C in w){for(--C;0<=C;--C)if(C in this.b){E=this.b[C].target;E.parentNode&&E.parentNode.insertBefore(y.target,E.nextSibling);break}0>C&&fe(this.target,y.target,0)}else{if(!b.viewHints[0]&&!b.viewHints[1]){v=Je(y.g,r,y.f[0],D);C=[];t=E=void 0;for(t in y.b)E=
-y.b[t],J=E.L,gd(v,J[1],J[2])||C.push(E);J=v=void 0;v=0;for(J=C.length;v<J;++v)E=C[v],t=E.L.toString(),ge(E.T(y)),delete y.b[t]}}else ge(y.target),delete this.b[C];c.opacity!=this.h&&(this.h=this.target.style.opacity=c.opacity);c.visible&&!this.c&&(ne(this.target,!0),this.c=!0);Kg(b.usedTiles,h,m,n);Mg(b,h,k,d,f,r,m,g.get("preload"));Hg(b,h);Jg(b,h);return!0};
-function gk(b,c){this.target=document.createElement("DIV");this.target.style.position="absolute";this.target.style.width="100%";this.target.style.height="100%";this.g=b;this.f=c;this.h=bc(Ie(b,c));this.l=b.I(c[0]);this.b={};this.a=null;this.c=Bb();this.i=[0,0]}gk.prototype.ka=function(){return this.h};gk.prototype.I=function(){return this.l};gk.prototype.setTransform=function(b){Dg(b,this.c)||(pf(this.target,b),Cb(this.c,b))};function hk(b){this.g=lf();var c=this.g.canvas;c.style.maxWidth="none";c.style.position="absolute";ek.call(this,b,c);this.b=!1;this.h=-1;this.o=NaN;this.i=Jb();this.c=this.j=null;this.w=zb();this.u=zb()}M(hk,ek);p=hk.prototype;p.Fb=function(){var b=this.g.canvas;b.width=b.width;this.h=0};
-p.Kc=function(b,c){var d=b.viewState,e=d.center,f=d.rotation,g=d.resolution,d=b.pixelRatio,h=b.size[0],k=b.size[1],l=h*d,m=k*d,e=Cg(this.w,d*h/2,d*k/2,d/g,-d/g,-f,-e[0],-e[1]),g=this.g;g.canvas.width=l;g.canvas.height=m;h=Cg(this.u,0,0,1/d,1/d,0,-(l-h)/2*d,-(m-k)/2*d);pf(g.canvas,h);ik(this,"precompose",b,e);(h=this.c)&&!h.c()&&(g.globalAlpha=c.opacity,h.f(g,d,e,f,c.eb?b.skippedFeatureUids:{}),ik(this,"render",b,e));ik(this,"postcompose",b,e)};
-function ik(b,c,d,e){var f=b.g;b=b.a;nb(b,c)&&(e=new Gi(f,d.pixelRatio,d.extent,e,d.viewState.rotation),S(b,new zg(c,b,e,d,f,null)))}p.fb=function(b,c,d,e){if(this.c){var f=this.a,g={};return this.c.g(b,c.viewState.resolution,c.viewState.rotation,{},function(b){var c=I(b).toString();if(!(c in g))return g[c]=!0,d.call(e,b,f)})}};p.Mc=function(){Gg(this)};
-p.Lc=function(b){function c(b){var c,e=b.c;e?c=e.call(b,l):(e=d.g)&&(c=e(b,l));if(c){if(c){e=!1;if(Array.isArray(c))for(var f=0,g=c.length;f<g;++f)e=pj(n,b,c[f],oj(l,m),this.Mc,this)||e;else e=pj(n,b,c,oj(l,m),this.Mc,this)||e;b=e}else b=!1;this.b=this.b||b}}var d=this.a,e=d.V();Ig(b.attributions,e.i);Jg(b,e);var f=b.viewHints[0],g=b.viewHints[1],h=d.i,k=d.j;if(!this.b&&!h&&f||!k&&g)return!0;var g=b.extent,h=b.viewState,f=h.projection,l=h.resolution,m=b.pixelRatio;b=d.f;k=d.a;h=d.get("renderOrder");
-void 0===h&&(h=nj);g=Lb(g,k*l);if(!this.b&&this.o==l&&this.h==b&&this.j==h&&Nb(this.i,g))return!0;this.c=null;this.b=!1;var n=new jj(.5*l/m,g,l,d.a);Tj(e,g,l,f);if(h){var q=[];Rj(e,g,function(b){q.push(b)},this);q.sort(h);q.forEach(c,this)}else Rj(e,g,c,this);kj(n);this.o=l;this.h=b;this.j=h;this.i=g;this.c=n;return!0};function jk(b,c){Tg.call(this,0,c);this.c=lf();var d=this.c.canvas;d.style.position="absolute";d.style.width="100%";d.style.height="100%";d.className="ol-unselectable";fe(b,d,0);this.g=zb();this.a=document.createElement("DIV");this.a.className="ol-unselectable";d=this.a.style;d.position="absolute";d.width="100%";d.height="100%";Q(this.a,"touchstart",lb);fe(b,this.a,0);this.b=!0}M(jk,Tg);jk.prototype.J=function(){ge(this.a);jk.$.J.call(this)};
-jk.prototype.Ib=function(b){if(b instanceof X)b=new fk(b);else if(b instanceof Y)b=new hk(b);else return null;return b};function kk(b,c,d){var e=b.h;if(nb(e,c)){var f=d.extent,g=d.pixelRatio,h=d.viewState,k=h.rotation,l=b.c,m=l.canvas;Cg(b.g,m.width/2,m.height/2,g/h.resolution,-g/h.resolution,-h.rotation,-h.center[0],-h.center[1]);b=new Gi(l,g,f,b.g,k);S(e,new zg(c,e,b,d,l,null))}}jk.prototype.U=function(){return"dom"};
-jk.prototype.sb=function(b){if(b){var c=this.h;if(nb(c,"precompose")||nb(c,"postcompose")){var c=this.c.canvas,d=b.pixelRatio;c.width=b.size[0]*d;c.height=b.size[1]*d}kk(this,"precompose",b);c=b.layerStatesArray;Na(c);var d=b.viewState.resolution,e,f,g,h;e=0;for(f=c.length;e<f;++e)h=c[e],g=h.layer,g=Wg(this,g),fe(this.a,g.target,e),Bg(h,d)&&"ready"==h.Zb?g.Lc(b,h)&&g.Kc(b,h):g.Fb();var c=b.layerStates,k;for(k in this.f)k in c||(g=this.f[k],ge(g.target));this.b||(ne(this.a,!0),this.b=!0);Ug(b);Xg(this,
-b);b.postRenderFunctions.push(Vg);kk(this,"postcompose",b)}else this.b&&(ne(this.a,!1),this.b=!1)};function lk(b){this.a=b}function mk(b){this.a=b}M(mk,lk);mk.prototype.U=function(){return 35632};function nk(b){this.a=b}M(nk,lk);nk.prototype.U=function(){return 35633};function ok(){this.a="precision mediump float;varying vec2 a;varying float b;uniform float k;uniform sampler2D l;void main(void){vec4 texColor=texture2D(l,a);gl_FragColor.rgb=texColor.rgb;float alpha=texColor.a*b*k;if(alpha==0.0){discard;}gl_FragColor.a=alpha;}"}M(ok,mk);aa(ok);
-function pk(){this.a="varying vec2 a;varying float b;attribute vec2 c;attribute vec2 d;attribute vec2 e;attribute float f;attribute float g;uniform mat4 h;uniform mat4 i;uniform mat4 j;void main(void){mat4 offsetMatrix=i;if(g==1.0){offsetMatrix=i*j;}vec4 offsets=offsetMatrix*vec4(e,0.,0.);gl_Position=h*vec4(c,0.,1.)+offsets;a=d;b=f;}"}M(pk,nk);aa(pk);
-function qk(b,c){this.i=b.getUniformLocation(c,"j");this.j=b.getUniformLocation(c,"i");this.h=b.getUniformLocation(c,"k");this.l=b.getUniformLocation(c,"h");this.a=b.getAttribLocation(c,"e");this.b=b.getAttribLocation(c,"f");this.c=b.getAttribLocation(c,"c");this.f=b.getAttribLocation(c,"g");this.g=b.getAttribLocation(c,"d")};function rk(b){this.a=void 0!==b?b:[]};function sk(b,c){this.A=b;this.a=c;this.b={};this.g={};this.c={};this.i=this.j=this.h=this.l=null;(this.f=0<=oa.indexOf("OES_element_index_uint"))&&c.getExtension("OES_element_index_uint");Q(this.A,"webglcontextlost",this.o,this);Q(this.A,"webglcontextrestored",this.s,this)}M(sk,ib);
-function tk(b,c,d){var e=b.a,f=d.a,g=String(I(d));if(g in b.b)e.bindBuffer(c,b.b[g].buffer);else{var h=e.createBuffer();e.bindBuffer(c,h);var k;34962==c?k=new Float32Array(f):34963==c&&(k=b.f?new Uint32Array(f):new Uint16Array(f));e.bufferData(c,k,35044);b.b[g]={We:d,buffer:h}}}function uk(b,c){var d=b.a,e=String(I(c)),f=b.b[e];d.isContextLost()||d.deleteBuffer(f.buffer);delete b.b[e]}
-sk.prototype.J=function(){hb(this.A);var b=this.a;if(!b.isContextLost()){for(var c in this.b)b.deleteBuffer(this.b[c].buffer);for(c in this.c)b.deleteProgram(this.c[c]);for(c in this.g)b.deleteShader(this.g[c]);b.deleteFramebuffer(this.h);b.deleteRenderbuffer(this.i);b.deleteTexture(this.j)}};
-function vk(b){if(!b.h){var c=b.a,d=c.createFramebuffer();c.bindFramebuffer(c.FRAMEBUFFER,d);var e=wk(c,1,1),f=c.createRenderbuffer();c.bindRenderbuffer(c.RENDERBUFFER,f);c.renderbufferStorage(c.RENDERBUFFER,c.DEPTH_COMPONENT16,1,1);c.framebufferTexture2D(c.FRAMEBUFFER,c.COLOR_ATTACHMENT0,c.TEXTURE_2D,e,0);c.framebufferRenderbuffer(c.FRAMEBUFFER,c.DEPTH_ATTACHMENT,c.RENDERBUFFER,f);c.bindTexture(c.TEXTURE_2D,null);c.bindRenderbuffer(c.RENDERBUFFER,null);c.bindFramebuffer(c.FRAMEBUFFER,null);b.h=d;
-b.j=e;b.i=f}return b.h}function xk(b,c){var d=String(I(c));if(d in b.g)return b.g[d];var e=b.a,f=e.createShader(c.U());e.shaderSource(f,c.a);e.compileShader(f);return b.g[d]=f}function yk(b,c,d){var e=I(c)+"/"+I(d);if(e in b.c)return b.c[e];var f=b.a,g=f.createProgram();f.attachShader(g,xk(b,c));f.attachShader(g,xk(b,d));f.linkProgram(g);return b.c[e]=g}sk.prototype.o=function(){Ya(this.b);Ya(this.g);Ya(this.c);this.i=this.j=this.h=this.l=null};sk.prototype.s=function(){};
-function zk(b,c){if(c==b.l)return!1;b.a.useProgram(c);b.l=c;return!0}function Ak(b,c,d){var e=b.createTexture();b.bindTexture(b.TEXTURE_2D,e);b.texParameteri(b.TEXTURE_2D,b.TEXTURE_MAG_FILTER,b.LINEAR);b.texParameteri(b.TEXTURE_2D,b.TEXTURE_MIN_FILTER,b.LINEAR);void 0!==c&&b.texParameteri(3553,10242,c);void 0!==d&&b.texParameteri(3553,10243,d);return e}function wk(b,c,d){var e=Ak(b,void 0,void 0);b.texImage2D(b.TEXTURE_2D,0,b.RGBA,c,d,0,b.RGBA,b.UNSIGNED_BYTE,null);return e};function Bk(b,c){this.H=this.u=void 0;this.j=Yb(c);this.s=[];this.h=[];this.B=void 0;this.g=[];this.c=[];this.D=this.K=void 0;this.b=[];this.w=this.i=null;this.G=void 0;this.na=Bb();this.za=Bb();this.S=this.P=void 0;this.pa=Bb();this.ja=this.X=this.ba=void 0;this.ea=[];this.l=[];this.a=[];this.o=null;this.f=[];this.A=[];this.aa=void 0}M(Bk,yg);
-function Ck(b,c){var d=b.o,e=b.i,f=b.ea,g=b.l,h=c.a;return function(){if(!h.isContextLost()){var b,l;b=0;for(l=f.length;b<l;++b)h.deleteTexture(f[b]);b=0;for(l=g.length;b<l;++b)h.deleteTexture(g[b])}uk(c,d);uk(c,e)}}
-function Dk(b,c,d,e){var f=b.u,g=b.H,h=b.B,k=b.K,l=b.D,m=b.G,n=b.P,q=b.S,r=b.ba?1:0,u=b.X,w=b.ja,y=b.aa,z=Math.cos(u),u=Math.sin(u),D=b.b.length,t=b.a.length,v,B,E,C,G,J;for(v=0;v<d;v+=e)G=c[v]-b.j[0],J=c[v+1]-b.j[1],B=t/8,E=-w*f,C=-w*(h-g),b.a[t++]=G,b.a[t++]=J,b.a[t++]=E*z-C*u,b.a[t++]=E*u+C*z,b.a[t++]=n/l,b.a[t++]=(q+h)/k,b.a[t++]=m,b.a[t++]=r,E=w*(y-f),C=-w*(h-g),b.a[t++]=G,b.a[t++]=J,b.a[t++]=E*z-C*u,b.a[t++]=E*u+C*z,b.a[t++]=(n+y)/l,b.a[t++]=(q+h)/k,b.a[t++]=m,b.a[t++]=r,E=w*(y-f),C=w*g,b.a[t++]=
-G,b.a[t++]=J,b.a[t++]=E*z-C*u,b.a[t++]=E*u+C*z,b.a[t++]=(n+y)/l,b.a[t++]=q/k,b.a[t++]=m,b.a[t++]=r,E=-w*f,C=w*g,b.a[t++]=G,b.a[t++]=J,b.a[t++]=E*z-C*u,b.a[t++]=E*u+C*z,b.a[t++]=n/l,b.a[t++]=q/k,b.a[t++]=m,b.a[t++]=r,b.b[D++]=B,b.b[D++]=B+1,b.b[D++]=B+2,b.b[D++]=B,b.b[D++]=B+2,b.b[D++]=B+3}Bk.prototype.Ya=function(b,c){this.f.push(this.b.length);this.A.push(c);var d=b.a;Dk(this,d,d.length,b.b)};Bk.prototype.Za=function(b,c){this.f.push(this.b.length);this.A.push(c);var d=b.a;Dk(this,d,d.length,b.b)};
-function Ek(b,c){var d=c.a;b.s.push(b.b.length);b.h.push(b.b.length);b.o=new rk(b.a);tk(c,34962,b.o);b.i=new rk(b.b);tk(c,34963,b.i);var e={};Fk(b.ea,b.g,e,d);Fk(b.l,b.c,e,d);b.u=void 0;b.H=void 0;b.B=void 0;b.g=null;b.c=null;b.K=void 0;b.D=void 0;b.b=null;b.G=void 0;b.P=void 0;b.S=void 0;b.ba=void 0;b.X=void 0;b.ja=void 0;b.a=null;b.aa=void 0}
-function Fk(b,c,d,e){var f,g,h,k,l=c.length;for(k=0;k<l;++k){g=c[k];h=I(g).toString();if(h in d)f=d[h];else{f=e;var m=Ak(f,33071,33071);f.texImage2D(f.TEXTURE_2D,0,f.RGBA,f.RGBA,f.UNSIGNED_BYTE,g);f=m;d[h]=f}b[k]=f}}
-function Gk(b,c,d,e,f,g,h,k,l,m,n){var q=c.a;tk(c,34962,b.o);tk(c,34963,b.i);var r=ok.ua(),u=pk.ua(),u=yk(c,r,u);b.w?r=b.w:(r=new qk(q,u),b.w=r);zk(c,u);q.enableVertexAttribArray(r.c);q.vertexAttribPointer(r.c,2,5126,!1,32,0);q.enableVertexAttribArray(r.a);q.vertexAttribPointer(r.a,2,5126,!1,32,8);q.enableVertexAttribArray(r.g);q.vertexAttribPointer(r.g,2,5126,!1,32,16);q.enableVertexAttribArray(r.b);q.vertexAttribPointer(r.b,1,5126,!1,32,24);q.enableVertexAttribArray(r.f);q.vertexAttribPointer(r.f,
-1,5126,!1,32,28);u=b.pa;Cg(u,0,0,2/(e*g[0]),2/(e*g[1]),-f,-(d[0]-b.j[0]),-(d[1]-b.j[1]));d=b.za;e=2/g[0];g=2/g[1];Db(d);d[0]=e;d[5]=g;d[10]=1;d[15]=1;g=b.na;Db(g);0!==f&&Hb(g,-f);q.uniformMatrix4fv(r.l,!1,u);q.uniformMatrix4fv(r.j,!1,d);q.uniformMatrix4fv(r.i,!1,g);q.uniform1f(r.h,h);var w;if(void 0===l)Hk(b,q,c,k,b.ea,b.s);else{if(m)a:{f=c.f?5125:5123;c=c.f?4:2;g=b.f.length-1;for(h=b.l.length-1;0<=h;--h)for(q.bindTexture(3553,b.l[h]),m=0<h?b.h[h-1]:0,u=b.h[h];0<=g&&b.f[g]>=m;){w=b.f[g];d=b.A[g];
-e=I(d).toString();if(void 0===k[e]&&d.M()&&(void 0===n||ac(n,d.M().C()))&&(q.clear(q.COLOR_BUFFER_BIT|q.DEPTH_BUFFER_BIT),q.drawElements(4,u-w,f,w*c),u=l(d))){b=u;break a}u=w;g--}b=void 0}else q.clear(q.COLOR_BUFFER_BIT|q.DEPTH_BUFFER_BIT),Hk(b,q,c,k,b.l,b.h),b=(b=l(null))?b:void 0;w=b}q.disableVertexAttribArray(r.c);q.disableVertexAttribArray(r.a);q.disableVertexAttribArray(r.g);q.disableVertexAttribArray(r.b);q.disableVertexAttribArray(r.f);return w}
-function Hk(b,c,d,e,f,g){var h=d.f?5125:5123;d=d.f?4:2;if($a(e)){var k;b=0;e=f.length;for(k=0;b<e;++b){c.bindTexture(3553,f[b]);var l=g[b];c.drawElements(4,l-k,h,k*d);k=l}}else{k=0;var m,l=0;for(m=f.length;l<m;++l){c.bindTexture(3553,f[l]);for(var n=0<l?g[l-1]:0,q=g[l],r=n;k<b.f.length&&b.f[k]<=q;){var u=I(b.A[k]).toString();void 0!==e[u]?(r!==n&&c.drawElements(4,n-r,h,r*d),n=r=k===b.f.length-1?q:b.f[k+1]):n=k===b.f.length-1?q:b.f[k+1];k++}r!==n&&c.drawElements(4,n-r,h,r*d)}}}
-Bk.prototype.Ha=function(b){var c=b.jb(),d=b.T(1),e=b.wc(),f=b.Wb(1),g=b.l,h=b.ka(),k=b.i,l=b.Y(),m=b.Pa();b=b.gb;var n;0===this.g.length?this.g.push(d):(n=this.g[this.g.length-1],I(n)!=I(d)&&(this.s.push(this.b.length),this.g.push(d)));0===this.c.length?this.c.push(f):(n=this.c[this.c.length-1],I(n)!=I(f)&&(this.h.push(this.b.length),this.c.push(f)));this.u=c[0];this.H=c[1];this.B=m[1];this.K=e[1];this.D=e[0];this.G=g;this.P=h[0];this.S=h[1];this.X=l;this.ba=k;this.ja=b;this.aa=m[0]};
-function Ik(b,c,d){this.l=c;this.i=b;this.h=d;this.b={}}function Jk(b,c){var d=[],e;for(e in b.b)d.push(Ck(b.b[e],c));return function(){for(var b=d.length,c,e=0;e<b;e++)c=d[e].apply(this,arguments);return c}}function Kk(b,c){for(var d in b.b)Ek(b.b[d],c)}Ik.prototype.a=function(b,c){var d=this.b[c];void 0===d&&(d=new Lk[c](this.i,this.l),this.b[c]=d);return d};Ik.prototype.c=function(){return $a(this.b)};
-Ik.prototype.f=function(b,c,d,e,f,g,h,k){var l,m;g=0;for(l=Ui.length;g<l;++g)m=this.b[Ui[g]],void 0!==m&&Gk(m,b,c,d,e,f,h,k,void 0,!1)};function Mk(b,c,d,e,f,g,h,k,l,m){var n=Nk,q,r;for(q=Ui.length-1;0<=q;--q)if(r=b.b[Ui[q]],void 0!==r&&(r=Gk(r,c,d,e,f,n,g,h,k,l,m)))return r}
-Ik.prototype.g=function(b,c,d,e,f,g,h,k,l,m){var n=c.a;n.bindFramebuffer(n.FRAMEBUFFER,vk(c));var q;void 0!==this.h&&(q=Lb(Qb(b),e*this.h));return Mk(this,c,b,e,f,k,l,function(b){var c=new Uint8Array(4);n.readPixels(0,0,1,1,n.RGBA,n.UNSIGNED_BYTE,c);if(0<c[3]&&(b=m(b)))return b},!0,q)};function Ok(b,c,d,e,f,g,h){var k=d.a;k.bindFramebuffer(k.FRAMEBUFFER,vk(d));return void 0!==Mk(b,d,c,e,f,g,h,function(){var b=new Uint8Array(4);k.readPixels(0,0,1,1,k.RGBA,k.UNSIGNED_BYTE,b);return 0<b[3]},!1)}
-var Lk={Image:Bk},Nk=[1,1];function Pk(b,c,d,e,f,g){this.a=b;this.f=c;this.c=g;this.l=f;this.h=e;this.g=d;this.b=null}M(Pk,yg);Pk.prototype.Za=function(b,c){var d=this.a,e=(new Ik(1,this.c)).a(0,"Image");e.Ha(this.b);e.Za(b,c);Ek(e,d);Gk(e,this.a,this.f,this.g,this.h,this.l,1,{},void 0,!1);Ck(e,d)()};Pk.prototype.Ya=function(b,c){var d=this.a,e=(new Ik(1,this.c)).a(0,"Image");e.Ha(this.b);e.Ya(b,c);Ek(e,d);Gk(e,this.a,this.f,this.g,this.h,this.l,1,{},void 0,!1);Ck(e,d)()};Pk.prototype.Ha=function(b){this.b=b};function Qk(){this.a="precision mediump float;varying vec2 a;uniform float f;uniform sampler2D g;void main(void){vec4 texColor=texture2D(g,a);gl_FragColor.rgb=texColor.rgb;gl_FragColor.a=texColor.a*f;}"}M(Qk,mk);aa(Qk);function Rk(){this.a="varying vec2 a;attribute vec2 b;attribute vec2 c;uniform mat4 d;uniform mat4 e;void main(void){gl_Position=e*vec4(b,0.,1.);a=(d*vec4(c,0.,1.)).st;}"}M(Rk,nk);aa(Rk);
-function Sk(b,c){this.f=b.getUniformLocation(c,"f");this.c=b.getUniformLocation(c,"e");this.h=b.getUniformLocation(c,"d");this.g=b.getUniformLocation(c,"g");this.a=b.getAttribLocation(c,"b");this.b=b.getAttribLocation(c,"c")};function Tk(b,c){Fg.call(this,c);this.c=b;this.G=new rk([-1,-1,0,0,1,-1,1,0,-1,1,0,1,1,1,1,1]);this.i=this.ya=null;this.j=void 0;this.D=zb();this.P=Bb();this.o=null}M(Tk,Fg);
-function Uk(b,c,d){var e=b.c.c;if(void 0===b.j||b.j!=d){c.postRenderFunctions.push(na(function(b,c,d){b.isContextLost()||(b.deleteFramebuffer(c),b.deleteTexture(d))},e,b.i,b.ya));c=wk(e,d,d);var f=e.createFramebuffer();e.bindFramebuffer(36160,f);e.framebufferTexture2D(36160,36064,3553,c,0);b.ya=c;b.i=f;b.j=d}else e.bindFramebuffer(36160,b.i)}
-Tk.prototype.Nc=function(b,c,d){Vk(this,"precompose",d,b);tk(d,34962,this.G);var e=d.a,f=Qk.ua(),g=Rk.ua(),f=yk(d,f,g);this.o?g=this.o:this.o=g=new Sk(e,f);zk(d,f)&&(e.enableVertexAttribArray(g.a),e.vertexAttribPointer(g.a,2,5126,!1,16,0),e.enableVertexAttribArray(g.b),e.vertexAttribPointer(g.b,2,5126,!1,16,8),e.uniform1i(g.g,0));e.uniformMatrix4fv(g.h,!1,this.D);e.uniformMatrix4fv(g.c,!1,this.P);e.uniform1f(g.f,c.opacity);e.bindTexture(3553,this.ya);e.drawArrays(5,0,4);Vk(this,"postcompose",d,b)};
-function Vk(b,c,d,e){b=b.a;if(nb(b,c)){var f=e.viewState;S(b,new zg(c,b,new Pk(d,f.center,f.resolution,f.rotation,e.size,e.extent),e,null,d))}}Tk.prototype.s=function(){this.i=this.ya=null;this.j=void 0};function Wk(){this.a="precision mediump float;varying vec2 a;uniform sampler2D e;void main(void){gl_FragColor=texture2D(e,a);}"}M(Wk,mk);aa(Wk);function Xk(){this.a="varying vec2 a;attribute vec2 b;attribute vec2 c;uniform vec4 d;void main(void){gl_Position=vec4(b*d.xy+d.zw,0.,1.);a=c;}"}M(Xk,nk);aa(Xk);function Yk(b,c){this.f=b.getUniformLocation(c,"e");this.c=b.getUniformLocation(c,"d");this.a=b.getAttribLocation(c,"b");this.b=b.getAttribLocation(c,"c")};function Zk(b,c){Tk.call(this,b,c);this.B=Wk.ua();this.S=Xk.ua();this.b=null;this.w=new rk([0,0,0,1,1,0,1,1,0,1,0,0,1,1,1,0]);this.u=this.g=null;this.h=-1;this.K=[0,0]}M(Zk,Tk);Zk.prototype.J=function(){uk(this.c.g,this.w);Zk.$.J.call(this)};Zk.prototype.l=function(b,c,d){var e=this.c;return function(f,g){return Ve(b,c,f,g,function(b){var c=ve(e.b,b.getKey());c&&(d[f]||(d[f]={}),d[f][b.L.toString()]=b);return c})}};Zk.prototype.s=function(){Zk.$.s.call(this);this.b=null};
-Zk.prototype.Oc=function(b,c,d){var e=this.c,f=d.a,g=b.viewState,h=g.projection,k=this.a,l=k.V(),m=l.la(h),n=Pe(m,g.resolution),q=m.I(n),r=We(l,n,b.pixelRatio,h),u=r[0]/tb(Oe(m,n),this.K)[0],w=q/u,y=l.kb(h),z=g.center,D;q==g.resolution?(z=Lg(z,q,b.size),D=Zb(z,q,g.rotation,b.size)):D=b.extent;q=Le(m,D,q);if(this.g&&hd(this.g,q)&&this.h==l.f)w=this.u;else{var t=[q.ha(),q.c-q.b+1],v=Math.pow(2,Math.ceil(Math.log(Math.max(t[0]*r[0],t[1]*r[1]))/Math.LN2)),t=w*v,B=m.ka(n),E=B[0]+q.a*r[0]*w,w=B[1]+q.b*
-r[1]*w,w=[E,w,E+t,w+t];Uk(this,b,v);f.viewport(0,0,v,v);f.clearColor(0,0,0,0);f.clear(16384);f.disable(3042);v=yk(d,this.B,this.S);zk(d,v);this.b||(this.b=new Yk(f,v));tk(d,34962,this.w);f.enableVertexAttribArray(this.b.a);f.vertexAttribPointer(this.b.a,2,5126,!1,16,0);f.enableVertexAttribArray(this.b.b);f.vertexAttribPointer(this.b.b,2,5126,!1,16,8);f.uniform1i(this.b.f,0);d={};d[n]={};var C=this.l(l,h,d),G=ni(k),v=!0,E=Jb(),J=new fd(0,0,0,0),A,H,O;for(H=q.a;H<=q.f;++H)for(O=q.b;O<=q.c;++O){B=Ng(l,
-n,H,O,u,h);if(void 0!==c.extent&&(A=Ie(m,B.L,E),!ac(A,c.extent)))continue;A=B.N();A=2==A||4==A||3==A&&!G;!A&&B.a&&(B=B.a);A=B.N();if(2==A){if(ve(e.b,B.getKey())){d[n][B.L.toString()]=B;continue}}else if(4==A||3==A&&!G)continue;v=!1;A=He(m,B.L,C,J,E);A||(B=Ke(m,B.L,J,E))&&C(n+1,B)}c=Object.keys(d).map(Number);c.sort(Ha);for(var C=new Float32Array(4),P,L,K,G=0,J=c.length;G<J;++G)for(P in L=d[c[G]],L)B=L[P],A=Ie(m,B.L,E),H=2*(A[2]-A[0])/t,O=2*(A[3]-A[1])/t,K=2*(A[0]-w[0])/t-1,A=2*(A[1]-w[1])/t-1,yb(C,
-H,O,K,A),f.uniform4fv(this.b.c,C),$k(e,B,r,y*u),f.drawArrays(5,0,4);v?(this.g=q,this.u=w,this.h=l.f):(this.u=this.g=null,this.h=-1,b.animate=!0)}Kg(b.usedTiles,l,n,q);var fa=e.i;Mg(b,l,m,u,h,D,n,k.get("preload"),function(b){var c;(c=2!=b.N()||ve(e.b,b.getKey()))||(c=b.getKey()in fa.f);c||fa.c([b,Ne(m,b.L),m.I(b.L[0]),r,y*u])},this);Hg(b,l);Jg(b,l);f=this.D;Db(f);Fb(f,(z[0]-w[0])/(w[2]-w[0]),(z[1]-w[1])/(w[3]-w[1]));0!==g.rotation&&Hb(f,g.rotation);Gb(f,b.size[0]*g.resolution/(w[2]-w[0]),b.size[1]*
-g.resolution/(w[3]-w[1]));Fb(f,-.5,-.5);return!0};function al(b,c){Tk.call(this,b,c);this.h=!1;this.K=-1;this.B=NaN;this.u=Jb();this.g=this.b=this.w=null}M(al,Tk);p=al.prototype;p.Nc=function(b,c,d){this.g=c;var e=b.viewState,f=this.b;f&&!f.c()&&f.f(d,e.center,e.resolution,e.rotation,b.size,b.pixelRatio,c.opacity,c.eb?b.skippedFeatureUids:{})};p.J=function(){var b=this.b;b&&(Jk(b,this.c.g)(),this.b=null);al.$.J.call(this)};
-p.fb=function(b,c,d,e){if(this.b&&this.g){var f=c.viewState,g=this.a,h={};return this.b.g(b,this.c.g,f.center,f.resolution,f.rotation,c.size,c.pixelRatio,this.g.opacity,{},function(b){var c=I(b).toString();if(!(c in h))return h[c]=!0,d.call(e,b,g)})}};p.Ic=function(b,c){if(this.b&&this.g){var d=c.viewState;return Ok(this.b,b,this.c.g,d.resolution,d.rotation,this.g.opacity,c.skippedFeatureUids)}return!1};p.Pc=function(){Gg(this)};
-p.Oc=function(b,c,d){function e(b){var c,d=b.c;d?c=d.call(b,m):(d=f.g)&&(c=d(b,m));if(c){if(c){d=!1;if(Array.isArray(c))for(var e=0,g=c.length;e<g;++e)d=pj(r,b,c[e],oj(m,n),this.Pc,this)||d;else d=pj(r,b,c,oj(m,n),this.Pc,this)||d;b=d}else b=!1;this.h=this.h||b}}var f=this.a;c=f.V();Ig(b.attributions,c.i);Jg(b,c);var g=b.viewHints[0],h=b.viewHints[1],k=f.i,l=f.j;if(!this.h&&!k&&g||!l&&h)return!0;var h=b.extent,k=b.viewState,g=k.projection,m=k.resolution,n=b.pixelRatio,k=f.f,q=f.a,l=f.get("renderOrder");
-void 0===l&&(l=nj);h=Lb(h,q*m);if(!this.h&&this.B==m&&this.K==k&&this.w==l&&Nb(this.u,h))return!0;this.b&&b.postRenderFunctions.push(Jk(this.b,d));this.h=!1;var r=new Ik(.5*m/n,h,f.a);Tj(c,h,m,g);if(l){var u=[];Rj(c,h,function(b){u.push(b)},this);u.sort(l);u.forEach(e,this)}else Rj(c,h,e,this);Kk(r,d);this.B=m;this.K=k;this.w=l;this.u=h;this.b=r;return!0};function bl(b,c){Tg.call(this,0,c);this.a=document.createElement("CANVAS");this.a.style.width="100%";this.a.style.height="100%";this.a.className="ol-unselectable";fe(b,this.a,0);this.s=this.u=0;this.H=lf();this.j=!0;this.c=rf(this.a,{antialias:!0,depth:!1,failIfMajorPerformanceCaveat:!0,preserveDrawingBuffer:!1,stencil:!0});this.g=new sk(this.a,this.c);Q(this.a,"webglcontextlost",this.me,this);Q(this.a,"webglcontextrestored",this.ne,this);this.b=new ue;this.o=null;this.i=new Yg(function(b){var c=
-b[1];b=b[2];var f=c[0]-this.o[0],c=c[1]-this.o[1];return 65536*Math.log(b)+Math.sqrt(f*f+c*c)/b}.bind(this),function(b){return b[0].getKey()});this.w=function(){if(0!==this.i.a.length){bh(this.i);var b=Zg(this.i);$k(this,b[0],b[3],b[4])}return!1}.bind(this);this.l=0;cl(this)}M(bl,Tg);
-function $k(b,c,d,e){var f=b.c,g=c.getKey();if(ve(b.b,g))b=b.b.get(g),f.bindTexture(3553,b.ya),9729!=b.Cc&&(f.texParameteri(3553,10240,9729),b.Cc=9729),9729!=b.Dc&&(f.texParameteri(3553,10240,9729),b.Dc=9729);else{var h=f.createTexture();f.bindTexture(3553,h);if(0<e){var k=b.H.canvas,l=b.H;b.u!==d[0]||b.s!==d[1]?(k.width=d[0],k.height=d[1],b.u=d[0],b.s=d[1]):l.clearRect(0,0,d[0],d[1]);l.drawImage(c.T(),e,e,d[0],d[1],0,0,d[0],d[1]);f.texImage2D(3553,0,6408,6408,5121,k)}else f.texImage2D(3553,0,6408,
-6408,5121,c.T());f.texParameteri(3553,10240,9729);f.texParameteri(3553,10241,9729);f.texParameteri(3553,10242,33071);f.texParameteri(3553,10243,33071);b.b.set(g,{ya:h,Cc:9729,Dc:9729})}}p=bl.prototype;p.Ib=function(b){return b instanceof X?new Zk(this,b):b instanceof Y?new al(this,b):null};function dl(b,c,d){var e=b.h;if(nb(e,c)){b=b.g;var f=d.viewState;S(e,new zg(c,e,new Pk(b,f.center,f.resolution,f.rotation,d.size,d.extent),d,null,b))}}
-p.J=function(){var b=this.c;b.isContextLost()||we(this.b,function(c){c&&b.deleteTexture(c.ya)});jb(this.g);bl.$.J.call(this)};p.ld=function(b,c){for(var d=this.c,e;1024<this.b.f-this.l;){if(e=this.b.a.Ia)d.deleteTexture(e.ya);else if(+this.b.a.Qb==c.index)break;else--this.l;this.b.pop()}};p.U=function(){return"webgl"};p.me=function(b){b.preventDefault();this.b.clear();this.l=0;b=this.f;for(var c in b)b[c].s()};p.ne=function(){cl(this);this.h.render()};
-function cl(b){b=b.c;b.activeTexture(33984);b.blendFuncSeparate(770,771,1,771);b.disable(2884);b.disable(2929);b.disable(3089);b.disable(2960)}
-p.sb=function(b){var c=this.g,d=this.c;if(d.isContextLost())return!1;if(!b)return this.j&&(ne(this.a,!1),this.j=!1),!1;this.o=b.focus;this.b.set((-b.index).toString(),null);++this.l;dl(this,"precompose",b);var e=[],f=b.layerStatesArray;Na(f);var g=b.viewState.resolution,h,k,l,m;h=0;for(k=f.length;h<k;++h)m=f[h],Bg(m,g)&&"ready"==m.Zb&&(l=Wg(this,m.layer),l.Oc(b,m,c)&&e.push(m));f=b.size[0]*b.pixelRatio;g=b.size[1]*b.pixelRatio;if(this.a.width!=f||this.a.height!=g)this.a.width=f,this.a.height=g;d.bindFramebuffer(36160,
-null);d.clearColor(0,0,0,0);d.clear(16384);d.enable(3042);d.viewport(0,0,this.a.width,this.a.height);h=0;for(k=e.length;h<k;++h)m=e[h],l=Wg(this,m.layer),l.Nc(b,m,c);this.j||(ne(this.a,!0),this.j=!0);Ug(b);1024<this.b.f-this.l&&b.postRenderFunctions.push(this.ld.bind(this));0!==this.i.a.length&&(b.postRenderFunctions.push(this.w),b.animate=!0);dl(this,"postcompose",b);Xg(this,b);b.postRenderFunctions.push(Vg)};
-p.Vb=function(b,c,d,e,f,g){var h;if(this.c.isContextLost())return!1;var k=c.viewState,l=c.layerStatesArray,m;for(m=l.length-1;0<=m;--m){h=l[m];var n=h.layer;if(Bg(h,k.resolution)&&f.call(g,n)&&(h=Wg(this,n).fb(b,c,d,e)))return h}};p.Jc=function(b,c,d,e){var f=!1;if(this.c.isContextLost())return!1;var g=c.viewState,h=c.layerStatesArray,k;for(k=h.length-1;0<=k;--k){var l=h[k],m=l.layer;if(Bg(l,g.resolution)&&d.call(e,m)&&(f=Wg(this,m).Ic(b,c)))return!0}return f};var el=["canvas","webgl","dom"];
-function Z(b){T.call(this);var c=fl(b);this.Ja=void 0!==b.loadTilesWhileAnimating?b.loadTilesWhileAnimating:!1;this.vb=void 0!==b.loadTilesWhileInteracting?b.loadTilesWhileInteracting:!1;this.xb=void 0!==b.pixelRatio?b.pixelRatio:xf;this.wb=c.logos;this.pa=function(){this.h=void 0;this.Be.call(this,Date.now())}.bind(this);this.Aa=zb();this.yb=zb();this.Ba=0;this.b=null;this.ea=Jb();this.s=this.D=null;this.a=document.createElement("DIV");this.a.className="ol-viewport"+(Af?" ol-touch":"");this.a.style.position=
-"relative";this.a.style.overflow="hidden";this.a.style.width="100%";this.a.style.height="100%";this.a.style.msTouchAction="none";this.a.style.touchAction="none";this.o=document.createElement("DIV");this.o.className="ol-overlaycontainer";this.a.appendChild(this.o);this.j=document.createElement("DIV");this.j.className="ol-overlaycontainer-stopevent";b=["click","dblclick","mousedown","touchstart","mspointerdown",sg,"mousewheel","wheel"];for(var d=0,e=b.length;d<e;++d)Q(this.j,b[d],kb);this.a.appendChild(this.j);
-this.X=new kg(this);for(var f in vg)Q(this.X,vg[f],this.yc,this);this.S=c.keyboardEventTarget;this.i=null;Q(this.a,"wheel",this.Na,this);Q(this.a,"mousewheel",this.Na,this);this.G=c.controls;this.g=c.interactions;this.u=c.overlays;this.Tc={};this.B=new c.Ce(this.a,this);this.P=null;this.w=[];this.aa=[];this.na=new ch(this.ud.bind(this),this.Pd.bind(this));this.zb={};Q(this,rb("layergroup"),this.zd,this);Q(this,rb("view"),this.Qd,this);Q(this,rb("size"),this.Md,this);Q(this,rb("target"),this.Od,this);
-this.l(c.values);nd(this.G,function(b){b.setMap(this)},this);Q(this.G,"add",function(b){b.element.setMap(this)},this);Q(this.G,"remove",function(b){b.element.setMap(null)},this);nd(this.g,function(b){b.setMap(this)},this);Q(this.g,"add",function(b){b.element.setMap(this)},this);Q(this.g,"remove",function(b){b.element.setMap(null)},this);nd(this.u,this.gc,this);Q(this.u,"add",function(b){this.gc(b.element)},this);Q(this.u,"remove",function(b){var c=b.element.La();void 0!==c&&delete this.Tc[c.toString()];
-b.element.setMap(null)},this)}M(Z,T);p=Z.prototype;p.hd=function(b){this.g.push(b)};p.jd=function(b){gl(this).get("layers").push(b)};p.kd=function(b){this.u.push(b)};p.gc=function(b){var c=b.La();void 0!==c&&(this.Tc[c.toString()]=b);b.setMap(this)};p.fa=function(b){this.render();Array.prototype.push.apply(this.w,arguments)};
-p.J=function(){jb(this.X);jb(this.B);gb(this.a,"wheel",this.Na,this);gb(this.a,"mousewheel",this.Na,this);void 0!==this.c&&(x.removeEventListener("resize",this.c,!1),this.c=void 0);this.h&&(x.cancelAnimationFrame(this.h),this.h=void 0);this.set("target",null);Z.$.J.call(this)};p.od=function(b,c,d,e,f){if(this.b)return b=this.ta(b),this.B.Vb(b,this.b,c,void 0!==d?d:null,void 0!==e?e:cc,void 0!==f?f:null)};
-p.Sd=function(b,c,d){if(!this.b)return!1;b=this.ta(b);return this.B.Jc(b,this.b,void 0!==c?c:cc,void 0!==d?d:null)};p.vc=function(b){var c=this.a.getBoundingClientRect();b=b.changedTouches?b.changedTouches[0]:b;return[b.clientX-c.left,b.clientY-c.top]};p.Sb=function(){return this.get("target")};p.ab=function(){var b=this.Sb();return void 0!==b?Zd(b):null};p.ta=function(b){var c=this.b;return c?(b=b.slice(),Eg(c.pixelToCoordinateMatrix,b,b)):null};function gl(b){return b.get("layergroup")}
-function yh(b,c){var d=b.b;if(d){var e=c.slice(0,2);return Eg(d.coordinateToPixelMatrix,e,e)}return null}p.Oa=function(){return this.get("size")};p.O=function(){return this.get("view")};p.ud=function(b,c,d,e){var f=this.b;if(!(f&&c in f.wantedTiles&&f.wantedTiles[c][b.L.toString()]))return Infinity;b=d[0]-f.focus[0];d=d[1]-f.focus[1];return 65536*Math.log(e)+Math.sqrt(b*b+d*d)/e};p.Na=function(b,c){var d=new ig(c||b.type,this,b);this.yc(d)};
+for(var f=[],g,h,k,l;c;){g=0;for(h=c.children.length;g<h;g++)k=c.children[g],l=c.$?e(k):k.bbox,n(b,l)&&(c.$?d.push(k):m(b,l)?this.ac(k,d):f.push(k));c=f.pop()}return d},load:function(b){if(!b||!b.length)return this;if(b.length<this.ec){for(var c=0,d=b.length;c<d;c++)this.Ca(b[c]);return this}b=this.cc(b.slice(),0,b.length-1,0);this.data.children.length?this.data.height===b.height?this.fc(this.data,b):(this.data.height<b.height&&(c=this.data,this.data=b,b=c),this.dc(b,this.data.height-b.height-1,!0)):
+this.data=b;return this},Ca:function(b){b&&this.dc(b,this.data.height-1);return this},clear:function(){this.data={children:[],height:1,bbox:[Infinity,Infinity,-Infinity,-Infinity],$:!0};return this},remove:function(b){if(!b)return this;for(var c=this.data,d=this.da(b),e=[],f=[],g,h,k,l;c||e.length;){c||(c=e.pop(),h=e[e.length-1],g=f.pop(),l=!0);if(c.$&&(k=c.children.indexOf(b),-1!==k)){c.children.splice(k,1);e.push(c);this.dd(e);break}l||c.$||!m(c.bbox,d)?h?(g++,c=h.children[g],l=!1):c=null:(e.push(c),
+f.push(g),g=0,h=c,c=c.children[0])}return this},da:function(b){return b},Hb:function(b,c){return b[0]-c[0]},Ib:function(b,c){return b[1]-c[1]},toJSON:function(){return this.data},ac:function(b,c){for(var d=[];b;)b.$?c.push.apply(c,b.children):d.push.apply(d,b.children),b=d.pop();return c},cc:function(b,c,e,f){var g=e-c+1,h=this.Bb,k;if(g<=h)return k={children:b.slice(c,e+1),height:1,bbox:null,$:!0},d(k,this.da),k;f||(f=Math.ceil(Math.log(g)/Math.log(h)),h=Math.ceil(g/Math.pow(h,f-1)));k={children:[],
+height:f,bbox:null,$:!1};var g=Math.ceil(g/h),h=g*Math.ceil(Math.sqrt(h)),l,m,n;for(q(b,c,e,h,this.Hb);c<=e;c+=h)for(m=Math.min(c+h-1,e),q(b,c,m,g,this.Ib),l=c;l<=m;l+=g)n=Math.min(l+g-1,m),k.children.push(this.cc(b,l,n,f-1));d(k,this.da);return k},cd:function(b,c,d,e){for(var f,g,h,l,m,n,q,r;;){e.push(c);if(c.$||e.length-1===d)break;q=r=Infinity;f=0;for(g=c.children.length;f<g;f++)h=c.children[f],m=k(h.bbox),n=h.bbox,n=(Math.max(n[2],b[2])-Math.min(n[0],b[0]))*(Math.max(n[3],b[3])-Math.min(n[1],
+b[1]))-m,n<r?(r=n,q=m<q?m:q,l=h):n===r&&m<q&&(q=m,l=h);c=l}return c},dc:function(b,c,d){var e=this.da;d=d?b.bbox:e(b);var e=[],g=this.cd(d,this.data,c,e);g.children.push(b);for(f(g.bbox,d);0<=c;)if(e[c].children.length>this.Bb)this.fd(e,c),c--;else break;this.$c(d,e,c)},fd:function(b,c){var e=b[c],f=e.children.length,g=this.ec;this.ad(e,g,f);f=this.bd(e,g,f);f={children:e.children.splice(f,e.children.length-f),height:e.height,bbox:null,$:!1};e.$&&(f.$=!0);d(e,this.da);d(f,this.da);c?b[c-1].children.push(f):
+this.fc(e,f)},fc:function(b,c){this.data={children:[b,c],height:b.height+1,bbox:null,$:!1};d(this.data,this.da)},bd:function(b,c,d){var f,g,h,l,m,n,q;m=n=Infinity;for(f=c;f<=d-c;f++)g=e(b,0,f,this.da),h=e(b,f,d,this.da),l=Math.max(0,Math.min(g[2],h[2])-Math.max(g[0],h[0]))*Math.max(0,Math.min(g[3],h[3])-Math.max(g[1],h[1])),g=k(g)+k(h),l<m?(m=l,q=f,n=g<n?g:n):l===m&&g<n&&(n=g,q=f);return q},ad:function(b,c,d){var e=b.$?this.Hb:g,f=b.$?this.Ib:h,k=this.bc(b,c,d,e);c=this.bc(b,c,d,f);k<c&&b.children.sort(e)},
+bc:function(b,c,d,g){b.children.sort(g);g=this.da;var h=e(b,0,c,g),k=e(b,d-c,d,g),m=l(h)+l(k),n,q;for(n=c;n<d-c;n++)q=b.children[n],f(h,b.$?g(q):q.bbox),m+=l(h);for(n=d-c-1;n>=c;n--)q=b.children[n],f(k,b.$?g(q):q.bbox),m+=l(k);return m},$c:function(b,c,d){for(;0<=d;d--)f(c[d].bbox,b)},dd:function(b){for(var c=b.length-1,e;0<=c;c--)0===b[c].children.length?0<c?(e=b[c-1].children,e.splice(e.indexOf(b[c]),1)):this.clear():d(b[c],this.da)},ed:function(b){var c=["return a"," - b",";"];this.Hb=new Function("a",
+"b",c.join(b[0]));this.Ib=new Function("a","b",c.join(b[1]));this.da=new Function("a","return [a"+b.join(", a")+"];")}};"undefined"!==typeof b?b.uc=c:"undefined"!==typeof self?self.a=c:window.a=c})();Lj=b.uc})();function Mj(b){this.a=Lj(b);this.b={}}p=Mj.prototype;p.Ca=function(b,c){var d=[b[0],b[1],b[2],b[3],c];this.a.Ca(d);this.b[I(c)]=d};p.load=function(b,c){for(var d=Array(c.length),e=0,f=c.length;e<f;e++){var g=b[e],h=c[e],g=[g[0],g[1],g[2],g[3],h];d[e]=g;this.b[I(h)]=g}this.a.load(d)};p.remove=function(b){b=I(b);var c=this.b[b];delete this.b[b];return null!==this.a.remove(c)};function Nj(b){return b.a.all().map(function(b){return b[4]})}
+function Oj(b,c){return b.a.search(c).map(function(b){return b[4]})}function Pj(b,c,d,e){return Qj(Oj(b,c),d,e)}function Qj(b,c,d){for(var e,f=0,g=b.length;f<g&&!(e=c.call(d,b[f]));f++);return e}p.clear=function(){this.a.clear();this.b={}};p.C=function(){return this.a.data.bbox};function Rj(b){b=b||{};De.call(this,{attributions:b.attributions,logo:b.logo,projection:void 0,state:"ready",wrapX:void 0!==b.wrapX?b.wrapX:!0});this.o=pa;this.D=b.format;this.u=b.url;void 0!==b.loader?this.o=b.loader:void 0!==this.u&&(this.o=Jj(this.u,this.D));this.G=void 0!==b.strategy?b.strategy:Kj;var c=void 0!==b.useSpatialIndex?b.useSpatialIndex:!0;this.R=c?new Mj:null;this.s=new Mj;this.ca={};this.b={};this.g={};this.h={};this.a=null;var d,e;b.features instanceof ld?(d=b.features,e=d.a):Array.isArray(b.features)&&
+(e=b.features);c||void 0!==d||(d=new ld(e));void 0!==e&&Sj(this,e);void 0!==d&&Tj(this,d)}M(Rj,De);p=Rj.prototype;p.Cb=function(b){var c=I(b).toString();if(Uj(this,c,b)){Vj(this,c,b);var d=b.M();d?(c=d.C(),this.R&&this.R.Ca(c,b)):this.ca[c]=b;S(this,new Wj("addfeature",b))}this.v()};function Vj(b,c,d){b.h[c]=[Q(d,"change",b.xc,b),Q(d,"propertychange",b.xc,b)]}function Uj(b,c,d){var e=!0,f=d.La();void 0!==f?f.toString()in b.b?e=!1:b.b[f.toString()]=d:b.g[c]=d;return e}p.Db=function(b){Sj(this,b);this.v()};
+function Sj(b,c){var d,e,f,g,h=[],k=[],l=[];e=0;for(f=c.length;e<f;e++)g=c[e],d=I(g).toString(),Uj(b,d,g)&&k.push(g);e=0;for(f=k.length;e<f;e++){g=k[e];d=I(g).toString();Vj(b,d,g);var m=g.M();m?(d=m.C(),h.push(d),l.push(g)):b.ca[d]=g}b.R&&b.R.load(h,l);e=0;for(f=k.length;e<f;e++)S(b,new Wj("addfeature",k[e]))}
+function Tj(b,c){var d=!1;Q(b,"addfeature",function(b){d||(d=!0,c.push(b.feature),d=!1)});Q(b,"removefeature",function(b){d||(d=!0,c.remove(b.feature),d=!1)});Q(c,"add",function(b){d||(b=b.element,d=!0,this.Cb(b),d=!1)},b);Q(c,"remove",function(b){if(!d){b=b.element;d=!0;var c=I(b).toString();c in this.ca?delete this.ca[c]:this.R&&this.R.remove(b);this.Yb(b);this.v();d=!1}},b);b.a=c}
+p.clear=function(b){if(b){for(var c in this.h)this.h[c].forEach(N);this.a||(this.h={},this.b={},this.g={})}else if(this.R){b=this.Yb;Qj(Nj(this.R),b,this);for(var d in this.ca)this.Yb(this.ca[d])}this.a&&this.a.clear();this.R&&this.R.clear();this.s.clear();this.ca={};S(this,new Wj("clear"));this.v()};p.od=function(b,c){if(this.R)return Qj(Nj(this.R),b,c);if(this.a)return nd(this.a,b,c)};function Xj(b,c,d,e){b.R?Pj(b.R,c,d,e):b.a&&nd(b.a,d,e)}
+p.pe=function(){var b;this.a?b=this.a.a:this.R&&(b=Nj(this.R),$a(this.ca)||Ka(b,Za(this.ca)));return b};p.C=function(){return this.R.C()};
+p.xc=function(b){b=b.target;var c=I(b).toString(),d=b.M();if(d)if(d=d.C(),c in this.ca)delete this.ca[c],this.R&&this.R.Ca(d,b);else{if(this.R){var e=this.R,f=I(b);Rb(e.b[f].slice(0,4),d)||(e.remove(b),e.Ca(d,b))}}else c in this.ca||(this.R&&this.R.remove(b),this.ca[c]=b);d=b.La();void 0!==d?(d=d.toString(),c in this.g?(delete this.g[c],this.b[d]=b):this.b[d]!==b&&(Yj(this,b),this.b[d]=b)):c in this.g||(Yj(this,b),this.g[c]=b);this.v();S(this,new Wj("changefeature",b))};
+function Zj(b,c,d,e){var f=b.s;c=b.G(c,d);var g,h;g=0;for(h=c.length;g<h;++g){var k=c[g];Pj(f,k,function(b){return Nb(b.extent,k)})||(b.o.call(b,k,d,e),f.Ca(k,{extent:k.slice()}))}}p.Yb=function(b){var c=I(b).toString();this.h[c].forEach(N);delete this.h[c];var d=b.La();void 0!==d?delete this.b[d.toString()]:delete this.g[c];S(this,new Wj("removefeature",b))};function Yj(b,c){for(var d in b.b)if(b.b[d]===c){delete b.b[d];break}}function Wj(b,c){R.call(this,b);this.feature=c}M(Wj,R);function ak(b){Xi.call(this,b);this.c=rf();this.b=null;this.j=Jb();this.h=zb()}M(ak,Xi);
+ak.prototype.g=function(b,c,d){var e=b.pixelRatio,f=b.viewState,g=f.center,h=f.projection,k=f.rotation,l=b.size,m=Math.round(e*l[0]/2),n=Math.round(e*l[1]/2),q=e/f.resolution,r=this.a,u=r.V(),w=u.kb(h),f=Zi(this,b,0);Yi(this,"precompose",d,b,f);var l=d,r=nb(r,"render"),y,z,D,t;if(k||r){l=this.c;y=l.canvas;D=u.mb(e)/e;var v=d.canvas.width*D;z=d.canvas.height*D;t=Math.round(Math.sqrt(v*v+z*z));y.width!=t?y.width=y.height=t:l.clearRect(0,0,t,t);y=(t-v)/2/D;z=(t-z)/2/D;q*=D;m=Math.round(D*(m+y));n=Math.round(D*
+(n+z))}v=l.globalAlpha;l.globalAlpha=c.opacity;var B=u.la(h),E=this.b,C;c=u.Mb(h)&&1==c.opacity;c||(E.reverse(),C=[]);for(var G=0,J=E.length;G<J;++G){var A=E[G],H=A.L,O=Je(B,H,this.j),P=H[0],L=Xb(Je(B,Re(B,g,P))),H=Math.round(Vb(O)*q),K=Math.round(Wb(O)*q),fa=Math.round((O[0]-L[0])*q/H)*H+m+Math.round((L[0]-g[0])*q),O=Math.round((L[1]-O[3])*q/K)*K+n+Math.round((g[1]-L[1])*q);if(!c){L=[fa,O,fa+H,O+K];l.save();for(var ra=0,Wl=C.length;ra<Wl;++ra){var Xa=C[ra];ac(L,Xa)&&(l.beginPath(),l.moveTo(L[0],
+L[1]),l.lineTo(L[0],L[3]),l.lineTo(L[2],L[3]),l.lineTo(L[2],L[1]),l.moveTo(Xa[0],Xa[1]),l.lineTo(Xa[2],Xa[1]),l.lineTo(Xa[2],Xa[3]),l.lineTo(Xa[0],Xa[3]),l.closePath(),l.clip())}C.push(L)}P=Xe(u,P,e,h);l.drawImage(A.T(),w,w,P[0],P[1],fa,O,H,K);c||l.restore()}r&&(e=y-m/D+m,h=z-n/D+n,g=Ig(this.h,t/2-e,t/2-h,q,-q,-k,-g[0]+e/q,-g[1]-h/q),Yi(this,"render",l,b,g));(k||r)&&d.drawImage(l.canvas,-Math.round(y),-Math.round(z),t/D,t/D);l.globalAlpha=v;Yi(this,"postcompose",d,b,f)};
+ak.prototype.i=function(b,c){function d(b){b=b.N();return 2==b||4==b||3==b&&!u}var e=b.pixelRatio,f=b.viewState,g=f.projection,h=this.a,k=h.V(),l=k.la(g),m=Qe(l,f.resolution),n=l.I(m),q=f.center;n==f.resolution?(q=Rg(q,n,b.size),f=Zb(q,n,f.rotation,b.size)):f=b.extent;void 0!==c.extent&&(f=$b(f,c.extent));if(f[2]<f[0]||f[3]<f[1])return!1;n=Me(l,f,n);q={};q[m]={};var r=this.l(k,g,q),u=ti(h),w=Jb(),y=new fd(0,0,0,0),z,D,t,v;for(t=n.a;t<=n.f;++t)for(v=n.b;v<=n.c;++v)z=Tg(k,m,t,v,e,g),!d(z)&&z.a&&(z=
+z.a),d(z)?q[m][z.L.toString()]=z:(D=Ie(l,z.L,r,y,w),D||(z=Le(l,z.L,y,w))&&r(m+1,z));r=Object.keys(q).map(Number);r.sort(Ha);var w=[],B,y=0;for(t=r.length;y<t;++y)for(B in z=r[y],v=q[z],v)z=v[B],2==z.N()&&w.push(z);this.b=w;Qg(b.usedTiles,k,m,n);Sg(b,k,l,e,g,f,m,h.get("preload"));Ng(b,k);Pg(b,k);return!0};function bk(b){Xi.call(this,b);this.b=!1;this.w=-1;this.u=NaN;this.j=Jb();this.c=this.o=null;this.h=rf()}M(bk,Xi);
+bk.prototype.g=function(b,c,d){var e=b.extent,f=b.pixelRatio,g=c.eb?b.skippedFeatureUids:{},h=b.viewState,k=h.projection,h=h.rotation,l=k.C(),m=this.a.V(),n=Zi(this,b,0);Yi(this,"precompose",d,b,n);var q=this.c;if(q&&!q.c()){var r;nb(this.a,"render")?(this.h.canvas.width=d.canvas.width,this.h.canvas.height=d.canvas.height,r=this.h):r=d;var u=r.globalAlpha;r.globalAlpha=c.opacity;c=b.size[0]*f;var w=b.size[1]*f;xi(r,-h,c/2,w/2);q.f(r,f,n,h,g);if(m.j&&k.a&&!Nb(l,e)){for(var k=e[0],m=Vb(l),y=0;k<l[0];)--y,
+n=m*y,n=Zi(this,b,n),q.f(r,f,n,h,g),k+=m;y=0;for(k=e[2];k>l[2];)++y,n=m*y,n=Zi(this,b,n),q.f(r,f,n,h,g),k-=m;n=Zi(this,b,0)}xi(r,h,c/2,w/2);r!=d&&(Yi(this,"render",r,b,n),d.drawImage(r.canvas,0,0));r.globalAlpha=u}Yi(this,"postcompose",d,b,n)};bk.prototype.fb=function(b,c,d,e){if(this.c){var f=this.a,g={};return this.c.g(b,c.viewState.resolution,c.viewState.rotation,{},function(b){var c=I(b).toString();if(!(c in g))return g[c]=!0,d.call(e,b,f)})}};bk.prototype.B=function(){Mg(this)};
+bk.prototype.i=function(b){function c(b){var c,e=b.c;e?c=e.call(b,m):(e=d.g)&&(c=e(b,m));if(c){if(c){e=!1;if(Array.isArray(c))for(var f=0,g=c.length;f<g;++f)e=vj(r,b,c[f],uj(m,n),this.B,this)||e;else e=vj(r,b,c,uj(m,n),this.B,this)||e;b=e}else b=!1;this.b=this.b||b}}var d=this.a,e=d.V();Og(b.attributions,e.i);Pg(b,e);var f=b.viewHints[0],g=b.viewHints[1],h=d.i,k=d.j;if(!this.b&&!h&&f||!k&&g)return!0;var l=b.extent,k=b.viewState,f=k.projection,m=k.resolution,n=b.pixelRatio,g=d.f,q=d.a,h=d.get("renderOrder");
+void 0===h&&(h=tj);l=Lb(l,q*m);q=k.projection.C();e.j&&k.projection.a&&!Nb(q,b.extent)&&(b=Math.max(Vb(l)/2,Vb(q)),l[0]=q[0]-b,l[2]=q[2]+b);if(!this.b&&this.u==m&&this.w==g&&this.o==h&&Nb(this.j,l))return!0;this.c=null;this.b=!1;var r=new pj(.5*m/n,l,m,d.a);Zj(e,l,m,f);if(h){var u=[];Xj(e,l,function(b){u.push(b)},this);u.sort(h);u.forEach(c,this)}else Xj(e,l,c,this);qj(r);this.u=m;this.w=g;this.o=h;this.j=l;this.c=r;return!0};function ck(b,c){var d=/\{z\}/g,e=/\{x\}/g,f=/\{y\}/g,g=/\{-y\}/g;return function(h){if(h)return b.replace(d,h[0].toString()).replace(e,h[1].toString()).replace(f,function(){return(-h[2]-1).toString()}).replace(g,function(){var b=c.a?c.a[h[0]]:null;return(b.c-b.b+1+h[2]).toString()})}}function dk(b,c){for(var d=b.length,e=Array(d),f=0;f<d;++f)e[f]=ck(b[f],c);return ek(e)}function ek(b){return 1===b.length?b[0]:function(c,d,e){if(c)return b[Ea((c[1]<<c[0])+c[2],b.length)](c,d,e)}}function fk(){};function gk(b){Ve.call(this,{attributions:b.attributions,cacheSize:b.cacheSize,extent:b.extent,logo:b.logo,opaque:b.opaque,projection:b.projection,state:b.state,tileGrid:b.tileGrid,tilePixelRatio:b.tilePixelRatio,wrapX:b.wrapX});this.tileLoadFunction=b.tileLoadFunction;this.tileUrlFunction=this.g?this.g.bind(this):fk;this.urls=null;if(b.urls){var c=b.urls;this.urls=c;hk(this,this.g?this.g.bind(this):dk(c,this.tileGrid))}else b.url&&this.s(b.url);b.tileUrlFunction&&hk(this,b.tileUrlFunction)}
+M(gk,Ve);gk.prototype.D=function(b){b=b.target;switch(b.N()){case 1:S(this,new Ze("tileloadstart",b));break;case 2:S(this,new Ze("tileloadend",b));break;case 3:S(this,new Ze("tileloaderror",b))}};function hk(b,c){b.a.clear();b.tileUrlFunction=c;b.v()}
+gk.prototype.s=function(b){var c=[],d=/\{(\d)-(\d)\}/.exec(b)||/\{([a-z])-([a-z])\}/.exec(b);if(d){var e=d[2].charCodeAt(0),f;for(f=d[1].charCodeAt(0);f<=e;++f)c.push(b.replace(d[0],String.fromCharCode(f)))}else c.push(b);b=this.urls=c;hk(this,this.g?this.g.bind(this):dk(b,this.tileGrid))};gk.prototype.Yc=function(b,c,d){b=this.lb(b,c,d);we(this.a,b)&&this.a.get(b)};function ik(b,c){Zg.call(this,0,c);this.c=rf();rf();this.a=this.c.canvas;this.a.style.width="100%";this.a.style.height="100%";this.a.className="ol-unselectable";fe(b,this.a,0);this.b=!0;this.g=zb()}M(ik,Zg);ik.prototype.Jb=function(b){return b instanceof X?new ak(b):b instanceof Y?new bk(b):null};
+function jk(b,c,d){var e=b.h,f=b.c;if(nb(e,c)){var g=d.extent,h=d.pixelRatio,k=d.viewState.rotation,l=d.pixelRatio,m=d.viewState,n=m.resolution;b=Ig(b.g,b.a.width/2,b.a.height/2,l/n,-l/n,-m.rotation,-m.center[0],-m.center[1]);g=new Mi(f,h,g,b,k);S(e,new Fg(c,e,g,d,f,null))}}ik.prototype.U=function(){return"canvas"};
+ik.prototype.sb=function(b){if(b){var c=this.c,d=b.pixelRatio,e=Math.round(b.size[0]*d),d=Math.round(b.size[1]*d);this.a.width!=e||this.a.height!=d?(this.a.width=e,this.a.height=d):c.clearRect(0,0,e,d);var f=b.viewState.rotation;$g(b);jk(this,"precompose",b);var g=b.layerStatesArray;Na(g);xi(c,f,e/2,d/2);var h=b.viewState.resolution,k,l,m,n;k=0;for(l=g.length;k<l;++k)n=g[k],m=n.layer,m=bh(this,m),Hg(n,h)&&"ready"==n.$b&&m.i(b,n)&&m.g(b,n,c);xi(c,-f,e/2,d/2);jk(this,"postcompose",b);this.b||(oe(this.a,
+!0),this.b=!0);ch(this,b);b.postRenderFunctions.push(ah)}else this.b&&(oe(this.a,!1),this.b=!1)};function kk(b,c){Lg.call(this,b);this.target=c}M(kk,Lg);kk.prototype.Gb=pa;kk.prototype.Kc=pa;function lk(b){var c=document.createElement("DIV");c.style.position="absolute";kk.call(this,b,c);this.c=!0;this.h=1;this.g=0;this.b={}}M(lk,kk);lk.prototype.Gb=function(){ee(this.target);this.g=0};
+lk.prototype.Lc=function(b,c){if(!c.visible)return this.c&&(oe(this.target,!1),this.c=!1),!0;var d=b.pixelRatio,e=b.viewState,f=e.projection,g=this.a,h=g.V(),k=h.la(f),l=h.kb(f),m=Qe(k,e.resolution),n=k.I(m),q=e.center,r;n==e.resolution?(q=Rg(q,n,b.size),r=Zb(q,n,e.rotation,b.size)):r=b.extent;void 0!==c.extent&&(r=$b(r,c.extent));var n=Me(k,r,n),u={};u[m]={};var w=this.l(h,f,u),y=ti(g),z=Jb(),D=new fd(0,0,0,0),t,v,B,E;for(B=n.a;B<=n.f;++B)for(E=n.b;E<=n.c;++E)t=Tg(h,m,B,E,d,f),v=t.N(),v=2==v||4==
+v||3==v&&!y,!v&&t.a&&(t=t.a),v=t.N(),2==v?u[m][t.L.toString()]=t:4==v||3==v&&!y||(v=Ie(k,t.L,w,D,z),v||(t=Le(k,t.L,D,z))&&w(m+1,t));var C;if(this.g!=h.f){for(C in this.b)y=this.b[+C],ge(y.target);this.b={};this.g=h.f}z=Object.keys(u).map(Number);z.sort(Ha);var w={},G;B=0;for(E=z.length;B<E;++B){C=z[B];C in this.b?y=this.b[C]:(y=Re(k,q,C),y=new mk(k,y),w[C]=!0,this.b[C]=y);C=u[C];for(G in C){t=y;v=C[G];var J=l,A=v.L,H=A[0],O=A[1],P=A[2],A=A.toString();if(!(A in t.b)){var H=tb(Pe(t.g,H),t.i),L=v.T(t),
+K=L.style;K.maxWidth="none";var fa=void 0,ra=void 0;0<J?(fa=document.createElement("DIV"),ra=fa.style,ra.overflow="hidden",ra.width=H[0]+"px",ra.height=H[1]+"px",K.position="absolute",K.left=-J+"px",K.top=-J+"px",K.width=H[0]+2*J+"px",K.height=H[1]+2*J+"px",fa.appendChild(L)):(K.width=H[0]+"px",K.height=H[1]+"px",fa=L,ra=K);ra.position="absolute";ra.left=(O-t.f[1])*H[0]+"px";ra.top=(t.f[2]-P)*H[1]+"px";t.a||(t.a=document.createDocumentFragment());t.a.appendChild(fa);t.b[A]=v}}y.a&&(y.target.appendChild(y.a),
+y.a=null)}l=Object.keys(this.b).map(Number);l.sort(Ha);B=zb();G=0;for(z=l.length;G<z;++G)if(C=l[G],y=this.b[C],C in u)if(t=y.I(),E=y.ka(),Ig(B,b.size[0]/2,b.size[1]/2,t/e.resolution,t/e.resolution,e.rotation,(E[0]-q[0])/t,(q[1]-E[1])/t),y.setTransform(B),C in w){for(--C;0<=C;--C)if(C in this.b){E=this.b[C].target;E.parentNode&&E.parentNode.insertBefore(y.target,E.nextSibling);break}0>C&&fe(this.target,y.target,0)}else{if(!b.viewHints[0]&&!b.viewHints[1]){v=Ke(y.g,r,y.f[0],D);C=[];t=E=void 0;for(t in y.b)E=
+y.b[t],J=E.L,gd(v,J[1],J[2])||C.push(E);J=v=void 0;v=0;for(J=C.length;v<J;++v)E=C[v],t=E.L.toString(),ge(E.T(y)),delete y.b[t]}}else ge(y.target),delete this.b[C];c.opacity!=this.h&&(this.h=this.target.style.opacity=c.opacity);c.visible&&!this.c&&(oe(this.target,!0),this.c=!0);Qg(b.usedTiles,h,m,n);Sg(b,h,k,d,f,r,m,g.get("preload"));Ng(b,h);Pg(b,h);return!0};
+function mk(b,c){this.target=document.createElement("DIV");this.target.style.position="absolute";this.target.style.width="100%";this.target.style.height="100%";this.g=b;this.f=c;this.h=bc(Je(b,c));this.l=b.I(c[0]);this.b={};this.a=null;this.c=Bb();this.i=[0,0]}mk.prototype.ka=function(){return this.h};mk.prototype.I=function(){return this.l};mk.prototype.setTransform=function(b){Jg(b,this.c)||(vf(this.target,b),Cb(this.c,b))};function nk(b){this.g=rf();var c=this.g.canvas;c.style.maxWidth="none";c.style.position="absolute";kk.call(this,b,c);this.b=!1;this.h=-1;this.o=NaN;this.i=Jb();this.c=this.j=null;this.w=zb();this.u=zb()}M(nk,kk);p=nk.prototype;p.Gb=function(){var b=this.g.canvas;b.width=b.width;this.h=0};
+p.Kc=function(b,c){var d=b.viewState,e=d.center,f=d.rotation,g=d.resolution,d=b.pixelRatio,h=b.size[0],k=b.size[1],l=h*d,m=k*d,e=Ig(this.w,d*h/2,d*k/2,d/g,-d/g,-f,-e[0],-e[1]),g=this.g;g.canvas.width=l;g.canvas.height=m;h=Ig(this.u,0,0,1/d,1/d,0,-(l-h)/2*d,-(m-k)/2*d);vf(g.canvas,h);ok(this,"precompose",b,e);(h=this.c)&&!h.c()&&(g.globalAlpha=c.opacity,h.f(g,d,e,f,c.eb?b.skippedFeatureUids:{}),ok(this,"render",b,e));ok(this,"postcompose",b,e)};
+function ok(b,c,d,e){var f=b.g;b=b.a;nb(b,c)&&(e=new Mi(f,d.pixelRatio,d.extent,e,d.viewState.rotation),S(b,new Fg(c,b,e,d,f,null)))}p.fb=function(b,c,d,e){if(this.c){var f=this.a,g={};return this.c.g(b,c.viewState.resolution,c.viewState.rotation,{},function(b){var c=I(b).toString();if(!(c in g))return g[c]=!0,d.call(e,b,f)})}};p.Mc=function(){Mg(this)};
+p.Lc=function(b){function c(b){var c,e=b.c;e?c=e.call(b,l):(e=d.g)&&(c=e(b,l));if(c){if(c){e=!1;if(Array.isArray(c))for(var f=0,g=c.length;f<g;++f)e=vj(n,b,c[f],uj(l,m),this.Mc,this)||e;else e=vj(n,b,c,uj(l,m),this.Mc,this)||e;b=e}else b=!1;this.b=this.b||b}}var d=this.a,e=d.V();Og(b.attributions,e.i);Pg(b,e);var f=b.viewHints[0],g=b.viewHints[1],h=d.i,k=d.j;if(!this.b&&!h&&f||!k&&g)return!0;var g=b.extent,h=b.viewState,f=h.projection,l=h.resolution,m=b.pixelRatio;b=d.f;k=d.a;h=d.get("renderOrder");
+void 0===h&&(h=tj);g=Lb(g,k*l);if(!this.b&&this.o==l&&this.h==b&&this.j==h&&Nb(this.i,g))return!0;this.c=null;this.b=!1;var n=new pj(.5*l/m,g,l,d.a);Zj(e,g,l,f);if(h){var q=[];Xj(e,g,function(b){q.push(b)},this);q.sort(h);q.forEach(c,this)}else Xj(e,g,c,this);qj(n);this.o=l;this.h=b;this.j=h;this.i=g;this.c=n;return!0};function pk(b,c){Zg.call(this,0,c);this.c=rf();var d=this.c.canvas;d.style.position="absolute";d.style.width="100%";d.style.height="100%";d.className="ol-unselectable";fe(b,d,0);this.g=zb();this.a=document.createElement("DIV");this.a.className="ol-unselectable";d=this.a.style;d.position="absolute";d.width="100%";d.height="100%";Q(this.a,"touchstart",lb);fe(b,this.a,0);this.b=!0}M(pk,Zg);pk.prototype.J=function(){ge(this.a);pk.X.J.call(this)};
+pk.prototype.Jb=function(b){if(b instanceof X)b=new lk(b);else if(b instanceof Y)b=new nk(b);else return null;return b};function qk(b,c,d){var e=b.h;if(nb(e,c)){var f=d.extent,g=d.pixelRatio,h=d.viewState,k=h.rotation,l=b.c,m=l.canvas;Ig(b.g,m.width/2,m.height/2,g/h.resolution,-g/h.resolution,-h.rotation,-h.center[0],-h.center[1]);b=new Mi(l,g,f,b.g,k);S(e,new Fg(c,e,b,d,l,null))}}pk.prototype.U=function(){return"dom"};
+pk.prototype.sb=function(b){if(b){var c=this.h;if(nb(c,"precompose")||nb(c,"postcompose")){var c=this.c.canvas,d=b.pixelRatio;c.width=b.size[0]*d;c.height=b.size[1]*d}qk(this,"precompose",b);c=b.layerStatesArray;Na(c);var d=b.viewState.resolution,e,f,g,h;e=0;for(f=c.length;e<f;++e)h=c[e],g=h.layer,g=bh(this,g),fe(this.a,g.target,e),Hg(h,d)&&"ready"==h.$b?g.Lc(b,h)&&g.Kc(b,h):g.Gb();var c=b.layerStates,k;for(k in this.f)k in c||(g=this.f[k],ge(g.target));this.b||(oe(this.a,!0),this.b=!0);$g(b);ch(this,
+b);b.postRenderFunctions.push(ah);qk(this,"postcompose",b)}else this.b&&(oe(this.a,!1),this.b=!1)};function rk(b){this.a=b}function sk(b){this.a=b}M(sk,rk);sk.prototype.U=function(){return 35632};function tk(b){this.a=b}M(tk,rk);tk.prototype.U=function(){return 35633};function uk(){this.a="precision mediump float;varying vec2 a;varying float b;uniform float k;uniform sampler2D l;void main(void){vec4 texColor=texture2D(l,a);gl_FragColor.rgb=texColor.rgb;float alpha=texColor.a*b*k;if(alpha==0.0){discard;}gl_FragColor.a=alpha;}"}M(uk,sk);aa(uk);
+function vk(){this.a="varying vec2 a;varying float b;attribute vec2 c;attribute vec2 d;attribute vec2 e;attribute float f;attribute float g;uniform mat4 h;uniform mat4 i;uniform mat4 j;void main(void){mat4 offsetMatrix=i;if(g==1.0){offsetMatrix=i*j;}vec4 offsets=offsetMatrix*vec4(e,0.,0.);gl_Position=h*vec4(c,0.,1.)+offsets;a=d;b=f;}"}M(vk,tk);aa(vk);
+function wk(b,c){this.i=b.getUniformLocation(c,"j");this.j=b.getUniformLocation(c,"i");this.h=b.getUniformLocation(c,"k");this.l=b.getUniformLocation(c,"h");this.a=b.getAttribLocation(c,"e");this.b=b.getAttribLocation(c,"f");this.c=b.getAttribLocation(c,"c");this.f=b.getAttribLocation(c,"g");this.g=b.getAttribLocation(c,"d")};function xk(b){this.a=void 0!==b?b:[]};function yk(b,c){this.A=b;this.a=c;this.b={};this.g={};this.c={};this.i=this.j=this.h=this.l=null;(this.f=0<=oa.indexOf("OES_element_index_uint"))&&c.getExtension("OES_element_index_uint");Q(this.A,"webglcontextlost",this.o,this);Q(this.A,"webglcontextrestored",this.s,this)}M(yk,ib);
+function zk(b,c,d){var e=b.a,f=d.a,g=String(I(d));if(g in b.b)e.bindBuffer(c,b.b[g].buffer);else{var h=e.createBuffer();e.bindBuffer(c,h);var k;34962==c?k=new Float32Array(f):34963==c&&(k=b.f?new Uint32Array(f):new Uint16Array(f));e.bufferData(c,k,35044);b.b[g]={Xe:d,buffer:h}}}function Ak(b,c){var d=b.a,e=String(I(c)),f=b.b[e];d.isContextLost()||d.deleteBuffer(f.buffer);delete b.b[e]}
+yk.prototype.J=function(){hb(this.A);var b=this.a;if(!b.isContextLost()){for(var c in this.b)b.deleteBuffer(this.b[c].buffer);for(c in this.c)b.deleteProgram(this.c[c]);for(c in this.g)b.deleteShader(this.g[c]);b.deleteFramebuffer(this.h);b.deleteRenderbuffer(this.i);b.deleteTexture(this.j)}};
+function Bk(b){if(!b.h){var c=b.a,d=c.createFramebuffer();c.bindFramebuffer(c.FRAMEBUFFER,d);var e=Ck(c,1,1),f=c.createRenderbuffer();c.bindRenderbuffer(c.RENDERBUFFER,f);c.renderbufferStorage(c.RENDERBUFFER,c.DEPTH_COMPONENT16,1,1);c.framebufferTexture2D(c.FRAMEBUFFER,c.COLOR_ATTACHMENT0,c.TEXTURE_2D,e,0);c.framebufferRenderbuffer(c.FRAMEBUFFER,c.DEPTH_ATTACHMENT,c.RENDERBUFFER,f);c.bindTexture(c.TEXTURE_2D,null);c.bindRenderbuffer(c.RENDERBUFFER,null);c.bindFramebuffer(c.FRAMEBUFFER,null);b.h=d;
+b.j=e;b.i=f}return b.h}function Dk(b,c){var d=String(I(c));if(d in b.g)return b.g[d];var e=b.a,f=e.createShader(c.U());e.shaderSource(f,c.a);e.compileShader(f);return b.g[d]=f}function Ek(b,c,d){var e=I(c)+"/"+I(d);if(e in b.c)return b.c[e];var f=b.a,g=f.createProgram();f.attachShader(g,Dk(b,c));f.attachShader(g,Dk(b,d));f.linkProgram(g);return b.c[e]=g}yk.prototype.o=function(){Ya(this.b);Ya(this.g);Ya(this.c);this.i=this.j=this.h=this.l=null};yk.prototype.s=function(){};
+function Fk(b,c){if(c==b.l)return!1;b.a.useProgram(c);b.l=c;return!0}function Gk(b,c,d){var e=b.createTexture();b.bindTexture(b.TEXTURE_2D,e);b.texParameteri(b.TEXTURE_2D,b.TEXTURE_MAG_FILTER,b.LINEAR);b.texParameteri(b.TEXTURE_2D,b.TEXTURE_MIN_FILTER,b.LINEAR);void 0!==c&&b.texParameteri(3553,10242,c);void 0!==d&&b.texParameteri(3553,10243,d);return e}function Ck(b,c,d){var e=Gk(b,void 0,void 0);b.texImage2D(b.TEXTURE_2D,0,b.RGBA,c,d,0,b.RGBA,b.UNSIGNED_BYTE,null);return e};function Hk(b,c){this.H=this.u=void 0;this.j=Yb(c);this.s=[];this.h=[];this.B=void 0;this.g=[];this.c=[];this.D=this.K=void 0;this.b=[];this.w=this.i=null;this.G=void 0;this.na=Bb();this.za=Bb();this.S=this.P=void 0;this.pa=Bb();this.ja=this.Y=this.ba=void 0;this.ea=[];this.l=[];this.a=[];this.o=null;this.f=[];this.A=[];this.aa=void 0}M(Hk,Eg);
+function Ik(b,c){var d=b.o,e=b.i,f=b.ea,g=b.l,h=c.a;return function(){if(!h.isContextLost()){var b,l;b=0;for(l=f.length;b<l;++b)h.deleteTexture(f[b]);b=0;for(l=g.length;b<l;++b)h.deleteTexture(g[b])}Ak(c,d);Ak(c,e)}}
+function Jk(b,c,d,e){var f=b.u,g=b.H,h=b.B,k=b.K,l=b.D,m=b.G,n=b.P,q=b.S,r=b.ba?1:0,u=b.Y,w=b.ja,y=b.aa,z=Math.cos(u),u=Math.sin(u),D=b.b.length,t=b.a.length,v,B,E,C,G,J;for(v=0;v<d;v+=e)G=c[v]-b.j[0],J=c[v+1]-b.j[1],B=t/8,E=-w*f,C=-w*(h-g),b.a[t++]=G,b.a[t++]=J,b.a[t++]=E*z-C*u,b.a[t++]=E*u+C*z,b.a[t++]=n/l,b.a[t++]=(q+h)/k,b.a[t++]=m,b.a[t++]=r,E=w*(y-f),C=-w*(h-g),b.a[t++]=G,b.a[t++]=J,b.a[t++]=E*z-C*u,b.a[t++]=E*u+C*z,b.a[t++]=(n+y)/l,b.a[t++]=(q+h)/k,b.a[t++]=m,b.a[t++]=r,E=w*(y-f),C=w*g,b.a[t++]=
+G,b.a[t++]=J,b.a[t++]=E*z-C*u,b.a[t++]=E*u+C*z,b.a[t++]=(n+y)/l,b.a[t++]=q/k,b.a[t++]=m,b.a[t++]=r,E=-w*f,C=w*g,b.a[t++]=G,b.a[t++]=J,b.a[t++]=E*z-C*u,b.a[t++]=E*u+C*z,b.a[t++]=n/l,b.a[t++]=q/k,b.a[t++]=m,b.a[t++]=r,b.b[D++]=B,b.b[D++]=B+1,b.b[D++]=B+2,b.b[D++]=B,b.b[D++]=B+2,b.b[D++]=B+3}Hk.prototype.Za=function(b,c){this.f.push(this.b.length);this.A.push(c);var d=b.a;Jk(this,d,d.length,b.b)};Hk.prototype.$a=function(b,c){this.f.push(this.b.length);this.A.push(c);var d=b.a;Jk(this,d,d.length,b.b)};
+function Kk(b,c){var d=c.a;b.s.push(b.b.length);b.h.push(b.b.length);b.o=new xk(b.a);zk(c,34962,b.o);b.i=new xk(b.b);zk(c,34963,b.i);var e={};Lk(b.ea,b.g,e,d);Lk(b.l,b.c,e,d);b.u=void 0;b.H=void 0;b.B=void 0;b.g=null;b.c=null;b.K=void 0;b.D=void 0;b.b=null;b.G=void 0;b.P=void 0;b.S=void 0;b.ba=void 0;b.Y=void 0;b.ja=void 0;b.a=null;b.aa=void 0}
+function Lk(b,c,d,e){var f,g,h,k,l=c.length;for(k=0;k<l;++k){g=c[k];h=I(g).toString();if(h in d)f=d[h];else{f=e;var m=Gk(f,33071,33071);f.texImage2D(f.TEXTURE_2D,0,f.RGBA,f.RGBA,f.UNSIGNED_BYTE,g);f=m;d[h]=f}b[k]=f}}
+function Mk(b,c,d,e,f,g,h,k,l,m,n){var q=c.a;zk(c,34962,b.o);zk(c,34963,b.i);var r=uk.ua(),u=vk.ua(),u=Ek(c,r,u);b.w?r=b.w:(r=new wk(q,u),b.w=r);Fk(c,u);q.enableVertexAttribArray(r.c);q.vertexAttribPointer(r.c,2,5126,!1,32,0);q.enableVertexAttribArray(r.a);q.vertexAttribPointer(r.a,2,5126,!1,32,8);q.enableVertexAttribArray(r.g);q.vertexAttribPointer(r.g,2,5126,!1,32,16);q.enableVertexAttribArray(r.b);q.vertexAttribPointer(r.b,1,5126,!1,32,24);q.enableVertexAttribArray(r.f);q.vertexAttribPointer(r.f,
+1,5126,!1,32,28);u=b.pa;Ig(u,0,0,2/(e*g[0]),2/(e*g[1]),-f,-(d[0]-b.j[0]),-(d[1]-b.j[1]));d=b.za;e=2/g[0];g=2/g[1];Db(d);d[0]=e;d[5]=g;d[10]=1;d[15]=1;g=b.na;Db(g);0!==f&&Hb(g,-f);q.uniformMatrix4fv(r.l,!1,u);q.uniformMatrix4fv(r.j,!1,d);q.uniformMatrix4fv(r.i,!1,g);q.uniform1f(r.h,h);var w;if(void 0===l)Nk(b,q,c,k,b.ea,b.s);else{if(m)a:{f=c.f?5125:5123;c=c.f?4:2;g=b.f.length-1;for(h=b.l.length-1;0<=h;--h)for(q.bindTexture(3553,b.l[h]),m=0<h?b.h[h-1]:0,u=b.h[h];0<=g&&b.f[g]>=m;){w=b.f[g];d=b.A[g];
+e=I(d).toString();if(void 0===k[e]&&d.M()&&(void 0===n||ac(n,d.M().C()))&&(q.clear(q.COLOR_BUFFER_BIT|q.DEPTH_BUFFER_BIT),q.drawElements(4,u-w,f,w*c),u=l(d))){b=u;break a}u=w;g--}b=void 0}else q.clear(q.COLOR_BUFFER_BIT|q.DEPTH_BUFFER_BIT),Nk(b,q,c,k,b.l,b.h),b=(b=l(null))?b:void 0;w=b}q.disableVertexAttribArray(r.c);q.disableVertexAttribArray(r.a);q.disableVertexAttribArray(r.g);q.disableVertexAttribArray(r.b);q.disableVertexAttribArray(r.f);return w}
+function Nk(b,c,d,e,f,g){var h=d.f?5125:5123;d=d.f?4:2;if($a(e)){var k;b=0;e=f.length;for(k=0;b<e;++b){c.bindTexture(3553,f[b]);var l=g[b];c.drawElements(4,l-k,h,k*d);k=l}}else{k=0;var m,l=0;for(m=f.length;l<m;++l){c.bindTexture(3553,f[l]);for(var n=0<l?g[l-1]:0,q=g[l],r=n;k<b.f.length&&b.f[k]<=q;){var u=I(b.A[k]).toString();void 0!==e[u]?(r!==n&&c.drawElements(4,n-r,h,r*d),n=r=k===b.f.length-1?q:b.f[k+1]):n=k===b.f.length-1?q:b.f[k+1];k++}r!==n&&c.drawElements(4,n-r,h,r*d)}}}
+Hk.prototype.Ha=function(b){var c=b.jb(),d=b.T(1),e=b.wc(),f=b.Xb(1),g=b.l,h=b.ka(),k=b.i,l=b.Z(),m=b.Qa();b=b.gb;var n;0===this.g.length?this.g.push(d):(n=this.g[this.g.length-1],I(n)!=I(d)&&(this.s.push(this.b.length),this.g.push(d)));0===this.c.length?this.c.push(f):(n=this.c[this.c.length-1],I(n)!=I(f)&&(this.h.push(this.b.length),this.c.push(f)));this.u=c[0];this.H=c[1];this.B=m[1];this.K=e[1];this.D=e[0];this.G=g;this.P=h[0];this.S=h[1];this.Y=l;this.ba=k;this.ja=b;this.aa=m[0]};
+function Ok(b,c,d){this.l=c;this.i=b;this.h=d;this.b={}}function Pk(b,c){var d=[],e;for(e in b.b)d.push(Ik(b.b[e],c));return function(){for(var b=d.length,c,e=0;e<b;e++)c=d[e].apply(this,arguments);return c}}function Qk(b,c){for(var d in b.b)Kk(b.b[d],c)}Ok.prototype.a=function(b,c){var d=this.b[c];void 0===d&&(d=new Rk[c](this.i,this.l),this.b[c]=d);return d};Ok.prototype.c=function(){return $a(this.b)};
+Ok.prototype.f=function(b,c,d,e,f,g,h,k){var l,m;g=0;for(l=$i.length;g<l;++g)m=this.b[$i[g]],void 0!==m&&Mk(m,b,c,d,e,f,h,k,void 0,!1)};function Sk(b,c,d,e,f,g,h,k,l,m){var n=Tk,q,r;for(q=$i.length-1;0<=q;--q)if(r=b.b[$i[q]],void 0!==r&&(r=Mk(r,c,d,e,f,n,g,h,k,l,m)))return r}
+Ok.prototype.g=function(b,c,d,e,f,g,h,k,l,m){var n=c.a;n.bindFramebuffer(n.FRAMEBUFFER,Bk(c));var q;void 0!==this.h&&(q=Lb(Qb(b),e*this.h));return Sk(this,c,b,e,f,k,l,function(b){var c=new Uint8Array(4);n.readPixels(0,0,1,1,n.RGBA,n.UNSIGNED_BYTE,c);if(0<c[3]&&(b=m(b)))return b},!0,q)};function Uk(b,c,d,e,f,g,h){var k=d.a;k.bindFramebuffer(k.FRAMEBUFFER,Bk(d));return void 0!==Sk(b,d,c,e,f,g,h,function(){var b=new Uint8Array(4);k.readPixels(0,0,1,1,k.RGBA,k.UNSIGNED_BYTE,b);return 0<b[3]},!1)}
+var Rk={Image:Hk},Tk=[1,1];function Vk(b,c,d,e,f,g){this.a=b;this.f=c;this.c=g;this.l=f;this.h=e;this.g=d;this.b=null}M(Vk,Eg);Vk.prototype.$a=function(b,c){var d=this.a,e=(new Ok(1,this.c)).a(0,"Image");e.Ha(this.b);e.$a(b,c);Kk(e,d);Mk(e,this.a,this.f,this.g,this.h,this.l,1,{},void 0,!1);Ik(e,d)()};Vk.prototype.Za=function(b,c){var d=this.a,e=(new Ok(1,this.c)).a(0,"Image");e.Ha(this.b);e.Za(b,c);Kk(e,d);Mk(e,this.a,this.f,this.g,this.h,this.l,1,{},void 0,!1);Ik(e,d)()};Vk.prototype.Ha=function(b){this.b=b};function Wk(){this.a="precision mediump float;varying vec2 a;uniform float f;uniform sampler2D g;void main(void){vec4 texColor=texture2D(g,a);gl_FragColor.rgb=texColor.rgb;gl_FragColor.a=texColor.a*f;}"}M(Wk,sk);aa(Wk);function Xk(){this.a="varying vec2 a;attribute vec2 b;attribute vec2 c;uniform mat4 d;uniform mat4 e;void main(void){gl_Position=e*vec4(b,0.,1.);a=(d*vec4(c,0.,1.)).st;}"}M(Xk,tk);aa(Xk);
+function Yk(b,c){this.f=b.getUniformLocation(c,"f");this.c=b.getUniformLocation(c,"e");this.h=b.getUniformLocation(c,"d");this.g=b.getUniformLocation(c,"g");this.a=b.getAttribLocation(c,"b");this.b=b.getAttribLocation(c,"c")};function Zk(b,c){Lg.call(this,c);this.c=b;this.G=new xk([-1,-1,0,0,1,-1,1,0,-1,1,0,1,1,1,1,1]);this.i=this.ya=null;this.j=void 0;this.D=zb();this.P=Bb();this.o=null}M(Zk,Lg);
+function $k(b,c,d){var e=b.c.c;if(void 0===b.j||b.j!=d){c.postRenderFunctions.push(na(function(b,c,d){b.isContextLost()||(b.deleteFramebuffer(c),b.deleteTexture(d))},e,b.i,b.ya));c=Ck(e,d,d);var f=e.createFramebuffer();e.bindFramebuffer(36160,f);e.framebufferTexture2D(36160,36064,3553,c,0);b.ya=c;b.i=f;b.j=d}else e.bindFramebuffer(36160,b.i)}
+Zk.prototype.Nc=function(b,c,d){al(this,"precompose",d,b);zk(d,34962,this.G);var e=d.a,f=Wk.ua(),g=Xk.ua(),f=Ek(d,f,g);this.o?g=this.o:this.o=g=new Yk(e,f);Fk(d,f)&&(e.enableVertexAttribArray(g.a),e.vertexAttribPointer(g.a,2,5126,!1,16,0),e.enableVertexAttribArray(g.b),e.vertexAttribPointer(g.b,2,5126,!1,16,8),e.uniform1i(g.g,0));e.uniformMatrix4fv(g.h,!1,this.D);e.uniformMatrix4fv(g.c,!1,this.P);e.uniform1f(g.f,c.opacity);e.bindTexture(3553,this.ya);e.drawArrays(5,0,4);al(this,"postcompose",d,b)};
+function al(b,c,d,e){b=b.a;if(nb(b,c)){var f=e.viewState;S(b,new Fg(c,b,new Vk(d,f.center,f.resolution,f.rotation,e.size,e.extent),e,null,d))}}Zk.prototype.s=function(){this.i=this.ya=null;this.j=void 0};function bl(){this.a="precision mediump float;varying vec2 a;uniform sampler2D e;void main(void){gl_FragColor=texture2D(e,a);}"}M(bl,sk);aa(bl);function cl(){this.a="varying vec2 a;attribute vec2 b;attribute vec2 c;uniform vec4 d;void main(void){gl_Position=vec4(b*d.xy+d.zw,0.,1.);a=c;}"}M(cl,tk);aa(cl);function dl(b,c){this.f=b.getUniformLocation(c,"e");this.c=b.getUniformLocation(c,"d");this.a=b.getAttribLocation(c,"b");this.b=b.getAttribLocation(c,"c")};function el(b,c){Zk.call(this,b,c);this.B=bl.ua();this.S=cl.ua();this.b=null;this.w=new xk([0,0,0,1,1,0,1,1,0,1,0,0,1,1,1,0]);this.u=this.g=null;this.h=-1;this.K=[0,0]}M(el,Zk);el.prototype.J=function(){Ak(this.c.g,this.w);el.X.J.call(this)};el.prototype.l=function(b,c,d){var e=this.c;return function(f,g){return We(b,c,f,g,function(b){var c=we(e.b,b.getKey());c&&(d[f]||(d[f]={}),d[f][b.L.toString()]=b);return c})}};el.prototype.s=function(){el.X.s.call(this);this.b=null};
+el.prototype.Oc=function(b,c,d){var e=this.c,f=d.a,g=b.viewState,h=g.projection,k=this.a,l=k.V(),m=l.la(h),n=Qe(m,g.resolution),q=m.I(n),r=Xe(l,n,b.pixelRatio,h),u=r[0]/tb(Pe(m,n),this.K)[0],w=q/u,y=l.kb(h),z=g.center,D;q==g.resolution?(z=Rg(z,q,b.size),D=Zb(z,q,g.rotation,b.size)):D=b.extent;q=Me(m,D,q);if(this.g&&hd(this.g,q)&&this.h==l.f)w=this.u;else{var t=[q.ha(),q.c-q.b+1],v=Math.pow(2,Math.ceil(Math.log(Math.max(t[0]*r[0],t[1]*r[1]))/Math.LN2)),t=w*v,B=m.ka(n),E=B[0]+q.a*r[0]*w,w=B[1]+q.b*
+r[1]*w,w=[E,w,E+t,w+t];$k(this,b,v);f.viewport(0,0,v,v);f.clearColor(0,0,0,0);f.clear(16384);f.disable(3042);v=Ek(d,this.B,this.S);Fk(d,v);this.b||(this.b=new dl(f,v));zk(d,34962,this.w);f.enableVertexAttribArray(this.b.a);f.vertexAttribPointer(this.b.a,2,5126,!1,16,0);f.enableVertexAttribArray(this.b.b);f.vertexAttribPointer(this.b.b,2,5126,!1,16,8);f.uniform1i(this.b.f,0);d={};d[n]={};var C=this.l(l,h,d),G=ti(k),v=!0,E=Jb(),J=new fd(0,0,0,0),A,H,O;for(H=q.a;H<=q.f;++H)for(O=q.b;O<=q.c;++O){B=Tg(l,
+n,H,O,u,h);if(void 0!==c.extent&&(A=Je(m,B.L,E),!ac(A,c.extent)))continue;A=B.N();A=2==A||4==A||3==A&&!G;!A&&B.a&&(B=B.a);A=B.N();if(2==A){if(we(e.b,B.getKey())){d[n][B.L.toString()]=B;continue}}else if(4==A||3==A&&!G)continue;v=!1;A=Ie(m,B.L,C,J,E);A||(B=Le(m,B.L,J,E))&&C(n+1,B)}c=Object.keys(d).map(Number);c.sort(Ha);for(var C=new Float32Array(4),P,L,K,G=0,J=c.length;G<J;++G)for(P in L=d[c[G]],L)B=L[P],A=Je(m,B.L,E),H=2*(A[2]-A[0])/t,O=2*(A[3]-A[1])/t,K=2*(A[0]-w[0])/t-1,A=2*(A[1]-w[1])/t-1,yb(C,
+H,O,K,A),f.uniform4fv(this.b.c,C),fl(e,B,r,y*u),f.drawArrays(5,0,4);v?(this.g=q,this.u=w,this.h=l.f):(this.u=this.g=null,this.h=-1,b.animate=!0)}Qg(b.usedTiles,l,n,q);var fa=e.i;Sg(b,l,m,u,h,D,n,k.get("preload"),function(b){var c;(c=2!=b.N()||we(e.b,b.getKey()))||(c=b.getKey()in fa.f);c||fa.c([b,Oe(m,b.L),m.I(b.L[0]),r,y*u])},this);Ng(b,l);Pg(b,l);f=this.D;Db(f);Fb(f,(z[0]-w[0])/(w[2]-w[0]),(z[1]-w[1])/(w[3]-w[1]));0!==g.rotation&&Hb(f,g.rotation);Gb(f,b.size[0]*g.resolution/(w[2]-w[0]),b.size[1]*
+g.resolution/(w[3]-w[1]));Fb(f,-.5,-.5);return!0};function gl(b,c){Zk.call(this,b,c);this.h=!1;this.K=-1;this.B=NaN;this.u=Jb();this.g=this.b=this.w=null}M(gl,Zk);p=gl.prototype;p.Nc=function(b,c,d){this.g=c;var e=b.viewState,f=this.b;f&&!f.c()&&f.f(d,e.center,e.resolution,e.rotation,b.size,b.pixelRatio,c.opacity,c.eb?b.skippedFeatureUids:{})};p.J=function(){var b=this.b;b&&(Pk(b,this.c.g)(),this.b=null);gl.X.J.call(this)};
+p.fb=function(b,c,d,e){if(this.b&&this.g){var f=c.viewState,g=this.a,h={};return this.b.g(b,this.c.g,f.center,f.resolution,f.rotation,c.size,c.pixelRatio,this.g.opacity,{},function(b){var c=I(b).toString();if(!(c in h))return h[c]=!0,d.call(e,b,g)})}};p.Ic=function(b,c){if(this.b&&this.g){var d=c.viewState;return Uk(this.b,b,this.c.g,d.resolution,d.rotation,this.g.opacity,c.skippedFeatureUids)}return!1};p.Pc=function(){Mg(this)};
+p.Oc=function(b,c,d){function e(b){var c,d=b.c;d?c=d.call(b,m):(d=f.g)&&(c=d(b,m));if(c){if(c){d=!1;if(Array.isArray(c))for(var e=0,g=c.length;e<g;++e)d=vj(r,b,c[e],uj(m,n),this.Pc,this)||d;else d=vj(r,b,c,uj(m,n),this.Pc,this)||d;b=d}else b=!1;this.h=this.h||b}}var f=this.a;c=f.V();Og(b.attributions,c.i);Pg(b,c);var g=b.viewHints[0],h=b.viewHints[1],k=f.i,l=f.j;if(!this.h&&!k&&g||!l&&h)return!0;var h=b.extent,k=b.viewState,g=k.projection,m=k.resolution,n=b.pixelRatio,k=f.f,q=f.a,l=f.get("renderOrder");
+void 0===l&&(l=tj);h=Lb(h,q*m);if(!this.h&&this.B==m&&this.K==k&&this.w==l&&Nb(this.u,h))return!0;this.b&&b.postRenderFunctions.push(Pk(this.b,d));this.h=!1;var r=new Ok(.5*m/n,h,f.a);Zj(c,h,m,g);if(l){var u=[];Xj(c,h,function(b){u.push(b)},this);u.sort(l);u.forEach(e,this)}else Xj(c,h,e,this);Qk(r,d);this.B=m;this.K=k;this.w=l;this.u=h;this.b=r;return!0};function hl(b,c){Zg.call(this,0,c);this.a=document.createElement("CANVAS");this.a.style.width="100%";this.a.style.height="100%";this.a.className="ol-unselectable";fe(b,this.a,0);this.s=this.u=0;this.H=rf();this.j=!0;this.c=xf(this.a,{antialias:!0,depth:!1,failIfMajorPerformanceCaveat:!0,preserveDrawingBuffer:!1,stencil:!0});this.g=new yk(this.a,this.c);Q(this.a,"webglcontextlost",this.ne,this);Q(this.a,"webglcontextrestored",this.oe,this);this.b=new ve;this.o=null;this.i=new dh(function(b){var c=
+b[1];b=b[2];var f=c[0]-this.o[0],c=c[1]-this.o[1];return 65536*Math.log(b)+Math.sqrt(f*f+c*c)/b}.bind(this),function(b){return b[0].getKey()});this.w=function(){if(0!==this.i.a.length){hh(this.i);var b=eh(this.i);fl(this,b[0],b[3],b[4])}return!1}.bind(this);this.l=0;il(this)}M(hl,Zg);
+function fl(b,c,d,e){var f=b.c,g=c.getKey();if(we(b.b,g))b=b.b.get(g),f.bindTexture(3553,b.ya),9729!=b.Cc&&(f.texParameteri(3553,10240,9729),b.Cc=9729),9729!=b.Dc&&(f.texParameteri(3553,10240,9729),b.Dc=9729);else{var h=f.createTexture();f.bindTexture(3553,h);if(0<e){var k=b.H.canvas,l=b.H;b.u!==d[0]||b.s!==d[1]?(k.width=d[0],k.height=d[1],b.u=d[0],b.s=d[1]):l.clearRect(0,0,d[0],d[1]);l.drawImage(c.T(),e,e,d[0],d[1],0,0,d[0],d[1]);f.texImage2D(3553,0,6408,6408,5121,k)}else f.texImage2D(3553,0,6408,
+6408,5121,c.T());f.texParameteri(3553,10240,9729);f.texParameteri(3553,10241,9729);f.texParameteri(3553,10242,33071);f.texParameteri(3553,10243,33071);b.b.set(g,{ya:h,Cc:9729,Dc:9729})}}p=hl.prototype;p.Jb=function(b){return b instanceof X?new el(this,b):b instanceof Y?new gl(this,b):null};function jl(b,c,d){var e=b.h;if(nb(e,c)){b=b.g;var f=d.viewState;S(e,new Fg(c,e,new Vk(b,f.center,f.resolution,f.rotation,d.size,d.extent),d,null,b))}}
+p.J=function(){var b=this.c;b.isContextLost()||xe(this.b,function(c){c&&b.deleteTexture(c.ya)});jb(this.g);hl.X.J.call(this)};p.md=function(b,c){for(var d=this.c,e;1024<this.b.f-this.l;){if(e=this.b.a.Ia)d.deleteTexture(e.ya);else if(+this.b.a.Rb==c.index)break;else--this.l;this.b.pop()}};p.U=function(){return"webgl"};p.ne=function(b){b.preventDefault();this.b.clear();this.l=0;b=this.f;for(var c in b)b[c].s()};p.oe=function(){il(this);this.h.render()};
+function il(b){b=b.c;b.activeTexture(33984);b.blendFuncSeparate(770,771,1,771);b.disable(2884);b.disable(2929);b.disable(3089);b.disable(2960)}
+p.sb=function(b){var c=this.g,d=this.c;if(d.isContextLost())return!1;if(!b)return this.j&&(oe(this.a,!1),this.j=!1),!1;this.o=b.focus;this.b.set((-b.index).toString(),null);++this.l;jl(this,"precompose",b);var e=[],f=b.layerStatesArray;Na(f);var g=b.viewState.resolution,h,k,l,m;h=0;for(k=f.length;h<k;++h)m=f[h],Hg(m,g)&&"ready"==m.$b&&(l=bh(this,m.layer),l.Oc(b,m,c)&&e.push(m));f=b.size[0]*b.pixelRatio;g=b.size[1]*b.pixelRatio;if(this.a.width!=f||this.a.height!=g)this.a.width=f,this.a.height=g;d.bindFramebuffer(36160,
+null);d.clearColor(0,0,0,0);d.clear(16384);d.enable(3042);d.viewport(0,0,this.a.width,this.a.height);h=0;for(k=e.length;h<k;++h)m=e[h],l=bh(this,m.layer),l.Nc(b,m,c);this.j||(oe(this.a,!0),this.j=!0);$g(b);1024<this.b.f-this.l&&b.postRenderFunctions.push(this.md.bind(this));0!==this.i.a.length&&(b.postRenderFunctions.push(this.w),b.animate=!0);jl(this,"postcompose",b);ch(this,b);b.postRenderFunctions.push(ah)};
+p.Wb=function(b,c,d,e,f,g){var h;if(this.c.isContextLost())return!1;var k=c.viewState,l=c.layerStatesArray,m;for(m=l.length-1;0<=m;--m){h=l[m];var n=h.layer;if(Hg(h,k.resolution)&&f.call(g,n)&&(h=bh(this,n).fb(b,c,d,e)))return h}};p.Jc=function(b,c,d,e){var f=!1;if(this.c.isContextLost())return!1;var g=c.viewState,h=c.layerStatesArray,k;for(k=h.length-1;0<=k;--k){var l=h[k],m=l.layer;if(Hg(l,g.resolution)&&d.call(e,m)&&(f=bh(this,m).Ic(b,c)))return!0}return f};var kl=["canvas","webgl","dom"];
+function Z(b){T.call(this);var c=ll(b);this.Ja=void 0!==b.loadTilesWhileAnimating?b.loadTilesWhileAnimating:!1;this.wb=void 0!==b.loadTilesWhileInteracting?b.loadTilesWhileInteracting:!1;this.yb=void 0!==b.pixelRatio?b.pixelRatio:Df;this.xb=c.logos;this.pa=function(){this.h=void 0;this.Ce.call(this,Date.now())}.bind(this);this.Aa=zb();this.zb=zb();this.Ba=0;this.b=null;this.ea=Jb();this.u=this.G=null;this.a=document.createElement("DIV");this.a.className="ol-viewport"+(Gf?" ol-touch":"");this.a.style.position=
+"relative";this.a.style.overflow="hidden";this.a.style.width="100%";this.a.style.height="100%";this.a.style.msTouchAction="none";this.a.style.touchAction="none";this.o=document.createElement("DIV");this.o.className="ol-overlaycontainer";this.a.appendChild(this.o);this.j=document.createElement("DIV");this.j.className="ol-overlaycontainer-stopevent";b=["click","dblclick","mousedown","touchstart","mspointerdown",yg,"mousewheel","wheel"];for(var d=0,e=b.length;d<e;++d)Q(this.j,b[d],kb);this.a.appendChild(this.j);
+this.Y=new qg(this);for(var f in Bg)Q(this.Y,Bg[f],this.yc,this);this.S=c.keyboardEventTarget;this.i=null;Q(this.a,"wheel",this.Oa,this);Q(this.a,"mousewheel",this.Oa,this);this.s=c.controls;this.g=c.interactions;this.w=c.overlays;this.Tc={};this.D=new c.De(this.a,this);this.P=null;this.B=[];this.aa=[];this.na=new ih(this.vd.bind(this),this.Qd.bind(this));this.Ab={};Q(this,rb("layergroup"),this.Ad,this);Q(this,rb("view"),this.Rd,this);Q(this,rb("size"),this.Nd,this);Q(this,rb("target"),this.Pd,this);
+this.l(c.values);nd(this.s,function(b){b.setMap(this)},this);Q(this.s,"add",function(b){b.element.setMap(this)},this);Q(this.s,"remove",function(b){b.element.setMap(null)},this);nd(this.g,function(b){b.setMap(this)},this);Q(this.g,"add",function(b){b.element.setMap(this)},this);Q(this.g,"remove",function(b){b.element.setMap(null)},this);nd(this.w,this.gc,this);Q(this.w,"add",function(b){this.gc(b.element)},this);Q(this.w,"remove",function(b){var c=b.element.La();void 0!==c&&delete this.Tc[c.toString()];
+b.element.setMap(null)},this)}M(Z,T);p=Z.prototype;p.hd=function(b){this.s.push(b)};p.jd=function(b){this.g.push(b)};p.kd=function(b){ml(this).get("layers").push(b)};p.ld=function(b){this.w.push(b)};p.gc=function(b){var c=b.La();void 0!==c&&(this.Tc[c.toString()]=b);b.setMap(this)};p.fa=function(b){this.render();Array.prototype.push.apply(this.B,arguments)};
+p.J=function(){jb(this.Y);jb(this.D);gb(this.a,"wheel",this.Oa,this);gb(this.a,"mousewheel",this.Oa,this);void 0!==this.c&&(x.removeEventListener("resize",this.c,!1),this.c=void 0);this.h&&(x.cancelAnimationFrame(this.h),this.h=void 0);this.set("target",null);Z.X.J.call(this)};p.pd=function(b,c,d,e,f){if(this.b)return b=this.ta(b),this.D.Wb(b,this.b,c,void 0!==d?d:null,void 0!==e?e:cc,void 0!==f?f:null)};
+p.Td=function(b,c,d){if(!this.b)return!1;b=this.ta(b);return this.D.Jc(b,this.b,void 0!==c?c:cc,void 0!==d?d:null)};p.vc=function(b){var c=this.a.getBoundingClientRect();b=b.changedTouches?b.changedTouches[0]:b;return[b.clientX-c.left,b.clientY-c.top]};p.Tb=function(){return this.get("target")};p.Na=function(){var b=this.Tb();return void 0!==b?Zd(b):null};p.ta=function(b){var c=this.b;return c?(b=b.slice(),Kg(c.pixelToCoordinateMatrix,b,b)):null};function ml(b){return b.get("layergroup")}
+function Eh(b,c){var d=b.b;if(d){var e=c.slice(0,2);return Kg(d.coordinateToPixelMatrix,e,e)}return null}p.Pa=function(){return this.get("size")};p.O=function(){return this.get("view")};p.vd=function(b,c,d,e){var f=this.b;if(!(f&&c in f.wantedTiles&&f.wantedTiles[c][b.L.toString()]))return Infinity;b=d[0]-f.focus[0];d=d[1]-f.focus[1];return 65536*Math.log(e)+Math.sqrt(b*b+d*d)/e};p.Oa=function(b,c){var d=new og(c||b.type,this,b);this.yc(d)};
 p.yc=function(b){if(this.b){this.P=b.coordinate;b.frameState=this.b;var c=this.g.a,d;if(!1!==S(this,b))for(d=c.length-1;0<=d;d--){var e=c[d];if(e.get("active")&&!e.handleEvent(b))break}}};
-p.Ld=function(){var b=this.b,c=this.na;if(0!==c.a.length){var d=16,e=d;if(b){var f=b.viewHints;f[0]&&(d=this.Ja?8:0,e=2);f[1]&&(d=this.vb?8:0,e=2)}if(c.h<d){bh(c);for(var f=0,g,h;c.h<d&&f<e&&0<c.a.length;)g=Zg(c)[0],h=g.getKey(),0!==g.N()||h in c.g||(c.g[h]=!0,++c.h,++f,g.load())}}c=this.aa;d=0;for(e=c.length;d<e;++d)c[d](this,b);c.length=0};p.Md=function(){this.render()};
-p.Od=function(){var b;this.Sb()&&(b=this.ab());if(this.i){for(var c=0,d=this.i.length;c<d;++c)N(this.i[c]);this.i=null}b?(b.appendChild(this.a),b=this.S?this.S:b,this.i=[Q(b,"keydown",this.Na,this),Q(b,"keypress",this.Na,this)],this.c||(this.c=this.$b.bind(this),x.addEventListener("resize",this.c,!1))):(ge(this.a),void 0!==this.c&&(x.removeEventListener("resize",this.c,!1),this.c=void 0));this.$b()};p.Pd=function(){this.render()};p.Rd=function(){this.render()};
-p.Qd=function(){this.D&&(N(this.D),this.D=null);var b=this.O();b&&(this.D=Q(b,"propertychange",this.Rd,this));this.render()};p.Ad=function(){this.render()};p.Bd=function(){this.render()};p.zd=function(){this.s&&(this.s.forEach(N),this.s=null);var b=gl(this);b&&(this.s=[Q(b,"propertychange",this.Bd,this),Q(b,"change",this.Ad,this)]);this.render()};p.render=function(){void 0===this.h&&(this.h=x.requestAnimationFrame(this.pa))};p.ye=function(b){return this.g.remove(b)};p.ze=function(b){return gl(this).get("layers").remove(b)};
-p.Be=function(b){var c,d,e,f=this.Oa(),g=this.O(),h=null;if(c=void 0!==f&&0<f[0]&&0<f[1]&&g)c=!!g.ia()&&void 0!==g.I();if(c){var h=g.g.slice(),k=gl(this).Kb(),l={};c=0;for(d=k.length;c<d;++c)l[I(k[c].layer)]=k[c];e=g.N();h={animate:!1,attributions:{},coordinateToPixelMatrix:this.Aa,extent:null,focus:this.P?this.P:e.center,index:this.Ba++,layerStates:l,layerStatesArray:k,logos:Wa({},this.wb),pixelRatio:this.xb,pixelToCoordinateMatrix:this.yb,postRenderFunctions:[],size:f,skippedFeatureUids:this.zb,
-tileQueue:this.na,time:b,usedTiles:{},viewState:e,viewHints:h,wantedTiles:{}}}if(h){b=this.w;c=f=0;for(d=b.length;c<d;++c)g=b[c],g(this,h)&&(b[f++]=g);b.length=f;h.extent=Zb(e.center,e.resolution,e.rotation,h.size)}this.b=h;this.B.sb(h);h&&(h.animate&&this.render(),Array.prototype.push.apply(this.aa,h.postRenderFunctions),0!==this.w.length||h.viewHints[0]||h.viewHints[1]||Rb(h.extent,this.ea)||(S(this,new se("moveend",this,h)),Mb(h.extent,this.ea)));S(this,new se("postrender",this,h));c=e=this.Ld;
-this&&(c=ma(e,this));!ga(x.setImmediate)||x.Window&&x.Window.prototype&&!W("Edge")&&x.Window.prototype.setImmediate==x.setImmediate?(ef||(ef=ff()),ef(c)):x.setImmediate(c)};
-p.$b=function(){var b=this.ab();if(b){var c=Yd(b),d=Gd&&b.currentStyle,e;if(e=d)Wd(c),e=!0;if(e&&"auto"!=d.width&&"auto"!=d.height&&!d.boxSizing)c=oe(b,d.width,"width","pixelWidth"),b=oe(b,d.height,"height","pixelHeight"),b=new Vd(c,b);else{d=new Vd(b.offsetWidth,b.offsetHeight);if(Gd){c=pe(b,"paddingLeft");e=pe(b,"paddingRight");var f=pe(b,"paddingTop"),g=pe(b,"paddingBottom"),c=new ie(f,e,g,c)}else c=je(b,"paddingLeft"),e=je(b,"paddingRight"),f=je(b,"paddingTop"),g=je(b,"paddingBottom"),c=new ie(parseFloat(f),
-parseFloat(e),parseFloat(g),parseFloat(c));!Gd||9<=Number(Sd)?(e=je(b,"borderLeftWidth"),f=je(b,"borderRightWidth"),g=je(b,"borderTopWidth"),b=je(b,"borderBottomWidth"),b=new ie(parseFloat(g),parseFloat(f),parseFloat(b),parseFloat(e))):(e=re(b,"borderLeft"),f=re(b,"borderRight"),g=re(b,"borderTop"),b=re(b,"borderBottom"),b=new ie(g,f,b,e));b=new Vd(d.width-b.left-c.left-c.right-b.right,d.height-b.top-c.top-c.bottom-b.bottom)}this.set("size",[b.width,b.height])}else this.set("size",void 0)};
-function fl(b){var c=null;void 0!==b.keyboardEventTarget&&(c="string"===typeof b.keyboardEventTarget?document.getElementById(b.keyboardEventTarget):b.keyboardEventTarget);var d={},e={};if(void 0===b.logo||"boolean"===typeof b.logo&&b.logo)e["data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAMAAABEpIrGAAAAA3NCSVQICAjb4U/gAAAACXBIWXMAAAHGAAABxgEXwfpGAAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAAhNQTFRF////AP//AICAgP//AFVVQECA////K1VVSbbbYL/fJ05idsTYJFtbbcjbJllmZszWWMTOIFhoHlNiZszTa9DdUcHNHlNlV8XRIVdiasrUHlZjIVZjaMnVH1RlIFRkH1RkH1ZlasvYasvXVsPQH1VkacnVa8vWIVZjIFRjVMPQa8rXIVVkXsXRsNveIFVkIFZlIVVj3eDeh6GmbMvXH1ZkIFRka8rWbMvXIFVkIFVjIFVkbMvWH1VjbMvWIFVlbcvWIFVla8vVIFVkbMvWbMvVH1VkbMvWIFVlbcvWIFVkbcvVbMvWjNPbIFVkU8LPwMzNIFVkbczWIFVkbsvWbMvXIFVkRnB8bcvW2+TkW8XRIFVkIlZlJVloJlpoKlxrLl9tMmJwOWd0Omh1RXF8TneCT3iDUHiDU8LPVMLPVcLPVcPQVsPPVsPQV8PQWMTQWsTQW8TQXMXSXsXRX4SNX8bSYMfTYcfTYsfTY8jUZcfSZsnUaIqTacrVasrVa8jTa8rWbI2VbMvWbcvWdJObdcvUdszUd8vVeJaee87Yfc3WgJyjhqGnitDYjaarldPZnrK2oNbborW5o9bbo9fbpLa6q9ndrL3ArtndscDDutzfu8fJwN7gwt7gxc/QyuHhy+HizeHi0NfX0+Pj19zb1+Tj2uXk29/e3uLg3+Lh3+bl4uXj4ufl4+fl5Ofl5ufl5ujm5+jmySDnBAAAAFp0Uk5TAAECAgMEBAYHCA0NDg4UGRogIiMmKSssLzU7PkJJT1JTVFliY2hrdHZ3foSFhYeJjY2QkpugqbG1tre5w8zQ09XY3uXn6+zx8vT09vf4+Pj5+fr6/P39/f3+gz7SsAAAAVVJREFUOMtjYKA7EBDnwCPLrObS1BRiLoJLnte6CQy8FLHLCzs2QUG4FjZ5GbcmBDDjxJBXDWxCBrb8aM4zbkIDzpLYnAcE9VXlJSWlZRU13koIeW57mGx5XjoMZEUqwxWYQaQbSzLSkYGfKFSe0QMsX5WbjgY0YS4MBplemI4BdGBW+DQ11eZiymfqQuXZIjqwyadPNoSZ4L+0FVM6e+oGI6g8a9iKNT3o8kVzNkzRg5lgl7p4wyRUL9Yt2jAxVh6mQCogae6GmflI8p0r13VFWTHBQ0rWPW7ahgWVcPm+9cuLoyy4kCJDzCm6d8PSFoh0zvQNC5OjDJhQopPPJqph1doJBUD5tnkbZiUEqaCnB3bTqLTFG1bPn71kw4b+GFdpLElKIzRxxgYgWNYc5SCENVHKeUaltHdXx0dZ8uBI1hJ2UUDgq82CM2MwKeibqAvSO7MCABq0wXEPiqWEAAAAAElFTkSuQmCC"]=
-"http://openlayers.org/";else{var f=b.logo;"string"===typeof f?e[f]="":ha(f)&&(e[f.src]=f.href)}f=b.layers instanceof ai?b.layers:new ai({layers:b.layers});d.layergroup=f;d.target=b.target;d.view=void 0!==b.view?b.view:new V;var f=Tg,g;void 0!==b.renderer?Array.isArray(b.renderer)?g=b.renderer:"string"===typeof b.renderer&&(g=[b.renderer]):g=el;var h,k;h=0;for(k=g.length;h<k;++h){var l=g[h];if("canvas"==l){if(zf){f=ck;break}}else if("dom"==l){f=jk;break}else if("webgl"==l&&sf){f=bl;break}}var m;void 0!==
-b.controls?m=Array.isArray(b.controls)?new ld(b.controls.slice()):b.controls:m=df();if(void 0!==b.interactions)g=Array.isArray(b.interactions)?new ld(b.interactions.slice()):b.interactions;else{g={};h=new ld;k=new dh;(void 0!==g.altShiftDragRotate?g.altShiftDragRotate:1)&&h.push(new zh);(void 0!==g.doubleClickZoom?g.doubleClickZoom:1)&&h.push(new jh({delta:g.zoomDelta,duration:g.zoomDuration}));(void 0!==g.dragPan?g.dragPan:1)&&h.push(new uh({kinetic:k}));(void 0!==g.pinchRotate?g.pinchRotate:1)&&
-h.push(new Th);(void 0!==g.pinchZoom?g.pinchZoom:1)&&h.push(new Xh({duration:g.zoomDuration}));if(void 0!==g.keyboard?g.keyboard:1)h.push(new Nh),h.push(new Ph({delta:g.zoomDelta,duration:g.zoomDuration}));(void 0!==g.mouseWheelZoom?g.mouseWheelZoom:1)&&h.push(new Rh({duration:g.zoomDuration}));(void 0!==g.shiftDragZoom?g.shiftDragZoom:1)&&h.push(new Mh({duration:g.zoomDuration}));g=h}b=void 0!==b.overlays?Array.isArray(b.overlays)?new ld(b.overlays.slice()):b.overlays:new ld;return{controls:m,interactions:g,
-keyboardEventTarget:c,logos:e,overlays:b,Ce:f,values:d}}mc(fi);mc(mi);mi.forEach(function(b){fi.forEach(function(c){nc(b,c,gi);nc(c,b,hi)})});function hl(b){T.call(this);this.j=b.id;this.i=void 0!==b.insertFirst?b.insertFirst:!0;this.o=void 0!==b.stopEvent?b.stopEvent:!0;this.b=document.createElement("DIV");this.b.className="ol-overlay-container";this.b.style.position="absolute";this.autoPan=void 0!==b.autoPan?b.autoPan:!1;this.g=void 0!==b.autoPanAnimation?b.autoPanAnimation:{};this.h=void 0!==b.autoPanMargin?b.autoPanMargin:20;this.a={hb:"",pb:"",tb:"",ub:"",visible:!0};this.c=null;Q(this,rb("element"),this.xd,this);Q(this,rb("map"),
-this.Gd,this);Q(this,rb("offset"),this.Hd,this);Q(this,rb("position"),this.Jd,this);Q(this,rb("positioning"),this.Kd,this);void 0!==b.element&&this.set("element",b.element);this.set("offset",void 0!==b.offset?b.offset:[0,0]);this.set("positioning",void 0!==b.positioning?b.positioning:"top-left");void 0!==b.position&&this.Ec(b.position)}M(hl,T);p=hl.prototype;p.La=function(){return this.j};p.xd=function(){ee(this.b);var b=this.get("element");b&&this.b.appendChild(b)};
-p.Gd=function(){this.c&&(ge(this.b),N(this.c),this.c=null);var b=this.get("map");b&&(this.c=Q(b,"postrender",this.render,this),il(this),b=this.o?b.j:b.o,this.i?fe(b,this.b,0):b.appendChild(this.b))};p.render=function(){il(this)};p.Hd=function(){il(this)};
-p.Jd=function(){il(this);if(void 0!==this.get("position")&&this.autoPan){var b=this.get("map");if(void 0!==b&&b.ab()){var c=jl(b.ab(),b.Oa()),d=this.get("element"),e=d.offsetWidth,f=d.currentStyle||x.getComputedStyle(d),e=e+(parseInt(f.marginLeft,10)+parseInt(f.marginRight,10)),f=d.offsetHeight,g=d.currentStyle||x.getComputedStyle(d),f=f+(parseInt(g.marginTop,10)+parseInt(g.marginBottom,10)),h=jl(d,[e,f]),d=this.h;Nb(c,h)||(e=h[0]-c[0],f=c[2]-h[2],g=h[1]-c[1],h=c[3]-h[3],c=[0,0],0>e?c[0]=e-d:0>f&&
-(c[0]=Math.abs(f)+d),0>g?c[1]=g-d:0>h&&(c[1]=Math.abs(h)+d),0===c[0]&&0===c[1])||(d=b.O().ia(),e=yh(b,d),c=[e[0]+c[0],e[1]+c[1]],this.g&&(this.g.source=d,b.fa(cd(this.g))),b.O().oa(b.ta(c)))}}};p.Kd=function(){il(this)};p.setMap=function(b){this.set("map",b)};p.Ec=function(b){this.set("position",b)};
-function jl(b,c){var d=Yd(b),e=new Ud(0,0),f;f=d?Yd(d):document;var g;(g=!Gd||9<=Number(Sd))||(Wd(f),g=!0);b!=(g?f.documentElement:f.body)&&(f=ke(b),g=Wd(d).a,d=g.scrollingElement?g.scrollingElement:Jd?g.body||g.documentElement:g.documentElement,g=g.parentWindow||g.defaultView,d=Gd&&Qd("10")&&g.pageYOffset!=d.scrollTop?new Ud(d.scrollLeft,d.scrollTop):new Ud(g.pageXOffset||d.scrollLeft,g.pageYOffset||d.scrollTop),e.x=f.left+d.x,e.y=f.top+d.y);return[e.x,e.y,e.x+c[0],e.y+c[1]]}
-function kl(b,c){b.a.visible!==c&&(ne(b.b,c),b.a.visible=c)}
-function il(b){var c=b.get("map"),d=b.get("position");if(void 0!==c&&c.b&&void 0!==d){var d=yh(c,d),e=c.Oa(),c=b.b.style,f=b.get("offset"),g=b.get("positioning"),h=f[0],f=f[1];if("bottom-right"==g||"center-right"==g||"top-right"==g)""!==b.a.pb&&(b.a.pb=c.left=""),h=Math.round(e[0]-d[0]-h)+"px",b.a.tb!=h&&(b.a.tb=c.right=h);else{""!==b.a.tb&&(b.a.tb=c.right="");if("bottom-center"==g||"center-center"==g||"top-center"==g)h-=le(b.b).width/2;h=Math.round(d[0]+h)+"px";b.a.pb!=h&&(b.a.pb=c.left=h)}if("bottom-left"==
-g||"bottom-center"==g||"bottom-right"==g)""!==b.a.ub&&(b.a.ub=c.top=""),d=Math.round(e[1]-d[1]-f)+"px",b.a.hb!=d&&(b.a.hb=c.bottom=d);else{""!==b.a.hb&&(b.a.hb=c.bottom="");if("center-left"==g||"center-center"==g||"center-right"==g)f-=le(b.b).height/2;d=Math.round(d[1]+f)+"px";b.a.ub!=d&&(b.a.ub=c.top=d)}kl(b,!0)}else kl(b,!1)};function ll(){this.defaultDataProjection=null}function ml(b,c,d){var e;d&&(e={dataProjection:d.dataProjection?d.dataProjection:b.f(Cj(c)),featureProjection:d.featureProjection});var f;e&&(f={featureProjection:e.featureProjection,dataProjection:e.dataProjection?e.dataProjection:b.defaultDataProjection,rightHanded:e.rightHanded},e.decimals&&(f.decimals=e.decimals));return f}
-function nl(b,c){var d=c?lc(c.featureProjection):null,e=c?lc(c.dataProjection):null;if(d&&e&&!wc(d,e))if(b instanceof zc)d=b.o(e,d);else{e=xc(e,d);d=[b[0],b[1],b[0],b[3],b[2],b[1],b[2],b[3]];e(d,d,2);var f=[d[0],d[2],d[4],d[6]],g=[d[1],d[3],d[5],d[7]],d=Math.min.apply(null,f),e=Math.min.apply(null,g),f=Math.max.apply(null,f),g=Math.max.apply(null,g),d=Ob(d,e,f,g,void 0)}else d=b;return d};function pl(){this.defaultDataProjection=null}M(pl,ll);function Cj(b){return ha(b)?b:"string"===typeof b?(b=JSON.parse(b))?b:null:null}pl.prototype.U=function(){return"json"};pl.prototype.g=function(b,c){return this.a(Cj(b),ml(this,b,c))};pl.prototype.b=function(b,c){return this.h(Cj(b),ml(this,b,c))};function ql(b,c,d,e,f){var g=NaN,h=NaN,k=(d-c)/e;if(0!==k)if(1==k)g=b[c],h=b[c+1];else if(2==k)g=.5*b[c]+.5*b[c+e],h=.5*b[c+1]+.5*b[c+e+1];else{var h=b[c],k=b[c+1],l=0,g=[0],m;for(m=c+e;m<d;m+=e){var n=b[m],q=b[m+1],l=l+Math.sqrt((n-h)*(n-h)+(q-k)*(q-k));g.push(l);h=n;k=q}d=.5*l;l=0;m=g.length;for(n=!1;l<m;)h=l+(m-l>>1),k=+Ha(g[h],d),0>k?l=h+1:(m=h,n=!k);h=n?l:~l;0>h?(d=(d-g[-h-2])/(g[-h-1]-g[-h-2]),c+=(-h-2)*e,g=b[c],g=g+d*(b[c+e]-g),h=b[c+1],h=h+d*(b[c+e+1]-h)):(g=b[c+h*e],h=b[c+h*e+1])}return f?
-(f[0]=g,f[1]=h,f):[g,h]};function rl(b,c){Bc.call(this);this.c=null;this.j=-1;this.W(b,c)}M(rl,Bc);p=rl.prototype;p.clone=function(){var b=new rl(null);U(b,this.g,this.a.slice());b.v();return b};p.ra=function(){return Hc(this.a,0,this.a.length,this.b)};function Ni(b){if(b.j!=b.f){var c;c=ql(b.a,0,b.a.length,b.b,b.c);b.c=c;b.j=b.f}return b.c}p.Ma=function(b){var c=[];c.length=Jc(this.a,0,this.a.length,this.b,b,c,0);b=new rl(null);U(b,"XY",c);b.v();return b};p.U=function(){return"LineString"};
-p.W=function(b,c){b?(Dc(this,c,b,1),this.a||(this.a=[]),this.a.length=Fc(this.a,0,b,this.b)):U(this,"XY",null);this.v()};function sl(b,c){Bc.call(this);this.c=[];this.W(b,c)}M(sl,Bc);p=sl.prototype;p.clone=function(){var b=new sl(null),c=this.c.slice();U(b,this.g,this.a.slice());b.c=c;b.v();return b};p.ra=function(){return Ic(this.a,0,this.c,this.b)};p.$a=function(){return this.c};function Oi(b){var c=[],d=b.a,e=0,f=b.c;b=b.b;var g,h;g=0;for(h=f.length;g<h;++g){var k=f[g],e=ql(d,e,k,b);Ka(c,e);e=k}return c}
-p.Ma=function(b){var c=[],d=[],e=this.a,f=this.c,g=this.b,h=0,k=0,l,m;l=0;for(m=f.length;l<m;++l){var n=f[l],k=Jc(e,h,n,g,b,c,k);d.push(k);h=n}c.length=k;b=new sl(null);U(b,"XY",c);b.c=d;b.v();return b};p.U=function(){return"MultiLineString"};p.W=function(b,c){if(b){Dc(this,c,b,2);this.a||(this.a=[]);var d=Gc(this.a,0,b,this.b,this.c);this.a.length=0===d.length?0:d[d.length-1]}else d=this.c,U(this,"XY",null),this.c=d;this.v()};function tl(b,c){Bc.call(this);this.W(b,c)}M(tl,Bc);tl.prototype.clone=function(){var b=new tl(null);U(b,this.g,this.a.slice());b.v();return b};tl.prototype.ra=function(){return Hc(this.a,0,this.a.length,this.b)};tl.prototype.U=function(){return"MultiPoint"};tl.prototype.W=function(b,c){b?(Dc(this,c,b,1),this.a||(this.a=[]),this.a.length=Fc(this.a,0,b,this.b)):U(this,"XY",null);this.v()};function ul(b,c){Bc.call(this);this.c=[];this.B=-1;this.D=null;this.G=-1;this.j=null;this.W(b,c)}M(ul,Bc);p=ul.prototype;p.clone=function(){for(var b=new ul(null),c=this.c.length,d=Array(c),e=0;e<c;++e)d[e]=this.c[e].slice();U(b,this.g,this.a.slice());b.c=d;b.v();return b};p.ra=function(b){var c;void 0!==b?(c=Pi(this).slice(),Sc(c,this.c,this.b,b)):c=this.a;b=c;c=this.c;var d=this.b,e=0,f=[],g=0,h,k;h=0;for(k=c.length;h<k;++h){var l=c[h];f[g++]=Ic(b,e,l,d,f[g]);e=l[l.length-1]}f.length=g;return f};
-function Qi(b){if(b.B!=b.f){var c=b.a,d=b.c,e=b.b,f=0,g=[],h,k,l=Jb();h=0;for(k=d.length;h<k;++h){var m=d[h],l=c,n=m[0],q=e,r=Pb(void 0),l=Tb(r,l,f,n,q);g.push((l[0]+l[2])/2,(l[1]+l[3])/2);f=m[m.length-1]}c=Pi(b);d=b.c;e=b.b;h=0;k=[];m=0;for(l=d.length;m<l;++m)f=d[m],k=Oc(c,h,f,e,g,2*m,k),h=f[f.length-1];b.D=k;b.B=b.f}return b.D}
-function Pi(b){if(b.G!=b.f){var c=b.a,d;a:{d=b.c;var e,f;e=0;for(f=d.length;e<f;++e)if(!Qc(c,d[e],b.b,void 0)){d=!1;break a}d=!0}d?b.j=c:(b.j=c.slice(),b.j.length=Sc(b.j,b.c,b.b));b.G=b.f}return b.j}p.Ma=function(b){var c=[],d=[],e=this.a,f=this.c,g=this.b;b=Math.sqrt(b);var h=0,k=0,l,m;l=0;for(m=f.length;l<m;++l){var n=f[l],q=[],k=Kc(e,h,n,g,b,c,k,q);d.push(q);h=n[n.length-1]}c.length=k;e=new ul(null);U(e,"XY",c);e.c=d;e.v();return e};p.U=function(){return"MultiPolygon"};
-p.W=function(b,c){if(b){Dc(this,c,b,3);this.a||(this.a=[]);var d=this.a,e=this.b,f=this.c,g=0,f=f?f:[],h=0,k,l;k=0;for(l=b.length;k<l;++k)g=Gc(d,g,b[k],e,f[h]),f[h++]=g,g=g[g.length-1];f.length=h;0===f.length?this.a.length=0:(d=f[f.length-1],this.a.length=0===d.length?0:d[d.length-1])}else d=this.c,U(this,"XY",null),this.c=d;this.v()};function vl(b){b=b?b:{};this.defaultDataProjection=null;this.c=b.geometryName}M(vl,pl);function wl(b){var c="XY";!0===b.hasZ&&!0===b.hasM?c="XYZM":!0===b.hasZ?c="XYZ":!0===b.hasM&&(c="XYM");return c}
-var xl={Point:function(b){return void 0!==b.m&&void 0!==b.z?new Mc([b.x,b.y,b.z,b.m],"XYZM"):void 0!==b.z?new Mc([b.x,b.y,b.z],"XYZ"):void 0!==b.m?new Mc([b.x,b.y,b.m],"XYM"):new Mc([b.x,b.y])},LineString:function(b){return new rl(b.paths[0],wl(b))},Polygon:function(b){return new Tc(b.rings,wl(b))},MultiPoint:function(b){return new tl(b.points,wl(b))},MultiLineString:function(b){return new sl(b.paths,wl(b))},MultiPolygon:function(b){return new ul(b.rings,wl(b))}};
-vl.prototype.a=function(b,c){var d;if(d=b.geometry){var e;if(ea(d.x)&&ea(d.y))e="Point";else if(d.points)e="MultiPoint";else if(d.paths)e=1===d.paths.length?"LineString":"MultiLineString";else if(d.rings){var f=d.rings,g=wl(d),h=[];e=[];var k,l;k=0;for(l=f.length;k<l;++k){var m=Ja(f[k]);Pc(m,0,m.length,g.length)?h.push([f[k]]):e.push(f[k])}for(;e.length;){f=e.shift();g=!1;for(k=h.length-1;0<=k;k--)if(Nb((new Lc(h[k][0])).C(),(new Lc(f)).C())){h[k].push(f);g=!0;break}g||h.push([f.reverse()])}d=Wa({},
-d);1===h.length?(e="Polygon",d.rings=h[0]):(e="MultiPolygon",d.rings=h)}d=nl((0,xl[e])(d),c)}else d=null;h=new xj;this.c&&zj(h,this.c);yj(h,d);c&&c.Pb&&b.attributes[c.Pb]&&(h.g=b.attributes[c.Pb],h.v());b.attributes&&h.l(b.attributes);return h};vl.prototype.h=function(b,c){var d=c?c:{};if(b.features){var e=[],f=b.features,g,h;d.Pb=b.objectIdFieldName;g=0;for(h=f.length;g<h;++g)e.push(this.a(f[g],d));return e}return[this.a(b,d)]};
-vl.prototype.f=function(b){return b.spatialReference&&b.spatialReference.wkid?lc("EPSG:"+b.spatialReference.wkid):null};function yl(b){zc.call(this);this.a=b?b:null;zl(this)}M(yl,zc);function Al(b){var c,d;if(b.a)for(c=0,d=b.a.length;c<d;++c)gb(b.a[c],"change",b.v,b)}function zl(b){var c,d;if(b.a)for(c=0,d=b.a.length;c<d;++c)Q(b.a[c],"change",b.v,b)}p=yl.prototype;p.clone=function(){var b=new yl(null),c=this.a,d=[],e,f;e=0;for(f=c.length;e<f;++e)d.push(c[e].clone());Al(b);b.a=d;zl(b);b.v();return b};p.ib=function(b){Pb(b);for(var c=this.a,d=0,e=c.length;d<e;++d)Sb(b,c[d].C());return b};
-p.Nb=function(b){this.s!=this.f&&(Ya(this.h),this.i=0,this.s=this.f);if(0>b||0!==this.i&&b<this.i)return this;var c=b.toString();if(this.h.hasOwnProperty(c))return this.h[c];var d=[],e=this.a,f=!1,g,h;g=0;for(h=e.length;g<h;++g){var k=e[g],l=k.Nb(b);d.push(l);l!==k&&(f=!0)}if(f)return b=new yl(null),Al(b),b.a=d,zl(b),b.v(),this.h[c]=b;this.i=b;return this};p.U=function(){return"GeometryCollection"};p.rotate=function(b,c){for(var d=this.a,e=0,f=d.length;e<f;++e)d[e].rotate(b,c);this.v()};
-p.Db=function(b){var c=this.a,d,e;d=0;for(e=c.length;d<e;++d)c[d].Db(b);this.v()};p.J=function(){Al(this);yl.$.J.call(this)};function Bl(b){b=b?b:{};this.defaultDataProjection=null;this.defaultDataProjection=lc(b.defaultDataProjection?b.defaultDataProjection:"EPSG:4326");this.c=b.geometryName}M(Bl,pl);function Cl(b,c){return b?nl((0,Dl[b.type])(b),c):null}
-var Dl={Point:function(b){return new Mc(b.coordinates)},LineString:function(b){return new rl(b.coordinates)},Polygon:function(b){return new Tc(b.coordinates)},MultiPoint:function(b){return new tl(b.coordinates)},MultiLineString:function(b){return new sl(b.coordinates)},MultiPolygon:function(b){return new ul(b.coordinates)},GeometryCollection:function(b,c){var d=b.geometries.map(function(b){return Cl(b,c)});return new yl(d)}};
-Bl.prototype.a=function(b,c){var d=Cl(b.geometry,c),e=new xj;this.c&&zj(e,this.c);yj(e,d);void 0!==b.id&&(e.g=b.id,e.v());b.properties&&e.l(b.properties);return e};Bl.prototype.h=function(b,c){if("Feature"==b.type)return[this.a(b,c)];if("FeatureCollection"==b.type){var d=[],e=b.features,f,g;f=0;for(g=e.length;f<g;++f)d.push(this.a(e[f],c));return d}return[]};Bl.prototype.f=function(b){return(b=b.crs)?"name"==b.type?lc(b.properties.name):"EPSG"==b.type?lc("EPSG:"+b.properties.code):null:this.defaultDataProjection};function El(b,c,d){if("array"==ba(c))for(var e=0;e<c.length;e++)El(b,String(c[e]),d);else null!=c&&d.push("&",b,""===c?"":"=",encodeURIComponent(String(c)))};function Fl(b,c,d){Bc.call(this);Gl(this,b,c?c:0,d)}M(Fl,Bc);Fl.prototype.clone=function(){var b=new Fl(null);U(b,this.g,this.a.slice());b.v();return b};Fl.prototype.ib=function(b){var c=this.a,d=c[this.b]-c[0];return Ob(c[0]-d,c[1]-d,c[0]+d,c[1]+d,b)};Fl.prototype.U=function(){return"Circle"};function Gl(b,c,d,e){if(c){Dc(b,e,c,0);b.a||(b.a=[]);e=b.a;c=Ec(e,c);e[c++]=e[0]+d;var f;d=1;for(f=b.b;d<f;++d)e[c++]=e[d];e.length=c}else U(b,"XY",null);b.v()};function Hl(b,c,d,e,f){Ae.call(this,b,c);this.g=d;this.b=new Image;null!==e&&(this.b.crossOrigin=e);this.f={};this.c=null;this.h=f}M(Hl,Ae);p=Hl.prototype;p.J=function(){1==this.state&&Il(this);this.a&&jb(this.a);this.state=5;Be(this);Hl.$.J.call(this)};p.T=function(b){if(void 0!==b){var c=I(b);if(c in this.f)return this.f[c];b=$a(this.f)?this.b:this.b.cloneNode(!1);return this.f[c]=b}return this.b};p.getKey=function(){return this.g};p.he=function(){this.state=3;Il(this);Be(this)};
-p.ie=function(){this.state=this.b.naturalWidth&&this.b.naturalHeight?2:4;Il(this);Be(this)};p.load=function(){0==this.state&&(this.state=1,Be(this),this.c=[Q(this.b,"error",this.he,this,!0),Q(this.b,"load",this.ie,this,!0)],this.h(this,this.g))};function Il(b){b.c.forEach(N);b.c=null};function Jl(b,c){R.call(this,b);this.feature=c}M(Jl,R);
-function Kl(b){rh.call(this,{handleDownEvent:Ll,handleEvent:Ml,handleUpEvent:Nl});this.P=null;this.o=!1;this.Ba=b.source?b.source:null;this.pa=b.features?b.features:null;this.Zc=b.snapTolerance?b.snapTolerance:12;this.D=b.type;this.b=Ol(this.D);this.na=b.minPoints?b.minPoints:this.b===Pl?3:2;this.ea=b.maxPoints?b.maxPoints:Infinity;var c=b.geometryFunction;if(!c)if("Circle"===this.D)c=function(b,c){var d=c?c:new Fl([NaN,NaN]),h=b[0],k=b[1],l=h[0]-k[0],h=h[1]-k[1];Gl(d,b[0],Math.sqrt(l*l+h*h));return d};
-else{var d,c=this.b;c===Rl?d=Mc:c===Sl?d=rl:c===Pl&&(d=Tc);c=function(b,c){var g=c;g?g.W(b):g=new d(b);return g}}this.u=c;this.B=this.i=this.a=this.j=this.g=this.h=null;this.gd=b.clickTolerance?b.clickTolerance*b.clickTolerance:36;this.X=new Y({source:new Lj({useSpatialIndex:!1,wrapX:b.wrapX?b.wrapX:!1}),style:b.style?b.style:Tl()});this.Aa=b.geometryName;this.zb=b.condition?b.condition:nh;this.aa=b.freehandCondition?b.freehandCondition:oh;Q(this,rb("active"),this.Ja,this)}M(Kl,rh);
-function Tl(){var b=Fi();return function(c){return b[c.M().U()]}}Kl.prototype.setMap=function(b){Kl.$.setMap.call(this,b);this.Ja()};function Ml(b){this.b!==Sl&&this.b!==Pl||!this.aa(b)||(this.o=!0);var c=!this.o;this.o&&b.type===ug?(Ul(this,b),c=!1):b.type===tg?c=Vl(this,b):b.type===ng&&(c=!1);return sh.call(this,b)&&c}function Ll(b){return this.zb(b)?(this.P=b.pixel,!0):this.o?(this.P=b.pixel,this.h||Wl(this,b),!0):!1}
-function Nl(b){this.o=!1;var c=this.P,d=b.pixel,e=c[0]-d[0],c=c[1]-d[1],d=!0;e*e+c*c<=this.gd&&(Vl(this,b),this.h?this.b===Xl?Yl(this):Zl(this,b)?Yl(this):Ul(this,b):(Wl(this,b),this.b===Rl&&Yl(this)),d=!1);return d}
-function Vl(b,c){if(b.h){var d=c.coordinate,e=b.g.M(),f;b.b===Rl?f=b.a:b.b===Pl?(f=b.a[0],f=f[f.length-1],Zl(b,c)&&(d=b.h.slice())):(f=b.a,f=f[f.length-1]);f[0]=d[0];f[1]=d[1];b.u(b.a,e);b.j&&b.j.M().W(d);e instanceof Tc&&b.b!==Pl?(b.i||(b.i=new xj(new rl(null))),0>=e.c.length?e=null:(d=new Lc(null),U(d,e.g,e.a.slice(0,e.c[0])),d.v(),e=d),d=b.i.M(),U(d,e.g,e.a),d.v()):b.B&&(d=b.i.M(),d.W(b.B));$l(b)}else e=c.coordinate.slice(),b.j?b.j.M().W(e):(b.j=new xj(new Mc(e)),$l(b));return!0}
-function Zl(b,c){var d=!1;if(b.g){var e=!1,f=[b.h];b.b===Sl?e=b.a.length>b.na:b.b===Pl&&(e=b.a[0].length>b.na,f=[b.a[0][0],b.a[0][b.a[0].length-2]]);if(e)for(var e=c.map,g=0,h=f.length;g<h;g++){var k=f[g],l=yh(e,k),m=c.pixel,d=m[0]-l[0],l=m[1]-l[1],m=b.o&&b.aa(c)?1:b.Zc;if(d=Math.sqrt(d*d+l*l)<=m){b.h=k;break}}}return d}
-function Wl(b,c){var d=c.coordinate;b.h=d;b.b===Rl?b.a=d.slice():b.b===Pl?(b.a=[[d.slice(),d.slice()]],b.B=b.a[0]):(b.a=[d.slice(),d.slice()],b.b===Xl&&(b.B=b.a));b.B&&(b.i=new xj(new rl(b.B)));d=b.u(b.a);b.g=new xj;b.Aa&&zj(b.g,b.Aa);yj(b.g,d);$l(b);S(b,new Jl("drawstart",b.g))}
-function Ul(b,c){var d=c.coordinate,e=b.g.M(),f,g;if(b.b===Sl)b.h=d.slice(),g=b.a,g.push(d.slice()),f=g.length>b.ea,b.u(g,e);else if(b.b===Pl){g=b.a[0];g.push(d.slice());if(f=g.length>b.ea)b.h=g[0];b.u(b.a,e)}$l(b);f&&Yl(b)}
-function Yl(b){var c=am(b),d=b.a,e=c.M();b.b===Sl?(d.pop(),b.u(d,e)):b.b===Pl&&(d[0].pop(),d[0].push(d[0][0]),b.u(d,e));"MultiPoint"===b.D?yj(c,new tl([d])):"MultiLineString"===b.D?yj(c,new sl([d])):"MultiPolygon"===b.D&&yj(c,new ul([d]));S(b,new Jl("drawend",c));b.pa&&b.pa.push(c);b.Ba&&b.Ba.Bb(c)}function am(b){b.h=null;var c=b.g;c&&(b.g=null,b.j=null,b.i=null,b.X.V().clear(!0));return c}Kl.prototype.w=dc;
-function $l(b){var c=[];b.g&&c.push(b.g);b.i&&c.push(b.i);b.j&&c.push(b.j);b=b.X.V();b.clear(!0);b.Cb(c)}Kl.prototype.Ja=function(){var b=this.S,c=this.get("active");b&&c||am(this);this.X.setMap(c?b:null)};function Ol(b){var c;"Point"===b||"MultiPoint"===b?c=Rl:"LineString"===b||"MultiLineString"===b?c=Sl:"Polygon"===b||"MultiPolygon"===b?c=Pl:"Circle"===b&&(c=Xl);return c}var Rl="Point",Sl="LineString",Pl="Polygon",Xl="Circle";function bm(b,c,d,e,f,g,h,k,l,m,n){Ae.call(this,f,0);this.u=void 0!==n?n:!1;this.s=h;this.o=k;this.c=null;this.f={};this.g=c;this.l=e;this.i=g?g:f;this.b=[];this.Ra=null;this.h=0;g=Ie(e,this.i);k=this.l.C();f=this.g.C();g=k?$b(g,k):g;if(0===Ub(g))this.state=4;else if((k=b.C())&&(f?f=$b(f,k):f=k),k=e.I(this.i[0]),n=Yb(g),e=xc(d,b)(n,void 0,n.length),k=d.getPointResolution(k,n),n=pc(d),void 0!==n&&(k*=n),n=pc(b),void 0!==n&&(k/=n),e=b.getPointResolution(k,e)/k,isFinite(e)&&0<e&&(k/=e),e=k,!isFinite(e)||
-0>=e)this.state=4;else if(this.j=new uj(b,d,g,f,e*(void 0!==m?m:.5)),0===this.j.c.length)this.state=4;else if(this.h=Pe(c,e),d=wj(this.j),f&&(b.a?(d[1]=Ca(d[1],f[1],f[3]),d[3]=Ca(d[3],f[1],f[3])):d=$b(d,f)),Ub(d))if(b=Je(c,d,this.h),100>b.ha()*(b.c-b.b+1)){for(c=b.a;c<=b.f;c++)for(d=b.b;d<=b.c;d++)(m=l(this.h,c,d,h))&&this.b.push(m);0===this.b.length&&(this.state=4)}else this.state=3;else this.state=4}M(bm,Ae);bm.prototype.J=function(){1==this.state&&(this.Ra.forEach(N),this.Ra=null);bm.$.J.call(this)};
-bm.prototype.T=function(b){if(void 0!==b){var c=I(b);if(c in this.f)return this.f[c];b=$a(this.f)?this.c:this.c.cloneNode(!1);return this.f[c]=b}return this.c};
-bm.prototype.Uc=function(){var b=[];this.b.forEach(function(c){c&&2==c.N()&&b.push({extent:Ie(this.g,c.L),image:c.T()})},this);this.b.length=0;if(0===b.length)this.state=3;else{var c=this.i[0],d=Oe(this.l,c),e=ea(d)?d:d[0],d=ea(d)?d:d[1],c=this.l.I(c),f=this.g.I(this.h),g=Ie(this.l,this.i);this.c=tj(e,d,this.s,f,this.g.C(),c,g,this.j,b,this.o,this.u);this.state=2}Be(this)};
-bm.prototype.load=function(){if(0==this.state){this.state=1;Be(this);var b=0;this.Ra=[];this.b.forEach(function(c){var d=c.N();if(0==d||1==d){b++;var e;e=Q(c,"change",function(){var d=c.N();if(2==d||3==d||4==d)N(e),b--,0===b&&(this.Ra.forEach(N),this.Ra=null,this.Uc())},this);this.Ra.push(e)}},this);this.b.forEach(function(b){0==b.N()&&b.load()});0===b&&x.setTimeout(this.Uc.bind(this),0)}};function cm(b){ak.call(this,{attributions:b.attributions,cacheSize:b.cacheSize,extent:b.extent,logo:b.logo,opaque:b.opaque,projection:b.projection,state:b.state,tileGrid:b.tileGrid,tileLoadFunction:b.tileLoadFunction?b.tileLoadFunction:dm,tilePixelRatio:b.tilePixelRatio,tileUrlFunction:b.tileUrlFunction,url:b.url,urls:b.urls,wrapX:b.wrapX});this.crossOrigin=void 0!==b.crossOrigin?b.crossOrigin:null;this.tileClass=void 0!==b.tileClass?b.tileClass:Hl;this.b={};this.o={};this.S=b.reprojectionErrorThreshold}
-M(cm,ak);p=cm.prototype;p.Qc=function(){if(ye(this.a))return!0;for(var b in this.b)if(ye(this.b[b]))return!0;return!1};p.Rc=function(b,c){var d=this.bb(b);ze(this.a,this.a==d?c:{});for(var e in this.b){var f=this.b[e];ze(f,f==d?c:{})}};p.kb=function(){return 0};p.Lb=function(b){return this.c&&b&&!wc(this.c,b)?!1:cm.$.Lb.call(this,b)};p.la=function(b){var c=this.c;return!this.tileGrid||c&&!wc(c,b)?(c=I(b).toString(),c in this.o||(this.o[c]=Re(b)),this.o[c]):this.tileGrid};
-p.bb=function(b){var c=this.c;if(!c||wc(c,b))return this.a;b=I(b).toString();b in this.b||(this.b[b]=new xe);return this.b[b]};function em(b,c,d,e,f,g){c=[c,d,e];f=(d=Xe(b,c,g))?b.tileUrlFunction(d,f,g):void 0;f=new b.tileClass(c,void 0!==f?0:4,void 0!==f?f:"",b.crossOrigin,b.tileLoadFunction);f.key="";Q(f,"change",b.D,b);return f}
-function Ng(b,c,d,e,f,g){if(b.c&&g&&!wc(b.c,g)){var h=b.bb(g);d=[c,d,e];c=b.lb.apply(b,d);if(ve(h,c))return h.get(c);var k=b.c;e=b.la(k);var l=b.la(g),m=Xe(b,d,g);b=new bm(k,e,g,l,d,m,b.mb(f),0,function(b,c,d,e){return fm(this,b,c,d,e,k)}.bind(b),b.S,!1);h.set(c,b);return b}return fm(b,c,d,e,f,g)}
-function fm(b,c,d,e,f,g){var h=null,k=b.lb(c,d,e);if(ve(b.a,k)){if(h=b.a.get(k),""!=h.key){var l=h;h.a&&""==h.a.key?(h=h.a,2==l.N()&&(h.a=l)):(h=em(b,c,d,e,f,g),2==l.N()?h.a=l:l.a&&2==l.a.N()&&(h.a=l.a,l.a=null));h.a&&(h.a.a=null);b.a.replace(k,h)}}else h=em(b,c,d,e,f,g),b.a.set(k,h);return h}function dm(b,c){b.T().src=c};function gm(b){var c=void 0!==b.projection?b.projection:"EPSG:3857",d;if(void 0!==b.tileGrid)d=b.tileGrid;else{d={extent:Se(c),maxZoom:b.maxZoom,minZoom:b.minZoom,tileSize:b.tileSize};var e={};Wa(e,void 0!==d?d:{});void 0===e.extent&&(e.extent=lc("EPSG:3857").C());e.resolutions=Te(e.extent,e.maxZoom,e.tileSize);delete e.maxZoom;d=new Ee(e)}cm.call(this,{attributions:b.attributions,cacheSize:b.cacheSize,crossOrigin:b.crossOrigin,logo:b.logo,opaque:b.opaque,projection:c,reprojectionErrorThreshold:b.reprojectionErrorThreshold,
-tileGrid:d,tileLoadFunction:b.tileLoadFunction,tilePixelRatio:b.tilePixelRatio,tileUrlFunction:b.tileUrlFunction,url:b.url,urls:b.urls,wrapX:void 0!==b.wrapX?b.wrapX:!0})}M(gm,cm);function hm(b){b=b||{};var c;void 0!==b.attributions?c=b.attributions:c=[im];gm.call(this,{attributions:c,cacheSize:b.cacheSize,crossOrigin:void 0!==b.crossOrigin?b.crossOrigin:"anonymous",opaque:void 0!==b.opaque?b.opaque:!0,maxZoom:void 0!==b.maxZoom?b.maxZoom:19,reprojectionErrorThreshold:b.reprojectionErrorThreshold,tileLoadFunction:b.tileLoadFunction,url:void 0!==b.url?b.url:"https://{a-c}.tile.openstreetmap.org/{z}/{x}/{y}.png",wrapX:b.wrapX})}M(hm,gm);var im=new jd({html:'&copy; <a href="http://www.openstreetmap.org/copyright">OpenStreetMap</a> contributors.'});function jm(b){b=b||{};var c=km[b.layer];this.u=b.layer;gm.call(this,{attributions:c.attributions,cacheSize:b.cacheSize,crossOrigin:"anonymous",logo:"https://developer.mapquest.com/content/osm/mq_logo.png",maxZoom:c.maxZoom,reprojectionErrorThreshold:b.reprojectionErrorThreshold,opaque:c.opaque,tileLoadFunction:b.tileLoadFunction,url:void 0!==b.url?b.url:"https://otile{1-4}-s.mqcdn.com/tiles/1.0.0/"+this.u+"/{z}/{x}/{y}.jpg"})}M(jm,gm);
-var lm=new jd({html:'Tiles Courtesy of <a href="http://www.mapquest.com/">MapQuest</a>'}),km={osm:{maxZoom:19,opaque:!0,attributions:[lm,im]},sat:{maxZoom:18,opaque:!0,attributions:[lm,new jd({html:"Portions Courtesy NASA/JPL-Caltech and U.S. Depart. of Agriculture, Farm Service Agency"})]},hyb:{maxZoom:18,opaque:!1,attributions:[lm,im]}};function mm(b){b=b||{};cm.call(this,{attributions:b.attributions,cacheSize:b.cacheSize,crossOrigin:b.crossOrigin,logo:b.logo,projection:b.projection,reprojectionErrorThreshold:b.reprojectionErrorThreshold,tileGrid:b.tileGrid,tileLoadFunction:b.tileLoadFunction,url:b.url,urls:b.urls,wrapX:void 0!==b.wrapX?b.wrapX:!0});this.P=b.params||{};this.u=Jb()}M(mm,cm);mm.prototype.mb=function(b){return b};
-mm.prototype.g=function(b,c,d){var e=this.tileGrid;e||(e=this.la(d));if(!(e.Mb().length<=b[0])){var f=Ie(e,b,this.u),g=tb(Oe(e,b[0]),this.h);1!=c&&(g=sb(g,c,this.h));e={F:"image",FORMAT:"PNG32",TRANSPARENT:!0};Wa(e,this.P);var h;var k=this.urls;if(k){d=d.qa.split(":").pop();e.SIZE=g[0]+","+g[1];e.BBOX=f.join(",");e.BBOXSR=d;e.IMAGESR=d;e.DPI=Math.round(e.DPI?e.DPI*c:90*c);b=[(1==k.length?k[0]:k[Ea((b[1]<<b[0])+b[2],k.length)]).replace(/MapServer\/?$/,"MapServer/export").replace(/ImageServer\/?$/,
-"ImageServer/exportImage")];for(h in e)El(h,e[h],b);b[1]&&(h=b[0],c=h.indexOf("#"),0<=c&&(b.push(h.substr(c)),b[0]=h=h.substr(0,c)),c=h.indexOf("?"),0>c?b[1]="?":c==h.length-1&&(b[1]=void 0));h=b.join("")}else h=void 0;return h}};F("ol.format.GeoJSON",Bl,OPENLAYERS);Bl.prototype.readFeatures=Bl.prototype.b;Bl.prototype.readFeature=Bl.prototype.g;F("ol.format.EsriJSON",vl,OPENLAYERS);vl.prototype.readFeatures=vl.prototype.b;vl.prototype.readFeature=vl.prototype.g;F("ol.style.Style",zi,OPENLAYERS);F("ol.style.Circle",yi,OPENLAYERS);F("ol.style.Fill",si,OPENLAYERS);F("ol.style.Stroke",xi,OPENLAYERS);F("ol.style.Icon",Pg,OPENLAYERS);F("ol.View",V,OPENLAYERS);V.prototype.on=V.prototype.ba;V.prototype.getZoom=V.prototype.vd;
-V.prototype.setZoom=V.prototype.De;V.prototype.getCenter=V.prototype.ia;V.prototype.setCenter=V.prototype.oa;V.prototype.calculateExtent=V.prototype.jc;V.prototype.getProjection=V.prototype.ke;V.prototype.fit=V.prototype.md;F("ol.control.defaults",df,OPENLAYERS);F("ol.layer.Tile",X,OPENLAYERS);X.prototype.getVisible=X.prototype.cb;X.prototype.setVisible=X.prototype.Gc;X.prototype.getZIndex=X.prototype.Ub;X.prototype.setZIndex=X.prototype.Hc;X.prototype.getOpacity=X.prototype.Tb;
-X.prototype.setOpacity=X.prototype.Fc;X.prototype.getSource=X.prototype.V;X.prototype.setSource=X.prototype.Yb;F("ol.layer.Vector",Y,OPENLAYERS);Y.prototype.getVisible=Y.prototype.cb;Y.prototype.setVisible=Y.prototype.Gc;Y.prototype.getSource=Y.prototype.V;Y.prototype.setStyle=Y.prototype.s;Y.prototype.getZIndex=Y.prototype.Ub;Y.prototype.setZIndex=Y.prototype.Hc;Y.prototype.getOpacity=Y.prototype.Tb;Y.prototype.setOpacity=Y.prototype.Fc;Y.prototype.getSource=Y.prototype.V;Y.prototype.setSource=Y.prototype.Yb;
-F("ol.source.OSM",hm,OPENLAYERS);hm.prototype.refresh=hm.prototype.wa;F("ol.source.MapQuest",jm,OPENLAYERS);jm.prototype.refresh=jm.prototype.wa;F("ol.source.XYZ",gm,OPENLAYERS);gm.prototype.refresh=gm.prototype.wa;gm.prototype.setUrl=gm.prototype.s;gm.prototype.refresh=gm.prototype.wa;F("ol.Map",Z,OPENLAYERS);Z.prototype.on=Z.prototype.ba;Z.prototype.getTarget=Z.prototype.Sb;Z.prototype.getTargetElement=Z.prototype.ab;Z.prototype.getView=Z.prototype.O;Z.prototype.addOverlay=Z.prototype.kd;
-Z.prototype.addLayer=Z.prototype.jd;Z.prototype.removeLayer=Z.prototype.ze;Z.prototype.getEventPixel=Z.prototype.vc;Z.prototype.hasFeatureAtPixel=Z.prototype.Sd;Z.prototype.getSize=Z.prototype.Oa;Z.prototype.updateSize=Z.prototype.$b;Z.prototype.forEachFeatureAtPixel=Z.prototype.od;Z.prototype.addInteraction=Z.prototype.hd;Z.prototype.removeInteraction=Z.prototype.ye;Z.prototype.beforeRender=Z.prototype.fa;F("ol.source.Vector",Lj,OPENLAYERS);Lj.prototype.getFeatures=Lj.prototype.oe;
-Lj.prototype.getExtent=Lj.prototype.C;Lj.prototype.refresh=Lj.prototype.wa;Lj.prototype.addFeatures=Lj.prototype.Cb;Lj.prototype.addFeature=Lj.prototype.Bb;Lj.prototype.clear=Lj.prototype.clear;Lj.prototype.forEachFeature=Lj.prototype.nd;Lj.prototype.refresh=Lj.prototype.wa;F("ol.source.TileArcGISRest",mm,OPENLAYERS);mm.prototype.refresh=mm.prototype.wa;F("ol.Overlay",hl,OPENLAYERS);hl.prototype.setPosition=hl.prototype.Ec;F("ol.Feature",xj,OPENLAYERS);xj.prototype.getProperties=xj.prototype.za;
-xj.prototype.setProperties=xj.prototype.l;xj.prototype.getGeometry=xj.prototype.M;F("ol.geom.Point",Mc,OPENLAYERS);Mc.prototype.transform=Mc.prototype.o;Mc.prototype.getCoordinates=Mc.prototype.ra;Mc.prototype.getExtent=Mc.prototype.C;F("ol.geom.Polygon",Tc,OPENLAYERS);Tc.prototype.getCoordinates=Tc.prototype.ra;Tc.prototype.getExtent=Tc.prototype.C;Tc.prototype.transform=Tc.prototype.o;F("ol.geom.LineString",rl,OPENLAYERS);rl.prototype.getCoordinates=rl.prototype.ra;rl.prototype.getExtent=rl.prototype.C;
-rl.prototype.transform=rl.prototype.o;F("ol.proj.Projection",ic,OPENLAYERS);ic.prototype.getCode=ic.prototype.l;F("ol.interaction.Draw",Kl,OPENLAYERS);Kl.prototype.on=Kl.prototype.ba;F("ol.animation.pan",cd,OPENLAYERS);
+p.Md=function(){var b=this.b,c=this.na;if(0!==c.a.length){var d=16,e=d;if(b){var f=b.viewHints;f[0]&&(d=this.Ja?8:0,e=2);f[1]&&(d=this.wb?8:0,e=2)}if(c.h<d){hh(c);for(var f=0,g,h;c.h<d&&f<e&&0<c.a.length;)g=eh(c)[0],h=g.getKey(),0!==g.N()||h in c.g||(c.g[h]=!0,++c.h,++f,g.load())}}c=this.aa;d=0;for(e=c.length;d<e;++d)c[d](this,b);c.length=0};p.Nd=function(){this.render()};
+p.Pd=function(){var b;this.Tb()&&(b=this.Na());if(this.i){for(var c=0,d=this.i.length;c<d;++c)N(this.i[c]);this.i=null}b?(b.appendChild(this.a),b=this.S?this.S:b,this.i=[Q(b,"keydown",this.Oa,this),Q(b,"keypress",this.Oa,this)],this.c||(this.c=this.vb.bind(this),x.addEventListener("resize",this.c,!1))):(ge(this.a),void 0!==this.c&&(x.removeEventListener("resize",this.c,!1),this.c=void 0));this.vb()};p.Qd=function(){this.render()};p.Sd=function(){this.render()};
+p.Rd=function(){this.G&&(N(this.G),this.G=null);var b=this.O();b&&(this.G=Q(b,"propertychange",this.Sd,this));this.render()};p.Bd=function(){this.render()};p.Cd=function(){this.render()};p.Ad=function(){this.u&&(this.u.forEach(N),this.u=null);var b=ml(this);b&&(this.u=[Q(b,"propertychange",this.Cd,this),Q(b,"change",this.Bd,this)]);this.render()};p.render=function(){void 0===this.h&&(this.h=x.requestAnimationFrame(this.pa))};p.ze=function(b){return this.g.remove(b)};p.Ae=function(b){return ml(this).get("layers").remove(b)};
+p.Ce=function(b){var c,d,e,f=this.Pa(),g=this.O(),h=null;if(c=void 0!==f&&0<f[0]&&0<f[1]&&g)c=!!g.ia()&&void 0!==g.I();if(c){var h=g.g.slice(),k=ml(this).Lb(),l={};c=0;for(d=k.length;c<d;++c)l[I(k[c].layer)]=k[c];e=g.N();h={animate:!1,attributions:{},coordinateToPixelMatrix:this.Aa,extent:null,focus:this.P?this.P:e.center,index:this.Ba++,layerStates:l,layerStatesArray:k,logos:Wa({},this.xb),pixelRatio:this.yb,pixelToCoordinateMatrix:this.zb,postRenderFunctions:[],size:f,skippedFeatureUids:this.Ab,
+tileQueue:this.na,time:b,usedTiles:{},viewState:e,viewHints:h,wantedTiles:{}}}if(h){b=this.B;c=f=0;for(d=b.length;c<d;++c)g=b[c],g(this,h)&&(b[f++]=g);b.length=f;h.extent=Zb(e.center,e.resolution,e.rotation,h.size)}this.b=h;this.D.sb(h);h&&(h.animate&&this.render(),Array.prototype.push.apply(this.aa,h.postRenderFunctions),0!==this.B.length||h.viewHints[0]||h.viewHints[1]||Rb(h.extent,this.ea)||(S(this,new te("moveend",this,h)),Mb(h.extent,this.ea)));S(this,new te("postrender",this,h));c=e=this.Md;
+this&&(c=ma(e,this));!ga(x.setImmediate)||x.Window&&x.Window.prototype&&!W("Edge")&&x.Window.prototype.setImmediate==x.setImmediate?(lf||(lf=mf()),lf(c)):x.setImmediate(c)};
+p.vb=function(){var b=this.Na();if(b){var c=Yd(b),d=Gd&&b.currentStyle,e;if(e=d)Wd(c),e=!0;if(e&&"auto"!=d.width&&"auto"!=d.height&&!d.boxSizing)c=pe(b,d.width,"width","pixelWidth"),b=pe(b,d.height,"height","pixelHeight"),b=new Vd(c,b);else{d=new Vd(b.offsetWidth,b.offsetHeight);if(Gd){c=qe(b,"paddingLeft");e=qe(b,"paddingRight");var f=qe(b,"paddingTop"),g=qe(b,"paddingBottom"),c=new je(f,e,g,c)}else c=ke(b,"paddingLeft"),e=ke(b,"paddingRight"),f=ke(b,"paddingTop"),g=ke(b,"paddingBottom"),c=new je(parseFloat(f),
+parseFloat(e),parseFloat(g),parseFloat(c));!Gd||9<=Number(Sd)?(e=ke(b,"borderLeftWidth"),f=ke(b,"borderRightWidth"),g=ke(b,"borderTopWidth"),b=ke(b,"borderBottomWidth"),b=new je(parseFloat(g),parseFloat(f),parseFloat(b),parseFloat(e))):(e=se(b,"borderLeft"),f=se(b,"borderRight"),g=se(b,"borderTop"),b=se(b,"borderBottom"),b=new je(g,f,b,e));b=new Vd(d.width-b.left-c.left-c.right-b.right,d.height-b.top-c.top-c.bottom-b.bottom)}this.set("size",[b.width,b.height])}else this.set("size",void 0)};
+function ll(b){var c=null;void 0!==b.keyboardEventTarget&&(c="string"===typeof b.keyboardEventTarget?document.getElementById(b.keyboardEventTarget):b.keyboardEventTarget);var d={},e={};if(void 0===b.logo||"boolean"===typeof b.logo&&b.logo)e["data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAMAAABEpIrGAAAAA3NCSVQICAjb4U/gAAAACXBIWXMAAAHGAAABxgEXwfpGAAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAAhNQTFRF////AP//AICAgP//AFVVQECA////K1VVSbbbYL/fJ05idsTYJFtbbcjbJllmZszWWMTOIFhoHlNiZszTa9DdUcHNHlNlV8XRIVdiasrUHlZjIVZjaMnVH1RlIFRkH1RkH1ZlasvYasvXVsPQH1VkacnVa8vWIVZjIFRjVMPQa8rXIVVkXsXRsNveIFVkIFZlIVVj3eDeh6GmbMvXH1ZkIFRka8rWbMvXIFVkIFVjIFVkbMvWH1VjbMvWIFVlbcvWIFVla8vVIFVkbMvWbMvVH1VkbMvWIFVlbcvWIFVkbcvVbMvWjNPbIFVkU8LPwMzNIFVkbczWIFVkbsvWbMvXIFVkRnB8bcvW2+TkW8XRIFVkIlZlJVloJlpoKlxrLl9tMmJwOWd0Omh1RXF8TneCT3iDUHiDU8LPVMLPVcLPVcPQVsPPVsPQV8PQWMTQWsTQW8TQXMXSXsXRX4SNX8bSYMfTYcfTYsfTY8jUZcfSZsnUaIqTacrVasrVa8jTa8rWbI2VbMvWbcvWdJObdcvUdszUd8vVeJaee87Yfc3WgJyjhqGnitDYjaarldPZnrK2oNbborW5o9bbo9fbpLa6q9ndrL3ArtndscDDutzfu8fJwN7gwt7gxc/QyuHhy+HizeHi0NfX0+Pj19zb1+Tj2uXk29/e3uLg3+Lh3+bl4uXj4ufl4+fl5Ofl5ufl5ujm5+jmySDnBAAAAFp0Uk5TAAECAgMEBAYHCA0NDg4UGRogIiMmKSssLzU7PkJJT1JTVFliY2hrdHZ3foSFhYeJjY2QkpugqbG1tre5w8zQ09XY3uXn6+zx8vT09vf4+Pj5+fr6/P39/f3+gz7SsAAAAVVJREFUOMtjYKA7EBDnwCPLrObS1BRiLoJLnte6CQy8FLHLCzs2QUG4FjZ5GbcmBDDjxJBXDWxCBrb8aM4zbkIDzpLYnAcE9VXlJSWlZRU13koIeW57mGx5XjoMZEUqwxWYQaQbSzLSkYGfKFSe0QMsX5WbjgY0YS4MBplemI4BdGBW+DQ11eZiymfqQuXZIjqwyadPNoSZ4L+0FVM6e+oGI6g8a9iKNT3o8kVzNkzRg5lgl7p4wyRUL9Yt2jAxVh6mQCogae6GmflI8p0r13VFWTHBQ0rWPW7ahgWVcPm+9cuLoyy4kCJDzCm6d8PSFoh0zvQNC5OjDJhQopPPJqph1doJBUD5tnkbZiUEqaCnB3bTqLTFG1bPn71kw4b+GFdpLElKIzRxxgYgWNYc5SCENVHKeUaltHdXx0dZ8uBI1hJ2UUDgq82CM2MwKeibqAvSO7MCABq0wXEPiqWEAAAAAElFTkSuQmCC"]=
+"http://openlayers.org/";else{var f=b.logo;"string"===typeof f?e[f]="":ha(f)&&(e[f.src]=f.href)}f=b.layers instanceof gi?b.layers:new gi({layers:b.layers});d.layergroup=f;d.target=b.target;d.view=void 0!==b.view?b.view:new V;var f=Zg,g;void 0!==b.renderer?Array.isArray(b.renderer)?g=b.renderer:"string"===typeof b.renderer&&(g=[b.renderer]):g=kl;var h,k;h=0;for(k=g.length;h<k;++h){var l=g[h];if("canvas"==l){if(Ff){f=ik;break}}else if("dom"==l){f=pk;break}else if("webgl"==l&&yf){f=hl;break}}var m;void 0!==
+b.controls?m=Array.isArray(b.controls)?new ld(b.controls.slice()):b.controls:m=ef();if(void 0!==b.interactions)g=Array.isArray(b.interactions)?new ld(b.interactions.slice()):b.interactions;else{g={};h=new ld;k=new jh;(void 0!==g.altShiftDragRotate?g.altShiftDragRotate:1)&&h.push(new Fh);(void 0!==g.doubleClickZoom?g.doubleClickZoom:1)&&h.push(new ph({delta:g.zoomDelta,duration:g.zoomDuration}));(void 0!==g.dragPan?g.dragPan:1)&&h.push(new Ah({kinetic:k}));(void 0!==g.pinchRotate?g.pinchRotate:1)&&
+h.push(new Zh);(void 0!==g.pinchZoom?g.pinchZoom:1)&&h.push(new ci({duration:g.zoomDuration}));if(void 0!==g.keyboard?g.keyboard:1)h.push(new Th),h.push(new Vh({delta:g.zoomDelta,duration:g.zoomDuration}));(void 0!==g.mouseWheelZoom?g.mouseWheelZoom:1)&&h.push(new Xh({duration:g.zoomDuration}));(void 0!==g.shiftDragZoom?g.shiftDragZoom:1)&&h.push(new Sh({duration:g.zoomDuration}));g=h}b=void 0!==b.overlays?Array.isArray(b.overlays)?new ld(b.overlays.slice()):b.overlays:new ld;return{controls:m,interactions:g,
+keyboardEventTarget:c,logos:e,overlays:b,De:f,values:d}}mc(li);mc(si);si.forEach(function(b){li.forEach(function(c){nc(b,c,mi);nc(c,b,ni)})});function nl(b){T.call(this);this.j=b.id;this.i=void 0!==b.insertFirst?b.insertFirst:!0;this.o=void 0!==b.stopEvent?b.stopEvent:!0;this.b=document.createElement("DIV");this.b.className="ol-overlay-container";this.b.style.position="absolute";this.autoPan=void 0!==b.autoPan?b.autoPan:!1;this.g=void 0!==b.autoPanAnimation?b.autoPanAnimation:{};this.h=void 0!==b.autoPanMargin?b.autoPanMargin:20;this.a={hb:"",pb:"",tb:"",ub:"",visible:!0};this.c=null;Q(this,rb("element"),this.yd,this);Q(this,rb("map"),
+this.Hd,this);Q(this,rb("offset"),this.Id,this);Q(this,rb("position"),this.Kd,this);Q(this,rb("positioning"),this.Ld,this);void 0!==b.element&&this.set("element",b.element);this.set("offset",void 0!==b.offset?b.offset:[0,0]);this.set("positioning",void 0!==b.positioning?b.positioning:"top-left");void 0!==b.position&&this.Ec(b.position)}M(nl,T);p=nl.prototype;p.La=function(){return this.j};p.yd=function(){ee(this.b);var b=this.get("element");b&&this.b.appendChild(b)};
+p.Hd=function(){this.c&&(ge(this.b),N(this.c),this.c=null);var b=this.get("map");b&&(this.c=Q(b,"postrender",this.render,this),pl(this),b=this.o?b.j:b.o,this.i?fe(b,this.b,0):b.appendChild(this.b))};p.render=function(){pl(this)};p.Id=function(){pl(this)};
+p.Kd=function(){pl(this);if(void 0!==this.get("position")&&this.autoPan){var b=this.get("map");if(void 0!==b&&b.Na()){var c=ql(b.Na(),b.Pa()),d=this.get("element"),e=d.offsetWidth,f=d.currentStyle||x.getComputedStyle(d),e=e+(parseInt(f.marginLeft,10)+parseInt(f.marginRight,10)),f=d.offsetHeight,g=d.currentStyle||x.getComputedStyle(d),f=f+(parseInt(g.marginTop,10)+parseInt(g.marginBottom,10)),h=ql(d,[e,f]),d=this.h;Nb(c,h)||(e=h[0]-c[0],f=c[2]-h[2],g=h[1]-c[1],h=c[3]-h[3],c=[0,0],0>e?c[0]=e-d:0>f&&
+(c[0]=Math.abs(f)+d),0>g?c[1]=g-d:0>h&&(c[1]=Math.abs(h)+d),0===c[0]&&0===c[1])||(d=b.O().ia(),e=Eh(b,d),c=[e[0]+c[0],e[1]+c[1]],this.g&&(this.g.source=d,b.fa(cd(this.g))),b.O().oa(b.ta(c)))}}};p.Ld=function(){pl(this)};p.setMap=function(b){this.set("map",b)};p.Ec=function(b){this.set("position",b)};
+function ql(b,c){var d=Yd(b),e=new Ud(0,0),f;f=d?Yd(d):document;var g;(g=!Gd||9<=Number(Sd))||(Wd(f),g=!0);b!=(g?f.documentElement:f.body)&&(f=le(b),g=Wd(d).a,d=g.scrollingElement?g.scrollingElement:Jd?g.body||g.documentElement:g.documentElement,g=g.parentWindow||g.defaultView,d=Gd&&Qd("10")&&g.pageYOffset!=d.scrollTop?new Ud(d.scrollLeft,d.scrollTop):new Ud(g.pageXOffset||d.scrollLeft,g.pageYOffset||d.scrollTop),e.x=f.left+d.x,e.y=f.top+d.y);return[e.x,e.y,e.x+c[0],e.y+c[1]]}
+function rl(b,c){b.a.visible!==c&&(oe(b.b,c),b.a.visible=c)}
+function pl(b){var c=b.get("map"),d=b.get("position");if(void 0!==c&&c.b&&void 0!==d){var d=Eh(c,d),e=c.Pa(),c=b.b.style,f=b.get("offset"),g=b.get("positioning"),h=f[0],f=f[1];if("bottom-right"==g||"center-right"==g||"top-right"==g)""!==b.a.pb&&(b.a.pb=c.left=""),h=Math.round(e[0]-d[0]-h)+"px",b.a.tb!=h&&(b.a.tb=c.right=h);else{""!==b.a.tb&&(b.a.tb=c.right="");if("bottom-center"==g||"center-center"==g||"top-center"==g)h-=me(b.b).width/2;h=Math.round(d[0]+h)+"px";b.a.pb!=h&&(b.a.pb=c.left=h)}if("bottom-left"==
+g||"bottom-center"==g||"bottom-right"==g)""!==b.a.ub&&(b.a.ub=c.top=""),d=Math.round(e[1]-d[1]-f)+"px",b.a.hb!=d&&(b.a.hb=c.bottom=d);else{""!==b.a.hb&&(b.a.hb=c.bottom="");if("center-left"==g||"center-center"==g||"center-right"==g)f-=me(b.b).height/2;d=Math.round(d[1]+f)+"px";b.a.ub!=d&&(b.a.ub=c.top=d)}rl(b,!0)}else rl(b,!1)};function sl(){this.defaultDataProjection=null}function tl(b,c,d){var e;d&&(e={dataProjection:d.dataProjection?d.dataProjection:b.f(Ij(c)),featureProjection:d.featureProjection});var f;e&&(f={featureProjection:e.featureProjection,dataProjection:e.dataProjection?e.dataProjection:b.defaultDataProjection,rightHanded:e.rightHanded},e.decimals&&(f.decimals=e.decimals));return f}
+function ul(b,c){var d=c?lc(c.featureProjection):null,e=c?lc(c.dataProjection):null;if(d&&e&&!wc(d,e))if(b instanceof zc)d=b.o(e,d);else{e=xc(e,d);d=[b[0],b[1],b[0],b[3],b[2],b[1],b[2],b[3]];e(d,d,2);var f=[d[0],d[2],d[4],d[6]],g=[d[1],d[3],d[5],d[7]],d=Math.min.apply(null,f),e=Math.min.apply(null,g),f=Math.max.apply(null,f),g=Math.max.apply(null,g),d=Ob(d,e,f,g,void 0)}else d=b;return d};function vl(){this.defaultDataProjection=null}M(vl,sl);function Ij(b){return ha(b)?b:"string"===typeof b?(b=JSON.parse(b))?b:null:null}vl.prototype.U=function(){return"json"};vl.prototype.g=function(b,c){return this.a(Ij(b),tl(this,b,c))};vl.prototype.b=function(b,c){return this.h(Ij(b),tl(this,b,c))};function wl(b,c,d,e,f){var g=NaN,h=NaN,k=(d-c)/e;if(0!==k)if(1==k)g=b[c],h=b[c+1];else if(2==k)g=.5*b[c]+.5*b[c+e],h=.5*b[c+1]+.5*b[c+e+1];else{var h=b[c],k=b[c+1],l=0,g=[0],m;for(m=c+e;m<d;m+=e){var n=b[m],q=b[m+1],l=l+Math.sqrt((n-h)*(n-h)+(q-k)*(q-k));g.push(l);h=n;k=q}d=.5*l;l=0;m=g.length;for(n=!1;l<m;)h=l+(m-l>>1),k=+Ha(g[h],d),0>k?l=h+1:(m=h,n=!k);h=n?l:~l;0>h?(d=(d-g[-h-2])/(g[-h-1]-g[-h-2]),c+=(-h-2)*e,g=b[c],g=g+d*(b[c+e]-g),h=b[c+1],h=h+d*(b[c+e+1]-h)):(g=b[c+h*e],h=b[c+h*e+1])}return f?
+(f[0]=g,f[1]=h,f):[g,h]};function xl(b,c){Bc.call(this);this.c=null;this.j=-1;this.W(b,c)}M(xl,Bc);p=xl.prototype;p.clone=function(){var b=new xl(null);U(b,this.g,this.a.slice());b.v();return b};p.ra=function(){return Hc(this.a,0,this.a.length,this.b)};function Ti(b){if(b.j!=b.f){var c;c=wl(b.a,0,b.a.length,b.b,b.c);b.c=c;b.j=b.f}return b.c}p.Ma=function(b){var c=[];c.length=Jc(this.a,0,this.a.length,this.b,b,c,0);b=new xl(null);U(b,"XY",c);b.v();return b};p.U=function(){return"LineString"};
+p.W=function(b,c){b?(Dc(this,c,b,1),this.a||(this.a=[]),this.a.length=Fc(this.a,0,b,this.b)):U(this,"XY",null);this.v()};function yl(b,c){Bc.call(this);this.c=[];this.W(b,c)}M(yl,Bc);p=yl.prototype;p.clone=function(){var b=new yl(null),c=this.c.slice();U(b,this.g,this.a.slice());b.c=c;b.v();return b};p.ra=function(){return Ic(this.a,0,this.c,this.b)};p.ab=function(){return this.c};function Ui(b){var c=[],d=b.a,e=0,f=b.c;b=b.b;var g,h;g=0;for(h=f.length;g<h;++g){var k=f[g],e=wl(d,e,k,b);Ka(c,e);e=k}return c}
+p.Ma=function(b){var c=[],d=[],e=this.a,f=this.c,g=this.b,h=0,k=0,l,m;l=0;for(m=f.length;l<m;++l){var n=f[l],k=Jc(e,h,n,g,b,c,k);d.push(k);h=n}c.length=k;b=new yl(null);U(b,"XY",c);b.c=d;b.v();return b};p.U=function(){return"MultiLineString"};p.W=function(b,c){if(b){Dc(this,c,b,2);this.a||(this.a=[]);var d=Gc(this.a,0,b,this.b,this.c);this.a.length=0===d.length?0:d[d.length-1]}else d=this.c,U(this,"XY",null),this.c=d;this.v()};function zl(b,c){Bc.call(this);this.W(b,c)}M(zl,Bc);zl.prototype.clone=function(){var b=new zl(null);U(b,this.g,this.a.slice());b.v();return b};zl.prototype.ra=function(){return Hc(this.a,0,this.a.length,this.b)};zl.prototype.U=function(){return"MultiPoint"};zl.prototype.W=function(b,c){b?(Dc(this,c,b,1),this.a||(this.a=[]),this.a.length=Fc(this.a,0,b,this.b)):U(this,"XY",null);this.v()};function Al(b,c){Bc.call(this);this.c=[];this.B=-1;this.D=null;this.G=-1;this.j=null;this.W(b,c)}M(Al,Bc);p=Al.prototype;p.clone=function(){for(var b=new Al(null),c=this.c.length,d=Array(c),e=0;e<c;++e)d[e]=this.c[e].slice();U(b,this.g,this.a.slice());b.c=d;b.v();return b};p.ra=function(b){var c;void 0!==b?(c=Vi(this).slice(),Sc(c,this.c,this.b,b)):c=this.a;b=c;c=this.c;var d=this.b,e=0,f=[],g=0,h,k;h=0;for(k=c.length;h<k;++h){var l=c[h];f[g++]=Ic(b,e,l,d,f[g]);e=l[l.length-1]}f.length=g;return f};
+function Wi(b){if(b.B!=b.f){var c=b.a,d=b.c,e=b.b,f=0,g=[],h,k,l=Jb();h=0;for(k=d.length;h<k;++h){var m=d[h],l=c,n=m[0],q=e,r=Pb(void 0),l=Tb(r,l,f,n,q);g.push((l[0]+l[2])/2,(l[1]+l[3])/2);f=m[m.length-1]}c=Vi(b);d=b.c;e=b.b;h=0;k=[];m=0;for(l=d.length;m<l;++m)f=d[m],k=Oc(c,h,f,e,g,2*m,k),h=f[f.length-1];b.D=k;b.B=b.f}return b.D}
+function Vi(b){if(b.G!=b.f){var c=b.a,d;a:{d=b.c;var e,f;e=0;for(f=d.length;e<f;++e)if(!Qc(c,d[e],b.b,void 0)){d=!1;break a}d=!0}d?b.j=c:(b.j=c.slice(),b.j.length=Sc(b.j,b.c,b.b));b.G=b.f}return b.j}p.Ma=function(b){var c=[],d=[],e=this.a,f=this.c,g=this.b;b=Math.sqrt(b);var h=0,k=0,l,m;l=0;for(m=f.length;l<m;++l){var n=f[l],q=[],k=Kc(e,h,n,g,b,c,k,q);d.push(q);h=n[n.length-1]}c.length=k;e=new Al(null);U(e,"XY",c);e.c=d;e.v();return e};p.U=function(){return"MultiPolygon"};
+p.W=function(b,c){if(b){Dc(this,c,b,3);this.a||(this.a=[]);var d=this.a,e=this.b,f=this.c,g=0,f=f?f:[],h=0,k,l;k=0;for(l=b.length;k<l;++k)g=Gc(d,g,b[k],e,f[h]),f[h++]=g,g=g[g.length-1];f.length=h;0===f.length?this.a.length=0:(d=f[f.length-1],this.a.length=0===d.length?0:d[d.length-1])}else d=this.c,U(this,"XY",null),this.c=d;this.v()};function Bl(b){b=b?b:{};this.defaultDataProjection=null;this.c=b.geometryName}M(Bl,vl);function Cl(b){var c="XY";!0===b.hasZ&&!0===b.hasM?c="XYZM":!0===b.hasZ?c="XYZ":!0===b.hasM&&(c="XYM");return c}
+var Dl={Point:function(b){return void 0!==b.m&&void 0!==b.z?new Mc([b.x,b.y,b.z,b.m],"XYZM"):void 0!==b.z?new Mc([b.x,b.y,b.z],"XYZ"):void 0!==b.m?new Mc([b.x,b.y,b.m],"XYM"):new Mc([b.x,b.y])},LineString:function(b){return new xl(b.paths[0],Cl(b))},Polygon:function(b){return new Tc(b.rings,Cl(b))},MultiPoint:function(b){return new zl(b.points,Cl(b))},MultiLineString:function(b){return new yl(b.paths,Cl(b))},MultiPolygon:function(b){return new Al(b.rings,Cl(b))}};
+Bl.prototype.a=function(b,c){var d;if(d=b.geometry){var e;if(ea(d.x)&&ea(d.y))e="Point";else if(d.points)e="MultiPoint";else if(d.paths)e=1===d.paths.length?"LineString":"MultiLineString";else if(d.rings){var f=d.rings,g=Cl(d),h=[];e=[];var k,l;k=0;for(l=f.length;k<l;++k){var m=Ja(f[k]);Pc(m,0,m.length,g.length)?h.push([f[k]]):e.push(f[k])}for(;e.length;){f=e.shift();g=!1;for(k=h.length-1;0<=k;k--)if(Nb((new Lc(h[k][0])).C(),(new Lc(f)).C())){h[k].push(f);g=!0;break}g||h.push([f.reverse()])}d=Wa({},
+d);1===h.length?(e="Polygon",d.rings=h[0]):(e="MultiPolygon",d.rings=h)}d=ul((0,Dl[e])(d),c)}else d=null;h=new Dj;this.c&&Fj(h,this.c);Ej(h,d);c&&c.Qb&&b.attributes[c.Qb]&&(h.g=b.attributes[c.Qb],h.v());b.attributes&&h.l(b.attributes);return h};Bl.prototype.h=function(b,c){var d=c?c:{};if(b.features){var e=[],f=b.features,g,h;d.Qb=b.objectIdFieldName;g=0;for(h=f.length;g<h;++g)e.push(this.a(f[g],d));return e}return[this.a(b,d)]};
+Bl.prototype.f=function(b){return b.spatialReference&&b.spatialReference.wkid?lc("EPSG:"+b.spatialReference.wkid):null};function El(b){zc.call(this);this.a=b?b:null;Fl(this)}M(El,zc);function Gl(b){var c,d;if(b.a)for(c=0,d=b.a.length;c<d;++c)gb(b.a[c],"change",b.v,b)}function Fl(b){var c,d;if(b.a)for(c=0,d=b.a.length;c<d;++c)Q(b.a[c],"change",b.v,b)}p=El.prototype;p.clone=function(){var b=new El(null),c=this.a,d=[],e,f;e=0;for(f=c.length;e<f;++e)d.push(c[e].clone());Gl(b);b.a=d;Fl(b);b.v();return b};p.ib=function(b){Pb(b);for(var c=this.a,d=0,e=c.length;d<e;++d)Sb(b,c[d].C());return b};
+p.Ob=function(b){this.s!=this.f&&(Ya(this.h),this.i=0,this.s=this.f);if(0>b||0!==this.i&&b<this.i)return this;var c=b.toString();if(this.h.hasOwnProperty(c))return this.h[c];var d=[],e=this.a,f=!1,g,h;g=0;for(h=e.length;g<h;++g){var k=e[g],l=k.Ob(b);d.push(l);l!==k&&(f=!0)}if(f)return b=new El(null),Gl(b),b.a=d,Fl(b),b.v(),this.h[c]=b;this.i=b;return this};p.U=function(){return"GeometryCollection"};p.rotate=function(b,c){for(var d=this.a,e=0,f=d.length;e<f;++e)d[e].rotate(b,c);this.v()};
+p.Eb=function(b){var c=this.a,d,e;d=0;for(e=c.length;d<e;++d)c[d].Eb(b);this.v()};p.J=function(){Gl(this);El.X.J.call(this)};function Hl(b){b=b?b:{};this.defaultDataProjection=null;this.defaultDataProjection=lc(b.defaultDataProjection?b.defaultDataProjection:"EPSG:4326");this.c=b.geometryName}M(Hl,vl);function Il(b,c){return b?ul((0,Jl[b.type])(b),c):null}
+var Jl={Point:function(b){return new Mc(b.coordinates)},LineString:function(b){return new xl(b.coordinates)},Polygon:function(b){return new Tc(b.coordinates)},MultiPoint:function(b){return new zl(b.coordinates)},MultiLineString:function(b){return new yl(b.coordinates)},MultiPolygon:function(b){return new Al(b.coordinates)},GeometryCollection:function(b,c){var d=b.geometries.map(function(b){return Il(b,c)});return new El(d)}};
+Hl.prototype.a=function(b,c){var d=Il(b.geometry,c),e=new Dj;this.c&&Fj(e,this.c);Ej(e,d);void 0!==b.id&&(e.g=b.id,e.v());b.properties&&e.l(b.properties);return e};Hl.prototype.h=function(b,c){if("Feature"==b.type)return[this.a(b,c)];if("FeatureCollection"==b.type){var d=[],e=b.features,f,g;f=0;for(g=e.length;f<g;++f)d.push(this.a(e[f],c));return d}return[]};Hl.prototype.f=function(b){return(b=b.crs)?"name"==b.type?lc(b.properties.name):"EPSG"==b.type?lc("EPSG:"+b.properties.code):null:this.defaultDataProjection};function Kl(b,c,d){if("array"==ba(c))for(var e=0;e<c.length;e++)Kl(b,String(c[e]),d);else null!=c&&d.push("&",b,""===c?"":"=",encodeURIComponent(String(c)))};function Ll(b,c,d){Bc.call(this);Ml(this,b,c?c:0,d)}M(Ll,Bc);Ll.prototype.clone=function(){var b=new Ll(null);U(b,this.g,this.a.slice());b.v();return b};Ll.prototype.ib=function(b){var c=this.a,d=c[this.b]-c[0];return Ob(c[0]-d,c[1]-d,c[0]+d,c[1]+d,b)};Ll.prototype.U=function(){return"Circle"};function Ml(b,c,d,e){if(c){Dc(b,e,c,0);b.a||(b.a=[]);e=b.a;c=Ec(e,c);e[c++]=e[0]+d;var f;d=1;for(f=b.b;d<f;++d)e[c++]=e[d];e.length=c}else U(b,"XY",null);b.v()};function Nl(b,c,d,e,f){Be.call(this,b,c);this.g=d;this.b=new Image;null!==e&&(this.b.crossOrigin=e);this.f={};this.c=null;this.h=f}M(Nl,Be);p=Nl.prototype;p.J=function(){1==this.state&&Ol(this);this.a&&jb(this.a);this.state=5;Ce(this);Nl.X.J.call(this)};p.T=function(b){if(void 0!==b){var c=I(b);if(c in this.f)return this.f[c];b=$a(this.f)?this.b:this.b.cloneNode(!1);return this.f[c]=b}return this.b};p.getKey=function(){return this.g};p.ie=function(){this.state=3;Ol(this);Ce(this)};
+p.je=function(){this.state=this.b.naturalWidth&&this.b.naturalHeight?2:4;Ol(this);Ce(this)};p.load=function(){0==this.state&&(this.state=1,Ce(this),this.c=[Q(this.b,"error",this.ie,this,!0),Q(this.b,"load",this.je,this,!0)],this.h(this,this.g))};function Ol(b){b.c.forEach(N);b.c=null};function Pl(b,c){R.call(this,b);this.feature=c}M(Pl,R);
+function Ql(b){xh.call(this,{handleDownEvent:Rl,handleEvent:Sl,handleUpEvent:Tl});this.P=null;this.o=!1;this.Ba=b.source?b.source:null;this.pa=b.features?b.features:null;this.Zc=b.snapTolerance?b.snapTolerance:12;this.D=b.type;this.b=Ul(this.D);this.na=b.minPoints?b.minPoints:this.b===Vl?3:2;this.ea=b.maxPoints?b.maxPoints:Infinity;var c=b.geometryFunction;if(!c)if("Circle"===this.D)c=function(b,c){var d=c?c:new Ll([NaN,NaN]),h=b[0],k=b[1],l=h[0]-k[0],h=h[1]-k[1];Ml(d,b[0],Math.sqrt(l*l+h*h));return d};
+else{var d,c=this.b;c===Xl?d=Mc:c===Yl?d=xl:c===Vl&&(d=Tc);c=function(b,c){var g=c;g?g.W(b):g=new d(b);return g}}this.u=c;this.B=this.i=this.a=this.j=this.g=this.h=null;this.gd=b.clickTolerance?b.clickTolerance*b.clickTolerance:36;this.Y=new Y({source:new Rj({useSpatialIndex:!1,wrapX:b.wrapX?b.wrapX:!1}),style:b.style?b.style:Zl()});this.Aa=b.geometryName;this.Ab=b.condition?b.condition:th;this.aa=b.freehandCondition?b.freehandCondition:uh;Q(this,rb("active"),this.Ja,this)}M(Ql,xh);
+function Zl(){var b=Li();return function(c){return b[c.M().U()]}}Ql.prototype.setMap=function(b){Ql.X.setMap.call(this,b);this.Ja()};function Sl(b){this.b!==Yl&&this.b!==Vl||!this.aa(b)||(this.o=!0);var c=!this.o;this.o&&b.type===Ag?($l(this,b),c=!1):b.type===zg?c=am(this,b):b.type===tg&&(c=!1);return yh.call(this,b)&&c}function Rl(b){return this.Ab(b)?(this.P=b.pixel,!0):this.o?(this.P=b.pixel,this.h||bm(this,b),!0):!1}
+function Tl(b){this.o=!1;var c=this.P,d=b.pixel,e=c[0]-d[0],c=c[1]-d[1],d=!0;e*e+c*c<=this.gd&&(am(this,b),this.h?this.b===cm?dm(this):em(this,b)?dm(this):$l(this,b):(bm(this,b),this.b===Xl&&dm(this)),d=!1);return d}
+function am(b,c){if(b.h){var d=c.coordinate,e=b.g.M(),f;b.b===Xl?f=b.a:b.b===Vl?(f=b.a[0],f=f[f.length-1],em(b,c)&&(d=b.h.slice())):(f=b.a,f=f[f.length-1]);f[0]=d[0];f[1]=d[1];b.u(b.a,e);b.j&&b.j.M().W(d);e instanceof Tc&&b.b!==Vl?(b.i||(b.i=new Dj(new xl(null))),0>=e.c.length?e=null:(d=new Lc(null),U(d,e.g,e.a.slice(0,e.c[0])),d.v(),e=d),d=b.i.M(),U(d,e.g,e.a),d.v()):b.B&&(d=b.i.M(),d.W(b.B));fm(b)}else e=c.coordinate.slice(),b.j?b.j.M().W(e):(b.j=new Dj(new Mc(e)),fm(b));return!0}
+function em(b,c){var d=!1;if(b.g){var e=!1,f=[b.h];b.b===Yl?e=b.a.length>b.na:b.b===Vl&&(e=b.a[0].length>b.na,f=[b.a[0][0],b.a[0][b.a[0].length-2]]);if(e)for(var e=c.map,g=0,h=f.length;g<h;g++){var k=f[g],l=Eh(e,k),m=c.pixel,d=m[0]-l[0],l=m[1]-l[1],m=b.o&&b.aa(c)?1:b.Zc;if(d=Math.sqrt(d*d+l*l)<=m){b.h=k;break}}}return d}
+function bm(b,c){var d=c.coordinate;b.h=d;b.b===Xl?b.a=d.slice():b.b===Vl?(b.a=[[d.slice(),d.slice()]],b.B=b.a[0]):(b.a=[d.slice(),d.slice()],b.b===cm&&(b.B=b.a));b.B&&(b.i=new Dj(new xl(b.B)));d=b.u(b.a);b.g=new Dj;b.Aa&&Fj(b.g,b.Aa);Ej(b.g,d);fm(b);S(b,new Pl("drawstart",b.g))}
+function $l(b,c){var d=c.coordinate,e=b.g.M(),f,g;if(b.b===Yl)b.h=d.slice(),g=b.a,g.push(d.slice()),f=g.length>b.ea,b.u(g,e);else if(b.b===Vl){g=b.a[0];g.push(d.slice());if(f=g.length>b.ea)b.h=g[0];b.u(b.a,e)}fm(b);f&&dm(b)}
+function dm(b){var c=gm(b),d=b.a,e=c.M();b.b===Yl?(d.pop(),b.u(d,e)):b.b===Vl&&(d[0].pop(),d[0].push(d[0][0]),b.u(d,e));"MultiPoint"===b.D?Ej(c,new zl([d])):"MultiLineString"===b.D?Ej(c,new yl([d])):"MultiPolygon"===b.D&&Ej(c,new Al([d]));S(b,new Pl("drawend",c));b.pa&&b.pa.push(c);b.Ba&&b.Ba.Cb(c)}function gm(b){b.h=null;var c=b.g;c&&(b.g=null,b.j=null,b.i=null,b.Y.V().clear(!0));return c}Ql.prototype.w=dc;
+function fm(b){var c=[];b.g&&c.push(b.g);b.i&&c.push(b.i);b.j&&c.push(b.j);b=b.Y.V();b.clear(!0);b.Db(c)}Ql.prototype.Ja=function(){var b=this.S,c=this.get("active");b&&c||gm(this);this.Y.setMap(c?b:null)};function Ul(b){var c;"Point"===b||"MultiPoint"===b?c=Xl:"LineString"===b||"MultiLineString"===b?c=Yl:"Polygon"===b||"MultiPolygon"===b?c=Vl:"Circle"===b&&(c=cm);return c}var Xl="Point",Yl="LineString",Vl="Polygon",cm="Circle";function hm(b,c,d,e,f,g,h,k,l,m,n){Be.call(this,f,0);this.u=void 0!==n?n:!1;this.s=h;this.o=k;this.c=null;this.f={};this.g=c;this.l=e;this.i=g?g:f;this.b=[];this.Sa=null;this.h=0;g=Je(e,this.i);k=this.l.C();f=this.g.C();g=k?$b(g,k):g;if(0===Ub(g))this.state=4;else if((k=b.C())&&(f?f=$b(f,k):f=k),k=e.I(this.i[0]),n=Yb(g),e=xc(d,b)(n,void 0,n.length),k=d.getPointResolution(k,n),n=pc(d),void 0!==n&&(k*=n),n=pc(b),void 0!==n&&(k/=n),e=b.getPointResolution(k,e)/k,isFinite(e)&&0<e&&(k/=e),e=k,!isFinite(e)||
+0>=e)this.state=4;else if(this.j=new Aj(b,d,g,f,e*(void 0!==m?m:.5)),0===this.j.c.length)this.state=4;else if(this.h=Qe(c,e),d=Cj(this.j),f&&(b.a?(d[1]=Ca(d[1],f[1],f[3]),d[3]=Ca(d[3],f[1],f[3])):d=$b(d,f)),Ub(d))if(b=Ke(c,d,this.h),100>b.ha()*(b.c-b.b+1)){for(c=b.a;c<=b.f;c++)for(d=b.b;d<=b.c;d++)(m=l(this.h,c,d,h))&&this.b.push(m);0===this.b.length&&(this.state=4)}else this.state=3;else this.state=4}M(hm,Be);hm.prototype.J=function(){1==this.state&&(this.Sa.forEach(N),this.Sa=null);hm.X.J.call(this)};
+hm.prototype.T=function(b){if(void 0!==b){var c=I(b);if(c in this.f)return this.f[c];b=$a(this.f)?this.c:this.c.cloneNode(!1);return this.f[c]=b}return this.c};
+hm.prototype.Uc=function(){var b=[];this.b.forEach(function(c){c&&2==c.N()&&b.push({extent:Je(this.g,c.L),image:c.T()})},this);this.b.length=0;if(0===b.length)this.state=3;else{var c=this.i[0],d=Pe(this.l,c),e=ea(d)?d:d[0],d=ea(d)?d:d[1],c=this.l.I(c),f=this.g.I(this.h),g=Je(this.l,this.i);this.c=zj(e,d,this.s,f,this.g.C(),c,g,this.j,b,this.o,this.u);this.state=2}Ce(this)};
+hm.prototype.load=function(){if(0==this.state){this.state=1;Ce(this);var b=0;this.Sa=[];this.b.forEach(function(c){var d=c.N();if(0==d||1==d){b++;var e;e=Q(c,"change",function(){var d=c.N();if(2==d||3==d||4==d)N(e),b--,0===b&&(this.Sa.forEach(N),this.Sa=null,this.Uc())},this);this.Sa.push(e)}},this);this.b.forEach(function(b){0==b.N()&&b.load()});0===b&&x.setTimeout(this.Uc.bind(this),0)}};function im(b){gk.call(this,{attributions:b.attributions,cacheSize:b.cacheSize,extent:b.extent,logo:b.logo,opaque:b.opaque,projection:b.projection,state:b.state,tileGrid:b.tileGrid,tileLoadFunction:b.tileLoadFunction?b.tileLoadFunction:jm,tilePixelRatio:b.tilePixelRatio,tileUrlFunction:b.tileUrlFunction,url:b.url,urls:b.urls,wrapX:b.wrapX});this.crossOrigin=void 0!==b.crossOrigin?b.crossOrigin:null;this.tileClass=void 0!==b.tileClass?b.tileClass:Nl;this.b={};this.o={};this.S=b.reprojectionErrorThreshold}
+M(im,gk);p=im.prototype;p.Qc=function(){if(ze(this.a))return!0;for(var b in this.b)if(ze(this.b[b]))return!0;return!1};p.Rc=function(b,c){var d=this.bb(b);Ae(this.a,this.a==d?c:{});for(var e in this.b){var f=this.b[e];Ae(f,f==d?c:{})}};p.kb=function(){return 0};p.Mb=function(b){return this.c&&b&&!wc(this.c,b)?!1:im.X.Mb.call(this,b)};p.la=function(b){var c=this.c;return!this.tileGrid||c&&!wc(c,b)?(c=I(b).toString(),c in this.o||(this.o[c]=Se(b)),this.o[c]):this.tileGrid};
+p.bb=function(b){var c=this.c;if(!c||wc(c,b))return this.a;b=I(b).toString();b in this.b||(this.b[b]=new ye);return this.b[b]};function km(b,c,d,e,f,g){c=[c,d,e];f=(d=Ye(b,c,g))?b.tileUrlFunction(d,f,g):void 0;f=new b.tileClass(c,void 0!==f?0:4,void 0!==f?f:"",b.crossOrigin,b.tileLoadFunction);f.key="";Q(f,"change",b.D,b);return f}
+function Tg(b,c,d,e,f,g){if(b.c&&g&&!wc(b.c,g)){var h=b.bb(g);d=[c,d,e];c=b.lb.apply(b,d);if(we(h,c))return h.get(c);var k=b.c;e=b.la(k);var l=b.la(g),m=Ye(b,d,g);b=new hm(k,e,g,l,d,m,b.mb(f),0,function(b,c,d,e){return lm(this,b,c,d,e,k)}.bind(b),b.S,!1);h.set(c,b);return b}return lm(b,c,d,e,f,g)}
+function lm(b,c,d,e,f,g){var h=null,k=b.lb(c,d,e);if(we(b.a,k)){if(h=b.a.get(k),""!=h.key){var l=h;h.a&&""==h.a.key?(h=h.a,2==l.N()&&(h.a=l)):(h=km(b,c,d,e,f,g),2==l.N()?h.a=l:l.a&&2==l.a.N()&&(h.a=l.a,l.a=null));h.a&&(h.a.a=null);b.a.replace(k,h)}}else h=km(b,c,d,e,f,g),b.a.set(k,h);return h}function jm(b,c){b.T().src=c};function mm(b){var c=void 0!==b.projection?b.projection:"EPSG:3857",d;if(void 0!==b.tileGrid)d=b.tileGrid;else{d={extent:Te(c),maxZoom:b.maxZoom,minZoom:b.minZoom,tileSize:b.tileSize};var e={};Wa(e,void 0!==d?d:{});void 0===e.extent&&(e.extent=lc("EPSG:3857").C());e.resolutions=Ue(e.extent,e.maxZoom,e.tileSize);delete e.maxZoom;d=new Fe(e)}im.call(this,{attributions:b.attributions,cacheSize:b.cacheSize,crossOrigin:b.crossOrigin,logo:b.logo,opaque:b.opaque,projection:c,reprojectionErrorThreshold:b.reprojectionErrorThreshold,
+tileGrid:d,tileLoadFunction:b.tileLoadFunction,tilePixelRatio:b.tilePixelRatio,tileUrlFunction:b.tileUrlFunction,url:b.url,urls:b.urls,wrapX:void 0!==b.wrapX?b.wrapX:!0})}M(mm,im);function nm(b){b=b||{};var c;void 0!==b.attributions?c=b.attributions:c=[om];mm.call(this,{attributions:c,cacheSize:b.cacheSize,crossOrigin:void 0!==b.crossOrigin?b.crossOrigin:"anonymous",opaque:void 0!==b.opaque?b.opaque:!0,maxZoom:void 0!==b.maxZoom?b.maxZoom:19,reprojectionErrorThreshold:b.reprojectionErrorThreshold,tileLoadFunction:b.tileLoadFunction,url:void 0!==b.url?b.url:"https://{a-c}.tile.openstreetmap.org/{z}/{x}/{y}.png",wrapX:b.wrapX})}M(nm,mm);var om=new jd({html:'&copy; <a href="http://www.openstreetmap.org/copyright">OpenStreetMap</a> contributors.'});function pm(b){b=b||{};var c=qm[b.layer];this.u=b.layer;mm.call(this,{attributions:c.attributions,cacheSize:b.cacheSize,crossOrigin:"anonymous",logo:"https://developer.mapquest.com/content/osm/mq_logo.png",maxZoom:c.maxZoom,reprojectionErrorThreshold:b.reprojectionErrorThreshold,opaque:c.opaque,tileLoadFunction:b.tileLoadFunction,url:void 0!==b.url?b.url:"https://otile{1-4}-s.mqcdn.com/tiles/1.0.0/"+this.u+"/{z}/{x}/{y}.jpg"})}M(pm,mm);
+var rm=new jd({html:'Tiles Courtesy of <a href="http://www.mapquest.com/">MapQuest</a>'}),qm={osm:{maxZoom:19,opaque:!0,attributions:[rm,om]},sat:{maxZoom:18,opaque:!0,attributions:[rm,new jd({html:"Portions Courtesy NASA/JPL-Caltech and U.S. Depart. of Agriculture, Farm Service Agency"})]},hyb:{maxZoom:18,opaque:!1,attributions:[rm,om]}};function sm(b){b=b||{};im.call(this,{attributions:b.attributions,cacheSize:b.cacheSize,crossOrigin:b.crossOrigin,logo:b.logo,projection:b.projection,reprojectionErrorThreshold:b.reprojectionErrorThreshold,tileGrid:b.tileGrid,tileLoadFunction:b.tileLoadFunction,url:b.url,urls:b.urls,wrapX:void 0!==b.wrapX?b.wrapX:!0});this.P=b.params||{};this.u=Jb()}M(sm,im);sm.prototype.mb=function(b){return b};
+sm.prototype.g=function(b,c,d){var e=this.tileGrid;e||(e=this.la(d));if(!(e.Nb().length<=b[0])){var f=Je(e,b,this.u),g=tb(Pe(e,b[0]),this.h);1!=c&&(g=sb(g,c,this.h));e={F:"image",FORMAT:"PNG32",TRANSPARENT:!0};Wa(e,this.P);var h;var k=this.urls;if(k){d=d.qa.split(":").pop();e.SIZE=g[0]+","+g[1];e.BBOX=f.join(",");e.BBOXSR=d;e.IMAGESR=d;e.DPI=Math.round(e.DPI?e.DPI*c:90*c);b=[(1==k.length?k[0]:k[Ea((b[1]<<b[0])+b[2],k.length)]).replace(/MapServer\/?$/,"MapServer/export").replace(/ImageServer\/?$/,
+"ImageServer/exportImage")];for(h in e)Kl(h,e[h],b);b[1]&&(h=b[0],c=h.indexOf("#"),0<=c&&(b.push(h.substr(c)),b[0]=h=h.substr(0,c)),c=h.indexOf("?"),0>c?b[1]="?":c==h.length-1&&(b[1]=void 0));h=b.join("")}else h=void 0;return h}};F("ol.format.GeoJSON",Hl,OPENLAYERS);Hl.prototype.readFeatures=Hl.prototype.b;Hl.prototype.readFeature=Hl.prototype.g;F("ol.format.EsriJSON",Bl,OPENLAYERS);Bl.prototype.readFeatures=Bl.prototype.b;Bl.prototype.readFeature=Bl.prototype.g;F("ol.style.Style",Fi,OPENLAYERS);F("ol.style.Circle",Ei,OPENLAYERS);F("ol.style.Fill",yi,OPENLAYERS);F("ol.style.Stroke",Di,OPENLAYERS);F("ol.style.Icon",Vg,OPENLAYERS);F("ol.View",V,OPENLAYERS);V.prototype.on=V.prototype.ba;V.prototype.getZoom=V.prototype.wd;
+V.prototype.setZoom=V.prototype.Ee;V.prototype.getCenter=V.prototype.ia;V.prototype.setCenter=V.prototype.oa;V.prototype.calculateExtent=V.prototype.jc;V.prototype.getProjection=V.prototype.le;V.prototype.fit=V.prototype.nd;F("ol.control.defaults",ef,OPENLAYERS);F("ol.layer.Tile",X,OPENLAYERS);X.prototype.getVisible=X.prototype.cb;X.prototype.setVisible=X.prototype.Gc;X.prototype.getZIndex=X.prototype.Vb;X.prototype.setZIndex=X.prototype.Hc;X.prototype.getOpacity=X.prototype.Ub;
+X.prototype.setOpacity=X.prototype.Fc;X.prototype.getSource=X.prototype.V;X.prototype.setSource=X.prototype.Zb;F("ol.layer.Vector",Y,OPENLAYERS);Y.prototype.getVisible=Y.prototype.cb;Y.prototype.setVisible=Y.prototype.Gc;Y.prototype.getSource=Y.prototype.V;Y.prototype.setStyle=Y.prototype.s;Y.prototype.getZIndex=Y.prototype.Vb;Y.prototype.setZIndex=Y.prototype.Hc;Y.prototype.getOpacity=Y.prototype.Ub;Y.prototype.setOpacity=Y.prototype.Fc;Y.prototype.getSource=Y.prototype.V;Y.prototype.setSource=Y.prototype.Zb;
+F("ol.source.OSM",nm,OPENLAYERS);nm.prototype.refresh=nm.prototype.wa;F("ol.source.MapQuest",pm,OPENLAYERS);pm.prototype.refresh=pm.prototype.wa;F("ol.source.XYZ",mm,OPENLAYERS);mm.prototype.refresh=mm.prototype.wa;mm.prototype.setUrl=mm.prototype.s;mm.prototype.refresh=mm.prototype.wa;F("ol.Map",Z,OPENLAYERS);Z.prototype.on=Z.prototype.ba;Z.prototype.getTarget=Z.prototype.Tb;Z.prototype.getTargetElement=Z.prototype.Na;Z.prototype.getView=Z.prototype.O;Z.prototype.addOverlay=Z.prototype.ld;
+Z.prototype.addLayer=Z.prototype.kd;Z.prototype.removeLayer=Z.prototype.Ae;Z.prototype.getEventPixel=Z.prototype.vc;Z.prototype.hasFeatureAtPixel=Z.prototype.Td;Z.prototype.getSize=Z.prototype.Pa;Z.prototype.updateSize=Z.prototype.vb;Z.prototype.forEachFeatureAtPixel=Z.prototype.pd;Z.prototype.addInteraction=Z.prototype.jd;Z.prototype.removeInteraction=Z.prototype.ze;Z.prototype.beforeRender=Z.prototype.fa;Z.prototype.addControl=Z.prototype.hd;F("ol.source.Vector",Rj,OPENLAYERS);
+Rj.prototype.getFeatures=Rj.prototype.pe;Rj.prototype.getExtent=Rj.prototype.C;Rj.prototype.refresh=Rj.prototype.wa;Rj.prototype.addFeatures=Rj.prototype.Db;Rj.prototype.addFeature=Rj.prototype.Cb;Rj.prototype.clear=Rj.prototype.clear;Rj.prototype.forEachFeature=Rj.prototype.od;Rj.prototype.refresh=Rj.prototype.wa;F("ol.source.TileArcGISRest",sm,OPENLAYERS);sm.prototype.refresh=sm.prototype.wa;F("ol.Overlay",nl,OPENLAYERS);nl.prototype.setPosition=nl.prototype.Ec;F("ol.Feature",Dj,OPENLAYERS);
+Dj.prototype.getProperties=Dj.prototype.za;Dj.prototype.setProperties=Dj.prototype.l;Dj.prototype.getGeometry=Dj.prototype.M;F("ol.geom.Point",Mc,OPENLAYERS);Mc.prototype.transform=Mc.prototype.o;Mc.prototype.getCoordinates=Mc.prototype.ra;Mc.prototype.getExtent=Mc.prototype.C;F("ol.geom.Polygon",Tc,OPENLAYERS);Tc.prototype.getCoordinates=Tc.prototype.ra;Tc.prototype.getExtent=Tc.prototype.C;Tc.prototype.transform=Tc.prototype.o;F("ol.geom.LineString",xl,OPENLAYERS);xl.prototype.getCoordinates=xl.prototype.ra;
+xl.prototype.getExtent=xl.prototype.C;xl.prototype.transform=xl.prototype.o;F("ol.proj.Projection",ic,OPENLAYERS);ic.prototype.getCode=ic.prototype.l;F("ol.interaction.Draw",Ql,OPENLAYERS);Ql.prototype.on=Ql.prototype.ba;F("ol.animation.pan",cd,OPENLAYERS);F("ol.control.FullScreen",kf,OPENLAYERS);
   return OPENLAYERS.ol;
 }));
 
diff --git a/src/ol/ol-config.json b/src/ol/ol-config.json
index f6bf79757e087d4525d7d9a2cae534f3f888377e..e92ec6316156d18a43e5f28cc0fdf395c5c5dba0 100644
--- a/src/ol/ol-config.json
+++ b/src/ol/ol-config.json
@@ -65,6 +65,7 @@
     "ol.Map#addInteraction",
     "ol.Map#removeInteraction",
     "ol.Map#beforeRender",
+    "ol.Map#addControl",
     "ol.source.Vector",
     "ol.source.Vector#getFeatures",
     "ol.source.Vector#getExtent",
@@ -98,7 +99,8 @@
     "ol.proj.Projection#getCode",
     "ol.interaction.Draw",
     "ol.interaction.Draw#on",
-    "ol.animation.pan"
+    "ol.animation.pan",
+    "ol.control.FullScreen"
   ],
   "compile": {
     "externs": [
diff --git a/src/olHelpers/quickMap.js b/src/olHelpers/quickMap.js
index 6fae1dc8407c0f2e102b802947eab1cc27ac128e..57af2d7af97199f0944c379124814b6c7eb97056 100644
--- a/src/olHelpers/quickMap.js
+++ b/src/olHelpers/quickMap.js
@@ -21,6 +21,7 @@ let nm = provide('olHelpers');
  * @param {number} [options.minZoom=undefined] min zoom
  * @param {number} [options.maxZoom=undefined] max zoom
  * @param {boolean} [options.baseSwitcher=true] if add base map switcher
+ * @param {boolean} [options.fullScreen=false] if add base map switcher
  * @returns {ol.Map} the ol map
  */
 function quickMap(options) {
diff --git a/src/olHelpers/quickMapBase.js b/src/olHelpers/quickMapBase.js
index e40cff811ed74e9ff4724ddd9a696dc8ea075dd6..94419bc4dbb06cdcdf5b760bdacc2acb873186e8 100644
--- a/src/olHelpers/quickMapBase.js
+++ b/src/olHelpers/quickMapBase.js
@@ -8,8 +8,6 @@
 
 import $ from '../jquery';
 import provide from '../util/provide';
-import mapMove from './mapMove';
-import mapPopup from './mapPopup';
 import ol from '../ol/ol';
 const nm = provide('olHelpers');
 
@@ -26,6 +24,7 @@ const nm = provide('olHelpers');
  * @param {number} [options.minZoom=undefined] min zoom
  * @param {number} [options.maxZoom=undefined] max zoom
  * @param {boolean} [options.baseSwitcher=true] if add base map switcher
+ * @param {boolean} [options.fullScreen=false] if add base map switcher
  * @returns {ol.Map} the ol map
  */
 function quickMapBase(options) {
@@ -36,6 +35,7 @@ function quickMapBase(options) {
     options.center.y = typeof options.center.y == 'number' ? options.center.y : 5574910;
     options.zoom = typeof options.zoom == 'number' ? options.zoom : 7;
     options.baseSwitcher = typeof options.baseSwitcher == 'boolean' ? options.baseSwitcher : true;
+    options.fullScreen = typeof options.fullScreen == 'boolean' ? options.fullScreen : false;
 
 
     let $mapDiv = $('#' + options.divId);
@@ -79,7 +79,7 @@ function quickMapBase(options) {
         options.center.y = coordinates[1];
     }
 
-    return new ol.Map({
+    let map = new ol.Map({
         layers: [osmLayer, satLayer],
         target: options.divId,
         controls: ol.control.defaults({
@@ -92,6 +92,12 @@ function quickMapBase(options) {
             maxZoom: options.maxZoom
         })
     });
+    
+    if (options.fullScreen){
+        map.addControl(new ol.control.FullScreen());
+    }
+
+    return map;
 }
 
 nm.quickMapBase = quickMapBase;
diff --git a/src/olHelpers/quickMapMulti.js b/src/olHelpers/quickMapMulti.js
index c8e7153ca56557487979fa11f8d6c4062410a79f..f9e112c6d9ef094d3bf0d0106e18f52b0e742389 100644
--- a/src/olHelpers/quickMapMulti.js
+++ b/src/olHelpers/quickMapMulti.js
@@ -29,6 +29,7 @@ let nm = provide('olHelpers');
  * @param {number} [options.minZoom=undefined] min zoom
  * @param {number} [options.maxZoom=undefined] max zoom
  * @param {boolean} [options.baseSwitcher=true] if add base map switcher
+ * @param {boolean} [options.fullScreen=false] if add base map switcher
  * @returns {quickMapMultiReturn} return map, map move, and map popup objects
  */
 function quickMapMulti(options) {
diff --git a/test-build/legend-test.js b/test-build/legend-test.js
new file mode 100644
index 0000000000000000000000000000000000000000..0ffe14bc8af11c397bae35ad4bcc77c55b6e39d5
--- /dev/null
+++ b/test-build/legend-test.js
@@ -0,0 +1,21704 @@
+(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){
+(function (global){
+/*istanbul ignore next*/"use strict";
+
+/*istanbul ignore next*/require("core-js/shim");
+
+/*istanbul ignore next*/require("babel-regenerator-runtime");
+
+/*istanbul ignore next*/require("core-js/fn/regexp/escape");
+
+/* eslint max-len: 0 */
+
+if (global._babelPolyfill) {
+  throw new Error("only one instance of babel-polyfill is allowed");
+}
+global._babelPolyfill = true;
+
+// Should be removed in the next major release:
+
+var DEFINE_PROPERTY = "defineProperty";
+function define(O, key, value) {
+  O[key] || Object[DEFINE_PROPERTY](O, key, {
+    writable: true,
+    configurable: true,
+    value: value
+  });
+}
+
+define(String.prototype, "padLeft", "".padStart);
+define(String.prototype, "padRight", "".padEnd);
+
+"pop,reverse,shift,keys,values,entries,indexOf,every,some,forEach,map,filter,find,findIndex,includes,join,slice,concat,push,splice,unshift,sort,lastIndexOf,reduce,reduceRight,copyWithin,fill".split(",").forEach(function (key) {
+  [][key] && define(Array, key, Function.call.bind([][key]));
+});
+}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
+
+},{"babel-regenerator-runtime":2,"core-js/fn/regexp/escape":3,"core-js/shim":297}],2:[function(require,module,exports){
+(function (process,global){
+/**
+ * Copyright (c) 2014, Facebook, Inc.
+ * All rights reserved.
+ *
+ * This source code is licensed under the BSD-style license found in the
+ * https://raw.github.com/facebook/regenerator/master/LICENSE file. An
+ * additional grant of patent rights can be found in the PATENTS file in
+ * the same directory.
+ */
+
+!(function(global) {
+  "use strict";
+
+  var hasOwn = Object.prototype.hasOwnProperty;
+  var undefined; // More compressible than void 0.
+  var iteratorSymbol =
+    typeof Symbol === "function" && Symbol.iterator || "@@iterator";
+
+  var inModule = typeof module === "object";
+  var runtime = global.regeneratorRuntime;
+  if (runtime) {
+    if (inModule) {
+      // If regeneratorRuntime is defined globally and we're in a module,
+      // make the exports object identical to regeneratorRuntime.
+      module.exports = runtime;
+    }
+    // Don't bother evaluating the rest of this file if the runtime was
+    // already defined globally.
+    return;
+  }
+
+  // Define the runtime globally (as expected by generated code) as either
+  // module.exports (if we're in a module) or a new, empty object.
+  runtime = global.regeneratorRuntime = inModule ? module.exports : {};
+
+  function wrap(innerFn, outerFn, self, tryLocsList) {
+    // If outerFn provided, then outerFn.prototype instanceof Generator.
+    var generator = Object.create((outerFn || Generator).prototype);
+    var context = new Context(tryLocsList || []);
+
+    // The ._invoke method unifies the implementations of the .next,
+    // .throw, and .return methods.
+    generator._invoke = makeInvokeMethod(innerFn, self, context);
+
+    return generator;
+  }
+  runtime.wrap = wrap;
+
+  // Try/catch helper to minimize deoptimizations. Returns a completion
+  // record like context.tryEntries[i].completion. This interface could
+  // have been (and was previously) designed to take a closure to be
+  // invoked without arguments, but in all the cases we care about we
+  // already have an existing method we want to call, so there's no need
+  // to create a new function object. We can even get away with assuming
+  // the method takes exactly one argument, since that happens to be true
+  // in every case, so we don't have to touch the arguments object. The
+  // only additional allocation required is the completion record, which
+  // has a stable shape and so hopefully should be cheap to allocate.
+  function tryCatch(fn, obj, arg) {
+    try {
+      return { type: "normal", arg: fn.call(obj, arg) };
+    } catch (err) {
+      return { type: "throw", arg: err };
+    }
+  }
+
+  var GenStateSuspendedStart = "suspendedStart";
+  var GenStateSuspendedYield = "suspendedYield";
+  var GenStateExecuting = "executing";
+  var GenStateCompleted = "completed";
+
+  // Returning this object from the innerFn has the same effect as
+  // breaking out of the dispatch switch statement.
+  var ContinueSentinel = {};
+
+  // Dummy constructor functions that we use as the .constructor and
+  // .constructor.prototype properties for functions that return Generator
+  // objects. For full spec compliance, you may wish to configure your
+  // minifier not to mangle the names of these two functions.
+  function Generator() {}
+  function GeneratorFunction() {}
+  function GeneratorFunctionPrototype() {}
+
+  var Gp = GeneratorFunctionPrototype.prototype = Generator.prototype;
+  GeneratorFunction.prototype = Gp.constructor = GeneratorFunctionPrototype;
+  GeneratorFunctionPrototype.constructor = GeneratorFunction;
+  GeneratorFunction.displayName = "GeneratorFunction";
+
+  // Helper for defining the .next, .throw, and .return methods of the
+  // Iterator interface in terms of a single ._invoke method.
+  function defineIteratorMethods(prototype) {
+    ["next", "throw", "return"].forEach(function(method) {
+      prototype[method] = function(arg) {
+        return this._invoke(method, arg);
+      };
+    });
+  }
+
+  runtime.isGeneratorFunction = function(genFun) {
+    var ctor = typeof genFun === "function" && genFun.constructor;
+    return ctor
+      ? ctor === GeneratorFunction ||
+        // For the native GeneratorFunction constructor, the best we can
+        // do is to check its .name property.
+        (ctor.displayName || ctor.name) === "GeneratorFunction"
+      : false;
+  };
+
+  runtime.mark = function(genFun) {
+    if (Object.setPrototypeOf) {
+      Object.setPrototypeOf(genFun, GeneratorFunctionPrototype);
+    } else {
+      genFun.__proto__ = GeneratorFunctionPrototype;
+    }
+    genFun.prototype = Object.create(Gp);
+    return genFun;
+  };
+
+  // Within the body of any async function, `await x` is transformed to
+  // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test
+  // `value instanceof AwaitArgument` to determine if the yielded value is
+  // meant to be awaited. Some may consider the name of this method too
+  // cutesy, but they are curmudgeons.
+  runtime.awrap = function(arg) {
+    return new AwaitArgument(arg);
+  };
+
+  function AwaitArgument(arg) {
+    this.arg = arg;
+  }
+
+  function AsyncIterator(generator) {
+    // This invoke function is written in a style that assumes some
+    // calling function (or Promise) will handle exceptions.
+    function invoke(method, arg) {
+      var result = generator[method](arg);
+      var value = result.value;
+      return value instanceof AwaitArgument
+        ? Promise.resolve(value.arg).then(invokeNext, invokeThrow)
+        : Promise.resolve(value).then(function(unwrapped) {
+            // When a yielded Promise is resolved, its final value becomes
+            // the .value of the Promise<{value,done}> result for the
+            // current iteration. If the Promise is rejected, however, the
+            // result for this iteration will be rejected with the same
+            // reason. Note that rejections of yielded Promises are not
+            // thrown back into the generator function, as is the case
+            // when an awaited Promise is rejected. This difference in
+            // behavior between yield and await is important, because it
+            // allows the consumer to decide what to do with the yielded
+            // rejection (swallow it and continue, manually .throw it back
+            // into the generator, abandon iteration, whatever). With
+            // await, by contrast, there is no opportunity to examine the
+            // rejection reason outside the generator function, so the
+            // only option is to throw it from the await expression, and
+            // let the generator function handle the exception.
+            result.value = unwrapped;
+            return result;
+          });
+    }
+
+    if (typeof process === "object" && process.domain) {
+      invoke = process.domain.bind(invoke);
+    }
+
+    var invokeNext = invoke.bind(generator, "next");
+    var invokeThrow = invoke.bind(generator, "throw");
+    var invokeReturn = invoke.bind(generator, "return");
+    var previousPromise;
+
+    function enqueue(method, arg) {
+      function callInvokeWithMethodAndArg() {
+        return invoke(method, arg);
+      }
+
+      return previousPromise =
+        // If enqueue has been called before, then we want to wait until
+        // all previous Promises have been resolved before calling invoke,
+        // so that results are always delivered in the correct order. If
+        // enqueue has not been called before, then it is important to
+        // call invoke immediately, without waiting on a callback to fire,
+        // so that the async generator function has the opportunity to do
+        // any necessary setup in a predictable way. This predictability
+        // is why the Promise constructor synchronously invokes its
+        // executor callback, and why async functions synchronously
+        // execute code before the first await. Since we implement simple
+        // async functions in terms of async generators, it is especially
+        // important to get this right, even though it requires care.
+        previousPromise ? previousPromise.then(
+          callInvokeWithMethodAndArg,
+          // Avoid propagating failures to Promises returned by later
+          // invocations of the iterator.
+          callInvokeWithMethodAndArg
+        ) : new Promise(function (resolve) {
+          resolve(callInvokeWithMethodAndArg());
+        });
+    }
+
+    // Define the unified helper method that is used to implement .next,
+    // .throw, and .return (see defineIteratorMethods).
+    this._invoke = enqueue;
+  }
+
+  defineIteratorMethods(AsyncIterator.prototype);
+
+  // Note that simple async functions are implemented on top of
+  // AsyncIterator objects; they just return a Promise for the value of
+  // the final result produced by the iterator.
+  runtime.async = function(innerFn, outerFn, self, tryLocsList) {
+    var iter = new AsyncIterator(
+      wrap(innerFn, outerFn, self, tryLocsList)
+    );
+
+    return runtime.isGeneratorFunction(outerFn)
+      ? iter // If outerFn is a generator, return the full iterator.
+      : iter.next().then(function(result) {
+          return result.done ? result.value : iter.next();
+        });
+  };
+
+  function makeInvokeMethod(innerFn, self, context) {
+    var state = GenStateSuspendedStart;
+
+    return function invoke(method, arg) {
+      if (state === GenStateExecuting) {
+        throw new Error("Generator is already running");
+      }
+
+      if (state === GenStateCompleted) {
+        if (method === "throw") {
+          throw arg;
+        }
+
+        // Be forgiving, per 25.3.3.3.3 of the spec:
+        // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume
+        return doneResult();
+      }
+
+      while (true) {
+        var delegate = context.delegate;
+        if (delegate) {
+          if (method === "return" ||
+              (method === "throw" && delegate.iterator[method] === undefined)) {
+            // A return or throw (when the delegate iterator has no throw
+            // method) always terminates the yield* loop.
+            context.delegate = null;
+
+            // If the delegate iterator has a return method, give it a
+            // chance to clean up.
+            var returnMethod = delegate.iterator["return"];
+            if (returnMethod) {
+              var record = tryCatch(returnMethod, delegate.iterator, arg);
+              if (record.type === "throw") {
+                // If the return method threw an exception, let that
+                // exception prevail over the original return or throw.
+                method = "throw";
+                arg = record.arg;
+                continue;
+              }
+            }
+
+            if (method === "return") {
+              // Continue with the outer return, now that the delegate
+              // iterator has been terminated.
+              continue;
+            }
+          }
+
+          var record = tryCatch(
+            delegate.iterator[method],
+            delegate.iterator,
+            arg
+          );
+
+          if (record.type === "throw") {
+            context.delegate = null;
+
+            // Like returning generator.throw(uncaught), but without the
+            // overhead of an extra function call.
+            method = "throw";
+            arg = record.arg;
+            continue;
+          }
+
+          // Delegate generator ran and handled its own exceptions so
+          // regardless of what the method was, we continue as if it is
+          // "next" with an undefined arg.
+          method = "next";
+          arg = undefined;
+
+          var info = record.arg;
+          if (info.done) {
+            context[delegate.resultName] = info.value;
+            context.next = delegate.nextLoc;
+          } else {
+            state = GenStateSuspendedYield;
+            return info;
+          }
+
+          context.delegate = null;
+        }
+
+        if (method === "next") {
+          context._sent = arg;
+
+          if (state === GenStateSuspendedYield) {
+            context.sent = arg;
+          } else {
+            context.sent = undefined;
+          }
+        } else if (method === "throw") {
+          if (state === GenStateSuspendedStart) {
+            state = GenStateCompleted;
+            throw arg;
+          }
+
+          if (context.dispatchException(arg)) {
+            // If the dispatched exception was caught by a catch block,
+            // then let that catch block handle the exception normally.
+            method = "next";
+            arg = undefined;
+          }
+
+        } else if (method === "return") {
+          context.abrupt("return", arg);
+        }
+
+        state = GenStateExecuting;
+
+        var record = tryCatch(innerFn, self, context);
+        if (record.type === "normal") {
+          // If an exception is thrown from innerFn, we leave state ===
+          // GenStateExecuting and loop back for another invocation.
+          state = context.done
+            ? GenStateCompleted
+            : GenStateSuspendedYield;
+
+          var info = {
+            value: record.arg,
+            done: context.done
+          };
+
+          if (record.arg === ContinueSentinel) {
+            if (context.delegate && method === "next") {
+              // Deliberately forget the last sent value so that we don't
+              // accidentally pass it on to the delegate.
+              arg = undefined;
+            }
+          } else {
+            return info;
+          }
+
+        } else if (record.type === "throw") {
+          state = GenStateCompleted;
+          // Dispatch the exception by looping back around to the
+          // context.dispatchException(arg) call above.
+          method = "throw";
+          arg = record.arg;
+        }
+      }
+    };
+  }
+
+  // Define Generator.prototype.{next,throw,return} in terms of the
+  // unified ._invoke helper method.
+  defineIteratorMethods(Gp);
+
+  Gp[iteratorSymbol] = function() {
+    return this;
+  };
+
+  Gp.toString = function() {
+    return "[object Generator]";
+  };
+
+  function pushTryEntry(locs) {
+    var entry = { tryLoc: locs[0] };
+
+    if (1 in locs) {
+      entry.catchLoc = locs[1];
+    }
+
+    if (2 in locs) {
+      entry.finallyLoc = locs[2];
+      entry.afterLoc = locs[3];
+    }
+
+    this.tryEntries.push(entry);
+  }
+
+  function resetTryEntry(entry) {
+    var record = entry.completion || {};
+    record.type = "normal";
+    delete record.arg;
+    entry.completion = record;
+  }
+
+  function Context(tryLocsList) {
+    // The root entry object (effectively a try statement without a catch
+    // or a finally block) gives us a place to store values thrown from
+    // locations where there is no enclosing try statement.
+    this.tryEntries = [{ tryLoc: "root" }];
+    tryLocsList.forEach(pushTryEntry, this);
+    this.reset(true);
+  }
+
+  runtime.keys = function(object) {
+    var keys = [];
+    for (var key in object) {
+      keys.push(key);
+    }
+    keys.reverse();
+
+    // Rather than returning an object with a next method, we keep
+    // things simple and return the next function itself.
+    return function next() {
+      while (keys.length) {
+        var key = keys.pop();
+        if (key in object) {
+          next.value = key;
+          next.done = false;
+          return next;
+        }
+      }
+
+      // To avoid creating an additional object, we just hang the .value
+      // and .done properties off the next function object itself. This
+      // also ensures that the minifier will not anonymize the function.
+      next.done = true;
+      return next;
+    };
+  };
+
+  function values(iterable) {
+    if (iterable) {
+      var iteratorMethod = iterable[iteratorSymbol];
+      if (iteratorMethod) {
+        return iteratorMethod.call(iterable);
+      }
+
+      if (typeof iterable.next === "function") {
+        return iterable;
+      }
+
+      if (!isNaN(iterable.length)) {
+        var i = -1, next = function next() {
+          while (++i < iterable.length) {
+            if (hasOwn.call(iterable, i)) {
+              next.value = iterable[i];
+              next.done = false;
+              return next;
+            }
+          }
+
+          next.value = undefined;
+          next.done = true;
+
+          return next;
+        };
+
+        return next.next = next;
+      }
+    }
+
+    // Return an iterator with no values.
+    return { next: doneResult };
+  }
+  runtime.values = values;
+
+  function doneResult() {
+    return { value: undefined, done: true };
+  }
+
+  Context.prototype = {
+    constructor: Context,
+
+    reset: function(skipTempReset) {
+      this.prev = 0;
+      this.next = 0;
+      this.sent = undefined;
+      this.done = false;
+      this.delegate = null;
+
+      this.tryEntries.forEach(resetTryEntry);
+
+      if (!skipTempReset) {
+        for (var name in this) {
+          // Not sure about the optimal order of these conditions:
+          if (name.charAt(0) === "t" &&
+              hasOwn.call(this, name) &&
+              !isNaN(+name.slice(1))) {
+            this[name] = undefined;
+          }
+        }
+      }
+    },
+
+    stop: function() {
+      this.done = true;
+
+      var rootEntry = this.tryEntries[0];
+      var rootRecord = rootEntry.completion;
+      if (rootRecord.type === "throw") {
+        throw rootRecord.arg;
+      }
+
+      return this.rval;
+    },
+
+    dispatchException: function(exception) {
+      if (this.done) {
+        throw exception;
+      }
+
+      var context = this;
+      function handle(loc, caught) {
+        record.type = "throw";
+        record.arg = exception;
+        context.next = loc;
+        return !!caught;
+      }
+
+      for (var i = this.tryEntries.length - 1; i >= 0; --i) {
+        var entry = this.tryEntries[i];
+        var record = entry.completion;
+
+        if (entry.tryLoc === "root") {
+          // Exception thrown outside of any try block that could handle
+          // it, so set the completion value of the entire function to
+          // throw the exception.
+          return handle("end");
+        }
+
+        if (entry.tryLoc <= this.prev) {
+          var hasCatch = hasOwn.call(entry, "catchLoc");
+          var hasFinally = hasOwn.call(entry, "finallyLoc");
+
+          if (hasCatch && hasFinally) {
+            if (this.prev < entry.catchLoc) {
+              return handle(entry.catchLoc, true);
+            } else if (this.prev < entry.finallyLoc) {
+              return handle(entry.finallyLoc);
+            }
+
+          } else if (hasCatch) {
+            if (this.prev < entry.catchLoc) {
+              return handle(entry.catchLoc, true);
+            }
+
+          } else if (hasFinally) {
+            if (this.prev < entry.finallyLoc) {
+              return handle(entry.finallyLoc);
+            }
+
+          } else {
+            throw new Error("try statement without catch or finally");
+          }
+        }
+      }
+    },
+
+    abrupt: function(type, arg) {
+      for (var i = this.tryEntries.length - 1; i >= 0; --i) {
+        var entry = this.tryEntries[i];
+        if (entry.tryLoc <= this.prev &&
+            hasOwn.call(entry, "finallyLoc") &&
+            this.prev < entry.finallyLoc) {
+          var finallyEntry = entry;
+          break;
+        }
+      }
+
+      if (finallyEntry &&
+          (type === "break" ||
+           type === "continue") &&
+          finallyEntry.tryLoc <= arg &&
+          arg <= finallyEntry.finallyLoc) {
+        // Ignore the finally entry if control is not jumping to a
+        // location outside the try/catch block.
+        finallyEntry = null;
+      }
+
+      var record = finallyEntry ? finallyEntry.completion : {};
+      record.type = type;
+      record.arg = arg;
+
+      if (finallyEntry) {
+        this.next = finallyEntry.finallyLoc;
+      } else {
+        this.complete(record);
+      }
+
+      return ContinueSentinel;
+    },
+
+    complete: function(record, afterLoc) {
+      if (record.type === "throw") {
+        throw record.arg;
+      }
+
+      if (record.type === "break" ||
+          record.type === "continue") {
+        this.next = record.arg;
+      } else if (record.type === "return") {
+        this.rval = record.arg;
+        this.next = "end";
+      } else if (record.type === "normal" && afterLoc) {
+        this.next = afterLoc;
+      }
+    },
+
+    finish: function(finallyLoc) {
+      for (var i = this.tryEntries.length - 1; i >= 0; --i) {
+        var entry = this.tryEntries[i];
+        if (entry.finallyLoc === finallyLoc) {
+          this.complete(entry.completion, entry.afterLoc);
+          resetTryEntry(entry);
+          return ContinueSentinel;
+        }
+      }
+    },
+
+    "catch": function(tryLoc) {
+      for (var i = this.tryEntries.length - 1; i >= 0; --i) {
+        var entry = this.tryEntries[i];
+        if (entry.tryLoc === tryLoc) {
+          var record = entry.completion;
+          if (record.type === "throw") {
+            var thrown = record.arg;
+            resetTryEntry(entry);
+          }
+          return thrown;
+        }
+      }
+
+      // The context.catch method must only be called with a location
+      // argument that corresponds to a known catch block.
+      throw new Error("illegal catch attempt");
+    },
+
+    delegateYield: function(iterable, resultName, nextLoc) {
+      this.delegate = {
+        iterator: values(iterable),
+        resultName: resultName,
+        nextLoc: nextLoc
+      };
+
+      return ContinueSentinel;
+    }
+  };
+})(
+  // Among the various tricks for obtaining a reference to the global
+  // object, this seems to be the most reliable technique that does not
+  // use indirect eval (which violates Content Security Policy).
+  typeof global === "object" ? global :
+  typeof window === "object" ? window :
+  typeof self === "object" ? self : this
+);
+
+}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
+
+},{"_process":298}],3:[function(require,module,exports){
+require('../../modules/core.regexp.escape');
+module.exports = require('../../modules/_core').RegExp.escape;
+},{"../../modules/_core":24,"../../modules/core.regexp.escape":121}],4:[function(require,module,exports){
+module.exports = function(it){
+  if(typeof it != 'function')throw TypeError(it + ' is not a function!');
+  return it;
+};
+},{}],5:[function(require,module,exports){
+var cof = require('./_cof');
+module.exports = function(it, msg){
+  if(typeof it != 'number' && cof(it) != 'Number')throw TypeError(msg);
+  return +it;
+};
+},{"./_cof":19}],6:[function(require,module,exports){
+// 22.1.3.31 Array.prototype[@@unscopables]
+var UNSCOPABLES = require('./_wks')('unscopables')
+  , ArrayProto  = Array.prototype;
+if(ArrayProto[UNSCOPABLES] == undefined)require('./_hide')(ArrayProto, UNSCOPABLES, {});
+module.exports = function(key){
+  ArrayProto[UNSCOPABLES][key] = true;
+};
+},{"./_hide":41,"./_wks":118}],7:[function(require,module,exports){
+module.exports = function(it, Constructor, name, forbiddenField){
+  if(!(it instanceof Constructor) || (forbiddenField !== undefined && forbiddenField in it)){
+    throw TypeError(name + ': incorrect invocation!');
+  } return it;
+};
+},{}],8:[function(require,module,exports){
+var isObject = require('./_is-object');
+module.exports = function(it){
+  if(!isObject(it))throw TypeError(it + ' is not an object!');
+  return it;
+};
+},{"./_is-object":50}],9:[function(require,module,exports){
+// 22.1.3.3 Array.prototype.copyWithin(target, start, end = this.length)
+'use strict';
+var toObject = require('./_to-object')
+  , toIndex  = require('./_to-index')
+  , toLength = require('./_to-length');
+
+module.exports = [].copyWithin || function copyWithin(target/*= 0*/, start/*= 0, end = @length*/){
+  var O     = toObject(this)
+    , len   = toLength(O.length)
+    , to    = toIndex(target, len)
+    , from  = toIndex(start, len)
+    , end   = arguments.length > 2 ? arguments[2] : undefined
+    , count = Math.min((end === undefined ? len : toIndex(end, len)) - from, len - to)
+    , inc   = 1;
+  if(from < to && to < from + count){
+    inc  = -1;
+    from += count - 1;
+    to   += count - 1;
+  }
+  while(count-- > 0){
+    if(from in O)O[to] = O[from];
+    else delete O[to];
+    to   += inc;
+    from += inc;
+  } return O;
+};
+},{"./_to-index":106,"./_to-length":109,"./_to-object":110}],10:[function(require,module,exports){
+// 22.1.3.6 Array.prototype.fill(value, start = 0, end = this.length)
+'use strict';
+var toObject = require('./_to-object')
+  , toIndex  = require('./_to-index')
+  , toLength = require('./_to-length');
+module.exports = function fill(value /*, start = 0, end = @length */){
+  var O      = toObject(this)
+    , length = toLength(O.length)
+    , aLen   = arguments.length
+    , index  = toIndex(aLen > 1 ? arguments[1] : undefined, length)
+    , end    = aLen > 2 ? arguments[2] : undefined
+    , endPos = end === undefined ? length : toIndex(end, length);
+  while(endPos > index)O[index++] = value;
+  return O;
+};
+},{"./_to-index":106,"./_to-length":109,"./_to-object":110}],11:[function(require,module,exports){
+var forOf = require('./_for-of');
+
+module.exports = function(iter, ITERATOR){
+  var result = [];
+  forOf(iter, false, result.push, result, ITERATOR);
+  return result;
+};
+
+},{"./_for-of":38}],12:[function(require,module,exports){
+// false -> Array#indexOf
+// true  -> Array#includes
+var toIObject = require('./_to-iobject')
+  , toLength  = require('./_to-length')
+  , toIndex   = require('./_to-index');
+module.exports = function(IS_INCLUDES){
+  return function($this, el, fromIndex){
+    var O      = toIObject($this)
+      , length = toLength(O.length)
+      , index  = toIndex(fromIndex, length)
+      , value;
+    // Array#includes uses SameValueZero equality algorithm
+    if(IS_INCLUDES && el != el)while(length > index){
+      value = O[index++];
+      if(value != value)return true;
+    // Array#toIndex ignores holes, Array#includes - not
+    } else for(;length > index; index++)if(IS_INCLUDES || index in O){
+      if(O[index] === el)return IS_INCLUDES || index || 0;
+    } return !IS_INCLUDES && -1;
+  };
+};
+},{"./_to-index":106,"./_to-iobject":108,"./_to-length":109}],13:[function(require,module,exports){
+// 0 -> Array#forEach
+// 1 -> Array#map
+// 2 -> Array#filter
+// 3 -> Array#some
+// 4 -> Array#every
+// 5 -> Array#find
+// 6 -> Array#findIndex
+var ctx      = require('./_ctx')
+  , IObject  = require('./_iobject')
+  , toObject = require('./_to-object')
+  , toLength = require('./_to-length')
+  , asc      = require('./_array-species-create');
+module.exports = function(TYPE, $create){
+  var IS_MAP        = TYPE == 1
+    , IS_FILTER     = TYPE == 2
+    , IS_SOME       = TYPE == 3
+    , IS_EVERY      = TYPE == 4
+    , IS_FIND_INDEX = TYPE == 6
+    , NO_HOLES      = TYPE == 5 || IS_FIND_INDEX
+    , create        = $create || asc;
+  return function($this, callbackfn, that){
+    var O      = toObject($this)
+      , self   = IObject(O)
+      , f      = ctx(callbackfn, that, 3)
+      , length = toLength(self.length)
+      , index  = 0
+      , result = IS_MAP ? create($this, length) : IS_FILTER ? create($this, 0) : undefined
+      , val, res;
+    for(;length > index; index++)if(NO_HOLES || index in self){
+      val = self[index];
+      res = f(val, index, O);
+      if(TYPE){
+        if(IS_MAP)result[index] = res;            // map
+        else if(res)switch(TYPE){
+          case 3: return true;                    // some
+          case 5: return val;                     // find
+          case 6: return index;                   // findIndex
+          case 2: result.push(val);               // filter
+        } else if(IS_EVERY)return false;          // every
+      }
+    }
+    return IS_FIND_INDEX ? -1 : IS_SOME || IS_EVERY ? IS_EVERY : result;
+  };
+};
+},{"./_array-species-create":16,"./_ctx":26,"./_iobject":46,"./_to-length":109,"./_to-object":110}],14:[function(require,module,exports){
+var aFunction = require('./_a-function')
+  , toObject  = require('./_to-object')
+  , IObject   = require('./_iobject')
+  , toLength  = require('./_to-length');
+
+module.exports = function(that, callbackfn, aLen, memo, isRight){
+  aFunction(callbackfn);
+  var O      = toObject(that)
+    , self   = IObject(O)
+    , length = toLength(O.length)
+    , index  = isRight ? length - 1 : 0
+    , i      = isRight ? -1 : 1;
+  if(aLen < 2)for(;;){
+    if(index in self){
+      memo = self[index];
+      index += i;
+      break;
+    }
+    index += i;
+    if(isRight ? index < 0 : length <= index){
+      throw TypeError('Reduce of empty array with no initial value');
+    }
+  }
+  for(;isRight ? index >= 0 : length > index; index += i)if(index in self){
+    memo = callbackfn(memo, self[index], index, O);
+  }
+  return memo;
+};
+},{"./_a-function":4,"./_iobject":46,"./_to-length":109,"./_to-object":110}],15:[function(require,module,exports){
+var isObject = require('./_is-object')
+  , isArray  = require('./_is-array')
+  , SPECIES  = require('./_wks')('species');
+
+module.exports = function(original){
+  var C;
+  if(isArray(original)){
+    C = original.constructor;
+    // cross-realm fallback
+    if(typeof C == 'function' && (C === Array || isArray(C.prototype)))C = undefined;
+    if(isObject(C)){
+      C = C[SPECIES];
+      if(C === null)C = undefined;
+    }
+  } return C === undefined ? Array : C;
+};
+},{"./_is-array":48,"./_is-object":50,"./_wks":118}],16:[function(require,module,exports){
+// 9.4.2.3 ArraySpeciesCreate(originalArray, length)
+var speciesConstructor = require('./_array-species-constructor');
+
+module.exports = function(original, length){
+  return new (speciesConstructor(original))(length);
+};
+},{"./_array-species-constructor":15}],17:[function(require,module,exports){
+'use strict';
+var aFunction  = require('./_a-function')
+  , isObject   = require('./_is-object')
+  , invoke     = require('./_invoke')
+  , arraySlice = [].slice
+  , factories  = {};
+
+var construct = function(F, len, args){
+  if(!(len in factories)){
+    for(var n = [], i = 0; i < len; i++)n[i] = 'a[' + i + ']';
+    factories[len] = Function('F,a', 'return new F(' + n.join(',') + ')');
+  } return factories[len](F, args);
+};
+
+module.exports = Function.bind || function bind(that /*, args... */){
+  var fn       = aFunction(this)
+    , partArgs = arraySlice.call(arguments, 1);
+  var bound = function(/* args... */){
+    var args = partArgs.concat(arraySlice.call(arguments));
+    return this instanceof bound ? construct(fn, args.length, args) : invoke(fn, args, that);
+  };
+  if(isObject(fn.prototype))bound.prototype = fn.prototype;
+  return bound;
+};
+},{"./_a-function":4,"./_invoke":45,"./_is-object":50}],18:[function(require,module,exports){
+// getting tag from 19.1.3.6 Object.prototype.toString()
+var cof = require('./_cof')
+  , TAG = require('./_wks')('toStringTag')
+  // ES3 wrong here
+  , ARG = cof(function(){ return arguments; }()) == 'Arguments';
+
+// fallback for IE11 Script Access Denied error
+var tryGet = function(it, key){
+  try {
+    return it[key];
+  } catch(e){ /* empty */ }
+};
+
+module.exports = function(it){
+  var O, T, B;
+  return it === undefined ? 'Undefined' : it === null ? 'Null'
+    // @@toStringTag case
+    : typeof (T = tryGet(O = Object(it), TAG)) == 'string' ? T
+    // builtinTag case
+    : ARG ? cof(O)
+    // ES3 arguments fallback
+    : (B = cof(O)) == 'Object' && typeof O.callee == 'function' ? 'Arguments' : B;
+};
+},{"./_cof":19,"./_wks":118}],19:[function(require,module,exports){
+var toString = {}.toString;
+
+module.exports = function(it){
+  return toString.call(it).slice(8, -1);
+};
+},{}],20:[function(require,module,exports){
+'use strict';
+var dP          = require('./_object-dp').f
+  , create      = require('./_object-create')
+  , hide        = require('./_hide')
+  , redefineAll = require('./_redefine-all')
+  , ctx         = require('./_ctx')
+  , anInstance  = require('./_an-instance')
+  , defined     = require('./_defined')
+  , forOf       = require('./_for-of')
+  , $iterDefine = require('./_iter-define')
+  , step        = require('./_iter-step')
+  , setSpecies  = require('./_set-species')
+  , DESCRIPTORS = require('./_descriptors')
+  , fastKey     = require('./_meta').fastKey
+  , SIZE        = DESCRIPTORS ? '_s' : 'size';
+
+var getEntry = function(that, key){
+  // fast case
+  var index = fastKey(key), entry;
+  if(index !== 'F')return that._i[index];
+  // frozen object case
+  for(entry = that._f; entry; entry = entry.n){
+    if(entry.k == key)return entry;
+  }
+};
+
+module.exports = {
+  getConstructor: function(wrapper, NAME, IS_MAP, ADDER){
+    var C = wrapper(function(that, iterable){
+      anInstance(that, C, NAME, '_i');
+      that._i = create(null); // index
+      that._f = undefined;    // first entry
+      that._l = undefined;    // last entry
+      that[SIZE] = 0;         // size
+      if(iterable != undefined)forOf(iterable, IS_MAP, that[ADDER], that);
+    });
+    redefineAll(C.prototype, {
+      // 23.1.3.1 Map.prototype.clear()
+      // 23.2.3.2 Set.prototype.clear()
+      clear: function clear(){
+        for(var that = this, data = that._i, entry = that._f; entry; entry = entry.n){
+          entry.r = true;
+          if(entry.p)entry.p = entry.p.n = undefined;
+          delete data[entry.i];
+        }
+        that._f = that._l = undefined;
+        that[SIZE] = 0;
+      },
+      // 23.1.3.3 Map.prototype.delete(key)
+      // 23.2.3.4 Set.prototype.delete(value)
+      'delete': function(key){
+        var that  = this
+          , entry = getEntry(that, key);
+        if(entry){
+          var next = entry.n
+            , prev = entry.p;
+          delete that._i[entry.i];
+          entry.r = true;
+          if(prev)prev.n = next;
+          if(next)next.p = prev;
+          if(that._f == entry)that._f = next;
+          if(that._l == entry)that._l = prev;
+          that[SIZE]--;
+        } return !!entry;
+      },
+      // 23.2.3.6 Set.prototype.forEach(callbackfn, thisArg = undefined)
+      // 23.1.3.5 Map.prototype.forEach(callbackfn, thisArg = undefined)
+      forEach: function forEach(callbackfn /*, that = undefined */){
+        anInstance(this, C, 'forEach');
+        var f = ctx(callbackfn, arguments.length > 1 ? arguments[1] : undefined, 3)
+          , entry;
+        while(entry = entry ? entry.n : this._f){
+          f(entry.v, entry.k, this);
+          // revert to the last existing entry
+          while(entry && entry.r)entry = entry.p;
+        }
+      },
+      // 23.1.3.7 Map.prototype.has(key)
+      // 23.2.3.7 Set.prototype.has(value)
+      has: function has(key){
+        return !!getEntry(this, key);
+      }
+    });
+    if(DESCRIPTORS)dP(C.prototype, 'size', {
+      get: function(){
+        return defined(this[SIZE]);
+      }
+    });
+    return C;
+  },
+  def: function(that, key, value){
+    var entry = getEntry(that, key)
+      , prev, index;
+    // change existing entry
+    if(entry){
+      entry.v = value;
+    // create new entry
+    } else {
+      that._l = entry = {
+        i: index = fastKey(key, true), // <- index
+        k: key,                        // <- key
+        v: value,                      // <- value
+        p: prev = that._l,             // <- previous entry
+        n: undefined,                  // <- next entry
+        r: false                       // <- removed
+      };
+      if(!that._f)that._f = entry;
+      if(prev)prev.n = entry;
+      that[SIZE]++;
+      // add to index
+      if(index !== 'F')that._i[index] = entry;
+    } return that;
+  },
+  getEntry: getEntry,
+  setStrong: function(C, NAME, IS_MAP){
+    // add .keys, .values, .entries, [@@iterator]
+    // 23.1.3.4, 23.1.3.8, 23.1.3.11, 23.1.3.12, 23.2.3.5, 23.2.3.8, 23.2.3.10, 23.2.3.11
+    $iterDefine(C, NAME, function(iterated, kind){
+      this._t = iterated;  // target
+      this._k = kind;      // kind
+      this._l = undefined; // previous
+    }, function(){
+      var that  = this
+        , kind  = that._k
+        , entry = that._l;
+      // revert to the last existing entry
+      while(entry && entry.r)entry = entry.p;
+      // get next entry
+      if(!that._t || !(that._l = entry = entry ? entry.n : that._t._f)){
+        // or finish the iteration
+        that._t = undefined;
+        return step(1);
+      }
+      // return step by kind
+      if(kind == 'keys'  )return step(0, entry.k);
+      if(kind == 'values')return step(0, entry.v);
+      return step(0, [entry.k, entry.v]);
+    }, IS_MAP ? 'entries' : 'values' , !IS_MAP, true);
+
+    // add [@@species], 23.1.2.2, 23.2.2.2
+    setSpecies(NAME);
+  }
+};
+},{"./_an-instance":7,"./_ctx":26,"./_defined":28,"./_descriptors":29,"./_for-of":38,"./_hide":41,"./_iter-define":54,"./_iter-step":56,"./_meta":63,"./_object-create":67,"./_object-dp":68,"./_redefine-all":87,"./_set-species":92}],21:[function(require,module,exports){
+// https://github.com/DavidBruant/Map-Set.prototype.toJSON
+var classof = require('./_classof')
+  , from    = require('./_array-from-iterable');
+module.exports = function(NAME){
+  return function toJSON(){
+    if(classof(this) != NAME)throw TypeError(NAME + "#toJSON isn't generic");
+    return from(this);
+  };
+};
+},{"./_array-from-iterable":11,"./_classof":18}],22:[function(require,module,exports){
+'use strict';
+var redefineAll       = require('./_redefine-all')
+  , getWeak           = require('./_meta').getWeak
+  , anObject          = require('./_an-object')
+  , isObject          = require('./_is-object')
+  , anInstance        = require('./_an-instance')
+  , forOf             = require('./_for-of')
+  , createArrayMethod = require('./_array-methods')
+  , $has              = require('./_has')
+  , arrayFind         = createArrayMethod(5)
+  , arrayFindIndex    = createArrayMethod(6)
+  , id                = 0;
+
+// fallback for uncaught frozen keys
+var uncaughtFrozenStore = function(that){
+  return that._l || (that._l = new UncaughtFrozenStore);
+};
+var UncaughtFrozenStore = function(){
+  this.a = [];
+};
+var findUncaughtFrozen = function(store, key){
+  return arrayFind(store.a, function(it){
+    return it[0] === key;
+  });
+};
+UncaughtFrozenStore.prototype = {
+  get: function(key){
+    var entry = findUncaughtFrozen(this, key);
+    if(entry)return entry[1];
+  },
+  has: function(key){
+    return !!findUncaughtFrozen(this, key);
+  },
+  set: function(key, value){
+    var entry = findUncaughtFrozen(this, key);
+    if(entry)entry[1] = value;
+    else this.a.push([key, value]);
+  },
+  'delete': function(key){
+    var index = arrayFindIndex(this.a, function(it){
+      return it[0] === key;
+    });
+    if(~index)this.a.splice(index, 1);
+    return !!~index;
+  }
+};
+
+module.exports = {
+  getConstructor: function(wrapper, NAME, IS_MAP, ADDER){
+    var C = wrapper(function(that, iterable){
+      anInstance(that, C, NAME, '_i');
+      that._i = id++;      // collection id
+      that._l = undefined; // leak store for uncaught frozen objects
+      if(iterable != undefined)forOf(iterable, IS_MAP, that[ADDER], that);
+    });
+    redefineAll(C.prototype, {
+      // 23.3.3.2 WeakMap.prototype.delete(key)
+      // 23.4.3.3 WeakSet.prototype.delete(value)
+      'delete': function(key){
+        if(!isObject(key))return false;
+        var data = getWeak(key);
+        if(data === true)return uncaughtFrozenStore(this)['delete'](key);
+        return data && $has(data, this._i) && delete data[this._i];
+      },
+      // 23.3.3.4 WeakMap.prototype.has(key)
+      // 23.4.3.4 WeakSet.prototype.has(value)
+      has: function has(key){
+        if(!isObject(key))return false;
+        var data = getWeak(key);
+        if(data === true)return uncaughtFrozenStore(this).has(key);
+        return data && $has(data, this._i);
+      }
+    });
+    return C;
+  },
+  def: function(that, key, value){
+    var data = getWeak(anObject(key), true);
+    if(data === true)uncaughtFrozenStore(that).set(key, value);
+    else data[that._i] = value;
+    return that;
+  },
+  ufstore: uncaughtFrozenStore
+};
+},{"./_an-instance":7,"./_an-object":8,"./_array-methods":13,"./_for-of":38,"./_has":40,"./_is-object":50,"./_meta":63,"./_redefine-all":87}],23:[function(require,module,exports){
+'use strict';
+var global            = require('./_global')
+  , $export           = require('./_export')
+  , redefine          = require('./_redefine')
+  , redefineAll       = require('./_redefine-all')
+  , meta              = require('./_meta')
+  , forOf             = require('./_for-of')
+  , anInstance        = require('./_an-instance')
+  , isObject          = require('./_is-object')
+  , fails             = require('./_fails')
+  , $iterDetect       = require('./_iter-detect')
+  , setToStringTag    = require('./_set-to-string-tag')
+  , inheritIfRequired = require('./_inherit-if-required');
+
+module.exports = function(NAME, wrapper, methods, common, IS_MAP, IS_WEAK){
+  var Base  = global[NAME]
+    , C     = Base
+    , ADDER = IS_MAP ? 'set' : 'add'
+    , proto = C && C.prototype
+    , O     = {};
+  var fixMethod = function(KEY){
+    var fn = proto[KEY];
+    redefine(proto, KEY,
+      KEY == 'delete' ? function(a){
+        return IS_WEAK && !isObject(a) ? false : fn.call(this, a === 0 ? 0 : a);
+      } : KEY == 'has' ? function has(a){
+        return IS_WEAK && !isObject(a) ? false : fn.call(this, a === 0 ? 0 : a);
+      } : KEY == 'get' ? function get(a){
+        return IS_WEAK && !isObject(a) ? undefined : fn.call(this, a === 0 ? 0 : a);
+      } : KEY == 'add' ? function add(a){ fn.call(this, a === 0 ? 0 : a); return this; }
+        : function set(a, b){ fn.call(this, a === 0 ? 0 : a, b); return this; }
+    );
+  };
+  if(typeof C != 'function' || !(IS_WEAK || proto.forEach && !fails(function(){
+    new C().entries().next();
+  }))){
+    // create collection constructor
+    C = common.getConstructor(wrapper, NAME, IS_MAP, ADDER);
+    redefineAll(C.prototype, methods);
+    meta.NEED = true;
+  } else {
+    var instance             = new C
+      // early implementations not supports chaining
+      , HASNT_CHAINING       = instance[ADDER](IS_WEAK ? {} : -0, 1) != instance
+      // V8 ~  Chromium 40- weak-collections throws on primitives, but should return false
+      , THROWS_ON_PRIMITIVES = fails(function(){ instance.has(1); })
+      // most early implementations doesn't supports iterables, most modern - not close it correctly
+      , ACCEPT_ITERABLES     = $iterDetect(function(iter){ new C(iter); }) // eslint-disable-line no-new
+      // for early implementations -0 and +0 not the same
+      , BUGGY_ZERO = !IS_WEAK && fails(function(){
+        // V8 ~ Chromium 42- fails only with 5+ elements
+        var $instance = new C()
+          , index     = 5;
+        while(index--)$instance[ADDER](index, index);
+        return !$instance.has(-0);
+      });
+    if(!ACCEPT_ITERABLES){ 
+      C = wrapper(function(target, iterable){
+        anInstance(target, C, NAME);
+        var that = inheritIfRequired(new Base, target, C);
+        if(iterable != undefined)forOf(iterable, IS_MAP, that[ADDER], that);
+        return that;
+      });
+      C.prototype = proto;
+      proto.constructor = C;
+    }
+    if(THROWS_ON_PRIMITIVES || BUGGY_ZERO){
+      fixMethod('delete');
+      fixMethod('has');
+      IS_MAP && fixMethod('get');
+    }
+    if(BUGGY_ZERO || HASNT_CHAINING)fixMethod(ADDER);
+    // weak collections should not contains .clear method
+    if(IS_WEAK && proto.clear)delete proto.clear;
+  }
+
+  setToStringTag(C, NAME);
+
+  O[NAME] = C;
+  $export($export.G + $export.W + $export.F * (C != Base), O);
+
+  if(!IS_WEAK)common.setStrong(C, NAME, IS_MAP);
+
+  return C;
+};
+},{"./_an-instance":7,"./_export":33,"./_fails":35,"./_for-of":38,"./_global":39,"./_inherit-if-required":44,"./_is-object":50,"./_iter-detect":55,"./_meta":63,"./_redefine":88,"./_redefine-all":87,"./_set-to-string-tag":93}],24:[function(require,module,exports){
+var core = module.exports = {version: '2.4.0'};
+if(typeof __e == 'number')__e = core; // eslint-disable-line no-undef
+},{}],25:[function(require,module,exports){
+'use strict';
+var $defineProperty = require('./_object-dp')
+  , createDesc      = require('./_property-desc');
+
+module.exports = function(object, index, value){
+  if(index in object)$defineProperty.f(object, index, createDesc(0, value));
+  else object[index] = value;
+};
+},{"./_object-dp":68,"./_property-desc":86}],26:[function(require,module,exports){
+// optional / simple context binding
+var aFunction = require('./_a-function');
+module.exports = function(fn, that, length){
+  aFunction(fn);
+  if(that === undefined)return fn;
+  switch(length){
+    case 1: return function(a){
+      return fn.call(that, a);
+    };
+    case 2: return function(a, b){
+      return fn.call(that, a, b);
+    };
+    case 3: return function(a, b, c){
+      return fn.call(that, a, b, c);
+    };
+  }
+  return function(/* ...args */){
+    return fn.apply(that, arguments);
+  };
+};
+},{"./_a-function":4}],27:[function(require,module,exports){
+'use strict';
+var anObject    = require('./_an-object')
+  , toPrimitive = require('./_to-primitive')
+  , NUMBER      = 'number';
+
+module.exports = function(hint){
+  if(hint !== 'string' && hint !== NUMBER && hint !== 'default')throw TypeError('Incorrect hint');
+  return toPrimitive(anObject(this), hint != NUMBER);
+};
+},{"./_an-object":8,"./_to-primitive":111}],28:[function(require,module,exports){
+// 7.2.1 RequireObjectCoercible(argument)
+module.exports = function(it){
+  if(it == undefined)throw TypeError("Can't call method on  " + it);
+  return it;
+};
+},{}],29:[function(require,module,exports){
+// Thank's IE8 for his funny defineProperty
+module.exports = !require('./_fails')(function(){
+  return Object.defineProperty({}, 'a', {get: function(){ return 7; }}).a != 7;
+});
+},{"./_fails":35}],30:[function(require,module,exports){
+var isObject = require('./_is-object')
+  , document = require('./_global').document
+  // in old IE typeof document.createElement is 'object'
+  , is = isObject(document) && isObject(document.createElement);
+module.exports = function(it){
+  return is ? document.createElement(it) : {};
+};
+},{"./_global":39,"./_is-object":50}],31:[function(require,module,exports){
+// IE 8- don't enum bug keys
+module.exports = (
+  'constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf'
+).split(',');
+},{}],32:[function(require,module,exports){
+// all enumerable object keys, includes symbols
+var getKeys = require('./_object-keys')
+  , gOPS    = require('./_object-gops')
+  , pIE     = require('./_object-pie');
+module.exports = function(it){
+  var result     = getKeys(it)
+    , getSymbols = gOPS.f;
+  if(getSymbols){
+    var symbols = getSymbols(it)
+      , isEnum  = pIE.f
+      , i       = 0
+      , key;
+    while(symbols.length > i)if(isEnum.call(it, key = symbols[i++]))result.push(key);
+  } return result;
+};
+},{"./_object-gops":74,"./_object-keys":77,"./_object-pie":78}],33:[function(require,module,exports){
+var global    = require('./_global')
+  , core      = require('./_core')
+  , hide      = require('./_hide')
+  , redefine  = require('./_redefine')
+  , ctx       = require('./_ctx')
+  , PROTOTYPE = 'prototype';
+
+var $export = function(type, name, source){
+  var IS_FORCED = type & $export.F
+    , IS_GLOBAL = type & $export.G
+    , IS_STATIC = type & $export.S
+    , IS_PROTO  = type & $export.P
+    , IS_BIND   = type & $export.B
+    , target    = IS_GLOBAL ? global : IS_STATIC ? global[name] || (global[name] = {}) : (global[name] || {})[PROTOTYPE]
+    , exports   = IS_GLOBAL ? core : core[name] || (core[name] = {})
+    , expProto  = exports[PROTOTYPE] || (exports[PROTOTYPE] = {})
+    , key, own, out, exp;
+  if(IS_GLOBAL)source = name;
+  for(key in source){
+    // contains in native
+    own = !IS_FORCED && target && target[key] !== undefined;
+    // export native or passed
+    out = (own ? target : source)[key];
+    // bind timers to global for call from export context
+    exp = IS_BIND && own ? ctx(out, global) : IS_PROTO && typeof out == 'function' ? ctx(Function.call, out) : out;
+    // extend global
+    if(target)redefine(target, key, out, type & $export.U);
+    // export
+    if(exports[key] != out)hide(exports, key, exp);
+    if(IS_PROTO && expProto[key] != out)expProto[key] = out;
+  }
+};
+global.core = core;
+// type bitmap
+$export.F = 1;   // forced
+$export.G = 2;   // global
+$export.S = 4;   // static
+$export.P = 8;   // proto
+$export.B = 16;  // bind
+$export.W = 32;  // wrap
+$export.U = 64;  // safe
+$export.R = 128; // real proto method for `library` 
+module.exports = $export;
+},{"./_core":24,"./_ctx":26,"./_global":39,"./_hide":41,"./_redefine":88}],34:[function(require,module,exports){
+var MATCH = require('./_wks')('match');
+module.exports = function(KEY){
+  var re = /./;
+  try {
+    '/./'[KEY](re);
+  } catch(e){
+    try {
+      re[MATCH] = false;
+      return !'/./'[KEY](re);
+    } catch(f){ /* empty */ }
+  } return true;
+};
+},{"./_wks":118}],35:[function(require,module,exports){
+module.exports = function(exec){
+  try {
+    return !!exec();
+  } catch(e){
+    return true;
+  }
+};
+},{}],36:[function(require,module,exports){
+'use strict';
+var hide     = require('./_hide')
+  , redefine = require('./_redefine')
+  , fails    = require('./_fails')
+  , defined  = require('./_defined')
+  , wks      = require('./_wks');
+
+module.exports = function(KEY, length, exec){
+  var SYMBOL   = wks(KEY)
+    , fns      = exec(defined, SYMBOL, ''[KEY])
+    , strfn    = fns[0]
+    , rxfn     = fns[1];
+  if(fails(function(){
+    var O = {};
+    O[SYMBOL] = function(){ return 7; };
+    return ''[KEY](O) != 7;
+  })){
+    redefine(String.prototype, KEY, strfn);
+    hide(RegExp.prototype, SYMBOL, length == 2
+      // 21.2.5.8 RegExp.prototype[@@replace](string, replaceValue)
+      // 21.2.5.11 RegExp.prototype[@@split](string, limit)
+      ? function(string, arg){ return rxfn.call(string, this, arg); }
+      // 21.2.5.6 RegExp.prototype[@@match](string)
+      // 21.2.5.9 RegExp.prototype[@@search](string)
+      : function(string){ return rxfn.call(string, this); }
+    );
+  }
+};
+},{"./_defined":28,"./_fails":35,"./_hide":41,"./_redefine":88,"./_wks":118}],37:[function(require,module,exports){
+'use strict';
+// 21.2.5.3 get RegExp.prototype.flags
+var anObject = require('./_an-object');
+module.exports = function(){
+  var that   = anObject(this)
+    , result = '';
+  if(that.global)     result += 'g';
+  if(that.ignoreCase) result += 'i';
+  if(that.multiline)  result += 'm';
+  if(that.unicode)    result += 'u';
+  if(that.sticky)     result += 'y';
+  return result;
+};
+},{"./_an-object":8}],38:[function(require,module,exports){
+var ctx         = require('./_ctx')
+  , call        = require('./_iter-call')
+  , isArrayIter = require('./_is-array-iter')
+  , anObject    = require('./_an-object')
+  , toLength    = require('./_to-length')
+  , getIterFn   = require('./core.get-iterator-method')
+  , BREAK       = {}
+  , RETURN      = {};
+var exports = module.exports = function(iterable, entries, fn, that, ITERATOR){
+  var iterFn = ITERATOR ? function(){ return iterable; } : getIterFn(iterable)
+    , f      = ctx(fn, that, entries ? 2 : 1)
+    , index  = 0
+    , length, step, iterator, result;
+  if(typeof iterFn != 'function')throw TypeError(iterable + ' is not iterable!');
+  // fast case for arrays with default iterator
+  if(isArrayIter(iterFn))for(length = toLength(iterable.length); length > index; index++){
+    result = entries ? f(anObject(step = iterable[index])[0], step[1]) : f(iterable[index]);
+    if(result === BREAK || result === RETURN)return result;
+  } else for(iterator = iterFn.call(iterable); !(step = iterator.next()).done; ){
+    result = call(iterator, f, step.value, entries);
+    if(result === BREAK || result === RETURN)return result;
+  }
+};
+exports.BREAK  = BREAK;
+exports.RETURN = RETURN;
+},{"./_an-object":8,"./_ctx":26,"./_is-array-iter":47,"./_iter-call":52,"./_to-length":109,"./core.get-iterator-method":119}],39:[function(require,module,exports){
+// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028
+var global = module.exports = typeof window != 'undefined' && window.Math == Math
+  ? window : typeof self != 'undefined' && self.Math == Math ? self : Function('return this')();
+if(typeof __g == 'number')__g = global; // eslint-disable-line no-undef
+},{}],40:[function(require,module,exports){
+var hasOwnProperty = {}.hasOwnProperty;
+module.exports = function(it, key){
+  return hasOwnProperty.call(it, key);
+};
+},{}],41:[function(require,module,exports){
+var dP         = require('./_object-dp')
+  , createDesc = require('./_property-desc');
+module.exports = require('./_descriptors') ? function(object, key, value){
+  return dP.f(object, key, createDesc(1, value));
+} : function(object, key, value){
+  object[key] = value;
+  return object;
+};
+},{"./_descriptors":29,"./_object-dp":68,"./_property-desc":86}],42:[function(require,module,exports){
+module.exports = require('./_global').document && document.documentElement;
+},{"./_global":39}],43:[function(require,module,exports){
+module.exports = !require('./_descriptors') && !require('./_fails')(function(){
+  return Object.defineProperty(require('./_dom-create')('div'), 'a', {get: function(){ return 7; }}).a != 7;
+});
+},{"./_descriptors":29,"./_dom-create":30,"./_fails":35}],44:[function(require,module,exports){
+var isObject       = require('./_is-object')
+  , setPrototypeOf = require('./_set-proto').set;
+module.exports = function(that, target, C){
+  var P, S = target.constructor;
+  if(S !== C && typeof S == 'function' && (P = S.prototype) !== C.prototype && isObject(P) && setPrototypeOf){
+    setPrototypeOf(that, P);
+  } return that;
+};
+},{"./_is-object":50,"./_set-proto":91}],45:[function(require,module,exports){
+// fast apply, http://jsperf.lnkit.com/fast-apply/5
+module.exports = function(fn, args, that){
+  var un = that === undefined;
+  switch(args.length){
+    case 0: return un ? fn()
+                      : fn.call(that);
+    case 1: return un ? fn(args[0])
+                      : fn.call(that, args[0]);
+    case 2: return un ? fn(args[0], args[1])
+                      : fn.call(that, args[0], args[1]);
+    case 3: return un ? fn(args[0], args[1], args[2])
+                      : fn.call(that, args[0], args[1], args[2]);
+    case 4: return un ? fn(args[0], args[1], args[2], args[3])
+                      : fn.call(that, args[0], args[1], args[2], args[3]);
+  } return              fn.apply(that, args);
+};
+},{}],46:[function(require,module,exports){
+// fallback for non-array-like ES3 and non-enumerable old V8 strings
+var cof = require('./_cof');
+module.exports = Object('z').propertyIsEnumerable(0) ? Object : function(it){
+  return cof(it) == 'String' ? it.split('') : Object(it);
+};
+},{"./_cof":19}],47:[function(require,module,exports){
+// check on default Array iterator
+var Iterators  = require('./_iterators')
+  , ITERATOR   = require('./_wks')('iterator')
+  , ArrayProto = Array.prototype;
+
+module.exports = function(it){
+  return it !== undefined && (Iterators.Array === it || ArrayProto[ITERATOR] === it);
+};
+},{"./_iterators":57,"./_wks":118}],48:[function(require,module,exports){
+// 7.2.2 IsArray(argument)
+var cof = require('./_cof');
+module.exports = Array.isArray || function isArray(arg){
+  return cof(arg) == 'Array';
+};
+},{"./_cof":19}],49:[function(require,module,exports){
+// 20.1.2.3 Number.isInteger(number)
+var isObject = require('./_is-object')
+  , floor    = Math.floor;
+module.exports = function isInteger(it){
+  return !isObject(it) && isFinite(it) && floor(it) === it;
+};
+},{"./_is-object":50}],50:[function(require,module,exports){
+module.exports = function(it){
+  return typeof it === 'object' ? it !== null : typeof it === 'function';
+};
+},{}],51:[function(require,module,exports){
+// 7.2.8 IsRegExp(argument)
+var isObject = require('./_is-object')
+  , cof      = require('./_cof')
+  , MATCH    = require('./_wks')('match');
+module.exports = function(it){
+  var isRegExp;
+  return isObject(it) && ((isRegExp = it[MATCH]) !== undefined ? !!isRegExp : cof(it) == 'RegExp');
+};
+},{"./_cof":19,"./_is-object":50,"./_wks":118}],52:[function(require,module,exports){
+// call something on iterator step with safe closing on error
+var anObject = require('./_an-object');
+module.exports = function(iterator, fn, value, entries){
+  try {
+    return entries ? fn(anObject(value)[0], value[1]) : fn(value);
+  // 7.4.6 IteratorClose(iterator, completion)
+  } catch(e){
+    var ret = iterator['return'];
+    if(ret !== undefined)anObject(ret.call(iterator));
+    throw e;
+  }
+};
+},{"./_an-object":8}],53:[function(require,module,exports){
+'use strict';
+var create         = require('./_object-create')
+  , descriptor     = require('./_property-desc')
+  , setToStringTag = require('./_set-to-string-tag')
+  , IteratorPrototype = {};
+
+// 25.1.2.1.1 %IteratorPrototype%[@@iterator]()
+require('./_hide')(IteratorPrototype, require('./_wks')('iterator'), function(){ return this; });
+
+module.exports = function(Constructor, NAME, next){
+  Constructor.prototype = create(IteratorPrototype, {next: descriptor(1, next)});
+  setToStringTag(Constructor, NAME + ' Iterator');
+};
+},{"./_hide":41,"./_object-create":67,"./_property-desc":86,"./_set-to-string-tag":93,"./_wks":118}],54:[function(require,module,exports){
+'use strict';
+var LIBRARY        = require('./_library')
+  , $export        = require('./_export')
+  , redefine       = require('./_redefine')
+  , hide           = require('./_hide')
+  , has            = require('./_has')
+  , Iterators      = require('./_iterators')
+  , $iterCreate    = require('./_iter-create')
+  , setToStringTag = require('./_set-to-string-tag')
+  , getPrototypeOf = require('./_object-gpo')
+  , ITERATOR       = require('./_wks')('iterator')
+  , BUGGY          = !([].keys && 'next' in [].keys()) // Safari has buggy iterators w/o `next`
+  , FF_ITERATOR    = '@@iterator'
+  , KEYS           = 'keys'
+  , VALUES         = 'values';
+
+var returnThis = function(){ return this; };
+
+module.exports = function(Base, NAME, Constructor, next, DEFAULT, IS_SET, FORCED){
+  $iterCreate(Constructor, NAME, next);
+  var getMethod = function(kind){
+    if(!BUGGY && kind in proto)return proto[kind];
+    switch(kind){
+      case KEYS: return function keys(){ return new Constructor(this, kind); };
+      case VALUES: return function values(){ return new Constructor(this, kind); };
+    } return function entries(){ return new Constructor(this, kind); };
+  };
+  var TAG        = NAME + ' Iterator'
+    , DEF_VALUES = DEFAULT == VALUES
+    , VALUES_BUG = false
+    , proto      = Base.prototype
+    , $native    = proto[ITERATOR] || proto[FF_ITERATOR] || DEFAULT && proto[DEFAULT]
+    , $default   = $native || getMethod(DEFAULT)
+    , $entries   = DEFAULT ? !DEF_VALUES ? $default : getMethod('entries') : undefined
+    , $anyNative = NAME == 'Array' ? proto.entries || $native : $native
+    , methods, key, IteratorPrototype;
+  // Fix native
+  if($anyNative){
+    IteratorPrototype = getPrototypeOf($anyNative.call(new Base));
+    if(IteratorPrototype !== Object.prototype){
+      // Set @@toStringTag to native iterators
+      setToStringTag(IteratorPrototype, TAG, true);
+      // fix for some old engines
+      if(!LIBRARY && !has(IteratorPrototype, ITERATOR))hide(IteratorPrototype, ITERATOR, returnThis);
+    }
+  }
+  // fix Array#{values, @@iterator}.name in V8 / FF
+  if(DEF_VALUES && $native && $native.name !== VALUES){
+    VALUES_BUG = true;
+    $default = function values(){ return $native.call(this); };
+  }
+  // Define iterator
+  if((!LIBRARY || FORCED) && (BUGGY || VALUES_BUG || !proto[ITERATOR])){
+    hide(proto, ITERATOR, $default);
+  }
+  // Plug for library
+  Iterators[NAME] = $default;
+  Iterators[TAG]  = returnThis;
+  if(DEFAULT){
+    methods = {
+      values:  DEF_VALUES ? $default : getMethod(VALUES),
+      keys:    IS_SET     ? $default : getMethod(KEYS),
+      entries: $entries
+    };
+    if(FORCED)for(key in methods){
+      if(!(key in proto))redefine(proto, key, methods[key]);
+    } else $export($export.P + $export.F * (BUGGY || VALUES_BUG), NAME, methods);
+  }
+  return methods;
+};
+},{"./_export":33,"./_has":40,"./_hide":41,"./_iter-create":53,"./_iterators":57,"./_library":59,"./_object-gpo":75,"./_redefine":88,"./_set-to-string-tag":93,"./_wks":118}],55:[function(require,module,exports){
+var ITERATOR     = require('./_wks')('iterator')
+  , SAFE_CLOSING = false;
+
+try {
+  var riter = [7][ITERATOR]();
+  riter['return'] = function(){ SAFE_CLOSING = true; };
+  Array.from(riter, function(){ throw 2; });
+} catch(e){ /* empty */ }
+
+module.exports = function(exec, skipClosing){
+  if(!skipClosing && !SAFE_CLOSING)return false;
+  var safe = false;
+  try {
+    var arr  = [7]
+      , iter = arr[ITERATOR]();
+    iter.next = function(){ return {done: safe = true}; };
+    arr[ITERATOR] = function(){ return iter; };
+    exec(arr);
+  } catch(e){ /* empty */ }
+  return safe;
+};
+},{"./_wks":118}],56:[function(require,module,exports){
+module.exports = function(done, value){
+  return {value: value, done: !!done};
+};
+},{}],57:[function(require,module,exports){
+module.exports = {};
+},{}],58:[function(require,module,exports){
+var getKeys   = require('./_object-keys')
+  , toIObject = require('./_to-iobject');
+module.exports = function(object, el){
+  var O      = toIObject(object)
+    , keys   = getKeys(O)
+    , length = keys.length
+    , index  = 0
+    , key;
+  while(length > index)if(O[key = keys[index++]] === el)return key;
+};
+},{"./_object-keys":77,"./_to-iobject":108}],59:[function(require,module,exports){
+module.exports = false;
+},{}],60:[function(require,module,exports){
+// 20.2.2.14 Math.expm1(x)
+var $expm1 = Math.expm1;
+module.exports = (!$expm1
+  // Old FF bug
+  || $expm1(10) > 22025.465794806719 || $expm1(10) < 22025.4657948067165168
+  // Tor Browser bug
+  || $expm1(-2e-17) != -2e-17
+) ? function expm1(x){
+  return (x = +x) == 0 ? x : x > -1e-6 && x < 1e-6 ? x + x * x / 2 : Math.exp(x) - 1;
+} : $expm1;
+},{}],61:[function(require,module,exports){
+// 20.2.2.20 Math.log1p(x)
+module.exports = Math.log1p || function log1p(x){
+  return (x = +x) > -1e-8 && x < 1e-8 ? x - x * x / 2 : Math.log(1 + x);
+};
+},{}],62:[function(require,module,exports){
+// 20.2.2.28 Math.sign(x)
+module.exports = Math.sign || function sign(x){
+  return (x = +x) == 0 || x != x ? x : x < 0 ? -1 : 1;
+};
+},{}],63:[function(require,module,exports){
+var META     = require('./_uid')('meta')
+  , isObject = require('./_is-object')
+  , has      = require('./_has')
+  , setDesc  = require('./_object-dp').f
+  , id       = 0;
+var isExtensible = Object.isExtensible || function(){
+  return true;
+};
+var FREEZE = !require('./_fails')(function(){
+  return isExtensible(Object.preventExtensions({}));
+});
+var setMeta = function(it){
+  setDesc(it, META, {value: {
+    i: 'O' + ++id, // object ID
+    w: {}          // weak collections IDs
+  }});
+};
+var fastKey = function(it, create){
+  // return primitive with prefix
+  if(!isObject(it))return typeof it == 'symbol' ? it : (typeof it == 'string' ? 'S' : 'P') + it;
+  if(!has(it, META)){
+    // can't set metadata to uncaught frozen object
+    if(!isExtensible(it))return 'F';
+    // not necessary to add metadata
+    if(!create)return 'E';
+    // add missing metadata
+    setMeta(it);
+  // return object ID
+  } return it[META].i;
+};
+var getWeak = function(it, create){
+  if(!has(it, META)){
+    // can't set metadata to uncaught frozen object
+    if(!isExtensible(it))return true;
+    // not necessary to add metadata
+    if(!create)return false;
+    // add missing metadata
+    setMeta(it);
+  // return hash weak collections IDs
+  } return it[META].w;
+};
+// add metadata on freeze-family methods calling
+var onFreeze = function(it){
+  if(FREEZE && meta.NEED && isExtensible(it) && !has(it, META))setMeta(it);
+  return it;
+};
+var meta = module.exports = {
+  KEY:      META,
+  NEED:     false,
+  fastKey:  fastKey,
+  getWeak:  getWeak,
+  onFreeze: onFreeze
+};
+},{"./_fails":35,"./_has":40,"./_is-object":50,"./_object-dp":68,"./_uid":115}],64:[function(require,module,exports){
+var Map     = require('./es6.map')
+  , $export = require('./_export')
+  , shared  = require('./_shared')('metadata')
+  , store   = shared.store || (shared.store = new (require('./es6.weak-map')));
+
+var getOrCreateMetadataMap = function(target, targetKey, create){
+  var targetMetadata = store.get(target);
+  if(!targetMetadata){
+    if(!create)return undefined;
+    store.set(target, targetMetadata = new Map);
+  }
+  var keyMetadata = targetMetadata.get(targetKey);
+  if(!keyMetadata){
+    if(!create)return undefined;
+    targetMetadata.set(targetKey, keyMetadata = new Map);
+  } return keyMetadata;
+};
+var ordinaryHasOwnMetadata = function(MetadataKey, O, P){
+  var metadataMap = getOrCreateMetadataMap(O, P, false);
+  return metadataMap === undefined ? false : metadataMap.has(MetadataKey);
+};
+var ordinaryGetOwnMetadata = function(MetadataKey, O, P){
+  var metadataMap = getOrCreateMetadataMap(O, P, false);
+  return metadataMap === undefined ? undefined : metadataMap.get(MetadataKey);
+};
+var ordinaryDefineOwnMetadata = function(MetadataKey, MetadataValue, O, P){
+  getOrCreateMetadataMap(O, P, true).set(MetadataKey, MetadataValue);
+};
+var ordinaryOwnMetadataKeys = function(target, targetKey){
+  var metadataMap = getOrCreateMetadataMap(target, targetKey, false)
+    , keys        = [];
+  if(metadataMap)metadataMap.forEach(function(_, key){ keys.push(key); });
+  return keys;
+};
+var toMetaKey = function(it){
+  return it === undefined || typeof it == 'symbol' ? it : String(it);
+};
+var exp = function(O){
+  $export($export.S, 'Reflect', O);
+};
+
+module.exports = {
+  store: store,
+  map: getOrCreateMetadataMap,
+  has: ordinaryHasOwnMetadata,
+  get: ordinaryGetOwnMetadata,
+  set: ordinaryDefineOwnMetadata,
+  keys: ordinaryOwnMetadataKeys,
+  key: toMetaKey,
+  exp: exp
+};
+},{"./_export":33,"./_shared":95,"./es6.map":151,"./es6.weak-map":257}],65:[function(require,module,exports){
+var global    = require('./_global')
+  , macrotask = require('./_task').set
+  , Observer  = global.MutationObserver || global.WebKitMutationObserver
+  , process   = global.process
+  , Promise   = global.Promise
+  , isNode    = require('./_cof')(process) == 'process';
+
+module.exports = function(){
+  var head, last, notify;
+
+  var flush = function(){
+    var parent, fn;
+    if(isNode && (parent = process.domain))parent.exit();
+    while(head){
+      fn   = head.fn;
+      head = head.next;
+      try {
+        fn();
+      } catch(e){
+        if(head)notify();
+        else last = undefined;
+        throw e;
+      }
+    } last = undefined;
+    if(parent)parent.enter();
+  };
+
+  // Node.js
+  if(isNode){
+    notify = function(){
+      process.nextTick(flush);
+    };
+  // browsers with MutationObserver
+  } else if(Observer){
+    var toggle = true
+      , node   = document.createTextNode('');
+    new Observer(flush).observe(node, {characterData: true}); // eslint-disable-line no-new
+    notify = function(){
+      node.data = toggle = !toggle;
+    };
+  // environments with maybe non-completely correct, but existent Promise
+  } else if(Promise && Promise.resolve){
+    var promise = Promise.resolve();
+    notify = function(){
+      promise.then(flush);
+    };
+  // for other environments - macrotask based on:
+  // - setImmediate
+  // - MessageChannel
+  // - window.postMessag
+  // - onreadystatechange
+  // - setTimeout
+  } else {
+    notify = function(){
+      // strange IE + webpack dev server bug - use .call(global)
+      macrotask.call(global, flush);
+    };
+  }
+
+  return function(fn){
+    var task = {fn: fn, next: undefined};
+    if(last)last.next = task;
+    if(!head){
+      head = task;
+      notify();
+    } last = task;
+  };
+};
+},{"./_cof":19,"./_global":39,"./_task":105}],66:[function(require,module,exports){
+'use strict';
+// 19.1.2.1 Object.assign(target, source, ...)
+var getKeys  = require('./_object-keys')
+  , gOPS     = require('./_object-gops')
+  , pIE      = require('./_object-pie')
+  , toObject = require('./_to-object')
+  , IObject  = require('./_iobject')
+  , $assign  = Object.assign;
+
+// should work with symbols and should have deterministic property order (V8 bug)
+module.exports = !$assign || require('./_fails')(function(){
+  var A = {}
+    , B = {}
+    , S = Symbol()
+    , K = 'abcdefghijklmnopqrst';
+  A[S] = 7;
+  K.split('').forEach(function(k){ B[k] = k; });
+  return $assign({}, A)[S] != 7 || Object.keys($assign({}, B)).join('') != K;
+}) ? function assign(target, source){ // eslint-disable-line no-unused-vars
+  var T     = toObject(target)
+    , aLen  = arguments.length
+    , index = 1
+    , getSymbols = gOPS.f
+    , isEnum     = pIE.f;
+  while(aLen > index){
+    var S      = IObject(arguments[index++])
+      , keys   = getSymbols ? getKeys(S).concat(getSymbols(S)) : getKeys(S)
+      , length = keys.length
+      , j      = 0
+      , key;
+    while(length > j)if(isEnum.call(S, key = keys[j++]))T[key] = S[key];
+  } return T;
+} : $assign;
+},{"./_fails":35,"./_iobject":46,"./_object-gops":74,"./_object-keys":77,"./_object-pie":78,"./_to-object":110}],67:[function(require,module,exports){
+// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])
+var anObject    = require('./_an-object')
+  , dPs         = require('./_object-dps')
+  , enumBugKeys = require('./_enum-bug-keys')
+  , IE_PROTO    = require('./_shared-key')('IE_PROTO')
+  , Empty       = function(){ /* empty */ }
+  , PROTOTYPE   = 'prototype';
+
+// Create object with fake `null` prototype: use iframe Object with cleared prototype
+var createDict = function(){
+  // Thrash, waste and sodomy: IE GC bug
+  var iframe = require('./_dom-create')('iframe')
+    , i      = enumBugKeys.length
+    , gt     = '>'
+    , iframeDocument;
+  iframe.style.display = 'none';
+  require('./_html').appendChild(iframe);
+  iframe.src = 'javascript:'; // eslint-disable-line no-script-url
+  // createDict = iframe.contentWindow.Object;
+  // html.removeChild(iframe);
+  iframeDocument = iframe.contentWindow.document;
+  iframeDocument.open();
+  iframeDocument.write('<script>document.F=Object</script' + gt);
+  iframeDocument.close();
+  createDict = iframeDocument.F;
+  while(i--)delete createDict[PROTOTYPE][enumBugKeys[i]];
+  return createDict();
+};
+
+module.exports = Object.create || function create(O, Properties){
+  var result;
+  if(O !== null){
+    Empty[PROTOTYPE] = anObject(O);
+    result = new Empty;
+    Empty[PROTOTYPE] = null;
+    // add "__proto__" for Object.getPrototypeOf polyfill
+    result[IE_PROTO] = O;
+  } else result = createDict();
+  return Properties === undefined ? result : dPs(result, Properties);
+};
+},{"./_an-object":8,"./_dom-create":30,"./_enum-bug-keys":31,"./_html":42,"./_object-dps":69,"./_shared-key":94}],68:[function(require,module,exports){
+var anObject       = require('./_an-object')
+  , IE8_DOM_DEFINE = require('./_ie8-dom-define')
+  , toPrimitive    = require('./_to-primitive')
+  , dP             = Object.defineProperty;
+
+exports.f = require('./_descriptors') ? Object.defineProperty : function defineProperty(O, P, Attributes){
+  anObject(O);
+  P = toPrimitive(P, true);
+  anObject(Attributes);
+  if(IE8_DOM_DEFINE)try {
+    return dP(O, P, Attributes);
+  } catch(e){ /* empty */ }
+  if('get' in Attributes || 'set' in Attributes)throw TypeError('Accessors not supported!');
+  if('value' in Attributes)O[P] = Attributes.value;
+  return O;
+};
+},{"./_an-object":8,"./_descriptors":29,"./_ie8-dom-define":43,"./_to-primitive":111}],69:[function(require,module,exports){
+var dP       = require('./_object-dp')
+  , anObject = require('./_an-object')
+  , getKeys  = require('./_object-keys');
+
+module.exports = require('./_descriptors') ? Object.defineProperties : function defineProperties(O, Properties){
+  anObject(O);
+  var keys   = getKeys(Properties)
+    , length = keys.length
+    , i = 0
+    , P;
+  while(length > i)dP.f(O, P = keys[i++], Properties[P]);
+  return O;
+};
+},{"./_an-object":8,"./_descriptors":29,"./_object-dp":68,"./_object-keys":77}],70:[function(require,module,exports){
+// Forced replacement prototype accessors methods
+module.exports = require('./_library')|| !require('./_fails')(function(){
+  var K = Math.random();
+  // In FF throws only define methods
+  __defineSetter__.call(null, K, function(){ /* empty */});
+  delete require('./_global')[K];
+});
+},{"./_fails":35,"./_global":39,"./_library":59}],71:[function(require,module,exports){
+var pIE            = require('./_object-pie')
+  , createDesc     = require('./_property-desc')
+  , toIObject      = require('./_to-iobject')
+  , toPrimitive    = require('./_to-primitive')
+  , has            = require('./_has')
+  , IE8_DOM_DEFINE = require('./_ie8-dom-define')
+  , gOPD           = Object.getOwnPropertyDescriptor;
+
+exports.f = require('./_descriptors') ? gOPD : function getOwnPropertyDescriptor(O, P){
+  O = toIObject(O);
+  P = toPrimitive(P, true);
+  if(IE8_DOM_DEFINE)try {
+    return gOPD(O, P);
+  } catch(e){ /* empty */ }
+  if(has(O, P))return createDesc(!pIE.f.call(O, P), O[P]);
+};
+},{"./_descriptors":29,"./_has":40,"./_ie8-dom-define":43,"./_object-pie":78,"./_property-desc":86,"./_to-iobject":108,"./_to-primitive":111}],72:[function(require,module,exports){
+// fallback for IE11 buggy Object.getOwnPropertyNames with iframe and window
+var toIObject = require('./_to-iobject')
+  , gOPN      = require('./_object-gopn').f
+  , toString  = {}.toString;
+
+var windowNames = typeof window == 'object' && window && Object.getOwnPropertyNames
+  ? Object.getOwnPropertyNames(window) : [];
+
+var getWindowNames = function(it){
+  try {
+    return gOPN(it);
+  } catch(e){
+    return windowNames.slice();
+  }
+};
+
+module.exports.f = function getOwnPropertyNames(it){
+  return windowNames && toString.call(it) == '[object Window]' ? getWindowNames(it) : gOPN(toIObject(it));
+};
+
+},{"./_object-gopn":73,"./_to-iobject":108}],73:[function(require,module,exports){
+// 19.1.2.7 / 15.2.3.4 Object.getOwnPropertyNames(O)
+var $keys      = require('./_object-keys-internal')
+  , hiddenKeys = require('./_enum-bug-keys').concat('length', 'prototype');
+
+exports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O){
+  return $keys(O, hiddenKeys);
+};
+},{"./_enum-bug-keys":31,"./_object-keys-internal":76}],74:[function(require,module,exports){
+exports.f = Object.getOwnPropertySymbols;
+},{}],75:[function(require,module,exports){
+// 19.1.2.9 / 15.2.3.2 Object.getPrototypeOf(O)
+var has         = require('./_has')
+  , toObject    = require('./_to-object')
+  , IE_PROTO    = require('./_shared-key')('IE_PROTO')
+  , ObjectProto = Object.prototype;
+
+module.exports = Object.getPrototypeOf || function(O){
+  O = toObject(O);
+  if(has(O, IE_PROTO))return O[IE_PROTO];
+  if(typeof O.constructor == 'function' && O instanceof O.constructor){
+    return O.constructor.prototype;
+  } return O instanceof Object ? ObjectProto : null;
+};
+},{"./_has":40,"./_shared-key":94,"./_to-object":110}],76:[function(require,module,exports){
+var has          = require('./_has')
+  , toIObject    = require('./_to-iobject')
+  , arrayIndexOf = require('./_array-includes')(false)
+  , IE_PROTO     = require('./_shared-key')('IE_PROTO');
+
+module.exports = function(object, names){
+  var O      = toIObject(object)
+    , i      = 0
+    , result = []
+    , key;
+  for(key in O)if(key != IE_PROTO)has(O, key) && result.push(key);
+  // Don't enum bug & hidden keys
+  while(names.length > i)if(has(O, key = names[i++])){
+    ~arrayIndexOf(result, key) || result.push(key);
+  }
+  return result;
+};
+},{"./_array-includes":12,"./_has":40,"./_shared-key":94,"./_to-iobject":108}],77:[function(require,module,exports){
+// 19.1.2.14 / 15.2.3.14 Object.keys(O)
+var $keys       = require('./_object-keys-internal')
+  , enumBugKeys = require('./_enum-bug-keys');
+
+module.exports = Object.keys || function keys(O){
+  return $keys(O, enumBugKeys);
+};
+},{"./_enum-bug-keys":31,"./_object-keys-internal":76}],78:[function(require,module,exports){
+exports.f = {}.propertyIsEnumerable;
+},{}],79:[function(require,module,exports){
+// most Object methods by ES6 should accept primitives
+var $export = require('./_export')
+  , core    = require('./_core')
+  , fails   = require('./_fails');
+module.exports = function(KEY, exec){
+  var fn  = (core.Object || {})[KEY] || Object[KEY]
+    , exp = {};
+  exp[KEY] = exec(fn);
+  $export($export.S + $export.F * fails(function(){ fn(1); }), 'Object', exp);
+};
+},{"./_core":24,"./_export":33,"./_fails":35}],80:[function(require,module,exports){
+var getKeys   = require('./_object-keys')
+  , toIObject = require('./_to-iobject')
+  , isEnum    = require('./_object-pie').f;
+module.exports = function(isEntries){
+  return function(it){
+    var O      = toIObject(it)
+      , keys   = getKeys(O)
+      , length = keys.length
+      , i      = 0
+      , result = []
+      , key;
+    while(length > i)if(isEnum.call(O, key = keys[i++])){
+      result.push(isEntries ? [key, O[key]] : O[key]);
+    } return result;
+  };
+};
+},{"./_object-keys":77,"./_object-pie":78,"./_to-iobject":108}],81:[function(require,module,exports){
+// all object keys, includes non-enumerable and symbols
+var gOPN     = require('./_object-gopn')
+  , gOPS     = require('./_object-gops')
+  , anObject = require('./_an-object')
+  , Reflect  = require('./_global').Reflect;
+module.exports = Reflect && Reflect.ownKeys || function ownKeys(it){
+  var keys       = gOPN.f(anObject(it))
+    , getSymbols = gOPS.f;
+  return getSymbols ? keys.concat(getSymbols(it)) : keys;
+};
+},{"./_an-object":8,"./_global":39,"./_object-gopn":73,"./_object-gops":74}],82:[function(require,module,exports){
+var $parseFloat = require('./_global').parseFloat
+  , $trim       = require('./_string-trim').trim;
+
+module.exports = 1 / $parseFloat(require('./_string-ws') + '-0') !== -Infinity ? function parseFloat(str){
+  var string = $trim(String(str), 3)
+    , result = $parseFloat(string);
+  return result === 0 && string.charAt(0) == '-' ? -0 : result;
+} : $parseFloat;
+},{"./_global":39,"./_string-trim":103,"./_string-ws":104}],83:[function(require,module,exports){
+var $parseInt = require('./_global').parseInt
+  , $trim     = require('./_string-trim').trim
+  , ws        = require('./_string-ws')
+  , hex       = /^[\-+]?0[xX]/;
+
+module.exports = $parseInt(ws + '08') !== 8 || $parseInt(ws + '0x16') !== 22 ? function parseInt(str, radix){
+  var string = $trim(String(str), 3);
+  return $parseInt(string, (radix >>> 0) || (hex.test(string) ? 16 : 10));
+} : $parseInt;
+},{"./_global":39,"./_string-trim":103,"./_string-ws":104}],84:[function(require,module,exports){
+'use strict';
+var path      = require('./_path')
+  , invoke    = require('./_invoke')
+  , aFunction = require('./_a-function');
+module.exports = function(/* ...pargs */){
+  var fn     = aFunction(this)
+    , length = arguments.length
+    , pargs  = Array(length)
+    , i      = 0
+    , _      = path._
+    , holder = false;
+  while(length > i)if((pargs[i] = arguments[i++]) === _)holder = true;
+  return function(/* ...args */){
+    var that = this
+      , aLen = arguments.length
+      , j = 0, k = 0, args;
+    if(!holder && !aLen)return invoke(fn, pargs, that);
+    args = pargs.slice();
+    if(holder)for(;length > j; j++)if(args[j] === _)args[j] = arguments[k++];
+    while(aLen > k)args.push(arguments[k++]);
+    return invoke(fn, args, that);
+  };
+};
+},{"./_a-function":4,"./_invoke":45,"./_path":85}],85:[function(require,module,exports){
+module.exports = require('./_global');
+},{"./_global":39}],86:[function(require,module,exports){
+module.exports = function(bitmap, value){
+  return {
+    enumerable  : !(bitmap & 1),
+    configurable: !(bitmap & 2),
+    writable    : !(bitmap & 4),
+    value       : value
+  };
+};
+},{}],87:[function(require,module,exports){
+var redefine = require('./_redefine');
+module.exports = function(target, src, safe){
+  for(var key in src)redefine(target, key, src[key], safe);
+  return target;
+};
+},{"./_redefine":88}],88:[function(require,module,exports){
+var global    = require('./_global')
+  , hide      = require('./_hide')
+  , has       = require('./_has')
+  , SRC       = require('./_uid')('src')
+  , TO_STRING = 'toString'
+  , $toString = Function[TO_STRING]
+  , TPL       = ('' + $toString).split(TO_STRING);
+
+require('./_core').inspectSource = function(it){
+  return $toString.call(it);
+};
+
+(module.exports = function(O, key, val, safe){
+  var isFunction = typeof val == 'function';
+  if(isFunction)has(val, 'name') || hide(val, 'name', key);
+  if(O[key] === val)return;
+  if(isFunction)has(val, SRC) || hide(val, SRC, O[key] ? '' + O[key] : TPL.join(String(key)));
+  if(O === global){
+    O[key] = val;
+  } else {
+    if(!safe){
+      delete O[key];
+      hide(O, key, val);
+    } else {
+      if(O[key])O[key] = val;
+      else hide(O, key, val);
+    }
+  }
+// add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative
+})(Function.prototype, TO_STRING, function toString(){
+  return typeof this == 'function' && this[SRC] || $toString.call(this);
+});
+},{"./_core":24,"./_global":39,"./_has":40,"./_hide":41,"./_uid":115}],89:[function(require,module,exports){
+module.exports = function(regExp, replace){
+  var replacer = replace === Object(replace) ? function(part){
+    return replace[part];
+  } : replace;
+  return function(it){
+    return String(it).replace(regExp, replacer);
+  };
+};
+},{}],90:[function(require,module,exports){
+// 7.2.9 SameValue(x, y)
+module.exports = Object.is || function is(x, y){
+  return x === y ? x !== 0 || 1 / x === 1 / y : x != x && y != y;
+};
+},{}],91:[function(require,module,exports){
+// Works with __proto__ only. Old v8 can't work with null proto objects.
+/* eslint-disable no-proto */
+var isObject = require('./_is-object')
+  , anObject = require('./_an-object');
+var check = function(O, proto){
+  anObject(O);
+  if(!isObject(proto) && proto !== null)throw TypeError(proto + ": can't set as prototype!");
+};
+module.exports = {
+  set: Object.setPrototypeOf || ('__proto__' in {} ? // eslint-disable-line
+    function(test, buggy, set){
+      try {
+        set = require('./_ctx')(Function.call, require('./_object-gopd').f(Object.prototype, '__proto__').set, 2);
+        set(test, []);
+        buggy = !(test instanceof Array);
+      } catch(e){ buggy = true; }
+      return function setPrototypeOf(O, proto){
+        check(O, proto);
+        if(buggy)O.__proto__ = proto;
+        else set(O, proto);
+        return O;
+      };
+    }({}, false) : undefined),
+  check: check
+};
+},{"./_an-object":8,"./_ctx":26,"./_is-object":50,"./_object-gopd":71}],92:[function(require,module,exports){
+'use strict';
+var global      = require('./_global')
+  , dP          = require('./_object-dp')
+  , DESCRIPTORS = require('./_descriptors')
+  , SPECIES     = require('./_wks')('species');
+
+module.exports = function(KEY){
+  var C = global[KEY];
+  if(DESCRIPTORS && C && !C[SPECIES])dP.f(C, SPECIES, {
+    configurable: true,
+    get: function(){ return this; }
+  });
+};
+},{"./_descriptors":29,"./_global":39,"./_object-dp":68,"./_wks":118}],93:[function(require,module,exports){
+var def = require('./_object-dp').f
+  , has = require('./_has')
+  , TAG = require('./_wks')('toStringTag');
+
+module.exports = function(it, tag, stat){
+  if(it && !has(it = stat ? it : it.prototype, TAG))def(it, TAG, {configurable: true, value: tag});
+};
+},{"./_has":40,"./_object-dp":68,"./_wks":118}],94:[function(require,module,exports){
+var shared = require('./_shared')('keys')
+  , uid    = require('./_uid');
+module.exports = function(key){
+  return shared[key] || (shared[key] = uid(key));
+};
+},{"./_shared":95,"./_uid":115}],95:[function(require,module,exports){
+var global = require('./_global')
+  , SHARED = '__core-js_shared__'
+  , store  = global[SHARED] || (global[SHARED] = {});
+module.exports = function(key){
+  return store[key] || (store[key] = {});
+};
+},{"./_global":39}],96:[function(require,module,exports){
+// 7.3.20 SpeciesConstructor(O, defaultConstructor)
+var anObject  = require('./_an-object')
+  , aFunction = require('./_a-function')
+  , SPECIES   = require('./_wks')('species');
+module.exports = function(O, D){
+  var C = anObject(O).constructor, S;
+  return C === undefined || (S = anObject(C)[SPECIES]) == undefined ? D : aFunction(S);
+};
+},{"./_a-function":4,"./_an-object":8,"./_wks":118}],97:[function(require,module,exports){
+var fails = require('./_fails');
+
+module.exports = function(method, arg){
+  return !!method && fails(function(){
+    arg ? method.call(null, function(){}, 1) : method.call(null);
+  });
+};
+},{"./_fails":35}],98:[function(require,module,exports){
+var toInteger = require('./_to-integer')
+  , defined   = require('./_defined');
+// true  -> String#at
+// false -> String#codePointAt
+module.exports = function(TO_STRING){
+  return function(that, pos){
+    var s = String(defined(that))
+      , i = toInteger(pos)
+      , l = s.length
+      , a, b;
+    if(i < 0 || i >= l)return TO_STRING ? '' : undefined;
+    a = s.charCodeAt(i);
+    return a < 0xd800 || a > 0xdbff || i + 1 === l || (b = s.charCodeAt(i + 1)) < 0xdc00 || b > 0xdfff
+      ? TO_STRING ? s.charAt(i) : a
+      : TO_STRING ? s.slice(i, i + 2) : (a - 0xd800 << 10) + (b - 0xdc00) + 0x10000;
+  };
+};
+},{"./_defined":28,"./_to-integer":107}],99:[function(require,module,exports){
+// helper for String#{startsWith, endsWith, includes}
+var isRegExp = require('./_is-regexp')
+  , defined  = require('./_defined');
+
+module.exports = function(that, searchString, NAME){
+  if(isRegExp(searchString))throw TypeError('String#' + NAME + " doesn't accept regex!");
+  return String(defined(that));
+};
+},{"./_defined":28,"./_is-regexp":51}],100:[function(require,module,exports){
+var $export = require('./_export')
+  , fails   = require('./_fails')
+  , defined = require('./_defined')
+  , quot    = /"/g;
+// B.2.3.2.1 CreateHTML(string, tag, attribute, value)
+var createHTML = function(string, tag, attribute, value) {
+  var S  = String(defined(string))
+    , p1 = '<' + tag;
+  if(attribute !== '')p1 += ' ' + attribute + '="' + String(value).replace(quot, '&quot;') + '"';
+  return p1 + '>' + S + '</' + tag + '>';
+};
+module.exports = function(NAME, exec){
+  var O = {};
+  O[NAME] = exec(createHTML);
+  $export($export.P + $export.F * fails(function(){
+    var test = ''[NAME]('"');
+    return test !== test.toLowerCase() || test.split('"').length > 3;
+  }), 'String', O);
+};
+},{"./_defined":28,"./_export":33,"./_fails":35}],101:[function(require,module,exports){
+// https://github.com/tc39/proposal-string-pad-start-end
+var toLength = require('./_to-length')
+  , repeat   = require('./_string-repeat')
+  , defined  = require('./_defined');
+
+module.exports = function(that, maxLength, fillString, left){
+  var S            = String(defined(that))
+    , stringLength = S.length
+    , fillStr      = fillString === undefined ? ' ' : String(fillString)
+    , intMaxLength = toLength(maxLength);
+  if(intMaxLength <= stringLength || fillStr == '')return S;
+  var fillLen = intMaxLength - stringLength
+    , stringFiller = repeat.call(fillStr, Math.ceil(fillLen / fillStr.length));
+  if(stringFiller.length > fillLen)stringFiller = stringFiller.slice(0, fillLen);
+  return left ? stringFiller + S : S + stringFiller;
+};
+
+},{"./_defined":28,"./_string-repeat":102,"./_to-length":109}],102:[function(require,module,exports){
+'use strict';
+var toInteger = require('./_to-integer')
+  , defined   = require('./_defined');
+
+module.exports = function repeat(count){
+  var str = String(defined(this))
+    , res = ''
+    , n   = toInteger(count);
+  if(n < 0 || n == Infinity)throw RangeError("Count can't be negative");
+  for(;n > 0; (n >>>= 1) && (str += str))if(n & 1)res += str;
+  return res;
+};
+},{"./_defined":28,"./_to-integer":107}],103:[function(require,module,exports){
+var $export = require('./_export')
+  , defined = require('./_defined')
+  , fails   = require('./_fails')
+  , spaces  = require('./_string-ws')
+  , space   = '[' + spaces + ']'
+  , non     = '\u200b\u0085'
+  , ltrim   = RegExp('^' + space + space + '*')
+  , rtrim   = RegExp(space + space + '*$');
+
+var exporter = function(KEY, exec, ALIAS){
+  var exp   = {};
+  var FORCE = fails(function(){
+    return !!spaces[KEY]() || non[KEY]() != non;
+  });
+  var fn = exp[KEY] = FORCE ? exec(trim) : spaces[KEY];
+  if(ALIAS)exp[ALIAS] = fn;
+  $export($export.P + $export.F * FORCE, 'String', exp);
+};
+
+// 1 -> String#trimLeft
+// 2 -> String#trimRight
+// 3 -> String#trim
+var trim = exporter.trim = function(string, TYPE){
+  string = String(defined(string));
+  if(TYPE & 1)string = string.replace(ltrim, '');
+  if(TYPE & 2)string = string.replace(rtrim, '');
+  return string;
+};
+
+module.exports = exporter;
+},{"./_defined":28,"./_export":33,"./_fails":35,"./_string-ws":104}],104:[function(require,module,exports){
+module.exports = '\x09\x0A\x0B\x0C\x0D\x20\xA0\u1680\u180E\u2000\u2001\u2002\u2003' +
+  '\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u202F\u205F\u3000\u2028\u2029\uFEFF';
+},{}],105:[function(require,module,exports){
+var ctx                = require('./_ctx')
+  , invoke             = require('./_invoke')
+  , html               = require('./_html')
+  , cel                = require('./_dom-create')
+  , global             = require('./_global')
+  , process            = global.process
+  , setTask            = global.setImmediate
+  , clearTask          = global.clearImmediate
+  , MessageChannel     = global.MessageChannel
+  , counter            = 0
+  , queue              = {}
+  , ONREADYSTATECHANGE = 'onreadystatechange'
+  , defer, channel, port;
+var run = function(){
+  var id = +this;
+  if(queue.hasOwnProperty(id)){
+    var fn = queue[id];
+    delete queue[id];
+    fn();
+  }
+};
+var listener = function(event){
+  run.call(event.data);
+};
+// Node.js 0.9+ & IE10+ has setImmediate, otherwise:
+if(!setTask || !clearTask){
+  setTask = function setImmediate(fn){
+    var args = [], i = 1;
+    while(arguments.length > i)args.push(arguments[i++]);
+    queue[++counter] = function(){
+      invoke(typeof fn == 'function' ? fn : Function(fn), args);
+    };
+    defer(counter);
+    return counter;
+  };
+  clearTask = function clearImmediate(id){
+    delete queue[id];
+  };
+  // Node.js 0.8-
+  if(require('./_cof')(process) == 'process'){
+    defer = function(id){
+      process.nextTick(ctx(run, id, 1));
+    };
+  // Browsers with MessageChannel, includes WebWorkers
+  } else if(MessageChannel){
+    channel = new MessageChannel;
+    port    = channel.port2;
+    channel.port1.onmessage = listener;
+    defer = ctx(port.postMessage, port, 1);
+  // Browsers with postMessage, skip WebWorkers
+  // IE8 has postMessage, but it's sync & typeof its postMessage is 'object'
+  } else if(global.addEventListener && typeof postMessage == 'function' && !global.importScripts){
+    defer = function(id){
+      global.postMessage(id + '', '*');
+    };
+    global.addEventListener('message', listener, false);
+  // IE8-
+  } else if(ONREADYSTATECHANGE in cel('script')){
+    defer = function(id){
+      html.appendChild(cel('script'))[ONREADYSTATECHANGE] = function(){
+        html.removeChild(this);
+        run.call(id);
+      };
+    };
+  // Rest old browsers
+  } else {
+    defer = function(id){
+      setTimeout(ctx(run, id, 1), 0);
+    };
+  }
+}
+module.exports = {
+  set:   setTask,
+  clear: clearTask
+};
+},{"./_cof":19,"./_ctx":26,"./_dom-create":30,"./_global":39,"./_html":42,"./_invoke":45}],106:[function(require,module,exports){
+var toInteger = require('./_to-integer')
+  , max       = Math.max
+  , min       = Math.min;
+module.exports = function(index, length){
+  index = toInteger(index);
+  return index < 0 ? max(index + length, 0) : min(index, length);
+};
+},{"./_to-integer":107}],107:[function(require,module,exports){
+// 7.1.4 ToInteger
+var ceil  = Math.ceil
+  , floor = Math.floor;
+module.exports = function(it){
+  return isNaN(it = +it) ? 0 : (it > 0 ? floor : ceil)(it);
+};
+},{}],108:[function(require,module,exports){
+// to indexed object, toObject with fallback for non-array-like ES3 strings
+var IObject = require('./_iobject')
+  , defined = require('./_defined');
+module.exports = function(it){
+  return IObject(defined(it));
+};
+},{"./_defined":28,"./_iobject":46}],109:[function(require,module,exports){
+// 7.1.15 ToLength
+var toInteger = require('./_to-integer')
+  , min       = Math.min;
+module.exports = function(it){
+  return it > 0 ? min(toInteger(it), 0x1fffffffffffff) : 0; // pow(2, 53) - 1 == 9007199254740991
+};
+},{"./_to-integer":107}],110:[function(require,module,exports){
+// 7.1.13 ToObject(argument)
+var defined = require('./_defined');
+module.exports = function(it){
+  return Object(defined(it));
+};
+},{"./_defined":28}],111:[function(require,module,exports){
+// 7.1.1 ToPrimitive(input [, PreferredType])
+var isObject = require('./_is-object');
+// instead of the ES6 spec version, we didn't implement @@toPrimitive case
+// and the second argument - flag - preferred type is a string
+module.exports = function(it, S){
+  if(!isObject(it))return it;
+  var fn, val;
+  if(S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it)))return val;
+  if(typeof (fn = it.valueOf) == 'function' && !isObject(val = fn.call(it)))return val;
+  if(!S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it)))return val;
+  throw TypeError("Can't convert object to primitive value");
+};
+},{"./_is-object":50}],112:[function(require,module,exports){
+'use strict';
+if(require('./_descriptors')){
+  var LIBRARY             = require('./_library')
+    , global              = require('./_global')
+    , fails               = require('./_fails')
+    , $export             = require('./_export')
+    , $typed              = require('./_typed')
+    , $buffer             = require('./_typed-buffer')
+    , ctx                 = require('./_ctx')
+    , anInstance          = require('./_an-instance')
+    , propertyDesc        = require('./_property-desc')
+    , hide                = require('./_hide')
+    , redefineAll         = require('./_redefine-all')
+    , isInteger           = require('./_is-integer')
+    , toInteger           = require('./_to-integer')
+    , toLength            = require('./_to-length')
+    , toIndex             = require('./_to-index')
+    , toPrimitive         = require('./_to-primitive')
+    , has                 = require('./_has')
+    , same                = require('./_same-value')
+    , classof             = require('./_classof')
+    , isObject            = require('./_is-object')
+    , toObject            = require('./_to-object')
+    , isArrayIter         = require('./_is-array-iter')
+    , create              = require('./_object-create')
+    , getPrototypeOf      = require('./_object-gpo')
+    , gOPN                = require('./_object-gopn').f
+    , isIterable          = require('./core.is-iterable')
+    , getIterFn           = require('./core.get-iterator-method')
+    , uid                 = require('./_uid')
+    , wks                 = require('./_wks')
+    , createArrayMethod   = require('./_array-methods')
+    , createArrayIncludes = require('./_array-includes')
+    , speciesConstructor  = require('./_species-constructor')
+    , ArrayIterators      = require('./es6.array.iterator')
+    , Iterators           = require('./_iterators')
+    , $iterDetect         = require('./_iter-detect')
+    , setSpecies          = require('./_set-species')
+    , arrayFill           = require('./_array-fill')
+    , arrayCopyWithin     = require('./_array-copy-within')
+    , $DP                 = require('./_object-dp')
+    , $GOPD               = require('./_object-gopd')
+    , dP                  = $DP.f
+    , gOPD                = $GOPD.f
+    , RangeError          = global.RangeError
+    , TypeError           = global.TypeError
+    , Uint8Array          = global.Uint8Array
+    , ARRAY_BUFFER        = 'ArrayBuffer'
+    , SHARED_BUFFER       = 'Shared' + ARRAY_BUFFER
+    , BYTES_PER_ELEMENT   = 'BYTES_PER_ELEMENT'
+    , PROTOTYPE           = 'prototype'
+    , ArrayProto          = Array[PROTOTYPE]
+    , $ArrayBuffer        = $buffer.ArrayBuffer
+    , $DataView           = $buffer.DataView
+    , arrayForEach        = createArrayMethod(0)
+    , arrayFilter         = createArrayMethod(2)
+    , arraySome           = createArrayMethod(3)
+    , arrayEvery          = createArrayMethod(4)
+    , arrayFind           = createArrayMethod(5)
+    , arrayFindIndex      = createArrayMethod(6)
+    , arrayIncludes       = createArrayIncludes(true)
+    , arrayIndexOf        = createArrayIncludes(false)
+    , arrayValues         = ArrayIterators.values
+    , arrayKeys           = ArrayIterators.keys
+    , arrayEntries        = ArrayIterators.entries
+    , arrayLastIndexOf    = ArrayProto.lastIndexOf
+    , arrayReduce         = ArrayProto.reduce
+    , arrayReduceRight    = ArrayProto.reduceRight
+    , arrayJoin           = ArrayProto.join
+    , arraySort           = ArrayProto.sort
+    , arraySlice          = ArrayProto.slice
+    , arrayToString       = ArrayProto.toString
+    , arrayToLocaleString = ArrayProto.toLocaleString
+    , ITERATOR            = wks('iterator')
+    , TAG                 = wks('toStringTag')
+    , TYPED_CONSTRUCTOR   = uid('typed_constructor')
+    , DEF_CONSTRUCTOR     = uid('def_constructor')
+    , ALL_CONSTRUCTORS    = $typed.CONSTR
+    , TYPED_ARRAY         = $typed.TYPED
+    , VIEW                = $typed.VIEW
+    , WRONG_LENGTH        = 'Wrong length!';
+
+  var $map = createArrayMethod(1, function(O, length){
+    return allocate(speciesConstructor(O, O[DEF_CONSTRUCTOR]), length);
+  });
+
+  var LITTLE_ENDIAN = fails(function(){
+    return new Uint8Array(new Uint16Array([1]).buffer)[0] === 1;
+  });
+
+  var FORCED_SET = !!Uint8Array && !!Uint8Array[PROTOTYPE].set && fails(function(){
+    new Uint8Array(1).set({});
+  });
+
+  var strictToLength = function(it, SAME){
+    if(it === undefined)throw TypeError(WRONG_LENGTH);
+    var number = +it
+      , length = toLength(it);
+    if(SAME && !same(number, length))throw RangeError(WRONG_LENGTH);
+    return length;
+  };
+
+  var toOffset = function(it, BYTES){
+    var offset = toInteger(it);
+    if(offset < 0 || offset % BYTES)throw RangeError('Wrong offset!');
+    return offset;
+  };
+
+  var validate = function(it){
+    if(isObject(it) && TYPED_ARRAY in it)return it;
+    throw TypeError(it + ' is not a typed array!');
+  };
+
+  var allocate = function(C, length){
+    if(!(isObject(C) && TYPED_CONSTRUCTOR in C)){
+      throw TypeError('It is not a typed array constructor!');
+    } return new C(length);
+  };
+
+  var speciesFromList = function(O, list){
+    return fromList(speciesConstructor(O, O[DEF_CONSTRUCTOR]), list);
+  };
+
+  var fromList = function(C, list){
+    var index  = 0
+      , length = list.length
+      , result = allocate(C, length);
+    while(length > index)result[index] = list[index++];
+    return result;
+  };
+
+  var addGetter = function(it, key, internal){
+    dP(it, key, {get: function(){ return this._d[internal]; }});
+  };
+
+  var $from = function from(source /*, mapfn, thisArg */){
+    var O       = toObject(source)
+      , aLen    = arguments.length
+      , mapfn   = aLen > 1 ? arguments[1] : undefined
+      , mapping = mapfn !== undefined
+      , iterFn  = getIterFn(O)
+      , i, length, values, result, step, iterator;
+    if(iterFn != undefined && !isArrayIter(iterFn)){
+      for(iterator = iterFn.call(O), values = [], i = 0; !(step = iterator.next()).done; i++){
+        values.push(step.value);
+      } O = values;
+    }
+    if(mapping && aLen > 2)mapfn = ctx(mapfn, arguments[2], 2);
+    for(i = 0, length = toLength(O.length), result = allocate(this, length); length > i; i++){
+      result[i] = mapping ? mapfn(O[i], i) : O[i];
+    }
+    return result;
+  };
+
+  var $of = function of(/*...items*/){
+    var index  = 0
+      , length = arguments.length
+      , result = allocate(this, length);
+    while(length > index)result[index] = arguments[index++];
+    return result;
+  };
+
+  // iOS Safari 6.x fails here
+  var TO_LOCALE_BUG = !!Uint8Array && fails(function(){ arrayToLocaleString.call(new Uint8Array(1)); });
+
+  var $toLocaleString = function toLocaleString(){
+    return arrayToLocaleString.apply(TO_LOCALE_BUG ? arraySlice.call(validate(this)) : validate(this), arguments);
+  };
+
+  var proto = {
+    copyWithin: function copyWithin(target, start /*, end */){
+      return arrayCopyWithin.call(validate(this), target, start, arguments.length > 2 ? arguments[2] : undefined);
+    },
+    every: function every(callbackfn /*, thisArg */){
+      return arrayEvery(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);
+    },
+    fill: function fill(value /*, start, end */){ // eslint-disable-line no-unused-vars
+      return arrayFill.apply(validate(this), arguments);
+    },
+    filter: function filter(callbackfn /*, thisArg */){
+      return speciesFromList(this, arrayFilter(validate(this), callbackfn,
+        arguments.length > 1 ? arguments[1] : undefined));
+    },
+    find: function find(predicate /*, thisArg */){
+      return arrayFind(validate(this), predicate, arguments.length > 1 ? arguments[1] : undefined);
+    },
+    findIndex: function findIndex(predicate /*, thisArg */){
+      return arrayFindIndex(validate(this), predicate, arguments.length > 1 ? arguments[1] : undefined);
+    },
+    forEach: function forEach(callbackfn /*, thisArg */){
+      arrayForEach(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);
+    },
+    indexOf: function indexOf(searchElement /*, fromIndex */){
+      return arrayIndexOf(validate(this), searchElement, arguments.length > 1 ? arguments[1] : undefined);
+    },
+    includes: function includes(searchElement /*, fromIndex */){
+      return arrayIncludes(validate(this), searchElement, arguments.length > 1 ? arguments[1] : undefined);
+    },
+    join: function join(separator){ // eslint-disable-line no-unused-vars
+      return arrayJoin.apply(validate(this), arguments);
+    },
+    lastIndexOf: function lastIndexOf(searchElement /*, fromIndex */){ // eslint-disable-line no-unused-vars
+      return arrayLastIndexOf.apply(validate(this), arguments);
+    },
+    map: function map(mapfn /*, thisArg */){
+      return $map(validate(this), mapfn, arguments.length > 1 ? arguments[1] : undefined);
+    },
+    reduce: function reduce(callbackfn /*, initialValue */){ // eslint-disable-line no-unused-vars
+      return arrayReduce.apply(validate(this), arguments);
+    },
+    reduceRight: function reduceRight(callbackfn /*, initialValue */){ // eslint-disable-line no-unused-vars
+      return arrayReduceRight.apply(validate(this), arguments);
+    },
+    reverse: function reverse(){
+      var that   = this
+        , length = validate(that).length
+        , middle = Math.floor(length / 2)
+        , index  = 0
+        , value;
+      while(index < middle){
+        value         = that[index];
+        that[index++] = that[--length];
+        that[length]  = value;
+      } return that;
+    },
+    some: function some(callbackfn /*, thisArg */){
+      return arraySome(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);
+    },
+    sort: function sort(comparefn){
+      return arraySort.call(validate(this), comparefn);
+    },
+    subarray: function subarray(begin, end){
+      var O      = validate(this)
+        , length = O.length
+        , $begin = toIndex(begin, length);
+      return new (speciesConstructor(O, O[DEF_CONSTRUCTOR]))(
+        O.buffer,
+        O.byteOffset + $begin * O.BYTES_PER_ELEMENT,
+        toLength((end === undefined ? length : toIndex(end, length)) - $begin)
+      );
+    }
+  };
+
+  var $slice = function slice(start, end){
+    return speciesFromList(this, arraySlice.call(validate(this), start, end));
+  };
+
+  var $set = function set(arrayLike /*, offset */){
+    validate(this);
+    var offset = toOffset(arguments[1], 1)
+      , length = this.length
+      , src    = toObject(arrayLike)
+      , len    = toLength(src.length)
+      , index  = 0;
+    if(len + offset > length)throw RangeError(WRONG_LENGTH);
+    while(index < len)this[offset + index] = src[index++];
+  };
+
+  var $iterators = {
+    entries: function entries(){
+      return arrayEntries.call(validate(this));
+    },
+    keys: function keys(){
+      return arrayKeys.call(validate(this));
+    },
+    values: function values(){
+      return arrayValues.call(validate(this));
+    }
+  };
+
+  var isTAIndex = function(target, key){
+    return isObject(target)
+      && target[TYPED_ARRAY]
+      && typeof key != 'symbol'
+      && key in target
+      && String(+key) == String(key);
+  };
+  var $getDesc = function getOwnPropertyDescriptor(target, key){
+    return isTAIndex(target, key = toPrimitive(key, true))
+      ? propertyDesc(2, target[key])
+      : gOPD(target, key);
+  };
+  var $setDesc = function defineProperty(target, key, desc){
+    if(isTAIndex(target, key = toPrimitive(key, true))
+      && isObject(desc)
+      && has(desc, 'value')
+      && !has(desc, 'get')
+      && !has(desc, 'set')
+      // TODO: add validation descriptor w/o calling accessors
+      && !desc.configurable
+      && (!has(desc, 'writable') || desc.writable)
+      && (!has(desc, 'enumerable') || desc.enumerable)
+    ){
+      target[key] = desc.value;
+      return target;
+    } else return dP(target, key, desc);
+  };
+
+  if(!ALL_CONSTRUCTORS){
+    $GOPD.f = $getDesc;
+    $DP.f   = $setDesc;
+  }
+
+  $export($export.S + $export.F * !ALL_CONSTRUCTORS, 'Object', {
+    getOwnPropertyDescriptor: $getDesc,
+    defineProperty:           $setDesc
+  });
+
+  if(fails(function(){ arrayToString.call({}); })){
+    arrayToString = arrayToLocaleString = function toString(){
+      return arrayJoin.call(this);
+    }
+  }
+
+  var $TypedArrayPrototype$ = redefineAll({}, proto);
+  redefineAll($TypedArrayPrototype$, $iterators);
+  hide($TypedArrayPrototype$, ITERATOR, $iterators.values);
+  redefineAll($TypedArrayPrototype$, {
+    slice:          $slice,
+    set:            $set,
+    constructor:    function(){ /* noop */ },
+    toString:       arrayToString,
+    toLocaleString: $toLocaleString
+  });
+  addGetter($TypedArrayPrototype$, 'buffer', 'b');
+  addGetter($TypedArrayPrototype$, 'byteOffset', 'o');
+  addGetter($TypedArrayPrototype$, 'byteLength', 'l');
+  addGetter($TypedArrayPrototype$, 'length', 'e');
+  dP($TypedArrayPrototype$, TAG, {
+    get: function(){ return this[TYPED_ARRAY]; }
+  });
+
+  module.exports = function(KEY, BYTES, wrapper, CLAMPED){
+    CLAMPED = !!CLAMPED;
+    var NAME       = KEY + (CLAMPED ? 'Clamped' : '') + 'Array'
+      , ISNT_UINT8 = NAME != 'Uint8Array'
+      , GETTER     = 'get' + KEY
+      , SETTER     = 'set' + KEY
+      , TypedArray = global[NAME]
+      , Base       = TypedArray || {}
+      , TAC        = TypedArray && getPrototypeOf(TypedArray)
+      , FORCED     = !TypedArray || !$typed.ABV
+      , O          = {}
+      , TypedArrayPrototype = TypedArray && TypedArray[PROTOTYPE];
+    var getter = function(that, index){
+      var data = that._d;
+      return data.v[GETTER](index * BYTES + data.o, LITTLE_ENDIAN);
+    };
+    var setter = function(that, index, value){
+      var data = that._d;
+      if(CLAMPED)value = (value = Math.round(value)) < 0 ? 0 : value > 0xff ? 0xff : value & 0xff;
+      data.v[SETTER](index * BYTES + data.o, value, LITTLE_ENDIAN);
+    };
+    var addElement = function(that, index){
+      dP(that, index, {
+        get: function(){
+          return getter(this, index);
+        },
+        set: function(value){
+          return setter(this, index, value);
+        },
+        enumerable: true
+      });
+    };
+    if(FORCED){
+      TypedArray = wrapper(function(that, data, $offset, $length){
+        anInstance(that, TypedArray, NAME, '_d');
+        var index  = 0
+          , offset = 0
+          , buffer, byteLength, length, klass;
+        if(!isObject(data)){
+          length     = strictToLength(data, true)
+          byteLength = length * BYTES;
+          buffer     = new $ArrayBuffer(byteLength);
+        } else if(data instanceof $ArrayBuffer || (klass = classof(data)) == ARRAY_BUFFER || klass == SHARED_BUFFER){
+          buffer = data;
+          offset = toOffset($offset, BYTES);
+          var $len = data.byteLength;
+          if($length === undefined){
+            if($len % BYTES)throw RangeError(WRONG_LENGTH);
+            byteLength = $len - offset;
+            if(byteLength < 0)throw RangeError(WRONG_LENGTH);
+          } else {
+            byteLength = toLength($length) * BYTES;
+            if(byteLength + offset > $len)throw RangeError(WRONG_LENGTH);
+          }
+          length = byteLength / BYTES;
+        } else if(TYPED_ARRAY in data){
+          return fromList(TypedArray, data);
+        } else {
+          return $from.call(TypedArray, data);
+        }
+        hide(that, '_d', {
+          b: buffer,
+          o: offset,
+          l: byteLength,
+          e: length,
+          v: new $DataView(buffer)
+        });
+        while(index < length)addElement(that, index++);
+      });
+      TypedArrayPrototype = TypedArray[PROTOTYPE] = create($TypedArrayPrototype$);
+      hide(TypedArrayPrototype, 'constructor', TypedArray);
+    } else if(!$iterDetect(function(iter){
+      // V8 works with iterators, but fails in many other cases
+      // https://code.google.com/p/v8/issues/detail?id=4552
+      new TypedArray(null); // eslint-disable-line no-new
+      new TypedArray(iter); // eslint-disable-line no-new
+    }, true)){
+      TypedArray = wrapper(function(that, data, $offset, $length){
+        anInstance(that, TypedArray, NAME);
+        var klass;
+        // `ws` module bug, temporarily remove validation length for Uint8Array
+        // https://github.com/websockets/ws/pull/645
+        if(!isObject(data))return new Base(strictToLength(data, ISNT_UINT8));
+        if(data instanceof $ArrayBuffer || (klass = classof(data)) == ARRAY_BUFFER || klass == SHARED_BUFFER){
+          return $length !== undefined
+            ? new Base(data, toOffset($offset, BYTES), $length)
+            : $offset !== undefined
+              ? new Base(data, toOffset($offset, BYTES))
+              : new Base(data);
+        }
+        if(TYPED_ARRAY in data)return fromList(TypedArray, data);
+        return $from.call(TypedArray, data);
+      });
+      arrayForEach(TAC !== Function.prototype ? gOPN(Base).concat(gOPN(TAC)) : gOPN(Base), function(key){
+        if(!(key in TypedArray))hide(TypedArray, key, Base[key]);
+      });
+      TypedArray[PROTOTYPE] = TypedArrayPrototype;
+      if(!LIBRARY)TypedArrayPrototype.constructor = TypedArray;
+    }
+    var $nativeIterator   = TypedArrayPrototype[ITERATOR]
+      , CORRECT_ITER_NAME = !!$nativeIterator && ($nativeIterator.name == 'values' || $nativeIterator.name == undefined)
+      , $iterator         = $iterators.values;
+    hide(TypedArray, TYPED_CONSTRUCTOR, true);
+    hide(TypedArrayPrototype, TYPED_ARRAY, NAME);
+    hide(TypedArrayPrototype, VIEW, true);
+    hide(TypedArrayPrototype, DEF_CONSTRUCTOR, TypedArray);
+
+    if(CLAMPED ? new TypedArray(1)[TAG] != NAME : !(TAG in TypedArrayPrototype)){
+      dP(TypedArrayPrototype, TAG, {
+        get: function(){ return NAME; }
+      });
+    }
+
+    O[NAME] = TypedArray;
+
+    $export($export.G + $export.W + $export.F * (TypedArray != Base), O);
+
+    $export($export.S, NAME, {
+      BYTES_PER_ELEMENT: BYTES,
+      from: $from,
+      of: $of
+    });
+
+    if(!(BYTES_PER_ELEMENT in TypedArrayPrototype))hide(TypedArrayPrototype, BYTES_PER_ELEMENT, BYTES);
+
+    $export($export.P, NAME, proto);
+
+    setSpecies(NAME);
+
+    $export($export.P + $export.F * FORCED_SET, NAME, {set: $set});
+
+    $export($export.P + $export.F * !CORRECT_ITER_NAME, NAME, $iterators);
+
+    $export($export.P + $export.F * (TypedArrayPrototype.toString != arrayToString), NAME, {toString: arrayToString});
+
+    $export($export.P + $export.F * fails(function(){
+      new TypedArray(1).slice();
+    }), NAME, {slice: $slice});
+
+    $export($export.P + $export.F * (fails(function(){
+      return [1, 2].toLocaleString() != new TypedArray([1, 2]).toLocaleString()
+    }) || !fails(function(){
+      TypedArrayPrototype.toLocaleString.call([1, 2]);
+    })), NAME, {toLocaleString: $toLocaleString});
+
+    Iterators[NAME] = CORRECT_ITER_NAME ? $nativeIterator : $iterator;
+    if(!LIBRARY && !CORRECT_ITER_NAME)hide(TypedArrayPrototype, ITERATOR, $iterator);
+  };
+} else module.exports = function(){ /* empty */ };
+},{"./_an-instance":7,"./_array-copy-within":9,"./_array-fill":10,"./_array-includes":12,"./_array-methods":13,"./_classof":18,"./_ctx":26,"./_descriptors":29,"./_export":33,"./_fails":35,"./_global":39,"./_has":40,"./_hide":41,"./_is-array-iter":47,"./_is-integer":49,"./_is-object":50,"./_iter-detect":55,"./_iterators":57,"./_library":59,"./_object-create":67,"./_object-dp":68,"./_object-gopd":71,"./_object-gopn":73,"./_object-gpo":75,"./_property-desc":86,"./_redefine-all":87,"./_same-value":90,"./_set-species":92,"./_species-constructor":96,"./_to-index":106,"./_to-integer":107,"./_to-length":109,"./_to-object":110,"./_to-primitive":111,"./_typed":114,"./_typed-buffer":113,"./_uid":115,"./_wks":118,"./core.get-iterator-method":119,"./core.is-iterable":120,"./es6.array.iterator":132}],113:[function(require,module,exports){
+'use strict';
+var global         = require('./_global')
+  , DESCRIPTORS    = require('./_descriptors')
+  , LIBRARY        = require('./_library')
+  , $typed         = require('./_typed')
+  , hide           = require('./_hide')
+  , redefineAll    = require('./_redefine-all')
+  , fails          = require('./_fails')
+  , anInstance     = require('./_an-instance')
+  , toInteger      = require('./_to-integer')
+  , toLength       = require('./_to-length')
+  , gOPN           = require('./_object-gopn').f
+  , dP             = require('./_object-dp').f
+  , arrayFill      = require('./_array-fill')
+  , setToStringTag = require('./_set-to-string-tag')
+  , ARRAY_BUFFER   = 'ArrayBuffer'
+  , DATA_VIEW      = 'DataView'
+  , PROTOTYPE      = 'prototype'
+  , WRONG_LENGTH   = 'Wrong length!'
+  , WRONG_INDEX    = 'Wrong index!'
+  , $ArrayBuffer   = global[ARRAY_BUFFER]
+  , $DataView      = global[DATA_VIEW]
+  , Math           = global.Math
+  , parseInt       = global.parseInt
+  , RangeError     = global.RangeError
+  , Infinity       = global.Infinity
+  , BaseBuffer     = $ArrayBuffer
+  , abs            = Math.abs
+  , pow            = Math.pow
+  , min            = Math.min
+  , floor          = Math.floor
+  , log            = Math.log
+  , LN2            = Math.LN2
+  , BUFFER         = 'buffer'
+  , BYTE_LENGTH    = 'byteLength'
+  , BYTE_OFFSET    = 'byteOffset'
+  , $BUFFER        = DESCRIPTORS ? '_b' : BUFFER
+  , $LENGTH        = DESCRIPTORS ? '_l' : BYTE_LENGTH
+  , $OFFSET        = DESCRIPTORS ? '_o' : BYTE_OFFSET;
+
+// IEEE754 conversions based on https://github.com/feross/ieee754
+var packIEEE754 = function(value, mLen, nBytes){
+  var buffer = Array(nBytes)
+    , eLen   = nBytes * 8 - mLen - 1
+    , eMax   = (1 << eLen) - 1
+    , eBias  = eMax >> 1
+    , rt     = mLen === 23 ? pow(2, -24) - pow(2, -77) : 0
+    , i      = 0
+    , s      = value < 0 || value === 0 && 1 / value < 0 ? 1 : 0
+    , e, m, c;
+  value = abs(value)
+  if(value != value || value === Infinity){
+    m = value != value ? 1 : 0;
+    e = eMax;
+  } else {
+    e = floor(log(value) / LN2);
+    if(value * (c = pow(2, -e)) < 1){
+      e--;
+      c *= 2;
+    }
+    if(e + eBias >= 1){
+      value += rt / c;
+    } else {
+      value += rt * pow(2, 1 - eBias);
+    }
+    if(value * c >= 2){
+      e++;
+      c /= 2;
+    }
+    if(e + eBias >= eMax){
+      m = 0;
+      e = eMax;
+    } else if(e + eBias >= 1){
+      m = (value * c - 1) * pow(2, mLen);
+      e = e + eBias;
+    } else {
+      m = value * pow(2, eBias - 1) * pow(2, mLen);
+      e = 0;
+    }
+  }
+  for(; mLen >= 8; buffer[i++] = m & 255, m /= 256, mLen -= 8);
+  e = e << mLen | m;
+  eLen += mLen;
+  for(; eLen > 0; buffer[i++] = e & 255, e /= 256, eLen -= 8);
+  buffer[--i] |= s * 128;
+  return buffer;
+};
+var unpackIEEE754 = function(buffer, mLen, nBytes){
+  var eLen  = nBytes * 8 - mLen - 1
+    , eMax  = (1 << eLen) - 1
+    , eBias = eMax >> 1
+    , nBits = eLen - 7
+    , i     = nBytes - 1
+    , s     = buffer[i--]
+    , e     = s & 127
+    , m;
+  s >>= 7;
+  for(; nBits > 0; e = e * 256 + buffer[i], i--, nBits -= 8);
+  m = e & (1 << -nBits) - 1;
+  e >>= -nBits;
+  nBits += mLen;
+  for(; nBits > 0; m = m * 256 + buffer[i], i--, nBits -= 8);
+  if(e === 0){
+    e = 1 - eBias;
+  } else if(e === eMax){
+    return m ? NaN : s ? -Infinity : Infinity;
+  } else {
+    m = m + pow(2, mLen);
+    e = e - eBias;
+  } return (s ? -1 : 1) * m * pow(2, e - mLen);
+};
+
+var unpackI32 = function(bytes){
+  return bytes[3] << 24 | bytes[2] << 16 | bytes[1] << 8 | bytes[0];
+};
+var packI8 = function(it){
+  return [it & 0xff];
+};
+var packI16 = function(it){
+  return [it & 0xff, it >> 8 & 0xff];
+};
+var packI32 = function(it){
+  return [it & 0xff, it >> 8 & 0xff, it >> 16 & 0xff, it >> 24 & 0xff];
+};
+var packF64 = function(it){
+  return packIEEE754(it, 52, 8);
+};
+var packF32 = function(it){
+  return packIEEE754(it, 23, 4);
+};
+
+var addGetter = function(C, key, internal){
+  dP(C[PROTOTYPE], key, {get: function(){ return this[internal]; }});
+};
+
+var get = function(view, bytes, index, isLittleEndian){
+  var numIndex = +index
+    , intIndex = toInteger(numIndex);
+  if(numIndex != intIndex || intIndex < 0 || intIndex + bytes > view[$LENGTH])throw RangeError(WRONG_INDEX);
+  var store = view[$BUFFER]._b
+    , start = intIndex + view[$OFFSET]
+    , pack  = store.slice(start, start + bytes);
+  return isLittleEndian ? pack : pack.reverse();
+};
+var set = function(view, bytes, index, conversion, value, isLittleEndian){
+  var numIndex = +index
+    , intIndex = toInteger(numIndex);
+  if(numIndex != intIndex || intIndex < 0 || intIndex + bytes > view[$LENGTH])throw RangeError(WRONG_INDEX);
+  var store = view[$BUFFER]._b
+    , start = intIndex + view[$OFFSET]
+    , pack  = conversion(+value);
+  for(var i = 0; i < bytes; i++)store[start + i] = pack[isLittleEndian ? i : bytes - i - 1];
+};
+
+var validateArrayBufferArguments = function(that, length){
+  anInstance(that, $ArrayBuffer, ARRAY_BUFFER);
+  var numberLength = +length
+    , byteLength   = toLength(numberLength);
+  if(numberLength != byteLength)throw RangeError(WRONG_LENGTH);
+  return byteLength;
+};
+
+if(!$typed.ABV){
+  $ArrayBuffer = function ArrayBuffer(length){
+    var byteLength = validateArrayBufferArguments(this, length);
+    this._b       = arrayFill.call(Array(byteLength), 0);
+    this[$LENGTH] = byteLength;
+  };
+
+  $DataView = function DataView(buffer, byteOffset, byteLength){
+    anInstance(this, $DataView, DATA_VIEW);
+    anInstance(buffer, $ArrayBuffer, DATA_VIEW);
+    var bufferLength = buffer[$LENGTH]
+      , offset       = toInteger(byteOffset);
+    if(offset < 0 || offset > bufferLength)throw RangeError('Wrong offset!');
+    byteLength = byteLength === undefined ? bufferLength - offset : toLength(byteLength);
+    if(offset + byteLength > bufferLength)throw RangeError(WRONG_LENGTH);
+    this[$BUFFER] = buffer;
+    this[$OFFSET] = offset;
+    this[$LENGTH] = byteLength;
+  };
+
+  if(DESCRIPTORS){
+    addGetter($ArrayBuffer, BYTE_LENGTH, '_l');
+    addGetter($DataView, BUFFER, '_b');
+    addGetter($DataView, BYTE_LENGTH, '_l');
+    addGetter($DataView, BYTE_OFFSET, '_o');
+  }
+
+  redefineAll($DataView[PROTOTYPE], {
+    getInt8: function getInt8(byteOffset){
+      return get(this, 1, byteOffset)[0] << 24 >> 24;
+    },
+    getUint8: function getUint8(byteOffset){
+      return get(this, 1, byteOffset)[0];
+    },
+    getInt16: function getInt16(byteOffset /*, littleEndian */){
+      var bytes = get(this, 2, byteOffset, arguments[1]);
+      return (bytes[1] << 8 | bytes[0]) << 16 >> 16;
+    },
+    getUint16: function getUint16(byteOffset /*, littleEndian */){
+      var bytes = get(this, 2, byteOffset, arguments[1]);
+      return bytes[1] << 8 | bytes[0];
+    },
+    getInt32: function getInt32(byteOffset /*, littleEndian */){
+      return unpackI32(get(this, 4, byteOffset, arguments[1]));
+    },
+    getUint32: function getUint32(byteOffset /*, littleEndian */){
+      return unpackI32(get(this, 4, byteOffset, arguments[1])) >>> 0;
+    },
+    getFloat32: function getFloat32(byteOffset /*, littleEndian */){
+      return unpackIEEE754(get(this, 4, byteOffset, arguments[1]), 23, 4);
+    },
+    getFloat64: function getFloat64(byteOffset /*, littleEndian */){
+      return unpackIEEE754(get(this, 8, byteOffset, arguments[1]), 52, 8);
+    },
+    setInt8: function setInt8(byteOffset, value){
+      set(this, 1, byteOffset, packI8, value);
+    },
+    setUint8: function setUint8(byteOffset, value){
+      set(this, 1, byteOffset, packI8, value);
+    },
+    setInt16: function setInt16(byteOffset, value /*, littleEndian */){
+      set(this, 2, byteOffset, packI16, value, arguments[2]);
+    },
+    setUint16: function setUint16(byteOffset, value /*, littleEndian */){
+      set(this, 2, byteOffset, packI16, value, arguments[2]);
+    },
+    setInt32: function setInt32(byteOffset, value /*, littleEndian */){
+      set(this, 4, byteOffset, packI32, value, arguments[2]);
+    },
+    setUint32: function setUint32(byteOffset, value /*, littleEndian */){
+      set(this, 4, byteOffset, packI32, value, arguments[2]);
+    },
+    setFloat32: function setFloat32(byteOffset, value /*, littleEndian */){
+      set(this, 4, byteOffset, packF32, value, arguments[2]);
+    },
+    setFloat64: function setFloat64(byteOffset, value /*, littleEndian */){
+      set(this, 8, byteOffset, packF64, value, arguments[2]);
+    }
+  });
+} else {
+  if(!fails(function(){
+    new $ArrayBuffer;     // eslint-disable-line no-new
+  }) || !fails(function(){
+    new $ArrayBuffer(.5); // eslint-disable-line no-new
+  })){
+    $ArrayBuffer = function ArrayBuffer(length){
+      return new BaseBuffer(validateArrayBufferArguments(this, length));
+    };
+    var ArrayBufferProto = $ArrayBuffer[PROTOTYPE] = BaseBuffer[PROTOTYPE];
+    for(var keys = gOPN(BaseBuffer), j = 0, key; keys.length > j; ){
+      if(!((key = keys[j++]) in $ArrayBuffer))hide($ArrayBuffer, key, BaseBuffer[key]);
+    };
+    if(!LIBRARY)ArrayBufferProto.constructor = $ArrayBuffer;
+  }
+  // iOS Safari 7.x bug
+  var view = new $DataView(new $ArrayBuffer(2))
+    , $setInt8 = $DataView[PROTOTYPE].setInt8;
+  view.setInt8(0, 2147483648);
+  view.setInt8(1, 2147483649);
+  if(view.getInt8(0) || !view.getInt8(1))redefineAll($DataView[PROTOTYPE], {
+    setInt8: function setInt8(byteOffset, value){
+      $setInt8.call(this, byteOffset, value << 24 >> 24);
+    },
+    setUint8: function setUint8(byteOffset, value){
+      $setInt8.call(this, byteOffset, value << 24 >> 24);
+    }
+  }, true);
+}
+setToStringTag($ArrayBuffer, ARRAY_BUFFER);
+setToStringTag($DataView, DATA_VIEW);
+hide($DataView[PROTOTYPE], $typed.VIEW, true);
+exports[ARRAY_BUFFER] = $ArrayBuffer;
+exports[DATA_VIEW] = $DataView;
+},{"./_an-instance":7,"./_array-fill":10,"./_descriptors":29,"./_fails":35,"./_global":39,"./_hide":41,"./_library":59,"./_object-dp":68,"./_object-gopn":73,"./_redefine-all":87,"./_set-to-string-tag":93,"./_to-integer":107,"./_to-length":109,"./_typed":114}],114:[function(require,module,exports){
+var global = require('./_global')
+  , hide   = require('./_hide')
+  , uid    = require('./_uid')
+  , TYPED  = uid('typed_array')
+  , VIEW   = uid('view')
+  , ABV    = !!(global.ArrayBuffer && global.DataView)
+  , CONSTR = ABV
+  , i = 0, l = 9, Typed;
+
+var TypedArrayConstructors = (
+  'Int8Array,Uint8Array,Uint8ClampedArray,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array'
+).split(',');
+
+while(i < l){
+  if(Typed = global[TypedArrayConstructors[i++]]){
+    hide(Typed.prototype, TYPED, true);
+    hide(Typed.prototype, VIEW, true);
+  } else CONSTR = false;
+}
+
+module.exports = {
+  ABV:    ABV,
+  CONSTR: CONSTR,
+  TYPED:  TYPED,
+  VIEW:   VIEW
+};
+},{"./_global":39,"./_hide":41,"./_uid":115}],115:[function(require,module,exports){
+var id = 0
+  , px = Math.random();
+module.exports = function(key){
+  return 'Symbol('.concat(key === undefined ? '' : key, ')_', (++id + px).toString(36));
+};
+},{}],116:[function(require,module,exports){
+var global         = require('./_global')
+  , core           = require('./_core')
+  , LIBRARY        = require('./_library')
+  , wksExt         = require('./_wks-ext')
+  , defineProperty = require('./_object-dp').f;
+module.exports = function(name){
+  var $Symbol = core.Symbol || (core.Symbol = LIBRARY ? {} : global.Symbol || {});
+  if(name.charAt(0) != '_' && !(name in $Symbol))defineProperty($Symbol, name, {value: wksExt.f(name)});
+};
+},{"./_core":24,"./_global":39,"./_library":59,"./_object-dp":68,"./_wks-ext":117}],117:[function(require,module,exports){
+exports.f = require('./_wks');
+},{"./_wks":118}],118:[function(require,module,exports){
+var store      = require('./_shared')('wks')
+  , uid        = require('./_uid')
+  , Symbol     = require('./_global').Symbol
+  , USE_SYMBOL = typeof Symbol == 'function';
+
+var $exports = module.exports = function(name){
+  return store[name] || (store[name] =
+    USE_SYMBOL && Symbol[name] || (USE_SYMBOL ? Symbol : uid)('Symbol.' + name));
+};
+
+$exports.store = store;
+},{"./_global":39,"./_shared":95,"./_uid":115}],119:[function(require,module,exports){
+var classof   = require('./_classof')
+  , ITERATOR  = require('./_wks')('iterator')
+  , Iterators = require('./_iterators');
+module.exports = require('./_core').getIteratorMethod = function(it){
+  if(it != undefined)return it[ITERATOR]
+    || it['@@iterator']
+    || Iterators[classof(it)];
+};
+},{"./_classof":18,"./_core":24,"./_iterators":57,"./_wks":118}],120:[function(require,module,exports){
+var classof   = require('./_classof')
+  , ITERATOR  = require('./_wks')('iterator')
+  , Iterators = require('./_iterators');
+module.exports = require('./_core').isIterable = function(it){
+  var O = Object(it);
+  return O[ITERATOR] !== undefined
+    || '@@iterator' in O
+    || Iterators.hasOwnProperty(classof(O));
+};
+},{"./_classof":18,"./_core":24,"./_iterators":57,"./_wks":118}],121:[function(require,module,exports){
+// https://github.com/benjamingr/RexExp.escape
+var $export = require('./_export')
+  , $re     = require('./_replacer')(/[\\^$*+?.()|[\]{}]/g, '\\$&');
+
+$export($export.S, 'RegExp', {escape: function escape(it){ return $re(it); }});
+
+},{"./_export":33,"./_replacer":89}],122:[function(require,module,exports){
+// 22.1.3.3 Array.prototype.copyWithin(target, start, end = this.length)
+var $export = require('./_export');
+
+$export($export.P, 'Array', {copyWithin: require('./_array-copy-within')});
+
+require('./_add-to-unscopables')('copyWithin');
+},{"./_add-to-unscopables":6,"./_array-copy-within":9,"./_export":33}],123:[function(require,module,exports){
+'use strict';
+var $export = require('./_export')
+  , $every  = require('./_array-methods')(4);
+
+$export($export.P + $export.F * !require('./_strict-method')([].every, true), 'Array', {
+  // 22.1.3.5 / 15.4.4.16 Array.prototype.every(callbackfn [, thisArg])
+  every: function every(callbackfn /* , thisArg */){
+    return $every(this, callbackfn, arguments[1]);
+  }
+});
+},{"./_array-methods":13,"./_export":33,"./_strict-method":97}],124:[function(require,module,exports){
+// 22.1.3.6 Array.prototype.fill(value, start = 0, end = this.length)
+var $export = require('./_export');
+
+$export($export.P, 'Array', {fill: require('./_array-fill')});
+
+require('./_add-to-unscopables')('fill');
+},{"./_add-to-unscopables":6,"./_array-fill":10,"./_export":33}],125:[function(require,module,exports){
+'use strict';
+var $export = require('./_export')
+  , $filter = require('./_array-methods')(2);
+
+$export($export.P + $export.F * !require('./_strict-method')([].filter, true), 'Array', {
+  // 22.1.3.7 / 15.4.4.20 Array.prototype.filter(callbackfn [, thisArg])
+  filter: function filter(callbackfn /* , thisArg */){
+    return $filter(this, callbackfn, arguments[1]);
+  }
+});
+},{"./_array-methods":13,"./_export":33,"./_strict-method":97}],126:[function(require,module,exports){
+'use strict';
+// 22.1.3.9 Array.prototype.findIndex(predicate, thisArg = undefined)
+var $export = require('./_export')
+  , $find   = require('./_array-methods')(6)
+  , KEY     = 'findIndex'
+  , forced  = true;
+// Shouldn't skip holes
+if(KEY in [])Array(1)[KEY](function(){ forced = false; });
+$export($export.P + $export.F * forced, 'Array', {
+  findIndex: function findIndex(callbackfn/*, that = undefined */){
+    return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);
+  }
+});
+require('./_add-to-unscopables')(KEY);
+},{"./_add-to-unscopables":6,"./_array-methods":13,"./_export":33}],127:[function(require,module,exports){
+'use strict';
+// 22.1.3.8 Array.prototype.find(predicate, thisArg = undefined)
+var $export = require('./_export')
+  , $find   = require('./_array-methods')(5)
+  , KEY     = 'find'
+  , forced  = true;
+// Shouldn't skip holes
+if(KEY in [])Array(1)[KEY](function(){ forced = false; });
+$export($export.P + $export.F * forced, 'Array', {
+  find: function find(callbackfn/*, that = undefined */){
+    return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);
+  }
+});
+require('./_add-to-unscopables')(KEY);
+},{"./_add-to-unscopables":6,"./_array-methods":13,"./_export":33}],128:[function(require,module,exports){
+'use strict';
+var $export  = require('./_export')
+  , $forEach = require('./_array-methods')(0)
+  , STRICT   = require('./_strict-method')([].forEach, true);
+
+$export($export.P + $export.F * !STRICT, 'Array', {
+  // 22.1.3.10 / 15.4.4.18 Array.prototype.forEach(callbackfn [, thisArg])
+  forEach: function forEach(callbackfn /* , thisArg */){
+    return $forEach(this, callbackfn, arguments[1]);
+  }
+});
+},{"./_array-methods":13,"./_export":33,"./_strict-method":97}],129:[function(require,module,exports){
+'use strict';
+var ctx            = require('./_ctx')
+  , $export        = require('./_export')
+  , toObject       = require('./_to-object')
+  , call           = require('./_iter-call')
+  , isArrayIter    = require('./_is-array-iter')
+  , toLength       = require('./_to-length')
+  , createProperty = require('./_create-property')
+  , getIterFn      = require('./core.get-iterator-method');
+
+$export($export.S + $export.F * !require('./_iter-detect')(function(iter){ Array.from(iter); }), 'Array', {
+  // 22.1.2.1 Array.from(arrayLike, mapfn = undefined, thisArg = undefined)
+  from: function from(arrayLike/*, mapfn = undefined, thisArg = undefined*/){
+    var O       = toObject(arrayLike)
+      , C       = typeof this == 'function' ? this : Array
+      , aLen    = arguments.length
+      , mapfn   = aLen > 1 ? arguments[1] : undefined
+      , mapping = mapfn !== undefined
+      , index   = 0
+      , iterFn  = getIterFn(O)
+      , length, result, step, iterator;
+    if(mapping)mapfn = ctx(mapfn, aLen > 2 ? arguments[2] : undefined, 2);
+    // if object isn't iterable or it's array with default iterator - use simple case
+    if(iterFn != undefined && !(C == Array && isArrayIter(iterFn))){
+      for(iterator = iterFn.call(O), result = new C; !(step = iterator.next()).done; index++){
+        createProperty(result, index, mapping ? call(iterator, mapfn, [step.value, index], true) : step.value);
+      }
+    } else {
+      length = toLength(O.length);
+      for(result = new C(length); length > index; index++){
+        createProperty(result, index, mapping ? mapfn(O[index], index) : O[index]);
+      }
+    }
+    result.length = index;
+    return result;
+  }
+});
+
+},{"./_create-property":25,"./_ctx":26,"./_export":33,"./_is-array-iter":47,"./_iter-call":52,"./_iter-detect":55,"./_to-length":109,"./_to-object":110,"./core.get-iterator-method":119}],130:[function(require,module,exports){
+'use strict';
+var $export       = require('./_export')
+  , $indexOf      = require('./_array-includes')(false)
+  , $native       = [].indexOf
+  , NEGATIVE_ZERO = !!$native && 1 / [1].indexOf(1, -0) < 0;
+
+$export($export.P + $export.F * (NEGATIVE_ZERO || !require('./_strict-method')($native)), 'Array', {
+  // 22.1.3.11 / 15.4.4.14 Array.prototype.indexOf(searchElement [, fromIndex])
+  indexOf: function indexOf(searchElement /*, fromIndex = 0 */){
+    return NEGATIVE_ZERO
+      // convert -0 to +0
+      ? $native.apply(this, arguments) || 0
+      : $indexOf(this, searchElement, arguments[1]);
+  }
+});
+},{"./_array-includes":12,"./_export":33,"./_strict-method":97}],131:[function(require,module,exports){
+// 22.1.2.2 / 15.4.3.2 Array.isArray(arg)
+var $export = require('./_export');
+
+$export($export.S, 'Array', {isArray: require('./_is-array')});
+},{"./_export":33,"./_is-array":48}],132:[function(require,module,exports){
+'use strict';
+var addToUnscopables = require('./_add-to-unscopables')
+  , step             = require('./_iter-step')
+  , Iterators        = require('./_iterators')
+  , toIObject        = require('./_to-iobject');
+
+// 22.1.3.4 Array.prototype.entries()
+// 22.1.3.13 Array.prototype.keys()
+// 22.1.3.29 Array.prototype.values()
+// 22.1.3.30 Array.prototype[@@iterator]()
+module.exports = require('./_iter-define')(Array, 'Array', function(iterated, kind){
+  this._t = toIObject(iterated); // target
+  this._i = 0;                   // next index
+  this._k = kind;                // kind
+// 22.1.5.2.1 %ArrayIteratorPrototype%.next()
+}, function(){
+  var O     = this._t
+    , kind  = this._k
+    , index = this._i++;
+  if(!O || index >= O.length){
+    this._t = undefined;
+    return step(1);
+  }
+  if(kind == 'keys'  )return step(0, index);
+  if(kind == 'values')return step(0, O[index]);
+  return step(0, [index, O[index]]);
+}, 'values');
+
+// argumentsList[@@iterator] is %ArrayProto_values% (9.4.4.6, 9.4.4.7)
+Iterators.Arguments = Iterators.Array;
+
+addToUnscopables('keys');
+addToUnscopables('values');
+addToUnscopables('entries');
+},{"./_add-to-unscopables":6,"./_iter-define":54,"./_iter-step":56,"./_iterators":57,"./_to-iobject":108}],133:[function(require,module,exports){
+'use strict';
+// 22.1.3.13 Array.prototype.join(separator)
+var $export   = require('./_export')
+  , toIObject = require('./_to-iobject')
+  , arrayJoin = [].join;
+
+// fallback for not array-like strings
+$export($export.P + $export.F * (require('./_iobject') != Object || !require('./_strict-method')(arrayJoin)), 'Array', {
+  join: function join(separator){
+    return arrayJoin.call(toIObject(this), separator === undefined ? ',' : separator);
+  }
+});
+},{"./_export":33,"./_iobject":46,"./_strict-method":97,"./_to-iobject":108}],134:[function(require,module,exports){
+'use strict';
+var $export       = require('./_export')
+  , toIObject     = require('./_to-iobject')
+  , toInteger     = require('./_to-integer')
+  , toLength      = require('./_to-length')
+  , $native       = [].lastIndexOf
+  , NEGATIVE_ZERO = !!$native && 1 / [1].lastIndexOf(1, -0) < 0;
+
+$export($export.P + $export.F * (NEGATIVE_ZERO || !require('./_strict-method')($native)), 'Array', {
+  // 22.1.3.14 / 15.4.4.15 Array.prototype.lastIndexOf(searchElement [, fromIndex])
+  lastIndexOf: function lastIndexOf(searchElement /*, fromIndex = @[*-1] */){
+    // convert -0 to +0
+    if(NEGATIVE_ZERO)return $native.apply(this, arguments) || 0;
+    var O      = toIObject(this)
+      , length = toLength(O.length)
+      , index  = length - 1;
+    if(arguments.length > 1)index = Math.min(index, toInteger(arguments[1]));
+    if(index < 0)index = length + index;
+    for(;index >= 0; index--)if(index in O)if(O[index] === searchElement)return index || 0;
+    return -1;
+  }
+});
+},{"./_export":33,"./_strict-method":97,"./_to-integer":107,"./_to-iobject":108,"./_to-length":109}],135:[function(require,module,exports){
+'use strict';
+var $export = require('./_export')
+  , $map    = require('./_array-methods')(1);
+
+$export($export.P + $export.F * !require('./_strict-method')([].map, true), 'Array', {
+  // 22.1.3.15 / 15.4.4.19 Array.prototype.map(callbackfn [, thisArg])
+  map: function map(callbackfn /* , thisArg */){
+    return $map(this, callbackfn, arguments[1]);
+  }
+});
+},{"./_array-methods":13,"./_export":33,"./_strict-method":97}],136:[function(require,module,exports){
+'use strict';
+var $export        = require('./_export')
+  , createProperty = require('./_create-property');
+
+// WebKit Array.of isn't generic
+$export($export.S + $export.F * require('./_fails')(function(){
+  function F(){}
+  return !(Array.of.call(F) instanceof F);
+}), 'Array', {
+  // 22.1.2.3 Array.of( ...items)
+  of: function of(/* ...args */){
+    var index  = 0
+      , aLen   = arguments.length
+      , result = new (typeof this == 'function' ? this : Array)(aLen);
+    while(aLen > index)createProperty(result, index, arguments[index++]);
+    result.length = aLen;
+    return result;
+  }
+});
+},{"./_create-property":25,"./_export":33,"./_fails":35}],137:[function(require,module,exports){
+'use strict';
+var $export = require('./_export')
+  , $reduce = require('./_array-reduce');
+
+$export($export.P + $export.F * !require('./_strict-method')([].reduceRight, true), 'Array', {
+  // 22.1.3.19 / 15.4.4.22 Array.prototype.reduceRight(callbackfn [, initialValue])
+  reduceRight: function reduceRight(callbackfn /* , initialValue */){
+    return $reduce(this, callbackfn, arguments.length, arguments[1], true);
+  }
+});
+},{"./_array-reduce":14,"./_export":33,"./_strict-method":97}],138:[function(require,module,exports){
+'use strict';
+var $export = require('./_export')
+  , $reduce = require('./_array-reduce');
+
+$export($export.P + $export.F * !require('./_strict-method')([].reduce, true), 'Array', {
+  // 22.1.3.18 / 15.4.4.21 Array.prototype.reduce(callbackfn [, initialValue])
+  reduce: function reduce(callbackfn /* , initialValue */){
+    return $reduce(this, callbackfn, arguments.length, arguments[1], false);
+  }
+});
+},{"./_array-reduce":14,"./_export":33,"./_strict-method":97}],139:[function(require,module,exports){
+'use strict';
+var $export    = require('./_export')
+  , html       = require('./_html')
+  , cof        = require('./_cof')
+  , toIndex    = require('./_to-index')
+  , toLength   = require('./_to-length')
+  , arraySlice = [].slice;
+
+// fallback for not array-like ES3 strings and DOM objects
+$export($export.P + $export.F * require('./_fails')(function(){
+  if(html)arraySlice.call(html);
+}), 'Array', {
+  slice: function slice(begin, end){
+    var len   = toLength(this.length)
+      , klass = cof(this);
+    end = end === undefined ? len : end;
+    if(klass == 'Array')return arraySlice.call(this, begin, end);
+    var start  = toIndex(begin, len)
+      , upTo   = toIndex(end, len)
+      , size   = toLength(upTo - start)
+      , cloned = Array(size)
+      , i      = 0;
+    for(; i < size; i++)cloned[i] = klass == 'String'
+      ? this.charAt(start + i)
+      : this[start + i];
+    return cloned;
+  }
+});
+},{"./_cof":19,"./_export":33,"./_fails":35,"./_html":42,"./_to-index":106,"./_to-length":109}],140:[function(require,module,exports){
+'use strict';
+var $export = require('./_export')
+  , $some   = require('./_array-methods')(3);
+
+$export($export.P + $export.F * !require('./_strict-method')([].some, true), 'Array', {
+  // 22.1.3.23 / 15.4.4.17 Array.prototype.some(callbackfn [, thisArg])
+  some: function some(callbackfn /* , thisArg */){
+    return $some(this, callbackfn, arguments[1]);
+  }
+});
+},{"./_array-methods":13,"./_export":33,"./_strict-method":97}],141:[function(require,module,exports){
+'use strict';
+var $export   = require('./_export')
+  , aFunction = require('./_a-function')
+  , toObject  = require('./_to-object')
+  , fails     = require('./_fails')
+  , $sort     = [].sort
+  , test      = [1, 2, 3];
+
+$export($export.P + $export.F * (fails(function(){
+  // IE8-
+  test.sort(undefined);
+}) || !fails(function(){
+  // V8 bug
+  test.sort(null);
+  // Old WebKit
+}) || !require('./_strict-method')($sort)), 'Array', {
+  // 22.1.3.25 Array.prototype.sort(comparefn)
+  sort: function sort(comparefn){
+    return comparefn === undefined
+      ? $sort.call(toObject(this))
+      : $sort.call(toObject(this), aFunction(comparefn));
+  }
+});
+},{"./_a-function":4,"./_export":33,"./_fails":35,"./_strict-method":97,"./_to-object":110}],142:[function(require,module,exports){
+require('./_set-species')('Array');
+},{"./_set-species":92}],143:[function(require,module,exports){
+// 20.3.3.1 / 15.9.4.4 Date.now()
+var $export = require('./_export');
+
+$export($export.S, 'Date', {now: function(){ return new Date().getTime(); }});
+},{"./_export":33}],144:[function(require,module,exports){
+'use strict';
+// 20.3.4.36 / 15.9.5.43 Date.prototype.toISOString()
+var $export = require('./_export')
+  , fails   = require('./_fails')
+  , getTime = Date.prototype.getTime;
+
+var lz = function(num){
+  return num > 9 ? num : '0' + num;
+};
+
+// PhantomJS / old WebKit has a broken implementations
+$export($export.P + $export.F * (fails(function(){
+  return new Date(-5e13 - 1).toISOString() != '0385-07-25T07:06:39.999Z';
+}) || !fails(function(){
+  new Date(NaN).toISOString();
+})), 'Date', {
+  toISOString: function toISOString(){
+    if(!isFinite(getTime.call(this)))throw RangeError('Invalid time value');
+    var d = this
+      , y = d.getUTCFullYear()
+      , m = d.getUTCMilliseconds()
+      , s = y < 0 ? '-' : y > 9999 ? '+' : '';
+    return s + ('00000' + Math.abs(y)).slice(s ? -6 : -4) +
+      '-' + lz(d.getUTCMonth() + 1) + '-' + lz(d.getUTCDate()) +
+      'T' + lz(d.getUTCHours()) + ':' + lz(d.getUTCMinutes()) +
+      ':' + lz(d.getUTCSeconds()) + '.' + (m > 99 ? m : '0' + lz(m)) + 'Z';
+  }
+});
+},{"./_export":33,"./_fails":35}],145:[function(require,module,exports){
+'use strict';
+var $export     = require('./_export')
+  , toObject    = require('./_to-object')
+  , toPrimitive = require('./_to-primitive');
+
+$export($export.P + $export.F * require('./_fails')(function(){
+  return new Date(NaN).toJSON() !== null || Date.prototype.toJSON.call({toISOString: function(){ return 1; }}) !== 1;
+}), 'Date', {
+  toJSON: function toJSON(key){
+    var O  = toObject(this)
+      , pv = toPrimitive(O);
+    return typeof pv == 'number' && !isFinite(pv) ? null : O.toISOString();
+  }
+});
+},{"./_export":33,"./_fails":35,"./_to-object":110,"./_to-primitive":111}],146:[function(require,module,exports){
+var TO_PRIMITIVE = require('./_wks')('toPrimitive')
+  , proto        = Date.prototype;
+
+if(!(TO_PRIMITIVE in proto))require('./_hide')(proto, TO_PRIMITIVE, require('./_date-to-primitive'));
+},{"./_date-to-primitive":27,"./_hide":41,"./_wks":118}],147:[function(require,module,exports){
+var DateProto    = Date.prototype
+  , INVALID_DATE = 'Invalid Date'
+  , TO_STRING    = 'toString'
+  , $toString    = DateProto[TO_STRING]
+  , getTime      = DateProto.getTime;
+if(new Date(NaN) + '' != INVALID_DATE){
+  require('./_redefine')(DateProto, TO_STRING, function toString(){
+    var value = getTime.call(this);
+    return value === value ? $toString.call(this) : INVALID_DATE;
+  });
+}
+},{"./_redefine":88}],148:[function(require,module,exports){
+// 19.2.3.2 / 15.3.4.5 Function.prototype.bind(thisArg, args...)
+var $export = require('./_export');
+
+$export($export.P, 'Function', {bind: require('./_bind')});
+},{"./_bind":17,"./_export":33}],149:[function(require,module,exports){
+'use strict';
+var isObject       = require('./_is-object')
+  , getPrototypeOf = require('./_object-gpo')
+  , HAS_INSTANCE   = require('./_wks')('hasInstance')
+  , FunctionProto  = Function.prototype;
+// 19.2.3.6 Function.prototype[@@hasInstance](V)
+if(!(HAS_INSTANCE in FunctionProto))require('./_object-dp').f(FunctionProto, HAS_INSTANCE, {value: function(O){
+  if(typeof this != 'function' || !isObject(O))return false;
+  if(!isObject(this.prototype))return O instanceof this;
+  // for environment w/o native `@@hasInstance` logic enough `instanceof`, but add this:
+  while(O = getPrototypeOf(O))if(this.prototype === O)return true;
+  return false;
+}});
+},{"./_is-object":50,"./_object-dp":68,"./_object-gpo":75,"./_wks":118}],150:[function(require,module,exports){
+var dP         = require('./_object-dp').f
+  , createDesc = require('./_property-desc')
+  , has        = require('./_has')
+  , FProto     = Function.prototype
+  , nameRE     = /^\s*function ([^ (]*)/
+  , NAME       = 'name';
+
+var isExtensible = Object.isExtensible || function(){
+  return true;
+};
+
+// 19.2.4.2 name
+NAME in FProto || require('./_descriptors') && dP(FProto, NAME, {
+  configurable: true,
+  get: function(){
+    try {
+      var that = this
+        , name = ('' + that).match(nameRE)[1];
+      has(that, NAME) || !isExtensible(that) || dP(that, NAME, createDesc(5, name));
+      return name;
+    } catch(e){
+      return '';
+    }
+  }
+});
+},{"./_descriptors":29,"./_has":40,"./_object-dp":68,"./_property-desc":86}],151:[function(require,module,exports){
+'use strict';
+var strong = require('./_collection-strong');
+
+// 23.1 Map Objects
+module.exports = require('./_collection')('Map', function(get){
+  return function Map(){ return get(this, arguments.length > 0 ? arguments[0] : undefined); };
+}, {
+  // 23.1.3.6 Map.prototype.get(key)
+  get: function get(key){
+    var entry = strong.getEntry(this, key);
+    return entry && entry.v;
+  },
+  // 23.1.3.9 Map.prototype.set(key, value)
+  set: function set(key, value){
+    return strong.def(this, key === 0 ? 0 : key, value);
+  }
+}, strong, true);
+},{"./_collection":23,"./_collection-strong":20}],152:[function(require,module,exports){
+// 20.2.2.3 Math.acosh(x)
+var $export = require('./_export')
+  , log1p   = require('./_math-log1p')
+  , sqrt    = Math.sqrt
+  , $acosh  = Math.acosh;
+
+$export($export.S + $export.F * !($acosh
+  // V8 bug: https://code.google.com/p/v8/issues/detail?id=3509
+  && Math.floor($acosh(Number.MAX_VALUE)) == 710
+  // Tor Browser bug: Math.acosh(Infinity) -> NaN 
+  && $acosh(Infinity) == Infinity
+), 'Math', {
+  acosh: function acosh(x){
+    return (x = +x) < 1 ? NaN : x > 94906265.62425156
+      ? Math.log(x) + Math.LN2
+      : log1p(x - 1 + sqrt(x - 1) * sqrt(x + 1));
+  }
+});
+},{"./_export":33,"./_math-log1p":61}],153:[function(require,module,exports){
+// 20.2.2.5 Math.asinh(x)
+var $export = require('./_export')
+  , $asinh  = Math.asinh;
+
+function asinh(x){
+  return !isFinite(x = +x) || x == 0 ? x : x < 0 ? -asinh(-x) : Math.log(x + Math.sqrt(x * x + 1));
+}
+
+// Tor Browser bug: Math.asinh(0) -> -0 
+$export($export.S + $export.F * !($asinh && 1 / $asinh(0) > 0), 'Math', {asinh: asinh});
+},{"./_export":33}],154:[function(require,module,exports){
+// 20.2.2.7 Math.atanh(x)
+var $export = require('./_export')
+  , $atanh  = Math.atanh;
+
+// Tor Browser bug: Math.atanh(-0) -> 0 
+$export($export.S + $export.F * !($atanh && 1 / $atanh(-0) < 0), 'Math', {
+  atanh: function atanh(x){
+    return (x = +x) == 0 ? x : Math.log((1 + x) / (1 - x)) / 2;
+  }
+});
+},{"./_export":33}],155:[function(require,module,exports){
+// 20.2.2.9 Math.cbrt(x)
+var $export = require('./_export')
+  , sign    = require('./_math-sign');
+
+$export($export.S, 'Math', {
+  cbrt: function cbrt(x){
+    return sign(x = +x) * Math.pow(Math.abs(x), 1 / 3);
+  }
+});
+},{"./_export":33,"./_math-sign":62}],156:[function(require,module,exports){
+// 20.2.2.11 Math.clz32(x)
+var $export = require('./_export');
+
+$export($export.S, 'Math', {
+  clz32: function clz32(x){
+    return (x >>>= 0) ? 31 - Math.floor(Math.log(x + 0.5) * Math.LOG2E) : 32;
+  }
+});
+},{"./_export":33}],157:[function(require,module,exports){
+// 20.2.2.12 Math.cosh(x)
+var $export = require('./_export')
+  , exp     = Math.exp;
+
+$export($export.S, 'Math', {
+  cosh: function cosh(x){
+    return (exp(x = +x) + exp(-x)) / 2;
+  }
+});
+},{"./_export":33}],158:[function(require,module,exports){
+// 20.2.2.14 Math.expm1(x)
+var $export = require('./_export')
+  , $expm1  = require('./_math-expm1');
+
+$export($export.S + $export.F * ($expm1 != Math.expm1), 'Math', {expm1: $expm1});
+},{"./_export":33,"./_math-expm1":60}],159:[function(require,module,exports){
+// 20.2.2.16 Math.fround(x)
+var $export   = require('./_export')
+  , sign      = require('./_math-sign')
+  , pow       = Math.pow
+  , EPSILON   = pow(2, -52)
+  , EPSILON32 = pow(2, -23)
+  , MAX32     = pow(2, 127) * (2 - EPSILON32)
+  , MIN32     = pow(2, -126);
+
+var roundTiesToEven = function(n){
+  return n + 1 / EPSILON - 1 / EPSILON;
+};
+
+
+$export($export.S, 'Math', {
+  fround: function fround(x){
+    var $abs  = Math.abs(x)
+      , $sign = sign(x)
+      , a, result;
+    if($abs < MIN32)return $sign * roundTiesToEven($abs / MIN32 / EPSILON32) * MIN32 * EPSILON32;
+    a = (1 + EPSILON32 / EPSILON) * $abs;
+    result = a - (a - $abs);
+    if(result > MAX32 || result != result)return $sign * Infinity;
+    return $sign * result;
+  }
+});
+},{"./_export":33,"./_math-sign":62}],160:[function(require,module,exports){
+// 20.2.2.17 Math.hypot([value1[, value2[, … ]]])
+var $export = require('./_export')
+  , abs     = Math.abs;
+
+$export($export.S, 'Math', {
+  hypot: function hypot(value1, value2){ // eslint-disable-line no-unused-vars
+    var sum  = 0
+      , i    = 0
+      , aLen = arguments.length
+      , larg = 0
+      , arg, div;
+    while(i < aLen){
+      arg = abs(arguments[i++]);
+      if(larg < arg){
+        div  = larg / arg;
+        sum  = sum * div * div + 1;
+        larg = arg;
+      } else if(arg > 0){
+        div  = arg / larg;
+        sum += div * div;
+      } else sum += arg;
+    }
+    return larg === Infinity ? Infinity : larg * Math.sqrt(sum);
+  }
+});
+},{"./_export":33}],161:[function(require,module,exports){
+// 20.2.2.18 Math.imul(x, y)
+var $export = require('./_export')
+  , $imul   = Math.imul;
+
+// some WebKit versions fails with big numbers, some has wrong arity
+$export($export.S + $export.F * require('./_fails')(function(){
+  return $imul(0xffffffff, 5) != -5 || $imul.length != 2;
+}), 'Math', {
+  imul: function imul(x, y){
+    var UINT16 = 0xffff
+      , xn = +x
+      , yn = +y
+      , xl = UINT16 & xn
+      , yl = UINT16 & yn;
+    return 0 | xl * yl + ((UINT16 & xn >>> 16) * yl + xl * (UINT16 & yn >>> 16) << 16 >>> 0);
+  }
+});
+},{"./_export":33,"./_fails":35}],162:[function(require,module,exports){
+// 20.2.2.21 Math.log10(x)
+var $export = require('./_export');
+
+$export($export.S, 'Math', {
+  log10: function log10(x){
+    return Math.log(x) / Math.LN10;
+  }
+});
+},{"./_export":33}],163:[function(require,module,exports){
+// 20.2.2.20 Math.log1p(x)
+var $export = require('./_export');
+
+$export($export.S, 'Math', {log1p: require('./_math-log1p')});
+},{"./_export":33,"./_math-log1p":61}],164:[function(require,module,exports){
+// 20.2.2.22 Math.log2(x)
+var $export = require('./_export');
+
+$export($export.S, 'Math', {
+  log2: function log2(x){
+    return Math.log(x) / Math.LN2;
+  }
+});
+},{"./_export":33}],165:[function(require,module,exports){
+// 20.2.2.28 Math.sign(x)
+var $export = require('./_export');
+
+$export($export.S, 'Math', {sign: require('./_math-sign')});
+},{"./_export":33,"./_math-sign":62}],166:[function(require,module,exports){
+// 20.2.2.30 Math.sinh(x)
+var $export = require('./_export')
+  , expm1   = require('./_math-expm1')
+  , exp     = Math.exp;
+
+// V8 near Chromium 38 has a problem with very small numbers
+$export($export.S + $export.F * require('./_fails')(function(){
+  return !Math.sinh(-2e-17) != -2e-17;
+}), 'Math', {
+  sinh: function sinh(x){
+    return Math.abs(x = +x) < 1
+      ? (expm1(x) - expm1(-x)) / 2
+      : (exp(x - 1) - exp(-x - 1)) * (Math.E / 2);
+  }
+});
+},{"./_export":33,"./_fails":35,"./_math-expm1":60}],167:[function(require,module,exports){
+// 20.2.2.33 Math.tanh(x)
+var $export = require('./_export')
+  , expm1   = require('./_math-expm1')
+  , exp     = Math.exp;
+
+$export($export.S, 'Math', {
+  tanh: function tanh(x){
+    var a = expm1(x = +x)
+      , b = expm1(-x);
+    return a == Infinity ? 1 : b == Infinity ? -1 : (a - b) / (exp(x) + exp(-x));
+  }
+});
+},{"./_export":33,"./_math-expm1":60}],168:[function(require,module,exports){
+// 20.2.2.34 Math.trunc(x)
+var $export = require('./_export');
+
+$export($export.S, 'Math', {
+  trunc: function trunc(it){
+    return (it > 0 ? Math.floor : Math.ceil)(it);
+  }
+});
+},{"./_export":33}],169:[function(require,module,exports){
+'use strict';
+var global            = require('./_global')
+  , has               = require('./_has')
+  , cof               = require('./_cof')
+  , inheritIfRequired = require('./_inherit-if-required')
+  , toPrimitive       = require('./_to-primitive')
+  , fails             = require('./_fails')
+  , gOPN              = require('./_object-gopn').f
+  , gOPD              = require('./_object-gopd').f
+  , dP                = require('./_object-dp').f
+  , $trim             = require('./_string-trim').trim
+  , NUMBER            = 'Number'
+  , $Number           = global[NUMBER]
+  , Base              = $Number
+  , proto             = $Number.prototype
+  // Opera ~12 has broken Object#toString
+  , BROKEN_COF        = cof(require('./_object-create')(proto)) == NUMBER
+  , TRIM              = 'trim' in String.prototype;
+
+// 7.1.3 ToNumber(argument)
+var toNumber = function(argument){
+  var it = toPrimitive(argument, false);
+  if(typeof it == 'string' && it.length > 2){
+    it = TRIM ? it.trim() : $trim(it, 3);
+    var first = it.charCodeAt(0)
+      , third, radix, maxCode;
+    if(first === 43 || first === 45){
+      third = it.charCodeAt(2);
+      if(third === 88 || third === 120)return NaN; // Number('+0x1') should be NaN, old V8 fix
+    } else if(first === 48){
+      switch(it.charCodeAt(1)){
+        case 66 : case 98  : radix = 2; maxCode = 49; break; // fast equal /^0b[01]+$/i
+        case 79 : case 111 : radix = 8; maxCode = 55; break; // fast equal /^0o[0-7]+$/i
+        default : return +it;
+      }
+      for(var digits = it.slice(2), i = 0, l = digits.length, code; i < l; i++){
+        code = digits.charCodeAt(i);
+        // parseInt parses a string to a first unavailable symbol
+        // but ToNumber should return NaN if a string contains unavailable symbols
+        if(code < 48 || code > maxCode)return NaN;
+      } return parseInt(digits, radix);
+    }
+  } return +it;
+};
+
+if(!$Number(' 0o1') || !$Number('0b1') || $Number('+0x1')){
+  $Number = function Number(value){
+    var it = arguments.length < 1 ? 0 : value
+      , that = this;
+    return that instanceof $Number
+      // check on 1..constructor(foo) case
+      && (BROKEN_COF ? fails(function(){ proto.valueOf.call(that); }) : cof(that) != NUMBER)
+        ? inheritIfRequired(new Base(toNumber(it)), that, $Number) : toNumber(it);
+  };
+  for(var keys = require('./_descriptors') ? gOPN(Base) : (
+    // ES3:
+    'MAX_VALUE,MIN_VALUE,NaN,NEGATIVE_INFINITY,POSITIVE_INFINITY,' +
+    // ES6 (in case, if modules with ES6 Number statics required before):
+    'EPSILON,isFinite,isInteger,isNaN,isSafeInteger,MAX_SAFE_INTEGER,' +
+    'MIN_SAFE_INTEGER,parseFloat,parseInt,isInteger'
+  ).split(','), j = 0, key; keys.length > j; j++){
+    if(has(Base, key = keys[j]) && !has($Number, key)){
+      dP($Number, key, gOPD(Base, key));
+    }
+  }
+  $Number.prototype = proto;
+  proto.constructor = $Number;
+  require('./_redefine')(global, NUMBER, $Number);
+}
+},{"./_cof":19,"./_descriptors":29,"./_fails":35,"./_global":39,"./_has":40,"./_inherit-if-required":44,"./_object-create":67,"./_object-dp":68,"./_object-gopd":71,"./_object-gopn":73,"./_redefine":88,"./_string-trim":103,"./_to-primitive":111}],170:[function(require,module,exports){
+// 20.1.2.1 Number.EPSILON
+var $export = require('./_export');
+
+$export($export.S, 'Number', {EPSILON: Math.pow(2, -52)});
+},{"./_export":33}],171:[function(require,module,exports){
+// 20.1.2.2 Number.isFinite(number)
+var $export   = require('./_export')
+  , _isFinite = require('./_global').isFinite;
+
+$export($export.S, 'Number', {
+  isFinite: function isFinite(it){
+    return typeof it == 'number' && _isFinite(it);
+  }
+});
+},{"./_export":33,"./_global":39}],172:[function(require,module,exports){
+// 20.1.2.3 Number.isInteger(number)
+var $export = require('./_export');
+
+$export($export.S, 'Number', {isInteger: require('./_is-integer')});
+},{"./_export":33,"./_is-integer":49}],173:[function(require,module,exports){
+// 20.1.2.4 Number.isNaN(number)
+var $export = require('./_export');
+
+$export($export.S, 'Number', {
+  isNaN: function isNaN(number){
+    return number != number;
+  }
+});
+},{"./_export":33}],174:[function(require,module,exports){
+// 20.1.2.5 Number.isSafeInteger(number)
+var $export   = require('./_export')
+  , isInteger = require('./_is-integer')
+  , abs       = Math.abs;
+
+$export($export.S, 'Number', {
+  isSafeInteger: function isSafeInteger(number){
+    return isInteger(number) && abs(number) <= 0x1fffffffffffff;
+  }
+});
+},{"./_export":33,"./_is-integer":49}],175:[function(require,module,exports){
+// 20.1.2.6 Number.MAX_SAFE_INTEGER
+var $export = require('./_export');
+
+$export($export.S, 'Number', {MAX_SAFE_INTEGER: 0x1fffffffffffff});
+},{"./_export":33}],176:[function(require,module,exports){
+// 20.1.2.10 Number.MIN_SAFE_INTEGER
+var $export = require('./_export');
+
+$export($export.S, 'Number', {MIN_SAFE_INTEGER: -0x1fffffffffffff});
+},{"./_export":33}],177:[function(require,module,exports){
+var $export     = require('./_export')
+  , $parseFloat = require('./_parse-float');
+// 20.1.2.12 Number.parseFloat(string)
+$export($export.S + $export.F * (Number.parseFloat != $parseFloat), 'Number', {parseFloat: $parseFloat});
+},{"./_export":33,"./_parse-float":82}],178:[function(require,module,exports){
+var $export   = require('./_export')
+  , $parseInt = require('./_parse-int');
+// 20.1.2.13 Number.parseInt(string, radix)
+$export($export.S + $export.F * (Number.parseInt != $parseInt), 'Number', {parseInt: $parseInt});
+},{"./_export":33,"./_parse-int":83}],179:[function(require,module,exports){
+'use strict';
+var $export      = require('./_export')
+  , anInstance   = require('./_an-instance')
+  , toInteger    = require('./_to-integer')
+  , aNumberValue = require('./_a-number-value')
+  , repeat       = require('./_string-repeat')
+  , $toFixed     = 1..toFixed
+  , floor        = Math.floor
+  , data         = [0, 0, 0, 0, 0, 0]
+  , ERROR        = 'Number.toFixed: incorrect invocation!'
+  , ZERO         = '0';
+
+var multiply = function(n, c){
+  var i  = -1
+    , c2 = c;
+  while(++i < 6){
+    c2 += n * data[i];
+    data[i] = c2 % 1e7;
+    c2 = floor(c2 / 1e7);
+  }
+};
+var divide = function(n){
+  var i = 6
+    , c = 0;
+  while(--i >= 0){
+    c += data[i];
+    data[i] = floor(c / n);
+    c = (c % n) * 1e7;
+  }
+};
+var numToString = function(){
+  var i = 6
+    , s = '';
+  while(--i >= 0){
+    if(s !== '' || i === 0 || data[i] !== 0){
+      var t = String(data[i]);
+      s = s === '' ? t : s + repeat.call(ZERO, 7 - t.length) + t;
+    }
+  } return s;
+};
+var pow = function(x, n, acc){
+  return n === 0 ? acc : n % 2 === 1 ? pow(x, n - 1, acc * x) : pow(x * x, n / 2, acc);
+};
+var log = function(x){
+  var n  = 0
+    , x2 = x;
+  while(x2 >= 4096){
+    n += 12;
+    x2 /= 4096;
+  }
+  while(x2 >= 2){
+    n  += 1;
+    x2 /= 2;
+  } return n;
+};
+
+$export($export.P + $export.F * (!!$toFixed && (
+  0.00008.toFixed(3) !== '0.000' ||
+  0.9.toFixed(0) !== '1' ||
+  1.255.toFixed(2) !== '1.25' ||
+  1000000000000000128..toFixed(0) !== '1000000000000000128'
+) || !require('./_fails')(function(){
+  // V8 ~ Android 4.3-
+  $toFixed.call({});
+})), 'Number', {
+  toFixed: function toFixed(fractionDigits){
+    var x = aNumberValue(this, ERROR)
+      , f = toInteger(fractionDigits)
+      , s = ''
+      , m = ZERO
+      , e, z, j, k;
+    if(f < 0 || f > 20)throw RangeError(ERROR);
+    if(x != x)return 'NaN';
+    if(x <= -1e21 || x >= 1e21)return String(x);
+    if(x < 0){
+      s = '-';
+      x = -x;
+    }
+    if(x > 1e-21){
+      e = log(x * pow(2, 69, 1)) - 69;
+      z = e < 0 ? x * pow(2, -e, 1) : x / pow(2, e, 1);
+      z *= 0x10000000000000;
+      e = 52 - e;
+      if(e > 0){
+        multiply(0, z);
+        j = f;
+        while(j >= 7){
+          multiply(1e7, 0);
+          j -= 7;
+        }
+        multiply(pow(10, j, 1), 0);
+        j = e - 1;
+        while(j >= 23){
+          divide(1 << 23);
+          j -= 23;
+        }
+        divide(1 << j);
+        multiply(1, 1);
+        divide(2);
+        m = numToString();
+      } else {
+        multiply(0, z);
+        multiply(1 << -e, 0);
+        m = numToString() + repeat.call(ZERO, f);
+      }
+    }
+    if(f > 0){
+      k = m.length;
+      m = s + (k <= f ? '0.' + repeat.call(ZERO, f - k) + m : m.slice(0, k - f) + '.' + m.slice(k - f));
+    } else {
+      m = s + m;
+    } return m;
+  }
+});
+},{"./_a-number-value":5,"./_an-instance":7,"./_export":33,"./_fails":35,"./_string-repeat":102,"./_to-integer":107}],180:[function(require,module,exports){
+'use strict';
+var $export      = require('./_export')
+  , $fails       = require('./_fails')
+  , aNumberValue = require('./_a-number-value')
+  , $toPrecision = 1..toPrecision;
+
+$export($export.P + $export.F * ($fails(function(){
+  // IE7-
+  return $toPrecision.call(1, undefined) !== '1';
+}) || !$fails(function(){
+  // V8 ~ Android 4.3-
+  $toPrecision.call({});
+})), 'Number', {
+  toPrecision: function toPrecision(precision){
+    var that = aNumberValue(this, 'Number#toPrecision: incorrect invocation!');
+    return precision === undefined ? $toPrecision.call(that) : $toPrecision.call(that, precision); 
+  }
+});
+},{"./_a-number-value":5,"./_export":33,"./_fails":35}],181:[function(require,module,exports){
+// 19.1.3.1 Object.assign(target, source)
+var $export = require('./_export');
+
+$export($export.S + $export.F, 'Object', {assign: require('./_object-assign')});
+},{"./_export":33,"./_object-assign":66}],182:[function(require,module,exports){
+var $export = require('./_export')
+// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])
+$export($export.S, 'Object', {create: require('./_object-create')});
+},{"./_export":33,"./_object-create":67}],183:[function(require,module,exports){
+var $export = require('./_export');
+// 19.1.2.3 / 15.2.3.7 Object.defineProperties(O, Properties)
+$export($export.S + $export.F * !require('./_descriptors'), 'Object', {defineProperties: require('./_object-dps')});
+},{"./_descriptors":29,"./_export":33,"./_object-dps":69}],184:[function(require,module,exports){
+var $export = require('./_export');
+// 19.1.2.4 / 15.2.3.6 Object.defineProperty(O, P, Attributes)
+$export($export.S + $export.F * !require('./_descriptors'), 'Object', {defineProperty: require('./_object-dp').f});
+},{"./_descriptors":29,"./_export":33,"./_object-dp":68}],185:[function(require,module,exports){
+// 19.1.2.5 Object.freeze(O)
+var isObject = require('./_is-object')
+  , meta     = require('./_meta').onFreeze;
+
+require('./_object-sap')('freeze', function($freeze){
+  return function freeze(it){
+    return $freeze && isObject(it) ? $freeze(meta(it)) : it;
+  };
+});
+},{"./_is-object":50,"./_meta":63,"./_object-sap":79}],186:[function(require,module,exports){
+// 19.1.2.6 Object.getOwnPropertyDescriptor(O, P)
+var toIObject                 = require('./_to-iobject')
+  , $getOwnPropertyDescriptor = require('./_object-gopd').f;
+
+require('./_object-sap')('getOwnPropertyDescriptor', function(){
+  return function getOwnPropertyDescriptor(it, key){
+    return $getOwnPropertyDescriptor(toIObject(it), key);
+  };
+});
+},{"./_object-gopd":71,"./_object-sap":79,"./_to-iobject":108}],187:[function(require,module,exports){
+// 19.1.2.7 Object.getOwnPropertyNames(O)
+require('./_object-sap')('getOwnPropertyNames', function(){
+  return require('./_object-gopn-ext').f;
+});
+},{"./_object-gopn-ext":72,"./_object-sap":79}],188:[function(require,module,exports){
+// 19.1.2.9 Object.getPrototypeOf(O)
+var toObject        = require('./_to-object')
+  , $getPrototypeOf = require('./_object-gpo');
+
+require('./_object-sap')('getPrototypeOf', function(){
+  return function getPrototypeOf(it){
+    return $getPrototypeOf(toObject(it));
+  };
+});
+},{"./_object-gpo":75,"./_object-sap":79,"./_to-object":110}],189:[function(require,module,exports){
+// 19.1.2.11 Object.isExtensible(O)
+var isObject = require('./_is-object');
+
+require('./_object-sap')('isExtensible', function($isExtensible){
+  return function isExtensible(it){
+    return isObject(it) ? $isExtensible ? $isExtensible(it) : true : false;
+  };
+});
+},{"./_is-object":50,"./_object-sap":79}],190:[function(require,module,exports){
+// 19.1.2.12 Object.isFrozen(O)
+var isObject = require('./_is-object');
+
+require('./_object-sap')('isFrozen', function($isFrozen){
+  return function isFrozen(it){
+    return isObject(it) ? $isFrozen ? $isFrozen(it) : false : true;
+  };
+});
+},{"./_is-object":50,"./_object-sap":79}],191:[function(require,module,exports){
+// 19.1.2.13 Object.isSealed(O)
+var isObject = require('./_is-object');
+
+require('./_object-sap')('isSealed', function($isSealed){
+  return function isSealed(it){
+    return isObject(it) ? $isSealed ? $isSealed(it) : false : true;
+  };
+});
+},{"./_is-object":50,"./_object-sap":79}],192:[function(require,module,exports){
+// 19.1.3.10 Object.is(value1, value2)
+var $export = require('./_export');
+$export($export.S, 'Object', {is: require('./_same-value')});
+},{"./_export":33,"./_same-value":90}],193:[function(require,module,exports){
+// 19.1.2.14 Object.keys(O)
+var toObject = require('./_to-object')
+  , $keys    = require('./_object-keys');
+
+require('./_object-sap')('keys', function(){
+  return function keys(it){
+    return $keys(toObject(it));
+  };
+});
+},{"./_object-keys":77,"./_object-sap":79,"./_to-object":110}],194:[function(require,module,exports){
+// 19.1.2.15 Object.preventExtensions(O)
+var isObject = require('./_is-object')
+  , meta     = require('./_meta').onFreeze;
+
+require('./_object-sap')('preventExtensions', function($preventExtensions){
+  return function preventExtensions(it){
+    return $preventExtensions && isObject(it) ? $preventExtensions(meta(it)) : it;
+  };
+});
+},{"./_is-object":50,"./_meta":63,"./_object-sap":79}],195:[function(require,module,exports){
+// 19.1.2.17 Object.seal(O)
+var isObject = require('./_is-object')
+  , meta     = require('./_meta').onFreeze;
+
+require('./_object-sap')('seal', function($seal){
+  return function seal(it){
+    return $seal && isObject(it) ? $seal(meta(it)) : it;
+  };
+});
+},{"./_is-object":50,"./_meta":63,"./_object-sap":79}],196:[function(require,module,exports){
+// 19.1.3.19 Object.setPrototypeOf(O, proto)
+var $export = require('./_export');
+$export($export.S, 'Object', {setPrototypeOf: require('./_set-proto').set});
+},{"./_export":33,"./_set-proto":91}],197:[function(require,module,exports){
+'use strict';
+// 19.1.3.6 Object.prototype.toString()
+var classof = require('./_classof')
+  , test    = {};
+test[require('./_wks')('toStringTag')] = 'z';
+if(test + '' != '[object z]'){
+  require('./_redefine')(Object.prototype, 'toString', function toString(){
+    return '[object ' + classof(this) + ']';
+  }, true);
+}
+},{"./_classof":18,"./_redefine":88,"./_wks":118}],198:[function(require,module,exports){
+var $export     = require('./_export')
+  , $parseFloat = require('./_parse-float');
+// 18.2.4 parseFloat(string)
+$export($export.G + $export.F * (parseFloat != $parseFloat), {parseFloat: $parseFloat});
+},{"./_export":33,"./_parse-float":82}],199:[function(require,module,exports){
+var $export   = require('./_export')
+  , $parseInt = require('./_parse-int');
+// 18.2.5 parseInt(string, radix)
+$export($export.G + $export.F * (parseInt != $parseInt), {parseInt: $parseInt});
+},{"./_export":33,"./_parse-int":83}],200:[function(require,module,exports){
+'use strict';
+var LIBRARY            = require('./_library')
+  , global             = require('./_global')
+  , ctx                = require('./_ctx')
+  , classof            = require('./_classof')
+  , $export            = require('./_export')
+  , isObject           = require('./_is-object')
+  , anObject           = require('./_an-object')
+  , aFunction          = require('./_a-function')
+  , anInstance         = require('./_an-instance')
+  , forOf              = require('./_for-of')
+  , setProto           = require('./_set-proto').set
+  , speciesConstructor = require('./_species-constructor')
+  , task               = require('./_task').set
+  , microtask          = require('./_microtask')()
+  , PROMISE            = 'Promise'
+  , TypeError          = global.TypeError
+  , process            = global.process
+  , $Promise           = global[PROMISE]
+  , process            = global.process
+  , isNode             = classof(process) == 'process'
+  , empty              = function(){ /* empty */ }
+  , Internal, GenericPromiseCapability, Wrapper;
+
+var USE_NATIVE = !!function(){
+  try {
+    // correct subclassing with @@species support
+    var promise     = $Promise.resolve(1)
+      , FakePromise = (promise.constructor = {})[require('./_wks')('species')] = function(exec){ exec(empty, empty); };
+    // unhandled rejections tracking support, NodeJS Promise without it fails @@species test
+    return (isNode || typeof PromiseRejectionEvent == 'function') && promise.then(empty) instanceof FakePromise;
+  } catch(e){ /* empty */ }
+}();
+
+// helpers
+var sameConstructor = function(a, b){
+  // with library wrapper special case
+  return a === b || a === $Promise && b === Wrapper;
+};
+var isThenable = function(it){
+  var then;
+  return isObject(it) && typeof (then = it.then) == 'function' ? then : false;
+};
+var newPromiseCapability = function(C){
+  return sameConstructor($Promise, C)
+    ? new PromiseCapability(C)
+    : new GenericPromiseCapability(C);
+};
+var PromiseCapability = GenericPromiseCapability = function(C){
+  var resolve, reject;
+  this.promise = new C(function($$resolve, $$reject){
+    if(resolve !== undefined || reject !== undefined)throw TypeError('Bad Promise constructor');
+    resolve = $$resolve;
+    reject  = $$reject;
+  });
+  this.resolve = aFunction(resolve);
+  this.reject  = aFunction(reject);
+};
+var perform = function(exec){
+  try {
+    exec();
+  } catch(e){
+    return {error: e};
+  }
+};
+var notify = function(promise, isReject){
+  if(promise._n)return;
+  promise._n = true;
+  var chain = promise._c;
+  microtask(function(){
+    var value = promise._v
+      , ok    = promise._s == 1
+      , i     = 0;
+    var run = function(reaction){
+      var handler = ok ? reaction.ok : reaction.fail
+        , resolve = reaction.resolve
+        , reject  = reaction.reject
+        , domain  = reaction.domain
+        , result, then;
+      try {
+        if(handler){
+          if(!ok){
+            if(promise._h == 2)onHandleUnhandled(promise);
+            promise._h = 1;
+          }
+          if(handler === true)result = value;
+          else {
+            if(domain)domain.enter();
+            result = handler(value);
+            if(domain)domain.exit();
+          }
+          if(result === reaction.promise){
+            reject(TypeError('Promise-chain cycle'));
+          } else if(then = isThenable(result)){
+            then.call(result, resolve, reject);
+          } else resolve(result);
+        } else reject(value);
+      } catch(e){
+        reject(e);
+      }
+    };
+    while(chain.length > i)run(chain[i++]); // variable length - can't use forEach
+    promise._c = [];
+    promise._n = false;
+    if(isReject && !promise._h)onUnhandled(promise);
+  });
+};
+var onUnhandled = function(promise){
+  task.call(global, function(){
+    var value = promise._v
+      , abrupt, handler, console;
+    if(isUnhandled(promise)){
+      abrupt = perform(function(){
+        if(isNode){
+          process.emit('unhandledRejection', value, promise);
+        } else if(handler = global.onunhandledrejection){
+          handler({promise: promise, reason: value});
+        } else if((console = global.console) && console.error){
+          console.error('Unhandled promise rejection', value);
+        }
+      });
+      // Browsers should not trigger `rejectionHandled` event if it was handled here, NodeJS - should
+      promise._h = isNode || isUnhandled(promise) ? 2 : 1;
+    } promise._a = undefined;
+    if(abrupt)throw abrupt.error;
+  });
+};
+var isUnhandled = function(promise){
+  if(promise._h == 1)return false;
+  var chain = promise._a || promise._c
+    , i     = 0
+    , reaction;
+  while(chain.length > i){
+    reaction = chain[i++];
+    if(reaction.fail || !isUnhandled(reaction.promise))return false;
+  } return true;
+};
+var onHandleUnhandled = function(promise){
+  task.call(global, function(){
+    var handler;
+    if(isNode){
+      process.emit('rejectionHandled', promise);
+    } else if(handler = global.onrejectionhandled){
+      handler({promise: promise, reason: promise._v});
+    }
+  });
+};
+var $reject = function(value){
+  var promise = this;
+  if(promise._d)return;
+  promise._d = true;
+  promise = promise._w || promise; // unwrap
+  promise._v = value;
+  promise._s = 2;
+  if(!promise._a)promise._a = promise._c.slice();
+  notify(promise, true);
+};
+var $resolve = function(value){
+  var promise = this
+    , then;
+  if(promise._d)return;
+  promise._d = true;
+  promise = promise._w || promise; // unwrap
+  try {
+    if(promise === value)throw TypeError("Promise can't be resolved itself");
+    if(then = isThenable(value)){
+      microtask(function(){
+        var wrapper = {_w: promise, _d: false}; // wrap
+        try {
+          then.call(value, ctx($resolve, wrapper, 1), ctx($reject, wrapper, 1));
+        } catch(e){
+          $reject.call(wrapper, e);
+        }
+      });
+    } else {
+      promise._v = value;
+      promise._s = 1;
+      notify(promise, false);
+    }
+  } catch(e){
+    $reject.call({_w: promise, _d: false}, e); // wrap
+  }
+};
+
+// constructor polyfill
+if(!USE_NATIVE){
+  // 25.4.3.1 Promise(executor)
+  $Promise = function Promise(executor){
+    anInstance(this, $Promise, PROMISE, '_h');
+    aFunction(executor);
+    Internal.call(this);
+    try {
+      executor(ctx($resolve, this, 1), ctx($reject, this, 1));
+    } catch(err){
+      $reject.call(this, err);
+    }
+  };
+  Internal = function Promise(executor){
+    this._c = [];             // <- awaiting reactions
+    this._a = undefined;      // <- checked in isUnhandled reactions
+    this._s = 0;              // <- state
+    this._d = false;          // <- done
+    this._v = undefined;      // <- value
+    this._h = 0;              // <- rejection state, 0 - default, 1 - handled, 2 - unhandled
+    this._n = false;          // <- notify
+  };
+  Internal.prototype = require('./_redefine-all')($Promise.prototype, {
+    // 25.4.5.3 Promise.prototype.then(onFulfilled, onRejected)
+    then: function then(onFulfilled, onRejected){
+      var reaction    = newPromiseCapability(speciesConstructor(this, $Promise));
+      reaction.ok     = typeof onFulfilled == 'function' ? onFulfilled : true;
+      reaction.fail   = typeof onRejected == 'function' && onRejected;
+      reaction.domain = isNode ? process.domain : undefined;
+      this._c.push(reaction);
+      if(this._a)this._a.push(reaction);
+      if(this._s)notify(this, false);
+      return reaction.promise;
+    },
+    // 25.4.5.1 Promise.prototype.catch(onRejected)
+    'catch': function(onRejected){
+      return this.then(undefined, onRejected);
+    }
+  });
+  PromiseCapability = function(){
+    var promise  = new Internal;
+    this.promise = promise;
+    this.resolve = ctx($resolve, promise, 1);
+    this.reject  = ctx($reject, promise, 1);
+  };
+}
+
+$export($export.G + $export.W + $export.F * !USE_NATIVE, {Promise: $Promise});
+require('./_set-to-string-tag')($Promise, PROMISE);
+require('./_set-species')(PROMISE);
+Wrapper = require('./_core')[PROMISE];
+
+// statics
+$export($export.S + $export.F * !USE_NATIVE, PROMISE, {
+  // 25.4.4.5 Promise.reject(r)
+  reject: function reject(r){
+    var capability = newPromiseCapability(this)
+      , $$reject   = capability.reject;
+    $$reject(r);
+    return capability.promise;
+  }
+});
+$export($export.S + $export.F * (LIBRARY || !USE_NATIVE), PROMISE, {
+  // 25.4.4.6 Promise.resolve(x)
+  resolve: function resolve(x){
+    // instanceof instead of internal slot check because we should fix it without replacement native Promise core
+    if(x instanceof $Promise && sameConstructor(x.constructor, this))return x;
+    var capability = newPromiseCapability(this)
+      , $$resolve  = capability.resolve;
+    $$resolve(x);
+    return capability.promise;
+  }
+});
+$export($export.S + $export.F * !(USE_NATIVE && require('./_iter-detect')(function(iter){
+  $Promise.all(iter)['catch'](empty);
+})), PROMISE, {
+  // 25.4.4.1 Promise.all(iterable)
+  all: function all(iterable){
+    var C          = this
+      , capability = newPromiseCapability(C)
+      , resolve    = capability.resolve
+      , reject     = capability.reject;
+    var abrupt = perform(function(){
+      var values    = []
+        , index     = 0
+        , remaining = 1;
+      forOf(iterable, false, function(promise){
+        var $index        = index++
+          , alreadyCalled = false;
+        values.push(undefined);
+        remaining++;
+        C.resolve(promise).then(function(value){
+          if(alreadyCalled)return;
+          alreadyCalled  = true;
+          values[$index] = value;
+          --remaining || resolve(values);
+        }, reject);
+      });
+      --remaining || resolve(values);
+    });
+    if(abrupt)reject(abrupt.error);
+    return capability.promise;
+  },
+  // 25.4.4.4 Promise.race(iterable)
+  race: function race(iterable){
+    var C          = this
+      , capability = newPromiseCapability(C)
+      , reject     = capability.reject;
+    var abrupt = perform(function(){
+      forOf(iterable, false, function(promise){
+        C.resolve(promise).then(capability.resolve, reject);
+      });
+    });
+    if(abrupt)reject(abrupt.error);
+    return capability.promise;
+  }
+});
+},{"./_a-function":4,"./_an-instance":7,"./_an-object":8,"./_classof":18,"./_core":24,"./_ctx":26,"./_export":33,"./_for-of":38,"./_global":39,"./_is-object":50,"./_iter-detect":55,"./_library":59,"./_microtask":65,"./_redefine-all":87,"./_set-proto":91,"./_set-species":92,"./_set-to-string-tag":93,"./_species-constructor":96,"./_task":105,"./_wks":118}],201:[function(require,module,exports){
+// 26.1.1 Reflect.apply(target, thisArgument, argumentsList)
+var $export   = require('./_export')
+  , aFunction = require('./_a-function')
+  , anObject  = require('./_an-object')
+  , _apply    = Function.apply;
+
+$export($export.S, 'Reflect', {
+  apply: function apply(target, thisArgument, argumentsList){
+    return _apply.call(aFunction(target), thisArgument, anObject(argumentsList));
+  }
+});
+},{"./_a-function":4,"./_an-object":8,"./_export":33}],202:[function(require,module,exports){
+// 26.1.2 Reflect.construct(target, argumentsList [, newTarget])
+var $export   = require('./_export')
+  , create    = require('./_object-create')
+  , aFunction = require('./_a-function')
+  , anObject  = require('./_an-object')
+  , isObject  = require('./_is-object')
+  , bind      = require('./_bind');
+
+// MS Edge supports only 2 arguments
+// FF Nightly sets third argument as `new.target`, but does not create `this` from it
+$export($export.S + $export.F * require('./_fails')(function(){
+  function F(){}
+  return !(Reflect.construct(function(){}, [], F) instanceof F);
+}), 'Reflect', {
+  construct: function construct(Target, args /*, newTarget*/){
+    aFunction(Target);
+    anObject(args);
+    var newTarget = arguments.length < 3 ? Target : aFunction(arguments[2]);
+    if(Target == newTarget){
+      // w/o altered newTarget, optimization for 0-4 arguments
+      switch(args.length){
+        case 0: return new Target;
+        case 1: return new Target(args[0]);
+        case 2: return new Target(args[0], args[1]);
+        case 3: return new Target(args[0], args[1], args[2]);
+        case 4: return new Target(args[0], args[1], args[2], args[3]);
+      }
+      // w/o altered newTarget, lot of arguments case
+      var $args = [null];
+      $args.push.apply($args, args);
+      return new (bind.apply(Target, $args));
+    }
+    // with altered newTarget, not support built-in constructors
+    var proto    = newTarget.prototype
+      , instance = create(isObject(proto) ? proto : Object.prototype)
+      , result   = Function.apply.call(Target, instance, args);
+    return isObject(result) ? result : instance;
+  }
+});
+},{"./_a-function":4,"./_an-object":8,"./_bind":17,"./_export":33,"./_fails":35,"./_is-object":50,"./_object-create":67}],203:[function(require,module,exports){
+// 26.1.3 Reflect.defineProperty(target, propertyKey, attributes)
+var dP          = require('./_object-dp')
+  , $export     = require('./_export')
+  , anObject    = require('./_an-object')
+  , toPrimitive = require('./_to-primitive');
+
+// MS Edge has broken Reflect.defineProperty - throwing instead of returning false
+$export($export.S + $export.F * require('./_fails')(function(){
+  Reflect.defineProperty(dP.f({}, 1, {value: 1}), 1, {value: 2});
+}), 'Reflect', {
+  defineProperty: function defineProperty(target, propertyKey, attributes){
+    anObject(target);
+    propertyKey = toPrimitive(propertyKey, true);
+    anObject(attributes);
+    try {
+      dP.f(target, propertyKey, attributes);
+      return true;
+    } catch(e){
+      return false;
+    }
+  }
+});
+},{"./_an-object":8,"./_export":33,"./_fails":35,"./_object-dp":68,"./_to-primitive":111}],204:[function(require,module,exports){
+// 26.1.4 Reflect.deleteProperty(target, propertyKey)
+var $export  = require('./_export')
+  , gOPD     = require('./_object-gopd').f
+  , anObject = require('./_an-object');
+
+$export($export.S, 'Reflect', {
+  deleteProperty: function deleteProperty(target, propertyKey){
+    var desc = gOPD(anObject(target), propertyKey);
+    return desc && !desc.configurable ? false : delete target[propertyKey];
+  }
+});
+},{"./_an-object":8,"./_export":33,"./_object-gopd":71}],205:[function(require,module,exports){
+'use strict';
+// 26.1.5 Reflect.enumerate(target)
+var $export  = require('./_export')
+  , anObject = require('./_an-object');
+var Enumerate = function(iterated){
+  this._t = anObject(iterated); // target
+  this._i = 0;                  // next index
+  var keys = this._k = []       // keys
+    , key;
+  for(key in iterated)keys.push(key);
+};
+require('./_iter-create')(Enumerate, 'Object', function(){
+  var that = this
+    , keys = that._k
+    , key;
+  do {
+    if(that._i >= keys.length)return {value: undefined, done: true};
+  } while(!((key = keys[that._i++]) in that._t));
+  return {value: key, done: false};
+});
+
+$export($export.S, 'Reflect', {
+  enumerate: function enumerate(target){
+    return new Enumerate(target);
+  }
+});
+},{"./_an-object":8,"./_export":33,"./_iter-create":53}],206:[function(require,module,exports){
+// 26.1.7 Reflect.getOwnPropertyDescriptor(target, propertyKey)
+var gOPD     = require('./_object-gopd')
+  , $export  = require('./_export')
+  , anObject = require('./_an-object');
+
+$export($export.S, 'Reflect', {
+  getOwnPropertyDescriptor: function getOwnPropertyDescriptor(target, propertyKey){
+    return gOPD.f(anObject(target), propertyKey);
+  }
+});
+},{"./_an-object":8,"./_export":33,"./_object-gopd":71}],207:[function(require,module,exports){
+// 26.1.8 Reflect.getPrototypeOf(target)
+var $export  = require('./_export')
+  , getProto = require('./_object-gpo')
+  , anObject = require('./_an-object');
+
+$export($export.S, 'Reflect', {
+  getPrototypeOf: function getPrototypeOf(target){
+    return getProto(anObject(target));
+  }
+});
+},{"./_an-object":8,"./_export":33,"./_object-gpo":75}],208:[function(require,module,exports){
+// 26.1.6 Reflect.get(target, propertyKey [, receiver])
+var gOPD           = require('./_object-gopd')
+  , getPrototypeOf = require('./_object-gpo')
+  , has            = require('./_has')
+  , $export        = require('./_export')
+  , isObject       = require('./_is-object')
+  , anObject       = require('./_an-object');
+
+function get(target, propertyKey/*, receiver*/){
+  var receiver = arguments.length < 3 ? target : arguments[2]
+    , desc, proto;
+  if(anObject(target) === receiver)return target[propertyKey];
+  if(desc = gOPD.f(target, propertyKey))return has(desc, 'value')
+    ? desc.value
+    : desc.get !== undefined
+      ? desc.get.call(receiver)
+      : undefined;
+  if(isObject(proto = getPrototypeOf(target)))return get(proto, propertyKey, receiver);
+}
+
+$export($export.S, 'Reflect', {get: get});
+},{"./_an-object":8,"./_export":33,"./_has":40,"./_is-object":50,"./_object-gopd":71,"./_object-gpo":75}],209:[function(require,module,exports){
+// 26.1.9 Reflect.has(target, propertyKey)
+var $export = require('./_export');
+
+$export($export.S, 'Reflect', {
+  has: function has(target, propertyKey){
+    return propertyKey in target;
+  }
+});
+},{"./_export":33}],210:[function(require,module,exports){
+// 26.1.10 Reflect.isExtensible(target)
+var $export       = require('./_export')
+  , anObject      = require('./_an-object')
+  , $isExtensible = Object.isExtensible;
+
+$export($export.S, 'Reflect', {
+  isExtensible: function isExtensible(target){
+    anObject(target);
+    return $isExtensible ? $isExtensible(target) : true;
+  }
+});
+},{"./_an-object":8,"./_export":33}],211:[function(require,module,exports){
+// 26.1.11 Reflect.ownKeys(target)
+var $export = require('./_export');
+
+$export($export.S, 'Reflect', {ownKeys: require('./_own-keys')});
+},{"./_export":33,"./_own-keys":81}],212:[function(require,module,exports){
+// 26.1.12 Reflect.preventExtensions(target)
+var $export            = require('./_export')
+  , anObject           = require('./_an-object')
+  , $preventExtensions = Object.preventExtensions;
+
+$export($export.S, 'Reflect', {
+  preventExtensions: function preventExtensions(target){
+    anObject(target);
+    try {
+      if($preventExtensions)$preventExtensions(target);
+      return true;
+    } catch(e){
+      return false;
+    }
+  }
+});
+},{"./_an-object":8,"./_export":33}],213:[function(require,module,exports){
+// 26.1.14 Reflect.setPrototypeOf(target, proto)
+var $export  = require('./_export')
+  , setProto = require('./_set-proto');
+
+if(setProto)$export($export.S, 'Reflect', {
+  setPrototypeOf: function setPrototypeOf(target, proto){
+    setProto.check(target, proto);
+    try {
+      setProto.set(target, proto);
+      return true;
+    } catch(e){
+      return false;
+    }
+  }
+});
+},{"./_export":33,"./_set-proto":91}],214:[function(require,module,exports){
+// 26.1.13 Reflect.set(target, propertyKey, V [, receiver])
+var dP             = require('./_object-dp')
+  , gOPD           = require('./_object-gopd')
+  , getPrototypeOf = require('./_object-gpo')
+  , has            = require('./_has')
+  , $export        = require('./_export')
+  , createDesc     = require('./_property-desc')
+  , anObject       = require('./_an-object')
+  , isObject       = require('./_is-object');
+
+function set(target, propertyKey, V/*, receiver*/){
+  var receiver = arguments.length < 4 ? target : arguments[3]
+    , ownDesc  = gOPD.f(anObject(target), propertyKey)
+    , existingDescriptor, proto;
+  if(!ownDesc){
+    if(isObject(proto = getPrototypeOf(target))){
+      return set(proto, propertyKey, V, receiver);
+    }
+    ownDesc = createDesc(0);
+  }
+  if(has(ownDesc, 'value')){
+    if(ownDesc.writable === false || !isObject(receiver))return false;
+    existingDescriptor = gOPD.f(receiver, propertyKey) || createDesc(0);
+    existingDescriptor.value = V;
+    dP.f(receiver, propertyKey, existingDescriptor);
+    return true;
+  }
+  return ownDesc.set === undefined ? false : (ownDesc.set.call(receiver, V), true);
+}
+
+$export($export.S, 'Reflect', {set: set});
+},{"./_an-object":8,"./_export":33,"./_has":40,"./_is-object":50,"./_object-dp":68,"./_object-gopd":71,"./_object-gpo":75,"./_property-desc":86}],215:[function(require,module,exports){
+var global            = require('./_global')
+  , inheritIfRequired = require('./_inherit-if-required')
+  , dP                = require('./_object-dp').f
+  , gOPN              = require('./_object-gopn').f
+  , isRegExp          = require('./_is-regexp')
+  , $flags            = require('./_flags')
+  , $RegExp           = global.RegExp
+  , Base              = $RegExp
+  , proto             = $RegExp.prototype
+  , re1               = /a/g
+  , re2               = /a/g
+  // "new" creates a new object, old webkit buggy here
+  , CORRECT_NEW       = new $RegExp(re1) !== re1;
+
+if(require('./_descriptors') && (!CORRECT_NEW || require('./_fails')(function(){
+  re2[require('./_wks')('match')] = false;
+  // RegExp constructor can alter flags and IsRegExp works correct with @@match
+  return $RegExp(re1) != re1 || $RegExp(re2) == re2 || $RegExp(re1, 'i') != '/a/i';
+}))){
+  $RegExp = function RegExp(p, f){
+    var tiRE = this instanceof $RegExp
+      , piRE = isRegExp(p)
+      , fiU  = f === undefined;
+    return !tiRE && piRE && p.constructor === $RegExp && fiU ? p
+      : inheritIfRequired(CORRECT_NEW
+        ? new Base(piRE && !fiU ? p.source : p, f)
+        : Base((piRE = p instanceof $RegExp) ? p.source : p, piRE && fiU ? $flags.call(p) : f)
+      , tiRE ? this : proto, $RegExp);
+  };
+  var proxy = function(key){
+    key in $RegExp || dP($RegExp, key, {
+      configurable: true,
+      get: function(){ return Base[key]; },
+      set: function(it){ Base[key] = it; }
+    });
+  };
+  for(var keys = gOPN(Base), i = 0; keys.length > i; )proxy(keys[i++]);
+  proto.constructor = $RegExp;
+  $RegExp.prototype = proto;
+  require('./_redefine')(global, 'RegExp', $RegExp);
+}
+
+require('./_set-species')('RegExp');
+},{"./_descriptors":29,"./_fails":35,"./_flags":37,"./_global":39,"./_inherit-if-required":44,"./_is-regexp":51,"./_object-dp":68,"./_object-gopn":73,"./_redefine":88,"./_set-species":92,"./_wks":118}],216:[function(require,module,exports){
+// 21.2.5.3 get RegExp.prototype.flags()
+if(require('./_descriptors') && /./g.flags != 'g')require('./_object-dp').f(RegExp.prototype, 'flags', {
+  configurable: true,
+  get: require('./_flags')
+});
+},{"./_descriptors":29,"./_flags":37,"./_object-dp":68}],217:[function(require,module,exports){
+// @@match logic
+require('./_fix-re-wks')('match', 1, function(defined, MATCH, $match){
+  // 21.1.3.11 String.prototype.match(regexp)
+  return [function match(regexp){
+    'use strict';
+    var O  = defined(this)
+      , fn = regexp == undefined ? undefined : regexp[MATCH];
+    return fn !== undefined ? fn.call(regexp, O) : new RegExp(regexp)[MATCH](String(O));
+  }, $match];
+});
+},{"./_fix-re-wks":36}],218:[function(require,module,exports){
+// @@replace logic
+require('./_fix-re-wks')('replace', 2, function(defined, REPLACE, $replace){
+  // 21.1.3.14 String.prototype.replace(searchValue, replaceValue)
+  return [function replace(searchValue, replaceValue){
+    'use strict';
+    var O  = defined(this)
+      , fn = searchValue == undefined ? undefined : searchValue[REPLACE];
+    return fn !== undefined
+      ? fn.call(searchValue, O, replaceValue)
+      : $replace.call(String(O), searchValue, replaceValue);
+  }, $replace];
+});
+},{"./_fix-re-wks":36}],219:[function(require,module,exports){
+// @@search logic
+require('./_fix-re-wks')('search', 1, function(defined, SEARCH, $search){
+  // 21.1.3.15 String.prototype.search(regexp)
+  return [function search(regexp){
+    'use strict';
+    var O  = defined(this)
+      , fn = regexp == undefined ? undefined : regexp[SEARCH];
+    return fn !== undefined ? fn.call(regexp, O) : new RegExp(regexp)[SEARCH](String(O));
+  }, $search];
+});
+},{"./_fix-re-wks":36}],220:[function(require,module,exports){
+// @@split logic
+require('./_fix-re-wks')('split', 2, function(defined, SPLIT, $split){
+  'use strict';
+  var isRegExp   = require('./_is-regexp')
+    , _split     = $split
+    , $push      = [].push
+    , $SPLIT     = 'split'
+    , LENGTH     = 'length'
+    , LAST_INDEX = 'lastIndex';
+  if(
+    'abbc'[$SPLIT](/(b)*/)[1] == 'c' ||
+    'test'[$SPLIT](/(?:)/, -1)[LENGTH] != 4 ||
+    'ab'[$SPLIT](/(?:ab)*/)[LENGTH] != 2 ||
+    '.'[$SPLIT](/(.?)(.?)/)[LENGTH] != 4 ||
+    '.'[$SPLIT](/()()/)[LENGTH] > 1 ||
+    ''[$SPLIT](/.?/)[LENGTH]
+  ){
+    var NPCG = /()??/.exec('')[1] === undefined; // nonparticipating capturing group
+    // based on es5-shim implementation, need to rework it
+    $split = function(separator, limit){
+      var string = String(this);
+      if(separator === undefined && limit === 0)return [];
+      // If `separator` is not a regex, use native split
+      if(!isRegExp(separator))return _split.call(string, separator, limit);
+      var output = [];
+      var flags = (separator.ignoreCase ? 'i' : '') +
+                  (separator.multiline ? 'm' : '') +
+                  (separator.unicode ? 'u' : '') +
+                  (separator.sticky ? 'y' : '');
+      var lastLastIndex = 0;
+      var splitLimit = limit === undefined ? 4294967295 : limit >>> 0;
+      // Make `global` and avoid `lastIndex` issues by working with a copy
+      var separatorCopy = new RegExp(separator.source, flags + 'g');
+      var separator2, match, lastIndex, lastLength, i;
+      // Doesn't need flags gy, but they don't hurt
+      if(!NPCG)separator2 = new RegExp('^' + separatorCopy.source + '$(?!\\s)', flags);
+      while(match = separatorCopy.exec(string)){
+        // `separatorCopy.lastIndex` is not reliable cross-browser
+        lastIndex = match.index + match[0][LENGTH];
+        if(lastIndex > lastLastIndex){
+          output.push(string.slice(lastLastIndex, match.index));
+          // Fix browsers whose `exec` methods don't consistently return `undefined` for NPCG
+          if(!NPCG && match[LENGTH] > 1)match[0].replace(separator2, function(){
+            for(i = 1; i < arguments[LENGTH] - 2; i++)if(arguments[i] === undefined)match[i] = undefined;
+          });
+          if(match[LENGTH] > 1 && match.index < string[LENGTH])$push.apply(output, match.slice(1));
+          lastLength = match[0][LENGTH];
+          lastLastIndex = lastIndex;
+          if(output[LENGTH] >= splitLimit)break;
+        }
+        if(separatorCopy[LAST_INDEX] === match.index)separatorCopy[LAST_INDEX]++; // Avoid an infinite loop
+      }
+      if(lastLastIndex === string[LENGTH]){
+        if(lastLength || !separatorCopy.test(''))output.push('');
+      } else output.push(string.slice(lastLastIndex));
+      return output[LENGTH] > splitLimit ? output.slice(0, splitLimit) : output;
+    };
+  // Chakra, V8
+  } else if('0'[$SPLIT](undefined, 0)[LENGTH]){
+    $split = function(separator, limit){
+      return separator === undefined && limit === 0 ? [] : _split.call(this, separator, limit);
+    };
+  }
+  // 21.1.3.17 String.prototype.split(separator, limit)
+  return [function split(separator, limit){
+    var O  = defined(this)
+      , fn = separator == undefined ? undefined : separator[SPLIT];
+    return fn !== undefined ? fn.call(separator, O, limit) : $split.call(String(O), separator, limit);
+  }, $split];
+});
+},{"./_fix-re-wks":36,"./_is-regexp":51}],221:[function(require,module,exports){
+'use strict';
+require('./es6.regexp.flags');
+var anObject    = require('./_an-object')
+  , $flags      = require('./_flags')
+  , DESCRIPTORS = require('./_descriptors')
+  , TO_STRING   = 'toString'
+  , $toString   = /./[TO_STRING];
+
+var define = function(fn){
+  require('./_redefine')(RegExp.prototype, TO_STRING, fn, true);
+};
+
+// 21.2.5.14 RegExp.prototype.toString()
+if(require('./_fails')(function(){ return $toString.call({source: 'a', flags: 'b'}) != '/a/b'; })){
+  define(function toString(){
+    var R = anObject(this);
+    return '/'.concat(R.source, '/',
+      'flags' in R ? R.flags : !DESCRIPTORS && R instanceof RegExp ? $flags.call(R) : undefined);
+  });
+// FF44- RegExp#toString has a wrong name
+} else if($toString.name != TO_STRING){
+  define(function toString(){
+    return $toString.call(this);
+  });
+}
+},{"./_an-object":8,"./_descriptors":29,"./_fails":35,"./_flags":37,"./_redefine":88,"./es6.regexp.flags":216}],222:[function(require,module,exports){
+'use strict';
+var strong = require('./_collection-strong');
+
+// 23.2 Set Objects
+module.exports = require('./_collection')('Set', function(get){
+  return function Set(){ return get(this, arguments.length > 0 ? arguments[0] : undefined); };
+}, {
+  // 23.2.3.1 Set.prototype.add(value)
+  add: function add(value){
+    return strong.def(this, value = value === 0 ? 0 : value, value);
+  }
+}, strong);
+},{"./_collection":23,"./_collection-strong":20}],223:[function(require,module,exports){
+'use strict';
+// B.2.3.2 String.prototype.anchor(name)
+require('./_string-html')('anchor', function(createHTML){
+  return function anchor(name){
+    return createHTML(this, 'a', 'name', name);
+  }
+});
+},{"./_string-html":100}],224:[function(require,module,exports){
+'use strict';
+// B.2.3.3 String.prototype.big()
+require('./_string-html')('big', function(createHTML){
+  return function big(){
+    return createHTML(this, 'big', '', '');
+  }
+});
+},{"./_string-html":100}],225:[function(require,module,exports){
+'use strict';
+// B.2.3.4 String.prototype.blink()
+require('./_string-html')('blink', function(createHTML){
+  return function blink(){
+    return createHTML(this, 'blink', '', '');
+  }
+});
+},{"./_string-html":100}],226:[function(require,module,exports){
+'use strict';
+// B.2.3.5 String.prototype.bold()
+require('./_string-html')('bold', function(createHTML){
+  return function bold(){
+    return createHTML(this, 'b', '', '');
+  }
+});
+},{"./_string-html":100}],227:[function(require,module,exports){
+'use strict';
+var $export = require('./_export')
+  , $at     = require('./_string-at')(false);
+$export($export.P, 'String', {
+  // 21.1.3.3 String.prototype.codePointAt(pos)
+  codePointAt: function codePointAt(pos){
+    return $at(this, pos);
+  }
+});
+},{"./_export":33,"./_string-at":98}],228:[function(require,module,exports){
+// 21.1.3.6 String.prototype.endsWith(searchString [, endPosition])
+'use strict';
+var $export   = require('./_export')
+  , toLength  = require('./_to-length')
+  , context   = require('./_string-context')
+  , ENDS_WITH = 'endsWith'
+  , $endsWith = ''[ENDS_WITH];
+
+$export($export.P + $export.F * require('./_fails-is-regexp')(ENDS_WITH), 'String', {
+  endsWith: function endsWith(searchString /*, endPosition = @length */){
+    var that = context(this, searchString, ENDS_WITH)
+      , endPosition = arguments.length > 1 ? arguments[1] : undefined
+      , len    = toLength(that.length)
+      , end    = endPosition === undefined ? len : Math.min(toLength(endPosition), len)
+      , search = String(searchString);
+    return $endsWith
+      ? $endsWith.call(that, search, end)
+      : that.slice(end - search.length, end) === search;
+  }
+});
+},{"./_export":33,"./_fails-is-regexp":34,"./_string-context":99,"./_to-length":109}],229:[function(require,module,exports){
+'use strict';
+// B.2.3.6 String.prototype.fixed()
+require('./_string-html')('fixed', function(createHTML){
+  return function fixed(){
+    return createHTML(this, 'tt', '', '');
+  }
+});
+},{"./_string-html":100}],230:[function(require,module,exports){
+'use strict';
+// B.2.3.7 String.prototype.fontcolor(color)
+require('./_string-html')('fontcolor', function(createHTML){
+  return function fontcolor(color){
+    return createHTML(this, 'font', 'color', color);
+  }
+});
+},{"./_string-html":100}],231:[function(require,module,exports){
+'use strict';
+// B.2.3.8 String.prototype.fontsize(size)
+require('./_string-html')('fontsize', function(createHTML){
+  return function fontsize(size){
+    return createHTML(this, 'font', 'size', size);
+  }
+});
+},{"./_string-html":100}],232:[function(require,module,exports){
+var $export        = require('./_export')
+  , toIndex        = require('./_to-index')
+  , fromCharCode   = String.fromCharCode
+  , $fromCodePoint = String.fromCodePoint;
+
+// length should be 1, old FF problem
+$export($export.S + $export.F * (!!$fromCodePoint && $fromCodePoint.length != 1), 'String', {
+  // 21.1.2.2 String.fromCodePoint(...codePoints)
+  fromCodePoint: function fromCodePoint(x){ // eslint-disable-line no-unused-vars
+    var res  = []
+      , aLen = arguments.length
+      , i    = 0
+      , code;
+    while(aLen > i){
+      code = +arguments[i++];
+      if(toIndex(code, 0x10ffff) !== code)throw RangeError(code + ' is not a valid code point');
+      res.push(code < 0x10000
+        ? fromCharCode(code)
+        : fromCharCode(((code -= 0x10000) >> 10) + 0xd800, code % 0x400 + 0xdc00)
+      );
+    } return res.join('');
+  }
+});
+},{"./_export":33,"./_to-index":106}],233:[function(require,module,exports){
+// 21.1.3.7 String.prototype.includes(searchString, position = 0)
+'use strict';
+var $export  = require('./_export')
+  , context  = require('./_string-context')
+  , INCLUDES = 'includes';
+
+$export($export.P + $export.F * require('./_fails-is-regexp')(INCLUDES), 'String', {
+  includes: function includes(searchString /*, position = 0 */){
+    return !!~context(this, searchString, INCLUDES)
+      .indexOf(searchString, arguments.length > 1 ? arguments[1] : undefined);
+  }
+});
+},{"./_export":33,"./_fails-is-regexp":34,"./_string-context":99}],234:[function(require,module,exports){
+'use strict';
+// B.2.3.9 String.prototype.italics()
+require('./_string-html')('italics', function(createHTML){
+  return function italics(){
+    return createHTML(this, 'i', '', '');
+  }
+});
+},{"./_string-html":100}],235:[function(require,module,exports){
+'use strict';
+var $at  = require('./_string-at')(true);
+
+// 21.1.3.27 String.prototype[@@iterator]()
+require('./_iter-define')(String, 'String', function(iterated){
+  this._t = String(iterated); // target
+  this._i = 0;                // next index
+// 21.1.5.2.1 %StringIteratorPrototype%.next()
+}, function(){
+  var O     = this._t
+    , index = this._i
+    , point;
+  if(index >= O.length)return {value: undefined, done: true};
+  point = $at(O, index);
+  this._i += point.length;
+  return {value: point, done: false};
+});
+},{"./_iter-define":54,"./_string-at":98}],236:[function(require,module,exports){
+'use strict';
+// B.2.3.10 String.prototype.link(url)
+require('./_string-html')('link', function(createHTML){
+  return function link(url){
+    return createHTML(this, 'a', 'href', url);
+  }
+});
+},{"./_string-html":100}],237:[function(require,module,exports){
+var $export   = require('./_export')
+  , toIObject = require('./_to-iobject')
+  , toLength  = require('./_to-length');
+
+$export($export.S, 'String', {
+  // 21.1.2.4 String.raw(callSite, ...substitutions)
+  raw: function raw(callSite){
+    var tpl  = toIObject(callSite.raw)
+      , len  = toLength(tpl.length)
+      , aLen = arguments.length
+      , res  = []
+      , i    = 0;
+    while(len > i){
+      res.push(String(tpl[i++]));
+      if(i < aLen)res.push(String(arguments[i]));
+    } return res.join('');
+  }
+});
+},{"./_export":33,"./_to-iobject":108,"./_to-length":109}],238:[function(require,module,exports){
+var $export = require('./_export');
+
+$export($export.P, 'String', {
+  // 21.1.3.13 String.prototype.repeat(count)
+  repeat: require('./_string-repeat')
+});
+},{"./_export":33,"./_string-repeat":102}],239:[function(require,module,exports){
+'use strict';
+// B.2.3.11 String.prototype.small()
+require('./_string-html')('small', function(createHTML){
+  return function small(){
+    return createHTML(this, 'small', '', '');
+  }
+});
+},{"./_string-html":100}],240:[function(require,module,exports){
+// 21.1.3.18 String.prototype.startsWith(searchString [, position ])
+'use strict';
+var $export     = require('./_export')
+  , toLength    = require('./_to-length')
+  , context     = require('./_string-context')
+  , STARTS_WITH = 'startsWith'
+  , $startsWith = ''[STARTS_WITH];
+
+$export($export.P + $export.F * require('./_fails-is-regexp')(STARTS_WITH), 'String', {
+  startsWith: function startsWith(searchString /*, position = 0 */){
+    var that   = context(this, searchString, STARTS_WITH)
+      , index  = toLength(Math.min(arguments.length > 1 ? arguments[1] : undefined, that.length))
+      , search = String(searchString);
+    return $startsWith
+      ? $startsWith.call(that, search, index)
+      : that.slice(index, index + search.length) === search;
+  }
+});
+},{"./_export":33,"./_fails-is-regexp":34,"./_string-context":99,"./_to-length":109}],241:[function(require,module,exports){
+'use strict';
+// B.2.3.12 String.prototype.strike()
+require('./_string-html')('strike', function(createHTML){
+  return function strike(){
+    return createHTML(this, 'strike', '', '');
+  }
+});
+},{"./_string-html":100}],242:[function(require,module,exports){
+'use strict';
+// B.2.3.13 String.prototype.sub()
+require('./_string-html')('sub', function(createHTML){
+  return function sub(){
+    return createHTML(this, 'sub', '', '');
+  }
+});
+},{"./_string-html":100}],243:[function(require,module,exports){
+'use strict';
+// B.2.3.14 String.prototype.sup()
+require('./_string-html')('sup', function(createHTML){
+  return function sup(){
+    return createHTML(this, 'sup', '', '');
+  }
+});
+},{"./_string-html":100}],244:[function(require,module,exports){
+'use strict';
+// 21.1.3.25 String.prototype.trim()
+require('./_string-trim')('trim', function($trim){
+  return function trim(){
+    return $trim(this, 3);
+  };
+});
+},{"./_string-trim":103}],245:[function(require,module,exports){
+'use strict';
+// ECMAScript 6 symbols shim
+var global         = require('./_global')
+  , has            = require('./_has')
+  , DESCRIPTORS    = require('./_descriptors')
+  , $export        = require('./_export')
+  , redefine       = require('./_redefine')
+  , META           = require('./_meta').KEY
+  , $fails         = require('./_fails')
+  , shared         = require('./_shared')
+  , setToStringTag = require('./_set-to-string-tag')
+  , uid            = require('./_uid')
+  , wks            = require('./_wks')
+  , wksExt         = require('./_wks-ext')
+  , wksDefine      = require('./_wks-define')
+  , keyOf          = require('./_keyof')
+  , enumKeys       = require('./_enum-keys')
+  , isArray        = require('./_is-array')
+  , anObject       = require('./_an-object')
+  , toIObject      = require('./_to-iobject')
+  , toPrimitive    = require('./_to-primitive')
+  , createDesc     = require('./_property-desc')
+  , _create        = require('./_object-create')
+  , gOPNExt        = require('./_object-gopn-ext')
+  , $GOPD          = require('./_object-gopd')
+  , $DP            = require('./_object-dp')
+  , $keys          = require('./_object-keys')
+  , gOPD           = $GOPD.f
+  , dP             = $DP.f
+  , gOPN           = gOPNExt.f
+  , $Symbol        = global.Symbol
+  , $JSON          = global.JSON
+  , _stringify     = $JSON && $JSON.stringify
+  , PROTOTYPE      = 'prototype'
+  , HIDDEN         = wks('_hidden')
+  , TO_PRIMITIVE   = wks('toPrimitive')
+  , isEnum         = {}.propertyIsEnumerable
+  , SymbolRegistry = shared('symbol-registry')
+  , AllSymbols     = shared('symbols')
+  , OPSymbols      = shared('op-symbols')
+  , ObjectProto    = Object[PROTOTYPE]
+  , USE_NATIVE     = typeof $Symbol == 'function'
+  , QObject        = global.QObject;
+// Don't use setters in Qt Script, https://github.com/zloirock/core-js/issues/173
+var setter = !QObject || !QObject[PROTOTYPE] || !QObject[PROTOTYPE].findChild;
+
+// fallback for old Android, https://code.google.com/p/v8/issues/detail?id=687
+var setSymbolDesc = DESCRIPTORS && $fails(function(){
+  return _create(dP({}, 'a', {
+    get: function(){ return dP(this, 'a', {value: 7}).a; }
+  })).a != 7;
+}) ? function(it, key, D){
+  var protoDesc = gOPD(ObjectProto, key);
+  if(protoDesc)delete ObjectProto[key];
+  dP(it, key, D);
+  if(protoDesc && it !== ObjectProto)dP(ObjectProto, key, protoDesc);
+} : dP;
+
+var wrap = function(tag){
+  var sym = AllSymbols[tag] = _create($Symbol[PROTOTYPE]);
+  sym._k = tag;
+  return sym;
+};
+
+var isSymbol = USE_NATIVE && typeof $Symbol.iterator == 'symbol' ? function(it){
+  return typeof it == 'symbol';
+} : function(it){
+  return it instanceof $Symbol;
+};
+
+var $defineProperty = function defineProperty(it, key, D){
+  if(it === ObjectProto)$defineProperty(OPSymbols, key, D);
+  anObject(it);
+  key = toPrimitive(key, true);
+  anObject(D);
+  if(has(AllSymbols, key)){
+    if(!D.enumerable){
+      if(!has(it, HIDDEN))dP(it, HIDDEN, createDesc(1, {}));
+      it[HIDDEN][key] = true;
+    } else {
+      if(has(it, HIDDEN) && it[HIDDEN][key])it[HIDDEN][key] = false;
+      D = _create(D, {enumerable: createDesc(0, false)});
+    } return setSymbolDesc(it, key, D);
+  } return dP(it, key, D);
+};
+var $defineProperties = function defineProperties(it, P){
+  anObject(it);
+  var keys = enumKeys(P = toIObject(P))
+    , i    = 0
+    , l = keys.length
+    , key;
+  while(l > i)$defineProperty(it, key = keys[i++], P[key]);
+  return it;
+};
+var $create = function create(it, P){
+  return P === undefined ? _create(it) : $defineProperties(_create(it), P);
+};
+var $propertyIsEnumerable = function propertyIsEnumerable(key){
+  var E = isEnum.call(this, key = toPrimitive(key, true));
+  if(this === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key))return false;
+  return E || !has(this, key) || !has(AllSymbols, key) || has(this, HIDDEN) && this[HIDDEN][key] ? E : true;
+};
+var $getOwnPropertyDescriptor = function getOwnPropertyDescriptor(it, key){
+  it  = toIObject(it);
+  key = toPrimitive(key, true);
+  if(it === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key))return;
+  var D = gOPD(it, key);
+  if(D && has(AllSymbols, key) && !(has(it, HIDDEN) && it[HIDDEN][key]))D.enumerable = true;
+  return D;
+};
+var $getOwnPropertyNames = function getOwnPropertyNames(it){
+  var names  = gOPN(toIObject(it))
+    , result = []
+    , i      = 0
+    , key;
+  while(names.length > i){
+    if(!has(AllSymbols, key = names[i++]) && key != HIDDEN && key != META)result.push(key);
+  } return result;
+};
+var $getOwnPropertySymbols = function getOwnPropertySymbols(it){
+  var IS_OP  = it === ObjectProto
+    , names  = gOPN(IS_OP ? OPSymbols : toIObject(it))
+    , result = []
+    , i      = 0
+    , key;
+  while(names.length > i){
+    if(has(AllSymbols, key = names[i++]) && (IS_OP ? has(ObjectProto, key) : true))result.push(AllSymbols[key]);
+  } return result;
+};
+
+// 19.4.1.1 Symbol([description])
+if(!USE_NATIVE){
+  $Symbol = function Symbol(){
+    if(this instanceof $Symbol)throw TypeError('Symbol is not a constructor!');
+    var tag = uid(arguments.length > 0 ? arguments[0] : undefined);
+    var $set = function(value){
+      if(this === ObjectProto)$set.call(OPSymbols, value);
+      if(has(this, HIDDEN) && has(this[HIDDEN], tag))this[HIDDEN][tag] = false;
+      setSymbolDesc(this, tag, createDesc(1, value));
+    };
+    if(DESCRIPTORS && setter)setSymbolDesc(ObjectProto, tag, {configurable: true, set: $set});
+    return wrap(tag);
+  };
+  redefine($Symbol[PROTOTYPE], 'toString', function toString(){
+    return this._k;
+  });
+
+  $GOPD.f = $getOwnPropertyDescriptor;
+  $DP.f   = $defineProperty;
+  require('./_object-gopn').f = gOPNExt.f = $getOwnPropertyNames;
+  require('./_object-pie').f  = $propertyIsEnumerable;
+  require('./_object-gops').f = $getOwnPropertySymbols;
+
+  if(DESCRIPTORS && !require('./_library')){
+    redefine(ObjectProto, 'propertyIsEnumerable', $propertyIsEnumerable, true);
+  }
+
+  wksExt.f = function(name){
+    return wrap(wks(name));
+  }
+}
+
+$export($export.G + $export.W + $export.F * !USE_NATIVE, {Symbol: $Symbol});
+
+for(var symbols = (
+  // 19.4.2.2, 19.4.2.3, 19.4.2.4, 19.4.2.6, 19.4.2.8, 19.4.2.9, 19.4.2.10, 19.4.2.11, 19.4.2.12, 19.4.2.13, 19.4.2.14
+  'hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables'
+).split(','), i = 0; symbols.length > i; )wks(symbols[i++]);
+
+for(var symbols = $keys(wks.store), i = 0; symbols.length > i; )wksDefine(symbols[i++]);
+
+$export($export.S + $export.F * !USE_NATIVE, 'Symbol', {
+  // 19.4.2.1 Symbol.for(key)
+  'for': function(key){
+    return has(SymbolRegistry, key += '')
+      ? SymbolRegistry[key]
+      : SymbolRegistry[key] = $Symbol(key);
+  },
+  // 19.4.2.5 Symbol.keyFor(sym)
+  keyFor: function keyFor(key){
+    if(isSymbol(key))return keyOf(SymbolRegistry, key);
+    throw TypeError(key + ' is not a symbol!');
+  },
+  useSetter: function(){ setter = true; },
+  useSimple: function(){ setter = false; }
+});
+
+$export($export.S + $export.F * !USE_NATIVE, 'Object', {
+  // 19.1.2.2 Object.create(O [, Properties])
+  create: $create,
+  // 19.1.2.4 Object.defineProperty(O, P, Attributes)
+  defineProperty: $defineProperty,
+  // 19.1.2.3 Object.defineProperties(O, Properties)
+  defineProperties: $defineProperties,
+  // 19.1.2.6 Object.getOwnPropertyDescriptor(O, P)
+  getOwnPropertyDescriptor: $getOwnPropertyDescriptor,
+  // 19.1.2.7 Object.getOwnPropertyNames(O)
+  getOwnPropertyNames: $getOwnPropertyNames,
+  // 19.1.2.8 Object.getOwnPropertySymbols(O)
+  getOwnPropertySymbols: $getOwnPropertySymbols
+});
+
+// 24.3.2 JSON.stringify(value [, replacer [, space]])
+$JSON && $export($export.S + $export.F * (!USE_NATIVE || $fails(function(){
+  var S = $Symbol();
+  // MS Edge converts symbol values to JSON as {}
+  // WebKit converts symbol values to JSON as null
+  // V8 throws on boxed symbols
+  return _stringify([S]) != '[null]' || _stringify({a: S}) != '{}' || _stringify(Object(S)) != '{}';
+})), 'JSON', {
+  stringify: function stringify(it){
+    if(it === undefined || isSymbol(it))return; // IE8 returns string on undefined
+    var args = [it]
+      , i    = 1
+      , replacer, $replacer;
+    while(arguments.length > i)args.push(arguments[i++]);
+    replacer = args[1];
+    if(typeof replacer == 'function')$replacer = replacer;
+    if($replacer || !isArray(replacer))replacer = function(key, value){
+      if($replacer)value = $replacer.call(this, key, value);
+      if(!isSymbol(value))return value;
+    };
+    args[1] = replacer;
+    return _stringify.apply($JSON, args);
+  }
+});
+
+// 19.4.3.4 Symbol.prototype[@@toPrimitive](hint)
+$Symbol[PROTOTYPE][TO_PRIMITIVE] || require('./_hide')($Symbol[PROTOTYPE], TO_PRIMITIVE, $Symbol[PROTOTYPE].valueOf);
+// 19.4.3.5 Symbol.prototype[@@toStringTag]
+setToStringTag($Symbol, 'Symbol');
+// 20.2.1.9 Math[@@toStringTag]
+setToStringTag(Math, 'Math', true);
+// 24.3.3 JSON[@@toStringTag]
+setToStringTag(global.JSON, 'JSON', true);
+},{"./_an-object":8,"./_descriptors":29,"./_enum-keys":32,"./_export":33,"./_fails":35,"./_global":39,"./_has":40,"./_hide":41,"./_is-array":48,"./_keyof":58,"./_library":59,"./_meta":63,"./_object-create":67,"./_object-dp":68,"./_object-gopd":71,"./_object-gopn":73,"./_object-gopn-ext":72,"./_object-gops":74,"./_object-keys":77,"./_object-pie":78,"./_property-desc":86,"./_redefine":88,"./_set-to-string-tag":93,"./_shared":95,"./_to-iobject":108,"./_to-primitive":111,"./_uid":115,"./_wks":118,"./_wks-define":116,"./_wks-ext":117}],246:[function(require,module,exports){
+'use strict';
+var $export      = require('./_export')
+  , $typed       = require('./_typed')
+  , buffer       = require('./_typed-buffer')
+  , anObject     = require('./_an-object')
+  , toIndex      = require('./_to-index')
+  , toLength     = require('./_to-length')
+  , isObject     = require('./_is-object')
+  , TYPED_ARRAY  = require('./_wks')('typed_array')
+  , ArrayBuffer  = require('./_global').ArrayBuffer
+  , speciesConstructor = require('./_species-constructor')
+  , $ArrayBuffer = buffer.ArrayBuffer
+  , $DataView    = buffer.DataView
+  , $isView      = $typed.ABV && ArrayBuffer.isView
+  , $slice       = $ArrayBuffer.prototype.slice
+  , VIEW         = $typed.VIEW
+  , ARRAY_BUFFER = 'ArrayBuffer';
+
+$export($export.G + $export.W + $export.F * (ArrayBuffer !== $ArrayBuffer), {ArrayBuffer: $ArrayBuffer});
+
+$export($export.S + $export.F * !$typed.CONSTR, ARRAY_BUFFER, {
+  // 24.1.3.1 ArrayBuffer.isView(arg)
+  isView: function isView(it){
+    return $isView && $isView(it) || isObject(it) && VIEW in it;
+  }
+});
+
+$export($export.P + $export.U + $export.F * require('./_fails')(function(){
+  return !new $ArrayBuffer(2).slice(1, undefined).byteLength;
+}), ARRAY_BUFFER, {
+  // 24.1.4.3 ArrayBuffer.prototype.slice(start, end)
+  slice: function slice(start, end){
+    if($slice !== undefined && end === undefined)return $slice.call(anObject(this), start); // FF fix
+    var len    = anObject(this).byteLength
+      , first  = toIndex(start, len)
+      , final  = toIndex(end === undefined ? len : end, len)
+      , result = new (speciesConstructor(this, $ArrayBuffer))(toLength(final - first))
+      , viewS  = new $DataView(this)
+      , viewT  = new $DataView(result)
+      , index  = 0;
+    while(first < final){
+      viewT.setUint8(index++, viewS.getUint8(first++));
+    } return result;
+  }
+});
+
+require('./_set-species')(ARRAY_BUFFER);
+},{"./_an-object":8,"./_export":33,"./_fails":35,"./_global":39,"./_is-object":50,"./_set-species":92,"./_species-constructor":96,"./_to-index":106,"./_to-length":109,"./_typed":114,"./_typed-buffer":113,"./_wks":118}],247:[function(require,module,exports){
+var $export = require('./_export');
+$export($export.G + $export.W + $export.F * !require('./_typed').ABV, {
+  DataView: require('./_typed-buffer').DataView
+});
+},{"./_export":33,"./_typed":114,"./_typed-buffer":113}],248:[function(require,module,exports){
+require('./_typed-array')('Float32', 4, function(init){
+  return function Float32Array(data, byteOffset, length){
+    return init(this, data, byteOffset, length);
+  };
+});
+},{"./_typed-array":112}],249:[function(require,module,exports){
+require('./_typed-array')('Float64', 8, function(init){
+  return function Float64Array(data, byteOffset, length){
+    return init(this, data, byteOffset, length);
+  };
+});
+},{"./_typed-array":112}],250:[function(require,module,exports){
+require('./_typed-array')('Int16', 2, function(init){
+  return function Int16Array(data, byteOffset, length){
+    return init(this, data, byteOffset, length);
+  };
+});
+},{"./_typed-array":112}],251:[function(require,module,exports){
+require('./_typed-array')('Int32', 4, function(init){
+  return function Int32Array(data, byteOffset, length){
+    return init(this, data, byteOffset, length);
+  };
+});
+},{"./_typed-array":112}],252:[function(require,module,exports){
+require('./_typed-array')('Int8', 1, function(init){
+  return function Int8Array(data, byteOffset, length){
+    return init(this, data, byteOffset, length);
+  };
+});
+},{"./_typed-array":112}],253:[function(require,module,exports){
+require('./_typed-array')('Uint16', 2, function(init){
+  return function Uint16Array(data, byteOffset, length){
+    return init(this, data, byteOffset, length);
+  };
+});
+},{"./_typed-array":112}],254:[function(require,module,exports){
+require('./_typed-array')('Uint32', 4, function(init){
+  return function Uint32Array(data, byteOffset, length){
+    return init(this, data, byteOffset, length);
+  };
+});
+},{"./_typed-array":112}],255:[function(require,module,exports){
+require('./_typed-array')('Uint8', 1, function(init){
+  return function Uint8Array(data, byteOffset, length){
+    return init(this, data, byteOffset, length);
+  };
+});
+},{"./_typed-array":112}],256:[function(require,module,exports){
+require('./_typed-array')('Uint8', 1, function(init){
+  return function Uint8ClampedArray(data, byteOffset, length){
+    return init(this, data, byteOffset, length);
+  };
+}, true);
+},{"./_typed-array":112}],257:[function(require,module,exports){
+'use strict';
+var each         = require('./_array-methods')(0)
+  , redefine     = require('./_redefine')
+  , meta         = require('./_meta')
+  , assign       = require('./_object-assign')
+  , weak         = require('./_collection-weak')
+  , isObject     = require('./_is-object')
+  , has          = require('./_has')
+  , getWeak      = meta.getWeak
+  , isExtensible = Object.isExtensible
+  , uncaughtFrozenStore = weak.ufstore
+  , tmp          = {}
+  , InternalMap;
+
+var wrapper = function(get){
+  return function WeakMap(){
+    return get(this, arguments.length > 0 ? arguments[0] : undefined);
+  };
+};
+
+var methods = {
+  // 23.3.3.3 WeakMap.prototype.get(key)
+  get: function get(key){
+    if(isObject(key)){
+      var data = getWeak(key);
+      if(data === true)return uncaughtFrozenStore(this).get(key);
+      return data ? data[this._i] : undefined;
+    }
+  },
+  // 23.3.3.5 WeakMap.prototype.set(key, value)
+  set: function set(key, value){
+    return weak.def(this, key, value);
+  }
+};
+
+// 23.3 WeakMap Objects
+var $WeakMap = module.exports = require('./_collection')('WeakMap', wrapper, methods, weak, true, true);
+
+// IE11 WeakMap frozen keys fix
+if(new $WeakMap().set((Object.freeze || Object)(tmp), 7).get(tmp) != 7){
+  InternalMap = weak.getConstructor(wrapper);
+  assign(InternalMap.prototype, methods);
+  meta.NEED = true;
+  each(['delete', 'has', 'get', 'set'], function(key){
+    var proto  = $WeakMap.prototype
+      , method = proto[key];
+    redefine(proto, key, function(a, b){
+      // store frozen objects on internal weakmap shim
+      if(isObject(a) && !isExtensible(a)){
+        if(!this._f)this._f = new InternalMap;
+        var result = this._f[key](a, b);
+        return key == 'set' ? this : result;
+      // store all the rest on native weakmap
+      } return method.call(this, a, b);
+    });
+  });
+}
+},{"./_array-methods":13,"./_collection":23,"./_collection-weak":22,"./_has":40,"./_is-object":50,"./_meta":63,"./_object-assign":66,"./_redefine":88}],258:[function(require,module,exports){
+'use strict';
+var weak = require('./_collection-weak');
+
+// 23.4 WeakSet Objects
+require('./_collection')('WeakSet', function(get){
+  return function WeakSet(){ return get(this, arguments.length > 0 ? arguments[0] : undefined); };
+}, {
+  // 23.4.3.1 WeakSet.prototype.add(value)
+  add: function add(value){
+    return weak.def(this, value, true);
+  }
+}, weak, false, true);
+},{"./_collection":23,"./_collection-weak":22}],259:[function(require,module,exports){
+'use strict';
+// https://github.com/tc39/Array.prototype.includes
+var $export   = require('./_export')
+  , $includes = require('./_array-includes')(true);
+
+$export($export.P, 'Array', {
+  includes: function includes(el /*, fromIndex = 0 */){
+    return $includes(this, el, arguments.length > 1 ? arguments[1] : undefined);
+  }
+});
+
+require('./_add-to-unscopables')('includes');
+},{"./_add-to-unscopables":6,"./_array-includes":12,"./_export":33}],260:[function(require,module,exports){
+// https://github.com/rwaldron/tc39-notes/blob/master/es6/2014-09/sept-25.md#510-globalasap-for-enqueuing-a-microtask
+var $export   = require('./_export')
+  , microtask = require('./_microtask')()
+  , process   = require('./_global').process
+  , isNode    = require('./_cof')(process) == 'process';
+
+$export($export.G, {
+  asap: function asap(fn){
+    var domain = isNode && process.domain;
+    microtask(domain ? domain.bind(fn) : fn);
+  }
+});
+},{"./_cof":19,"./_export":33,"./_global":39,"./_microtask":65}],261:[function(require,module,exports){
+// https://github.com/ljharb/proposal-is-error
+var $export = require('./_export')
+  , cof     = require('./_cof');
+
+$export($export.S, 'Error', {
+  isError: function isError(it){
+    return cof(it) === 'Error';
+  }
+});
+},{"./_cof":19,"./_export":33}],262:[function(require,module,exports){
+// https://github.com/DavidBruant/Map-Set.prototype.toJSON
+var $export  = require('./_export');
+
+$export($export.P + $export.R, 'Map', {toJSON: require('./_collection-to-json')('Map')});
+},{"./_collection-to-json":21,"./_export":33}],263:[function(require,module,exports){
+// https://gist.github.com/BrendanEich/4294d5c212a6d2254703
+var $export = require('./_export');
+
+$export($export.S, 'Math', {
+  iaddh: function iaddh(x0, x1, y0, y1){
+    var $x0 = x0 >>> 0
+      , $x1 = x1 >>> 0
+      , $y0 = y0 >>> 0;
+    return $x1 + (y1 >>> 0) + (($x0 & $y0 | ($x0 | $y0) & ~($x0 + $y0 >>> 0)) >>> 31) | 0;
+  }
+});
+},{"./_export":33}],264:[function(require,module,exports){
+// https://gist.github.com/BrendanEich/4294d5c212a6d2254703
+var $export = require('./_export');
+
+$export($export.S, 'Math', {
+  imulh: function imulh(u, v){
+    var UINT16 = 0xffff
+      , $u = +u
+      , $v = +v
+      , u0 = $u & UINT16
+      , v0 = $v & UINT16
+      , u1 = $u >> 16
+      , v1 = $v >> 16
+      , t  = (u1 * v0 >>> 0) + (u0 * v0 >>> 16);
+    return u1 * v1 + (t >> 16) + ((u0 * v1 >>> 0) + (t & UINT16) >> 16);
+  }
+});
+},{"./_export":33}],265:[function(require,module,exports){
+// https://gist.github.com/BrendanEich/4294d5c212a6d2254703
+var $export = require('./_export');
+
+$export($export.S, 'Math', {
+  isubh: function isubh(x0, x1, y0, y1){
+    var $x0 = x0 >>> 0
+      , $x1 = x1 >>> 0
+      , $y0 = y0 >>> 0;
+    return $x1 - (y1 >>> 0) - ((~$x0 & $y0 | ~($x0 ^ $y0) & $x0 - $y0 >>> 0) >>> 31) | 0;
+  }
+});
+},{"./_export":33}],266:[function(require,module,exports){
+// https://gist.github.com/BrendanEich/4294d5c212a6d2254703
+var $export = require('./_export');
+
+$export($export.S, 'Math', {
+  umulh: function umulh(u, v){
+    var UINT16 = 0xffff
+      , $u = +u
+      , $v = +v
+      , u0 = $u & UINT16
+      , v0 = $v & UINT16
+      , u1 = $u >>> 16
+      , v1 = $v >>> 16
+      , t  = (u1 * v0 >>> 0) + (u0 * v0 >>> 16);
+    return u1 * v1 + (t >>> 16) + ((u0 * v1 >>> 0) + (t & UINT16) >>> 16);
+  }
+});
+},{"./_export":33}],267:[function(require,module,exports){
+'use strict';
+var $export         = require('./_export')
+  , toObject        = require('./_to-object')
+  , aFunction       = require('./_a-function')
+  , $defineProperty = require('./_object-dp');
+
+// B.2.2.2 Object.prototype.__defineGetter__(P, getter)
+require('./_descriptors') && $export($export.P + require('./_object-forced-pam'), 'Object', {
+  __defineGetter__: function __defineGetter__(P, getter){
+    $defineProperty.f(toObject(this), P, {get: aFunction(getter), enumerable: true, configurable: true});
+  }
+});
+},{"./_a-function":4,"./_descriptors":29,"./_export":33,"./_object-dp":68,"./_object-forced-pam":70,"./_to-object":110}],268:[function(require,module,exports){
+'use strict';
+var $export         = require('./_export')
+  , toObject        = require('./_to-object')
+  , aFunction       = require('./_a-function')
+  , $defineProperty = require('./_object-dp');
+
+// B.2.2.3 Object.prototype.__defineSetter__(P, setter)
+require('./_descriptors') && $export($export.P + require('./_object-forced-pam'), 'Object', {
+  __defineSetter__: function __defineSetter__(P, setter){
+    $defineProperty.f(toObject(this), P, {set: aFunction(setter), enumerable: true, configurable: true});
+  }
+});
+},{"./_a-function":4,"./_descriptors":29,"./_export":33,"./_object-dp":68,"./_object-forced-pam":70,"./_to-object":110}],269:[function(require,module,exports){
+// https://github.com/tc39/proposal-object-values-entries
+var $export  = require('./_export')
+  , $entries = require('./_object-to-array')(true);
+
+$export($export.S, 'Object', {
+  entries: function entries(it){
+    return $entries(it);
+  }
+});
+},{"./_export":33,"./_object-to-array":80}],270:[function(require,module,exports){
+// https://github.com/tc39/proposal-object-getownpropertydescriptors
+var $export        = require('./_export')
+  , ownKeys        = require('./_own-keys')
+  , toIObject      = require('./_to-iobject')
+  , gOPD           = require('./_object-gopd')
+  , createProperty = require('./_create-property');
+
+$export($export.S, 'Object', {
+  getOwnPropertyDescriptors: function getOwnPropertyDescriptors(object){
+    var O       = toIObject(object)
+      , getDesc = gOPD.f
+      , keys    = ownKeys(O)
+      , result  = {}
+      , i       = 0
+      , key, D;
+    while(keys.length > i)createProperty(result, key = keys[i++], getDesc(O, key));
+    return result;
+  }
+});
+},{"./_create-property":25,"./_export":33,"./_object-gopd":71,"./_own-keys":81,"./_to-iobject":108}],271:[function(require,module,exports){
+'use strict';
+var $export                  = require('./_export')
+  , toObject                 = require('./_to-object')
+  , toPrimitive              = require('./_to-primitive')
+  , getPrototypeOf           = require('./_object-gpo')
+  , getOwnPropertyDescriptor = require('./_object-gopd').f;
+
+// B.2.2.4 Object.prototype.__lookupGetter__(P)
+require('./_descriptors') && $export($export.P + require('./_object-forced-pam'), 'Object', {
+  __lookupGetter__: function __lookupGetter__(P){
+    var O = toObject(this)
+      , K = toPrimitive(P, true)
+      , D;
+    do {
+      if(D = getOwnPropertyDescriptor(O, K))return D.get;
+    } while(O = getPrototypeOf(O));
+  }
+});
+},{"./_descriptors":29,"./_export":33,"./_object-forced-pam":70,"./_object-gopd":71,"./_object-gpo":75,"./_to-object":110,"./_to-primitive":111}],272:[function(require,module,exports){
+'use strict';
+var $export                  = require('./_export')
+  , toObject                 = require('./_to-object')
+  , toPrimitive              = require('./_to-primitive')
+  , getPrototypeOf           = require('./_object-gpo')
+  , getOwnPropertyDescriptor = require('./_object-gopd').f;
+
+// B.2.2.5 Object.prototype.__lookupSetter__(P)
+require('./_descriptors') && $export($export.P + require('./_object-forced-pam'), 'Object', {
+  __lookupSetter__: function __lookupSetter__(P){
+    var O = toObject(this)
+      , K = toPrimitive(P, true)
+      , D;
+    do {
+      if(D = getOwnPropertyDescriptor(O, K))return D.set;
+    } while(O = getPrototypeOf(O));
+  }
+});
+},{"./_descriptors":29,"./_export":33,"./_object-forced-pam":70,"./_object-gopd":71,"./_object-gpo":75,"./_to-object":110,"./_to-primitive":111}],273:[function(require,module,exports){
+// https://github.com/tc39/proposal-object-values-entries
+var $export = require('./_export')
+  , $values = require('./_object-to-array')(false);
+
+$export($export.S, 'Object', {
+  values: function values(it){
+    return $values(it);
+  }
+});
+},{"./_export":33,"./_object-to-array":80}],274:[function(require,module,exports){
+'use strict';
+// https://github.com/zenparsing/es-observable
+var $export     = require('./_export')
+  , global      = require('./_global')
+  , core        = require('./_core')
+  , microtask   = require('./_microtask')()
+  , OBSERVABLE  = require('./_wks')('observable')
+  , aFunction   = require('./_a-function')
+  , anObject    = require('./_an-object')
+  , anInstance  = require('./_an-instance')
+  , redefineAll = require('./_redefine-all')
+  , hide        = require('./_hide')
+  , forOf       = require('./_for-of')
+  , RETURN      = forOf.RETURN;
+
+var getMethod = function(fn){
+  return fn == null ? undefined : aFunction(fn);
+};
+
+var cleanupSubscription = function(subscription){
+  var cleanup = subscription._c;
+  if(cleanup){
+    subscription._c = undefined;
+    cleanup();
+  }
+};
+
+var subscriptionClosed = function(subscription){
+  return subscription._o === undefined;
+};
+
+var closeSubscription = function(subscription){
+  if(!subscriptionClosed(subscription)){
+    subscription._o = undefined;
+    cleanupSubscription(subscription);
+  }
+};
+
+var Subscription = function(observer, subscriber){
+  anObject(observer);
+  this._c = undefined;
+  this._o = observer;
+  observer = new SubscriptionObserver(this);
+  try {
+    var cleanup      = subscriber(observer)
+      , subscription = cleanup;
+    if(cleanup != null){
+      if(typeof cleanup.unsubscribe === 'function')cleanup = function(){ subscription.unsubscribe(); };
+      else aFunction(cleanup);
+      this._c = cleanup;
+    }
+  } catch(e){
+    observer.error(e);
+    return;
+  } if(subscriptionClosed(this))cleanupSubscription(this);
+};
+
+Subscription.prototype = redefineAll({}, {
+  unsubscribe: function unsubscribe(){ closeSubscription(this); }
+});
+
+var SubscriptionObserver = function(subscription){
+  this._s = subscription;
+};
+
+SubscriptionObserver.prototype = redefineAll({}, {
+  next: function next(value){
+    var subscription = this._s;
+    if(!subscriptionClosed(subscription)){
+      var observer = subscription._o;
+      try {
+        var m = getMethod(observer.next);
+        if(m)return m.call(observer, value);
+      } catch(e){
+        try {
+          closeSubscription(subscription);
+        } finally {
+          throw e;
+        }
+      }
+    }
+  },
+  error: function error(value){
+    var subscription = this._s;
+    if(subscriptionClosed(subscription))throw value;
+    var observer = subscription._o;
+    subscription._o = undefined;
+    try {
+      var m = getMethod(observer.error);
+      if(!m)throw value;
+      value = m.call(observer, value);
+    } catch(e){
+      try {
+        cleanupSubscription(subscription);
+      } finally {
+        throw e;
+      }
+    } cleanupSubscription(subscription);
+    return value;
+  },
+  complete: function complete(value){
+    var subscription = this._s;
+    if(!subscriptionClosed(subscription)){
+      var observer = subscription._o;
+      subscription._o = undefined;
+      try {
+        var m = getMethod(observer.complete);
+        value = m ? m.call(observer, value) : undefined;
+      } catch(e){
+        try {
+          cleanupSubscription(subscription);
+        } finally {
+          throw e;
+        }
+      } cleanupSubscription(subscription);
+      return value;
+    }
+  }
+});
+
+var $Observable = function Observable(subscriber){
+  anInstance(this, $Observable, 'Observable', '_f')._f = aFunction(subscriber);
+};
+
+redefineAll($Observable.prototype, {
+  subscribe: function subscribe(observer){
+    return new Subscription(observer, this._f);
+  },
+  forEach: function forEach(fn){
+    var that = this;
+    return new (core.Promise || global.Promise)(function(resolve, reject){
+      aFunction(fn);
+      var subscription = that.subscribe({
+        next : function(value){
+          try {
+            return fn(value);
+          } catch(e){
+            reject(e);
+            subscription.unsubscribe();
+          }
+        },
+        error: reject,
+        complete: resolve
+      });
+    });
+  }
+});
+
+redefineAll($Observable, {
+  from: function from(x){
+    var C = typeof this === 'function' ? this : $Observable;
+    var method = getMethod(anObject(x)[OBSERVABLE]);
+    if(method){
+      var observable = anObject(method.call(x));
+      return observable.constructor === C ? observable : new C(function(observer){
+        return observable.subscribe(observer);
+      });
+    }
+    return new C(function(observer){
+      var done = false;
+      microtask(function(){
+        if(!done){
+          try {
+            if(forOf(x, false, function(it){
+              observer.next(it);
+              if(done)return RETURN;
+            }) === RETURN)return;
+          } catch(e){
+            if(done)throw e;
+            observer.error(e);
+            return;
+          } observer.complete();
+        }
+      });
+      return function(){ done = true; };
+    });
+  },
+  of: function of(){
+    for(var i = 0, l = arguments.length, items = Array(l); i < l;)items[i] = arguments[i++];
+    return new (typeof this === 'function' ? this : $Observable)(function(observer){
+      var done = false;
+      microtask(function(){
+        if(!done){
+          for(var i = 0; i < items.length; ++i){
+            observer.next(items[i]);
+            if(done)return;
+          } observer.complete();
+        }
+      });
+      return function(){ done = true; };
+    });
+  }
+});
+
+hide($Observable.prototype, OBSERVABLE, function(){ return this; });
+
+$export($export.G, {Observable: $Observable});
+
+require('./_set-species')('Observable');
+},{"./_a-function":4,"./_an-instance":7,"./_an-object":8,"./_core":24,"./_export":33,"./_for-of":38,"./_global":39,"./_hide":41,"./_microtask":65,"./_redefine-all":87,"./_set-species":92,"./_wks":118}],275:[function(require,module,exports){
+var metadata                  = require('./_metadata')
+  , anObject                  = require('./_an-object')
+  , toMetaKey                 = metadata.key
+  , ordinaryDefineOwnMetadata = metadata.set;
+
+metadata.exp({defineMetadata: function defineMetadata(metadataKey, metadataValue, target, targetKey){
+  ordinaryDefineOwnMetadata(metadataKey, metadataValue, anObject(target), toMetaKey(targetKey));
+}});
+},{"./_an-object":8,"./_metadata":64}],276:[function(require,module,exports){
+var metadata               = require('./_metadata')
+  , anObject               = require('./_an-object')
+  , toMetaKey              = metadata.key
+  , getOrCreateMetadataMap = metadata.map
+  , store                  = metadata.store;
+
+metadata.exp({deleteMetadata: function deleteMetadata(metadataKey, target /*, targetKey */){
+  var targetKey   = arguments.length < 3 ? undefined : toMetaKey(arguments[2])
+    , metadataMap = getOrCreateMetadataMap(anObject(target), targetKey, false);
+  if(metadataMap === undefined || !metadataMap['delete'](metadataKey))return false;
+  if(metadataMap.size)return true;
+  var targetMetadata = store.get(target);
+  targetMetadata['delete'](targetKey);
+  return !!targetMetadata.size || store['delete'](target);
+}});
+},{"./_an-object":8,"./_metadata":64}],277:[function(require,module,exports){
+var Set                     = require('./es6.set')
+  , from                    = require('./_array-from-iterable')
+  , metadata                = require('./_metadata')
+  , anObject                = require('./_an-object')
+  , getPrototypeOf          = require('./_object-gpo')
+  , ordinaryOwnMetadataKeys = metadata.keys
+  , toMetaKey               = metadata.key;
+
+var ordinaryMetadataKeys = function(O, P){
+  var oKeys  = ordinaryOwnMetadataKeys(O, P)
+    , parent = getPrototypeOf(O);
+  if(parent === null)return oKeys;
+  var pKeys  = ordinaryMetadataKeys(parent, P);
+  return pKeys.length ? oKeys.length ? from(new Set(oKeys.concat(pKeys))) : pKeys : oKeys;
+};
+
+metadata.exp({getMetadataKeys: function getMetadataKeys(target /*, targetKey */){
+  return ordinaryMetadataKeys(anObject(target), arguments.length < 2 ? undefined : toMetaKey(arguments[1]));
+}});
+},{"./_an-object":8,"./_array-from-iterable":11,"./_metadata":64,"./_object-gpo":75,"./es6.set":222}],278:[function(require,module,exports){
+var metadata               = require('./_metadata')
+  , anObject               = require('./_an-object')
+  , getPrototypeOf         = require('./_object-gpo')
+  , ordinaryHasOwnMetadata = metadata.has
+  , ordinaryGetOwnMetadata = metadata.get
+  , toMetaKey              = metadata.key;
+
+var ordinaryGetMetadata = function(MetadataKey, O, P){
+  var hasOwn = ordinaryHasOwnMetadata(MetadataKey, O, P);
+  if(hasOwn)return ordinaryGetOwnMetadata(MetadataKey, O, P);
+  var parent = getPrototypeOf(O);
+  return parent !== null ? ordinaryGetMetadata(MetadataKey, parent, P) : undefined;
+};
+
+metadata.exp({getMetadata: function getMetadata(metadataKey, target /*, targetKey */){
+  return ordinaryGetMetadata(metadataKey, anObject(target), arguments.length < 3 ? undefined : toMetaKey(arguments[2]));
+}});
+},{"./_an-object":8,"./_metadata":64,"./_object-gpo":75}],279:[function(require,module,exports){
+var metadata                = require('./_metadata')
+  , anObject                = require('./_an-object')
+  , ordinaryOwnMetadataKeys = metadata.keys
+  , toMetaKey               = metadata.key;
+
+metadata.exp({getOwnMetadataKeys: function getOwnMetadataKeys(target /*, targetKey */){
+  return ordinaryOwnMetadataKeys(anObject(target), arguments.length < 2 ? undefined : toMetaKey(arguments[1]));
+}});
+},{"./_an-object":8,"./_metadata":64}],280:[function(require,module,exports){
+var metadata               = require('./_metadata')
+  , anObject               = require('./_an-object')
+  , ordinaryGetOwnMetadata = metadata.get
+  , toMetaKey              = metadata.key;
+
+metadata.exp({getOwnMetadata: function getOwnMetadata(metadataKey, target /*, targetKey */){
+  return ordinaryGetOwnMetadata(metadataKey, anObject(target)
+    , arguments.length < 3 ? undefined : toMetaKey(arguments[2]));
+}});
+},{"./_an-object":8,"./_metadata":64}],281:[function(require,module,exports){
+var metadata               = require('./_metadata')
+  , anObject               = require('./_an-object')
+  , getPrototypeOf         = require('./_object-gpo')
+  , ordinaryHasOwnMetadata = metadata.has
+  , toMetaKey              = metadata.key;
+
+var ordinaryHasMetadata = function(MetadataKey, O, P){
+  var hasOwn = ordinaryHasOwnMetadata(MetadataKey, O, P);
+  if(hasOwn)return true;
+  var parent = getPrototypeOf(O);
+  return parent !== null ? ordinaryHasMetadata(MetadataKey, parent, P) : false;
+};
+
+metadata.exp({hasMetadata: function hasMetadata(metadataKey, target /*, targetKey */){
+  return ordinaryHasMetadata(metadataKey, anObject(target), arguments.length < 3 ? undefined : toMetaKey(arguments[2]));
+}});
+},{"./_an-object":8,"./_metadata":64,"./_object-gpo":75}],282:[function(require,module,exports){
+var metadata               = require('./_metadata')
+  , anObject               = require('./_an-object')
+  , ordinaryHasOwnMetadata = metadata.has
+  , toMetaKey              = metadata.key;
+
+metadata.exp({hasOwnMetadata: function hasOwnMetadata(metadataKey, target /*, targetKey */){
+  return ordinaryHasOwnMetadata(metadataKey, anObject(target)
+    , arguments.length < 3 ? undefined : toMetaKey(arguments[2]));
+}});
+},{"./_an-object":8,"./_metadata":64}],283:[function(require,module,exports){
+var metadata                  = require('./_metadata')
+  , anObject                  = require('./_an-object')
+  , aFunction                 = require('./_a-function')
+  , toMetaKey                 = metadata.key
+  , ordinaryDefineOwnMetadata = metadata.set;
+
+metadata.exp({metadata: function metadata(metadataKey, metadataValue){
+  return function decorator(target, targetKey){
+    ordinaryDefineOwnMetadata(
+      metadataKey, metadataValue,
+      (targetKey !== undefined ? anObject : aFunction)(target),
+      toMetaKey(targetKey)
+    );
+  };
+}});
+},{"./_a-function":4,"./_an-object":8,"./_metadata":64}],284:[function(require,module,exports){
+// https://github.com/DavidBruant/Map-Set.prototype.toJSON
+var $export  = require('./_export');
+
+$export($export.P + $export.R, 'Set', {toJSON: require('./_collection-to-json')('Set')});
+},{"./_collection-to-json":21,"./_export":33}],285:[function(require,module,exports){
+'use strict';
+// https://github.com/mathiasbynens/String.prototype.at
+var $export = require('./_export')
+  , $at     = require('./_string-at')(true);
+
+$export($export.P, 'String', {
+  at: function at(pos){
+    return $at(this, pos);
+  }
+});
+},{"./_export":33,"./_string-at":98}],286:[function(require,module,exports){
+'use strict';
+// https://tc39.github.io/String.prototype.matchAll/
+var $export     = require('./_export')
+  , defined     = require('./_defined')
+  , toLength    = require('./_to-length')
+  , isRegExp    = require('./_is-regexp')
+  , getFlags    = require('./_flags')
+  , RegExpProto = RegExp.prototype;
+
+var $RegExpStringIterator = function(regexp, string){
+  this._r = regexp;
+  this._s = string;
+};
+
+require('./_iter-create')($RegExpStringIterator, 'RegExp String', function next(){
+  var match = this._r.exec(this._s);
+  return {value: match, done: match === null};
+});
+
+$export($export.P, 'String', {
+  matchAll: function matchAll(regexp){
+    defined(this);
+    if(!isRegExp(regexp))throw TypeError(regexp + ' is not a regexp!');
+    var S     = String(this)
+      , flags = 'flags' in RegExpProto ? String(regexp.flags) : getFlags.call(regexp)
+      , rx    = new RegExp(regexp.source, ~flags.indexOf('g') ? flags : 'g' + flags);
+    rx.lastIndex = toLength(regexp.lastIndex);
+    return new $RegExpStringIterator(rx, S);
+  }
+});
+},{"./_defined":28,"./_export":33,"./_flags":37,"./_is-regexp":51,"./_iter-create":53,"./_to-length":109}],287:[function(require,module,exports){
+'use strict';
+// https://github.com/tc39/proposal-string-pad-start-end
+var $export = require('./_export')
+  , $pad    = require('./_string-pad');
+
+$export($export.P, 'String', {
+  padEnd: function padEnd(maxLength /*, fillString = ' ' */){
+    return $pad(this, maxLength, arguments.length > 1 ? arguments[1] : undefined, false);
+  }
+});
+},{"./_export":33,"./_string-pad":101}],288:[function(require,module,exports){
+'use strict';
+// https://github.com/tc39/proposal-string-pad-start-end
+var $export = require('./_export')
+  , $pad    = require('./_string-pad');
+
+$export($export.P, 'String', {
+  padStart: function padStart(maxLength /*, fillString = ' ' */){
+    return $pad(this, maxLength, arguments.length > 1 ? arguments[1] : undefined, true);
+  }
+});
+},{"./_export":33,"./_string-pad":101}],289:[function(require,module,exports){
+'use strict';
+// https://github.com/sebmarkbage/ecmascript-string-left-right-trim
+require('./_string-trim')('trimLeft', function($trim){
+  return function trimLeft(){
+    return $trim(this, 1);
+  };
+}, 'trimStart');
+},{"./_string-trim":103}],290:[function(require,module,exports){
+'use strict';
+// https://github.com/sebmarkbage/ecmascript-string-left-right-trim
+require('./_string-trim')('trimRight', function($trim){
+  return function trimRight(){
+    return $trim(this, 2);
+  };
+}, 'trimEnd');
+},{"./_string-trim":103}],291:[function(require,module,exports){
+require('./_wks-define')('asyncIterator');
+},{"./_wks-define":116}],292:[function(require,module,exports){
+require('./_wks-define')('observable');
+},{"./_wks-define":116}],293:[function(require,module,exports){
+// https://github.com/ljharb/proposal-global
+var $export = require('./_export');
+
+$export($export.S, 'System', {global: require('./_global')});
+},{"./_export":33,"./_global":39}],294:[function(require,module,exports){
+var $iterators    = require('./es6.array.iterator')
+  , redefine      = require('./_redefine')
+  , global        = require('./_global')
+  , hide          = require('./_hide')
+  , Iterators     = require('./_iterators')
+  , wks           = require('./_wks')
+  , ITERATOR      = wks('iterator')
+  , TO_STRING_TAG = wks('toStringTag')
+  , ArrayValues   = Iterators.Array;
+
+for(var collections = ['NodeList', 'DOMTokenList', 'MediaList', 'StyleSheetList', 'CSSRuleList'], i = 0; i < 5; i++){
+  var NAME       = collections[i]
+    , Collection = global[NAME]
+    , proto      = Collection && Collection.prototype
+    , key;
+  if(proto){
+    if(!proto[ITERATOR])hide(proto, ITERATOR, ArrayValues);
+    if(!proto[TO_STRING_TAG])hide(proto, TO_STRING_TAG, NAME);
+    Iterators[NAME] = ArrayValues;
+    for(key in $iterators)if(!proto[key])redefine(proto, key, $iterators[key], true);
+  }
+}
+},{"./_global":39,"./_hide":41,"./_iterators":57,"./_redefine":88,"./_wks":118,"./es6.array.iterator":132}],295:[function(require,module,exports){
+var $export = require('./_export')
+  , $task   = require('./_task');
+$export($export.G + $export.B, {
+  setImmediate:   $task.set,
+  clearImmediate: $task.clear
+});
+},{"./_export":33,"./_task":105}],296:[function(require,module,exports){
+// ie9- setTimeout & setInterval additional parameters fix
+var global     = require('./_global')
+  , $export    = require('./_export')
+  , invoke     = require('./_invoke')
+  , partial    = require('./_partial')
+  , navigator  = global.navigator
+  , MSIE       = !!navigator && /MSIE .\./.test(navigator.userAgent); // <- dirty ie9- check
+var wrap = function(set){
+  return MSIE ? function(fn, time /*, ...args */){
+    return set(invoke(
+      partial,
+      [].slice.call(arguments, 2),
+      typeof fn == 'function' ? fn : Function(fn)
+    ), time);
+  } : set;
+};
+$export($export.G + $export.B + $export.F * MSIE, {
+  setTimeout:  wrap(global.setTimeout),
+  setInterval: wrap(global.setInterval)
+});
+},{"./_export":33,"./_global":39,"./_invoke":45,"./_partial":84}],297:[function(require,module,exports){
+require('./modules/es6.symbol');
+require('./modules/es6.object.create');
+require('./modules/es6.object.define-property');
+require('./modules/es6.object.define-properties');
+require('./modules/es6.object.get-own-property-descriptor');
+require('./modules/es6.object.get-prototype-of');
+require('./modules/es6.object.keys');
+require('./modules/es6.object.get-own-property-names');
+require('./modules/es6.object.freeze');
+require('./modules/es6.object.seal');
+require('./modules/es6.object.prevent-extensions');
+require('./modules/es6.object.is-frozen');
+require('./modules/es6.object.is-sealed');
+require('./modules/es6.object.is-extensible');
+require('./modules/es6.object.assign');
+require('./modules/es6.object.is');
+require('./modules/es6.object.set-prototype-of');
+require('./modules/es6.object.to-string');
+require('./modules/es6.function.bind');
+require('./modules/es6.function.name');
+require('./modules/es6.function.has-instance');
+require('./modules/es6.parse-int');
+require('./modules/es6.parse-float');
+require('./modules/es6.number.constructor');
+require('./modules/es6.number.to-fixed');
+require('./modules/es6.number.to-precision');
+require('./modules/es6.number.epsilon');
+require('./modules/es6.number.is-finite');
+require('./modules/es6.number.is-integer');
+require('./modules/es6.number.is-nan');
+require('./modules/es6.number.is-safe-integer');
+require('./modules/es6.number.max-safe-integer');
+require('./modules/es6.number.min-safe-integer');
+require('./modules/es6.number.parse-float');
+require('./modules/es6.number.parse-int');
+require('./modules/es6.math.acosh');
+require('./modules/es6.math.asinh');
+require('./modules/es6.math.atanh');
+require('./modules/es6.math.cbrt');
+require('./modules/es6.math.clz32');
+require('./modules/es6.math.cosh');
+require('./modules/es6.math.expm1');
+require('./modules/es6.math.fround');
+require('./modules/es6.math.hypot');
+require('./modules/es6.math.imul');
+require('./modules/es6.math.log10');
+require('./modules/es6.math.log1p');
+require('./modules/es6.math.log2');
+require('./modules/es6.math.sign');
+require('./modules/es6.math.sinh');
+require('./modules/es6.math.tanh');
+require('./modules/es6.math.trunc');
+require('./modules/es6.string.from-code-point');
+require('./modules/es6.string.raw');
+require('./modules/es6.string.trim');
+require('./modules/es6.string.iterator');
+require('./modules/es6.string.code-point-at');
+require('./modules/es6.string.ends-with');
+require('./modules/es6.string.includes');
+require('./modules/es6.string.repeat');
+require('./modules/es6.string.starts-with');
+require('./modules/es6.string.anchor');
+require('./modules/es6.string.big');
+require('./modules/es6.string.blink');
+require('./modules/es6.string.bold');
+require('./modules/es6.string.fixed');
+require('./modules/es6.string.fontcolor');
+require('./modules/es6.string.fontsize');
+require('./modules/es6.string.italics');
+require('./modules/es6.string.link');
+require('./modules/es6.string.small');
+require('./modules/es6.string.strike');
+require('./modules/es6.string.sub');
+require('./modules/es6.string.sup');
+require('./modules/es6.date.now');
+require('./modules/es6.date.to-json');
+require('./modules/es6.date.to-iso-string');
+require('./modules/es6.date.to-string');
+require('./modules/es6.date.to-primitive');
+require('./modules/es6.array.is-array');
+require('./modules/es6.array.from');
+require('./modules/es6.array.of');
+require('./modules/es6.array.join');
+require('./modules/es6.array.slice');
+require('./modules/es6.array.sort');
+require('./modules/es6.array.for-each');
+require('./modules/es6.array.map');
+require('./modules/es6.array.filter');
+require('./modules/es6.array.some');
+require('./modules/es6.array.every');
+require('./modules/es6.array.reduce');
+require('./modules/es6.array.reduce-right');
+require('./modules/es6.array.index-of');
+require('./modules/es6.array.last-index-of');
+require('./modules/es6.array.copy-within');
+require('./modules/es6.array.fill');
+require('./modules/es6.array.find');
+require('./modules/es6.array.find-index');
+require('./modules/es6.array.species');
+require('./modules/es6.array.iterator');
+require('./modules/es6.regexp.constructor');
+require('./modules/es6.regexp.to-string');
+require('./modules/es6.regexp.flags');
+require('./modules/es6.regexp.match');
+require('./modules/es6.regexp.replace');
+require('./modules/es6.regexp.search');
+require('./modules/es6.regexp.split');
+require('./modules/es6.promise');
+require('./modules/es6.map');
+require('./modules/es6.set');
+require('./modules/es6.weak-map');
+require('./modules/es6.weak-set');
+require('./modules/es6.typed.array-buffer');
+require('./modules/es6.typed.data-view');
+require('./modules/es6.typed.int8-array');
+require('./modules/es6.typed.uint8-array');
+require('./modules/es6.typed.uint8-clamped-array');
+require('./modules/es6.typed.int16-array');
+require('./modules/es6.typed.uint16-array');
+require('./modules/es6.typed.int32-array');
+require('./modules/es6.typed.uint32-array');
+require('./modules/es6.typed.float32-array');
+require('./modules/es6.typed.float64-array');
+require('./modules/es6.reflect.apply');
+require('./modules/es6.reflect.construct');
+require('./modules/es6.reflect.define-property');
+require('./modules/es6.reflect.delete-property');
+require('./modules/es6.reflect.enumerate');
+require('./modules/es6.reflect.get');
+require('./modules/es6.reflect.get-own-property-descriptor');
+require('./modules/es6.reflect.get-prototype-of');
+require('./modules/es6.reflect.has');
+require('./modules/es6.reflect.is-extensible');
+require('./modules/es6.reflect.own-keys');
+require('./modules/es6.reflect.prevent-extensions');
+require('./modules/es6.reflect.set');
+require('./modules/es6.reflect.set-prototype-of');
+require('./modules/es7.array.includes');
+require('./modules/es7.string.at');
+require('./modules/es7.string.pad-start');
+require('./modules/es7.string.pad-end');
+require('./modules/es7.string.trim-left');
+require('./modules/es7.string.trim-right');
+require('./modules/es7.string.match-all');
+require('./modules/es7.symbol.async-iterator');
+require('./modules/es7.symbol.observable');
+require('./modules/es7.object.get-own-property-descriptors');
+require('./modules/es7.object.values');
+require('./modules/es7.object.entries');
+require('./modules/es7.object.define-getter');
+require('./modules/es7.object.define-setter');
+require('./modules/es7.object.lookup-getter');
+require('./modules/es7.object.lookup-setter');
+require('./modules/es7.map.to-json');
+require('./modules/es7.set.to-json');
+require('./modules/es7.system.global');
+require('./modules/es7.error.is-error');
+require('./modules/es7.math.iaddh');
+require('./modules/es7.math.isubh');
+require('./modules/es7.math.imulh');
+require('./modules/es7.math.umulh');
+require('./modules/es7.reflect.define-metadata');
+require('./modules/es7.reflect.delete-metadata');
+require('./modules/es7.reflect.get-metadata');
+require('./modules/es7.reflect.get-metadata-keys');
+require('./modules/es7.reflect.get-own-metadata');
+require('./modules/es7.reflect.get-own-metadata-keys');
+require('./modules/es7.reflect.has-metadata');
+require('./modules/es7.reflect.has-own-metadata');
+require('./modules/es7.reflect.metadata');
+require('./modules/es7.asap');
+require('./modules/es7.observable');
+require('./modules/web.timers');
+require('./modules/web.immediate');
+require('./modules/web.dom.iterable');
+module.exports = require('./modules/_core');
+},{"./modules/_core":24,"./modules/es6.array.copy-within":122,"./modules/es6.array.every":123,"./modules/es6.array.fill":124,"./modules/es6.array.filter":125,"./modules/es6.array.find":127,"./modules/es6.array.find-index":126,"./modules/es6.array.for-each":128,"./modules/es6.array.from":129,"./modules/es6.array.index-of":130,"./modules/es6.array.is-array":131,"./modules/es6.array.iterator":132,"./modules/es6.array.join":133,"./modules/es6.array.last-index-of":134,"./modules/es6.array.map":135,"./modules/es6.array.of":136,"./modules/es6.array.reduce":138,"./modules/es6.array.reduce-right":137,"./modules/es6.array.slice":139,"./modules/es6.array.some":140,"./modules/es6.array.sort":141,"./modules/es6.array.species":142,"./modules/es6.date.now":143,"./modules/es6.date.to-iso-string":144,"./modules/es6.date.to-json":145,"./modules/es6.date.to-primitive":146,"./modules/es6.date.to-string":147,"./modules/es6.function.bind":148,"./modules/es6.function.has-instance":149,"./modules/es6.function.name":150,"./modules/es6.map":151,"./modules/es6.math.acosh":152,"./modules/es6.math.asinh":153,"./modules/es6.math.atanh":154,"./modules/es6.math.cbrt":155,"./modules/es6.math.clz32":156,"./modules/es6.math.cosh":157,"./modules/es6.math.expm1":158,"./modules/es6.math.fround":159,"./modules/es6.math.hypot":160,"./modules/es6.math.imul":161,"./modules/es6.math.log10":162,"./modules/es6.math.log1p":163,"./modules/es6.math.log2":164,"./modules/es6.math.sign":165,"./modules/es6.math.sinh":166,"./modules/es6.math.tanh":167,"./modules/es6.math.trunc":168,"./modules/es6.number.constructor":169,"./modules/es6.number.epsilon":170,"./modules/es6.number.is-finite":171,"./modules/es6.number.is-integer":172,"./modules/es6.number.is-nan":173,"./modules/es6.number.is-safe-integer":174,"./modules/es6.number.max-safe-integer":175,"./modules/es6.number.min-safe-integer":176,"./modules/es6.number.parse-float":177,"./modules/es6.number.parse-int":178,"./modules/es6.number.to-fixed":179,"./modules/es6.number.to-precision":180,"./modules/es6.object.assign":181,"./modules/es6.object.create":182,"./modules/es6.object.define-properties":183,"./modules/es6.object.define-property":184,"./modules/es6.object.freeze":185,"./modules/es6.object.get-own-property-descriptor":186,"./modules/es6.object.get-own-property-names":187,"./modules/es6.object.get-prototype-of":188,"./modules/es6.object.is":192,"./modules/es6.object.is-extensible":189,"./modules/es6.object.is-frozen":190,"./modules/es6.object.is-sealed":191,"./modules/es6.object.keys":193,"./modules/es6.object.prevent-extensions":194,"./modules/es6.object.seal":195,"./modules/es6.object.set-prototype-of":196,"./modules/es6.object.to-string":197,"./modules/es6.parse-float":198,"./modules/es6.parse-int":199,"./modules/es6.promise":200,"./modules/es6.reflect.apply":201,"./modules/es6.reflect.construct":202,"./modules/es6.reflect.define-property":203,"./modules/es6.reflect.delete-property":204,"./modules/es6.reflect.enumerate":205,"./modules/es6.reflect.get":208,"./modules/es6.reflect.get-own-property-descriptor":206,"./modules/es6.reflect.get-prototype-of":207,"./modules/es6.reflect.has":209,"./modules/es6.reflect.is-extensible":210,"./modules/es6.reflect.own-keys":211,"./modules/es6.reflect.prevent-extensions":212,"./modules/es6.reflect.set":214,"./modules/es6.reflect.set-prototype-of":213,"./modules/es6.regexp.constructor":215,"./modules/es6.regexp.flags":216,"./modules/es6.regexp.match":217,"./modules/es6.regexp.replace":218,"./modules/es6.regexp.search":219,"./modules/es6.regexp.split":220,"./modules/es6.regexp.to-string":221,"./modules/es6.set":222,"./modules/es6.string.anchor":223,"./modules/es6.string.big":224,"./modules/es6.string.blink":225,"./modules/es6.string.bold":226,"./modules/es6.string.code-point-at":227,"./modules/es6.string.ends-with":228,"./modules/es6.string.fixed":229,"./modules/es6.string.fontcolor":230,"./modules/es6.string.fontsize":231,"./modules/es6.string.from-code-point":232,"./modules/es6.string.includes":233,"./modules/es6.string.italics":234,"./modules/es6.string.iterator":235,"./modules/es6.string.link":236,"./modules/es6.string.raw":237,"./modules/es6.string.repeat":238,"./modules/es6.string.small":239,"./modules/es6.string.starts-with":240,"./modules/es6.string.strike":241,"./modules/es6.string.sub":242,"./modules/es6.string.sup":243,"./modules/es6.string.trim":244,"./modules/es6.symbol":245,"./modules/es6.typed.array-buffer":246,"./modules/es6.typed.data-view":247,"./modules/es6.typed.float32-array":248,"./modules/es6.typed.float64-array":249,"./modules/es6.typed.int16-array":250,"./modules/es6.typed.int32-array":251,"./modules/es6.typed.int8-array":252,"./modules/es6.typed.uint16-array":253,"./modules/es6.typed.uint32-array":254,"./modules/es6.typed.uint8-array":255,"./modules/es6.typed.uint8-clamped-array":256,"./modules/es6.weak-map":257,"./modules/es6.weak-set":258,"./modules/es7.array.includes":259,"./modules/es7.asap":260,"./modules/es7.error.is-error":261,"./modules/es7.map.to-json":262,"./modules/es7.math.iaddh":263,"./modules/es7.math.imulh":264,"./modules/es7.math.isubh":265,"./modules/es7.math.umulh":266,"./modules/es7.object.define-getter":267,"./modules/es7.object.define-setter":268,"./modules/es7.object.entries":269,"./modules/es7.object.get-own-property-descriptors":270,"./modules/es7.object.lookup-getter":271,"./modules/es7.object.lookup-setter":272,"./modules/es7.object.values":273,"./modules/es7.observable":274,"./modules/es7.reflect.define-metadata":275,"./modules/es7.reflect.delete-metadata":276,"./modules/es7.reflect.get-metadata":278,"./modules/es7.reflect.get-metadata-keys":277,"./modules/es7.reflect.get-own-metadata":280,"./modules/es7.reflect.get-own-metadata-keys":279,"./modules/es7.reflect.has-metadata":281,"./modules/es7.reflect.has-own-metadata":282,"./modules/es7.reflect.metadata":283,"./modules/es7.set.to-json":284,"./modules/es7.string.at":285,"./modules/es7.string.match-all":286,"./modules/es7.string.pad-end":287,"./modules/es7.string.pad-start":288,"./modules/es7.string.trim-left":289,"./modules/es7.string.trim-right":290,"./modules/es7.symbol.async-iterator":291,"./modules/es7.symbol.observable":292,"./modules/es7.system.global":293,"./modules/web.dom.iterable":294,"./modules/web.immediate":295,"./modules/web.timers":296}],298:[function(require,module,exports){
+// shim for using process in browser
+
+var process = module.exports = {};
+var queue = [];
+var draining = false;
+var currentQueue;
+var queueIndex = -1;
+
+function cleanUpNextTick() {
+    if (!draining || !currentQueue) {
+        return;
+    }
+    draining = false;
+    if (currentQueue.length) {
+        queue = currentQueue.concat(queue);
+    } else {
+        queueIndex = -1;
+    }
+    if (queue.length) {
+        drainQueue();
+    }
+}
+
+function drainQueue() {
+    if (draining) {
+        return;
+    }
+    var timeout = setTimeout(cleanUpNextTick);
+    draining = true;
+
+    var len = queue.length;
+    while(len) {
+        currentQueue = queue;
+        queue = [];
+        while (++queueIndex < len) {
+            if (currentQueue) {
+                currentQueue[queueIndex].run();
+            }
+        }
+        queueIndex = -1;
+        len = queue.length;
+    }
+    currentQueue = null;
+    draining = false;
+    clearTimeout(timeout);
+}
+
+process.nextTick = function (fun) {
+    var args = new Array(arguments.length - 1);
+    if (arguments.length > 1) {
+        for (var i = 1; i < arguments.length; i++) {
+            args[i - 1] = arguments[i];
+        }
+    }
+    queue.push(new Item(fun, args));
+    if (queue.length === 1 && !draining) {
+        setTimeout(drainQueue, 0);
+    }
+};
+
+// v8 likes predictible objects
+function Item(fun, array) {
+    this.fun = fun;
+    this.array = array;
+}
+Item.prototype.run = function () {
+    this.fun.apply(null, this.array);
+};
+process.title = 'browser';
+process.browser = true;
+process.env = {};
+process.argv = [];
+process.version = ''; // empty string to avoid regexp issues
+process.versions = {};
+
+function noop() {}
+
+process.on = noop;
+process.addListener = noop;
+process.once = noop;
+process.off = noop;
+process.removeListener = noop;
+process.removeAllListeners = noop;
+process.emit = noop;
+
+process.binding = function (name) {
+    throw new Error('process.binding is not supported');
+};
+
+process.cwd = function () { return '/' };
+process.chdir = function (dir) {
+    throw new Error('process.chdir is not supported');
+};
+process.umask = function() { return 0; };
+
+},{}],299:[function(require,module,exports){
+/*!
+ * jQuery JavaScript Library v2.2.3
+ * http://jquery.com/
+ *
+ * Includes Sizzle.js
+ * http://sizzlejs.com/
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license
+ * http://jquery.org/license
+ *
+ * Date: 2016-04-05T19:26Z
+ */
+
+(function( global, factory ) {
+
+	if ( typeof module === "object" && typeof module.exports === "object" ) {
+		// For CommonJS and CommonJS-like environments where a proper `window`
+		// is present, execute the factory and get jQuery.
+		// For environments that do not have a `window` with a `document`
+		// (such as Node.js), expose a factory as module.exports.
+		// This accentuates the need for the creation of a real `window`.
+		// e.g. var jQuery = require("jquery")(window);
+		// See ticket #14549 for more info.
+		module.exports = global.document ?
+			factory( global, true ) :
+			function( w ) {
+				if ( !w.document ) {
+					throw new Error( "jQuery requires a window with a document" );
+				}
+				return factory( w );
+			};
+	} else {
+		factory( global );
+	}
+
+// Pass this if window is not defined yet
+}(typeof window !== "undefined" ? window : this, function( window, noGlobal ) {
+
+// Support: Firefox 18+
+// Can't be in strict mode, several libs including ASP.NET trace
+// the stack via arguments.caller.callee and Firefox dies if
+// you try to trace through "use strict" call chains. (#13335)
+//"use strict";
+var arr = [];
+
+var document = window.document;
+
+var slice = arr.slice;
+
+var concat = arr.concat;
+
+var push = arr.push;
+
+var indexOf = arr.indexOf;
+
+var class2type = {};
+
+var toString = class2type.toString;
+
+var hasOwn = class2type.hasOwnProperty;
+
+var support = {};
+
+
+
+var
+	version = "2.2.3",
+
+	// Define a local copy of jQuery
+	jQuery = function( selector, context ) {
+
+		// The jQuery object is actually just the init constructor 'enhanced'
+		// Need init if jQuery is called (just allow error to be thrown if not included)
+		return new jQuery.fn.init( selector, context );
+	},
+
+	// Support: Android<4.1
+	// Make sure we trim BOM and NBSP
+	rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,
+
+	// Matches dashed string for camelizing
+	rmsPrefix = /^-ms-/,
+	rdashAlpha = /-([\da-z])/gi,
+
+	// Used by jQuery.camelCase as callback to replace()
+	fcamelCase = function( all, letter ) {
+		return letter.toUpperCase();
+	};
+
+jQuery.fn = jQuery.prototype = {
+
+	// The current version of jQuery being used
+	jquery: version,
+
+	constructor: jQuery,
+
+	// Start with an empty selector
+	selector: "",
+
+	// The default length of a jQuery object is 0
+	length: 0,
+
+	toArray: function() {
+		return slice.call( this );
+	},
+
+	// Get the Nth element in the matched element set OR
+	// Get the whole matched element set as a clean array
+	get: function( num ) {
+		return num != null ?
+
+			// Return just the one element from the set
+			( num < 0 ? this[ num + this.length ] : this[ num ] ) :
+
+			// Return all the elements in a clean array
+			slice.call( this );
+	},
+
+	// Take an array of elements and push it onto the stack
+	// (returning the new matched element set)
+	pushStack: function( elems ) {
+
+		// Build a new jQuery matched element set
+		var ret = jQuery.merge( this.constructor(), elems );
+
+		// Add the old object onto the stack (as a reference)
+		ret.prevObject = this;
+		ret.context = this.context;
+
+		// Return the newly-formed element set
+		return ret;
+	},
+
+	// Execute a callback for every element in the matched set.
+	each: function( callback ) {
+		return jQuery.each( this, callback );
+	},
+
+	map: function( callback ) {
+		return this.pushStack( jQuery.map( this, function( elem, i ) {
+			return callback.call( elem, i, elem );
+		} ) );
+	},
+
+	slice: function() {
+		return this.pushStack( slice.apply( this, arguments ) );
+	},
+
+	first: function() {
+		return this.eq( 0 );
+	},
+
+	last: function() {
+		return this.eq( -1 );
+	},
+
+	eq: function( i ) {
+		var len = this.length,
+			j = +i + ( i < 0 ? len : 0 );
+		return this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] );
+	},
+
+	end: function() {
+		return this.prevObject || this.constructor();
+	},
+
+	// For internal use only.
+	// Behaves like an Array's method, not like a jQuery method.
+	push: push,
+	sort: arr.sort,
+	splice: arr.splice
+};
+
+jQuery.extend = jQuery.fn.extend = function() {
+	var options, name, src, copy, copyIsArray, clone,
+		target = arguments[ 0 ] || {},
+		i = 1,
+		length = arguments.length,
+		deep = false;
+
+	// Handle a deep copy situation
+	if ( typeof target === "boolean" ) {
+		deep = target;
+
+		// Skip the boolean and the target
+		target = arguments[ i ] || {};
+		i++;
+	}
+
+	// Handle case when target is a string or something (possible in deep copy)
+	if ( typeof target !== "object" && !jQuery.isFunction( target ) ) {
+		target = {};
+	}
+
+	// Extend jQuery itself if only one argument is passed
+	if ( i === length ) {
+		target = this;
+		i--;
+	}
+
+	for ( ; i < length; i++ ) {
+
+		// Only deal with non-null/undefined values
+		if ( ( options = arguments[ i ] ) != null ) {
+
+			// Extend the base object
+			for ( name in options ) {
+				src = target[ name ];
+				copy = options[ name ];
+
+				// Prevent never-ending loop
+				if ( target === copy ) {
+					continue;
+				}
+
+				// Recurse if we're merging plain objects or arrays
+				if ( deep && copy && ( jQuery.isPlainObject( copy ) ||
+					( copyIsArray = jQuery.isArray( copy ) ) ) ) {
+
+					if ( copyIsArray ) {
+						copyIsArray = false;
+						clone = src && jQuery.isArray( src ) ? src : [];
+
+					} else {
+						clone = src && jQuery.isPlainObject( src ) ? src : {};
+					}
+
+					// Never move original objects, clone them
+					target[ name ] = jQuery.extend( deep, clone, copy );
+
+				// Don't bring in undefined values
+				} else if ( copy !== undefined ) {
+					target[ name ] = copy;
+				}
+			}
+		}
+	}
+
+	// Return the modified object
+	return target;
+};
+
+jQuery.extend( {
+
+	// Unique for each copy of jQuery on the page
+	expando: "jQuery" + ( version + Math.random() ).replace( /\D/g, "" ),
+
+	// Assume jQuery is ready without the ready module
+	isReady: true,
+
+	error: function( msg ) {
+		throw new Error( msg );
+	},
+
+	noop: function() {},
+
+	isFunction: function( obj ) {
+		return jQuery.type( obj ) === "function";
+	},
+
+	isArray: Array.isArray,
+
+	isWindow: function( obj ) {
+		return obj != null && obj === obj.window;
+	},
+
+	isNumeric: function( obj ) {
+
+		// parseFloat NaNs numeric-cast false positives (null|true|false|"")
+		// ...but misinterprets leading-number strings, particularly hex literals ("0x...")
+		// subtraction forces infinities to NaN
+		// adding 1 corrects loss of precision from parseFloat (#15100)
+		var realStringObj = obj && obj.toString();
+		return !jQuery.isArray( obj ) && ( realStringObj - parseFloat( realStringObj ) + 1 ) >= 0;
+	},
+
+	isPlainObject: function( obj ) {
+		var key;
+
+		// Not plain objects:
+		// - Any object or value whose internal [[Class]] property is not "[object Object]"
+		// - DOM nodes
+		// - window
+		if ( jQuery.type( obj ) !== "object" || obj.nodeType || jQuery.isWindow( obj ) ) {
+			return false;
+		}
+
+		// Not own constructor property must be Object
+		if ( obj.constructor &&
+				!hasOwn.call( obj, "constructor" ) &&
+				!hasOwn.call( obj.constructor.prototype || {}, "isPrototypeOf" ) ) {
+			return false;
+		}
+
+		// Own properties are enumerated firstly, so to speed up,
+		// if last one is own, then all properties are own
+		for ( key in obj ) {}
+
+		return key === undefined || hasOwn.call( obj, key );
+	},
+
+	isEmptyObject: function( obj ) {
+		var name;
+		for ( name in obj ) {
+			return false;
+		}
+		return true;
+	},
+
+	type: function( obj ) {
+		if ( obj == null ) {
+			return obj + "";
+		}
+
+		// Support: Android<4.0, iOS<6 (functionish RegExp)
+		return typeof obj === "object" || typeof obj === "function" ?
+			class2type[ toString.call( obj ) ] || "object" :
+			typeof obj;
+	},
+
+	// Evaluates a script in a global context
+	globalEval: function( code ) {
+		var script,
+			indirect = eval;
+
+		code = jQuery.trim( code );
+
+		if ( code ) {
+
+			// If the code includes a valid, prologue position
+			// strict mode pragma, execute code by injecting a
+			// script tag into the document.
+			if ( code.indexOf( "use strict" ) === 1 ) {
+				script = document.createElement( "script" );
+				script.text = code;
+				document.head.appendChild( script ).parentNode.removeChild( script );
+			} else {
+
+				// Otherwise, avoid the DOM node creation, insertion
+				// and removal by using an indirect global eval
+
+				indirect( code );
+			}
+		}
+	},
+
+	// Convert dashed to camelCase; used by the css and data modules
+	// Support: IE9-11+
+	// Microsoft forgot to hump their vendor prefix (#9572)
+	camelCase: function( string ) {
+		return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase );
+	},
+
+	nodeName: function( elem, name ) {
+		return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();
+	},
+
+	each: function( obj, callback ) {
+		var length, i = 0;
+
+		if ( isArrayLike( obj ) ) {
+			length = obj.length;
+			for ( ; i < length; i++ ) {
+				if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {
+					break;
+				}
+			}
+		} else {
+			for ( i in obj ) {
+				if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {
+					break;
+				}
+			}
+		}
+
+		return obj;
+	},
+
+	// Support: Android<4.1
+	trim: function( text ) {
+		return text == null ?
+			"" :
+			( text + "" ).replace( rtrim, "" );
+	},
+
+	// results is for internal usage only
+	makeArray: function( arr, results ) {
+		var ret = results || [];
+
+		if ( arr != null ) {
+			if ( isArrayLike( Object( arr ) ) ) {
+				jQuery.merge( ret,
+					typeof arr === "string" ?
+					[ arr ] : arr
+				);
+			} else {
+				push.call( ret, arr );
+			}
+		}
+
+		return ret;
+	},
+
+	inArray: function( elem, arr, i ) {
+		return arr == null ? -1 : indexOf.call( arr, elem, i );
+	},
+
+	merge: function( first, second ) {
+		var len = +second.length,
+			j = 0,
+			i = first.length;
+
+		for ( ; j < len; j++ ) {
+			first[ i++ ] = second[ j ];
+		}
+
+		first.length = i;
+
+		return first;
+	},
+
+	grep: function( elems, callback, invert ) {
+		var callbackInverse,
+			matches = [],
+			i = 0,
+			length = elems.length,
+			callbackExpect = !invert;
+
+		// Go through the array, only saving the items
+		// that pass the validator function
+		for ( ; i < length; i++ ) {
+			callbackInverse = !callback( elems[ i ], i );
+			if ( callbackInverse !== callbackExpect ) {
+				matches.push( elems[ i ] );
+			}
+		}
+
+		return matches;
+	},
+
+	// arg is for internal usage only
+	map: function( elems, callback, arg ) {
+		var length, value,
+			i = 0,
+			ret = [];
+
+		// Go through the array, translating each of the items to their new values
+		if ( isArrayLike( elems ) ) {
+			length = elems.length;
+			for ( ; i < length; i++ ) {
+				value = callback( elems[ i ], i, arg );
+
+				if ( value != null ) {
+					ret.push( value );
+				}
+			}
+
+		// Go through every key on the object,
+		} else {
+			for ( i in elems ) {
+				value = callback( elems[ i ], i, arg );
+
+				if ( value != null ) {
+					ret.push( value );
+				}
+			}
+		}
+
+		// Flatten any nested arrays
+		return concat.apply( [], ret );
+	},
+
+	// A global GUID counter for objects
+	guid: 1,
+
+	// Bind a function to a context, optionally partially applying any
+	// arguments.
+	proxy: function( fn, context ) {
+		var tmp, args, proxy;
+
+		if ( typeof context === "string" ) {
+			tmp = fn[ context ];
+			context = fn;
+			fn = tmp;
+		}
+
+		// Quick check to determine if target is callable, in the spec
+		// this throws a TypeError, but we will just return undefined.
+		if ( !jQuery.isFunction( fn ) ) {
+			return undefined;
+		}
+
+		// Simulated bind
+		args = slice.call( arguments, 2 );
+		proxy = function() {
+			return fn.apply( context || this, args.concat( slice.call( arguments ) ) );
+		};
+
+		// Set the guid of unique handler to the same of original handler, so it can be removed
+		proxy.guid = fn.guid = fn.guid || jQuery.guid++;
+
+		return proxy;
+	},
+
+	now: Date.now,
+
+	// jQuery.support is not used in Core but other projects attach their
+	// properties to it so it needs to exist.
+	support: support
+} );
+
+// JSHint would error on this code due to the Symbol not being defined in ES5.
+// Defining this global in .jshintrc would create a danger of using the global
+// unguarded in another place, it seems safer to just disable JSHint for these
+// three lines.
+/* jshint ignore: start */
+if ( typeof Symbol === "function" ) {
+	jQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ];
+}
+/* jshint ignore: end */
+
+// Populate the class2type map
+jQuery.each( "Boolean Number String Function Array Date RegExp Object Error Symbol".split( " " ),
+function( i, name ) {
+	class2type[ "[object " + name + "]" ] = name.toLowerCase();
+} );
+
+function isArrayLike( obj ) {
+
+	// Support: iOS 8.2 (not reproducible in simulator)
+	// `in` check used to prevent JIT error (gh-2145)
+	// hasOwn isn't used here due to false negatives
+	// regarding Nodelist length in IE
+	var length = !!obj && "length" in obj && obj.length,
+		type = jQuery.type( obj );
+
+	if ( type === "function" || jQuery.isWindow( obj ) ) {
+		return false;
+	}
+
+	return type === "array" || length === 0 ||
+		typeof length === "number" && length > 0 && ( length - 1 ) in obj;
+}
+var Sizzle =
+/*!
+ * Sizzle CSS Selector Engine v2.2.1
+ * http://sizzlejs.com/
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license
+ * http://jquery.org/license
+ *
+ * Date: 2015-10-17
+ */
+(function( window ) {
+
+var i,
+	support,
+	Expr,
+	getText,
+	isXML,
+	tokenize,
+	compile,
+	select,
+	outermostContext,
+	sortInput,
+	hasDuplicate,
+
+	// Local document vars
+	setDocument,
+	document,
+	docElem,
+	documentIsHTML,
+	rbuggyQSA,
+	rbuggyMatches,
+	matches,
+	contains,
+
+	// Instance-specific data
+	expando = "sizzle" + 1 * new Date(),
+	preferredDoc = window.document,
+	dirruns = 0,
+	done = 0,
+	classCache = createCache(),
+	tokenCache = createCache(),
+	compilerCache = createCache(),
+	sortOrder = function( a, b ) {
+		if ( a === b ) {
+			hasDuplicate = true;
+		}
+		return 0;
+	},
+
+	// General-purpose constants
+	MAX_NEGATIVE = 1 << 31,
+
+	// Instance methods
+	hasOwn = ({}).hasOwnProperty,
+	arr = [],
+	pop = arr.pop,
+	push_native = arr.push,
+	push = arr.push,
+	slice = arr.slice,
+	// Use a stripped-down indexOf as it's faster than native
+	// http://jsperf.com/thor-indexof-vs-for/5
+	indexOf = function( list, elem ) {
+		var i = 0,
+			len = list.length;
+		for ( ; i < len; i++ ) {
+			if ( list[i] === elem ) {
+				return i;
+			}
+		}
+		return -1;
+	},
+
+	booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",
+
+	// Regular expressions
+
+	// http://www.w3.org/TR/css3-selectors/#whitespace
+	whitespace = "[\\x20\\t\\r\\n\\f]",
+
+	// http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier
+	identifier = "(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",
+
+	// Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors
+	attributes = "\\[" + whitespace + "*(" + identifier + ")(?:" + whitespace +
+		// Operator (capture 2)
+		"*([*^$|!~]?=)" + whitespace +
+		// "Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]"
+		"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" + whitespace +
+		"*\\]",
+
+	pseudos = ":(" + identifier + ")(?:\\((" +
+		// To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:
+		// 1. quoted (capture 3; capture 4 or capture 5)
+		"('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|" +
+		// 2. simple (capture 6)
+		"((?:\\\\.|[^\\\\()[\\]]|" + attributes + ")*)|" +
+		// 3. anything else (capture 2)
+		".*" +
+		")\\)|)",
+
+	// Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter
+	rwhitespace = new RegExp( whitespace + "+", "g" ),
+	rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", "g" ),
+
+	rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ),
+	rcombinators = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace + "*" ),
+
+	rattributeQuotes = new RegExp( "=" + whitespace + "*([^\\]'\"]*?)" + whitespace + "*\\]", "g" ),
+
+	rpseudo = new RegExp( pseudos ),
+	ridentifier = new RegExp( "^" + identifier + "$" ),
+
+	matchExpr = {
+		"ID": new RegExp( "^#(" + identifier + ")" ),
+		"CLASS": new RegExp( "^\\.(" + identifier + ")" ),
+		"TAG": new RegExp( "^(" + identifier + "|[*])" ),
+		"ATTR": new RegExp( "^" + attributes ),
+		"PSEUDO": new RegExp( "^" + pseudos ),
+		"CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + whitespace +
+			"*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + whitespace +
+			"*(\\d+)|))" + whitespace + "*\\)|)", "i" ),
+		"bool": new RegExp( "^(?:" + booleans + ")$", "i" ),
+		// For use in libraries implementing .is()
+		// We use this for POS matching in `select`
+		"needsContext": new RegExp( "^" + whitespace + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" +
+			whitespace + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" )
+	},
+
+	rinputs = /^(?:input|select|textarea|button)$/i,
+	rheader = /^h\d$/i,
+
+	rnative = /^[^{]+\{\s*\[native \w/,
+
+	// Easily-parseable/retrievable ID or TAG or CLASS selectors
+	rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,
+
+	rsibling = /[+~]/,
+	rescape = /'|\\/g,
+
+	// CSS escapes http://www.w3.org/TR/CSS21/syndata.html#escaped-characters
+	runescape = new RegExp( "\\\\([\\da-f]{1,6}" + whitespace + "?|(" + whitespace + ")|.)", "ig" ),
+	funescape = function( _, escaped, escapedWhitespace ) {
+		var high = "0x" + escaped - 0x10000;
+		// NaN means non-codepoint
+		// Support: Firefox<24
+		// Workaround erroneous numeric interpretation of +"0x"
+		return high !== high || escapedWhitespace ?
+			escaped :
+			high < 0 ?
+				// BMP codepoint
+				String.fromCharCode( high + 0x10000 ) :
+				// Supplemental Plane codepoint (surrogate pair)
+				String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );
+	},
+
+	// Used for iframes
+	// See setDocument()
+	// Removing the function wrapper causes a "Permission Denied"
+	// error in IE
+	unloadHandler = function() {
+		setDocument();
+	};
+
+// Optimize for push.apply( _, NodeList )
+try {
+	push.apply(
+		(arr = slice.call( preferredDoc.childNodes )),
+		preferredDoc.childNodes
+	);
+	// Support: Android<4.0
+	// Detect silently failing push.apply
+	arr[ preferredDoc.childNodes.length ].nodeType;
+} catch ( e ) {
+	push = { apply: arr.length ?
+
+		// Leverage slice if possible
+		function( target, els ) {
+			push_native.apply( target, slice.call(els) );
+		} :
+
+		// Support: IE<9
+		// Otherwise append directly
+		function( target, els ) {
+			var j = target.length,
+				i = 0;
+			// Can't trust NodeList.length
+			while ( (target[j++] = els[i++]) ) {}
+			target.length = j - 1;
+		}
+	};
+}
+
+function Sizzle( selector, context, results, seed ) {
+	var m, i, elem, nid, nidselect, match, groups, newSelector,
+		newContext = context && context.ownerDocument,
+
+		// nodeType defaults to 9, since context defaults to document
+		nodeType = context ? context.nodeType : 9;
+
+	results = results || [];
+
+	// Return early from calls with invalid selector or context
+	if ( typeof selector !== "string" || !selector ||
+		nodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) {
+
+		return results;
+	}
+
+	// Try to shortcut find operations (as opposed to filters) in HTML documents
+	if ( !seed ) {
+
+		if ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) {
+			setDocument( context );
+		}
+		context = context || document;
+
+		if ( documentIsHTML ) {
+
+			// If the selector is sufficiently simple, try using a "get*By*" DOM method
+			// (excepting DocumentFragment context, where the methods don't exist)
+			if ( nodeType !== 11 && (match = rquickExpr.exec( selector )) ) {
+
+				// ID selector
+				if ( (m = match[1]) ) {
+
+					// Document context
+					if ( nodeType === 9 ) {
+						if ( (elem = context.getElementById( m )) ) {
+
+							// Support: IE, Opera, Webkit
+							// TODO: identify versions
+							// getElementById can match elements by name instead of ID
+							if ( elem.id === m ) {
+								results.push( elem );
+								return results;
+							}
+						} else {
+							return results;
+						}
+
+					// Element context
+					} else {
+
+						// Support: IE, Opera, Webkit
+						// TODO: identify versions
+						// getElementById can match elements by name instead of ID
+						if ( newContext && (elem = newContext.getElementById( m )) &&
+							contains( context, elem ) &&
+							elem.id === m ) {
+
+							results.push( elem );
+							return results;
+						}
+					}
+
+				// Type selector
+				} else if ( match[2] ) {
+					push.apply( results, context.getElementsByTagName( selector ) );
+					return results;
+
+				// Class selector
+				} else if ( (m = match[3]) && support.getElementsByClassName &&
+					context.getElementsByClassName ) {
+
+					push.apply( results, context.getElementsByClassName( m ) );
+					return results;
+				}
+			}
+
+			// Take advantage of querySelectorAll
+			if ( support.qsa &&
+				!compilerCache[ selector + " " ] &&
+				(!rbuggyQSA || !rbuggyQSA.test( selector )) ) {
+
+				if ( nodeType !== 1 ) {
+					newContext = context;
+					newSelector = selector;
+
+				// qSA looks outside Element context, which is not what we want
+				// Thanks to Andrew Dupont for this workaround technique
+				// Support: IE <=8
+				// Exclude object elements
+				} else if ( context.nodeName.toLowerCase() !== "object" ) {
+
+					// Capture the context ID, setting it first if necessary
+					if ( (nid = context.getAttribute( "id" )) ) {
+						nid = nid.replace( rescape, "\\$&" );
+					} else {
+						context.setAttribute( "id", (nid = expando) );
+					}
+
+					// Prefix every selector in the list
+					groups = tokenize( selector );
+					i = groups.length;
+					nidselect = ridentifier.test( nid ) ? "#" + nid : "[id='" + nid + "']";
+					while ( i-- ) {
+						groups[i] = nidselect + " " + toSelector( groups[i] );
+					}
+					newSelector = groups.join( "," );
+
+					// Expand context for sibling selectors
+					newContext = rsibling.test( selector ) && testContext( context.parentNode ) ||
+						context;
+				}
+
+				if ( newSelector ) {
+					try {
+						push.apply( results,
+							newContext.querySelectorAll( newSelector )
+						);
+						return results;
+					} catch ( qsaError ) {
+					} finally {
+						if ( nid === expando ) {
+							context.removeAttribute( "id" );
+						}
+					}
+				}
+			}
+		}
+	}
+
+	// All others
+	return select( selector.replace( rtrim, "$1" ), context, results, seed );
+}
+
+/**
+ * Create key-value caches of limited size
+ * @returns {function(string, object)} Returns the Object data after storing it on itself with
+ *	property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)
+ *	deleting the oldest entry
+ */
+function createCache() {
+	var keys = [];
+
+	function cache( key, value ) {
+		// Use (key + " ") to avoid collision with native prototype properties (see Issue #157)
+		if ( keys.push( key + " " ) > Expr.cacheLength ) {
+			// Only keep the most recent entries
+			delete cache[ keys.shift() ];
+		}
+		return (cache[ key + " " ] = value);
+	}
+	return cache;
+}
+
+/**
+ * Mark a function for special use by Sizzle
+ * @param {Function} fn The function to mark
+ */
+function markFunction( fn ) {
+	fn[ expando ] = true;
+	return fn;
+}
+
+/**
+ * Support testing using an element
+ * @param {Function} fn Passed the created div and expects a boolean result
+ */
+function assert( fn ) {
+	var div = document.createElement("div");
+
+	try {
+		return !!fn( div );
+	} catch (e) {
+		return false;
+	} finally {
+		// Remove from its parent by default
+		if ( div.parentNode ) {
+			div.parentNode.removeChild( div );
+		}
+		// release memory in IE
+		div = null;
+	}
+}
+
+/**
+ * Adds the same handler for all of the specified attrs
+ * @param {String} attrs Pipe-separated list of attributes
+ * @param {Function} handler The method that will be applied
+ */
+function addHandle( attrs, handler ) {
+	var arr = attrs.split("|"),
+		i = arr.length;
+
+	while ( i-- ) {
+		Expr.attrHandle[ arr[i] ] = handler;
+	}
+}
+
+/**
+ * Checks document order of two siblings
+ * @param {Element} a
+ * @param {Element} b
+ * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b
+ */
+function siblingCheck( a, b ) {
+	var cur = b && a,
+		diff = cur && a.nodeType === 1 && b.nodeType === 1 &&
+			( ~b.sourceIndex || MAX_NEGATIVE ) -
+			( ~a.sourceIndex || MAX_NEGATIVE );
+
+	// Use IE sourceIndex if available on both nodes
+	if ( diff ) {
+		return diff;
+	}
+
+	// Check if b follows a
+	if ( cur ) {
+		while ( (cur = cur.nextSibling) ) {
+			if ( cur === b ) {
+				return -1;
+			}
+		}
+	}
+
+	return a ? 1 : -1;
+}
+
+/**
+ * Returns a function to use in pseudos for input types
+ * @param {String} type
+ */
+function createInputPseudo( type ) {
+	return function( elem ) {
+		var name = elem.nodeName.toLowerCase();
+		return name === "input" && elem.type === type;
+	};
+}
+
+/**
+ * Returns a function to use in pseudos for buttons
+ * @param {String} type
+ */
+function createButtonPseudo( type ) {
+	return function( elem ) {
+		var name = elem.nodeName.toLowerCase();
+		return (name === "input" || name === "button") && elem.type === type;
+	};
+}
+
+/**
+ * Returns a function to use in pseudos for positionals
+ * @param {Function} fn
+ */
+function createPositionalPseudo( fn ) {
+	return markFunction(function( argument ) {
+		argument = +argument;
+		return markFunction(function( seed, matches ) {
+			var j,
+				matchIndexes = fn( [], seed.length, argument ),
+				i = matchIndexes.length;
+
+			// Match elements found at the specified indexes
+			while ( i-- ) {
+				if ( seed[ (j = matchIndexes[i]) ] ) {
+					seed[j] = !(matches[j] = seed[j]);
+				}
+			}
+		});
+	});
+}
+
+/**
+ * Checks a node for validity as a Sizzle context
+ * @param {Element|Object=} context
+ * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value
+ */
+function testContext( context ) {
+	return context && typeof context.getElementsByTagName !== "undefined" && context;
+}
+
+// Expose support vars for convenience
+support = Sizzle.support = {};
+
+/**
+ * Detects XML nodes
+ * @param {Element|Object} elem An element or a document
+ * @returns {Boolean} True iff elem is a non-HTML XML node
+ */
+isXML = Sizzle.isXML = function( elem ) {
+	// documentElement is verified for cases where it doesn't yet exist
+	// (such as loading iframes in IE - #4833)
+	var documentElement = elem && (elem.ownerDocument || elem).documentElement;
+	return documentElement ? documentElement.nodeName !== "HTML" : false;
+};
+
+/**
+ * Sets document-related variables once based on the current document
+ * @param {Element|Object} [doc] An element or document object to use to set the document
+ * @returns {Object} Returns the current document
+ */
+setDocument = Sizzle.setDocument = function( node ) {
+	var hasCompare, parent,
+		doc = node ? node.ownerDocument || node : preferredDoc;
+
+	// Return early if doc is invalid or already selected
+	if ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) {
+		return document;
+	}
+
+	// Update global variables
+	document = doc;
+	docElem = document.documentElement;
+	documentIsHTML = !isXML( document );
+
+	// Support: IE 9-11, Edge
+	// Accessing iframe documents after unload throws "permission denied" errors (jQuery #13936)
+	if ( (parent = document.defaultView) && parent.top !== parent ) {
+		// Support: IE 11
+		if ( parent.addEventListener ) {
+			parent.addEventListener( "unload", unloadHandler, false );
+
+		// Support: IE 9 - 10 only
+		} else if ( parent.attachEvent ) {
+			parent.attachEvent( "onunload", unloadHandler );
+		}
+	}
+
+	/* Attributes
+	---------------------------------------------------------------------- */
+
+	// Support: IE<8
+	// Verify that getAttribute really returns attributes and not properties
+	// (excepting IE8 booleans)
+	support.attributes = assert(function( div ) {
+		div.className = "i";
+		return !div.getAttribute("className");
+	});
+
+	/* getElement(s)By*
+	---------------------------------------------------------------------- */
+
+	// Check if getElementsByTagName("*") returns only elements
+	support.getElementsByTagName = assert(function( div ) {
+		div.appendChild( document.createComment("") );
+		return !div.getElementsByTagName("*").length;
+	});
+
+	// Support: IE<9
+	support.getElementsByClassName = rnative.test( document.getElementsByClassName );
+
+	// Support: IE<10
+	// Check if getElementById returns elements by name
+	// The broken getElementById methods don't pick up programatically-set names,
+	// so use a roundabout getElementsByName test
+	support.getById = assert(function( div ) {
+		docElem.appendChild( div ).id = expando;
+		return !document.getElementsByName || !document.getElementsByName( expando ).length;
+	});
+
+	// ID find and filter
+	if ( support.getById ) {
+		Expr.find["ID"] = function( id, context ) {
+			if ( typeof context.getElementById !== "undefined" && documentIsHTML ) {
+				var m = context.getElementById( id );
+				return m ? [ m ] : [];
+			}
+		};
+		Expr.filter["ID"] = function( id ) {
+			var attrId = id.replace( runescape, funescape );
+			return function( elem ) {
+				return elem.getAttribute("id") === attrId;
+			};
+		};
+	} else {
+		// Support: IE6/7
+		// getElementById is not reliable as a find shortcut
+		delete Expr.find["ID"];
+
+		Expr.filter["ID"] =  function( id ) {
+			var attrId = id.replace( runescape, funescape );
+			return function( elem ) {
+				var node = typeof elem.getAttributeNode !== "undefined" &&
+					elem.getAttributeNode("id");
+				return node && node.value === attrId;
+			};
+		};
+	}
+
+	// Tag
+	Expr.find["TAG"] = support.getElementsByTagName ?
+		function( tag, context ) {
+			if ( typeof context.getElementsByTagName !== "undefined" ) {
+				return context.getElementsByTagName( tag );
+
+			// DocumentFragment nodes don't have gEBTN
+			} else if ( support.qsa ) {
+				return context.querySelectorAll( tag );
+			}
+		} :
+
+		function( tag, context ) {
+			var elem,
+				tmp = [],
+				i = 0,
+				// By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too
+				results = context.getElementsByTagName( tag );
+
+			// Filter out possible comments
+			if ( tag === "*" ) {
+				while ( (elem = results[i++]) ) {
+					if ( elem.nodeType === 1 ) {
+						tmp.push( elem );
+					}
+				}
+
+				return tmp;
+			}
+			return results;
+		};
+
+	// Class
+	Expr.find["CLASS"] = support.getElementsByClassName && function( className, context ) {
+		if ( typeof context.getElementsByClassName !== "undefined" && documentIsHTML ) {
+			return context.getElementsByClassName( className );
+		}
+	};
+
+	/* QSA/matchesSelector
+	---------------------------------------------------------------------- */
+
+	// QSA and matchesSelector support
+
+	// matchesSelector(:active) reports false when true (IE9/Opera 11.5)
+	rbuggyMatches = [];
+
+	// qSa(:focus) reports false when true (Chrome 21)
+	// We allow this because of a bug in IE8/9 that throws an error
+	// whenever `document.activeElement` is accessed on an iframe
+	// So, we allow :focus to pass through QSA all the time to avoid the IE error
+	// See http://bugs.jquery.com/ticket/13378
+	rbuggyQSA = [];
+
+	if ( (support.qsa = rnative.test( document.querySelectorAll )) ) {
+		// Build QSA regex
+		// Regex strategy adopted from Diego Perini
+		assert(function( div ) {
+			// Select is set to empty string on purpose
+			// This is to test IE's treatment of not explicitly
+			// setting a boolean content attribute,
+			// since its presence should be enough
+			// http://bugs.jquery.com/ticket/12359
+			docElem.appendChild( div ).innerHTML = "<a id='" + expando + "'></a>" +
+				"<select id='" + expando + "-\r\\' msallowcapture=''>" +
+				"<option selected=''></option></select>";
+
+			// Support: IE8, Opera 11-12.16
+			// Nothing should be selected when empty strings follow ^= or $= or *=
+			// The test attribute must be unknown in Opera but "safe" for WinRT
+			// http://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section
+			if ( div.querySelectorAll("[msallowcapture^='']").length ) {
+				rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:''|\"\")" );
+			}
+
+			// Support: IE8
+			// Boolean attributes and "value" are not treated correctly
+			if ( !div.querySelectorAll("[selected]").length ) {
+				rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" );
+			}
+
+			// Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+
+			if ( !div.querySelectorAll( "[id~=" + expando + "-]" ).length ) {
+				rbuggyQSA.push("~=");
+			}
+
+			// Webkit/Opera - :checked should return selected option elements
+			// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked
+			// IE8 throws error here and will not see later tests
+			if ( !div.querySelectorAll(":checked").length ) {
+				rbuggyQSA.push(":checked");
+			}
+
+			// Support: Safari 8+, iOS 8+
+			// https://bugs.webkit.org/show_bug.cgi?id=136851
+			// In-page `selector#id sibing-combinator selector` fails
+			if ( !div.querySelectorAll( "a#" + expando + "+*" ).length ) {
+				rbuggyQSA.push(".#.+[+~]");
+			}
+		});
+
+		assert(function( div ) {
+			// Support: Windows 8 Native Apps
+			// The type and name attributes are restricted during .innerHTML assignment
+			var input = document.createElement("input");
+			input.setAttribute( "type", "hidden" );
+			div.appendChild( input ).setAttribute( "name", "D" );
+
+			// Support: IE8
+			// Enforce case-sensitivity of name attribute
+			if ( div.querySelectorAll("[name=d]").length ) {
+				rbuggyQSA.push( "name" + whitespace + "*[*^$|!~]?=" );
+			}
+
+			// FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled)
+			// IE8 throws error here and will not see later tests
+			if ( !div.querySelectorAll(":enabled").length ) {
+				rbuggyQSA.push( ":enabled", ":disabled" );
+			}
+
+			// Opera 10-11 does not throw on post-comma invalid pseudos
+			div.querySelectorAll("*,:x");
+			rbuggyQSA.push(",.*:");
+		});
+	}
+
+	if ( (support.matchesSelector = rnative.test( (matches = docElem.matches ||
+		docElem.webkitMatchesSelector ||
+		docElem.mozMatchesSelector ||
+		docElem.oMatchesSelector ||
+		docElem.msMatchesSelector) )) ) {
+
+		assert(function( div ) {
+			// Check to see if it's possible to do matchesSelector
+			// on a disconnected node (IE 9)
+			support.disconnectedMatch = matches.call( div, "div" );
+
+			// This should fail with an exception
+			// Gecko does not error, returns false instead
+			matches.call( div, "[s!='']:x" );
+			rbuggyMatches.push( "!=", pseudos );
+		});
+	}
+
+	rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join("|") );
+	rbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join("|") );
+
+	/* Contains
+	---------------------------------------------------------------------- */
+	hasCompare = rnative.test( docElem.compareDocumentPosition );
+
+	// Element contains another
+	// Purposefully self-exclusive
+	// As in, an element does not contain itself
+	contains = hasCompare || rnative.test( docElem.contains ) ?
+		function( a, b ) {
+			var adown = a.nodeType === 9 ? a.documentElement : a,
+				bup = b && b.parentNode;
+			return a === bup || !!( bup && bup.nodeType === 1 && (
+				adown.contains ?
+					adown.contains( bup ) :
+					a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16
+			));
+		} :
+		function( a, b ) {
+			if ( b ) {
+				while ( (b = b.parentNode) ) {
+					if ( b === a ) {
+						return true;
+					}
+				}
+			}
+			return false;
+		};
+
+	/* Sorting
+	---------------------------------------------------------------------- */
+
+	// Document order sorting
+	sortOrder = hasCompare ?
+	function( a, b ) {
+
+		// Flag for duplicate removal
+		if ( a === b ) {
+			hasDuplicate = true;
+			return 0;
+		}
+
+		// Sort on method existence if only one input has compareDocumentPosition
+		var compare = !a.compareDocumentPosition - !b.compareDocumentPosition;
+		if ( compare ) {
+			return compare;
+		}
+
+		// Calculate position if both inputs belong to the same document
+		compare = ( a.ownerDocument || a ) === ( b.ownerDocument || b ) ?
+			a.compareDocumentPosition( b ) :
+
+			// Otherwise we know they are disconnected
+			1;
+
+		// Disconnected nodes
+		if ( compare & 1 ||
+			(!support.sortDetached && b.compareDocumentPosition( a ) === compare) ) {
+
+			// Choose the first element that is related to our preferred document
+			if ( a === document || a.ownerDocument === preferredDoc && contains(preferredDoc, a) ) {
+				return -1;
+			}
+			if ( b === document || b.ownerDocument === preferredDoc && contains(preferredDoc, b) ) {
+				return 1;
+			}
+
+			// Maintain original order
+			return sortInput ?
+				( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :
+				0;
+		}
+
+		return compare & 4 ? -1 : 1;
+	} :
+	function( a, b ) {
+		// Exit early if the nodes are identical
+		if ( a === b ) {
+			hasDuplicate = true;
+			return 0;
+		}
+
+		var cur,
+			i = 0,
+			aup = a.parentNode,
+			bup = b.parentNode,
+			ap = [ a ],
+			bp = [ b ];
+
+		// Parentless nodes are either documents or disconnected
+		if ( !aup || !bup ) {
+			return a === document ? -1 :
+				b === document ? 1 :
+				aup ? -1 :
+				bup ? 1 :
+				sortInput ?
+				( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :
+				0;
+
+		// If the nodes are siblings, we can do a quick check
+		} else if ( aup === bup ) {
+			return siblingCheck( a, b );
+		}
+
+		// Otherwise we need full lists of their ancestors for comparison
+		cur = a;
+		while ( (cur = cur.parentNode) ) {
+			ap.unshift( cur );
+		}
+		cur = b;
+		while ( (cur = cur.parentNode) ) {
+			bp.unshift( cur );
+		}
+
+		// Walk down the tree looking for a discrepancy
+		while ( ap[i] === bp[i] ) {
+			i++;
+		}
+
+		return i ?
+			// Do a sibling check if the nodes have a common ancestor
+			siblingCheck( ap[i], bp[i] ) :
+
+			// Otherwise nodes in our document sort first
+			ap[i] === preferredDoc ? -1 :
+			bp[i] === preferredDoc ? 1 :
+			0;
+	};
+
+	return document;
+};
+
+Sizzle.matches = function( expr, elements ) {
+	return Sizzle( expr, null, null, elements );
+};
+
+Sizzle.matchesSelector = function( elem, expr ) {
+	// Set document vars if needed
+	if ( ( elem.ownerDocument || elem ) !== document ) {
+		setDocument( elem );
+	}
+
+	// Make sure that attribute selectors are quoted
+	expr = expr.replace( rattributeQuotes, "='$1']" );
+
+	if ( support.matchesSelector && documentIsHTML &&
+		!compilerCache[ expr + " " ] &&
+		( !rbuggyMatches || !rbuggyMatches.test( expr ) ) &&
+		( !rbuggyQSA     || !rbuggyQSA.test( expr ) ) ) {
+
+		try {
+			var ret = matches.call( elem, expr );
+
+			// IE 9's matchesSelector returns false on disconnected nodes
+			if ( ret || support.disconnectedMatch ||
+					// As well, disconnected nodes are said to be in a document
+					// fragment in IE 9
+					elem.document && elem.document.nodeType !== 11 ) {
+				return ret;
+			}
+		} catch (e) {}
+	}
+
+	return Sizzle( expr, document, null, [ elem ] ).length > 0;
+};
+
+Sizzle.contains = function( context, elem ) {
+	// Set document vars if needed
+	if ( ( context.ownerDocument || context ) !== document ) {
+		setDocument( context );
+	}
+	return contains( context, elem );
+};
+
+Sizzle.attr = function( elem, name ) {
+	// Set document vars if needed
+	if ( ( elem.ownerDocument || elem ) !== document ) {
+		setDocument( elem );
+	}
+
+	var fn = Expr.attrHandle[ name.toLowerCase() ],
+		// Don't get fooled by Object.prototype properties (jQuery #13807)
+		val = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ?
+			fn( elem, name, !documentIsHTML ) :
+			undefined;
+
+	return val !== undefined ?
+		val :
+		support.attributes || !documentIsHTML ?
+			elem.getAttribute( name ) :
+			(val = elem.getAttributeNode(name)) && val.specified ?
+				val.value :
+				null;
+};
+
+Sizzle.error = function( msg ) {
+	throw new Error( "Syntax error, unrecognized expression: " + msg );
+};
+
+/**
+ * Document sorting and removing duplicates
+ * @param {ArrayLike} results
+ */
+Sizzle.uniqueSort = function( results ) {
+	var elem,
+		duplicates = [],
+		j = 0,
+		i = 0;
+
+	// Unless we *know* we can detect duplicates, assume their presence
+	hasDuplicate = !support.detectDuplicates;
+	sortInput = !support.sortStable && results.slice( 0 );
+	results.sort( sortOrder );
+
+	if ( hasDuplicate ) {
+		while ( (elem = results[i++]) ) {
+			if ( elem === results[ i ] ) {
+				j = duplicates.push( i );
+			}
+		}
+		while ( j-- ) {
+			results.splice( duplicates[ j ], 1 );
+		}
+	}
+
+	// Clear input after sorting to release objects
+	// See https://github.com/jquery/sizzle/pull/225
+	sortInput = null;
+
+	return results;
+};
+
+/**
+ * Utility function for retrieving the text value of an array of DOM nodes
+ * @param {Array|Element} elem
+ */
+getText = Sizzle.getText = function( elem ) {
+	var node,
+		ret = "",
+		i = 0,
+		nodeType = elem.nodeType;
+
+	if ( !nodeType ) {
+		// If no nodeType, this is expected to be an array
+		while ( (node = elem[i++]) ) {
+			// Do not traverse comment nodes
+			ret += getText( node );
+		}
+	} else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) {
+		// Use textContent for elements
+		// innerText usage removed for consistency of new lines (jQuery #11153)
+		if ( typeof elem.textContent === "string" ) {
+			return elem.textContent;
+		} else {
+			// Traverse its children
+			for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {
+				ret += getText( elem );
+			}
+		}
+	} else if ( nodeType === 3 || nodeType === 4 ) {
+		return elem.nodeValue;
+	}
+	// Do not include comment or processing instruction nodes
+
+	return ret;
+};
+
+Expr = Sizzle.selectors = {
+
+	// Can be adjusted by the user
+	cacheLength: 50,
+
+	createPseudo: markFunction,
+
+	match: matchExpr,
+
+	attrHandle: {},
+
+	find: {},
+
+	relative: {
+		">": { dir: "parentNode", first: true },
+		" ": { dir: "parentNode" },
+		"+": { dir: "previousSibling", first: true },
+		"~": { dir: "previousSibling" }
+	},
+
+	preFilter: {
+		"ATTR": function( match ) {
+			match[1] = match[1].replace( runescape, funescape );
+
+			// Move the given value to match[3] whether quoted or unquoted
+			match[3] = ( match[3] || match[4] || match[5] || "" ).replace( runescape, funescape );
+
+			if ( match[2] === "~=" ) {
+				match[3] = " " + match[3] + " ";
+			}
+
+			return match.slice( 0, 4 );
+		},
+
+		"CHILD": function( match ) {
+			/* matches from matchExpr["CHILD"]
+				1 type (only|nth|...)
+				2 what (child|of-type)
+				3 argument (even|odd|\d*|\d*n([+-]\d+)?|...)
+				4 xn-component of xn+y argument ([+-]?\d*n|)
+				5 sign of xn-component
+				6 x of xn-component
+				7 sign of y-component
+				8 y of y-component
+			*/
+			match[1] = match[1].toLowerCase();
+
+			if ( match[1].slice( 0, 3 ) === "nth" ) {
+				// nth-* requires argument
+				if ( !match[3] ) {
+					Sizzle.error( match[0] );
+				}
+
+				// numeric x and y parameters for Expr.filter.CHILD
+				// remember that false/true cast respectively to 0/1
+				match[4] = +( match[4] ? match[5] + (match[6] || 1) : 2 * ( match[3] === "even" || match[3] === "odd" ) );
+				match[5] = +( ( match[7] + match[8] ) || match[3] === "odd" );
+
+			// other types prohibit arguments
+			} else if ( match[3] ) {
+				Sizzle.error( match[0] );
+			}
+
+			return match;
+		},
+
+		"PSEUDO": function( match ) {
+			var excess,
+				unquoted = !match[6] && match[2];
+
+			if ( matchExpr["CHILD"].test( match[0] ) ) {
+				return null;
+			}
+
+			// Accept quoted arguments as-is
+			if ( match[3] ) {
+				match[2] = match[4] || match[5] || "";
+
+			// Strip excess characters from unquoted arguments
+			} else if ( unquoted && rpseudo.test( unquoted ) &&
+				// Get excess from tokenize (recursively)
+				(excess = tokenize( unquoted, true )) &&
+				// advance to the next closing parenthesis
+				(excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length) ) {
+
+				// excess is a negative index
+				match[0] = match[0].slice( 0, excess );
+				match[2] = unquoted.slice( 0, excess );
+			}
+
+			// Return only captures needed by the pseudo filter method (type and argument)
+			return match.slice( 0, 3 );
+		}
+	},
+
+	filter: {
+
+		"TAG": function( nodeNameSelector ) {
+			var nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase();
+			return nodeNameSelector === "*" ?
+				function() { return true; } :
+				function( elem ) {
+					return elem.nodeName && elem.nodeName.toLowerCase() === nodeName;
+				};
+		},
+
+		"CLASS": function( className ) {
+			var pattern = classCache[ className + " " ];
+
+			return pattern ||
+				(pattern = new RegExp( "(^|" + whitespace + ")" + className + "(" + whitespace + "|$)" )) &&
+				classCache( className, function( elem ) {
+					return pattern.test( typeof elem.className === "string" && elem.className || typeof elem.getAttribute !== "undefined" && elem.getAttribute("class") || "" );
+				});
+		},
+
+		"ATTR": function( name, operator, check ) {
+			return function( elem ) {
+				var result = Sizzle.attr( elem, name );
+
+				if ( result == null ) {
+					return operator === "!=";
+				}
+				if ( !operator ) {
+					return true;
+				}
+
+				result += "";
+
+				return operator === "=" ? result === check :
+					operator === "!=" ? result !== check :
+					operator === "^=" ? check && result.indexOf( check ) === 0 :
+					operator === "*=" ? check && result.indexOf( check ) > -1 :
+					operator === "$=" ? check && result.slice( -check.length ) === check :
+					operator === "~=" ? ( " " + result.replace( rwhitespace, " " ) + " " ).indexOf( check ) > -1 :
+					operator === "|=" ? result === check || result.slice( 0, check.length + 1 ) === check + "-" :
+					false;
+			};
+		},
+
+		"CHILD": function( type, what, argument, first, last ) {
+			var simple = type.slice( 0, 3 ) !== "nth",
+				forward = type.slice( -4 ) !== "last",
+				ofType = what === "of-type";
+
+			return first === 1 && last === 0 ?
+
+				// Shortcut for :nth-*(n)
+				function( elem ) {
+					return !!elem.parentNode;
+				} :
+
+				function( elem, context, xml ) {
+					var cache, uniqueCache, outerCache, node, nodeIndex, start,
+						dir = simple !== forward ? "nextSibling" : "previousSibling",
+						parent = elem.parentNode,
+						name = ofType && elem.nodeName.toLowerCase(),
+						useCache = !xml && !ofType,
+						diff = false;
+
+					if ( parent ) {
+
+						// :(first|last|only)-(child|of-type)
+						if ( simple ) {
+							while ( dir ) {
+								node = elem;
+								while ( (node = node[ dir ]) ) {
+									if ( ofType ?
+										node.nodeName.toLowerCase() === name :
+										node.nodeType === 1 ) {
+
+										return false;
+									}
+								}
+								// Reverse direction for :only-* (if we haven't yet done so)
+								start = dir = type === "only" && !start && "nextSibling";
+							}
+							return true;
+						}
+
+						start = [ forward ? parent.firstChild : parent.lastChild ];
+
+						// non-xml :nth-child(...) stores cache data on `parent`
+						if ( forward && useCache ) {
+
+							// Seek `elem` from a previously-cached index
+
+							// ...in a gzip-friendly way
+							node = parent;
+							outerCache = node[ expando ] || (node[ expando ] = {});
+
+							// Support: IE <9 only
+							// Defend against cloned attroperties (jQuery gh-1709)
+							uniqueCache = outerCache[ node.uniqueID ] ||
+								(outerCache[ node.uniqueID ] = {});
+
+							cache = uniqueCache[ type ] || [];
+							nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];
+							diff = nodeIndex && cache[ 2 ];
+							node = nodeIndex && parent.childNodes[ nodeIndex ];
+
+							while ( (node = ++nodeIndex && node && node[ dir ] ||
+
+								// Fallback to seeking `elem` from the start
+								(diff = nodeIndex = 0) || start.pop()) ) {
+
+								// When found, cache indexes on `parent` and break
+								if ( node.nodeType === 1 && ++diff && node === elem ) {
+									uniqueCache[ type ] = [ dirruns, nodeIndex, diff ];
+									break;
+								}
+							}
+
+						} else {
+							// Use previously-cached element index if available
+							if ( useCache ) {
+								// ...in a gzip-friendly way
+								node = elem;
+								outerCache = node[ expando ] || (node[ expando ] = {});
+
+								// Support: IE <9 only
+								// Defend against cloned attroperties (jQuery gh-1709)
+								uniqueCache = outerCache[ node.uniqueID ] ||
+									(outerCache[ node.uniqueID ] = {});
+
+								cache = uniqueCache[ type ] || [];
+								nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];
+								diff = nodeIndex;
+							}
+
+							// xml :nth-child(...)
+							// or :nth-last-child(...) or :nth(-last)?-of-type(...)
+							if ( diff === false ) {
+								// Use the same loop as above to seek `elem` from the start
+								while ( (node = ++nodeIndex && node && node[ dir ] ||
+									(diff = nodeIndex = 0) || start.pop()) ) {
+
+									if ( ( ofType ?
+										node.nodeName.toLowerCase() === name :
+										node.nodeType === 1 ) &&
+										++diff ) {
+
+										// Cache the index of each encountered element
+										if ( useCache ) {
+											outerCache = node[ expando ] || (node[ expando ] = {});
+
+											// Support: IE <9 only
+											// Defend against cloned attroperties (jQuery gh-1709)
+											uniqueCache = outerCache[ node.uniqueID ] ||
+												(outerCache[ node.uniqueID ] = {});
+
+											uniqueCache[ type ] = [ dirruns, diff ];
+										}
+
+										if ( node === elem ) {
+											break;
+										}
+									}
+								}
+							}
+						}
+
+						// Incorporate the offset, then check against cycle size
+						diff -= last;
+						return diff === first || ( diff % first === 0 && diff / first >= 0 );
+					}
+				};
+		},
+
+		"PSEUDO": function( pseudo, argument ) {
+			// pseudo-class names are case-insensitive
+			// http://www.w3.org/TR/selectors/#pseudo-classes
+			// Prioritize by case sensitivity in case custom pseudos are added with uppercase letters
+			// Remember that setFilters inherits from pseudos
+			var args,
+				fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] ||
+					Sizzle.error( "unsupported pseudo: " + pseudo );
+
+			// The user may use createPseudo to indicate that
+			// arguments are needed to create the filter function
+			// just as Sizzle does
+			if ( fn[ expando ] ) {
+				return fn( argument );
+			}
+
+			// But maintain support for old signatures
+			if ( fn.length > 1 ) {
+				args = [ pseudo, pseudo, "", argument ];
+				return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ?
+					markFunction(function( seed, matches ) {
+						var idx,
+							matched = fn( seed, argument ),
+							i = matched.length;
+						while ( i-- ) {
+							idx = indexOf( seed, matched[i] );
+							seed[ idx ] = !( matches[ idx ] = matched[i] );
+						}
+					}) :
+					function( elem ) {
+						return fn( elem, 0, args );
+					};
+			}
+
+			return fn;
+		}
+	},
+
+	pseudos: {
+		// Potentially complex pseudos
+		"not": markFunction(function( selector ) {
+			// Trim the selector passed to compile
+			// to avoid treating leading and trailing
+			// spaces as combinators
+			var input = [],
+				results = [],
+				matcher = compile( selector.replace( rtrim, "$1" ) );
+
+			return matcher[ expando ] ?
+				markFunction(function( seed, matches, context, xml ) {
+					var elem,
+						unmatched = matcher( seed, null, xml, [] ),
+						i = seed.length;
+
+					// Match elements unmatched by `matcher`
+					while ( i-- ) {
+						if ( (elem = unmatched[i]) ) {
+							seed[i] = !(matches[i] = elem);
+						}
+					}
+				}) :
+				function( elem, context, xml ) {
+					input[0] = elem;
+					matcher( input, null, xml, results );
+					// Don't keep the element (issue #299)
+					input[0] = null;
+					return !results.pop();
+				};
+		}),
+
+		"has": markFunction(function( selector ) {
+			return function( elem ) {
+				return Sizzle( selector, elem ).length > 0;
+			};
+		}),
+
+		"contains": markFunction(function( text ) {
+			text = text.replace( runescape, funescape );
+			return function( elem ) {
+				return ( elem.textContent || elem.innerText || getText( elem ) ).indexOf( text ) > -1;
+			};
+		}),
+
+		// "Whether an element is represented by a :lang() selector
+		// is based solely on the element's language value
+		// being equal to the identifier C,
+		// or beginning with the identifier C immediately followed by "-".
+		// The matching of C against the element's language value is performed case-insensitively.
+		// The identifier C does not have to be a valid language name."
+		// http://www.w3.org/TR/selectors/#lang-pseudo
+		"lang": markFunction( function( lang ) {
+			// lang value must be a valid identifier
+			if ( !ridentifier.test(lang || "") ) {
+				Sizzle.error( "unsupported lang: " + lang );
+			}
+			lang = lang.replace( runescape, funescape ).toLowerCase();
+			return function( elem ) {
+				var elemLang;
+				do {
+					if ( (elemLang = documentIsHTML ?
+						elem.lang :
+						elem.getAttribute("xml:lang") || elem.getAttribute("lang")) ) {
+
+						elemLang = elemLang.toLowerCase();
+						return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0;
+					}
+				} while ( (elem = elem.parentNode) && elem.nodeType === 1 );
+				return false;
+			};
+		}),
+
+		// Miscellaneous
+		"target": function( elem ) {
+			var hash = window.location && window.location.hash;
+			return hash && hash.slice( 1 ) === elem.id;
+		},
+
+		"root": function( elem ) {
+			return elem === docElem;
+		},
+
+		"focus": function( elem ) {
+			return elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex);
+		},
+
+		// Boolean properties
+		"enabled": function( elem ) {
+			return elem.disabled === false;
+		},
+
+		"disabled": function( elem ) {
+			return elem.disabled === true;
+		},
+
+		"checked": function( elem ) {
+			// In CSS3, :checked should return both checked and selected elements
+			// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked
+			var nodeName = elem.nodeName.toLowerCase();
+			return (nodeName === "input" && !!elem.checked) || (nodeName === "option" && !!elem.selected);
+		},
+
+		"selected": function( elem ) {
+			// Accessing this property makes selected-by-default
+			// options in Safari work properly
+			if ( elem.parentNode ) {
+				elem.parentNode.selectedIndex;
+			}
+
+			return elem.selected === true;
+		},
+
+		// Contents
+		"empty": function( elem ) {
+			// http://www.w3.org/TR/selectors/#empty-pseudo
+			// :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5),
+			//   but not by others (comment: 8; processing instruction: 7; etc.)
+			// nodeType < 6 works because attributes (2) do not appear as children
+			for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {
+				if ( elem.nodeType < 6 ) {
+					return false;
+				}
+			}
+			return true;
+		},
+
+		"parent": function( elem ) {
+			return !Expr.pseudos["empty"]( elem );
+		},
+
+		// Element/input types
+		"header": function( elem ) {
+			return rheader.test( elem.nodeName );
+		},
+
+		"input": function( elem ) {
+			return rinputs.test( elem.nodeName );
+		},
+
+		"button": function( elem ) {
+			var name = elem.nodeName.toLowerCase();
+			return name === "input" && elem.type === "button" || name === "button";
+		},
+
+		"text": function( elem ) {
+			var attr;
+			return elem.nodeName.toLowerCase() === "input" &&
+				elem.type === "text" &&
+
+				// Support: IE<8
+				// New HTML5 attribute values (e.g., "search") appear with elem.type === "text"
+				( (attr = elem.getAttribute("type")) == null || attr.toLowerCase() === "text" );
+		},
+
+		// Position-in-collection
+		"first": createPositionalPseudo(function() {
+			return [ 0 ];
+		}),
+
+		"last": createPositionalPseudo(function( matchIndexes, length ) {
+			return [ length - 1 ];
+		}),
+
+		"eq": createPositionalPseudo(function( matchIndexes, length, argument ) {
+			return [ argument < 0 ? argument + length : argument ];
+		}),
+
+		"even": createPositionalPseudo(function( matchIndexes, length ) {
+			var i = 0;
+			for ( ; i < length; i += 2 ) {
+				matchIndexes.push( i );
+			}
+			return matchIndexes;
+		}),
+
+		"odd": createPositionalPseudo(function( matchIndexes, length ) {
+			var i = 1;
+			for ( ; i < length; i += 2 ) {
+				matchIndexes.push( i );
+			}
+			return matchIndexes;
+		}),
+
+		"lt": createPositionalPseudo(function( matchIndexes, length, argument ) {
+			var i = argument < 0 ? argument + length : argument;
+			for ( ; --i >= 0; ) {
+				matchIndexes.push( i );
+			}
+			return matchIndexes;
+		}),
+
+		"gt": createPositionalPseudo(function( matchIndexes, length, argument ) {
+			var i = argument < 0 ? argument + length : argument;
+			for ( ; ++i < length; ) {
+				matchIndexes.push( i );
+			}
+			return matchIndexes;
+		})
+	}
+};
+
+Expr.pseudos["nth"] = Expr.pseudos["eq"];
+
+// Add button/input type pseudos
+for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) {
+	Expr.pseudos[ i ] = createInputPseudo( i );
+}
+for ( i in { submit: true, reset: true } ) {
+	Expr.pseudos[ i ] = createButtonPseudo( i );
+}
+
+// Easy API for creating new setFilters
+function setFilters() {}
+setFilters.prototype = Expr.filters = Expr.pseudos;
+Expr.setFilters = new setFilters();
+
+tokenize = Sizzle.tokenize = function( selector, parseOnly ) {
+	var matched, match, tokens, type,
+		soFar, groups, preFilters,
+		cached = tokenCache[ selector + " " ];
+
+	if ( cached ) {
+		return parseOnly ? 0 : cached.slice( 0 );
+	}
+
+	soFar = selector;
+	groups = [];
+	preFilters = Expr.preFilter;
+
+	while ( soFar ) {
+
+		// Comma and first run
+		if ( !matched || (match = rcomma.exec( soFar )) ) {
+			if ( match ) {
+				// Don't consume trailing commas as valid
+				soFar = soFar.slice( match[0].length ) || soFar;
+			}
+			groups.push( (tokens = []) );
+		}
+
+		matched = false;
+
+		// Combinators
+		if ( (match = rcombinators.exec( soFar )) ) {
+			matched = match.shift();
+			tokens.push({
+				value: matched,
+				// Cast descendant combinators to space
+				type: match[0].replace( rtrim, " " )
+			});
+			soFar = soFar.slice( matched.length );
+		}
+
+		// Filters
+		for ( type in Expr.filter ) {
+			if ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] ||
+				(match = preFilters[ type ]( match ))) ) {
+				matched = match.shift();
+				tokens.push({
+					value: matched,
+					type: type,
+					matches: match
+				});
+				soFar = soFar.slice( matched.length );
+			}
+		}
+
+		if ( !matched ) {
+			break;
+		}
+	}
+
+	// Return the length of the invalid excess
+	// if we're just parsing
+	// Otherwise, throw an error or return tokens
+	return parseOnly ?
+		soFar.length :
+		soFar ?
+			Sizzle.error( selector ) :
+			// Cache the tokens
+			tokenCache( selector, groups ).slice( 0 );
+};
+
+function toSelector( tokens ) {
+	var i = 0,
+		len = tokens.length,
+		selector = "";
+	for ( ; i < len; i++ ) {
+		selector += tokens[i].value;
+	}
+	return selector;
+}
+
+function addCombinator( matcher, combinator, base ) {
+	var dir = combinator.dir,
+		checkNonElements = base && dir === "parentNode",
+		doneName = done++;
+
+	return combinator.first ?
+		// Check against closest ancestor/preceding element
+		function( elem, context, xml ) {
+			while ( (elem = elem[ dir ]) ) {
+				if ( elem.nodeType === 1 || checkNonElements ) {
+					return matcher( elem, context, xml );
+				}
+			}
+		} :
+
+		// Check against all ancestor/preceding elements
+		function( elem, context, xml ) {
+			var oldCache, uniqueCache, outerCache,
+				newCache = [ dirruns, doneName ];
+
+			// We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching
+			if ( xml ) {
+				while ( (elem = elem[ dir ]) ) {
+					if ( elem.nodeType === 1 || checkNonElements ) {
+						if ( matcher( elem, context, xml ) ) {
+							return true;
+						}
+					}
+				}
+			} else {
+				while ( (elem = elem[ dir ]) ) {
+					if ( elem.nodeType === 1 || checkNonElements ) {
+						outerCache = elem[ expando ] || (elem[ expando ] = {});
+
+						// Support: IE <9 only
+						// Defend against cloned attroperties (jQuery gh-1709)
+						uniqueCache = outerCache[ elem.uniqueID ] || (outerCache[ elem.uniqueID ] = {});
+
+						if ( (oldCache = uniqueCache[ dir ]) &&
+							oldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) {
+
+							// Assign to newCache so results back-propagate to previous elements
+							return (newCache[ 2 ] = oldCache[ 2 ]);
+						} else {
+							// Reuse newcache so results back-propagate to previous elements
+							uniqueCache[ dir ] = newCache;
+
+							// A match means we're done; a fail means we have to keep checking
+							if ( (newCache[ 2 ] = matcher( elem, context, xml )) ) {
+								return true;
+							}
+						}
+					}
+				}
+			}
+		};
+}
+
+function elementMatcher( matchers ) {
+	return matchers.length > 1 ?
+		function( elem, context, xml ) {
+			var i = matchers.length;
+			while ( i-- ) {
+				if ( !matchers[i]( elem, context, xml ) ) {
+					return false;
+				}
+			}
+			return true;
+		} :
+		matchers[0];
+}
+
+function multipleContexts( selector, contexts, results ) {
+	var i = 0,
+		len = contexts.length;
+	for ( ; i < len; i++ ) {
+		Sizzle( selector, contexts[i], results );
+	}
+	return results;
+}
+
+function condense( unmatched, map, filter, context, xml ) {
+	var elem,
+		newUnmatched = [],
+		i = 0,
+		len = unmatched.length,
+		mapped = map != null;
+
+	for ( ; i < len; i++ ) {
+		if ( (elem = unmatched[i]) ) {
+			if ( !filter || filter( elem, context, xml ) ) {
+				newUnmatched.push( elem );
+				if ( mapped ) {
+					map.push( i );
+				}
+			}
+		}
+	}
+
+	return newUnmatched;
+}
+
+function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) {
+	if ( postFilter && !postFilter[ expando ] ) {
+		postFilter = setMatcher( postFilter );
+	}
+	if ( postFinder && !postFinder[ expando ] ) {
+		postFinder = setMatcher( postFinder, postSelector );
+	}
+	return markFunction(function( seed, results, context, xml ) {
+		var temp, i, elem,
+			preMap = [],
+			postMap = [],
+			preexisting = results.length,
+
+			// Get initial elements from seed or context
+			elems = seed || multipleContexts( selector || "*", context.nodeType ? [ context ] : context, [] ),
+
+			// Prefilter to get matcher input, preserving a map for seed-results synchronization
+			matcherIn = preFilter && ( seed || !selector ) ?
+				condense( elems, preMap, preFilter, context, xml ) :
+				elems,
+
+			matcherOut = matcher ?
+				// If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results,
+				postFinder || ( seed ? preFilter : preexisting || postFilter ) ?
+
+					// ...intermediate processing is necessary
+					[] :
+
+					// ...otherwise use results directly
+					results :
+				matcherIn;
+
+		// Find primary matches
+		if ( matcher ) {
+			matcher( matcherIn, matcherOut, context, xml );
+		}
+
+		// Apply postFilter
+		if ( postFilter ) {
+			temp = condense( matcherOut, postMap );
+			postFilter( temp, [], context, xml );
+
+			// Un-match failing elements by moving them back to matcherIn
+			i = temp.length;
+			while ( i-- ) {
+				if ( (elem = temp[i]) ) {
+					matcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem);
+				}
+			}
+		}
+
+		if ( seed ) {
+			if ( postFinder || preFilter ) {
+				if ( postFinder ) {
+					// Get the final matcherOut by condensing this intermediate into postFinder contexts
+					temp = [];
+					i = matcherOut.length;
+					while ( i-- ) {
+						if ( (elem = matcherOut[i]) ) {
+							// Restore matcherIn since elem is not yet a final match
+							temp.push( (matcherIn[i] = elem) );
+						}
+					}
+					postFinder( null, (matcherOut = []), temp, xml );
+				}
+
+				// Move matched elements from seed to results to keep them synchronized
+				i = matcherOut.length;
+				while ( i-- ) {
+					if ( (elem = matcherOut[i]) &&
+						(temp = postFinder ? indexOf( seed, elem ) : preMap[i]) > -1 ) {
+
+						seed[temp] = !(results[temp] = elem);
+					}
+				}
+			}
+
+		// Add elements to results, through postFinder if defined
+		} else {
+			matcherOut = condense(
+				matcherOut === results ?
+					matcherOut.splice( preexisting, matcherOut.length ) :
+					matcherOut
+			);
+			if ( postFinder ) {
+				postFinder( null, results, matcherOut, xml );
+			} else {
+				push.apply( results, matcherOut );
+			}
+		}
+	});
+}
+
+function matcherFromTokens( tokens ) {
+	var checkContext, matcher, j,
+		len = tokens.length,
+		leadingRelative = Expr.relative[ tokens[0].type ],
+		implicitRelative = leadingRelative || Expr.relative[" "],
+		i = leadingRelative ? 1 : 0,
+
+		// The foundational matcher ensures that elements are reachable from top-level context(s)
+		matchContext = addCombinator( function( elem ) {
+			return elem === checkContext;
+		}, implicitRelative, true ),
+		matchAnyContext = addCombinator( function( elem ) {
+			return indexOf( checkContext, elem ) > -1;
+		}, implicitRelative, true ),
+		matchers = [ function( elem, context, xml ) {
+			var ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || (
+				(checkContext = context).nodeType ?
+					matchContext( elem, context, xml ) :
+					matchAnyContext( elem, context, xml ) );
+			// Avoid hanging onto element (issue #299)
+			checkContext = null;
+			return ret;
+		} ];
+
+	for ( ; i < len; i++ ) {
+		if ( (matcher = Expr.relative[ tokens[i].type ]) ) {
+			matchers = [ addCombinator(elementMatcher( matchers ), matcher) ];
+		} else {
+			matcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches );
+
+			// Return special upon seeing a positional matcher
+			if ( matcher[ expando ] ) {
+				// Find the next relative operator (if any) for proper handling
+				j = ++i;
+				for ( ; j < len; j++ ) {
+					if ( Expr.relative[ tokens[j].type ] ) {
+						break;
+					}
+				}
+				return setMatcher(
+					i > 1 && elementMatcher( matchers ),
+					i > 1 && toSelector(
+						// If the preceding token was a descendant combinator, insert an implicit any-element `*`
+						tokens.slice( 0, i - 1 ).concat({ value: tokens[ i - 2 ].type === " " ? "*" : "" })
+					).replace( rtrim, "$1" ),
+					matcher,
+					i < j && matcherFromTokens( tokens.slice( i, j ) ),
+					j < len && matcherFromTokens( (tokens = tokens.slice( j )) ),
+					j < len && toSelector( tokens )
+				);
+			}
+			matchers.push( matcher );
+		}
+	}
+
+	return elementMatcher( matchers );
+}
+
+function matcherFromGroupMatchers( elementMatchers, setMatchers ) {
+	var bySet = setMatchers.length > 0,
+		byElement = elementMatchers.length > 0,
+		superMatcher = function( seed, context, xml, results, outermost ) {
+			var elem, j, matcher,
+				matchedCount = 0,
+				i = "0",
+				unmatched = seed && [],
+				setMatched = [],
+				contextBackup = outermostContext,
+				// We must always have either seed elements or outermost context
+				elems = seed || byElement && Expr.find["TAG"]( "*", outermost ),
+				// Use integer dirruns iff this is the outermost matcher
+				dirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1),
+				len = elems.length;
+
+			if ( outermost ) {
+				outermostContext = context === document || context || outermost;
+			}
+
+			// Add elements passing elementMatchers directly to results
+			// Support: IE<9, Safari
+			// Tolerate NodeList properties (IE: "length"; Safari: <number>) matching elements by id
+			for ( ; i !== len && (elem = elems[i]) != null; i++ ) {
+				if ( byElement && elem ) {
+					j = 0;
+					if ( !context && elem.ownerDocument !== document ) {
+						setDocument( elem );
+						xml = !documentIsHTML;
+					}
+					while ( (matcher = elementMatchers[j++]) ) {
+						if ( matcher( elem, context || document, xml) ) {
+							results.push( elem );
+							break;
+						}
+					}
+					if ( outermost ) {
+						dirruns = dirrunsUnique;
+					}
+				}
+
+				// Track unmatched elements for set filters
+				if ( bySet ) {
+					// They will have gone through all possible matchers
+					if ( (elem = !matcher && elem) ) {
+						matchedCount--;
+					}
+
+					// Lengthen the array for every element, matched or not
+					if ( seed ) {
+						unmatched.push( elem );
+					}
+				}
+			}
+
+			// `i` is now the count of elements visited above, and adding it to `matchedCount`
+			// makes the latter nonnegative.
+			matchedCount += i;
+
+			// Apply set filters to unmatched elements
+			// NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount`
+			// equals `i`), unless we didn't visit _any_ elements in the above loop because we have
+			// no element matchers and no seed.
+			// Incrementing an initially-string "0" `i` allows `i` to remain a string only in that
+			// case, which will result in a "00" `matchedCount` that differs from `i` but is also
+			// numerically zero.
+			if ( bySet && i !== matchedCount ) {
+				j = 0;
+				while ( (matcher = setMatchers[j++]) ) {
+					matcher( unmatched, setMatched, context, xml );
+				}
+
+				if ( seed ) {
+					// Reintegrate element matches to eliminate the need for sorting
+					if ( matchedCount > 0 ) {
+						while ( i-- ) {
+							if ( !(unmatched[i] || setMatched[i]) ) {
+								setMatched[i] = pop.call( results );
+							}
+						}
+					}
+
+					// Discard index placeholder values to get only actual matches
+					setMatched = condense( setMatched );
+				}
+
+				// Add matches to results
+				push.apply( results, setMatched );
+
+				// Seedless set matches succeeding multiple successful matchers stipulate sorting
+				if ( outermost && !seed && setMatched.length > 0 &&
+					( matchedCount + setMatchers.length ) > 1 ) {
+
+					Sizzle.uniqueSort( results );
+				}
+			}
+
+			// Override manipulation of globals by nested matchers
+			if ( outermost ) {
+				dirruns = dirrunsUnique;
+				outermostContext = contextBackup;
+			}
+
+			return unmatched;
+		};
+
+	return bySet ?
+		markFunction( superMatcher ) :
+		superMatcher;
+}
+
+compile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) {
+	var i,
+		setMatchers = [],
+		elementMatchers = [],
+		cached = compilerCache[ selector + " " ];
+
+	if ( !cached ) {
+		// Generate a function of recursive functions that can be used to check each element
+		if ( !match ) {
+			match = tokenize( selector );
+		}
+		i = match.length;
+		while ( i-- ) {
+			cached = matcherFromTokens( match[i] );
+			if ( cached[ expando ] ) {
+				setMatchers.push( cached );
+			} else {
+				elementMatchers.push( cached );
+			}
+		}
+
+		// Cache the compiled function
+		cached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) );
+
+		// Save selector and tokenization
+		cached.selector = selector;
+	}
+	return cached;
+};
+
+/**
+ * A low-level selection function that works with Sizzle's compiled
+ *  selector functions
+ * @param {String|Function} selector A selector or a pre-compiled
+ *  selector function built with Sizzle.compile
+ * @param {Element} context
+ * @param {Array} [results]
+ * @param {Array} [seed] A set of elements to match against
+ */
+select = Sizzle.select = function( selector, context, results, seed ) {
+	var i, tokens, token, type, find,
+		compiled = typeof selector === "function" && selector,
+		match = !seed && tokenize( (selector = compiled.selector || selector) );
+
+	results = results || [];
+
+	// Try to minimize operations if there is only one selector in the list and no seed
+	// (the latter of which guarantees us context)
+	if ( match.length === 1 ) {
+
+		// Reduce context if the leading compound selector is an ID
+		tokens = match[0] = match[0].slice( 0 );
+		if ( tokens.length > 2 && (token = tokens[0]).type === "ID" &&
+				support.getById && context.nodeType === 9 && documentIsHTML &&
+				Expr.relative[ tokens[1].type ] ) {
+
+			context = ( Expr.find["ID"]( token.matches[0].replace(runescape, funescape), context ) || [] )[0];
+			if ( !context ) {
+				return results;
+
+			// Precompiled matchers will still verify ancestry, so step up a level
+			} else if ( compiled ) {
+				context = context.parentNode;
+			}
+
+			selector = selector.slice( tokens.shift().value.length );
+		}
+
+		// Fetch a seed set for right-to-left matching
+		i = matchExpr["needsContext"].test( selector ) ? 0 : tokens.length;
+		while ( i-- ) {
+			token = tokens[i];
+
+			// Abort if we hit a combinator
+			if ( Expr.relative[ (type = token.type) ] ) {
+				break;
+			}
+			if ( (find = Expr.find[ type ]) ) {
+				// Search, expanding context for leading sibling combinators
+				if ( (seed = find(
+					token.matches[0].replace( runescape, funescape ),
+					rsibling.test( tokens[0].type ) && testContext( context.parentNode ) || context
+				)) ) {
+
+					// If seed is empty or no tokens remain, we can return early
+					tokens.splice( i, 1 );
+					selector = seed.length && toSelector( tokens );
+					if ( !selector ) {
+						push.apply( results, seed );
+						return results;
+					}
+
+					break;
+				}
+			}
+		}
+	}
+
+	// Compile and execute a filtering function if one is not provided
+	// Provide `match` to avoid retokenization if we modified the selector above
+	( compiled || compile( selector, match ) )(
+		seed,
+		context,
+		!documentIsHTML,
+		results,
+		!context || rsibling.test( selector ) && testContext( context.parentNode ) || context
+	);
+	return results;
+};
+
+// One-time assignments
+
+// Sort stability
+support.sortStable = expando.split("").sort( sortOrder ).join("") === expando;
+
+// Support: Chrome 14-35+
+// Always assume duplicates if they aren't passed to the comparison function
+support.detectDuplicates = !!hasDuplicate;
+
+// Initialize against the default document
+setDocument();
+
+// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27)
+// Detached nodes confoundingly follow *each other*
+support.sortDetached = assert(function( div1 ) {
+	// Should return 1, but returns 4 (following)
+	return div1.compareDocumentPosition( document.createElement("div") ) & 1;
+});
+
+// Support: IE<8
+// Prevent attribute/property "interpolation"
+// http://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx
+if ( !assert(function( div ) {
+	div.innerHTML = "<a href='#'></a>";
+	return div.firstChild.getAttribute("href") === "#" ;
+}) ) {
+	addHandle( "type|href|height|width", function( elem, name, isXML ) {
+		if ( !isXML ) {
+			return elem.getAttribute( name, name.toLowerCase() === "type" ? 1 : 2 );
+		}
+	});
+}
+
+// Support: IE<9
+// Use defaultValue in place of getAttribute("value")
+if ( !support.attributes || !assert(function( div ) {
+	div.innerHTML = "<input/>";
+	div.firstChild.setAttribute( "value", "" );
+	return div.firstChild.getAttribute( "value" ) === "";
+}) ) {
+	addHandle( "value", function( elem, name, isXML ) {
+		if ( !isXML && elem.nodeName.toLowerCase() === "input" ) {
+			return elem.defaultValue;
+		}
+	});
+}
+
+// Support: IE<9
+// Use getAttributeNode to fetch booleans when getAttribute lies
+if ( !assert(function( div ) {
+	return div.getAttribute("disabled") == null;
+}) ) {
+	addHandle( booleans, function( elem, name, isXML ) {
+		var val;
+		if ( !isXML ) {
+			return elem[ name ] === true ? name.toLowerCase() :
+					(val = elem.getAttributeNode( name )) && val.specified ?
+					val.value :
+				null;
+		}
+	});
+}
+
+return Sizzle;
+
+})( window );
+
+
+
+jQuery.find = Sizzle;
+jQuery.expr = Sizzle.selectors;
+jQuery.expr[ ":" ] = jQuery.expr.pseudos;
+jQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort;
+jQuery.text = Sizzle.getText;
+jQuery.isXMLDoc = Sizzle.isXML;
+jQuery.contains = Sizzle.contains;
+
+
+
+var dir = function( elem, dir, until ) {
+	var matched = [],
+		truncate = until !== undefined;
+
+	while ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) {
+		if ( elem.nodeType === 1 ) {
+			if ( truncate && jQuery( elem ).is( until ) ) {
+				break;
+			}
+			matched.push( elem );
+		}
+	}
+	return matched;
+};
+
+
+var siblings = function( n, elem ) {
+	var matched = [];
+
+	for ( ; n; n = n.nextSibling ) {
+		if ( n.nodeType === 1 && n !== elem ) {
+			matched.push( n );
+		}
+	}
+
+	return matched;
+};
+
+
+var rneedsContext = jQuery.expr.match.needsContext;
+
+var rsingleTag = ( /^<([\w-]+)\s*\/?>(?:<\/\1>|)$/ );
+
+
+
+var risSimple = /^.[^:#\[\.,]*$/;
+
+// Implement the identical functionality for filter and not
+function winnow( elements, qualifier, not ) {
+	if ( jQuery.isFunction( qualifier ) ) {
+		return jQuery.grep( elements, function( elem, i ) {
+			/* jshint -W018 */
+			return !!qualifier.call( elem, i, elem ) !== not;
+		} );
+
+	}
+
+	if ( qualifier.nodeType ) {
+		return jQuery.grep( elements, function( elem ) {
+			return ( elem === qualifier ) !== not;
+		} );
+
+	}
+
+	if ( typeof qualifier === "string" ) {
+		if ( risSimple.test( qualifier ) ) {
+			return jQuery.filter( qualifier, elements, not );
+		}
+
+		qualifier = jQuery.filter( qualifier, elements );
+	}
+
+	return jQuery.grep( elements, function( elem ) {
+		return ( indexOf.call( qualifier, elem ) > -1 ) !== not;
+	} );
+}
+
+jQuery.filter = function( expr, elems, not ) {
+	var elem = elems[ 0 ];
+
+	if ( not ) {
+		expr = ":not(" + expr + ")";
+	}
+
+	return elems.length === 1 && elem.nodeType === 1 ?
+		jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [] :
+		jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) {
+			return elem.nodeType === 1;
+		} ) );
+};
+
+jQuery.fn.extend( {
+	find: function( selector ) {
+		var i,
+			len = this.length,
+			ret = [],
+			self = this;
+
+		if ( typeof selector !== "string" ) {
+			return this.pushStack( jQuery( selector ).filter( function() {
+				for ( i = 0; i < len; i++ ) {
+					if ( jQuery.contains( self[ i ], this ) ) {
+						return true;
+					}
+				}
+			} ) );
+		}
+
+		for ( i = 0; i < len; i++ ) {
+			jQuery.find( selector, self[ i ], ret );
+		}
+
+		// Needed because $( selector, context ) becomes $( context ).find( selector )
+		ret = this.pushStack( len > 1 ? jQuery.unique( ret ) : ret );
+		ret.selector = this.selector ? this.selector + " " + selector : selector;
+		return ret;
+	},
+	filter: function( selector ) {
+		return this.pushStack( winnow( this, selector || [], false ) );
+	},
+	not: function( selector ) {
+		return this.pushStack( winnow( this, selector || [], true ) );
+	},
+	is: function( selector ) {
+		return !!winnow(
+			this,
+
+			// If this is a positional/relative selector, check membership in the returned set
+			// so $("p:first").is("p:last") won't return true for a doc with two "p".
+			typeof selector === "string" && rneedsContext.test( selector ) ?
+				jQuery( selector ) :
+				selector || [],
+			false
+		).length;
+	}
+} );
+
+
+// Initialize a jQuery object
+
+
+// A central reference to the root jQuery(document)
+var rootjQuery,
+
+	// A simple way to check for HTML strings
+	// Prioritize #id over <tag> to avoid XSS via location.hash (#9521)
+	// Strict HTML recognition (#11290: must start with <)
+	rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,
+
+	init = jQuery.fn.init = function( selector, context, root ) {
+		var match, elem;
+
+		// HANDLE: $(""), $(null), $(undefined), $(false)
+		if ( !selector ) {
+			return this;
+		}
+
+		// Method init() accepts an alternate rootjQuery
+		// so migrate can support jQuery.sub (gh-2101)
+		root = root || rootjQuery;
+
+		// Handle HTML strings
+		if ( typeof selector === "string" ) {
+			if ( selector[ 0 ] === "<" &&
+				selector[ selector.length - 1 ] === ">" &&
+				selector.length >= 3 ) {
+
+				// Assume that strings that start and end with <> are HTML and skip the regex check
+				match = [ null, selector, null ];
+
+			} else {
+				match = rquickExpr.exec( selector );
+			}
+
+			// Match html or make sure no context is specified for #id
+			if ( match && ( match[ 1 ] || !context ) ) {
+
+				// HANDLE: $(html) -> $(array)
+				if ( match[ 1 ] ) {
+					context = context instanceof jQuery ? context[ 0 ] : context;
+
+					// Option to run scripts is true for back-compat
+					// Intentionally let the error be thrown if parseHTML is not present
+					jQuery.merge( this, jQuery.parseHTML(
+						match[ 1 ],
+						context && context.nodeType ? context.ownerDocument || context : document,
+						true
+					) );
+
+					// HANDLE: $(html, props)
+					if ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) {
+						for ( match in context ) {
+
+							// Properties of context are called as methods if possible
+							if ( jQuery.isFunction( this[ match ] ) ) {
+								this[ match ]( context[ match ] );
+
+							// ...and otherwise set as attributes
+							} else {
+								this.attr( match, context[ match ] );
+							}
+						}
+					}
+
+					return this;
+
+				// HANDLE: $(#id)
+				} else {
+					elem = document.getElementById( match[ 2 ] );
+
+					// Support: Blackberry 4.6
+					// gEBID returns nodes no longer in the document (#6963)
+					if ( elem && elem.parentNode ) {
+
+						// Inject the element directly into the jQuery object
+						this.length = 1;
+						this[ 0 ] = elem;
+					}
+
+					this.context = document;
+					this.selector = selector;
+					return this;
+				}
+
+			// HANDLE: $(expr, $(...))
+			} else if ( !context || context.jquery ) {
+				return ( context || root ).find( selector );
+
+			// HANDLE: $(expr, context)
+			// (which is just equivalent to: $(context).find(expr)
+			} else {
+				return this.constructor( context ).find( selector );
+			}
+
+		// HANDLE: $(DOMElement)
+		} else if ( selector.nodeType ) {
+			this.context = this[ 0 ] = selector;
+			this.length = 1;
+			return this;
+
+		// HANDLE: $(function)
+		// Shortcut for document ready
+		} else if ( jQuery.isFunction( selector ) ) {
+			return root.ready !== undefined ?
+				root.ready( selector ) :
+
+				// Execute immediately if ready is not present
+				selector( jQuery );
+		}
+
+		if ( selector.selector !== undefined ) {
+			this.selector = selector.selector;
+			this.context = selector.context;
+		}
+
+		return jQuery.makeArray( selector, this );
+	};
+
+// Give the init function the jQuery prototype for later instantiation
+init.prototype = jQuery.fn;
+
+// Initialize central reference
+rootjQuery = jQuery( document );
+
+
+var rparentsprev = /^(?:parents|prev(?:Until|All))/,
+
+	// Methods guaranteed to produce a unique set when starting from a unique set
+	guaranteedUnique = {
+		children: true,
+		contents: true,
+		next: true,
+		prev: true
+	};
+
+jQuery.fn.extend( {
+	has: function( target ) {
+		var targets = jQuery( target, this ),
+			l = targets.length;
+
+		return this.filter( function() {
+			var i = 0;
+			for ( ; i < l; i++ ) {
+				if ( jQuery.contains( this, targets[ i ] ) ) {
+					return true;
+				}
+			}
+		} );
+	},
+
+	closest: function( selectors, context ) {
+		var cur,
+			i = 0,
+			l = this.length,
+			matched = [],
+			pos = rneedsContext.test( selectors ) || typeof selectors !== "string" ?
+				jQuery( selectors, context || this.context ) :
+				0;
+
+		for ( ; i < l; i++ ) {
+			for ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) {
+
+				// Always skip document fragments
+				if ( cur.nodeType < 11 && ( pos ?
+					pos.index( cur ) > -1 :
+
+					// Don't pass non-elements to Sizzle
+					cur.nodeType === 1 &&
+						jQuery.find.matchesSelector( cur, selectors ) ) ) {
+
+					matched.push( cur );
+					break;
+				}
+			}
+		}
+
+		return this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched );
+	},
+
+	// Determine the position of an element within the set
+	index: function( elem ) {
+
+		// No argument, return index in parent
+		if ( !elem ) {
+			return ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1;
+		}
+
+		// Index in selector
+		if ( typeof elem === "string" ) {
+			return indexOf.call( jQuery( elem ), this[ 0 ] );
+		}
+
+		// Locate the position of the desired element
+		return indexOf.call( this,
+
+			// If it receives a jQuery object, the first element is used
+			elem.jquery ? elem[ 0 ] : elem
+		);
+	},
+
+	add: function( selector, context ) {
+		return this.pushStack(
+			jQuery.uniqueSort(
+				jQuery.merge( this.get(), jQuery( selector, context ) )
+			)
+		);
+	},
+
+	addBack: function( selector ) {
+		return this.add( selector == null ?
+			this.prevObject : this.prevObject.filter( selector )
+		);
+	}
+} );
+
+function sibling( cur, dir ) {
+	while ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {}
+	return cur;
+}
+
+jQuery.each( {
+	parent: function( elem ) {
+		var parent = elem.parentNode;
+		return parent && parent.nodeType !== 11 ? parent : null;
+	},
+	parents: function( elem ) {
+		return dir( elem, "parentNode" );
+	},
+	parentsUntil: function( elem, i, until ) {
+		return dir( elem, "parentNode", until );
+	},
+	next: function( elem ) {
+		return sibling( elem, "nextSibling" );
+	},
+	prev: function( elem ) {
+		return sibling( elem, "previousSibling" );
+	},
+	nextAll: function( elem ) {
+		return dir( elem, "nextSibling" );
+	},
+	prevAll: function( elem ) {
+		return dir( elem, "previousSibling" );
+	},
+	nextUntil: function( elem, i, until ) {
+		return dir( elem, "nextSibling", until );
+	},
+	prevUntil: function( elem, i, until ) {
+		return dir( elem, "previousSibling", until );
+	},
+	siblings: function( elem ) {
+		return siblings( ( elem.parentNode || {} ).firstChild, elem );
+	},
+	children: function( elem ) {
+		return siblings( elem.firstChild );
+	},
+	contents: function( elem ) {
+		return elem.contentDocument || jQuery.merge( [], elem.childNodes );
+	}
+}, function( name, fn ) {
+	jQuery.fn[ name ] = function( until, selector ) {
+		var matched = jQuery.map( this, fn, until );
+
+		if ( name.slice( -5 ) !== "Until" ) {
+			selector = until;
+		}
+
+		if ( selector && typeof selector === "string" ) {
+			matched = jQuery.filter( selector, matched );
+		}
+
+		if ( this.length > 1 ) {
+
+			// Remove duplicates
+			if ( !guaranteedUnique[ name ] ) {
+				jQuery.uniqueSort( matched );
+			}
+
+			// Reverse order for parents* and prev-derivatives
+			if ( rparentsprev.test( name ) ) {
+				matched.reverse();
+			}
+		}
+
+		return this.pushStack( matched );
+	};
+} );
+var rnotwhite = ( /\S+/g );
+
+
+
+// Convert String-formatted options into Object-formatted ones
+function createOptions( options ) {
+	var object = {};
+	jQuery.each( options.match( rnotwhite ) || [], function( _, flag ) {
+		object[ flag ] = true;
+	} );
+	return object;
+}
+
+/*
+ * Create a callback list using the following parameters:
+ *
+ *	options: an optional list of space-separated options that will change how
+ *			the callback list behaves or a more traditional option object
+ *
+ * By default a callback list will act like an event callback list and can be
+ * "fired" multiple times.
+ *
+ * Possible options:
+ *
+ *	once:			will ensure the callback list can only be fired once (like a Deferred)
+ *
+ *	memory:			will keep track of previous values and will call any callback added
+ *					after the list has been fired right away with the latest "memorized"
+ *					values (like a Deferred)
+ *
+ *	unique:			will ensure a callback can only be added once (no duplicate in the list)
+ *
+ *	stopOnFalse:	interrupt callings when a callback returns false
+ *
+ */
+jQuery.Callbacks = function( options ) {
+
+	// Convert options from String-formatted to Object-formatted if needed
+	// (we check in cache first)
+	options = typeof options === "string" ?
+		createOptions( options ) :
+		jQuery.extend( {}, options );
+
+	var // Flag to know if list is currently firing
+		firing,
+
+		// Last fire value for non-forgettable lists
+		memory,
+
+		// Flag to know if list was already fired
+		fired,
+
+		// Flag to prevent firing
+		locked,
+
+		// Actual callback list
+		list = [],
+
+		// Queue of execution data for repeatable lists
+		queue = [],
+
+		// Index of currently firing callback (modified by add/remove as needed)
+		firingIndex = -1,
+
+		// Fire callbacks
+		fire = function() {
+
+			// Enforce single-firing
+			locked = options.once;
+
+			// Execute callbacks for all pending executions,
+			// respecting firingIndex overrides and runtime changes
+			fired = firing = true;
+			for ( ; queue.length; firingIndex = -1 ) {
+				memory = queue.shift();
+				while ( ++firingIndex < list.length ) {
+
+					// Run callback and check for early termination
+					if ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false &&
+						options.stopOnFalse ) {
+
+						// Jump to end and forget the data so .add doesn't re-fire
+						firingIndex = list.length;
+						memory = false;
+					}
+				}
+			}
+
+			// Forget the data if we're done with it
+			if ( !options.memory ) {
+				memory = false;
+			}
+
+			firing = false;
+
+			// Clean up if we're done firing for good
+			if ( locked ) {
+
+				// Keep an empty list if we have data for future add calls
+				if ( memory ) {
+					list = [];
+
+				// Otherwise, this object is spent
+				} else {
+					list = "";
+				}
+			}
+		},
+
+		// Actual Callbacks object
+		self = {
+
+			// Add a callback or a collection of callbacks to the list
+			add: function() {
+				if ( list ) {
+
+					// If we have memory from a past run, we should fire after adding
+					if ( memory && !firing ) {
+						firingIndex = list.length - 1;
+						queue.push( memory );
+					}
+
+					( function add( args ) {
+						jQuery.each( args, function( _, arg ) {
+							if ( jQuery.isFunction( arg ) ) {
+								if ( !options.unique || !self.has( arg ) ) {
+									list.push( arg );
+								}
+							} else if ( arg && arg.length && jQuery.type( arg ) !== "string" ) {
+
+								// Inspect recursively
+								add( arg );
+							}
+						} );
+					} )( arguments );
+
+					if ( memory && !firing ) {
+						fire();
+					}
+				}
+				return this;
+			},
+
+			// Remove a callback from the list
+			remove: function() {
+				jQuery.each( arguments, function( _, arg ) {
+					var index;
+					while ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) {
+						list.splice( index, 1 );
+
+						// Handle firing indexes
+						if ( index <= firingIndex ) {
+							firingIndex--;
+						}
+					}
+				} );
+				return this;
+			},
+
+			// Check if a given callback is in the list.
+			// If no argument is given, return whether or not list has callbacks attached.
+			has: function( fn ) {
+				return fn ?
+					jQuery.inArray( fn, list ) > -1 :
+					list.length > 0;
+			},
+
+			// Remove all callbacks from the list
+			empty: function() {
+				if ( list ) {
+					list = [];
+				}
+				return this;
+			},
+
+			// Disable .fire and .add
+			// Abort any current/pending executions
+			// Clear all callbacks and values
+			disable: function() {
+				locked = queue = [];
+				list = memory = "";
+				return this;
+			},
+			disabled: function() {
+				return !list;
+			},
+
+			// Disable .fire
+			// Also disable .add unless we have memory (since it would have no effect)
+			// Abort any pending executions
+			lock: function() {
+				locked = queue = [];
+				if ( !memory ) {
+					list = memory = "";
+				}
+				return this;
+			},
+			locked: function() {
+				return !!locked;
+			},
+
+			// Call all callbacks with the given context and arguments
+			fireWith: function( context, args ) {
+				if ( !locked ) {
+					args = args || [];
+					args = [ context, args.slice ? args.slice() : args ];
+					queue.push( args );
+					if ( !firing ) {
+						fire();
+					}
+				}
+				return this;
+			},
+
+			// Call all the callbacks with the given arguments
+			fire: function() {
+				self.fireWith( this, arguments );
+				return this;
+			},
+
+			// To know if the callbacks have already been called at least once
+			fired: function() {
+				return !!fired;
+			}
+		};
+
+	return self;
+};
+
+
+jQuery.extend( {
+
+	Deferred: function( func ) {
+		var tuples = [
+
+				// action, add listener, listener list, final state
+				[ "resolve", "done", jQuery.Callbacks( "once memory" ), "resolved" ],
+				[ "reject", "fail", jQuery.Callbacks( "once memory" ), "rejected" ],
+				[ "notify", "progress", jQuery.Callbacks( "memory" ) ]
+			],
+			state = "pending",
+			promise = {
+				state: function() {
+					return state;
+				},
+				always: function() {
+					deferred.done( arguments ).fail( arguments );
+					return this;
+				},
+				then: function( /* fnDone, fnFail, fnProgress */ ) {
+					var fns = arguments;
+					return jQuery.Deferred( function( newDefer ) {
+						jQuery.each( tuples, function( i, tuple ) {
+							var fn = jQuery.isFunction( fns[ i ] ) && fns[ i ];
+
+							// deferred[ done | fail | progress ] for forwarding actions to newDefer
+							deferred[ tuple[ 1 ] ]( function() {
+								var returned = fn && fn.apply( this, arguments );
+								if ( returned && jQuery.isFunction( returned.promise ) ) {
+									returned.promise()
+										.progress( newDefer.notify )
+										.done( newDefer.resolve )
+										.fail( newDefer.reject );
+								} else {
+									newDefer[ tuple[ 0 ] + "With" ](
+										this === promise ? newDefer.promise() : this,
+										fn ? [ returned ] : arguments
+									);
+								}
+							} );
+						} );
+						fns = null;
+					} ).promise();
+				},
+
+				// Get a promise for this deferred
+				// If obj is provided, the promise aspect is added to the object
+				promise: function( obj ) {
+					return obj != null ? jQuery.extend( obj, promise ) : promise;
+				}
+			},
+			deferred = {};
+
+		// Keep pipe for back-compat
+		promise.pipe = promise.then;
+
+		// Add list-specific methods
+		jQuery.each( tuples, function( i, tuple ) {
+			var list = tuple[ 2 ],
+				stateString = tuple[ 3 ];
+
+			// promise[ done | fail | progress ] = list.add
+			promise[ tuple[ 1 ] ] = list.add;
+
+			// Handle state
+			if ( stateString ) {
+				list.add( function() {
+
+					// state = [ resolved | rejected ]
+					state = stateString;
+
+				// [ reject_list | resolve_list ].disable; progress_list.lock
+				}, tuples[ i ^ 1 ][ 2 ].disable, tuples[ 2 ][ 2 ].lock );
+			}
+
+			// deferred[ resolve | reject | notify ]
+			deferred[ tuple[ 0 ] ] = function() {
+				deferred[ tuple[ 0 ] + "With" ]( this === deferred ? promise : this, arguments );
+				return this;
+			};
+			deferred[ tuple[ 0 ] + "With" ] = list.fireWith;
+		} );
+
+		// Make the deferred a promise
+		promise.promise( deferred );
+
+		// Call given func if any
+		if ( func ) {
+			func.call( deferred, deferred );
+		}
+
+		// All done!
+		return deferred;
+	},
+
+	// Deferred helper
+	when: function( subordinate /* , ..., subordinateN */ ) {
+		var i = 0,
+			resolveValues = slice.call( arguments ),
+			length = resolveValues.length,
+
+			// the count of uncompleted subordinates
+			remaining = length !== 1 ||
+				( subordinate && jQuery.isFunction( subordinate.promise ) ) ? length : 0,
+
+			// the master Deferred.
+			// If resolveValues consist of only a single Deferred, just use that.
+			deferred = remaining === 1 ? subordinate : jQuery.Deferred(),
+
+			// Update function for both resolve and progress values
+			updateFunc = function( i, contexts, values ) {
+				return function( value ) {
+					contexts[ i ] = this;
+					values[ i ] = arguments.length > 1 ? slice.call( arguments ) : value;
+					if ( values === progressValues ) {
+						deferred.notifyWith( contexts, values );
+					} else if ( !( --remaining ) ) {
+						deferred.resolveWith( contexts, values );
+					}
+				};
+			},
+
+			progressValues, progressContexts, resolveContexts;
+
+		// Add listeners to Deferred subordinates; treat others as resolved
+		if ( length > 1 ) {
+			progressValues = new Array( length );
+			progressContexts = new Array( length );
+			resolveContexts = new Array( length );
+			for ( ; i < length; i++ ) {
+				if ( resolveValues[ i ] && jQuery.isFunction( resolveValues[ i ].promise ) ) {
+					resolveValues[ i ].promise()
+						.progress( updateFunc( i, progressContexts, progressValues ) )
+						.done( updateFunc( i, resolveContexts, resolveValues ) )
+						.fail( deferred.reject );
+				} else {
+					--remaining;
+				}
+			}
+		}
+
+		// If we're not waiting on anything, resolve the master
+		if ( !remaining ) {
+			deferred.resolveWith( resolveContexts, resolveValues );
+		}
+
+		return deferred.promise();
+	}
+} );
+
+
+// The deferred used on DOM ready
+var readyList;
+
+jQuery.fn.ready = function( fn ) {
+
+	// Add the callback
+	jQuery.ready.promise().done( fn );
+
+	return this;
+};
+
+jQuery.extend( {
+
+	// Is the DOM ready to be used? Set to true once it occurs.
+	isReady: false,
+
+	// A counter to track how many items to wait for before
+	// the ready event fires. See #6781
+	readyWait: 1,
+
+	// Hold (or release) the ready event
+	holdReady: function( hold ) {
+		if ( hold ) {
+			jQuery.readyWait++;
+		} else {
+			jQuery.ready( true );
+		}
+	},
+
+	// Handle when the DOM is ready
+	ready: function( wait ) {
+
+		// Abort if there are pending holds or we're already ready
+		if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) {
+			return;
+		}
+
+		// Remember that the DOM is ready
+		jQuery.isReady = true;
+
+		// If a normal DOM Ready event fired, decrement, and wait if need be
+		if ( wait !== true && --jQuery.readyWait > 0 ) {
+			return;
+		}
+
+		// If there are functions bound, to execute
+		readyList.resolveWith( document, [ jQuery ] );
+
+		// Trigger any bound ready events
+		if ( jQuery.fn.triggerHandler ) {
+			jQuery( document ).triggerHandler( "ready" );
+			jQuery( document ).off( "ready" );
+		}
+	}
+} );
+
+/**
+ * The ready event handler and self cleanup method
+ */
+function completed() {
+	document.removeEventListener( "DOMContentLoaded", completed );
+	window.removeEventListener( "load", completed );
+	jQuery.ready();
+}
+
+jQuery.ready.promise = function( obj ) {
+	if ( !readyList ) {
+
+		readyList = jQuery.Deferred();
+
+		// Catch cases where $(document).ready() is called
+		// after the browser event has already occurred.
+		// Support: IE9-10 only
+		// Older IE sometimes signals "interactive" too soon
+		if ( document.readyState === "complete" ||
+			( document.readyState !== "loading" && !document.documentElement.doScroll ) ) {
+
+			// Handle it asynchronously to allow scripts the opportunity to delay ready
+			window.setTimeout( jQuery.ready );
+
+		} else {
+
+			// Use the handy event callback
+			document.addEventListener( "DOMContentLoaded", completed );
+
+			// A fallback to window.onload, that will always work
+			window.addEventListener( "load", completed );
+		}
+	}
+	return readyList.promise( obj );
+};
+
+// Kick off the DOM ready check even if the user does not
+jQuery.ready.promise();
+
+
+
+
+// Multifunctional method to get and set values of a collection
+// The value/s can optionally be executed if it's a function
+var access = function( elems, fn, key, value, chainable, emptyGet, raw ) {
+	var i = 0,
+		len = elems.length,
+		bulk = key == null;
+
+	// Sets many values
+	if ( jQuery.type( key ) === "object" ) {
+		chainable = true;
+		for ( i in key ) {
+			access( elems, fn, i, key[ i ], true, emptyGet, raw );
+		}
+
+	// Sets one value
+	} else if ( value !== undefined ) {
+		chainable = true;
+
+		if ( !jQuery.isFunction( value ) ) {
+			raw = true;
+		}
+
+		if ( bulk ) {
+
+			// Bulk operations run against the entire set
+			if ( raw ) {
+				fn.call( elems, value );
+				fn = null;
+
+			// ...except when executing function values
+			} else {
+				bulk = fn;
+				fn = function( elem, key, value ) {
+					return bulk.call( jQuery( elem ), value );
+				};
+			}
+		}
+
+		if ( fn ) {
+			for ( ; i < len; i++ ) {
+				fn(
+					elems[ i ], key, raw ?
+					value :
+					value.call( elems[ i ], i, fn( elems[ i ], key ) )
+				);
+			}
+		}
+	}
+
+	return chainable ?
+		elems :
+
+		// Gets
+		bulk ?
+			fn.call( elems ) :
+			len ? fn( elems[ 0 ], key ) : emptyGet;
+};
+var acceptData = function( owner ) {
+
+	// Accepts only:
+	//  - Node
+	//    - Node.ELEMENT_NODE
+	//    - Node.DOCUMENT_NODE
+	//  - Object
+	//    - Any
+	/* jshint -W018 */
+	return owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType );
+};
+
+
+
+
+function Data() {
+	this.expando = jQuery.expando + Data.uid++;
+}
+
+Data.uid = 1;
+
+Data.prototype = {
+
+	register: function( owner, initial ) {
+		var value = initial || {};
+
+		// If it is a node unlikely to be stringify-ed or looped over
+		// use plain assignment
+		if ( owner.nodeType ) {
+			owner[ this.expando ] = value;
+
+		// Otherwise secure it in a non-enumerable, non-writable property
+		// configurability must be true to allow the property to be
+		// deleted with the delete operator
+		} else {
+			Object.defineProperty( owner, this.expando, {
+				value: value,
+				writable: true,
+				configurable: true
+			} );
+		}
+		return owner[ this.expando ];
+	},
+	cache: function( owner ) {
+
+		// We can accept data for non-element nodes in modern browsers,
+		// but we should not, see #8335.
+		// Always return an empty object.
+		if ( !acceptData( owner ) ) {
+			return {};
+		}
+
+		// Check if the owner object already has a cache
+		var value = owner[ this.expando ];
+
+		// If not, create one
+		if ( !value ) {
+			value = {};
+
+			// We can accept data for non-element nodes in modern browsers,
+			// but we should not, see #8335.
+			// Always return an empty object.
+			if ( acceptData( owner ) ) {
+
+				// If it is a node unlikely to be stringify-ed or looped over
+				// use plain assignment
+				if ( owner.nodeType ) {
+					owner[ this.expando ] = value;
+
+				// Otherwise secure it in a non-enumerable property
+				// configurable must be true to allow the property to be
+				// deleted when data is removed
+				} else {
+					Object.defineProperty( owner, this.expando, {
+						value: value,
+						configurable: true
+					} );
+				}
+			}
+		}
+
+		return value;
+	},
+	set: function( owner, data, value ) {
+		var prop,
+			cache = this.cache( owner );
+
+		// Handle: [ owner, key, value ] args
+		if ( typeof data === "string" ) {
+			cache[ data ] = value;
+
+		// Handle: [ owner, { properties } ] args
+		} else {
+
+			// Copy the properties one-by-one to the cache object
+			for ( prop in data ) {
+				cache[ prop ] = data[ prop ];
+			}
+		}
+		return cache;
+	},
+	get: function( owner, key ) {
+		return key === undefined ?
+			this.cache( owner ) :
+			owner[ this.expando ] && owner[ this.expando ][ key ];
+	},
+	access: function( owner, key, value ) {
+		var stored;
+
+		// In cases where either:
+		//
+		//   1. No key was specified
+		//   2. A string key was specified, but no value provided
+		//
+		// Take the "read" path and allow the get method to determine
+		// which value to return, respectively either:
+		//
+		//   1. The entire cache object
+		//   2. The data stored at the key
+		//
+		if ( key === undefined ||
+				( ( key && typeof key === "string" ) && value === undefined ) ) {
+
+			stored = this.get( owner, key );
+
+			return stored !== undefined ?
+				stored : this.get( owner, jQuery.camelCase( key ) );
+		}
+
+		// When the key is not a string, or both a key and value
+		// are specified, set or extend (existing objects) with either:
+		//
+		//   1. An object of properties
+		//   2. A key and value
+		//
+		this.set( owner, key, value );
+
+		// Since the "set" path can have two possible entry points
+		// return the expected data based on which path was taken[*]
+		return value !== undefined ? value : key;
+	},
+	remove: function( owner, key ) {
+		var i, name, camel,
+			cache = owner[ this.expando ];
+
+		if ( cache === undefined ) {
+			return;
+		}
+
+		if ( key === undefined ) {
+			this.register( owner );
+
+		} else {
+
+			// Support array or space separated string of keys
+			if ( jQuery.isArray( key ) ) {
+
+				// If "name" is an array of keys...
+				// When data is initially created, via ("key", "val") signature,
+				// keys will be converted to camelCase.
+				// Since there is no way to tell _how_ a key was added, remove
+				// both plain key and camelCase key. #12786
+				// This will only penalize the array argument path.
+				name = key.concat( key.map( jQuery.camelCase ) );
+			} else {
+				camel = jQuery.camelCase( key );
+
+				// Try the string as a key before any manipulation
+				if ( key in cache ) {
+					name = [ key, camel ];
+				} else {
+
+					// If a key with the spaces exists, use it.
+					// Otherwise, create an array by matching non-whitespace
+					name = camel;
+					name = name in cache ?
+						[ name ] : ( name.match( rnotwhite ) || [] );
+				}
+			}
+
+			i = name.length;
+
+			while ( i-- ) {
+				delete cache[ name[ i ] ];
+			}
+		}
+
+		// Remove the expando if there's no more data
+		if ( key === undefined || jQuery.isEmptyObject( cache ) ) {
+
+			// Support: Chrome <= 35-45+
+			// Webkit & Blink performance suffers when deleting properties
+			// from DOM nodes, so set to undefined instead
+			// https://code.google.com/p/chromium/issues/detail?id=378607
+			if ( owner.nodeType ) {
+				owner[ this.expando ] = undefined;
+			} else {
+				delete owner[ this.expando ];
+			}
+		}
+	},
+	hasData: function( owner ) {
+		var cache = owner[ this.expando ];
+		return cache !== undefined && !jQuery.isEmptyObject( cache );
+	}
+};
+var dataPriv = new Data();
+
+var dataUser = new Data();
+
+
+
+//	Implementation Summary
+//
+//	1. Enforce API surface and semantic compatibility with 1.9.x branch
+//	2. Improve the module's maintainability by reducing the storage
+//		paths to a single mechanism.
+//	3. Use the same single mechanism to support "private" and "user" data.
+//	4. _Never_ expose "private" data to user code (TODO: Drop _data, _removeData)
+//	5. Avoid exposing implementation details on user objects (eg. expando properties)
+//	6. Provide a clear path for implementation upgrade to WeakMap in 2014
+
+var rbrace = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,
+	rmultiDash = /[A-Z]/g;
+
+function dataAttr( elem, key, data ) {
+	var name;
+
+	// If nothing was found internally, try to fetch any
+	// data from the HTML5 data-* attribute
+	if ( data === undefined && elem.nodeType === 1 ) {
+		name = "data-" + key.replace( rmultiDash, "-$&" ).toLowerCase();
+		data = elem.getAttribute( name );
+
+		if ( typeof data === "string" ) {
+			try {
+				data = data === "true" ? true :
+					data === "false" ? false :
+					data === "null" ? null :
+
+					// Only convert to a number if it doesn't change the string
+					+data + "" === data ? +data :
+					rbrace.test( data ) ? jQuery.parseJSON( data ) :
+					data;
+			} catch ( e ) {}
+
+			// Make sure we set the data so it isn't changed later
+			dataUser.set( elem, key, data );
+		} else {
+			data = undefined;
+		}
+	}
+	return data;
+}
+
+jQuery.extend( {
+	hasData: function( elem ) {
+		return dataUser.hasData( elem ) || dataPriv.hasData( elem );
+	},
+
+	data: function( elem, name, data ) {
+		return dataUser.access( elem, name, data );
+	},
+
+	removeData: function( elem, name ) {
+		dataUser.remove( elem, name );
+	},
+
+	// TODO: Now that all calls to _data and _removeData have been replaced
+	// with direct calls to dataPriv methods, these can be deprecated.
+	_data: function( elem, name, data ) {
+		return dataPriv.access( elem, name, data );
+	},
+
+	_removeData: function( elem, name ) {
+		dataPriv.remove( elem, name );
+	}
+} );
+
+jQuery.fn.extend( {
+	data: function( key, value ) {
+		var i, name, data,
+			elem = this[ 0 ],
+			attrs = elem && elem.attributes;
+
+		// Gets all values
+		if ( key === undefined ) {
+			if ( this.length ) {
+				data = dataUser.get( elem );
+
+				if ( elem.nodeType === 1 && !dataPriv.get( elem, "hasDataAttrs" ) ) {
+					i = attrs.length;
+					while ( i-- ) {
+
+						// Support: IE11+
+						// The attrs elements can be null (#14894)
+						if ( attrs[ i ] ) {
+							name = attrs[ i ].name;
+							if ( name.indexOf( "data-" ) === 0 ) {
+								name = jQuery.camelCase( name.slice( 5 ) );
+								dataAttr( elem, name, data[ name ] );
+							}
+						}
+					}
+					dataPriv.set( elem, "hasDataAttrs", true );
+				}
+			}
+
+			return data;
+		}
+
+		// Sets multiple values
+		if ( typeof key === "object" ) {
+			return this.each( function() {
+				dataUser.set( this, key );
+			} );
+		}
+
+		return access( this, function( value ) {
+			var data, camelKey;
+
+			// The calling jQuery object (element matches) is not empty
+			// (and therefore has an element appears at this[ 0 ]) and the
+			// `value` parameter was not undefined. An empty jQuery object
+			// will result in `undefined` for elem = this[ 0 ] which will
+			// throw an exception if an attempt to read a data cache is made.
+			if ( elem && value === undefined ) {
+
+				// Attempt to get data from the cache
+				// with the key as-is
+				data = dataUser.get( elem, key ) ||
+
+					// Try to find dashed key if it exists (gh-2779)
+					// This is for 2.2.x only
+					dataUser.get( elem, key.replace( rmultiDash, "-$&" ).toLowerCase() );
+
+				if ( data !== undefined ) {
+					return data;
+				}
+
+				camelKey = jQuery.camelCase( key );
+
+				// Attempt to get data from the cache
+				// with the key camelized
+				data = dataUser.get( elem, camelKey );
+				if ( data !== undefined ) {
+					return data;
+				}
+
+				// Attempt to "discover" the data in
+				// HTML5 custom data-* attrs
+				data = dataAttr( elem, camelKey, undefined );
+				if ( data !== undefined ) {
+					return data;
+				}
+
+				// We tried really hard, but the data doesn't exist.
+				return;
+			}
+
+			// Set the data...
+			camelKey = jQuery.camelCase( key );
+			this.each( function() {
+
+				// First, attempt to store a copy or reference of any
+				// data that might've been store with a camelCased key.
+				var data = dataUser.get( this, camelKey );
+
+				// For HTML5 data-* attribute interop, we have to
+				// store property names with dashes in a camelCase form.
+				// This might not apply to all properties...*
+				dataUser.set( this, camelKey, value );
+
+				// *... In the case of properties that might _actually_
+				// have dashes, we need to also store a copy of that
+				// unchanged property.
+				if ( key.indexOf( "-" ) > -1 && data !== undefined ) {
+					dataUser.set( this, key, value );
+				}
+			} );
+		}, null, value, arguments.length > 1, null, true );
+	},
+
+	removeData: function( key ) {
+		return this.each( function() {
+			dataUser.remove( this, key );
+		} );
+	}
+} );
+
+
+jQuery.extend( {
+	queue: function( elem, type, data ) {
+		var queue;
+
+		if ( elem ) {
+			type = ( type || "fx" ) + "queue";
+			queue = dataPriv.get( elem, type );
+
+			// Speed up dequeue by getting out quickly if this is just a lookup
+			if ( data ) {
+				if ( !queue || jQuery.isArray( data ) ) {
+					queue = dataPriv.access( elem, type, jQuery.makeArray( data ) );
+				} else {
+					queue.push( data );
+				}
+			}
+			return queue || [];
+		}
+	},
+
+	dequeue: function( elem, type ) {
+		type = type || "fx";
+
+		var queue = jQuery.queue( elem, type ),
+			startLength = queue.length,
+			fn = queue.shift(),
+			hooks = jQuery._queueHooks( elem, type ),
+			next = function() {
+				jQuery.dequeue( elem, type );
+			};
+
+		// If the fx queue is dequeued, always remove the progress sentinel
+		if ( fn === "inprogress" ) {
+			fn = queue.shift();
+			startLength--;
+		}
+
+		if ( fn ) {
+
+			// Add a progress sentinel to prevent the fx queue from being
+			// automatically dequeued
+			if ( type === "fx" ) {
+				queue.unshift( "inprogress" );
+			}
+
+			// Clear up the last queue stop function
+			delete hooks.stop;
+			fn.call( elem, next, hooks );
+		}
+
+		if ( !startLength && hooks ) {
+			hooks.empty.fire();
+		}
+	},
+
+	// Not public - generate a queueHooks object, or return the current one
+	_queueHooks: function( elem, type ) {
+		var key = type + "queueHooks";
+		return dataPriv.get( elem, key ) || dataPriv.access( elem, key, {
+			empty: jQuery.Callbacks( "once memory" ).add( function() {
+				dataPriv.remove( elem, [ type + "queue", key ] );
+			} )
+		} );
+	}
+} );
+
+jQuery.fn.extend( {
+	queue: function( type, data ) {
+		var setter = 2;
+
+		if ( typeof type !== "string" ) {
+			data = type;
+			type = "fx";
+			setter--;
+		}
+
+		if ( arguments.length < setter ) {
+			return jQuery.queue( this[ 0 ], type );
+		}
+
+		return data === undefined ?
+			this :
+			this.each( function() {
+				var queue = jQuery.queue( this, type, data );
+
+				// Ensure a hooks for this queue
+				jQuery._queueHooks( this, type );
+
+				if ( type === "fx" && queue[ 0 ] !== "inprogress" ) {
+					jQuery.dequeue( this, type );
+				}
+			} );
+	},
+	dequeue: function( type ) {
+		return this.each( function() {
+			jQuery.dequeue( this, type );
+		} );
+	},
+	clearQueue: function( type ) {
+		return this.queue( type || "fx", [] );
+	},
+
+	// Get a promise resolved when queues of a certain type
+	// are emptied (fx is the type by default)
+	promise: function( type, obj ) {
+		var tmp,
+			count = 1,
+			defer = jQuery.Deferred(),
+			elements = this,
+			i = this.length,
+			resolve = function() {
+				if ( !( --count ) ) {
+					defer.resolveWith( elements, [ elements ] );
+				}
+			};
+
+		if ( typeof type !== "string" ) {
+			obj = type;
+			type = undefined;
+		}
+		type = type || "fx";
+
+		while ( i-- ) {
+			tmp = dataPriv.get( elements[ i ], type + "queueHooks" );
+			if ( tmp && tmp.empty ) {
+				count++;
+				tmp.empty.add( resolve );
+			}
+		}
+		resolve();
+		return defer.promise( obj );
+	}
+} );
+var pnum = ( /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/ ).source;
+
+var rcssNum = new RegExp( "^(?:([+-])=|)(" + pnum + ")([a-z%]*)$", "i" );
+
+
+var cssExpand = [ "Top", "Right", "Bottom", "Left" ];
+
+var isHidden = function( elem, el ) {
+
+		// isHidden might be called from jQuery#filter function;
+		// in that case, element will be second argument
+		elem = el || elem;
+		return jQuery.css( elem, "display" ) === "none" ||
+			!jQuery.contains( elem.ownerDocument, elem );
+	};
+
+
+
+function adjustCSS( elem, prop, valueParts, tween ) {
+	var adjusted,
+		scale = 1,
+		maxIterations = 20,
+		currentValue = tween ?
+			function() { return tween.cur(); } :
+			function() { return jQuery.css( elem, prop, "" ); },
+		initial = currentValue(),
+		unit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? "" : "px" ),
+
+		// Starting value computation is required for potential unit mismatches
+		initialInUnit = ( jQuery.cssNumber[ prop ] || unit !== "px" && +initial ) &&
+			rcssNum.exec( jQuery.css( elem, prop ) );
+
+	if ( initialInUnit && initialInUnit[ 3 ] !== unit ) {
+
+		// Trust units reported by jQuery.css
+		unit = unit || initialInUnit[ 3 ];
+
+		// Make sure we update the tween properties later on
+		valueParts = valueParts || [];
+
+		// Iteratively approximate from a nonzero starting point
+		initialInUnit = +initial || 1;
+
+		do {
+
+			// If previous iteration zeroed out, double until we get *something*.
+			// Use string for doubling so we don't accidentally see scale as unchanged below
+			scale = scale || ".5";
+
+			// Adjust and apply
+			initialInUnit = initialInUnit / scale;
+			jQuery.style( elem, prop, initialInUnit + unit );
+
+		// Update scale, tolerating zero or NaN from tween.cur()
+		// Break the loop if scale is unchanged or perfect, or if we've just had enough.
+		} while (
+			scale !== ( scale = currentValue() / initial ) && scale !== 1 && --maxIterations
+		);
+	}
+
+	if ( valueParts ) {
+		initialInUnit = +initialInUnit || +initial || 0;
+
+		// Apply relative offset (+=/-=) if specified
+		adjusted = valueParts[ 1 ] ?
+			initialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] :
+			+valueParts[ 2 ];
+		if ( tween ) {
+			tween.unit = unit;
+			tween.start = initialInUnit;
+			tween.end = adjusted;
+		}
+	}
+	return adjusted;
+}
+var rcheckableType = ( /^(?:checkbox|radio)$/i );
+
+var rtagName = ( /<([\w:-]+)/ );
+
+var rscriptType = ( /^$|\/(?:java|ecma)script/i );
+
+
+
+// We have to close these tags to support XHTML (#13200)
+var wrapMap = {
+
+	// Support: IE9
+	option: [ 1, "<select multiple='multiple'>", "</select>" ],
+
+	// XHTML parsers do not magically insert elements in the
+	// same way that tag soup parsers do. So we cannot shorten
+	// this by omitting <tbody> or other required elements.
+	thead: [ 1, "<table>", "</table>" ],
+	col: [ 2, "<table><colgroup>", "</colgroup></table>" ],
+	tr: [ 2, "<table><tbody>", "</tbody></table>" ],
+	td: [ 3, "<table><tbody><tr>", "</tr></tbody></table>" ],
+
+	_default: [ 0, "", "" ]
+};
+
+// Support: IE9
+wrapMap.optgroup = wrapMap.option;
+
+wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;
+wrapMap.th = wrapMap.td;
+
+
+function getAll( context, tag ) {
+
+	// Support: IE9-11+
+	// Use typeof to avoid zero-argument method invocation on host objects (#15151)
+	var ret = typeof context.getElementsByTagName !== "undefined" ?
+			context.getElementsByTagName( tag || "*" ) :
+			typeof context.querySelectorAll !== "undefined" ?
+				context.querySelectorAll( tag || "*" ) :
+			[];
+
+	return tag === undefined || tag && jQuery.nodeName( context, tag ) ?
+		jQuery.merge( [ context ], ret ) :
+		ret;
+}
+
+
+// Mark scripts as having already been evaluated
+function setGlobalEval( elems, refElements ) {
+	var i = 0,
+		l = elems.length;
+
+	for ( ; i < l; i++ ) {
+		dataPriv.set(
+			elems[ i ],
+			"globalEval",
+			!refElements || dataPriv.get( refElements[ i ], "globalEval" )
+		);
+	}
+}
+
+
+var rhtml = /<|&#?\w+;/;
+
+function buildFragment( elems, context, scripts, selection, ignored ) {
+	var elem, tmp, tag, wrap, contains, j,
+		fragment = context.createDocumentFragment(),
+		nodes = [],
+		i = 0,
+		l = elems.length;
+
+	for ( ; i < l; i++ ) {
+		elem = elems[ i ];
+
+		if ( elem || elem === 0 ) {
+
+			// Add nodes directly
+			if ( jQuery.type( elem ) === "object" ) {
+
+				// Support: Android<4.1, PhantomJS<2
+				// push.apply(_, arraylike) throws on ancient WebKit
+				jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem );
+
+			// Convert non-html into a text node
+			} else if ( !rhtml.test( elem ) ) {
+				nodes.push( context.createTextNode( elem ) );
+
+			// Convert html into DOM nodes
+			} else {
+				tmp = tmp || fragment.appendChild( context.createElement( "div" ) );
+
+				// Deserialize a standard representation
+				tag = ( rtagName.exec( elem ) || [ "", "" ] )[ 1 ].toLowerCase();
+				wrap = wrapMap[ tag ] || wrapMap._default;
+				tmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ];
+
+				// Descend through wrappers to the right content
+				j = wrap[ 0 ];
+				while ( j-- ) {
+					tmp = tmp.lastChild;
+				}
+
+				// Support: Android<4.1, PhantomJS<2
+				// push.apply(_, arraylike) throws on ancient WebKit
+				jQuery.merge( nodes, tmp.childNodes );
+
+				// Remember the top-level container
+				tmp = fragment.firstChild;
+
+				// Ensure the created nodes are orphaned (#12392)
+				tmp.textContent = "";
+			}
+		}
+	}
+
+	// Remove wrapper from fragment
+	fragment.textContent = "";
+
+	i = 0;
+	while ( ( elem = nodes[ i++ ] ) ) {
+
+		// Skip elements already in the context collection (trac-4087)
+		if ( selection && jQuery.inArray( elem, selection ) > -1 ) {
+			if ( ignored ) {
+				ignored.push( elem );
+			}
+			continue;
+		}
+
+		contains = jQuery.contains( elem.ownerDocument, elem );
+
+		// Append to fragment
+		tmp = getAll( fragment.appendChild( elem ), "script" );
+
+		// Preserve script evaluation history
+		if ( contains ) {
+			setGlobalEval( tmp );
+		}
+
+		// Capture executables
+		if ( scripts ) {
+			j = 0;
+			while ( ( elem = tmp[ j++ ] ) ) {
+				if ( rscriptType.test( elem.type || "" ) ) {
+					scripts.push( elem );
+				}
+			}
+		}
+	}
+
+	return fragment;
+}
+
+
+( function() {
+	var fragment = document.createDocumentFragment(),
+		div = fragment.appendChild( document.createElement( "div" ) ),
+		input = document.createElement( "input" );
+
+	// Support: Android 4.0-4.3, Safari<=5.1
+	// Check state lost if the name is set (#11217)
+	// Support: Windows Web Apps (WWA)
+	// `name` and `type` must use .setAttribute for WWA (#14901)
+	input.setAttribute( "type", "radio" );
+	input.setAttribute( "checked", "checked" );
+	input.setAttribute( "name", "t" );
+
+	div.appendChild( input );
+
+	// Support: Safari<=5.1, Android<4.2
+	// Older WebKit doesn't clone checked state correctly in fragments
+	support.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked;
+
+	// Support: IE<=11+
+	// Make sure textarea (and checkbox) defaultValue is properly cloned
+	div.innerHTML = "<textarea>x</textarea>";
+	support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue;
+} )();
+
+
+var
+	rkeyEvent = /^key/,
+	rmouseEvent = /^(?:mouse|pointer|contextmenu|drag|drop)|click/,
+	rtypenamespace = /^([^.]*)(?:\.(.+)|)/;
+
+function returnTrue() {
+	return true;
+}
+
+function returnFalse() {
+	return false;
+}
+
+// Support: IE9
+// See #13393 for more info
+function safeActiveElement() {
+	try {
+		return document.activeElement;
+	} catch ( err ) { }
+}
+
+function on( elem, types, selector, data, fn, one ) {
+	var origFn, type;
+
+	// Types can be a map of types/handlers
+	if ( typeof types === "object" ) {
+
+		// ( types-Object, selector, data )
+		if ( typeof selector !== "string" ) {
+
+			// ( types-Object, data )
+			data = data || selector;
+			selector = undefined;
+		}
+		for ( type in types ) {
+			on( elem, type, selector, data, types[ type ], one );
+		}
+		return elem;
+	}
+
+	if ( data == null && fn == null ) {
+
+		// ( types, fn )
+		fn = selector;
+		data = selector = undefined;
+	} else if ( fn == null ) {
+		if ( typeof selector === "string" ) {
+
+			// ( types, selector, fn )
+			fn = data;
+			data = undefined;
+		} else {
+
+			// ( types, data, fn )
+			fn = data;
+			data = selector;
+			selector = undefined;
+		}
+	}
+	if ( fn === false ) {
+		fn = returnFalse;
+	} else if ( !fn ) {
+		return elem;
+	}
+
+	if ( one === 1 ) {
+		origFn = fn;
+		fn = function( event ) {
+
+			// Can use an empty set, since event contains the info
+			jQuery().off( event );
+			return origFn.apply( this, arguments );
+		};
+
+		// Use same guid so caller can remove using origFn
+		fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );
+	}
+	return elem.each( function() {
+		jQuery.event.add( this, types, fn, data, selector );
+	} );
+}
+
+/*
+ * Helper functions for managing events -- not part of the public interface.
+ * Props to Dean Edwards' addEvent library for many of the ideas.
+ */
+jQuery.event = {
+
+	global: {},
+
+	add: function( elem, types, handler, data, selector ) {
+
+		var handleObjIn, eventHandle, tmp,
+			events, t, handleObj,
+			special, handlers, type, namespaces, origType,
+			elemData = dataPriv.get( elem );
+
+		// Don't attach events to noData or text/comment nodes (but allow plain objects)
+		if ( !elemData ) {
+			return;
+		}
+
+		// Caller can pass in an object of custom data in lieu of the handler
+		if ( handler.handler ) {
+			handleObjIn = handler;
+			handler = handleObjIn.handler;
+			selector = handleObjIn.selector;
+		}
+
+		// Make sure that the handler has a unique ID, used to find/remove it later
+		if ( !handler.guid ) {
+			handler.guid = jQuery.guid++;
+		}
+
+		// Init the element's event structure and main handler, if this is the first
+		if ( !( events = elemData.events ) ) {
+			events = elemData.events = {};
+		}
+		if ( !( eventHandle = elemData.handle ) ) {
+			eventHandle = elemData.handle = function( e ) {
+
+				// Discard the second event of a jQuery.event.trigger() and
+				// when an event is called after a page has unloaded
+				return typeof jQuery !== "undefined" && jQuery.event.triggered !== e.type ?
+					jQuery.event.dispatch.apply( elem, arguments ) : undefined;
+			};
+		}
+
+		// Handle multiple events separated by a space
+		types = ( types || "" ).match( rnotwhite ) || [ "" ];
+		t = types.length;
+		while ( t-- ) {
+			tmp = rtypenamespace.exec( types[ t ] ) || [];
+			type = origType = tmp[ 1 ];
+			namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort();
+
+			// There *must* be a type, no attaching namespace-only handlers
+			if ( !type ) {
+				continue;
+			}
+
+			// If event changes its type, use the special event handlers for the changed type
+			special = jQuery.event.special[ type ] || {};
+
+			// If selector defined, determine special event api type, otherwise given type
+			type = ( selector ? special.delegateType : special.bindType ) || type;
+
+			// Update special based on newly reset type
+			special = jQuery.event.special[ type ] || {};
+
+			// handleObj is passed to all event handlers
+			handleObj = jQuery.extend( {
+				type: type,
+				origType: origType,
+				data: data,
+				handler: handler,
+				guid: handler.guid,
+				selector: selector,
+				needsContext: selector && jQuery.expr.match.needsContext.test( selector ),
+				namespace: namespaces.join( "." )
+			}, handleObjIn );
+
+			// Init the event handler queue if we're the first
+			if ( !( handlers = events[ type ] ) ) {
+				handlers = events[ type ] = [];
+				handlers.delegateCount = 0;
+
+				// Only use addEventListener if the special events handler returns false
+				if ( !special.setup ||
+					special.setup.call( elem, data, namespaces, eventHandle ) === false ) {
+
+					if ( elem.addEventListener ) {
+						elem.addEventListener( type, eventHandle );
+					}
+				}
+			}
+
+			if ( special.add ) {
+				special.add.call( elem, handleObj );
+
+				if ( !handleObj.handler.guid ) {
+					handleObj.handler.guid = handler.guid;
+				}
+			}
+
+			// Add to the element's handler list, delegates in front
+			if ( selector ) {
+				handlers.splice( handlers.delegateCount++, 0, handleObj );
+			} else {
+				handlers.push( handleObj );
+			}
+
+			// Keep track of which events have ever been used, for event optimization
+			jQuery.event.global[ type ] = true;
+		}
+
+	},
+
+	// Detach an event or set of events from an element
+	remove: function( elem, types, handler, selector, mappedTypes ) {
+
+		var j, origCount, tmp,
+			events, t, handleObj,
+			special, handlers, type, namespaces, origType,
+			elemData = dataPriv.hasData( elem ) && dataPriv.get( elem );
+
+		if ( !elemData || !( events = elemData.events ) ) {
+			return;
+		}
+
+		// Once for each type.namespace in types; type may be omitted
+		types = ( types || "" ).match( rnotwhite ) || [ "" ];
+		t = types.length;
+		while ( t-- ) {
+			tmp = rtypenamespace.exec( types[ t ] ) || [];
+			type = origType = tmp[ 1 ];
+			namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort();
+
+			// Unbind all events (on this namespace, if provided) for the element
+			if ( !type ) {
+				for ( type in events ) {
+					jQuery.event.remove( elem, type + types[ t ], handler, selector, true );
+				}
+				continue;
+			}
+
+			special = jQuery.event.special[ type ] || {};
+			type = ( selector ? special.delegateType : special.bindType ) || type;
+			handlers = events[ type ] || [];
+			tmp = tmp[ 2 ] &&
+				new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" );
+
+			// Remove matching events
+			origCount = j = handlers.length;
+			while ( j-- ) {
+				handleObj = handlers[ j ];
+
+				if ( ( mappedTypes || origType === handleObj.origType ) &&
+					( !handler || handler.guid === handleObj.guid ) &&
+					( !tmp || tmp.test( handleObj.namespace ) ) &&
+					( !selector || selector === handleObj.selector ||
+						selector === "**" && handleObj.selector ) ) {
+					handlers.splice( j, 1 );
+
+					if ( handleObj.selector ) {
+						handlers.delegateCount--;
+					}
+					if ( special.remove ) {
+						special.remove.call( elem, handleObj );
+					}
+				}
+			}
+
+			// Remove generic event handler if we removed something and no more handlers exist
+			// (avoids potential for endless recursion during removal of special event handlers)
+			if ( origCount && !handlers.length ) {
+				if ( !special.teardown ||
+					special.teardown.call( elem, namespaces, elemData.handle ) === false ) {
+
+					jQuery.removeEvent( elem, type, elemData.handle );
+				}
+
+				delete events[ type ];
+			}
+		}
+
+		// Remove data and the expando if it's no longer used
+		if ( jQuery.isEmptyObject( events ) ) {
+			dataPriv.remove( elem, "handle events" );
+		}
+	},
+
+	dispatch: function( event ) {
+
+		// Make a writable jQuery.Event from the native event object
+		event = jQuery.event.fix( event );
+
+		var i, j, ret, matched, handleObj,
+			handlerQueue = [],
+			args = slice.call( arguments ),
+			handlers = ( dataPriv.get( this, "events" ) || {} )[ event.type ] || [],
+			special = jQuery.event.special[ event.type ] || {};
+
+		// Use the fix-ed jQuery.Event rather than the (read-only) native event
+		args[ 0 ] = event;
+		event.delegateTarget = this;
+
+		// Call the preDispatch hook for the mapped type, and let it bail if desired
+		if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) {
+			return;
+		}
+
+		// Determine handlers
+		handlerQueue = jQuery.event.handlers.call( this, event, handlers );
+
+		// Run delegates first; they may want to stop propagation beneath us
+		i = 0;
+		while ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) {
+			event.currentTarget = matched.elem;
+
+			j = 0;
+			while ( ( handleObj = matched.handlers[ j++ ] ) &&
+				!event.isImmediatePropagationStopped() ) {
+
+				// Triggered event must either 1) have no namespace, or 2) have namespace(s)
+				// a subset or equal to those in the bound event (both can have no namespace).
+				if ( !event.rnamespace || event.rnamespace.test( handleObj.namespace ) ) {
+
+					event.handleObj = handleObj;
+					event.data = handleObj.data;
+
+					ret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle ||
+						handleObj.handler ).apply( matched.elem, args );
+
+					if ( ret !== undefined ) {
+						if ( ( event.result = ret ) === false ) {
+							event.preventDefault();
+							event.stopPropagation();
+						}
+					}
+				}
+			}
+		}
+
+		// Call the postDispatch hook for the mapped type
+		if ( special.postDispatch ) {
+			special.postDispatch.call( this, event );
+		}
+
+		return event.result;
+	},
+
+	handlers: function( event, handlers ) {
+		var i, matches, sel, handleObj,
+			handlerQueue = [],
+			delegateCount = handlers.delegateCount,
+			cur = event.target;
+
+		// Support (at least): Chrome, IE9
+		// Find delegate handlers
+		// Black-hole SVG <use> instance trees (#13180)
+		//
+		// Support: Firefox<=42+
+		// Avoid non-left-click in FF but don't block IE radio events (#3861, gh-2343)
+		if ( delegateCount && cur.nodeType &&
+			( event.type !== "click" || isNaN( event.button ) || event.button < 1 ) ) {
+
+			for ( ; cur !== this; cur = cur.parentNode || this ) {
+
+				// Don't check non-elements (#13208)
+				// Don't process clicks on disabled elements (#6911, #8165, #11382, #11764)
+				if ( cur.nodeType === 1 && ( cur.disabled !== true || event.type !== "click" ) ) {
+					matches = [];
+					for ( i = 0; i < delegateCount; i++ ) {
+						handleObj = handlers[ i ];
+
+						// Don't conflict with Object.prototype properties (#13203)
+						sel = handleObj.selector + " ";
+
+						if ( matches[ sel ] === undefined ) {
+							matches[ sel ] = handleObj.needsContext ?
+								jQuery( sel, this ).index( cur ) > -1 :
+								jQuery.find( sel, this, null, [ cur ] ).length;
+						}
+						if ( matches[ sel ] ) {
+							matches.push( handleObj );
+						}
+					}
+					if ( matches.length ) {
+						handlerQueue.push( { elem: cur, handlers: matches } );
+					}
+				}
+			}
+		}
+
+		// Add the remaining (directly-bound) handlers
+		if ( delegateCount < handlers.length ) {
+			handlerQueue.push( { elem: this, handlers: handlers.slice( delegateCount ) } );
+		}
+
+		return handlerQueue;
+	},
+
+	// Includes some event props shared by KeyEvent and MouseEvent
+	props: ( "altKey bubbles cancelable ctrlKey currentTarget detail eventPhase " +
+		"metaKey relatedTarget shiftKey target timeStamp view which" ).split( " " ),
+
+	fixHooks: {},
+
+	keyHooks: {
+		props: "char charCode key keyCode".split( " " ),
+		filter: function( event, original ) {
+
+			// Add which for key events
+			if ( event.which == null ) {
+				event.which = original.charCode != null ? original.charCode : original.keyCode;
+			}
+
+			return event;
+		}
+	},
+
+	mouseHooks: {
+		props: ( "button buttons clientX clientY offsetX offsetY pageX pageY " +
+			"screenX screenY toElement" ).split( " " ),
+		filter: function( event, original ) {
+			var eventDoc, doc, body,
+				button = original.button;
+
+			// Calculate pageX/Y if missing and clientX/Y available
+			if ( event.pageX == null && original.clientX != null ) {
+				eventDoc = event.target.ownerDocument || document;
+				doc = eventDoc.documentElement;
+				body = eventDoc.body;
+
+				event.pageX = original.clientX +
+					( doc && doc.scrollLeft || body && body.scrollLeft || 0 ) -
+					( doc && doc.clientLeft || body && body.clientLeft || 0 );
+				event.pageY = original.clientY +
+					( doc && doc.scrollTop  || body && body.scrollTop  || 0 ) -
+					( doc && doc.clientTop  || body && body.clientTop  || 0 );
+			}
+
+			// Add which for click: 1 === left; 2 === middle; 3 === right
+			// Note: button is not normalized, so don't use it
+			if ( !event.which && button !== undefined ) {
+				event.which = ( button & 1 ? 1 : ( button & 2 ? 3 : ( button & 4 ? 2 : 0 ) ) );
+			}
+
+			return event;
+		}
+	},
+
+	fix: function( event ) {
+		if ( event[ jQuery.expando ] ) {
+			return event;
+		}
+
+		// Create a writable copy of the event object and normalize some properties
+		var i, prop, copy,
+			type = event.type,
+			originalEvent = event,
+			fixHook = this.fixHooks[ type ];
+
+		if ( !fixHook ) {
+			this.fixHooks[ type ] = fixHook =
+				rmouseEvent.test( type ) ? this.mouseHooks :
+				rkeyEvent.test( type ) ? this.keyHooks :
+				{};
+		}
+		copy = fixHook.props ? this.props.concat( fixHook.props ) : this.props;
+
+		event = new jQuery.Event( originalEvent );
+
+		i = copy.length;
+		while ( i-- ) {
+			prop = copy[ i ];
+			event[ prop ] = originalEvent[ prop ];
+		}
+
+		// Support: Cordova 2.5 (WebKit) (#13255)
+		// All events should have a target; Cordova deviceready doesn't
+		if ( !event.target ) {
+			event.target = document;
+		}
+
+		// Support: Safari 6.0+, Chrome<28
+		// Target should not be a text node (#504, #13143)
+		if ( event.target.nodeType === 3 ) {
+			event.target = event.target.parentNode;
+		}
+
+		return fixHook.filter ? fixHook.filter( event, originalEvent ) : event;
+	},
+
+	special: {
+		load: {
+
+			// Prevent triggered image.load events from bubbling to window.load
+			noBubble: true
+		},
+		focus: {
+
+			// Fire native event if possible so blur/focus sequence is correct
+			trigger: function() {
+				if ( this !== safeActiveElement() && this.focus ) {
+					this.focus();
+					return false;
+				}
+			},
+			delegateType: "focusin"
+		},
+		blur: {
+			trigger: function() {
+				if ( this === safeActiveElement() && this.blur ) {
+					this.blur();
+					return false;
+				}
+			},
+			delegateType: "focusout"
+		},
+		click: {
+
+			// For checkbox, fire native event so checked state will be right
+			trigger: function() {
+				if ( this.type === "checkbox" && this.click && jQuery.nodeName( this, "input" ) ) {
+					this.click();
+					return false;
+				}
+			},
+
+			// For cross-browser consistency, don't fire native .click() on links
+			_default: function( event ) {
+				return jQuery.nodeName( event.target, "a" );
+			}
+		},
+
+		beforeunload: {
+			postDispatch: function( event ) {
+
+				// Support: Firefox 20+
+				// Firefox doesn't alert if the returnValue field is not set.
+				if ( event.result !== undefined && event.originalEvent ) {
+					event.originalEvent.returnValue = event.result;
+				}
+			}
+		}
+	}
+};
+
+jQuery.removeEvent = function( elem, type, handle ) {
+
+	// This "if" is needed for plain objects
+	if ( elem.removeEventListener ) {
+		elem.removeEventListener( type, handle );
+	}
+};
+
+jQuery.Event = function( src, props ) {
+
+	// Allow instantiation without the 'new' keyword
+	if ( !( this instanceof jQuery.Event ) ) {
+		return new jQuery.Event( src, props );
+	}
+
+	// Event object
+	if ( src && src.type ) {
+		this.originalEvent = src;
+		this.type = src.type;
+
+		// Events bubbling up the document may have been marked as prevented
+		// by a handler lower down the tree; reflect the correct value.
+		this.isDefaultPrevented = src.defaultPrevented ||
+				src.defaultPrevented === undefined &&
+
+				// Support: Android<4.0
+				src.returnValue === false ?
+			returnTrue :
+			returnFalse;
+
+	// Event type
+	} else {
+		this.type = src;
+	}
+
+	// Put explicitly provided properties onto the event object
+	if ( props ) {
+		jQuery.extend( this, props );
+	}
+
+	// Create a timestamp if incoming event doesn't have one
+	this.timeStamp = src && src.timeStamp || jQuery.now();
+
+	// Mark it as fixed
+	this[ jQuery.expando ] = true;
+};
+
+// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding
+// http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html
+jQuery.Event.prototype = {
+	constructor: jQuery.Event,
+	isDefaultPrevented: returnFalse,
+	isPropagationStopped: returnFalse,
+	isImmediatePropagationStopped: returnFalse,
+
+	preventDefault: function() {
+		var e = this.originalEvent;
+
+		this.isDefaultPrevented = returnTrue;
+
+		if ( e ) {
+			e.preventDefault();
+		}
+	},
+	stopPropagation: function() {
+		var e = this.originalEvent;
+
+		this.isPropagationStopped = returnTrue;
+
+		if ( e ) {
+			e.stopPropagation();
+		}
+	},
+	stopImmediatePropagation: function() {
+		var e = this.originalEvent;
+
+		this.isImmediatePropagationStopped = returnTrue;
+
+		if ( e ) {
+			e.stopImmediatePropagation();
+		}
+
+		this.stopPropagation();
+	}
+};
+
+// Create mouseenter/leave events using mouseover/out and event-time checks
+// so that event delegation works in jQuery.
+// Do the same for pointerenter/pointerleave and pointerover/pointerout
+//
+// Support: Safari 7 only
+// Safari sends mouseenter too often; see:
+// https://code.google.com/p/chromium/issues/detail?id=470258
+// for the description of the bug (it existed in older Chrome versions as well).
+jQuery.each( {
+	mouseenter: "mouseover",
+	mouseleave: "mouseout",
+	pointerenter: "pointerover",
+	pointerleave: "pointerout"
+}, function( orig, fix ) {
+	jQuery.event.special[ orig ] = {
+		delegateType: fix,
+		bindType: fix,
+
+		handle: function( event ) {
+			var ret,
+				target = this,
+				related = event.relatedTarget,
+				handleObj = event.handleObj;
+
+			// For mouseenter/leave call the handler if related is outside the target.
+			// NB: No relatedTarget if the mouse left/entered the browser window
+			if ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) {
+				event.type = handleObj.origType;
+				ret = handleObj.handler.apply( this, arguments );
+				event.type = fix;
+			}
+			return ret;
+		}
+	};
+} );
+
+jQuery.fn.extend( {
+	on: function( types, selector, data, fn ) {
+		return on( this, types, selector, data, fn );
+	},
+	one: function( types, selector, data, fn ) {
+		return on( this, types, selector, data, fn, 1 );
+	},
+	off: function( types, selector, fn ) {
+		var handleObj, type;
+		if ( types && types.preventDefault && types.handleObj ) {
+
+			// ( event )  dispatched jQuery.Event
+			handleObj = types.handleObj;
+			jQuery( types.delegateTarget ).off(
+				handleObj.namespace ?
+					handleObj.origType + "." + handleObj.namespace :
+					handleObj.origType,
+				handleObj.selector,
+				handleObj.handler
+			);
+			return this;
+		}
+		if ( typeof types === "object" ) {
+
+			// ( types-object [, selector] )
+			for ( type in types ) {
+				this.off( type, selector, types[ type ] );
+			}
+			return this;
+		}
+		if ( selector === false || typeof selector === "function" ) {
+
+			// ( types [, fn] )
+			fn = selector;
+			selector = undefined;
+		}
+		if ( fn === false ) {
+			fn = returnFalse;
+		}
+		return this.each( function() {
+			jQuery.event.remove( this, types, fn, selector );
+		} );
+	}
+} );
+
+
+var
+	rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:-]+)[^>]*)\/>/gi,
+
+	// Support: IE 10-11, Edge 10240+
+	// In IE/Edge using regex groups here causes severe slowdowns.
+	// See https://connect.microsoft.com/IE/feedback/details/1736512/
+	rnoInnerhtml = /<script|<style|<link/i,
+
+	// checked="checked" or checked
+	rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i,
+	rscriptTypeMasked = /^true\/(.*)/,
+	rcleanScript = /^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g;
+
+// Manipulating tables requires a tbody
+function manipulationTarget( elem, content ) {
+	return jQuery.nodeName( elem, "table" ) &&
+		jQuery.nodeName( content.nodeType !== 11 ? content : content.firstChild, "tr" ) ?
+
+		elem.getElementsByTagName( "tbody" )[ 0 ] ||
+			elem.appendChild( elem.ownerDocument.createElement( "tbody" ) ) :
+		elem;
+}
+
+// Replace/restore the type attribute of script elements for safe DOM manipulation
+function disableScript( elem ) {
+	elem.type = ( elem.getAttribute( "type" ) !== null ) + "/" + elem.type;
+	return elem;
+}
+function restoreScript( elem ) {
+	var match = rscriptTypeMasked.exec( elem.type );
+
+	if ( match ) {
+		elem.type = match[ 1 ];
+	} else {
+		elem.removeAttribute( "type" );
+	}
+
+	return elem;
+}
+
+function cloneCopyEvent( src, dest ) {
+	var i, l, type, pdataOld, pdataCur, udataOld, udataCur, events;
+
+	if ( dest.nodeType !== 1 ) {
+		return;
+	}
+
+	// 1. Copy private data: events, handlers, etc.
+	if ( dataPriv.hasData( src ) ) {
+		pdataOld = dataPriv.access( src );
+		pdataCur = dataPriv.set( dest, pdataOld );
+		events = pdataOld.events;
+
+		if ( events ) {
+			delete pdataCur.handle;
+			pdataCur.events = {};
+
+			for ( type in events ) {
+				for ( i = 0, l = events[ type ].length; i < l; i++ ) {
+					jQuery.event.add( dest, type, events[ type ][ i ] );
+				}
+			}
+		}
+	}
+
+	// 2. Copy user data
+	if ( dataUser.hasData( src ) ) {
+		udataOld = dataUser.access( src );
+		udataCur = jQuery.extend( {}, udataOld );
+
+		dataUser.set( dest, udataCur );
+	}
+}
+
+// Fix IE bugs, see support tests
+function fixInput( src, dest ) {
+	var nodeName = dest.nodeName.toLowerCase();
+
+	// Fails to persist the checked state of a cloned checkbox or radio button.
+	if ( nodeName === "input" && rcheckableType.test( src.type ) ) {
+		dest.checked = src.checked;
+
+	// Fails to return the selected option to the default selected state when cloning options
+	} else if ( nodeName === "input" || nodeName === "textarea" ) {
+		dest.defaultValue = src.defaultValue;
+	}
+}
+
+function domManip( collection, args, callback, ignored ) {
+
+	// Flatten any nested arrays
+	args = concat.apply( [], args );
+
+	var fragment, first, scripts, hasScripts, node, doc,
+		i = 0,
+		l = collection.length,
+		iNoClone = l - 1,
+		value = args[ 0 ],
+		isFunction = jQuery.isFunction( value );
+
+	// We can't cloneNode fragments that contain checked, in WebKit
+	if ( isFunction ||
+			( l > 1 && typeof value === "string" &&
+				!support.checkClone && rchecked.test( value ) ) ) {
+		return collection.each( function( index ) {
+			var self = collection.eq( index );
+			if ( isFunction ) {
+				args[ 0 ] = value.call( this, index, self.html() );
+			}
+			domManip( self, args, callback, ignored );
+		} );
+	}
+
+	if ( l ) {
+		fragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored );
+		first = fragment.firstChild;
+
+		if ( fragment.childNodes.length === 1 ) {
+			fragment = first;
+		}
+
+		// Require either new content or an interest in ignored elements to invoke the callback
+		if ( first || ignored ) {
+			scripts = jQuery.map( getAll( fragment, "script" ), disableScript );
+			hasScripts = scripts.length;
+
+			// Use the original fragment for the last item
+			// instead of the first because it can end up
+			// being emptied incorrectly in certain situations (#8070).
+			for ( ; i < l; i++ ) {
+				node = fragment;
+
+				if ( i !== iNoClone ) {
+					node = jQuery.clone( node, true, true );
+
+					// Keep references to cloned scripts for later restoration
+					if ( hasScripts ) {
+
+						// Support: Android<4.1, PhantomJS<2
+						// push.apply(_, arraylike) throws on ancient WebKit
+						jQuery.merge( scripts, getAll( node, "script" ) );
+					}
+				}
+
+				callback.call( collection[ i ], node, i );
+			}
+
+			if ( hasScripts ) {
+				doc = scripts[ scripts.length - 1 ].ownerDocument;
+
+				// Reenable scripts
+				jQuery.map( scripts, restoreScript );
+
+				// Evaluate executable scripts on first document insertion
+				for ( i = 0; i < hasScripts; i++ ) {
+					node = scripts[ i ];
+					if ( rscriptType.test( node.type || "" ) &&
+						!dataPriv.access( node, "globalEval" ) &&
+						jQuery.contains( doc, node ) ) {
+
+						if ( node.src ) {
+
+							// Optional AJAX dependency, but won't run scripts if not present
+							if ( jQuery._evalUrl ) {
+								jQuery._evalUrl( node.src );
+							}
+						} else {
+							jQuery.globalEval( node.textContent.replace( rcleanScript, "" ) );
+						}
+					}
+				}
+			}
+		}
+	}
+
+	return collection;
+}
+
+function remove( elem, selector, keepData ) {
+	var node,
+		nodes = selector ? jQuery.filter( selector, elem ) : elem,
+		i = 0;
+
+	for ( ; ( node = nodes[ i ] ) != null; i++ ) {
+		if ( !keepData && node.nodeType === 1 ) {
+			jQuery.cleanData( getAll( node ) );
+		}
+
+		if ( node.parentNode ) {
+			if ( keepData && jQuery.contains( node.ownerDocument, node ) ) {
+				setGlobalEval( getAll( node, "script" ) );
+			}
+			node.parentNode.removeChild( node );
+		}
+	}
+
+	return elem;
+}
+
+jQuery.extend( {
+	htmlPrefilter: function( html ) {
+		return html.replace( rxhtmlTag, "<$1></$2>" );
+	},
+
+	clone: function( elem, dataAndEvents, deepDataAndEvents ) {
+		var i, l, srcElements, destElements,
+			clone = elem.cloneNode( true ),
+			inPage = jQuery.contains( elem.ownerDocument, elem );
+
+		// Fix IE cloning issues
+		if ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) &&
+				!jQuery.isXMLDoc( elem ) ) {
+
+			// We eschew Sizzle here for performance reasons: http://jsperf.com/getall-vs-sizzle/2
+			destElements = getAll( clone );
+			srcElements = getAll( elem );
+
+			for ( i = 0, l = srcElements.length; i < l; i++ ) {
+				fixInput( srcElements[ i ], destElements[ i ] );
+			}
+		}
+
+		// Copy the events from the original to the clone
+		if ( dataAndEvents ) {
+			if ( deepDataAndEvents ) {
+				srcElements = srcElements || getAll( elem );
+				destElements = destElements || getAll( clone );
+
+				for ( i = 0, l = srcElements.length; i < l; i++ ) {
+					cloneCopyEvent( srcElements[ i ], destElements[ i ] );
+				}
+			} else {
+				cloneCopyEvent( elem, clone );
+			}
+		}
+
+		// Preserve script evaluation history
+		destElements = getAll( clone, "script" );
+		if ( destElements.length > 0 ) {
+			setGlobalEval( destElements, !inPage && getAll( elem, "script" ) );
+		}
+
+		// Return the cloned set
+		return clone;
+	},
+
+	cleanData: function( elems ) {
+		var data, elem, type,
+			special = jQuery.event.special,
+			i = 0;
+
+		for ( ; ( elem = elems[ i ] ) !== undefined; i++ ) {
+			if ( acceptData( elem ) ) {
+				if ( ( data = elem[ dataPriv.expando ] ) ) {
+					if ( data.events ) {
+						for ( type in data.events ) {
+							if ( special[ type ] ) {
+								jQuery.event.remove( elem, type );
+
+							// This is a shortcut to avoid jQuery.event.remove's overhead
+							} else {
+								jQuery.removeEvent( elem, type, data.handle );
+							}
+						}
+					}
+
+					// Support: Chrome <= 35-45+
+					// Assign undefined instead of using delete, see Data#remove
+					elem[ dataPriv.expando ] = undefined;
+				}
+				if ( elem[ dataUser.expando ] ) {
+
+					// Support: Chrome <= 35-45+
+					// Assign undefined instead of using delete, see Data#remove
+					elem[ dataUser.expando ] = undefined;
+				}
+			}
+		}
+	}
+} );
+
+jQuery.fn.extend( {
+
+	// Keep domManip exposed until 3.0 (gh-2225)
+	domManip: domManip,
+
+	detach: function( selector ) {
+		return remove( this, selector, true );
+	},
+
+	remove: function( selector ) {
+		return remove( this, selector );
+	},
+
+	text: function( value ) {
+		return access( this, function( value ) {
+			return value === undefined ?
+				jQuery.text( this ) :
+				this.empty().each( function() {
+					if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
+						this.textContent = value;
+					}
+				} );
+		}, null, value, arguments.length );
+	},
+
+	append: function() {
+		return domManip( this, arguments, function( elem ) {
+			if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
+				var target = manipulationTarget( this, elem );
+				target.appendChild( elem );
+			}
+		} );
+	},
+
+	prepend: function() {
+		return domManip( this, arguments, function( elem ) {
+			if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
+				var target = manipulationTarget( this, elem );
+				target.insertBefore( elem, target.firstChild );
+			}
+		} );
+	},
+
+	before: function() {
+		return domManip( this, arguments, function( elem ) {
+			if ( this.parentNode ) {
+				this.parentNode.insertBefore( elem, this );
+			}
+		} );
+	},
+
+	after: function() {
+		return domManip( this, arguments, function( elem ) {
+			if ( this.parentNode ) {
+				this.parentNode.insertBefore( elem, this.nextSibling );
+			}
+		} );
+	},
+
+	empty: function() {
+		var elem,
+			i = 0;
+
+		for ( ; ( elem = this[ i ] ) != null; i++ ) {
+			if ( elem.nodeType === 1 ) {
+
+				// Prevent memory leaks
+				jQuery.cleanData( getAll( elem, false ) );
+
+				// Remove any remaining nodes
+				elem.textContent = "";
+			}
+		}
+
+		return this;
+	},
+
+	clone: function( dataAndEvents, deepDataAndEvents ) {
+		dataAndEvents = dataAndEvents == null ? false : dataAndEvents;
+		deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;
+
+		return this.map( function() {
+			return jQuery.clone( this, dataAndEvents, deepDataAndEvents );
+		} );
+	},
+
+	html: function( value ) {
+		return access( this, function( value ) {
+			var elem = this[ 0 ] || {},
+				i = 0,
+				l = this.length;
+
+			if ( value === undefined && elem.nodeType === 1 ) {
+				return elem.innerHTML;
+			}
+
+			// See if we can take a shortcut and just use innerHTML
+			if ( typeof value === "string" && !rnoInnerhtml.test( value ) &&
+				!wrapMap[ ( rtagName.exec( value ) || [ "", "" ] )[ 1 ].toLowerCase() ] ) {
+
+				value = jQuery.htmlPrefilter( value );
+
+				try {
+					for ( ; i < l; i++ ) {
+						elem = this[ i ] || {};
+
+						// Remove element nodes and prevent memory leaks
+						if ( elem.nodeType === 1 ) {
+							jQuery.cleanData( getAll( elem, false ) );
+							elem.innerHTML = value;
+						}
+					}
+
+					elem = 0;
+
+				// If using innerHTML throws an exception, use the fallback method
+				} catch ( e ) {}
+			}
+
+			if ( elem ) {
+				this.empty().append( value );
+			}
+		}, null, value, arguments.length );
+	},
+
+	replaceWith: function() {
+		var ignored = [];
+
+		// Make the changes, replacing each non-ignored context element with the new content
+		return domManip( this, arguments, function( elem ) {
+			var parent = this.parentNode;
+
+			if ( jQuery.inArray( this, ignored ) < 0 ) {
+				jQuery.cleanData( getAll( this ) );
+				if ( parent ) {
+					parent.replaceChild( elem, this );
+				}
+			}
+
+		// Force callback invocation
+		}, ignored );
+	}
+} );
+
+jQuery.each( {
+	appendTo: "append",
+	prependTo: "prepend",
+	insertBefore: "before",
+	insertAfter: "after",
+	replaceAll: "replaceWith"
+}, function( name, original ) {
+	jQuery.fn[ name ] = function( selector ) {
+		var elems,
+			ret = [],
+			insert = jQuery( selector ),
+			last = insert.length - 1,
+			i = 0;
+
+		for ( ; i <= last; i++ ) {
+			elems = i === last ? this : this.clone( true );
+			jQuery( insert[ i ] )[ original ]( elems );
+
+			// Support: QtWebKit
+			// .get() because push.apply(_, arraylike) throws
+			push.apply( ret, elems.get() );
+		}
+
+		return this.pushStack( ret );
+	};
+} );
+
+
+var iframe,
+	elemdisplay = {
+
+		// Support: Firefox
+		// We have to pre-define these values for FF (#10227)
+		HTML: "block",
+		BODY: "block"
+	};
+
+/**
+ * Retrieve the actual display of a element
+ * @param {String} name nodeName of the element
+ * @param {Object} doc Document object
+ */
+
+// Called only from within defaultDisplay
+function actualDisplay( name, doc ) {
+	var elem = jQuery( doc.createElement( name ) ).appendTo( doc.body ),
+
+		display = jQuery.css( elem[ 0 ], "display" );
+
+	// We don't have any data stored on the element,
+	// so use "detach" method as fast way to get rid of the element
+	elem.detach();
+
+	return display;
+}
+
+/**
+ * Try to determine the default display value of an element
+ * @param {String} nodeName
+ */
+function defaultDisplay( nodeName ) {
+	var doc = document,
+		display = elemdisplay[ nodeName ];
+
+	if ( !display ) {
+		display = actualDisplay( nodeName, doc );
+
+		// If the simple way fails, read from inside an iframe
+		if ( display === "none" || !display ) {
+
+			// Use the already-created iframe if possible
+			iframe = ( iframe || jQuery( "<iframe frameborder='0' width='0' height='0'/>" ) )
+				.appendTo( doc.documentElement );
+
+			// Always write a new HTML skeleton so Webkit and Firefox don't choke on reuse
+			doc = iframe[ 0 ].contentDocument;
+
+			// Support: IE
+			doc.write();
+			doc.close();
+
+			display = actualDisplay( nodeName, doc );
+			iframe.detach();
+		}
+
+		// Store the correct default display
+		elemdisplay[ nodeName ] = display;
+	}
+
+	return display;
+}
+var rmargin = ( /^margin/ );
+
+var rnumnonpx = new RegExp( "^(" + pnum + ")(?!px)[a-z%]+$", "i" );
+
+var getStyles = function( elem ) {
+
+		// Support: IE<=11+, Firefox<=30+ (#15098, #14150)
+		// IE throws on elements created in popups
+		// FF meanwhile throws on frame elements through "defaultView.getComputedStyle"
+		var view = elem.ownerDocument.defaultView;
+
+		if ( !view || !view.opener ) {
+			view = window;
+		}
+
+		return view.getComputedStyle( elem );
+	};
+
+var swap = function( elem, options, callback, args ) {
+	var ret, name,
+		old = {};
+
+	// Remember the old values, and insert the new ones
+	for ( name in options ) {
+		old[ name ] = elem.style[ name ];
+		elem.style[ name ] = options[ name ];
+	}
+
+	ret = callback.apply( elem, args || [] );
+
+	// Revert the old values
+	for ( name in options ) {
+		elem.style[ name ] = old[ name ];
+	}
+
+	return ret;
+};
+
+
+var documentElement = document.documentElement;
+
+
+
+( function() {
+	var pixelPositionVal, boxSizingReliableVal, pixelMarginRightVal, reliableMarginLeftVal,
+		container = document.createElement( "div" ),
+		div = document.createElement( "div" );
+
+	// Finish early in limited (non-browser) environments
+	if ( !div.style ) {
+		return;
+	}
+
+	// Support: IE9-11+
+	// Style of cloned element affects source element cloned (#8908)
+	div.style.backgroundClip = "content-box";
+	div.cloneNode( true ).style.backgroundClip = "";
+	support.clearCloneStyle = div.style.backgroundClip === "content-box";
+
+	container.style.cssText = "border:0;width:8px;height:0;top:0;left:-9999px;" +
+		"padding:0;margin-top:1px;position:absolute";
+	container.appendChild( div );
+
+	// Executing both pixelPosition & boxSizingReliable tests require only one layout
+	// so they're executed at the same time to save the second computation.
+	function computeStyleTests() {
+		div.style.cssText =
+
+			// Support: Firefox<29, Android 2.3
+			// Vendor-prefix box-sizing
+			"-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;" +
+			"position:relative;display:block;" +
+			"margin:auto;border:1px;padding:1px;" +
+			"top:1%;width:50%";
+		div.innerHTML = "";
+		documentElement.appendChild( container );
+
+		var divStyle = window.getComputedStyle( div );
+		pixelPositionVal = divStyle.top !== "1%";
+		reliableMarginLeftVal = divStyle.marginLeft === "2px";
+		boxSizingReliableVal = divStyle.width === "4px";
+
+		// Support: Android 4.0 - 4.3 only
+		// Some styles come back with percentage values, even though they shouldn't
+		div.style.marginRight = "50%";
+		pixelMarginRightVal = divStyle.marginRight === "4px";
+
+		documentElement.removeChild( container );
+	}
+
+	jQuery.extend( support, {
+		pixelPosition: function() {
+
+			// This test is executed only once but we still do memoizing
+			// since we can use the boxSizingReliable pre-computing.
+			// No need to check if the test was already performed, though.
+			computeStyleTests();
+			return pixelPositionVal;
+		},
+		boxSizingReliable: function() {
+			if ( boxSizingReliableVal == null ) {
+				computeStyleTests();
+			}
+			return boxSizingReliableVal;
+		},
+		pixelMarginRight: function() {
+
+			// Support: Android 4.0-4.3
+			// We're checking for boxSizingReliableVal here instead of pixelMarginRightVal
+			// since that compresses better and they're computed together anyway.
+			if ( boxSizingReliableVal == null ) {
+				computeStyleTests();
+			}
+			return pixelMarginRightVal;
+		},
+		reliableMarginLeft: function() {
+
+			// Support: IE <=8 only, Android 4.0 - 4.3 only, Firefox <=3 - 37
+			if ( boxSizingReliableVal == null ) {
+				computeStyleTests();
+			}
+			return reliableMarginLeftVal;
+		},
+		reliableMarginRight: function() {
+
+			// Support: Android 2.3
+			// Check if div with explicit width and no margin-right incorrectly
+			// gets computed margin-right based on width of container. (#3333)
+			// WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right
+			// This support function is only executed once so no memoizing is needed.
+			var ret,
+				marginDiv = div.appendChild( document.createElement( "div" ) );
+
+			// Reset CSS: box-sizing; display; margin; border; padding
+			marginDiv.style.cssText = div.style.cssText =
+
+				// Support: Android 2.3
+				// Vendor-prefix box-sizing
+				"-webkit-box-sizing:content-box;box-sizing:content-box;" +
+				"display:block;margin:0;border:0;padding:0";
+			marginDiv.style.marginRight = marginDiv.style.width = "0";
+			div.style.width = "1px";
+			documentElement.appendChild( container );
+
+			ret = !parseFloat( window.getComputedStyle( marginDiv ).marginRight );
+
+			documentElement.removeChild( container );
+			div.removeChild( marginDiv );
+
+			return ret;
+		}
+	} );
+} )();
+
+
+function curCSS( elem, name, computed ) {
+	var width, minWidth, maxWidth, ret,
+		style = elem.style;
+
+	computed = computed || getStyles( elem );
+	ret = computed ? computed.getPropertyValue( name ) || computed[ name ] : undefined;
+
+	// Support: Opera 12.1x only
+	// Fall back to style even without computed
+	// computed is undefined for elems on document fragments
+	if ( ( ret === "" || ret === undefined ) && !jQuery.contains( elem.ownerDocument, elem ) ) {
+		ret = jQuery.style( elem, name );
+	}
+
+	// Support: IE9
+	// getPropertyValue is only needed for .css('filter') (#12537)
+	if ( computed ) {
+
+		// A tribute to the "awesome hack by Dean Edwards"
+		// Android Browser returns percentage for some values,
+		// but width seems to be reliably pixels.
+		// This is against the CSSOM draft spec:
+		// http://dev.w3.org/csswg/cssom/#resolved-values
+		if ( !support.pixelMarginRight() && rnumnonpx.test( ret ) && rmargin.test( name ) ) {
+
+			// Remember the original values
+			width = style.width;
+			minWidth = style.minWidth;
+			maxWidth = style.maxWidth;
+
+			// Put in the new values to get a computed value out
+			style.minWidth = style.maxWidth = style.width = ret;
+			ret = computed.width;
+
+			// Revert the changed values
+			style.width = width;
+			style.minWidth = minWidth;
+			style.maxWidth = maxWidth;
+		}
+	}
+
+	return ret !== undefined ?
+
+		// Support: IE9-11+
+		// IE returns zIndex value as an integer.
+		ret + "" :
+		ret;
+}
+
+
+function addGetHookIf( conditionFn, hookFn ) {
+
+	// Define the hook, we'll check on the first run if it's really needed.
+	return {
+		get: function() {
+			if ( conditionFn() ) {
+
+				// Hook not needed (or it's not possible to use it due
+				// to missing dependency), remove it.
+				delete this.get;
+				return;
+			}
+
+			// Hook needed; redefine it so that the support test is not executed again.
+			return ( this.get = hookFn ).apply( this, arguments );
+		}
+	};
+}
+
+
+var
+
+	// Swappable if display is none or starts with table
+	// except "table", "table-cell", or "table-caption"
+	// See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display
+	rdisplayswap = /^(none|table(?!-c[ea]).+)/,
+
+	cssShow = { position: "absolute", visibility: "hidden", display: "block" },
+	cssNormalTransform = {
+		letterSpacing: "0",
+		fontWeight: "400"
+	},
+
+	cssPrefixes = [ "Webkit", "O", "Moz", "ms" ],
+	emptyStyle = document.createElement( "div" ).style;
+
+// Return a css property mapped to a potentially vendor prefixed property
+function vendorPropName( name ) {
+
+	// Shortcut for names that are not vendor prefixed
+	if ( name in emptyStyle ) {
+		return name;
+	}
+
+	// Check for vendor prefixed names
+	var capName = name[ 0 ].toUpperCase() + name.slice( 1 ),
+		i = cssPrefixes.length;
+
+	while ( i-- ) {
+		name = cssPrefixes[ i ] + capName;
+		if ( name in emptyStyle ) {
+			return name;
+		}
+	}
+}
+
+function setPositiveNumber( elem, value, subtract ) {
+
+	// Any relative (+/-) values have already been
+	// normalized at this point
+	var matches = rcssNum.exec( value );
+	return matches ?
+
+		// Guard against undefined "subtract", e.g., when used as in cssHooks
+		Math.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || "px" ) :
+		value;
+}
+
+function augmentWidthOrHeight( elem, name, extra, isBorderBox, styles ) {
+	var i = extra === ( isBorderBox ? "border" : "content" ) ?
+
+		// If we already have the right measurement, avoid augmentation
+		4 :
+
+		// Otherwise initialize for horizontal or vertical properties
+		name === "width" ? 1 : 0,
+
+		val = 0;
+
+	for ( ; i < 4; i += 2 ) {
+
+		// Both box models exclude margin, so add it if we want it
+		if ( extra === "margin" ) {
+			val += jQuery.css( elem, extra + cssExpand[ i ], true, styles );
+		}
+
+		if ( isBorderBox ) {
+
+			// border-box includes padding, so remove it if we want content
+			if ( extra === "content" ) {
+				val -= jQuery.css( elem, "padding" + cssExpand[ i ], true, styles );
+			}
+
+			// At this point, extra isn't border nor margin, so remove border
+			if ( extra !== "margin" ) {
+				val -= jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles );
+			}
+		} else {
+
+			// At this point, extra isn't content, so add padding
+			val += jQuery.css( elem, "padding" + cssExpand[ i ], true, styles );
+
+			// At this point, extra isn't content nor padding, so add border
+			if ( extra !== "padding" ) {
+				val += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles );
+			}
+		}
+	}
+
+	return val;
+}
+
+function getWidthOrHeight( elem, name, extra ) {
+
+	// Start with offset property, which is equivalent to the border-box value
+	var valueIsBorderBox = true,
+		val = name === "width" ? elem.offsetWidth : elem.offsetHeight,
+		styles = getStyles( elem ),
+		isBorderBox = jQuery.css( elem, "boxSizing", false, styles ) === "border-box";
+
+	// Support: IE11 only
+	// In IE 11 fullscreen elements inside of an iframe have
+	// 100x too small dimensions (gh-1764).
+	if ( document.msFullscreenElement && window.top !== window ) {
+
+		// Support: IE11 only
+		// Running getBoundingClientRect on a disconnected node
+		// in IE throws an error.
+		if ( elem.getClientRects().length ) {
+			val = Math.round( elem.getBoundingClientRect()[ name ] * 100 );
+		}
+	}
+
+	// Some non-html elements return undefined for offsetWidth, so check for null/undefined
+	// svg - https://bugzilla.mozilla.org/show_bug.cgi?id=649285
+	// MathML - https://bugzilla.mozilla.org/show_bug.cgi?id=491668
+	if ( val <= 0 || val == null ) {
+
+		// Fall back to computed then uncomputed css if necessary
+		val = curCSS( elem, name, styles );
+		if ( val < 0 || val == null ) {
+			val = elem.style[ name ];
+		}
+
+		// Computed unit is not pixels. Stop here and return.
+		if ( rnumnonpx.test( val ) ) {
+			return val;
+		}
+
+		// Check for style in case a browser which returns unreliable values
+		// for getComputedStyle silently falls back to the reliable elem.style
+		valueIsBorderBox = isBorderBox &&
+			( support.boxSizingReliable() || val === elem.style[ name ] );
+
+		// Normalize "", auto, and prepare for extra
+		val = parseFloat( val ) || 0;
+	}
+
+	// Use the active box-sizing model to add/subtract irrelevant styles
+	return ( val +
+		augmentWidthOrHeight(
+			elem,
+			name,
+			extra || ( isBorderBox ? "border" : "content" ),
+			valueIsBorderBox,
+			styles
+		)
+	) + "px";
+}
+
+function showHide( elements, show ) {
+	var display, elem, hidden,
+		values = [],
+		index = 0,
+		length = elements.length;
+
+	for ( ; index < length; index++ ) {
+		elem = elements[ index ];
+		if ( !elem.style ) {
+			continue;
+		}
+
+		values[ index ] = dataPriv.get( elem, "olddisplay" );
+		display = elem.style.display;
+		if ( show ) {
+
+			// Reset the inline display of this element to learn if it is
+			// being hidden by cascaded rules or not
+			if ( !values[ index ] && display === "none" ) {
+				elem.style.display = "";
+			}
+
+			// Set elements which have been overridden with display: none
+			// in a stylesheet to whatever the default browser style is
+			// for such an element
+			if ( elem.style.display === "" && isHidden( elem ) ) {
+				values[ index ] = dataPriv.access(
+					elem,
+					"olddisplay",
+					defaultDisplay( elem.nodeName )
+				);
+			}
+		} else {
+			hidden = isHidden( elem );
+
+			if ( display !== "none" || !hidden ) {
+				dataPriv.set(
+					elem,
+					"olddisplay",
+					hidden ? display : jQuery.css( elem, "display" )
+				);
+			}
+		}
+	}
+
+	// Set the display of most of the elements in a second loop
+	// to avoid the constant reflow
+	for ( index = 0; index < length; index++ ) {
+		elem = elements[ index ];
+		if ( !elem.style ) {
+			continue;
+		}
+		if ( !show || elem.style.display === "none" || elem.style.display === "" ) {
+			elem.style.display = show ? values[ index ] || "" : "none";
+		}
+	}
+
+	return elements;
+}
+
+jQuery.extend( {
+
+	// Add in style property hooks for overriding the default
+	// behavior of getting and setting a style property
+	cssHooks: {
+		opacity: {
+			get: function( elem, computed ) {
+				if ( computed ) {
+
+					// We should always get a number back from opacity
+					var ret = curCSS( elem, "opacity" );
+					return ret === "" ? "1" : ret;
+				}
+			}
+		}
+	},
+
+	// Don't automatically add "px" to these possibly-unitless properties
+	cssNumber: {
+		"animationIterationCount": true,
+		"columnCount": true,
+		"fillOpacity": true,
+		"flexGrow": true,
+		"flexShrink": true,
+		"fontWeight": true,
+		"lineHeight": true,
+		"opacity": true,
+		"order": true,
+		"orphans": true,
+		"widows": true,
+		"zIndex": true,
+		"zoom": true
+	},
+
+	// Add in properties whose names you wish to fix before
+	// setting or getting the value
+	cssProps: {
+		"float": "cssFloat"
+	},
+
+	// Get and set the style property on a DOM Node
+	style: function( elem, name, value, extra ) {
+
+		// Don't set styles on text and comment nodes
+		if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {
+			return;
+		}
+
+		// Make sure that we're working with the right name
+		var ret, type, hooks,
+			origName = jQuery.camelCase( name ),
+			style = elem.style;
+
+		name = jQuery.cssProps[ origName ] ||
+			( jQuery.cssProps[ origName ] = vendorPropName( origName ) || origName );
+
+		// Gets hook for the prefixed version, then unprefixed version
+		hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];
+
+		// Check if we're setting a value
+		if ( value !== undefined ) {
+			type = typeof value;
+
+			// Convert "+=" or "-=" to relative numbers (#7345)
+			if ( type === "string" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) {
+				value = adjustCSS( elem, name, ret );
+
+				// Fixes bug #9237
+				type = "number";
+			}
+
+			// Make sure that null and NaN values aren't set (#7116)
+			if ( value == null || value !== value ) {
+				return;
+			}
+
+			// If a number was passed in, add the unit (except for certain CSS properties)
+			if ( type === "number" ) {
+				value += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? "" : "px" );
+			}
+
+			// Support: IE9-11+
+			// background-* props affect original clone's values
+			if ( !support.clearCloneStyle && value === "" && name.indexOf( "background" ) === 0 ) {
+				style[ name ] = "inherit";
+			}
+
+			// If a hook was provided, use that value, otherwise just set the specified value
+			if ( !hooks || !( "set" in hooks ) ||
+				( value = hooks.set( elem, value, extra ) ) !== undefined ) {
+
+				style[ name ] = value;
+			}
+
+		} else {
+
+			// If a hook was provided get the non-computed value from there
+			if ( hooks && "get" in hooks &&
+				( ret = hooks.get( elem, false, extra ) ) !== undefined ) {
+
+				return ret;
+			}
+
+			// Otherwise just get the value from the style object
+			return style[ name ];
+		}
+	},
+
+	css: function( elem, name, extra, styles ) {
+		var val, num, hooks,
+			origName = jQuery.camelCase( name );
+
+		// Make sure that we're working with the right name
+		name = jQuery.cssProps[ origName ] ||
+			( jQuery.cssProps[ origName ] = vendorPropName( origName ) || origName );
+
+		// Try prefixed name followed by the unprefixed name
+		hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];
+
+		// If a hook was provided get the computed value from there
+		if ( hooks && "get" in hooks ) {
+			val = hooks.get( elem, true, extra );
+		}
+
+		// Otherwise, if a way to get the computed value exists, use that
+		if ( val === undefined ) {
+			val = curCSS( elem, name, styles );
+		}
+
+		// Convert "normal" to computed value
+		if ( val === "normal" && name in cssNormalTransform ) {
+			val = cssNormalTransform[ name ];
+		}
+
+		// Make numeric if forced or a qualifier was provided and val looks numeric
+		if ( extra === "" || extra ) {
+			num = parseFloat( val );
+			return extra === true || isFinite( num ) ? num || 0 : val;
+		}
+		return val;
+	}
+} );
+
+jQuery.each( [ "height", "width" ], function( i, name ) {
+	jQuery.cssHooks[ name ] = {
+		get: function( elem, computed, extra ) {
+			if ( computed ) {
+
+				// Certain elements can have dimension info if we invisibly show them
+				// but it must have a current display style that would benefit
+				return rdisplayswap.test( jQuery.css( elem, "display" ) ) &&
+					elem.offsetWidth === 0 ?
+						swap( elem, cssShow, function() {
+							return getWidthOrHeight( elem, name, extra );
+						} ) :
+						getWidthOrHeight( elem, name, extra );
+			}
+		},
+
+		set: function( elem, value, extra ) {
+			var matches,
+				styles = extra && getStyles( elem ),
+				subtract = extra && augmentWidthOrHeight(
+					elem,
+					name,
+					extra,
+					jQuery.css( elem, "boxSizing", false, styles ) === "border-box",
+					styles
+				);
+
+			// Convert to pixels if value adjustment is needed
+			if ( subtract && ( matches = rcssNum.exec( value ) ) &&
+				( matches[ 3 ] || "px" ) !== "px" ) {
+
+				elem.style[ name ] = value;
+				value = jQuery.css( elem, name );
+			}
+
+			return setPositiveNumber( elem, value, subtract );
+		}
+	};
+} );
+
+jQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft,
+	function( elem, computed ) {
+		if ( computed ) {
+			return ( parseFloat( curCSS( elem, "marginLeft" ) ) ||
+				elem.getBoundingClientRect().left -
+					swap( elem, { marginLeft: 0 }, function() {
+						return elem.getBoundingClientRect().left;
+					} )
+				) + "px";
+		}
+	}
+);
+
+// Support: Android 2.3
+jQuery.cssHooks.marginRight = addGetHookIf( support.reliableMarginRight,
+	function( elem, computed ) {
+		if ( computed ) {
+			return swap( elem, { "display": "inline-block" },
+				curCSS, [ elem, "marginRight" ] );
+		}
+	}
+);
+
+// These hooks are used by animate to expand properties
+jQuery.each( {
+	margin: "",
+	padding: "",
+	border: "Width"
+}, function( prefix, suffix ) {
+	jQuery.cssHooks[ prefix + suffix ] = {
+		expand: function( value ) {
+			var i = 0,
+				expanded = {},
+
+				// Assumes a single number if not a string
+				parts = typeof value === "string" ? value.split( " " ) : [ value ];
+
+			for ( ; i < 4; i++ ) {
+				expanded[ prefix + cssExpand[ i ] + suffix ] =
+					parts[ i ] || parts[ i - 2 ] || parts[ 0 ];
+			}
+
+			return expanded;
+		}
+	};
+
+	if ( !rmargin.test( prefix ) ) {
+		jQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber;
+	}
+} );
+
+jQuery.fn.extend( {
+	css: function( name, value ) {
+		return access( this, function( elem, name, value ) {
+			var styles, len,
+				map = {},
+				i = 0;
+
+			if ( jQuery.isArray( name ) ) {
+				styles = getStyles( elem );
+				len = name.length;
+
+				for ( ; i < len; i++ ) {
+					map[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles );
+				}
+
+				return map;
+			}
+
+			return value !== undefined ?
+				jQuery.style( elem, name, value ) :
+				jQuery.css( elem, name );
+		}, name, value, arguments.length > 1 );
+	},
+	show: function() {
+		return showHide( this, true );
+	},
+	hide: function() {
+		return showHide( this );
+	},
+	toggle: function( state ) {
+		if ( typeof state === "boolean" ) {
+			return state ? this.show() : this.hide();
+		}
+
+		return this.each( function() {
+			if ( isHidden( this ) ) {
+				jQuery( this ).show();
+			} else {
+				jQuery( this ).hide();
+			}
+		} );
+	}
+} );
+
+
+function Tween( elem, options, prop, end, easing ) {
+	return new Tween.prototype.init( elem, options, prop, end, easing );
+}
+jQuery.Tween = Tween;
+
+Tween.prototype = {
+	constructor: Tween,
+	init: function( elem, options, prop, end, easing, unit ) {
+		this.elem = elem;
+		this.prop = prop;
+		this.easing = easing || jQuery.easing._default;
+		this.options = options;
+		this.start = this.now = this.cur();
+		this.end = end;
+		this.unit = unit || ( jQuery.cssNumber[ prop ] ? "" : "px" );
+	},
+	cur: function() {
+		var hooks = Tween.propHooks[ this.prop ];
+
+		return hooks && hooks.get ?
+			hooks.get( this ) :
+			Tween.propHooks._default.get( this );
+	},
+	run: function( percent ) {
+		var eased,
+			hooks = Tween.propHooks[ this.prop ];
+
+		if ( this.options.duration ) {
+			this.pos = eased = jQuery.easing[ this.easing ](
+				percent, this.options.duration * percent, 0, 1, this.options.duration
+			);
+		} else {
+			this.pos = eased = percent;
+		}
+		this.now = ( this.end - this.start ) * eased + this.start;
+
+		if ( this.options.step ) {
+			this.options.step.call( this.elem, this.now, this );
+		}
+
+		if ( hooks && hooks.set ) {
+			hooks.set( this );
+		} else {
+			Tween.propHooks._default.set( this );
+		}
+		return this;
+	}
+};
+
+Tween.prototype.init.prototype = Tween.prototype;
+
+Tween.propHooks = {
+	_default: {
+		get: function( tween ) {
+			var result;
+
+			// Use a property on the element directly when it is not a DOM element,
+			// or when there is no matching style property that exists.
+			if ( tween.elem.nodeType !== 1 ||
+				tween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) {
+				return tween.elem[ tween.prop ];
+			}
+
+			// Passing an empty string as a 3rd parameter to .css will automatically
+			// attempt a parseFloat and fallback to a string if the parse fails.
+			// Simple values such as "10px" are parsed to Float;
+			// complex values such as "rotate(1rad)" are returned as-is.
+			result = jQuery.css( tween.elem, tween.prop, "" );
+
+			// Empty strings, null, undefined and "auto" are converted to 0.
+			return !result || result === "auto" ? 0 : result;
+		},
+		set: function( tween ) {
+
+			// Use step hook for back compat.
+			// Use cssHook if its there.
+			// Use .style if available and use plain properties where available.
+			if ( jQuery.fx.step[ tween.prop ] ) {
+				jQuery.fx.step[ tween.prop ]( tween );
+			} else if ( tween.elem.nodeType === 1 &&
+				( tween.elem.style[ jQuery.cssProps[ tween.prop ] ] != null ||
+					jQuery.cssHooks[ tween.prop ] ) ) {
+				jQuery.style( tween.elem, tween.prop, tween.now + tween.unit );
+			} else {
+				tween.elem[ tween.prop ] = tween.now;
+			}
+		}
+	}
+};
+
+// Support: IE9
+// Panic based approach to setting things on disconnected nodes
+Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = {
+	set: function( tween ) {
+		if ( tween.elem.nodeType && tween.elem.parentNode ) {
+			tween.elem[ tween.prop ] = tween.now;
+		}
+	}
+};
+
+jQuery.easing = {
+	linear: function( p ) {
+		return p;
+	},
+	swing: function( p ) {
+		return 0.5 - Math.cos( p * Math.PI ) / 2;
+	},
+	_default: "swing"
+};
+
+jQuery.fx = Tween.prototype.init;
+
+// Back Compat <1.8 extension point
+jQuery.fx.step = {};
+
+
+
+
+var
+	fxNow, timerId,
+	rfxtypes = /^(?:toggle|show|hide)$/,
+	rrun = /queueHooks$/;
+
+// Animations created synchronously will run synchronously
+function createFxNow() {
+	window.setTimeout( function() {
+		fxNow = undefined;
+	} );
+	return ( fxNow = jQuery.now() );
+}
+
+// Generate parameters to create a standard animation
+function genFx( type, includeWidth ) {
+	var which,
+		i = 0,
+		attrs = { height: type };
+
+	// If we include width, step value is 1 to do all cssExpand values,
+	// otherwise step value is 2 to skip over Left and Right
+	includeWidth = includeWidth ? 1 : 0;
+	for ( ; i < 4 ; i += 2 - includeWidth ) {
+		which = cssExpand[ i ];
+		attrs[ "margin" + which ] = attrs[ "padding" + which ] = type;
+	}
+
+	if ( includeWidth ) {
+		attrs.opacity = attrs.width = type;
+	}
+
+	return attrs;
+}
+
+function createTween( value, prop, animation ) {
+	var tween,
+		collection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ "*" ] ),
+		index = 0,
+		length = collection.length;
+	for ( ; index < length; index++ ) {
+		if ( ( tween = collection[ index ].call( animation, prop, value ) ) ) {
+
+			// We're done with this property
+			return tween;
+		}
+	}
+}
+
+function defaultPrefilter( elem, props, opts ) {
+	/* jshint validthis: true */
+	var prop, value, toggle, tween, hooks, oldfire, display, checkDisplay,
+		anim = this,
+		orig = {},
+		style = elem.style,
+		hidden = elem.nodeType && isHidden( elem ),
+		dataShow = dataPriv.get( elem, "fxshow" );
+
+	// Handle queue: false promises
+	if ( !opts.queue ) {
+		hooks = jQuery._queueHooks( elem, "fx" );
+		if ( hooks.unqueued == null ) {
+			hooks.unqueued = 0;
+			oldfire = hooks.empty.fire;
+			hooks.empty.fire = function() {
+				if ( !hooks.unqueued ) {
+					oldfire();
+				}
+			};
+		}
+		hooks.unqueued++;
+
+		anim.always( function() {
+
+			// Ensure the complete handler is called before this completes
+			anim.always( function() {
+				hooks.unqueued--;
+				if ( !jQuery.queue( elem, "fx" ).length ) {
+					hooks.empty.fire();
+				}
+			} );
+		} );
+	}
+
+	// Height/width overflow pass
+	if ( elem.nodeType === 1 && ( "height" in props || "width" in props ) ) {
+
+		// Make sure that nothing sneaks out
+		// Record all 3 overflow attributes because IE9-10 do not
+		// change the overflow attribute when overflowX and
+		// overflowY are set to the same value
+		opts.overflow = [ style.overflow, style.overflowX, style.overflowY ];
+
+		// Set display property to inline-block for height/width
+		// animations on inline elements that are having width/height animated
+		display = jQuery.css( elem, "display" );
+
+		// Test default display if display is currently "none"
+		checkDisplay = display === "none" ?
+			dataPriv.get( elem, "olddisplay" ) || defaultDisplay( elem.nodeName ) : display;
+
+		if ( checkDisplay === "inline" && jQuery.css( elem, "float" ) === "none" ) {
+			style.display = "inline-block";
+		}
+	}
+
+	if ( opts.overflow ) {
+		style.overflow = "hidden";
+		anim.always( function() {
+			style.overflow = opts.overflow[ 0 ];
+			style.overflowX = opts.overflow[ 1 ];
+			style.overflowY = opts.overflow[ 2 ];
+		} );
+	}
+
+	// show/hide pass
+	for ( prop in props ) {
+		value = props[ prop ];
+		if ( rfxtypes.exec( value ) ) {
+			delete props[ prop ];
+			toggle = toggle || value === "toggle";
+			if ( value === ( hidden ? "hide" : "show" ) ) {
+
+				// If there is dataShow left over from a stopped hide or show
+				// and we are going to proceed with show, we should pretend to be hidden
+				if ( value === "show" && dataShow && dataShow[ prop ] !== undefined ) {
+					hidden = true;
+				} else {
+					continue;
+				}
+			}
+			orig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop );
+
+		// Any non-fx value stops us from restoring the original display value
+		} else {
+			display = undefined;
+		}
+	}
+
+	if ( !jQuery.isEmptyObject( orig ) ) {
+		if ( dataShow ) {
+			if ( "hidden" in dataShow ) {
+				hidden = dataShow.hidden;
+			}
+		} else {
+			dataShow = dataPriv.access( elem, "fxshow", {} );
+		}
+
+		// Store state if its toggle - enables .stop().toggle() to "reverse"
+		if ( toggle ) {
+			dataShow.hidden = !hidden;
+		}
+		if ( hidden ) {
+			jQuery( elem ).show();
+		} else {
+			anim.done( function() {
+				jQuery( elem ).hide();
+			} );
+		}
+		anim.done( function() {
+			var prop;
+
+			dataPriv.remove( elem, "fxshow" );
+			for ( prop in orig ) {
+				jQuery.style( elem, prop, orig[ prop ] );
+			}
+		} );
+		for ( prop in orig ) {
+			tween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim );
+
+			if ( !( prop in dataShow ) ) {
+				dataShow[ prop ] = tween.start;
+				if ( hidden ) {
+					tween.end = tween.start;
+					tween.start = prop === "width" || prop === "height" ? 1 : 0;
+				}
+			}
+		}
+
+	// If this is a noop like .hide().hide(), restore an overwritten display value
+	} else if ( ( display === "none" ? defaultDisplay( elem.nodeName ) : display ) === "inline" ) {
+		style.display = display;
+	}
+}
+
+function propFilter( props, specialEasing ) {
+	var index, name, easing, value, hooks;
+
+	// camelCase, specialEasing and expand cssHook pass
+	for ( index in props ) {
+		name = jQuery.camelCase( index );
+		easing = specialEasing[ name ];
+		value = props[ index ];
+		if ( jQuery.isArray( value ) ) {
+			easing = value[ 1 ];
+			value = props[ index ] = value[ 0 ];
+		}
+
+		if ( index !== name ) {
+			props[ name ] = value;
+			delete props[ index ];
+		}
+
+		hooks = jQuery.cssHooks[ name ];
+		if ( hooks && "expand" in hooks ) {
+			value = hooks.expand( value );
+			delete props[ name ];
+
+			// Not quite $.extend, this won't overwrite existing keys.
+			// Reusing 'index' because we have the correct "name"
+			for ( index in value ) {
+				if ( !( index in props ) ) {
+					props[ index ] = value[ index ];
+					specialEasing[ index ] = easing;
+				}
+			}
+		} else {
+			specialEasing[ name ] = easing;
+		}
+	}
+}
+
+function Animation( elem, properties, options ) {
+	var result,
+		stopped,
+		index = 0,
+		length = Animation.prefilters.length,
+		deferred = jQuery.Deferred().always( function() {
+
+			// Don't match elem in the :animated selector
+			delete tick.elem;
+		} ),
+		tick = function() {
+			if ( stopped ) {
+				return false;
+			}
+			var currentTime = fxNow || createFxNow(),
+				remaining = Math.max( 0, animation.startTime + animation.duration - currentTime ),
+
+				// Support: Android 2.3
+				// Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (#12497)
+				temp = remaining / animation.duration || 0,
+				percent = 1 - temp,
+				index = 0,
+				length = animation.tweens.length;
+
+			for ( ; index < length ; index++ ) {
+				animation.tweens[ index ].run( percent );
+			}
+
+			deferred.notifyWith( elem, [ animation, percent, remaining ] );
+
+			if ( percent < 1 && length ) {
+				return remaining;
+			} else {
+				deferred.resolveWith( elem, [ animation ] );
+				return false;
+			}
+		},
+		animation = deferred.promise( {
+			elem: elem,
+			props: jQuery.extend( {}, properties ),
+			opts: jQuery.extend( true, {
+				specialEasing: {},
+				easing: jQuery.easing._default
+			}, options ),
+			originalProperties: properties,
+			originalOptions: options,
+			startTime: fxNow || createFxNow(),
+			duration: options.duration,
+			tweens: [],
+			createTween: function( prop, end ) {
+				var tween = jQuery.Tween( elem, animation.opts, prop, end,
+						animation.opts.specialEasing[ prop ] || animation.opts.easing );
+				animation.tweens.push( tween );
+				return tween;
+			},
+			stop: function( gotoEnd ) {
+				var index = 0,
+
+					// If we are going to the end, we want to run all the tweens
+					// otherwise we skip this part
+					length = gotoEnd ? animation.tweens.length : 0;
+				if ( stopped ) {
+					return this;
+				}
+				stopped = true;
+				for ( ; index < length ; index++ ) {
+					animation.tweens[ index ].run( 1 );
+				}
+
+				// Resolve when we played the last frame; otherwise, reject
+				if ( gotoEnd ) {
+					deferred.notifyWith( elem, [ animation, 1, 0 ] );
+					deferred.resolveWith( elem, [ animation, gotoEnd ] );
+				} else {
+					deferred.rejectWith( elem, [ animation, gotoEnd ] );
+				}
+				return this;
+			}
+		} ),
+		props = animation.props;
+
+	propFilter( props, animation.opts.specialEasing );
+
+	for ( ; index < length ; index++ ) {
+		result = Animation.prefilters[ index ].call( animation, elem, props, animation.opts );
+		if ( result ) {
+			if ( jQuery.isFunction( result.stop ) ) {
+				jQuery._queueHooks( animation.elem, animation.opts.queue ).stop =
+					jQuery.proxy( result.stop, result );
+			}
+			return result;
+		}
+	}
+
+	jQuery.map( props, createTween, animation );
+
+	if ( jQuery.isFunction( animation.opts.start ) ) {
+		animation.opts.start.call( elem, animation );
+	}
+
+	jQuery.fx.timer(
+		jQuery.extend( tick, {
+			elem: elem,
+			anim: animation,
+			queue: animation.opts.queue
+		} )
+	);
+
+	// attach callbacks from options
+	return animation.progress( animation.opts.progress )
+		.done( animation.opts.done, animation.opts.complete )
+		.fail( animation.opts.fail )
+		.always( animation.opts.always );
+}
+
+jQuery.Animation = jQuery.extend( Animation, {
+	tweeners: {
+		"*": [ function( prop, value ) {
+			var tween = this.createTween( prop, value );
+			adjustCSS( tween.elem, prop, rcssNum.exec( value ), tween );
+			return tween;
+		} ]
+	},
+
+	tweener: function( props, callback ) {
+		if ( jQuery.isFunction( props ) ) {
+			callback = props;
+			props = [ "*" ];
+		} else {
+			props = props.match( rnotwhite );
+		}
+
+		var prop,
+			index = 0,
+			length = props.length;
+
+		for ( ; index < length ; index++ ) {
+			prop = props[ index ];
+			Animation.tweeners[ prop ] = Animation.tweeners[ prop ] || [];
+			Animation.tweeners[ prop ].unshift( callback );
+		}
+	},
+
+	prefilters: [ defaultPrefilter ],
+
+	prefilter: function( callback, prepend ) {
+		if ( prepend ) {
+			Animation.prefilters.unshift( callback );
+		} else {
+			Animation.prefilters.push( callback );
+		}
+	}
+} );
+
+jQuery.speed = function( speed, easing, fn ) {
+	var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : {
+		complete: fn || !fn && easing ||
+			jQuery.isFunction( speed ) && speed,
+		duration: speed,
+		easing: fn && easing || easing && !jQuery.isFunction( easing ) && easing
+	};
+
+	opt.duration = jQuery.fx.off ? 0 : typeof opt.duration === "number" ?
+		opt.duration : opt.duration in jQuery.fx.speeds ?
+			jQuery.fx.speeds[ opt.duration ] : jQuery.fx.speeds._default;
+
+	// Normalize opt.queue - true/undefined/null -> "fx"
+	if ( opt.queue == null || opt.queue === true ) {
+		opt.queue = "fx";
+	}
+
+	// Queueing
+	opt.old = opt.complete;
+
+	opt.complete = function() {
+		if ( jQuery.isFunction( opt.old ) ) {
+			opt.old.call( this );
+		}
+
+		if ( opt.queue ) {
+			jQuery.dequeue( this, opt.queue );
+		}
+	};
+
+	return opt;
+};
+
+jQuery.fn.extend( {
+	fadeTo: function( speed, to, easing, callback ) {
+
+		// Show any hidden elements after setting opacity to 0
+		return this.filter( isHidden ).css( "opacity", 0 ).show()
+
+			// Animate to the value specified
+			.end().animate( { opacity: to }, speed, easing, callback );
+	},
+	animate: function( prop, speed, easing, callback ) {
+		var empty = jQuery.isEmptyObject( prop ),
+			optall = jQuery.speed( speed, easing, callback ),
+			doAnimation = function() {
+
+				// Operate on a copy of prop so per-property easing won't be lost
+				var anim = Animation( this, jQuery.extend( {}, prop ), optall );
+
+				// Empty animations, or finishing resolves immediately
+				if ( empty || dataPriv.get( this, "finish" ) ) {
+					anim.stop( true );
+				}
+			};
+			doAnimation.finish = doAnimation;
+
+		return empty || optall.queue === false ?
+			this.each( doAnimation ) :
+			this.queue( optall.queue, doAnimation );
+	},
+	stop: function( type, clearQueue, gotoEnd ) {
+		var stopQueue = function( hooks ) {
+			var stop = hooks.stop;
+			delete hooks.stop;
+			stop( gotoEnd );
+		};
+
+		if ( typeof type !== "string" ) {
+			gotoEnd = clearQueue;
+			clearQueue = type;
+			type = undefined;
+		}
+		if ( clearQueue && type !== false ) {
+			this.queue( type || "fx", [] );
+		}
+
+		return this.each( function() {
+			var dequeue = true,
+				index = type != null && type + "queueHooks",
+				timers = jQuery.timers,
+				data = dataPriv.get( this );
+
+			if ( index ) {
+				if ( data[ index ] && data[ index ].stop ) {
+					stopQueue( data[ index ] );
+				}
+			} else {
+				for ( index in data ) {
+					if ( data[ index ] && data[ index ].stop && rrun.test( index ) ) {
+						stopQueue( data[ index ] );
+					}
+				}
+			}
+
+			for ( index = timers.length; index--; ) {
+				if ( timers[ index ].elem === this &&
+					( type == null || timers[ index ].queue === type ) ) {
+
+					timers[ index ].anim.stop( gotoEnd );
+					dequeue = false;
+					timers.splice( index, 1 );
+				}
+			}
+
+			// Start the next in the queue if the last step wasn't forced.
+			// Timers currently will call their complete callbacks, which
+			// will dequeue but only if they were gotoEnd.
+			if ( dequeue || !gotoEnd ) {
+				jQuery.dequeue( this, type );
+			}
+		} );
+	},
+	finish: function( type ) {
+		if ( type !== false ) {
+			type = type || "fx";
+		}
+		return this.each( function() {
+			var index,
+				data = dataPriv.get( this ),
+				queue = data[ type + "queue" ],
+				hooks = data[ type + "queueHooks" ],
+				timers = jQuery.timers,
+				length = queue ? queue.length : 0;
+
+			// Enable finishing flag on private data
+			data.finish = true;
+
+			// Empty the queue first
+			jQuery.queue( this, type, [] );
+
+			if ( hooks && hooks.stop ) {
+				hooks.stop.call( this, true );
+			}
+
+			// Look for any active animations, and finish them
+			for ( index = timers.length; index--; ) {
+				if ( timers[ index ].elem === this && timers[ index ].queue === type ) {
+					timers[ index ].anim.stop( true );
+					timers.splice( index, 1 );
+				}
+			}
+
+			// Look for any animations in the old queue and finish them
+			for ( index = 0; index < length; index++ ) {
+				if ( queue[ index ] && queue[ index ].finish ) {
+					queue[ index ].finish.call( this );
+				}
+			}
+
+			// Turn off finishing flag
+			delete data.finish;
+		} );
+	}
+} );
+
+jQuery.each( [ "toggle", "show", "hide" ], function( i, name ) {
+	var cssFn = jQuery.fn[ name ];
+	jQuery.fn[ name ] = function( speed, easing, callback ) {
+		return speed == null || typeof speed === "boolean" ?
+			cssFn.apply( this, arguments ) :
+			this.animate( genFx( name, true ), speed, easing, callback );
+	};
+} );
+
+// Generate shortcuts for custom animations
+jQuery.each( {
+	slideDown: genFx( "show" ),
+	slideUp: genFx( "hide" ),
+	slideToggle: genFx( "toggle" ),
+	fadeIn: { opacity: "show" },
+	fadeOut: { opacity: "hide" },
+	fadeToggle: { opacity: "toggle" }
+}, function( name, props ) {
+	jQuery.fn[ name ] = function( speed, easing, callback ) {
+		return this.animate( props, speed, easing, callback );
+	};
+} );
+
+jQuery.timers = [];
+jQuery.fx.tick = function() {
+	var timer,
+		i = 0,
+		timers = jQuery.timers;
+
+	fxNow = jQuery.now();
+
+	for ( ; i < timers.length; i++ ) {
+		timer = timers[ i ];
+
+		// Checks the timer has not already been removed
+		if ( !timer() && timers[ i ] === timer ) {
+			timers.splice( i--, 1 );
+		}
+	}
+
+	if ( !timers.length ) {
+		jQuery.fx.stop();
+	}
+	fxNow = undefined;
+};
+
+jQuery.fx.timer = function( timer ) {
+	jQuery.timers.push( timer );
+	if ( timer() ) {
+		jQuery.fx.start();
+	} else {
+		jQuery.timers.pop();
+	}
+};
+
+jQuery.fx.interval = 13;
+jQuery.fx.start = function() {
+	if ( !timerId ) {
+		timerId = window.setInterval( jQuery.fx.tick, jQuery.fx.interval );
+	}
+};
+
+jQuery.fx.stop = function() {
+	window.clearInterval( timerId );
+
+	timerId = null;
+};
+
+jQuery.fx.speeds = {
+	slow: 600,
+	fast: 200,
+
+	// Default speed
+	_default: 400
+};
+
+
+// Based off of the plugin by Clint Helfers, with permission.
+// http://web.archive.org/web/20100324014747/http://blindsignals.com/index.php/2009/07/jquery-delay/
+jQuery.fn.delay = function( time, type ) {
+	time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;
+	type = type || "fx";
+
+	return this.queue( type, function( next, hooks ) {
+		var timeout = window.setTimeout( next, time );
+		hooks.stop = function() {
+			window.clearTimeout( timeout );
+		};
+	} );
+};
+
+
+( function() {
+	var input = document.createElement( "input" ),
+		select = document.createElement( "select" ),
+		opt = select.appendChild( document.createElement( "option" ) );
+
+	input.type = "checkbox";
+
+	// Support: iOS<=5.1, Android<=4.2+
+	// Default value for a checkbox should be "on"
+	support.checkOn = input.value !== "";
+
+	// Support: IE<=11+
+	// Must access selectedIndex to make default options select
+	support.optSelected = opt.selected;
+
+	// Support: Android<=2.3
+	// Options inside disabled selects are incorrectly marked as disabled
+	select.disabled = true;
+	support.optDisabled = !opt.disabled;
+
+	// Support: IE<=11+
+	// An input loses its value after becoming a radio
+	input = document.createElement( "input" );
+	input.value = "t";
+	input.type = "radio";
+	support.radioValue = input.value === "t";
+} )();
+
+
+var boolHook,
+	attrHandle = jQuery.expr.attrHandle;
+
+jQuery.fn.extend( {
+	attr: function( name, value ) {
+		return access( this, jQuery.attr, name, value, arguments.length > 1 );
+	},
+
+	removeAttr: function( name ) {
+		return this.each( function() {
+			jQuery.removeAttr( this, name );
+		} );
+	}
+} );
+
+jQuery.extend( {
+	attr: function( elem, name, value ) {
+		var ret, hooks,
+			nType = elem.nodeType;
+
+		// Don't get/set attributes on text, comment and attribute nodes
+		if ( nType === 3 || nType === 8 || nType === 2 ) {
+			return;
+		}
+
+		// Fallback to prop when attributes are not supported
+		if ( typeof elem.getAttribute === "undefined" ) {
+			return jQuery.prop( elem, name, value );
+		}
+
+		// All attributes are lowercase
+		// Grab necessary hook if one is defined
+		if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {
+			name = name.toLowerCase();
+			hooks = jQuery.attrHooks[ name ] ||
+				( jQuery.expr.match.bool.test( name ) ? boolHook : undefined );
+		}
+
+		if ( value !== undefined ) {
+			if ( value === null ) {
+				jQuery.removeAttr( elem, name );
+				return;
+			}
+
+			if ( hooks && "set" in hooks &&
+				( ret = hooks.set( elem, value, name ) ) !== undefined ) {
+				return ret;
+			}
+
+			elem.setAttribute( name, value + "" );
+			return value;
+		}
+
+		if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {
+			return ret;
+		}
+
+		ret = jQuery.find.attr( elem, name );
+
+		// Non-existent attributes return null, we normalize to undefined
+		return ret == null ? undefined : ret;
+	},
+
+	attrHooks: {
+		type: {
+			set: function( elem, value ) {
+				if ( !support.radioValue && value === "radio" &&
+					jQuery.nodeName( elem, "input" ) ) {
+					var val = elem.value;
+					elem.setAttribute( "type", value );
+					if ( val ) {
+						elem.value = val;
+					}
+					return value;
+				}
+			}
+		}
+	},
+
+	removeAttr: function( elem, value ) {
+		var name, propName,
+			i = 0,
+			attrNames = value && value.match( rnotwhite );
+
+		if ( attrNames && elem.nodeType === 1 ) {
+			while ( ( name = attrNames[ i++ ] ) ) {
+				propName = jQuery.propFix[ name ] || name;
+
+				// Boolean attributes get special treatment (#10870)
+				if ( jQuery.expr.match.bool.test( name ) ) {
+
+					// Set corresponding property to false
+					elem[ propName ] = false;
+				}
+
+				elem.removeAttribute( name );
+			}
+		}
+	}
+} );
+
+// Hooks for boolean attributes
+boolHook = {
+	set: function( elem, value, name ) {
+		if ( value === false ) {
+
+			// Remove boolean attributes when set to false
+			jQuery.removeAttr( elem, name );
+		} else {
+			elem.setAttribute( name, name );
+		}
+		return name;
+	}
+};
+jQuery.each( jQuery.expr.match.bool.source.match( /\w+/g ), function( i, name ) {
+	var getter = attrHandle[ name ] || jQuery.find.attr;
+
+	attrHandle[ name ] = function( elem, name, isXML ) {
+		var ret, handle;
+		if ( !isXML ) {
+
+			// Avoid an infinite loop by temporarily removing this function from the getter
+			handle = attrHandle[ name ];
+			attrHandle[ name ] = ret;
+			ret = getter( elem, name, isXML ) != null ?
+				name.toLowerCase() :
+				null;
+			attrHandle[ name ] = handle;
+		}
+		return ret;
+	};
+} );
+
+
+
+
+var rfocusable = /^(?:input|select|textarea|button)$/i,
+	rclickable = /^(?:a|area)$/i;
+
+jQuery.fn.extend( {
+	prop: function( name, value ) {
+		return access( this, jQuery.prop, name, value, arguments.length > 1 );
+	},
+
+	removeProp: function( name ) {
+		return this.each( function() {
+			delete this[ jQuery.propFix[ name ] || name ];
+		} );
+	}
+} );
+
+jQuery.extend( {
+	prop: function( elem, name, value ) {
+		var ret, hooks,
+			nType = elem.nodeType;
+
+		// Don't get/set properties on text, comment and attribute nodes
+		if ( nType === 3 || nType === 8 || nType === 2 ) {
+			return;
+		}
+
+		if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {
+
+			// Fix name and attach hooks
+			name = jQuery.propFix[ name ] || name;
+			hooks = jQuery.propHooks[ name ];
+		}
+
+		if ( value !== undefined ) {
+			if ( hooks && "set" in hooks &&
+				( ret = hooks.set( elem, value, name ) ) !== undefined ) {
+				return ret;
+			}
+
+			return ( elem[ name ] = value );
+		}
+
+		if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {
+			return ret;
+		}
+
+		return elem[ name ];
+	},
+
+	propHooks: {
+		tabIndex: {
+			get: function( elem ) {
+
+				// elem.tabIndex doesn't always return the
+				// correct value when it hasn't been explicitly set
+				// http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/
+				// Use proper attribute retrieval(#12072)
+				var tabindex = jQuery.find.attr( elem, "tabindex" );
+
+				return tabindex ?
+					parseInt( tabindex, 10 ) :
+					rfocusable.test( elem.nodeName ) ||
+						rclickable.test( elem.nodeName ) && elem.href ?
+							0 :
+							-1;
+			}
+		}
+	},
+
+	propFix: {
+		"for": "htmlFor",
+		"class": "className"
+	}
+} );
+
+// Support: IE <=11 only
+// Accessing the selectedIndex property
+// forces the browser to respect setting selected
+// on the option
+// The getter ensures a default option is selected
+// when in an optgroup
+if ( !support.optSelected ) {
+	jQuery.propHooks.selected = {
+		get: function( elem ) {
+			var parent = elem.parentNode;
+			if ( parent && parent.parentNode ) {
+				parent.parentNode.selectedIndex;
+			}
+			return null;
+		},
+		set: function( elem ) {
+			var parent = elem.parentNode;
+			if ( parent ) {
+				parent.selectedIndex;
+
+				if ( parent.parentNode ) {
+					parent.parentNode.selectedIndex;
+				}
+			}
+		}
+	};
+}
+
+jQuery.each( [
+	"tabIndex",
+	"readOnly",
+	"maxLength",
+	"cellSpacing",
+	"cellPadding",
+	"rowSpan",
+	"colSpan",
+	"useMap",
+	"frameBorder",
+	"contentEditable"
+], function() {
+	jQuery.propFix[ this.toLowerCase() ] = this;
+} );
+
+
+
+
+var rclass = /[\t\r\n\f]/g;
+
+function getClass( elem ) {
+	return elem.getAttribute && elem.getAttribute( "class" ) || "";
+}
+
+jQuery.fn.extend( {
+	addClass: function( value ) {
+		var classes, elem, cur, curValue, clazz, j, finalValue,
+			i = 0;
+
+		if ( jQuery.isFunction( value ) ) {
+			return this.each( function( j ) {
+				jQuery( this ).addClass( value.call( this, j, getClass( this ) ) );
+			} );
+		}
+
+		if ( typeof value === "string" && value ) {
+			classes = value.match( rnotwhite ) || [];
+
+			while ( ( elem = this[ i++ ] ) ) {
+				curValue = getClass( elem );
+				cur = elem.nodeType === 1 &&
+					( " " + curValue + " " ).replace( rclass, " " );
+
+				if ( cur ) {
+					j = 0;
+					while ( ( clazz = classes[ j++ ] ) ) {
+						if ( cur.indexOf( " " + clazz + " " ) < 0 ) {
+							cur += clazz + " ";
+						}
+					}
+
+					// Only assign if different to avoid unneeded rendering.
+					finalValue = jQuery.trim( cur );
+					if ( curValue !== finalValue ) {
+						elem.setAttribute( "class", finalValue );
+					}
+				}
+			}
+		}
+
+		return this;
+	},
+
+	removeClass: function( value ) {
+		var classes, elem, cur, curValue, clazz, j, finalValue,
+			i = 0;
+
+		if ( jQuery.isFunction( value ) ) {
+			return this.each( function( j ) {
+				jQuery( this ).removeClass( value.call( this, j, getClass( this ) ) );
+			} );
+		}
+
+		if ( !arguments.length ) {
+			return this.attr( "class", "" );
+		}
+
+		if ( typeof value === "string" && value ) {
+			classes = value.match( rnotwhite ) || [];
+
+			while ( ( elem = this[ i++ ] ) ) {
+				curValue = getClass( elem );
+
+				// This expression is here for better compressibility (see addClass)
+				cur = elem.nodeType === 1 &&
+					( " " + curValue + " " ).replace( rclass, " " );
+
+				if ( cur ) {
+					j = 0;
+					while ( ( clazz = classes[ j++ ] ) ) {
+
+						// Remove *all* instances
+						while ( cur.indexOf( " " + clazz + " " ) > -1 ) {
+							cur = cur.replace( " " + clazz + " ", " " );
+						}
+					}
+
+					// Only assign if different to avoid unneeded rendering.
+					finalValue = jQuery.trim( cur );
+					if ( curValue !== finalValue ) {
+						elem.setAttribute( "class", finalValue );
+					}
+				}
+			}
+		}
+
+		return this;
+	},
+
+	toggleClass: function( value, stateVal ) {
+		var type = typeof value;
+
+		if ( typeof stateVal === "boolean" && type === "string" ) {
+			return stateVal ? this.addClass( value ) : this.removeClass( value );
+		}
+
+		if ( jQuery.isFunction( value ) ) {
+			return this.each( function( i ) {
+				jQuery( this ).toggleClass(
+					value.call( this, i, getClass( this ), stateVal ),
+					stateVal
+				);
+			} );
+		}
+
+		return this.each( function() {
+			var className, i, self, classNames;
+
+			if ( type === "string" ) {
+
+				// Toggle individual class names
+				i = 0;
+				self = jQuery( this );
+				classNames = value.match( rnotwhite ) || [];
+
+				while ( ( className = classNames[ i++ ] ) ) {
+
+					// Check each className given, space separated list
+					if ( self.hasClass( className ) ) {
+						self.removeClass( className );
+					} else {
+						self.addClass( className );
+					}
+				}
+
+			// Toggle whole class name
+			} else if ( value === undefined || type === "boolean" ) {
+				className = getClass( this );
+				if ( className ) {
+
+					// Store className if set
+					dataPriv.set( this, "__className__", className );
+				}
+
+				// If the element has a class name or if we're passed `false`,
+				// then remove the whole classname (if there was one, the above saved it).
+				// Otherwise bring back whatever was previously saved (if anything),
+				// falling back to the empty string if nothing was stored.
+				if ( this.setAttribute ) {
+					this.setAttribute( "class",
+						className || value === false ?
+						"" :
+						dataPriv.get( this, "__className__" ) || ""
+					);
+				}
+			}
+		} );
+	},
+
+	hasClass: function( selector ) {
+		var className, elem,
+			i = 0;
+
+		className = " " + selector + " ";
+		while ( ( elem = this[ i++ ] ) ) {
+			if ( elem.nodeType === 1 &&
+				( " " + getClass( elem ) + " " ).replace( rclass, " " )
+					.indexOf( className ) > -1
+			) {
+				return true;
+			}
+		}
+
+		return false;
+	}
+} );
+
+
+
+
+var rreturn = /\r/g,
+	rspaces = /[\x20\t\r\n\f]+/g;
+
+jQuery.fn.extend( {
+	val: function( value ) {
+		var hooks, ret, isFunction,
+			elem = this[ 0 ];
+
+		if ( !arguments.length ) {
+			if ( elem ) {
+				hooks = jQuery.valHooks[ elem.type ] ||
+					jQuery.valHooks[ elem.nodeName.toLowerCase() ];
+
+				if ( hooks &&
+					"get" in hooks &&
+					( ret = hooks.get( elem, "value" ) ) !== undefined
+				) {
+					return ret;
+				}
+
+				ret = elem.value;
+
+				return typeof ret === "string" ?
+
+					// Handle most common string cases
+					ret.replace( rreturn, "" ) :
+
+					// Handle cases where value is null/undef or number
+					ret == null ? "" : ret;
+			}
+
+			return;
+		}
+
+		isFunction = jQuery.isFunction( value );
+
+		return this.each( function( i ) {
+			var val;
+
+			if ( this.nodeType !== 1 ) {
+				return;
+			}
+
+			if ( isFunction ) {
+				val = value.call( this, i, jQuery( this ).val() );
+			} else {
+				val = value;
+			}
+
+			// Treat null/undefined as ""; convert numbers to string
+			if ( val == null ) {
+				val = "";
+
+			} else if ( typeof val === "number" ) {
+				val += "";
+
+			} else if ( jQuery.isArray( val ) ) {
+				val = jQuery.map( val, function( value ) {
+					return value == null ? "" : value + "";
+				} );
+			}
+
+			hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ];
+
+			// If set returns undefined, fall back to normal setting
+			if ( !hooks || !( "set" in hooks ) || hooks.set( this, val, "value" ) === undefined ) {
+				this.value = val;
+			}
+		} );
+	}
+} );
+
+jQuery.extend( {
+	valHooks: {
+		option: {
+			get: function( elem ) {
+
+				var val = jQuery.find.attr( elem, "value" );
+				return val != null ?
+					val :
+
+					// Support: IE10-11+
+					// option.text throws exceptions (#14686, #14858)
+					// Strip and collapse whitespace
+					// https://html.spec.whatwg.org/#strip-and-collapse-whitespace
+					jQuery.trim( jQuery.text( elem ) ).replace( rspaces, " " );
+			}
+		},
+		select: {
+			get: function( elem ) {
+				var value, option,
+					options = elem.options,
+					index = elem.selectedIndex,
+					one = elem.type === "select-one" || index < 0,
+					values = one ? null : [],
+					max = one ? index + 1 : options.length,
+					i = index < 0 ?
+						max :
+						one ? index : 0;
+
+				// Loop through all the selected options
+				for ( ; i < max; i++ ) {
+					option = options[ i ];
+
+					// IE8-9 doesn't update selected after form reset (#2551)
+					if ( ( option.selected || i === index ) &&
+
+							// Don't return options that are disabled or in a disabled optgroup
+							( support.optDisabled ?
+								!option.disabled : option.getAttribute( "disabled" ) === null ) &&
+							( !option.parentNode.disabled ||
+								!jQuery.nodeName( option.parentNode, "optgroup" ) ) ) {
+
+						// Get the specific value for the option
+						value = jQuery( option ).val();
+
+						// We don't need an array for one selects
+						if ( one ) {
+							return value;
+						}
+
+						// Multi-Selects return an array
+						values.push( value );
+					}
+				}
+
+				return values;
+			},
+
+			set: function( elem, value ) {
+				var optionSet, option,
+					options = elem.options,
+					values = jQuery.makeArray( value ),
+					i = options.length;
+
+				while ( i-- ) {
+					option = options[ i ];
+					if ( option.selected =
+						jQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1
+					) {
+						optionSet = true;
+					}
+				}
+
+				// Force browsers to behave consistently when non-matching value is set
+				if ( !optionSet ) {
+					elem.selectedIndex = -1;
+				}
+				return values;
+			}
+		}
+	}
+} );
+
+// Radios and checkboxes getter/setter
+jQuery.each( [ "radio", "checkbox" ], function() {
+	jQuery.valHooks[ this ] = {
+		set: function( elem, value ) {
+			if ( jQuery.isArray( value ) ) {
+				return ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 );
+			}
+		}
+	};
+	if ( !support.checkOn ) {
+		jQuery.valHooks[ this ].get = function( elem ) {
+			return elem.getAttribute( "value" ) === null ? "on" : elem.value;
+		};
+	}
+} );
+
+
+
+
+// Return jQuery for attributes-only inclusion
+
+
+var rfocusMorph = /^(?:focusinfocus|focusoutblur)$/;
+
+jQuery.extend( jQuery.event, {
+
+	trigger: function( event, data, elem, onlyHandlers ) {
+
+		var i, cur, tmp, bubbleType, ontype, handle, special,
+			eventPath = [ elem || document ],
+			type = hasOwn.call( event, "type" ) ? event.type : event,
+			namespaces = hasOwn.call( event, "namespace" ) ? event.namespace.split( "." ) : [];
+
+		cur = tmp = elem = elem || document;
+
+		// Don't do events on text and comment nodes
+		if ( elem.nodeType === 3 || elem.nodeType === 8 ) {
+			return;
+		}
+
+		// focus/blur morphs to focusin/out; ensure we're not firing them right now
+		if ( rfocusMorph.test( type + jQuery.event.triggered ) ) {
+			return;
+		}
+
+		if ( type.indexOf( "." ) > -1 ) {
+
+			// Namespaced trigger; create a regexp to match event type in handle()
+			namespaces = type.split( "." );
+			type = namespaces.shift();
+			namespaces.sort();
+		}
+		ontype = type.indexOf( ":" ) < 0 && "on" + type;
+
+		// Caller can pass in a jQuery.Event object, Object, or just an event type string
+		event = event[ jQuery.expando ] ?
+			event :
+			new jQuery.Event( type, typeof event === "object" && event );
+
+		// Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true)
+		event.isTrigger = onlyHandlers ? 2 : 3;
+		event.namespace = namespaces.join( "." );
+		event.rnamespace = event.namespace ?
+			new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ) :
+			null;
+
+		// Clean up the event in case it is being reused
+		event.result = undefined;
+		if ( !event.target ) {
+			event.target = elem;
+		}
+
+		// Clone any incoming data and prepend the event, creating the handler arg list
+		data = data == null ?
+			[ event ] :
+			jQuery.makeArray( data, [ event ] );
+
+		// Allow special events to draw outside the lines
+		special = jQuery.event.special[ type ] || {};
+		if ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) {
+			return;
+		}
+
+		// Determine event propagation path in advance, per W3C events spec (#9951)
+		// Bubble up to document, then to window; watch for a global ownerDocument var (#9724)
+		if ( !onlyHandlers && !special.noBubble && !jQuery.isWindow( elem ) ) {
+
+			bubbleType = special.delegateType || type;
+			if ( !rfocusMorph.test( bubbleType + type ) ) {
+				cur = cur.parentNode;
+			}
+			for ( ; cur; cur = cur.parentNode ) {
+				eventPath.push( cur );
+				tmp = cur;
+			}
+
+			// Only add window if we got to document (e.g., not plain obj or detached DOM)
+			if ( tmp === ( elem.ownerDocument || document ) ) {
+				eventPath.push( tmp.defaultView || tmp.parentWindow || window );
+			}
+		}
+
+		// Fire handlers on the event path
+		i = 0;
+		while ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) {
+
+			event.type = i > 1 ?
+				bubbleType :
+				special.bindType || type;
+
+			// jQuery handler
+			handle = ( dataPriv.get( cur, "events" ) || {} )[ event.type ] &&
+				dataPriv.get( cur, "handle" );
+			if ( handle ) {
+				handle.apply( cur, data );
+			}
+
+			// Native handler
+			handle = ontype && cur[ ontype ];
+			if ( handle && handle.apply && acceptData( cur ) ) {
+				event.result = handle.apply( cur, data );
+				if ( event.result === false ) {
+					event.preventDefault();
+				}
+			}
+		}
+		event.type = type;
+
+		// If nobody prevented the default action, do it now
+		if ( !onlyHandlers && !event.isDefaultPrevented() ) {
+
+			if ( ( !special._default ||
+				special._default.apply( eventPath.pop(), data ) === false ) &&
+				acceptData( elem ) ) {
+
+				// Call a native DOM method on the target with the same name name as the event.
+				// Don't do default actions on window, that's where global variables be (#6170)
+				if ( ontype && jQuery.isFunction( elem[ type ] ) && !jQuery.isWindow( elem ) ) {
+
+					// Don't re-trigger an onFOO event when we call its FOO() method
+					tmp = elem[ ontype ];
+
+					if ( tmp ) {
+						elem[ ontype ] = null;
+					}
+
+					// Prevent re-triggering of the same event, since we already bubbled it above
+					jQuery.event.triggered = type;
+					elem[ type ]();
+					jQuery.event.triggered = undefined;
+
+					if ( tmp ) {
+						elem[ ontype ] = tmp;
+					}
+				}
+			}
+		}
+
+		return event.result;
+	},
+
+	// Piggyback on a donor event to simulate a different one
+	simulate: function( type, elem, event ) {
+		var e = jQuery.extend(
+			new jQuery.Event(),
+			event,
+			{
+				type: type,
+				isSimulated: true
+
+				// Previously, `originalEvent: {}` was set here, so stopPropagation call
+				// would not be triggered on donor event, since in our own
+				// jQuery.event.stopPropagation function we had a check for existence of
+				// originalEvent.stopPropagation method, so, consequently it would be a noop.
+				//
+				// But now, this "simulate" function is used only for events
+				// for which stopPropagation() is noop, so there is no need for that anymore.
+				//
+				// For the 1.x branch though, guard for "click" and "submit"
+				// events is still used, but was moved to jQuery.event.stopPropagation function
+				// because `originalEvent` should point to the original event for the constancy
+				// with other events and for more focused logic
+			}
+		);
+
+		jQuery.event.trigger( e, null, elem );
+
+		if ( e.isDefaultPrevented() ) {
+			event.preventDefault();
+		}
+	}
+
+} );
+
+jQuery.fn.extend( {
+
+	trigger: function( type, data ) {
+		return this.each( function() {
+			jQuery.event.trigger( type, data, this );
+		} );
+	},
+	triggerHandler: function( type, data ) {
+		var elem = this[ 0 ];
+		if ( elem ) {
+			return jQuery.event.trigger( type, data, elem, true );
+		}
+	}
+} );
+
+
+jQuery.each( ( "blur focus focusin focusout load resize scroll unload click dblclick " +
+	"mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " +
+	"change select submit keydown keypress keyup error contextmenu" ).split( " " ),
+	function( i, name ) {
+
+	// Handle event binding
+	jQuery.fn[ name ] = function( data, fn ) {
+		return arguments.length > 0 ?
+			this.on( name, null, data, fn ) :
+			this.trigger( name );
+	};
+} );
+
+jQuery.fn.extend( {
+	hover: function( fnOver, fnOut ) {
+		return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver );
+	}
+} );
+
+
+
+
+support.focusin = "onfocusin" in window;
+
+
+// Support: Firefox
+// Firefox doesn't have focus(in | out) events
+// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787
+//
+// Support: Chrome, Safari
+// focus(in | out) events fire after focus & blur events,
+// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order
+// Related ticket - https://code.google.com/p/chromium/issues/detail?id=449857
+if ( !support.focusin ) {
+	jQuery.each( { focus: "focusin", blur: "focusout" }, function( orig, fix ) {
+
+		// Attach a single capturing handler on the document while someone wants focusin/focusout
+		var handler = function( event ) {
+			jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ) );
+		};
+
+		jQuery.event.special[ fix ] = {
+			setup: function() {
+				var doc = this.ownerDocument || this,
+					attaches = dataPriv.access( doc, fix );
+
+				if ( !attaches ) {
+					doc.addEventListener( orig, handler, true );
+				}
+				dataPriv.access( doc, fix, ( attaches || 0 ) + 1 );
+			},
+			teardown: function() {
+				var doc = this.ownerDocument || this,
+					attaches = dataPriv.access( doc, fix ) - 1;
+
+				if ( !attaches ) {
+					doc.removeEventListener( orig, handler, true );
+					dataPriv.remove( doc, fix );
+
+				} else {
+					dataPriv.access( doc, fix, attaches );
+				}
+			}
+		};
+	} );
+}
+var location = window.location;
+
+var nonce = jQuery.now();
+
+var rquery = ( /\?/ );
+
+
+
+// Support: Android 2.3
+// Workaround failure to string-cast null input
+jQuery.parseJSON = function( data ) {
+	return JSON.parse( data + "" );
+};
+
+
+// Cross-browser xml parsing
+jQuery.parseXML = function( data ) {
+	var xml;
+	if ( !data || typeof data !== "string" ) {
+		return null;
+	}
+
+	// Support: IE9
+	try {
+		xml = ( new window.DOMParser() ).parseFromString( data, "text/xml" );
+	} catch ( e ) {
+		xml = undefined;
+	}
+
+	if ( !xml || xml.getElementsByTagName( "parsererror" ).length ) {
+		jQuery.error( "Invalid XML: " + data );
+	}
+	return xml;
+};
+
+
+var
+	rhash = /#.*$/,
+	rts = /([?&])_=[^&]*/,
+	rheaders = /^(.*?):[ \t]*([^\r\n]*)$/mg,
+
+	// #7653, #8125, #8152: local protocol detection
+	rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,
+	rnoContent = /^(?:GET|HEAD)$/,
+	rprotocol = /^\/\//,
+
+	/* Prefilters
+	 * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)
+	 * 2) These are called:
+	 *    - BEFORE asking for a transport
+	 *    - AFTER param serialization (s.data is a string if s.processData is true)
+	 * 3) key is the dataType
+	 * 4) the catchall symbol "*" can be used
+	 * 5) execution will start with transport dataType and THEN continue down to "*" if needed
+	 */
+	prefilters = {},
+
+	/* Transports bindings
+	 * 1) key is the dataType
+	 * 2) the catchall symbol "*" can be used
+	 * 3) selection will start with transport dataType and THEN go to "*" if needed
+	 */
+	transports = {},
+
+	// Avoid comment-prolog char sequence (#10098); must appease lint and evade compression
+	allTypes = "*/".concat( "*" ),
+
+	// Anchor tag for parsing the document origin
+	originAnchor = document.createElement( "a" );
+	originAnchor.href = location.href;
+
+// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport
+function addToPrefiltersOrTransports( structure ) {
+
+	// dataTypeExpression is optional and defaults to "*"
+	return function( dataTypeExpression, func ) {
+
+		if ( typeof dataTypeExpression !== "string" ) {
+			func = dataTypeExpression;
+			dataTypeExpression = "*";
+		}
+
+		var dataType,
+			i = 0,
+			dataTypes = dataTypeExpression.toLowerCase().match( rnotwhite ) || [];
+
+		if ( jQuery.isFunction( func ) ) {
+
+			// For each dataType in the dataTypeExpression
+			while ( ( dataType = dataTypes[ i++ ] ) ) {
+
+				// Prepend if requested
+				if ( dataType[ 0 ] === "+" ) {
+					dataType = dataType.slice( 1 ) || "*";
+					( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func );
+
+				// Otherwise append
+				} else {
+					( structure[ dataType ] = structure[ dataType ] || [] ).push( func );
+				}
+			}
+		}
+	};
+}
+
+// Base inspection function for prefilters and transports
+function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) {
+
+	var inspected = {},
+		seekingTransport = ( structure === transports );
+
+	function inspect( dataType ) {
+		var selected;
+		inspected[ dataType ] = true;
+		jQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) {
+			var dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR );
+			if ( typeof dataTypeOrTransport === "string" &&
+				!seekingTransport && !inspected[ dataTypeOrTransport ] ) {
+
+				options.dataTypes.unshift( dataTypeOrTransport );
+				inspect( dataTypeOrTransport );
+				return false;
+			} else if ( seekingTransport ) {
+				return !( selected = dataTypeOrTransport );
+			}
+		} );
+		return selected;
+	}
+
+	return inspect( options.dataTypes[ 0 ] ) || !inspected[ "*" ] && inspect( "*" );
+}
+
+// A special extend for ajax options
+// that takes "flat" options (not to be deep extended)
+// Fixes #9887
+function ajaxExtend( target, src ) {
+	var key, deep,
+		flatOptions = jQuery.ajaxSettings.flatOptions || {};
+
+	for ( key in src ) {
+		if ( src[ key ] !== undefined ) {
+			( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ];
+		}
+	}
+	if ( deep ) {
+		jQuery.extend( true, target, deep );
+	}
+
+	return target;
+}
+
+/* Handles responses to an ajax request:
+ * - finds the right dataType (mediates between content-type and expected dataType)
+ * - returns the corresponding response
+ */
+function ajaxHandleResponses( s, jqXHR, responses ) {
+
+	var ct, type, finalDataType, firstDataType,
+		contents = s.contents,
+		dataTypes = s.dataTypes;
+
+	// Remove auto dataType and get content-type in the process
+	while ( dataTypes[ 0 ] === "*" ) {
+		dataTypes.shift();
+		if ( ct === undefined ) {
+			ct = s.mimeType || jqXHR.getResponseHeader( "Content-Type" );
+		}
+	}
+
+	// Check if we're dealing with a known content-type
+	if ( ct ) {
+		for ( type in contents ) {
+			if ( contents[ type ] && contents[ type ].test( ct ) ) {
+				dataTypes.unshift( type );
+				break;
+			}
+		}
+	}
+
+	// Check to see if we have a response for the expected dataType
+	if ( dataTypes[ 0 ] in responses ) {
+		finalDataType = dataTypes[ 0 ];
+	} else {
+
+		// Try convertible dataTypes
+		for ( type in responses ) {
+			if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[ 0 ] ] ) {
+				finalDataType = type;
+				break;
+			}
+			if ( !firstDataType ) {
+				firstDataType = type;
+			}
+		}
+
+		// Or just use first one
+		finalDataType = finalDataType || firstDataType;
+	}
+
+	// If we found a dataType
+	// We add the dataType to the list if needed
+	// and return the corresponding response
+	if ( finalDataType ) {
+		if ( finalDataType !== dataTypes[ 0 ] ) {
+			dataTypes.unshift( finalDataType );
+		}
+		return responses[ finalDataType ];
+	}
+}
+
+/* Chain conversions given the request and the original response
+ * Also sets the responseXXX fields on the jqXHR instance
+ */
+function ajaxConvert( s, response, jqXHR, isSuccess ) {
+	var conv2, current, conv, tmp, prev,
+		converters = {},
+
+		// Work with a copy of dataTypes in case we need to modify it for conversion
+		dataTypes = s.dataTypes.slice();
+
+	// Create converters map with lowercased keys
+	if ( dataTypes[ 1 ] ) {
+		for ( conv in s.converters ) {
+			converters[ conv.toLowerCase() ] = s.converters[ conv ];
+		}
+	}
+
+	current = dataTypes.shift();
+
+	// Convert to each sequential dataType
+	while ( current ) {
+
+		if ( s.responseFields[ current ] ) {
+			jqXHR[ s.responseFields[ current ] ] = response;
+		}
+
+		// Apply the dataFilter if provided
+		if ( !prev && isSuccess && s.dataFilter ) {
+			response = s.dataFilter( response, s.dataType );
+		}
+
+		prev = current;
+		current = dataTypes.shift();
+
+		if ( current ) {
+
+		// There's only work to do if current dataType is non-auto
+			if ( current === "*" ) {
+
+				current = prev;
+
+			// Convert response if prev dataType is non-auto and differs from current
+			} else if ( prev !== "*" && prev !== current ) {
+
+				// Seek a direct converter
+				conv = converters[ prev + " " + current ] || converters[ "* " + current ];
+
+				// If none found, seek a pair
+				if ( !conv ) {
+					for ( conv2 in converters ) {
+
+						// If conv2 outputs current
+						tmp = conv2.split( " " );
+						if ( tmp[ 1 ] === current ) {
+
+							// If prev can be converted to accepted input
+							conv = converters[ prev + " " + tmp[ 0 ] ] ||
+								converters[ "* " + tmp[ 0 ] ];
+							if ( conv ) {
+
+								// Condense equivalence converters
+								if ( conv === true ) {
+									conv = converters[ conv2 ];
+
+								// Otherwise, insert the intermediate dataType
+								} else if ( converters[ conv2 ] !== true ) {
+									current = tmp[ 0 ];
+									dataTypes.unshift( tmp[ 1 ] );
+								}
+								break;
+							}
+						}
+					}
+				}
+
+				// Apply converter (if not an equivalence)
+				if ( conv !== true ) {
+
+					// Unless errors are allowed to bubble, catch and return them
+					if ( conv && s.throws ) {
+						response = conv( response );
+					} else {
+						try {
+							response = conv( response );
+						} catch ( e ) {
+							return {
+								state: "parsererror",
+								error: conv ? e : "No conversion from " + prev + " to " + current
+							};
+						}
+					}
+				}
+			}
+		}
+	}
+
+	return { state: "success", data: response };
+}
+
+jQuery.extend( {
+
+	// Counter for holding the number of active queries
+	active: 0,
+
+	// Last-Modified header cache for next request
+	lastModified: {},
+	etag: {},
+
+	ajaxSettings: {
+		url: location.href,
+		type: "GET",
+		isLocal: rlocalProtocol.test( location.protocol ),
+		global: true,
+		processData: true,
+		async: true,
+		contentType: "application/x-www-form-urlencoded; charset=UTF-8",
+		/*
+		timeout: 0,
+		data: null,
+		dataType: null,
+		username: null,
+		password: null,
+		cache: null,
+		throws: false,
+		traditional: false,
+		headers: {},
+		*/
+
+		accepts: {
+			"*": allTypes,
+			text: "text/plain",
+			html: "text/html",
+			xml: "application/xml, text/xml",
+			json: "application/json, text/javascript"
+		},
+
+		contents: {
+			xml: /\bxml\b/,
+			html: /\bhtml/,
+			json: /\bjson\b/
+		},
+
+		responseFields: {
+			xml: "responseXML",
+			text: "responseText",
+			json: "responseJSON"
+		},
+
+		// Data converters
+		// Keys separate source (or catchall "*") and destination types with a single space
+		converters: {
+
+			// Convert anything to text
+			"* text": String,
+
+			// Text to html (true = no transformation)
+			"text html": true,
+
+			// Evaluate text as a json expression
+			"text json": jQuery.parseJSON,
+
+			// Parse text as xml
+			"text xml": jQuery.parseXML
+		},
+
+		// For options that shouldn't be deep extended:
+		// you can add your own custom options here if
+		// and when you create one that shouldn't be
+		// deep extended (see ajaxExtend)
+		flatOptions: {
+			url: true,
+			context: true
+		}
+	},
+
+	// Creates a full fledged settings object into target
+	// with both ajaxSettings and settings fields.
+	// If target is omitted, writes into ajaxSettings.
+	ajaxSetup: function( target, settings ) {
+		return settings ?
+
+			// Building a settings object
+			ajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) :
+
+			// Extending ajaxSettings
+			ajaxExtend( jQuery.ajaxSettings, target );
+	},
+
+	ajaxPrefilter: addToPrefiltersOrTransports( prefilters ),
+	ajaxTransport: addToPrefiltersOrTransports( transports ),
+
+	// Main method
+	ajax: function( url, options ) {
+
+		// If url is an object, simulate pre-1.5 signature
+		if ( typeof url === "object" ) {
+			options = url;
+			url = undefined;
+		}
+
+		// Force options to be an object
+		options = options || {};
+
+		var transport,
+
+			// URL without anti-cache param
+			cacheURL,
+
+			// Response headers
+			responseHeadersString,
+			responseHeaders,
+
+			// timeout handle
+			timeoutTimer,
+
+			// Url cleanup var
+			urlAnchor,
+
+			// To know if global events are to be dispatched
+			fireGlobals,
+
+			// Loop variable
+			i,
+
+			// Create the final options object
+			s = jQuery.ajaxSetup( {}, options ),
+
+			// Callbacks context
+			callbackContext = s.context || s,
+
+			// Context for global events is callbackContext if it is a DOM node or jQuery collection
+			globalEventContext = s.context &&
+				( callbackContext.nodeType || callbackContext.jquery ) ?
+					jQuery( callbackContext ) :
+					jQuery.event,
+
+			// Deferreds
+			deferred = jQuery.Deferred(),
+			completeDeferred = jQuery.Callbacks( "once memory" ),
+
+			// Status-dependent callbacks
+			statusCode = s.statusCode || {},
+
+			// Headers (they are sent all at once)
+			requestHeaders = {},
+			requestHeadersNames = {},
+
+			// The jqXHR state
+			state = 0,
+
+			// Default abort message
+			strAbort = "canceled",
+
+			// Fake xhr
+			jqXHR = {
+				readyState: 0,
+
+				// Builds headers hashtable if needed
+				getResponseHeader: function( key ) {
+					var match;
+					if ( state === 2 ) {
+						if ( !responseHeaders ) {
+							responseHeaders = {};
+							while ( ( match = rheaders.exec( responseHeadersString ) ) ) {
+								responseHeaders[ match[ 1 ].toLowerCase() ] = match[ 2 ];
+							}
+						}
+						match = responseHeaders[ key.toLowerCase() ];
+					}
+					return match == null ? null : match;
+				},
+
+				// Raw string
+				getAllResponseHeaders: function() {
+					return state === 2 ? responseHeadersString : null;
+				},
+
+				// Caches the header
+				setRequestHeader: function( name, value ) {
+					var lname = name.toLowerCase();
+					if ( !state ) {
+						name = requestHeadersNames[ lname ] = requestHeadersNames[ lname ] || name;
+						requestHeaders[ name ] = value;
+					}
+					return this;
+				},
+
+				// Overrides response content-type header
+				overrideMimeType: function( type ) {
+					if ( !state ) {
+						s.mimeType = type;
+					}
+					return this;
+				},
+
+				// Status-dependent callbacks
+				statusCode: function( map ) {
+					var code;
+					if ( map ) {
+						if ( state < 2 ) {
+							for ( code in map ) {
+
+								// Lazy-add the new callback in a way that preserves old ones
+								statusCode[ code ] = [ statusCode[ code ], map[ code ] ];
+							}
+						} else {
+
+							// Execute the appropriate callbacks
+							jqXHR.always( map[ jqXHR.status ] );
+						}
+					}
+					return this;
+				},
+
+				// Cancel the request
+				abort: function( statusText ) {
+					var finalText = statusText || strAbort;
+					if ( transport ) {
+						transport.abort( finalText );
+					}
+					done( 0, finalText );
+					return this;
+				}
+			};
+
+		// Attach deferreds
+		deferred.promise( jqXHR ).complete = completeDeferred.add;
+		jqXHR.success = jqXHR.done;
+		jqXHR.error = jqXHR.fail;
+
+		// Remove hash character (#7531: and string promotion)
+		// Add protocol if not provided (prefilters might expect it)
+		// Handle falsy url in the settings object (#10093: consistency with old signature)
+		// We also use the url parameter if available
+		s.url = ( ( url || s.url || location.href ) + "" ).replace( rhash, "" )
+			.replace( rprotocol, location.protocol + "//" );
+
+		// Alias method option to type as per ticket #12004
+		s.type = options.method || options.type || s.method || s.type;
+
+		// Extract dataTypes list
+		s.dataTypes = jQuery.trim( s.dataType || "*" ).toLowerCase().match( rnotwhite ) || [ "" ];
+
+		// A cross-domain request is in order when the origin doesn't match the current origin.
+		if ( s.crossDomain == null ) {
+			urlAnchor = document.createElement( "a" );
+
+			// Support: IE8-11+
+			// IE throws exception if url is malformed, e.g. http://example.com:80x/
+			try {
+				urlAnchor.href = s.url;
+
+				// Support: IE8-11+
+				// Anchor's host property isn't correctly set when s.url is relative
+				urlAnchor.href = urlAnchor.href;
+				s.crossDomain = originAnchor.protocol + "//" + originAnchor.host !==
+					urlAnchor.protocol + "//" + urlAnchor.host;
+			} catch ( e ) {
+
+				// If there is an error parsing the URL, assume it is crossDomain,
+				// it can be rejected by the transport if it is invalid
+				s.crossDomain = true;
+			}
+		}
+
+		// Convert data if not already a string
+		if ( s.data && s.processData && typeof s.data !== "string" ) {
+			s.data = jQuery.param( s.data, s.traditional );
+		}
+
+		// Apply prefilters
+		inspectPrefiltersOrTransports( prefilters, s, options, jqXHR );
+
+		// If request was aborted inside a prefilter, stop there
+		if ( state === 2 ) {
+			return jqXHR;
+		}
+
+		// We can fire global events as of now if asked to
+		// Don't fire events if jQuery.event is undefined in an AMD-usage scenario (#15118)
+		fireGlobals = jQuery.event && s.global;
+
+		// Watch for a new set of requests
+		if ( fireGlobals && jQuery.active++ === 0 ) {
+			jQuery.event.trigger( "ajaxStart" );
+		}
+
+		// Uppercase the type
+		s.type = s.type.toUpperCase();
+
+		// Determine if request has content
+		s.hasContent = !rnoContent.test( s.type );
+
+		// Save the URL in case we're toying with the If-Modified-Since
+		// and/or If-None-Match header later on
+		cacheURL = s.url;
+
+		// More options handling for requests with no content
+		if ( !s.hasContent ) {
+
+			// If data is available, append data to url
+			if ( s.data ) {
+				cacheURL = ( s.url += ( rquery.test( cacheURL ) ? "&" : "?" ) + s.data );
+
+				// #9682: remove data so that it's not used in an eventual retry
+				delete s.data;
+			}
+
+			// Add anti-cache in url if needed
+			if ( s.cache === false ) {
+				s.url = rts.test( cacheURL ) ?
+
+					// If there is already a '_' parameter, set its value
+					cacheURL.replace( rts, "$1_=" + nonce++ ) :
+
+					// Otherwise add one to the end
+					cacheURL + ( rquery.test( cacheURL ) ? "&" : "?" ) + "_=" + nonce++;
+			}
+		}
+
+		// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
+		if ( s.ifModified ) {
+			if ( jQuery.lastModified[ cacheURL ] ) {
+				jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ cacheURL ] );
+			}
+			if ( jQuery.etag[ cacheURL ] ) {
+				jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ cacheURL ] );
+			}
+		}
+
+		// Set the correct header, if data is being sent
+		if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {
+			jqXHR.setRequestHeader( "Content-Type", s.contentType );
+		}
+
+		// Set the Accepts header for the server, depending on the dataType
+		jqXHR.setRequestHeader(
+			"Accept",
+			s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ?
+				s.accepts[ s.dataTypes[ 0 ] ] +
+					( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) :
+				s.accepts[ "*" ]
+		);
+
+		// Check for headers option
+		for ( i in s.headers ) {
+			jqXHR.setRequestHeader( i, s.headers[ i ] );
+		}
+
+		// Allow custom headers/mimetypes and early abort
+		if ( s.beforeSend &&
+			( s.beforeSend.call( callbackContext, jqXHR, s ) === false || state === 2 ) ) {
+
+			// Abort if not done already and return
+			return jqXHR.abort();
+		}
+
+		// Aborting is no longer a cancellation
+		strAbort = "abort";
+
+		// Install callbacks on deferreds
+		for ( i in { success: 1, error: 1, complete: 1 } ) {
+			jqXHR[ i ]( s[ i ] );
+		}
+
+		// Get transport
+		transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );
+
+		// If no transport, we auto-abort
+		if ( !transport ) {
+			done( -1, "No Transport" );
+		} else {
+			jqXHR.readyState = 1;
+
+			// Send global event
+			if ( fireGlobals ) {
+				globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] );
+			}
+
+			// If request was aborted inside ajaxSend, stop there
+			if ( state === 2 ) {
+				return jqXHR;
+			}
+
+			// Timeout
+			if ( s.async && s.timeout > 0 ) {
+				timeoutTimer = window.setTimeout( function() {
+					jqXHR.abort( "timeout" );
+				}, s.timeout );
+			}
+
+			try {
+				state = 1;
+				transport.send( requestHeaders, done );
+			} catch ( e ) {
+
+				// Propagate exception as error if not done
+				if ( state < 2 ) {
+					done( -1, e );
+
+				// Simply rethrow otherwise
+				} else {
+					throw e;
+				}
+			}
+		}
+
+		// Callback for when everything is done
+		function done( status, nativeStatusText, responses, headers ) {
+			var isSuccess, success, error, response, modified,
+				statusText = nativeStatusText;
+
+			// Called once
+			if ( state === 2 ) {
+				return;
+			}
+
+			// State is "done" now
+			state = 2;
+
+			// Clear timeout if it exists
+			if ( timeoutTimer ) {
+				window.clearTimeout( timeoutTimer );
+			}
+
+			// Dereference transport for early garbage collection
+			// (no matter how long the jqXHR object will be used)
+			transport = undefined;
+
+			// Cache response headers
+			responseHeadersString = headers || "";
+
+			// Set readyState
+			jqXHR.readyState = status > 0 ? 4 : 0;
+
+			// Determine if successful
+			isSuccess = status >= 200 && status < 300 || status === 304;
+
+			// Get response data
+			if ( responses ) {
+				response = ajaxHandleResponses( s, jqXHR, responses );
+			}
+
+			// Convert no matter what (that way responseXXX fields are always set)
+			response = ajaxConvert( s, response, jqXHR, isSuccess );
+
+			// If successful, handle type chaining
+			if ( isSuccess ) {
+
+				// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
+				if ( s.ifModified ) {
+					modified = jqXHR.getResponseHeader( "Last-Modified" );
+					if ( modified ) {
+						jQuery.lastModified[ cacheURL ] = modified;
+					}
+					modified = jqXHR.getResponseHeader( "etag" );
+					if ( modified ) {
+						jQuery.etag[ cacheURL ] = modified;
+					}
+				}
+
+				// if no content
+				if ( status === 204 || s.type === "HEAD" ) {
+					statusText = "nocontent";
+
+				// if not modified
+				} else if ( status === 304 ) {
+					statusText = "notmodified";
+
+				// If we have data, let's convert it
+				} else {
+					statusText = response.state;
+					success = response.data;
+					error = response.error;
+					isSuccess = !error;
+				}
+			} else {
+
+				// Extract error from statusText and normalize for non-aborts
+				error = statusText;
+				if ( status || !statusText ) {
+					statusText = "error";
+					if ( status < 0 ) {
+						status = 0;
+					}
+				}
+			}
+
+			// Set data for the fake xhr object
+			jqXHR.status = status;
+			jqXHR.statusText = ( nativeStatusText || statusText ) + "";
+
+			// Success/Error
+			if ( isSuccess ) {
+				deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );
+			} else {
+				deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );
+			}
+
+			// Status-dependent callbacks
+			jqXHR.statusCode( statusCode );
+			statusCode = undefined;
+
+			if ( fireGlobals ) {
+				globalEventContext.trigger( isSuccess ? "ajaxSuccess" : "ajaxError",
+					[ jqXHR, s, isSuccess ? success : error ] );
+			}
+
+			// Complete
+			completeDeferred.fireWith( callbackContext, [ jqXHR, statusText ] );
+
+			if ( fireGlobals ) {
+				globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] );
+
+				// Handle the global AJAX counter
+				if ( !( --jQuery.active ) ) {
+					jQuery.event.trigger( "ajaxStop" );
+				}
+			}
+		}
+
+		return jqXHR;
+	},
+
+	getJSON: function( url, data, callback ) {
+		return jQuery.get( url, data, callback, "json" );
+	},
+
+	getScript: function( url, callback ) {
+		return jQuery.get( url, undefined, callback, "script" );
+	}
+} );
+
+jQuery.each( [ "get", "post" ], function( i, method ) {
+	jQuery[ method ] = function( url, data, callback, type ) {
+
+		// Shift arguments if data argument was omitted
+		if ( jQuery.isFunction( data ) ) {
+			type = type || callback;
+			callback = data;
+			data = undefined;
+		}
+
+		// The url can be an options object (which then must have .url)
+		return jQuery.ajax( jQuery.extend( {
+			url: url,
+			type: method,
+			dataType: type,
+			data: data,
+			success: callback
+		}, jQuery.isPlainObject( url ) && url ) );
+	};
+} );
+
+
+jQuery._evalUrl = function( url ) {
+	return jQuery.ajax( {
+		url: url,
+
+		// Make this explicit, since user can override this through ajaxSetup (#11264)
+		type: "GET",
+		dataType: "script",
+		async: false,
+		global: false,
+		"throws": true
+	} );
+};
+
+
+jQuery.fn.extend( {
+	wrapAll: function( html ) {
+		var wrap;
+
+		if ( jQuery.isFunction( html ) ) {
+			return this.each( function( i ) {
+				jQuery( this ).wrapAll( html.call( this, i ) );
+			} );
+		}
+
+		if ( this[ 0 ] ) {
+
+			// The elements to wrap the target around
+			wrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true );
+
+			if ( this[ 0 ].parentNode ) {
+				wrap.insertBefore( this[ 0 ] );
+			}
+
+			wrap.map( function() {
+				var elem = this;
+
+				while ( elem.firstElementChild ) {
+					elem = elem.firstElementChild;
+				}
+
+				return elem;
+			} ).append( this );
+		}
+
+		return this;
+	},
+
+	wrapInner: function( html ) {
+		if ( jQuery.isFunction( html ) ) {
+			return this.each( function( i ) {
+				jQuery( this ).wrapInner( html.call( this, i ) );
+			} );
+		}
+
+		return this.each( function() {
+			var self = jQuery( this ),
+				contents = self.contents();
+
+			if ( contents.length ) {
+				contents.wrapAll( html );
+
+			} else {
+				self.append( html );
+			}
+		} );
+	},
+
+	wrap: function( html ) {
+		var isFunction = jQuery.isFunction( html );
+
+		return this.each( function( i ) {
+			jQuery( this ).wrapAll( isFunction ? html.call( this, i ) : html );
+		} );
+	},
+
+	unwrap: function() {
+		return this.parent().each( function() {
+			if ( !jQuery.nodeName( this, "body" ) ) {
+				jQuery( this ).replaceWith( this.childNodes );
+			}
+		} ).end();
+	}
+} );
+
+
+jQuery.expr.filters.hidden = function( elem ) {
+	return !jQuery.expr.filters.visible( elem );
+};
+jQuery.expr.filters.visible = function( elem ) {
+
+	// Support: Opera <= 12.12
+	// Opera reports offsetWidths and offsetHeights less than zero on some elements
+	// Use OR instead of AND as the element is not visible if either is true
+	// See tickets #10406 and #13132
+	return elem.offsetWidth > 0 || elem.offsetHeight > 0 || elem.getClientRects().length > 0;
+};
+
+
+
+
+var r20 = /%20/g,
+	rbracket = /\[\]$/,
+	rCRLF = /\r?\n/g,
+	rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,
+	rsubmittable = /^(?:input|select|textarea|keygen)/i;
+
+function buildParams( prefix, obj, traditional, add ) {
+	var name;
+
+	if ( jQuery.isArray( obj ) ) {
+
+		// Serialize array item.
+		jQuery.each( obj, function( i, v ) {
+			if ( traditional || rbracket.test( prefix ) ) {
+
+				// Treat each array item as a scalar.
+				add( prefix, v );
+
+			} else {
+
+				// Item is non-scalar (array or object), encode its numeric index.
+				buildParams(
+					prefix + "[" + ( typeof v === "object" && v != null ? i : "" ) + "]",
+					v,
+					traditional,
+					add
+				);
+			}
+		} );
+
+	} else if ( !traditional && jQuery.type( obj ) === "object" ) {
+
+		// Serialize object item.
+		for ( name in obj ) {
+			buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add );
+		}
+
+	} else {
+
+		// Serialize scalar item.
+		add( prefix, obj );
+	}
+}
+
+// Serialize an array of form elements or a set of
+// key/values into a query string
+jQuery.param = function( a, traditional ) {
+	var prefix,
+		s = [],
+		add = function( key, value ) {
+
+			// If value is a function, invoke it and return its value
+			value = jQuery.isFunction( value ) ? value() : ( value == null ? "" : value );
+			s[ s.length ] = encodeURIComponent( key ) + "=" + encodeURIComponent( value );
+		};
+
+	// Set traditional to true for jQuery <= 1.3.2 behavior.
+	if ( traditional === undefined ) {
+		traditional = jQuery.ajaxSettings && jQuery.ajaxSettings.traditional;
+	}
+
+	// If an array was passed in, assume that it is an array of form elements.
+	if ( jQuery.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {
+
+		// Serialize the form elements
+		jQuery.each( a, function() {
+			add( this.name, this.value );
+		} );
+
+	} else {
+
+		// If traditional, encode the "old" way (the way 1.3.2 or older
+		// did it), otherwise encode params recursively.
+		for ( prefix in a ) {
+			buildParams( prefix, a[ prefix ], traditional, add );
+		}
+	}
+
+	// Return the resulting serialization
+	return s.join( "&" ).replace( r20, "+" );
+};
+
+jQuery.fn.extend( {
+	serialize: function() {
+		return jQuery.param( this.serializeArray() );
+	},
+	serializeArray: function() {
+		return this.map( function() {
+
+			// Can add propHook for "elements" to filter or add form elements
+			var elements = jQuery.prop( this, "elements" );
+			return elements ? jQuery.makeArray( elements ) : this;
+		} )
+		.filter( function() {
+			var type = this.type;
+
+			// Use .is( ":disabled" ) so that fieldset[disabled] works
+			return this.name && !jQuery( this ).is( ":disabled" ) &&
+				rsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) &&
+				( this.checked || !rcheckableType.test( type ) );
+		} )
+		.map( function( i, elem ) {
+			var val = jQuery( this ).val();
+
+			return val == null ?
+				null :
+				jQuery.isArray( val ) ?
+					jQuery.map( val, function( val ) {
+						return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
+					} ) :
+					{ name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
+		} ).get();
+	}
+} );
+
+
+jQuery.ajaxSettings.xhr = function() {
+	try {
+		return new window.XMLHttpRequest();
+	} catch ( e ) {}
+};
+
+var xhrSuccessStatus = {
+
+		// File protocol always yields status code 0, assume 200
+		0: 200,
+
+		// Support: IE9
+		// #1450: sometimes IE returns 1223 when it should be 204
+		1223: 204
+	},
+	xhrSupported = jQuery.ajaxSettings.xhr();
+
+support.cors = !!xhrSupported && ( "withCredentials" in xhrSupported );
+support.ajax = xhrSupported = !!xhrSupported;
+
+jQuery.ajaxTransport( function( options ) {
+	var callback, errorCallback;
+
+	// Cross domain only allowed if supported through XMLHttpRequest
+	if ( support.cors || xhrSupported && !options.crossDomain ) {
+		return {
+			send: function( headers, complete ) {
+				var i,
+					xhr = options.xhr();
+
+				xhr.open(
+					options.type,
+					options.url,
+					options.async,
+					options.username,
+					options.password
+				);
+
+				// Apply custom fields if provided
+				if ( options.xhrFields ) {
+					for ( i in options.xhrFields ) {
+						xhr[ i ] = options.xhrFields[ i ];
+					}
+				}
+
+				// Override mime type if needed
+				if ( options.mimeType && xhr.overrideMimeType ) {
+					xhr.overrideMimeType( options.mimeType );
+				}
+
+				// X-Requested-With header
+				// For cross-domain requests, seeing as conditions for a preflight are
+				// akin to a jigsaw puzzle, we simply never set it to be sure.
+				// (it can always be set on a per-request basis or even using ajaxSetup)
+				// For same-domain requests, won't change header if already provided.
+				if ( !options.crossDomain && !headers[ "X-Requested-With" ] ) {
+					headers[ "X-Requested-With" ] = "XMLHttpRequest";
+				}
+
+				// Set headers
+				for ( i in headers ) {
+					xhr.setRequestHeader( i, headers[ i ] );
+				}
+
+				// Callback
+				callback = function( type ) {
+					return function() {
+						if ( callback ) {
+							callback = errorCallback = xhr.onload =
+								xhr.onerror = xhr.onabort = xhr.onreadystatechange = null;
+
+							if ( type === "abort" ) {
+								xhr.abort();
+							} else if ( type === "error" ) {
+
+								// Support: IE9
+								// On a manual native abort, IE9 throws
+								// errors on any property access that is not readyState
+								if ( typeof xhr.status !== "number" ) {
+									complete( 0, "error" );
+								} else {
+									complete(
+
+										// File: protocol always yields status 0; see #8605, #14207
+										xhr.status,
+										xhr.statusText
+									);
+								}
+							} else {
+								complete(
+									xhrSuccessStatus[ xhr.status ] || xhr.status,
+									xhr.statusText,
+
+									// Support: IE9 only
+									// IE9 has no XHR2 but throws on binary (trac-11426)
+									// For XHR2 non-text, let the caller handle it (gh-2498)
+									( xhr.responseType || "text" ) !== "text"  ||
+									typeof xhr.responseText !== "string" ?
+										{ binary: xhr.response } :
+										{ text: xhr.responseText },
+									xhr.getAllResponseHeaders()
+								);
+							}
+						}
+					};
+				};
+
+				// Listen to events
+				xhr.onload = callback();
+				errorCallback = xhr.onerror = callback( "error" );
+
+				// Support: IE9
+				// Use onreadystatechange to replace onabort
+				// to handle uncaught aborts
+				if ( xhr.onabort !== undefined ) {
+					xhr.onabort = errorCallback;
+				} else {
+					xhr.onreadystatechange = function() {
+
+						// Check readyState before timeout as it changes
+						if ( xhr.readyState === 4 ) {
+
+							// Allow onerror to be called first,
+							// but that will not handle a native abort
+							// Also, save errorCallback to a variable
+							// as xhr.onerror cannot be accessed
+							window.setTimeout( function() {
+								if ( callback ) {
+									errorCallback();
+								}
+							} );
+						}
+					};
+				}
+
+				// Create the abort callback
+				callback = callback( "abort" );
+
+				try {
+
+					// Do send the request (this may raise an exception)
+					xhr.send( options.hasContent && options.data || null );
+				} catch ( e ) {
+
+					// #14683: Only rethrow if this hasn't been notified as an error yet
+					if ( callback ) {
+						throw e;
+					}
+				}
+			},
+
+			abort: function() {
+				if ( callback ) {
+					callback();
+				}
+			}
+		};
+	}
+} );
+
+
+
+
+// Install script dataType
+jQuery.ajaxSetup( {
+	accepts: {
+		script: "text/javascript, application/javascript, " +
+			"application/ecmascript, application/x-ecmascript"
+	},
+	contents: {
+		script: /\b(?:java|ecma)script\b/
+	},
+	converters: {
+		"text script": function( text ) {
+			jQuery.globalEval( text );
+			return text;
+		}
+	}
+} );
+
+// Handle cache's special case and crossDomain
+jQuery.ajaxPrefilter( "script", function( s ) {
+	if ( s.cache === undefined ) {
+		s.cache = false;
+	}
+	if ( s.crossDomain ) {
+		s.type = "GET";
+	}
+} );
+
+// Bind script tag hack transport
+jQuery.ajaxTransport( "script", function( s ) {
+
+	// This transport only deals with cross domain requests
+	if ( s.crossDomain ) {
+		var script, callback;
+		return {
+			send: function( _, complete ) {
+				script = jQuery( "<script>" ).prop( {
+					charset: s.scriptCharset,
+					src: s.url
+				} ).on(
+					"load error",
+					callback = function( evt ) {
+						script.remove();
+						callback = null;
+						if ( evt ) {
+							complete( evt.type === "error" ? 404 : 200, evt.type );
+						}
+					}
+				);
+
+				// Use native DOM manipulation to avoid our domManip AJAX trickery
+				document.head.appendChild( script[ 0 ] );
+			},
+			abort: function() {
+				if ( callback ) {
+					callback();
+				}
+			}
+		};
+	}
+} );
+
+
+
+
+var oldCallbacks = [],
+	rjsonp = /(=)\?(?=&|$)|\?\?/;
+
+// Default jsonp settings
+jQuery.ajaxSetup( {
+	jsonp: "callback",
+	jsonpCallback: function() {
+		var callback = oldCallbacks.pop() || ( jQuery.expando + "_" + ( nonce++ ) );
+		this[ callback ] = true;
+		return callback;
+	}
+} );
+
+// Detect, normalize options and install callbacks for jsonp requests
+jQuery.ajaxPrefilter( "json jsonp", function( s, originalSettings, jqXHR ) {
+
+	var callbackName, overwritten, responseContainer,
+		jsonProp = s.jsonp !== false && ( rjsonp.test( s.url ) ?
+			"url" :
+			typeof s.data === "string" &&
+				( s.contentType || "" )
+					.indexOf( "application/x-www-form-urlencoded" ) === 0 &&
+				rjsonp.test( s.data ) && "data"
+		);
+
+	// Handle iff the expected data type is "jsonp" or we have a parameter to set
+	if ( jsonProp || s.dataTypes[ 0 ] === "jsonp" ) {
+
+		// Get callback name, remembering preexisting value associated with it
+		callbackName = s.jsonpCallback = jQuery.isFunction( s.jsonpCallback ) ?
+			s.jsonpCallback() :
+			s.jsonpCallback;
+
+		// Insert callback into url or form data
+		if ( jsonProp ) {
+			s[ jsonProp ] = s[ jsonProp ].replace( rjsonp, "$1" + callbackName );
+		} else if ( s.jsonp !== false ) {
+			s.url += ( rquery.test( s.url ) ? "&" : "?" ) + s.jsonp + "=" + callbackName;
+		}
+
+		// Use data converter to retrieve json after script execution
+		s.converters[ "script json" ] = function() {
+			if ( !responseContainer ) {
+				jQuery.error( callbackName + " was not called" );
+			}
+			return responseContainer[ 0 ];
+		};
+
+		// Force json dataType
+		s.dataTypes[ 0 ] = "json";
+
+		// Install callback
+		overwritten = window[ callbackName ];
+		window[ callbackName ] = function() {
+			responseContainer = arguments;
+		};
+
+		// Clean-up function (fires after converters)
+		jqXHR.always( function() {
+
+			// If previous value didn't exist - remove it
+			if ( overwritten === undefined ) {
+				jQuery( window ).removeProp( callbackName );
+
+			// Otherwise restore preexisting value
+			} else {
+				window[ callbackName ] = overwritten;
+			}
+
+			// Save back as free
+			if ( s[ callbackName ] ) {
+
+				// Make sure that re-using the options doesn't screw things around
+				s.jsonpCallback = originalSettings.jsonpCallback;
+
+				// Save the callback name for future use
+				oldCallbacks.push( callbackName );
+			}
+
+			// Call if it was a function and we have a response
+			if ( responseContainer && jQuery.isFunction( overwritten ) ) {
+				overwritten( responseContainer[ 0 ] );
+			}
+
+			responseContainer = overwritten = undefined;
+		} );
+
+		// Delegate to script
+		return "script";
+	}
+} );
+
+
+
+
+// Argument "data" should be string of html
+// context (optional): If specified, the fragment will be created in this context,
+// defaults to document
+// keepScripts (optional): If true, will include scripts passed in the html string
+jQuery.parseHTML = function( data, context, keepScripts ) {
+	if ( !data || typeof data !== "string" ) {
+		return null;
+	}
+	if ( typeof context === "boolean" ) {
+		keepScripts = context;
+		context = false;
+	}
+	context = context || document;
+
+	var parsed = rsingleTag.exec( data ),
+		scripts = !keepScripts && [];
+
+	// Single tag
+	if ( parsed ) {
+		return [ context.createElement( parsed[ 1 ] ) ];
+	}
+
+	parsed = buildFragment( [ data ], context, scripts );
+
+	if ( scripts && scripts.length ) {
+		jQuery( scripts ).remove();
+	}
+
+	return jQuery.merge( [], parsed.childNodes );
+};
+
+
+// Keep a copy of the old load method
+var _load = jQuery.fn.load;
+
+/**
+ * Load a url into a page
+ */
+jQuery.fn.load = function( url, params, callback ) {
+	if ( typeof url !== "string" && _load ) {
+		return _load.apply( this, arguments );
+	}
+
+	var selector, type, response,
+		self = this,
+		off = url.indexOf( " " );
+
+	if ( off > -1 ) {
+		selector = jQuery.trim( url.slice( off ) );
+		url = url.slice( 0, off );
+	}
+
+	// If it's a function
+	if ( jQuery.isFunction( params ) ) {
+
+		// We assume that it's the callback
+		callback = params;
+		params = undefined;
+
+	// Otherwise, build a param string
+	} else if ( params && typeof params === "object" ) {
+		type = "POST";
+	}
+
+	// If we have elements to modify, make the request
+	if ( self.length > 0 ) {
+		jQuery.ajax( {
+			url: url,
+
+			// If "type" variable is undefined, then "GET" method will be used.
+			// Make value of this field explicit since
+			// user can override it through ajaxSetup method
+			type: type || "GET",
+			dataType: "html",
+			data: params
+		} ).done( function( responseText ) {
+
+			// Save response for use in complete callback
+			response = arguments;
+
+			self.html( selector ?
+
+				// If a selector was specified, locate the right elements in a dummy div
+				// Exclude scripts to avoid IE 'Permission Denied' errors
+				jQuery( "<div>" ).append( jQuery.parseHTML( responseText ) ).find( selector ) :
+
+				// Otherwise use the full result
+				responseText );
+
+		// If the request succeeds, this function gets "data", "status", "jqXHR"
+		// but they are ignored because response was set above.
+		// If it fails, this function gets "jqXHR", "status", "error"
+		} ).always( callback && function( jqXHR, status ) {
+			self.each( function() {
+				callback.apply( this, response || [ jqXHR.responseText, status, jqXHR ] );
+			} );
+		} );
+	}
+
+	return this;
+};
+
+
+
+
+// Attach a bunch of functions for handling common AJAX events
+jQuery.each( [
+	"ajaxStart",
+	"ajaxStop",
+	"ajaxComplete",
+	"ajaxError",
+	"ajaxSuccess",
+	"ajaxSend"
+], function( i, type ) {
+	jQuery.fn[ type ] = function( fn ) {
+		return this.on( type, fn );
+	};
+} );
+
+
+
+
+jQuery.expr.filters.animated = function( elem ) {
+	return jQuery.grep( jQuery.timers, function( fn ) {
+		return elem === fn.elem;
+	} ).length;
+};
+
+
+
+
+/**
+ * Gets a window from an element
+ */
+function getWindow( elem ) {
+	return jQuery.isWindow( elem ) ? elem : elem.nodeType === 9 && elem.defaultView;
+}
+
+jQuery.offset = {
+	setOffset: function( elem, options, i ) {
+		var curPosition, curLeft, curCSSTop, curTop, curOffset, curCSSLeft, calculatePosition,
+			position = jQuery.css( elem, "position" ),
+			curElem = jQuery( elem ),
+			props = {};
+
+		// Set position first, in-case top/left are set even on static elem
+		if ( position === "static" ) {
+			elem.style.position = "relative";
+		}
+
+		curOffset = curElem.offset();
+		curCSSTop = jQuery.css( elem, "top" );
+		curCSSLeft = jQuery.css( elem, "left" );
+		calculatePosition = ( position === "absolute" || position === "fixed" ) &&
+			( curCSSTop + curCSSLeft ).indexOf( "auto" ) > -1;
+
+		// Need to be able to calculate position if either
+		// top or left is auto and position is either absolute or fixed
+		if ( calculatePosition ) {
+			curPosition = curElem.position();
+			curTop = curPosition.top;
+			curLeft = curPosition.left;
+
+		} else {
+			curTop = parseFloat( curCSSTop ) || 0;
+			curLeft = parseFloat( curCSSLeft ) || 0;
+		}
+
+		if ( jQuery.isFunction( options ) ) {
+
+			// Use jQuery.extend here to allow modification of coordinates argument (gh-1848)
+			options = options.call( elem, i, jQuery.extend( {}, curOffset ) );
+		}
+
+		if ( options.top != null ) {
+			props.top = ( options.top - curOffset.top ) + curTop;
+		}
+		if ( options.left != null ) {
+			props.left = ( options.left - curOffset.left ) + curLeft;
+		}
+
+		if ( "using" in options ) {
+			options.using.call( elem, props );
+
+		} else {
+			curElem.css( props );
+		}
+	}
+};
+
+jQuery.fn.extend( {
+	offset: function( options ) {
+		if ( arguments.length ) {
+			return options === undefined ?
+				this :
+				this.each( function( i ) {
+					jQuery.offset.setOffset( this, options, i );
+				} );
+		}
+
+		var docElem, win,
+			elem = this[ 0 ],
+			box = { top: 0, left: 0 },
+			doc = elem && elem.ownerDocument;
+
+		if ( !doc ) {
+			return;
+		}
+
+		docElem = doc.documentElement;
+
+		// Make sure it's not a disconnected DOM node
+		if ( !jQuery.contains( docElem, elem ) ) {
+			return box;
+		}
+
+		box = elem.getBoundingClientRect();
+		win = getWindow( doc );
+		return {
+			top: box.top + win.pageYOffset - docElem.clientTop,
+			left: box.left + win.pageXOffset - docElem.clientLeft
+		};
+	},
+
+	position: function() {
+		if ( !this[ 0 ] ) {
+			return;
+		}
+
+		var offsetParent, offset,
+			elem = this[ 0 ],
+			parentOffset = { top: 0, left: 0 };
+
+		// Fixed elements are offset from window (parentOffset = {top:0, left: 0},
+		// because it is its only offset parent
+		if ( jQuery.css( elem, "position" ) === "fixed" ) {
+
+			// Assume getBoundingClientRect is there when computed position is fixed
+			offset = elem.getBoundingClientRect();
+
+		} else {
+
+			// Get *real* offsetParent
+			offsetParent = this.offsetParent();
+
+			// Get correct offsets
+			offset = this.offset();
+			if ( !jQuery.nodeName( offsetParent[ 0 ], "html" ) ) {
+				parentOffset = offsetParent.offset();
+			}
+
+			// Add offsetParent borders
+			parentOffset.top += jQuery.css( offsetParent[ 0 ], "borderTopWidth", true );
+			parentOffset.left += jQuery.css( offsetParent[ 0 ], "borderLeftWidth", true );
+		}
+
+		// Subtract parent offsets and element margins
+		return {
+			top: offset.top - parentOffset.top - jQuery.css( elem, "marginTop", true ),
+			left: offset.left - parentOffset.left - jQuery.css( elem, "marginLeft", true )
+		};
+	},
+
+	// This method will return documentElement in the following cases:
+	// 1) For the element inside the iframe without offsetParent, this method will return
+	//    documentElement of the parent window
+	// 2) For the hidden or detached element
+	// 3) For body or html element, i.e. in case of the html node - it will return itself
+	//
+	// but those exceptions were never presented as a real life use-cases
+	// and might be considered as more preferable results.
+	//
+	// This logic, however, is not guaranteed and can change at any point in the future
+	offsetParent: function() {
+		return this.map( function() {
+			var offsetParent = this.offsetParent;
+
+			while ( offsetParent && jQuery.css( offsetParent, "position" ) === "static" ) {
+				offsetParent = offsetParent.offsetParent;
+			}
+
+			return offsetParent || documentElement;
+		} );
+	}
+} );
+
+// Create scrollLeft and scrollTop methods
+jQuery.each( { scrollLeft: "pageXOffset", scrollTop: "pageYOffset" }, function( method, prop ) {
+	var top = "pageYOffset" === prop;
+
+	jQuery.fn[ method ] = function( val ) {
+		return access( this, function( elem, method, val ) {
+			var win = getWindow( elem );
+
+			if ( val === undefined ) {
+				return win ? win[ prop ] : elem[ method ];
+			}
+
+			if ( win ) {
+				win.scrollTo(
+					!top ? val : win.pageXOffset,
+					top ? val : win.pageYOffset
+				);
+
+			} else {
+				elem[ method ] = val;
+			}
+		}, method, val, arguments.length );
+	};
+} );
+
+// Support: Safari<7-8+, Chrome<37-44+
+// Add the top/left cssHooks using jQuery.fn.position
+// Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084
+// Blink bug: https://code.google.com/p/chromium/issues/detail?id=229280
+// getComputedStyle returns percent when specified for top/left/bottom/right;
+// rather than make the css module depend on the offset module, just check for it here
+jQuery.each( [ "top", "left" ], function( i, prop ) {
+	jQuery.cssHooks[ prop ] = addGetHookIf( support.pixelPosition,
+		function( elem, computed ) {
+			if ( computed ) {
+				computed = curCSS( elem, prop );
+
+				// If curCSS returns percentage, fallback to offset
+				return rnumnonpx.test( computed ) ?
+					jQuery( elem ).position()[ prop ] + "px" :
+					computed;
+			}
+		}
+	);
+} );
+
+
+// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods
+jQuery.each( { Height: "height", Width: "width" }, function( name, type ) {
+	jQuery.each( { padding: "inner" + name, content: type, "": "outer" + name },
+		function( defaultExtra, funcName ) {
+
+		// Margin is only for outerHeight, outerWidth
+		jQuery.fn[ funcName ] = function( margin, value ) {
+			var chainable = arguments.length && ( defaultExtra || typeof margin !== "boolean" ),
+				extra = defaultExtra || ( margin === true || value === true ? "margin" : "border" );
+
+			return access( this, function( elem, type, value ) {
+				var doc;
+
+				if ( jQuery.isWindow( elem ) ) {
+
+					// As of 5/8/2012 this will yield incorrect results for Mobile Safari, but there
+					// isn't a whole lot we can do. See pull request at this URL for discussion:
+					// https://github.com/jquery/jquery/pull/764
+					return elem.document.documentElement[ "client" + name ];
+				}
+
+				// Get document width or height
+				if ( elem.nodeType === 9 ) {
+					doc = elem.documentElement;
+
+					// Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height],
+					// whichever is greatest
+					return Math.max(
+						elem.body[ "scroll" + name ], doc[ "scroll" + name ],
+						elem.body[ "offset" + name ], doc[ "offset" + name ],
+						doc[ "client" + name ]
+					);
+				}
+
+				return value === undefined ?
+
+					// Get width or height on the element, requesting but not forcing parseFloat
+					jQuery.css( elem, type, extra ) :
+
+					// Set width or height on the element
+					jQuery.style( elem, type, value, extra );
+			}, type, chainable ? margin : undefined, chainable, null );
+		};
+	} );
+} );
+
+
+jQuery.fn.extend( {
+
+	bind: function( types, data, fn ) {
+		return this.on( types, null, data, fn );
+	},
+	unbind: function( types, fn ) {
+		return this.off( types, null, fn );
+	},
+
+	delegate: function( selector, types, data, fn ) {
+		return this.on( types, selector, data, fn );
+	},
+	undelegate: function( selector, types, fn ) {
+
+		// ( namespace ) or ( selector, types [, fn] )
+		return arguments.length === 1 ?
+			this.off( selector, "**" ) :
+			this.off( types, selector || "**", fn );
+	},
+	size: function() {
+		return this.length;
+	}
+} );
+
+jQuery.fn.andSelf = jQuery.fn.addBack;
+
+
+
+
+// Register as a named AMD module, since jQuery can be concatenated with other
+// files that may use define, but not via a proper concatenation script that
+// understands anonymous AMD modules. A named AMD is safest and most robust
+// way to register. Lowercase jquery is used because AMD module names are
+// derived from file names, and jQuery is normally delivered in a lowercase
+// file name. Do this after creating the global so that if an AMD module wants
+// to call noConflict to hide this version of jQuery, it will work.
+
+// Note that for maximum portability, libraries that are not jQuery should
+// declare themselves as anonymous modules, and avoid setting a global if an
+// AMD loader is present. jQuery is a special case. For more information, see
+// https://github.com/jrburke/requirejs/wiki/Updating-existing-libraries#wiki-anon
+
+if ( typeof define === "function" && define.amd ) {
+	define( "jquery", [], function() {
+		return jQuery;
+	} );
+}
+
+
+
+var
+
+	// Map over jQuery in case of overwrite
+	_jQuery = window.jQuery,
+
+	// Map over the $ in case of overwrite
+	_$ = window.$;
+
+jQuery.noConflict = function( deep ) {
+	if ( window.$ === jQuery ) {
+		window.$ = _$;
+	}
+
+	if ( deep && window.jQuery === jQuery ) {
+		window.jQuery = _jQuery;
+	}
+
+	return jQuery;
+};
+
+// Expose jQuery and $ identifiers, even in AMD
+// (#7102#comment:10, https://github.com/jquery/jquery/pull/557)
+// and CommonJS for browser emulators (#13566)
+if ( !noGlobal ) {
+	window.jQuery = window.$ = jQuery;
+}
+
+return jQuery;
+}));
+
+},{}],300:[function(require,module,exports){
+'use strict';
+
+Object.defineProperty(exports, "__esModule", {
+    value: true
+});
+
+var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol ? "symbol" : typeof obj; };
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); /**
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      * Created by gavorhes on 12/14/2015.
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      */
+
+var _LayerItsInventory = require('../layers/LayerItsInventory');
+
+var _LayerItsInventory2 = _interopRequireDefault(_LayerItsInventory);
+
+var _colors = require('../util/colors');
+
+var colors = _interopRequireWildcard(_colors);
+
+var _provide = require('../util/provide');
+
+var _provide2 = _interopRequireDefault(_provide);
+
+function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+var nm = (0, _provide2.default)('collections');
+
+var itsConfig = [{ name: 'Camera', itsType: 'cctv', minZoom: 11, itsIcon: 'cctv.png' }, {
+    name: 'Message Signs',
+    itsType: 'DMS',
+    minZoom: 11,
+    itsIconConfig: {
+        prop: 'dmsType',
+        defaultName: 'DMS',
+        defaultIcon: 'dms.png',
+        iconArray: [['pcms', 'PCMS', 'pcms.png']]
+    }
+}, { name: 'Lighting', itsType: 'light', minZoom: 16, itsIcon: 'streetlight.png', visible: false, onDemand: true }, { name: 'Bluetooth', itsType: 'blue', minZoom: 10, itsIcon: 'bluetooth.png', visible: false }, { name: 'Cabinets', itsType: 'cabinet', minZoom: 10, itsIcon: 'cabinet.png', visible: false }, { name: 'Hut', itsType: 'hut', minZoom: 10, itsIcon: 'hut.png', visible: false }, { name: 'Vault', itsType: 'vault', minZoom: 13, itsIcon: 'vault.png', visible: false }, { name: 'Advisory Radio', itsType: 'har', minZoom: 10, itsIcon: 'har.png', visible: false }, {
+    name: 'Loop Detectors',
+    itsType: 'loop',
+    legendCollapse: true,
+    minZoom: 14,
+    visible: false,
+    itsIconConfig: {
+        prop: 'dtctrType',
+        defaultName: 'Other',
+        defaultIcon: 'loopdetectorother.png',
+        iconArray: [['detector', 'Detector', 'loopdetector.png'], ['long', 'Long', 'loopdetectorlong.png'], ['zone', 'Zone', 'loopdetectorzone.png']]
+    },
+    onDemand: true
+}, { name: 'Microwave', itsType: 'microwave', minZoom: 14, itsIcon: 'microwave.png', visible: false }, { name: 'Pull Box', itsType: 'pull', minZoom: 14, itsIcon: 'pullbox.png', visible: false, onDemand: true }, { name: 'RWIS', itsType: 'rwis', minZoom: 7, itsIcon: 'rwis.png', visible: false }, { name: 'Ramp Gates', itsType: 'gate', minZoom: 10, itsIcon: 'rampgate.png', visible: false }, { name: 'Ramp Meter', itsType: 'meter', minZoom: 10, itsIcon: 'rampmeter.png', visible: false }, { name: 'Signal', itsType: 'signal', minZoom: 13, itsIcon: 'signal.png', visible: false, onDemand: true }, { name: 'Tower', itsType: 'tower', minZoom: 10, itsIcon: 'tower.png', visible: false }, {
+    name: 'Trench',
+    itsType: 'trench',
+    onDemand: true,
+    visible: false,
+    onDemandDelay: 500,
+    minZoom: 15,
+    legendCollapse: true,
+    itsLineConfig: {
+        prop: 'owner',
+        //defaultName: 'Other',
+        //defaultWidth: 7,
+        defaultColor: colors.hexAlphaToRgbOrRgba('#747474', 0.8),
+        lineArray: [['WisDOT', 'WisDOT', colors.hexAlphaToRgbOrRgba('#FF032F', 0.7)], ['WIN', 'WIN', colors.hexAlphaToRgbOrRgba('#FFC632', 0.7)], ['USXchange', 'USXchange', colors.hexAlphaToRgbOrRgba('#2DFF46', 0.7)], ['AT&T', 'AT&T', colors.hexAlphaToRgbOrRgba('#ff2be5', 0.7)], ['Touch America', 'Touch America', colors.hexAlphaToRgbOrRgba('#52f3ff', 0.7)], ['Qwest', 'Qwest', colors.hexAlphaToRgbOrRgba('#9278ff', 0.7)], ['McLeodUSA', 'McLeodUSA', colors.hexAlphaToRgbOrRgba('#2926FF', 0.7)], ['CINC', 'CINC', colors.hexAlphaToRgbOrRgba('#CB00FF', 0.7)], ['City of Madison', 'Madison', colors.hexAlphaToRgbOrRgba('#000380', 0.7)]]
+    }
+}];
+
+var ItsLayerCollection = function () {
+
+    /**
+     * Create a collection of all ITS layers
+     * @param {ol.Map} theMap the openlayers map
+     * @param {Array} [exclude=[]] array of Its layer identifiers to exclude
+     *
+     * BLUE Bluetooth Detector - Bluetooth Detector
+     * CABINET Cabinets - The cabinets
+     * CCTV Camera - Traffic Cameras
+     * HUT Communication Hut - Communication Hut
+     * VAULT Communication Vault - The communication vaults
+     * HAR Highway Advisory Radio - Advisory Radios
+     * LIGHT Lighting - Lighting
+     * LOOP Loop Detectors - Loop Detectors
+     * DMS Message Board - Message Boards and Signs
+     * MICROWAVE Microwave Detector - Microwave Detectors
+     * PULL Pull Box - A pull box
+     * RWIS RWIS - Road weather information system
+     * GATE Ramp Gate - The ramp Gates
+     * METER Ramp Meter - The ramp meters
+     * SIGNAL Signal - Traffic Signal
+     * TOWER Tower - The towers
+     * TRENCH
+     */
+
+    function ItsLayerCollection(theMap, exclude) {
+        _classCallCheck(this, ItsLayerCollection);
+
+        this.map = theMap;
+        this._layers = [];
+
+        exclude = (typeof exclude === 'undefined' ? 'undefined' : _typeof(exclude)) == 'object' ? exclude : [];
+
+        for (var i = 0; i < itsConfig.length; i++) {
+            var lyrConfig = itsConfig[i];
+            var addLayer = true;
+
+            for (var j = 0; j < exclude.length; j++) {
+                if (exclude[j] == lyrConfig.itsType) {
+                    addLayer = false;
+                    break;
+                }
+            }
+
+            if (addLayer) {
+                var inventLyr = new _LayerItsInventory2.default(lyrConfig);
+                this['map'].addLayer(inventLyr.olLayer);
+                this._layers.push(inventLyr);
+            }
+        }
+    }
+
+    /**
+     * Return the array of layers in this collection
+     * @returns {Array<LayerItsInventory>} an array of layers
+     */
+
+
+    _createClass(ItsLayerCollection, [{
+        key: 'layers',
+        get: function get() {
+            return this._layers;
+        }
+    }]);
+
+    return ItsLayerCollection;
+}();
+
+nm.ItsLayerCollection = ItsLayerCollection;
+exports.default = ItsLayerCollection;
+
+},{"../layers/LayerItsInventory":307,"../util/colors":321,"../util/provide":323}],301:[function(require,module,exports){
+'use strict';
+
+Object.defineProperty(exports, "__esModule", {
+    value: true
+});
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); /**
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      * Created by gavorhes on 12/16/2015.
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      */
+
+
+var _jquery = require('../jquery');
+
+var _jquery2 = _interopRequireDefault(_jquery);
+
+var _provide = require('../util/provide');
+
+var _provide2 = _interopRequireDefault(_provide);
+
+var _makeGuid = require('../util/makeGuid');
+
+var _makeGuid2 = _interopRequireDefault(_makeGuid);
+
+var _mapMove = require('../olHelpers/mapMove');
+
+var _mapMove2 = _interopRequireDefault(_mapMove);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+var nm = (0, _provide2.default)('collections');
+
+var LayerGroup = function () {
+
+    /**
+     *
+     * @param {object} [groupConfig={}] - group configuration object
+     * @param {string} groupConfig.groupName - the group name
+     * @param {boolean} [groupConfig.collapse=false] - if the group should be collapsed initially
+     * @param {boolean} [groupConfig.addCheck=true] - if the group should have a checkbox controlling visibility of all layers
+     * @param {LayerGroup} [parent=undefined] - the parent group
+     */
+
+    function LayerGroup(groupConfig, parent) {
+        _classCallCheck(this, LayerGroup);
+
+        this.groupLayers = [];
+        this.groupLayersLookup = {};
+        this.groupGroups = [];
+        this.groupGroupsLookup = {};
+        this.itemIdArray = [];
+
+        if (typeof groupConfig == 'undefined') {
+            this.parent = null;
+            this.groupId = 'root';
+            this.groupName = 'root';
+            this.allGroupLookup = { root: this };
+            this.allGroupArray = [this];
+            this.allLayerArray = [];
+            this.allLayerLookup = {};
+            this.layerParentLookup = {};
+            this.collapse = false;
+            this.addCheck = false;
+        } else {
+            this.groupId = (0, _makeGuid2.default)();
+            this.parent = parent;
+            this.groupName = groupConfig.groupName;
+            this.collapse = typeof groupConfig.collapse == 'boolean' ? groupConfig.collapse : false;
+            this.addCheck = typeof groupConfig.addCheck == 'boolean' ? groupConfig.addCheck : true;
+        }
+    }
+
+    /**
+     *
+     * @param {object} groupConfig - configuration object
+     * @param {string} groupConfig.groupName - the group name
+     * @param {boolean} groupConfig.collapse if the group should be collapsed initially
+     * @param {boolean} groupConfig.addCheck if the group should have a checkbox controlling visibility of all layers
+     * @param {Array<LayerGroup>} parents parent groups
+     * @returns {LayerGroup} the layer group just added
+     */
+
+
+    _createClass(LayerGroup, [{
+        key: 'addGroup',
+        value: function addGroup(groupConfig, parents) {
+            var parent = void 0;
+            if (parents.length > 0) {
+                parent = parents[parents.length - 1];
+            } else {
+                parent = 'root';
+            }
+
+            /**
+             * @type {LayerGroup}
+             */
+            var parentGroup = this.allGroupLookup[parent];
+            var newGroup = new LayerGroup(groupConfig, parentGroup);
+            this.allGroupLookup[newGroup.groupId] = newGroup;
+            this.allGroupArray.push(newGroup);
+
+            parentGroup.groupGroups.push(newGroup);
+            parentGroup.groupGroupsLookup[newGroup.groupId] = newGroup;
+
+            if (parentGroup.itemIdArray.indexOf(newGroup.groupId) > 0) {
+                console.log(newGroup.groupId);
+                throw 'layer and group ids must be unique';
+            }
+            parentGroup.itemIdArray.push(newGroup.groupId);
+
+            return newGroup;
+        }
+
+        /**
+         *
+         * @param {LayerBase} newLayer the layer to be added
+         * @param {Array} parents array
+         */
+
+    }, {
+        key: 'addLegendLayer',
+        value: function addLegendLayer(newLayer, parents) {
+            var parent = void 0;
+            if (parents.length > 0) {
+                parent = parents[parents.length - 1];
+            } else {
+                parent = 'root';
+            }
+
+            this.allLayerLookup[newLayer.id] = newLayer;
+            this.allLayerArray.push(newLayer);
+
+            /**
+             * @type {LayerGroup}
+             */
+            var parentGroup = this.allGroupLookup[parent];
+
+            parentGroup.groupLayers.push(newLayer);
+            parentGroup.groupLayersLookup[newLayer.id] = newLayer;
+            if (parentGroup.itemIdArray.indexOf(newLayer.id) > 0) {
+                console.log(newLayer.id);
+                throw 'layer and group ids must be unique';
+            }
+            parentGroup.itemIdArray.push(newLayer.id);
+
+            this.layerParentLookup[newLayer.id] = parentGroup;
+        }
+    }, {
+        key: 'getLegendHtml',
+        value: function getLegendHtml(legendId, options) {
+
+            var legendHtml = '<ul id="' + legendId + '" class="legend-container">';
+
+            legendHtml += '<li>' + options.legendTitle + '<input type="checkbox" checked id="suppress-by-extent-' + legendId + '" class="suppress-by-extent">' + ('<label title="Suppress layers not visible at this zoom level" for="suppress-by-extent-' + legendId + '">') + '<span></span>' + '</label></li>';
+
+            legendHtml += this._buildLegend(this.itemIdArray, this, options.layerDivClasses) + '</ul>';
+
+            return legendHtml;
+        }
+
+        /**
+         * @param {Array} itemIds the items to process
+         * @param {LayerGroup} theGroup new group
+         * @param {Array} [layerDivClasses=[]] optional classes to apply to the layer divs
+         * @static
+         * @returns {string} html string
+         */
+
+    }, {
+        key: '_buildLegend',
+        value: function _buildLegend(itemIds, theGroup, layerDivClasses) {
+
+            if (itemIds.length == 0) {
+                return '';
+            }
+
+            var theHml = '';
+
+            var itemId = itemIds[0];
+
+            if (theGroup.groupLayersLookup[itemId]) {
+
+                /**
+                 * @type {LayerBase}
+                 */
+                var lyr = theGroup.groupLayersLookup[itemId];
+                theHml += '<li id="' + lyr.id + '-layer-li" class="legend-layer-li ' + layerDivClasses.join(' ') + '">' + lyr.getLegendDiv() + '</li>';
+            } else if (theGroup.groupGroupsLookup[itemId]) {
+                /**
+                 * type {LayerGroup}
+                 */
+                var otherGroup = theGroup.groupGroupsLookup[itemId];
+
+                theHml += '<li>';
+                theHml += '<div id="' + otherGroup.groupId + '-legend-layer-div" ' + ('class="legend-layer-group  ' + layerDivClasses.join(' ') + '">');
+
+                if (otherGroup.addCheck) {
+                    theHml += '<input type="checkbox" checked id="' + otherGroup.groupId + '-group-chck">' + ('<label for="' + otherGroup.groupId + '-group-chck" title="Click arrow to expand or collapse">' + otherGroup.groupName + '</label>');
+                } else {
+                    theHml += '<label title="Click arrow to expand or collapse">' + otherGroup.groupName + '</label>';
+                }
+
+                theHml += '<span title="Expand/Collapse" class="layer-group-expander';
+                theHml += (otherGroup.collapse ? ' legend-layer-group-initial-collapse' : '') + '">';
+                theHml += otherGroup.collapse ? '&#9654;' : '&#9660;';
+                theHml += '</span>';
+
+                //parents.push(groupId);
+                theHml += '<ul>' + this._buildLegend(otherGroup.itemIdArray, otherGroup, layerDivClasses) + '</ul>';
+                theHml += '</div>';
+                theHml += '</li>';
+            }
+
+            return theHml + this._buildLegend(itemIds.slice(1), theGroup, layerDivClasses);
+        }
+    }]);
+
+    return LayerGroup;
+}();
+
+/**
+ * a wrapper to make a legend
+ */
+
+
+var LayerLegend = function () {
+
+    /**
+     *
+     * @param {Array} legendItems array of layers or objects with {groupName:  {string}, collapse: {boolean}, addCheck: {boolean}, items: {Array}}
+     * @param {string} divId the div where the legend should be added
+     * @param {object} options for legend
+     * @param {Array} [options.layerDivClasses=[]] optional array of classes to be applied to the layer legend divs for custom styling
+     * @param {string} [options.legendTitle=Legend] the legend title
+     * @param {bool} [options.scaleDependent=true] if legend display is scale dependent
+     */
+
+    function LayerLegend(legendItems, divId, options) {
+        _classCallCheck(this, LayerLegend);
+
+        var _iteratorNormalCompletion = true;
+        var _didIteratorError = false;
+        var _iteratorError = undefined;
+
+        try {
+            for (var _iterator = legendItems[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
+                var i = _step.value;
+
+                if (typeof i == 'undefined') {
+                    throw 'undefined item passed in array to legend constructor';
+                }
+            }
+        } catch (err) {
+            _didIteratorError = true;
+            _iteratorError = err;
+        } finally {
+            try {
+                if (!_iteratorNormalCompletion && _iterator.return) {
+                    _iterator.return();
+                }
+            } finally {
+                if (_didIteratorError) {
+                    throw _iteratorError;
+                }
+            }
+        }
+
+        options = options || {};
+
+        options.legendTitle = typeof options.legendTitle == 'string' ? options.legendTitle : 'Legend';
+        options.scaleDependent = typeof options.scaleDependent == 'boolean' ? options.scaleDependent : true;
+        options.layerDivClasses = options.layerDivClasses || [];
+
+        // if legend display is scale dependent, make sure the mapMove object is initialized first
+        if (options.scaleDependent) {
+            _mapMove2.default.checkInit();
+        }
+
+        this.$divElement = (0, _jquery2.default)('#' + divId);
+
+        this._legendItems = legendItems;
+
+        this.layerGroup = new LayerGroup();
+
+        this._buildTree(legendItems);
+
+        this.legendId = (0, _makeGuid2.default)();
+
+        this.$divElement.append(this.layerGroup.getLegendHtml(this.legendId, options));
+
+        var _iteratorNormalCompletion2 = true;
+        var _didIteratorError2 = false;
+        var _iteratorError2 = undefined;
+
+        try {
+            for (var _iterator2 = this.layerGroup.allLayerArray[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {
+                var l = _step2.value;
+
+                l.applyCollapse();
+            }
+        } catch (err) {
+            _didIteratorError2 = true;
+            _iteratorError2 = err;
+        } finally {
+            try {
+                if (!_iteratorNormalCompletion2 && _iterator2.return) {
+                    _iterator2.return();
+                }
+            } finally {
+                if (_didIteratorError2) {
+                    throw _iteratorError2;
+                }
+            }
+        }
+
+        var _this = this;
+
+        //// if legend display is scale dependent, make sure the mapMove object is initialized first
+        if (options.scaleDependent) {
+            _mapMove2.default.checkInit();
+
+            _mapMove2.default.addCallback(function (ext, zoom, evt) {
+                if (typeof evt == 'undefined' || evt == 'change:resolution') {
+                    var _iteratorNormalCompletion3 = true;
+                    var _didIteratorError3 = false;
+                    var _iteratorError3 = undefined;
+
+                    try {
+                        for (var _iterator3 = this.layerGroup.allLayerArray[Symbol.iterator](), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) {
+                            var lyr = _step3.value;
+
+                            var $lyrLi = (0, _jquery2.default)('#' + lyr.id + '-layer-li');
+                            if (zoom > lyr.maxZoom || zoom < lyr.minZoom) {
+                                $lyrLi.addClass('layer-not-visible');
+                            } else {
+                                $lyrLi.removeClass('layer-not-visible');
+                            }
+                        }
+                    } catch (err) {
+                        _didIteratorError3 = true;
+                        _iteratorError3 = err;
+                    } finally {
+                        try {
+                            if (!_iteratorNormalCompletion3 && _iterator3.return) {
+                                _iterator3.return();
+                            }
+                        } finally {
+                            if (_didIteratorError3) {
+                                throw _iteratorError3;
+                            }
+                        }
+                    }
+                }
+            }, this, 100, true, 'legend1');
+        }
+
+        // <editor-fold desc="add event listeners">
+
+        this.$divElement.find(".suppress-by-extent").change(function () {
+            var legendLayerLis = (0, _jquery2.default)('.legend-layer-li');
+            if (this.checked) {
+                legendLayerLis.removeClass('layer-force-show');
+            } else {
+                legendLayerLis.addClass('layer-force-show');
+            }
+        });
+
+        this.$divElement.find('.legend-check').change(function () {
+            var lyrId = this.id.replace('-legend-layer-check', '');
+            _this.layerGroup.allLayerLookup[lyrId].visible = this.checked;
+        });
+
+        this.$divElement.find('.legend-layer-group > input[type=checkbox]').change(function () {
+            (0, _jquery2.default)(this).siblings('ul').find('input[type=checkbox]').prop('checked', this.checked).trigger('change');
+        });
+
+        this.$divElement.find('.layer-group-expander').click(function () {
+            var $this = (0, _jquery2.default)(this);
+            $this.removeClass('legend-layer-group-initial-collapse');
+
+            $this.siblings('ul').slideToggle();
+
+            if ($this.hasClass('legend-layer-group-collapsed')) {
+                $this.removeClass('legend-layer-group-collapsed');
+                $this.html('&#9660;');
+            } else {
+                $this.addClass('legend-layer-group-collapsed');
+                $this.html('&#9654;');
+            }
+        });
+
+        this.$divElement.find('.legend-layer-group-initial-collapse').trigger('click');
+        // </editor-fold>
+    }
+
+    /**
+     * @param {Array} [legendItems=this._layerConfig] the legend items
+     * @param {Array} [parents=[]] the ordered list of groups in which this item is a member
+     * @private
+     */
+
+
+    _createClass(LayerLegend, [{
+        key: '_buildTree',
+        value: function _buildTree(legendItems, parents) {
+
+            if (legendItems.length == 0) {
+                return;
+            }
+
+            var oneItem = legendItems[0];
+
+            //reset the parent if the item is in the base array
+            if (this._legendItems.indexOf(oneItem) > -1 || typeof parents == 'undefined') {
+                parents = [];
+            }
+
+            if (typeof oneItem['groupName'] !== 'undefined') {
+                var groupItem = legendItems[0];
+                var newGroup = this.layerGroup.addGroup(groupItem, parents);
+                parents.push(newGroup.groupId);
+                this._buildTree(groupItem.items, parents);
+            } else {
+                /**
+                 * @type {LayerBase}
+                 */
+                var layerItem = legendItems[0];
+
+                this.layerGroup.addLegendLayer(layerItem, parents);
+            }
+
+            this._buildTree(legendItems.slice(1), parents);
+        }
+    }, {
+        key: 'showAll',
+        set: function set(val) {}
+    }]);
+
+    return LayerLegend;
+}();
+
+nm.LayerLegend = LayerLegend;
+exports.default = LayerLegend;
+
+},{"../jquery":302,"../olHelpers/mapMove":310,"../util/makeGuid":322,"../util/provide":323}],302:[function(require,module,exports){
+(function (global){
+'use strict';
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+/**
+ * Created by gavorhes on 5/3/2016.
+ */
+global.jQuery = require('jquery');
+
+exports.default = global.jQuery;
+
+}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
+
+},{"jquery":299}],303:[function(require,module,exports){
+'use strict';
+
+Object.defineProperty(exports, "__esModule", {
+    value: true
+});
+
+var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol ? "symbol" : typeof obj; };
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+var _jquery = require('../jquery');
+
+var _jquery2 = _interopRequireDefault(_jquery);
+
+var _makeGuid = require('../util/makeGuid');
+
+var _makeGuid2 = _interopRequireDefault(_makeGuid);
+
+var _zoomResolutionConvert = require('../olHelpers/zoomResolutionConvert');
+
+var zoomResolutionConvert = _interopRequireWildcard(_zoomResolutionConvert);
+
+var _provide = require('../util/provide');
+
+var _provide2 = _interopRequireDefault(_provide);
+
+function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+var nm = (0, _provide2.default)('layers');
+
+/**
+ * The base layer class
+ * @abstract
+ */
+
+var LayerBase = function () {
+    /**
+     * The base layer for all others
+     * @param {string} url - url for source
+     * @param {object} options - config
+     * @param {string} [options.id=makeGuid()] - layer id
+     * @param {string} [options.name=Unnamed Layer] - layer name
+     * @param {number} [options.opacity=1] - opacity
+     * @param {boolean} [options.visible=true] - default visible
+     * @param {number} [options.minZoom=undefined] - min zoom level, 0 - 28
+     * @param {number} [options.maxZoom=undefined] - max zoom level, 0 - 28
+     * @param {object} [options.params={}] - the get parameters to include to retrieve the layer
+     * @param {number} [options.zIndex=0] - the z index for the layer
+     * @param {function} [options.loadCallback] - function to call on load, context this is the layer object
+     * @param {boolean} [options.legendCollapse=false] - if the legend item should be initially collapsed
+     * @param {boolean} [options.legendCheckbox=true] - if the legend item should have a checkbox for visibility
+     * @param {boolean} [options.legendContent=undefined] - additional content to add to the legend
+     */
+
+    function LayerBase(url, options) {
+        _classCallCheck(this, LayerBase);
+
+        options = options || {};
+
+        if (typeof url !== 'string') {
+            throw 'Invalid URL';
+        }
+        this._url = url;
+
+        this._params = _typeof(options.params) == 'object' ? options.params : {};
+        this._legendCollapse = typeof options.legendCollapse == 'boolean' ? options.legendCollapse : false;
+        this._legendCheckbox = typeof options.legendCheckbox == 'boolean' ? options.legendCheckbox : true;
+
+        this.id = options.id || (0, _makeGuid2.default)();
+        this._name = options.name || 'Unnamed Layer';
+        this.animate = false;
+        this._opacity = typeof options.opacity == 'number' ? options.opacity : 1;
+
+        if (this._opacity > 1) {
+            this._opacity = 1;
+        } else if (this._opacity < 0) {
+            this._opacity = 0;
+        }
+
+        this._visible = typeof options.visible === 'boolean' ? options.visible : true;
+
+        this._source = undefined;
+        this.olLayer = undefined;
+        this._loaded = false;
+
+        this._maxResolution = zoomResolutionConvert.zoomToResolution(options.minZoom);
+        if (typeof this._maxResolution !== 'undefined') {
+            this._maxResolution += 0.00001;
+        }
+        this._minResolution = zoomResolutionConvert.zoomToResolution(options.maxZoom);
+
+        this._minZoom = typeof options.minZoom == 'number' ? options.minZoom : undefined;
+        this._maxZoom = typeof options.maxZoom == 'number' ? options.maxZoom : undefined;
+        this._zIndex = typeof options.zIndex == 'number' ? options.zIndex : 0;
+
+        this.loadCallback = typeof options.loadCallback == 'function' ? options.loadCallback : function () {};
+
+        this._legendContent = '';
+
+        if (this._legendCheckbox) {
+            this._legendContent += '<input type="checkbox" ' + (this.visible ? 'checked' : '') + ' ' + ('class="legend-check" id="' + this.id + '-legend-layer-check"><span></span>');
+            this._legendContent += '<label for="' + this.id + '-legend-layer-check" class="legend-layer-name">' + this.name + '</label>';
+        } else {
+            this._legendContent += '<label class="legend-layer-name">' + this.name + '</label>';
+        }
+
+        this._$legendDiv = null;
+        this._applyCollapseCalled = false;
+        this._addLegendContent(typeof options.legendContent === 'string' ? options.legendContent : undefined);
+    }
+
+    /**
+     * base load function, sets _loaded = true if it is not already
+     * @protected
+     * @returns {boolean} if already loaded
+     */
+
+
+    _createClass(LayerBase, [{
+        key: '_load',
+        value: function _load() {
+            if (this.loaded == true) {
+                return true;
+            } else {
+                this._loaded = true;
+
+                return false;
+            }
+        }
+
+        /**
+         * Get the legend html, be sure to only add to the DOM once
+         * @returns {string} html for layer wrapped in a div
+         */
+
+    }, {
+        key: 'getLegendDiv',
+        value: function getLegendDiv() {
+            return '<div class="legend-layer-div" id="' + this.id + '-legend-layer-div">' + this._legendContent + '</div>';
+        }
+
+        /**
+         *
+         * @param {string|undefined} additionalContent - additional content to add to legend
+         * @private
+         */
+
+    }, {
+        key: '_addLegendContent',
+        value: function _addLegendContent(additionalContent) {
+            additionalContent = typeof additionalContent == 'string' ? additionalContent : '';
+
+            var addCollapse = additionalContent.indexOf('<ul>') > -1;
+
+            if (addCollapse) {
+                additionalContent = '<span class="legend-items-expander" title="Expand/Collapse">&#9660;</span>' + additionalContent;
+            }
+
+            this._legendContent += additionalContent;
+
+            this._$legendDiv = (0, _jquery2.default)('#' + this.id + '-legend-layer-div');
+
+            if (this._$legendDiv.length > 0) {
+                this._$legendDiv.append(additionalContent);
+                this.applyCollapse();
+            }
+        }
+
+        /**
+         * add additional content to the legend
+         * @param {string} [additionalContent=] - additonal content to add
+         */
+
+    }, {
+        key: 'addLegendContent',
+        value: function addLegendContent(additionalContent) {
+            this._addLegendContent(additionalContent);
+        }
+    }, {
+        key: 'applyCollapse',
+        value: function applyCollapse() {
+            if (this._applyCollapseCalled) {
+                console.log('collapse already applied');
+
+                return undefined;
+            }
+
+            this._$legendDiv = (0, _jquery2.default)('#' + this.id + '-legend-layer-div');
+
+            if (this._$legendDiv.length > 0) {
+
+                var $expander = this._$legendDiv.find('.legend-items-expander');
+
+                if ($expander.length > 0) {
+                    this._applyCollapseCalled = true;
+
+                    $expander.click(function () {
+                        var $this = (0, _jquery2.default)(this);
+
+                        $this.siblings('ul').slideToggle();
+
+                        if ($this.hasClass('legend-layer-group-collapsed')) {
+                            $this.removeClass('legend-layer-group-collapsed');
+                            $this.html('&#9660;');
+                        } else {
+                            $this.addClass('legend-layer-group-collapsed');
+                            $this.html('&#9654;');
+                        }
+                    });
+
+                    if (this._legendCollapse) {
+                        $expander.trigger('click');
+                    }
+                }
+            }
+        }
+
+        /**
+         * trick to refresh the layer
+         */
+
+    }, {
+        key: 'refresh',
+        value: function refresh() {
+            if (this.source) {
+                this.source.refresh();
+                //let src = this.source;
+                //this.olLayer.setSource(undefined);
+                //this.olLayer.setSource(src);
+            }
+        }
+
+        /**
+         * get the legend content
+         * @type {string}
+         */
+
+    }, {
+        key: 'legendContent',
+        get: function get() {
+            return this._legendContent;
+        }
+
+        /**
+         * set the legend content directly
+         * @param {string} newVal - new content
+         * @protected
+         */
+        ,
+        set: function set(newVal) {
+            this._legendContent = newVal;
+        }
+
+        /**
+         * get the map get params
+         * @type {object}
+         */
+
+    }, {
+        key: 'params',
+        get: function get() {
+            return this._params;
+        }
+
+        /**
+         * set the map get params
+         * @param {object} newParams - new get params
+         * @protected
+         */
+        ,
+        set: function set(newParams) {
+            this._params = newParams;
+        }
+
+        /**
+         * get the minimum resolution
+         * @type {number|*}
+         */
+
+    }, {
+        key: 'minResolution',
+        get: function get() {
+            return this._minResolution;
+        }
+
+        /**
+         * get the maximum resolution
+         * @type {number|*}
+         */
+
+    }, {
+        key: 'maxResolution',
+        get: function get() {
+            return this._maxResolution;
+        }
+
+        /**
+         * get min zoom
+         * @type {number|*}
+         */
+
+    }, {
+        key: 'minZoom',
+        get: function get() {
+            return this._minZoom;
+        }
+
+        /**
+         * get max zoom
+         * @type {number|*}
+         */
+
+    }, {
+        key: 'maxZoom',
+        get: function get() {
+            return this._maxZoom;
+        }
+
+        /**
+         * get the url
+         * @type {string}
+         */
+
+    }, {
+        key: 'url',
+        get: function get() {
+            return this._url;
+        }
+
+        /**
+         * Get the layer visibility
+         * @type {boolean}
+         */
+
+    }, {
+        key: 'visible',
+        get: function get() {
+            return this._visible;
+        }
+
+        /**
+         * Set the layer visibility
+         * @param {boolean} visibility - layer visibility
+         */
+        ,
+        set: function set(visibility) {
+            this._visible = visibility;
+            if (this.olLayer) {
+                this.olLayer.setVisible(this._visible);
+                if (visibility && !this._loaded) {
+                    this._load();
+                }
+            }
+        }
+
+        /**
+         * Get the layer opacity
+         * @type {number}
+         */
+
+    }, {
+        key: 'opacity',
+        get: function get() {
+            return this._opacity;
+        }
+
+        /**
+         * Set the layer opacity
+         * @param {number} opacity - layer opacity
+         */
+        ,
+        set: function set(opacity) {
+            this._opacity = opacity;
+            if (this.olLayer) {
+                this.olLayer.setOpacity(this._opacity);
+            }
+        }
+
+        /**
+         * Get the layer name
+         * @type {string}
+         */
+
+    }, {
+        key: 'name',
+        get: function get() {
+            return this._name;
+        }
+
+        /**
+         * set the layer name
+         * @param {string} newName - the new name
+         */
+        ,
+        set: function set(newName) {
+            this._name = newName;
+        }
+
+        /**
+         * Check if the layer is loaded
+         * @type {boolean}
+         */
+
+    }, {
+        key: 'loaded',
+        get: function get() {
+            return this._loaded;
+        }
+
+        /**
+         * get the layer source
+         * @type {*}
+         */
+
+    }, {
+        key: 'source',
+        get: function get() {
+            return this._source;
+        }
+
+        /**
+         * get the z index
+         * @type {number}
+         */
+
+    }, {
+        key: 'zIndex',
+        get: function get() {
+            return this._zIndex;
+        }
+
+        /**
+         * set the z index
+         * @param {number} newZ - new Z index
+         */
+        ,
+        set: function set(newZ) {
+            this._zIndex = newZ;
+            this.olLayer.setZIndex(this.zIndex);
+        }
+    }]);
+
+    return LayerBase;
+}();
+
+nm.LayerBase = LayerBase;
+exports.default = LayerBase;
+
+},{"../jquery":302,"../olHelpers/zoomResolutionConvert":317,"../util/makeGuid":322,"../util/provide":323}],304:[function(require,module,exports){
+'use strict';
+
+Object.defineProperty(exports, "__esModule", {
+    value: true
+});
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+var _set = function set(object, property, value, receiver) { var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent !== null) { set(parent, property, value, receiver); } } else if ("value" in desc && desc.writable) { desc.value = value; } else { var setter = desc.set; if (setter !== undefined) { setter.call(receiver, value); } } return value; };
+
+var _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if ("value" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };
+
+var _jquery = require('../jquery');
+
+var _jquery2 = _interopRequireDefault(_jquery);
+
+var _LayerBase2 = require('./LayerBase');
+
+var _LayerBase3 = _interopRequireDefault(_LayerBase2);
+
+var _mapMove = require('../olHelpers/mapMove');
+
+var _mapMove2 = _interopRequireDefault(_mapMove);
+
+var _provide = require('../util/provide');
+
+var _provide2 = _interopRequireDefault(_provide);
+
+var _ol = require('../ol/ol');
+
+var _ol2 = _interopRequireDefault(_ol);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
+
+var nm = (0, _provide2.default)('layers');
+
+/**
+ * The make mapMoveGetParams function takes the extent and the zoom level
+ * context is 'this' object, probably want to do something with this.mapMoveParams
+ * @callback mapMoveMakeGetParams
+ * @param {LayerBaseVector} lyr
+ * @param {object} extent
+ * @param {number} extent.minX
+ * @param {number} extent.minY
+ * @param {number} extent.maxX
+ * @param {number} extent.maxY
+ * @param {number} zoomLevel
+ */
+
+/**
+ * The Vector layer base
+ * @augments LayerBase
+ * @abstract
+ */
+
+var LayerBaseVector = function (_LayerBase) {
+    _inherits(LayerBaseVector, _LayerBase);
+
+    /**
+     * The base vector layer
+     * @param {string} url - pass an empty string to prevent default load and add from a json source
+     * @param {object} options - config
+     * @param {string} [options.id] - layer id
+     * @param {string} [options.name=Unnamed Layer] - layer name
+     * @param {number} [options.opacity=1] - opacity
+     * @param {boolean} [options.visible=true] - default visible
+     * @param {number} [options.minZoom=undefined] - min zoom level, 0 - 28
+     * @param {number} [options.maxZoom=undefined] - max zoom level, 0 - 28
+     * @param {object} [options.params={}] the get parameters to include to retrieve the layer
+     * @param {number} [options.zIndex=0] the z index for the layer
+     * @param {function} [options.loadCallback] function to call on load, context this is the layer object
+     * @param {boolean} [options.legendCollapse=false] if the legend item should be initially collapsed
+     * @param {boolean} [options.legendCheckbox=true] if the legend item should have a checkbox for visibility
+     * @param {boolean} [options.legendContent] additional content to add to the legend
+     *
+     * @param {boolean} [options.autoLoad=false] if the layer should auto load if not visible
+     * @param {object} [options.style=undefined] the layer style, use openlayers default style if not defined
+     * @param {boolean} [options.onDemand=false] if the layer should be loaded by extent on map move
+     * @param {number} [options.onDemandDelay=300] delay before the map move callback should be called
+     * @param {mapMoveMakeGetParams} [options.mapMoveMakeGetParams=function(lyr, extent, zoomLevel){}] function to create additional map move params
+     * @param {MapMoveCls} [options.mapMoveObj=mapMove] alternate map move object for use with multi map pages
+     *
+     */
+
+    function LayerBaseVector(url, options) {
+        _classCallCheck(this, LayerBaseVector);
+
+        //prevent regular load if no url has been provided
+
+        var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(LayerBaseVector).call(this, url, options));
+
+        if (_this.url.trim() == '') {
+            _this._loaded = true;
+        }
+
+        _this._style = typeof options.style == 'undefined' ? undefined : options.style;
+
+        if (_this.visible) {
+            _this._autoLoad = true;
+        } else {
+            _this._autoLoad = typeof options['autoLoad'] == 'boolean' ? options['autoLoad'] : false;
+        }
+
+        _this._onDemand = typeof options.onDemand == 'boolean' ? options.onDemand : false;
+        _this._onDemandDelay = typeof options.onDemandDelay == 'number' ? options.onDemandDelay : 300;
+
+        if (options.mapMoveObj) {
+            _this._mapMove = options.mapMoveObj;
+        } else {
+            _this._mapMove = _this._onDemand ? _mapMove2.default : undefined;
+        }
+
+        _this._mapMoveMakeGetParams = typeof options.mapMoveMakeGetParams == 'function' ? options.mapMoveMakeGetParams : function (lyr, extent, zoomLevel) {
+            return {};
+        };
+
+        if (_this._onDemand) {
+            _this._loaded = true;
+            _this._mapMoveParams = {};
+            _this._mapMove.checkInit();
+            _this._mapMove.addVectorLayer(_this);
+        }
+
+        _this._source = new _ol2.default.source.Vector();
+
+        /**
+         *
+         * @type {ol.layer.Vector|ol.layer.Base}
+         */
+        _this.olLayer = new _ol2.default.layer.Vector({
+            source: _this._source,
+            visible: _this.visible,
+            style: _this.style,
+            minResolution: _this._minResolution,
+            maxResolution: _this._maxResolution,
+            zIndex: _this._zIndex
+        });
+        return _this;
+    }
+
+    /**
+     * dummy to be overridden
+     * @param {object} featureCollection - geojson or esrijson object
+     */
+
+
+    _createClass(LayerBaseVector, [{
+        key: 'addFeatures',
+        value: function addFeatures(featureCollection) {
+            console.log('Layer vector base addFeatures is a placeholder and does nothing');
+        }
+
+        /**
+         * Before call to map move callback, can prevent call by returning false
+         * @param {number} zoom - zoom level
+         * @param {string} [evtType=undefined] undefined for initial load, otherwise one of 'change:center', 'change:resolution'
+         * @returns {boolean} if the call should proceed
+         */
+
+    }, {
+        key: 'mapMoveBefore',
+        value: function mapMoveBefore(zoom, evtType) {
+            if (this.minZoom !== undefined) {
+                if (zoom < this.minZoom) {
+                    return false;
+                }
+            }
+
+            if (this.maxZoom !== undefined) {
+                if (zoom > this.maxZoom) {
+                    return false;
+                }
+            }
+
+            return this.visible;
+        }
+
+        /**
+         * callback to generate the parameters passed in the get request
+         * @param {object} extent - extent object
+         * @param {number} extent.minX - minX
+         * @param {number} extent.minY - minY
+         * @param {number} extent.maxX - maxX
+         * @param {number} extent.maxY - maxY
+         * @param {number} zoomLevel - zoom level
+         */
+
+    }, {
+        key: 'mapMoveMakeGetParams',
+        value: function mapMoveMakeGetParams(extent, zoomLevel) {
+            this._mapMoveParams = {};
+            _jquery2.default.extend(this._mapMoveParams, this.params);
+            _jquery2.default.extend(this._mapMoveParams, this._mapMoveMakeGetParams(this, extent, zoomLevel));
+        }
+
+        /**
+         * callback function on map move
+         * @param {object} d - the json response
+         */
+
+    }, {
+        key: 'mapMoveCallback',
+        value: function mapMoveCallback(d) {
+            if (this.source) {
+                this._source.clear();
+            }
+        }
+
+        /**
+         * clear features in the layer
+         */
+
+    }, {
+        key: 'clear',
+        value: function clear() {
+            if (this._source) {
+                this._source.clear();
+            }
+        }
+
+        /**
+         * get on demand delay in miliseconds
+         * @type {number|*}
+         */
+
+    }, {
+        key: 'onDemandDelay',
+        get: function get() {
+            return this._onDemandDelay;
+        }
+
+        /**
+         * get if the layer is autoloaded
+         * @type {boolean}
+         */
+
+    }, {
+        key: 'autoLoad',
+        get: function get() {
+            return this._autoLoad;
+        }
+
+        /**
+         * get the style definition
+         * @type {ol.Style|styleFunc}
+         */
+
+    }, {
+        key: 'style',
+        get: function get() {
+            return this._style;
+        }
+
+        /**
+         * set the style
+         * @param {ol.Style|styleFunc} style - the style or function
+         */
+        ,
+        set: function set(style) {
+            this._style = style;
+            this.olLayer.setStyle(this._style);
+        }
+
+        /**
+         * get the map CRS if it is defined by the map move object
+         * @type {string|*}
+         */
+
+    }, {
+        key: 'mapCrs',
+        get: function get() {
+            if (this._mapMove) {
+                return this._mapMove.map.getView().getProjection().getCode();
+            } else {
+                return undefined;
+            }
+        }
+
+        /**
+         * get the map move object
+         * @type {MapMoveCls|*}
+         */
+
+    }, {
+        key: 'mapMove',
+        get: function get() {
+            return this._mapMove;
+        }
+
+        /**
+         * map move params
+         * @type {object}
+         */
+
+    }, {
+        key: 'mapMoveParams',
+        get: function get() {
+            return this._mapMoveParams;
+        }
+
+        /**
+        * Get the layer visibility
+        * @type {boolean}
+        */
+
+    }, {
+        key: 'visible',
+        get: function get() {
+            return _get(Object.getPrototypeOf(LayerBaseVector.prototype), 'visible', this);
+        }
+
+        /**
+         * Set the layer visibility
+         * @type {boolean}
+         * @override
+         */
+        ,
+        set: function set(visibility) {
+            _set(Object.getPrototypeOf(LayerBaseVector.prototype), 'visible', visibility, this);
+
+            if (this._onDemand) {
+                this.mapMove.triggerLyrLoad(this);
+            }
+        }
+
+        /**
+         * get the layer vector source
+         * @override
+         * @type {ol.source.Vector}
+         */
+
+    }, {
+        key: 'source',
+        get: function get() {
+            return _get(Object.getPrototypeOf(LayerBaseVector.prototype), 'source', this);
+        }
+
+        /**
+         * array of ol features
+         * @type {Array.<ol.Feature>}
+         */
+
+    }, {
+        key: 'features',
+        get: function get() {
+            return this.source.getFeatures();
+        }
+    }]);
+
+    return LayerBaseVector;
+}(_LayerBase3.default);
+
+nm.LayerBaseVector = LayerBaseVector;
+exports.default = LayerBaseVector;
+
+},{"../jquery":302,"../ol/ol":319,"../olHelpers/mapMove":310,"../util/provide":323,"./LayerBase":303}],305:[function(require,module,exports){
+'use strict';
+
+Object.defineProperty(exports, "__esModule", {
+    value: true
+});
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+var _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if ("value" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };
+
+var _jquery = require('../jquery');
+
+var _jquery2 = _interopRequireDefault(_jquery);
+
+var _LayerBaseVector2 = require('./LayerBaseVector');
+
+var _LayerBaseVector3 = _interopRequireDefault(_LayerBaseVector2);
+
+var _provide = require('../util/provide');
+
+var _provide2 = _interopRequireDefault(_provide);
+
+var _ol = require('../ol/ol');
+
+var _ol2 = _interopRequireDefault(_ol);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /**
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                * Created by gavorhes on 11/2/2015.
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                */
+
+var nm = (0, _provide2.default)('layers');
+
+/**
+ * The Vector GeoJson Layer
+ * @augments LayerBaseVector
+ */
+
+var LayerBaseVectorGeoJson = function (_LayerBaseVector) {
+    _inherits(LayerBaseVectorGeoJson, _LayerBaseVector);
+
+    /**
+     * @param {string|undefined|null} url - resource url, set to '' to make blank layer
+     * @param {object} options - config
+     * @param {string} [options.id] - layer id
+     * @param {string} [options.name=Unnamed Layer] - layer name
+     * @param {number} [options.opacity=1] - opacity
+     * @param {boolean} [options.visible=true] - default visible
+     * @param {number} [options.minZoom=undefined] - min zoom level, 0 - 28
+     * @param {number} [options.maxZoom=undefined] - max zoom level, 0 - 28
+     * @param {object} [options.params={}] the get parameters to include to retrieve the layer
+     * @param {number} [options.zIndex=0] the z index for the layer
+     * @param {function} [options.loadCallback] function to call on load, context this is the layer object
+     * @param {boolean} [options.legendCollapse=false] if the legend item should be initially collapsed
+     * @param {boolean} [options.legendCheckbox=true] if the legend item should have a checkbox for visibility
+     * @param {boolean} [options.legendContent] additional content to add to the legend
+     *
+     * @param {boolean} [options.autoLoad=false] if the layer should auto load if not visible
+     * @param {object} [options.style=undefined] the layer style, use openlayers default style if not defined
+     * @param {boolean} [options.onDemand=false] if the layer should be loaded by extent on map move
+     * @param {number} [options.onDemandDelay=300] delay before the map move callback should be called
+     *
+     * @param {object} [options.transform={}] SR transform, set as false for no transform
+     * @param {string} options.transform.dataProjection=EPSG:4326 the data CRS
+     * @param {string} options.transform.featureProjection=EPSG:3857 the feature/map CRS
+     * @param {mapMoveMakeGetParams} [options.mapMoveMakeGetParams=function(lyr, extent, zoomLevel){}] function to create additional map move params
+     * @param {MapMoveCls} [options.mapMoveObj=mapMove] alternate map move object for use with multi map pages
+     */
+
+    function LayerBaseVectorGeoJson(url, options) {
+        _classCallCheck(this, LayerBaseVectorGeoJson);
+
+        url = typeof url == 'string' ? url : '';
+
+        var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(LayerBaseVectorGeoJson).call(this, url, options));
+
+        _this._geoJsonFormat = new _ol2.default.format.GeoJSON();
+
+        _this._transform = options.transform || {};
+        _this._transform.dataProjection = _this._transform.dataProjection || "EPSG:4326";
+        _this._transform.featureProjection = _this._transform.featureProjection || "EPSG:3857";
+
+        if (_this.autoLoad || _this.visible) {
+            _this._load();
+        }
+        return _this;
+    }
+
+    /**
+     * add feature collection
+     * @param {object} featureCollection - as geojson object
+     */
+
+
+    _createClass(LayerBaseVectorGeoJson, [{
+        key: 'addFeatures',
+        value: function addFeatures(featureCollection) {
+            if (this._transform.dataProjection == 'EPSG:3857' && this._transform.featureProjection == 'EPSG:3857') {
+                this._source.addFeatures(this._geoJsonFormat.readFeatures(featureCollection));
+            } else {
+                this._source.addFeatures(this._geoJsonFormat.readFeatures(featureCollection, this._transform));
+            }
+        }
+
+        /**
+         * trigger load features
+         * @protected
+         * @returns {boolean} if already loaded
+         */
+
+    }, {
+        key: '_load',
+        value: function _load() {
+            var _this2 = this;
+
+            if (_get(Object.getPrototypeOf(LayerBaseVectorGeoJson.prototype), '_load', this).call(this)) {
+                return true;
+            }
+
+            _jquery2.default.get(this._url, this._params, function (d) {
+                _this2.addFeatures(d);
+                _this2.loadCallback(_this2);
+            }, 'json').fail(function () {
+                this._loaded = false;
+            });
+
+            return false;
+        }
+
+        /**
+         * callback function on map move
+         * @param {object} d the json response
+         * @override
+         */
+
+    }, {
+        key: 'mapMoveCallback',
+        value: function mapMoveCallback(d) {
+            _get(Object.getPrototypeOf(LayerBaseVectorGeoJson.prototype), 'mapMoveCallback', this).call(this, d);
+            this._source.addFeatures(this._geoJsonFormat.readFeatures(d, this._transform));
+        }
+    }]);
+
+    return LayerBaseVectorGeoJson;
+}(_LayerBaseVector3.default);
+
+nm.LayerBaseVectorGeoJson = LayerBaseVectorGeoJson;
+exports.default = LayerBaseVectorGeoJson;
+
+},{"../jquery":302,"../ol/ol":319,"../util/provide":323,"./LayerBaseVector":304}],306:[function(require,module,exports){
+'use strict';
+
+Object.defineProperty(exports, "__esModule", {
+    value: true
+});
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+var _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if ("value" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };
+
+var _jquery = require('../jquery');
+
+var _jquery2 = _interopRequireDefault(_jquery);
+
+var _LayerBase2 = require('./LayerBase');
+
+var _LayerBase3 = _interopRequireDefault(_LayerBase2);
+
+var _esriToOlStyle = require('../olHelpers/esriToOlStyle');
+
+var esriToOl = _interopRequireWildcard(_esriToOlStyle);
+
+var _mapPopup = require('../olHelpers/mapPopup');
+
+var _mapPopup2 = _interopRequireDefault(_mapPopup);
+
+var _provide = require('../util/provide');
+
+var _provide2 = _interopRequireDefault(_provide);
+
+var _ol = require('../ol/ol');
+
+var _ol2 = _interopRequireDefault(_ol);
+
+function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /**
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                * Created by gavorhes on 12/7/2015.
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                */
+
+
+var nm = (0, _provide2.default)('layers');
+
+/**
+ * esri mapserver layer
+ * @augments LayerBase
+ */
+
+var LayerEsriMapServer = function (_LayerBase) {
+    _inherits(LayerEsriMapServer, _LayerBase);
+
+    /**
+     * The base layer for all others
+     * @param {string} url - resource url
+     * @param {object} options - config
+     * @param {string} [options.id] - layer id
+     * @param {string} [options.name=Unnamed Layer] - layer name
+     * @param {number} [options.opacity=1] - opacity
+     * @param {boolean} [options.visible=true] - default visible
+     * @param {number} [options.minZoom=undefined] - min zoom level, 0 - 28
+     * @param {number} [options.maxZoom=undefined] - max zoom level, 0 - 28
+     * @param {object} [options.params={}] the get parameters to include to retrieve the layer
+     * @param {number} [options.zIndex=0] the z index for the layer
+     * @param {function} [options.loadCallback] function to call on load, context this is the layer object
+     * @param {boolean} [options.legendCollapse=false] if the legend item should be initially collapsed
+     * @param {boolean} [options.legendCheckbox=true] if the legend item should have a checkbox for visibility
+     * @param {boolean} [options.legendContent] additional content to add to the legend
+     * @param {boolean} [options.addPopup=false] if a popup should be added
+     */
+
+    function LayerEsriMapServer(url, options) {
+        _classCallCheck(this, LayerEsriMapServer);
+
+        var _this2 = _possibleConstructorReturn(this, Object.getPrototypeOf(LayerEsriMapServer).call(this, url, options));
+
+        _this2._source = new _ol2.default.source.TileArcGISRest({ url: _this2.url == '' ? undefined : _this2.url });
+
+        _this2.olLayer = new _ol2.default.layer.Tile({
+            source: _this2._source,
+            visible: _this2.visible,
+            opacity: _this2.opacity,
+            minResolution: _this2._minResolution,
+            maxResolution: _this2._maxResolution,
+            zIndex: _this2._zIndex
+        });
+
+        options.addPopup = typeof options.addPopup == 'boolean' ? options.addPopup : false;
+
+        _this2._esriFormat = new _ol2.default.format.EsriJSON();
+        _this2._popupRequest = null;
+
+        _this2.addLegendContent();
+
+        if (options.addPopup) {
+            _mapPopup2.default.addMapServicePopup(_this2);
+        }
+        return _this2;
+    }
+
+    /**
+     * add additional content to the legend
+     * @param {string} [additionalContent=''] additional content for legend
+     */
+
+
+    _createClass(LayerEsriMapServer, [{
+        key: 'addLegendContent',
+        value: function addLegendContent(additionalContent) {
+            var urlCopy = this.url;
+
+            if (urlCopy[urlCopy.length - 1] !== '/') {
+                urlCopy += '/';
+            }
+
+            urlCopy += 'legend?f=pjson&callback=?';
+
+            var _this = this;
+            var superAddLegend = _get(Object.getPrototypeOf(LayerEsriMapServer.prototype), 'addLegendContent', this);
+
+            _jquery2.default.get(urlCopy, {}, function (d) {
+                var newHtml = esriToOl.makeMapServiceLegend(d);
+                superAddLegend.call(_this, newHtml);
+            }, 'json');
+        }
+    }, {
+        key: 'getPopupInfo',
+        value: function getPopupInfo(queryParams) {
+            if (!this.visible) {
+                return;
+            }
+
+            var urlCopy = this.url;
+
+            if (urlCopy[urlCopy.length - 1] != '/') {
+                urlCopy += '/';
+            }
+
+            urlCopy += 'identify?callback=?';
+
+            var _this = this;
+
+            if (this._popupRequest != null) {
+                this._popupRequest.abort();
+            }
+
+            this._popupRequest = _jquery2.default.get(urlCopy, queryParams, function (d) {
+                var _iteratorNormalCompletion = true;
+                var _didIteratorError = false;
+                var _iteratorError = undefined;
+
+                try {
+                    for (var _iterator = d['results'][Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
+                        var r = _step.value;
+
+
+                        var popupHtml = '<table class="esri-popup-table">';
+
+                        for (var a in r['attributes']) {
+                            if (r['attributes'].hasOwnProperty(a)) {
+                                var attrVal = r['attributes'][a];
+
+                                if (attrVal == null || attrVal.toString().toLowerCase() == 'null') {
+                                    continue;
+                                }
+
+                                var attr = a;
+                                if (attr.length > 14) {
+                                    attr = attr.slice(0, 11) + '...';
+                                }
+
+                                popupHtml += '<tr><td>' + attr + '</td><td>' + attrVal + '</td></tr>';
+                            }
+                        }
+
+                        popupHtml += '</table>';
+
+                        _mapPopup2.default.addMapServicePopupContent(_this._esriFormat.readFeature(r), _this, popupHtml, r['layerName']);
+                    }
+                } catch (err) {
+                    _didIteratorError = true;
+                    _iteratorError = err;
+                } finally {
+                    try {
+                        if (!_iteratorNormalCompletion && _iterator.return) {
+                            _iterator.return();
+                        }
+                    } finally {
+                        if (_didIteratorError) {
+                            throw _iteratorError;
+                        }
+                    }
+                }
+            }, 'json').always(function () {
+                _this._popupRequest = null;
+            });
+        }
+
+        /**
+         * overwrite the base load
+         * @protected
+         */
+
+    }, {
+        key: '_load',
+        value: function _load() {}
+
+        /**
+         *
+         * @returns {ol.source.TileArcGISRest} the vector source
+         */
+
+    }, {
+        key: 'source',
+        get: function get() {
+            return _get(Object.getPrototypeOf(LayerEsriMapServer.prototype), 'source', this);
+        }
+    }]);
+
+    return LayerEsriMapServer;
+}(_LayerBase3.default);
+
+nm.LayerEsriMapServer = LayerEsriMapServer;
+exports.default = LayerEsriMapServer;
+
+},{"../jquery":302,"../ol/ol":319,"../olHelpers/esriToOlStyle":308,"../olHelpers/mapPopup":312,"../util/provide":323,"./LayerBase":303}],307:[function(require,module,exports){
+'use strict';
+
+Object.defineProperty(exports, "__esModule", {
+    value: true
+});
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+var _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if ("value" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };
+
+var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol ? "symbol" : typeof obj; }; /**
+                                                                                                                                                                                                                                                   * Created by gavorhes on 12/8/2015.
+                                                                                                                                                                                                                                                   */
+
+var _jquery = require('../jquery');
+
+var _jquery2 = _interopRequireDefault(_jquery);
+
+var _LayerBaseVectorGeoJson = require('./LayerBaseVectorGeoJson');
+
+var _LayerBaseVectorGeoJson2 = _interopRequireDefault(_LayerBaseVectorGeoJson);
+
+var _mapMove = require('../olHelpers/mapMove');
+
+var _mapMove2 = _interopRequireDefault(_mapMove);
+
+var _mapPopup = require('../olHelpers/mapPopup');
+
+var _mapPopup2 = _interopRequireDefault(_mapPopup);
+
+var _provide = require('../util/provide');
+
+var _provide2 = _interopRequireDefault(_provide);
+
+var _ol = require('../ol/ol');
+
+var _ol2 = _interopRequireDefault(_ol);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
+
+var nm = (0, _provide2.default)('layers');
+
+function checkStyleNumber(itsIcon, itsLineStyle, itsIconConfig, itsLineConfig) {
+    "use strict";
+
+    //make sure one and only one configuration is defined;
+
+    var configCount = 0;
+    if (typeof itsIcon == 'string') {
+        configCount++;
+    }
+
+    if ((typeof itsLineStyle === 'undefined' ? 'undefined' : _typeof(itsLineStyle)) == 'object') {
+        itsLineStyle.width = typeof itsLineStyle.width == 'number' ? itsLineStyle.width : 5;
+        itsLineStyle.color = typeof itsLineStyle.color == 'string' ? itsLineStyle.color : 'red';
+        configCount++;
+    }
+
+    if ((typeof itsIconConfig === 'undefined' ? 'undefined' : _typeof(itsIconConfig)) == 'object') {
+        itsIconConfig.defaultName = itsIconConfig.defaultName || 'Other';
+
+        if (typeof itsIconConfig.iconArray == 'undefined') {
+            itsIconConfig.iconArray = [];
+        }
+
+        configCount++;
+    }
+
+    if ((typeof itsLineConfig === 'undefined' ? 'undefined' : _typeof(itsLineConfig)) == 'object') {
+        itsLineConfig.defaultName = itsLineConfig.defaultName || 'Other';
+        itsLineConfig.defaultWidth = itsLineConfig.defaultWidth || 5;
+        itsLineConfig.defaultColor = itsLineConfig.defaultColor || 'red';
+
+        if (typeof itsLineConfig.lineArray == 'undefined') {
+            itsLineConfig.lineArray = [];
+        }
+
+        // set the width if not defined
+        for (var i = 0; i < itsLineConfig.lineArray.length; i++) {
+            if (itsLineConfig.lineArray[i].length == 3) {
+                itsLineConfig.lineArray[i].push(5);
+            }
+        }
+
+        configCount++;
+    }
+
+    if (configCount > 1) {
+        throw 'Only one style config can be defined';
+    }
+}
+
+/**
+ *
+ * @param {string} [itsIcon=undefined] the ITS device type icon image see http://transportal.cee.wisc.edu/its/inventory/icons/
+ *
+ * @param {object} [itsLineStyle=undefined] A single line style
+ * @param {string} itsLineStyle.color the line color as rgb or hex
+ * @param {number} [itsLineStyle.width=5] the line width
+ *
+ * @param {object} [itsIconConfig=undefined] The icon subtype configuration
+ * @param {string} itsIconConfig.prop The property used to define icon attribute symbolization
+ * @param {string} itsIconConfig.defaultName The default name to be used if no other match is found
+ * @param {string} itsIconConfig.defaultIcon The default icon to be used for no other matches
+ * @param {object} [itsIconConfig.iconArray=[]] an array, items with format [property, name, img]
+ *
+ * @param {object} [itsLineConfig=undefined] The property used to define icon attribute symbolization
+ * @param {string} itsLineConfig.prop The property used to define icon attribute symbolization
+ * @param {string} [itsLineConfig.defaultName=Other] The default name to be used if no other match is found
+ * @param {string} [itsLineConfig.defaultColor=red] The default line color to be used for no other matches
+ * @param {number} [itsLineConfig.defaultWidth=5] The default line width to be used for no other matches
+ * @param {object} [itsLineConfig.lineArray=[]] an array, items with format [property, name, color, optional width]
+ * @returns {*} undefined, style, or style function
+ */
+function defineStyle(itsIcon, itsLineStyle, itsIconConfig, itsLineConfig) {
+    "use strict";
+
+    checkStyleNumber(itsIcon, itsLineStyle, itsIconConfig, itsLineConfig);
+
+    var _iconUrlRoot = 'http://transportal.cee.wisc.edu/its/inventory/icons/';
+
+    if (itsIcon) {
+        return new _ol2.default.style.Style({
+            image: new _ol2.default.style.Icon({ src: _iconUrlRoot + itsIcon })
+        });
+    } else if (itsLineStyle) {
+        return new _ol2.default.style.Style({
+            stroke: new _ol2.default.style.Stroke({
+                color: itsLineStyle.color,
+                width: itsLineStyle.width
+            })
+        });
+    } else if (itsIconConfig) {
+        return function (feature) {
+            var symbolProp = feature.getProperties()[itsIconConfig.prop];
+            var iconUrl = _iconUrlRoot + itsIconConfig.defaultIcon;
+
+            for (var i = 0; i < itsIconConfig.iconArray.length; i++) {
+                var thisProp = itsIconConfig.iconArray[i];
+
+                if (symbolProp.trim().toLocaleLowerCase() == thisProp[0].trim().toLocaleLowerCase()) {
+                    iconUrl = _iconUrlRoot + thisProp[2];
+                    break;
+                }
+            }
+
+            return [new _ol2.default.style.Style({
+                image: new _ol2.default.style.Icon({ src: iconUrl })
+            })];
+        };
+    } else if (itsLineConfig) {
+        return function (feature) {
+            var symbolProp = feature.getProperties()[itsLineConfig.prop];
+            var colr = itsLineConfig.defaultColor || 'red';
+            var width = itsLineConfig.defaultWidth || 5;
+
+            for (var i = 0; i < itsLineConfig.lineArray.length; i++) {
+                var thisProp = itsLineConfig.lineArray[i];
+
+                if (symbolProp.trim().toLocaleLowerCase() == thisProp[0].trim().toLocaleLowerCase()) {
+                    colr = thisProp[2];
+                    width = thisProp[3];
+                    break;
+                }
+            }
+
+            return [new _ol2.default.style.Style({
+                stroke: new _ol2.default.style.Stroke({
+                    color: colr,
+                    width: width
+                })
+            })];
+        };
+    } else {
+        return undefined;
+    }
+}
+
+/**
+ *
+ * @param {string} [itsIcon=undefined] the ITS device type icon image see http://transportal.cee.wisc.edu/its/inventory/icons/
+ *
+ * @param {object} [itsLineStyle=undefined] A single line style
+ * @param {string} itsLineStyle.color the line color as rgb or hex
+ * @param {number} [itsLineStyle.width=5] the line width
+ *
+ * @param {object} [itsIconConfig=undefined] The icon subtype configuration
+ * @param {string} itsIconConfig.prop The property used to define icon attribute symbolization
+ * @param {string} itsIconConfig.defaultName The default name to be used if no other match is found
+ * @param {string} itsIconConfig.defaultIcon The default icon to be used for no other matches
+ * @param {object} [itsIconConfig.iconArray=[]] an array, items with format [property, name, img]
+ *
+ * @param {object} [itsLineConfig=undefined] The property used to define icon attribute symbolization
+ * @param {string} itsLineConfig.prop The property used to define icon attribute symbolization
+ * @param {string} [itsLineConfig.defaultName=Other] The default name to be used if no other match is found
+ * @param {string} [itsLineConfig.defaultColor=red] The default line color to be used for no other matches
+ * @param {number} [itsLineConfig.defaultWidth=5] The default line width to be used for no other matches
+ * @param {object} [itsLineConfig.lineArray=[]] an array, items with format [property, name, color, optional width]
+ * @returns {string} html to be added to the legend
+ */
+function defineLegend(itsIcon, itsLineStyle, itsIconConfig, itsLineConfig) {
+    "use strict";
+
+    var iconHeight = 17;
+
+    checkStyleNumber(itsIcon, itsLineStyle, itsIconConfig, itsLineConfig);
+
+    var _iconUrlRoot = 'http://transportal.cee.wisc.edu/its/inventory/icons/';
+
+    if (itsIcon) {
+        return '<img src="' + (_iconUrlRoot + itsIcon) + '" class="legend-layer-icon" height="' + iconHeight + '">';
+    } else if (itsLineStyle) {
+        return '<hr style="height: ' + itsLineStyle.width + 'px; background-color: ' + itsLineStyle.color + '">';
+    } else if (itsIconConfig) {
+        var outHtml = '';
+        outHtml += '<ul>';
+
+        var _iteratorNormalCompletion = true;
+        var _didIteratorError = false;
+        var _iteratorError = undefined;
+
+        try {
+            for (var _iterator = itsIconConfig.iconArray[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
+                var a = _step.value;
+
+                outHtml += '<li><span class="legend-layer-subitem">' + a[1] + '</span><img src="' + (_iconUrlRoot + a[2]) + '" class="legend-layer-icon" height="' + iconHeight + '">';
+            }
+        } catch (err) {
+            _didIteratorError = true;
+            _iteratorError = err;
+        } finally {
+            try {
+                if (!_iteratorNormalCompletion && _iterator.return) {
+                    _iterator.return();
+                }
+            } finally {
+                if (_didIteratorError) {
+                    throw _iteratorError;
+                }
+            }
+        }
+
+        outHtml += '<li><span class="legend-layer-subitem">' + itsIconConfig.defaultName + '</span>' + ('<img src="' + (_iconUrlRoot + itsIconConfig.defaultIcon) + '" class="legend-layer-icon" height="' + iconHeight + '"></li>');
+        outHtml += '</ul>';
+
+        return outHtml;
+    } else if (itsLineConfig) {
+        var _outHtml = '';
+        _outHtml += '<ul>';
+        var _iteratorNormalCompletion2 = true;
+        var _didIteratorError2 = false;
+        var _iteratorError2 = undefined;
+
+        try {
+            for (var _iterator2 = itsLineConfig.lineArray[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {
+                var ls = _step2.value;
+
+                _outHtml += '<li><span class="legend-layer-subitem">' + ls[1] + '</span>' + ('<hr style="height: ' + ls[3] + 'px; background-color: ' + ls[2] + '">');
+            }
+        } catch (err) {
+            _didIteratorError2 = true;
+            _iteratorError2 = err;
+        } finally {
+            try {
+                if (!_iteratorNormalCompletion2 && _iterator2.return) {
+                    _iterator2.return();
+                }
+            } finally {
+                if (_didIteratorError2) {
+                    throw _iteratorError2;
+                }
+            }
+        }
+
+        _outHtml += '<li><span class="legend-layer-subitem">' + itsLineConfig.defaultName + '</span>' + ('<hr style="height: ' + itsLineConfig.defaultWidth + 'px; background-color: ' + itsLineConfig.defaultColor + '"></li>');
+        _outHtml += '</ul>';
+
+        return _outHtml;
+    } else {
+        return '';
+    }
+}
+
+/**
+ * Its Layer class
+ * @augments LayerBaseVectorGeoJson
+ */
+
+var LayerItsInventory = function (_LayerBaseVectorGeoJs) {
+    _inherits(LayerItsInventory, _LayerBaseVectorGeoJs);
+
+    /**
+     * ITS device layer, types available at http://transportal.cee.wisc.edu/its/inventory/
+     * @param {object} options - config
+     * @param {string} [options.id] - layer id
+     * @param {string} [options.name=Unnamed Layer] - layer name
+     * @param {number} [options.opacity=1] - opacity
+     * @param {boolean} [options.visible=true] - default visible
+     * @param {number} [options.minZoom=undefined] - min zoom level, 0 - 28
+     * @param {number} [options.maxZoom=undefined] - max zoom level, 0 - 28
+     * @param {object} [options.params={}] the get parameters to include to retrieve the layer
+     * @param {number} [options.zIndex=0] the z index for the layer
+     * @param {function} [options.loadCallback] function to call on load, context this is the layer object
+     * @param {boolean} [options.legendCollapse=false] if the legend item should be initially collapsed
+     * @param {boolean} [options.legendCheckbox=true] if the legend item should have a checkbox for visibility
+     * @param {boolean} [options.legendContent] additional content to add to the legend
+     *
+     * @param {boolean} [options.autoLoad=false] if the layer should auto load if not visible
+     * @param {object|*} [options.style=undefined] the layer style, use openlayers default style if not defined
+     * @param {boolean} [options.onDemand=false] if the layer should be loaded by extent on map move
+     * @param {number} [options.onDemandDelay=300] delay before the map move callback should be called
+     * @param {MapMoveCls} [options.mapMoveObj=mapMove] alternate map move object for use with multi map pages
+     *
+     * @param {string} options.itsType the ITS device type, use the url flag at http://transportal.cee.wisc.edu/its/inventory/
+     * @param {boolean} [options.addPopup=true] if the popup should be added automatically
+     *
+     * @param {string} [options.itsIcon=undefined] the ITS device type icon image see http://transportal.cee.wisc.edu/its/inventory/icons/
+     *
+     * @param {object} [options.itsLineStyle=undefined] A single line style
+     * @param {string} options.itsLineStyle.color the line color as rgb or hex
+     * @param {number} [options.itsLineStyle.width=5] the line width
+     *
+     * @param {object} [options.itsIconConfig=undefined] The icon subtype configuration
+     * @param {string} options.itsIconConfig.prop The property used to define icon attribute symbolization
+     * @param {string} options.itsIconConfig.defaultName The default name to be used if no other match is found
+     * @param {string} options.itsIconConfig.defaultIcon The default icon to be used for no other matches
+     * @param {object} [options.itsIconConfig.iconArray=[]] an array, items with format [property, name, img]
+     *
+     * @param {object} [options.itsLineConfig=undefined] The property used to define icon attribute symbolization
+     * @param {string} options.itsLineConfig.prop The property used to define icon attribute symbolization
+     * @param {string} [options.itsLineConfig.defaultName=Other] The default name to be used if no other match is found
+     * @param {string} [options.itsLineConfig.defaultColor=red] The default line color to be used for no other matches
+     * @param {number} [options.itsLineConfig.defaultWidth] The default line width to be used for no other matches
+     * @param {object} [options.itsLineConfig.lineArray=[]] an array, items with format [property, name, color, optional width = 5]
+     */
+
+    function LayerItsInventory(options) {
+        _classCallCheck(this, LayerItsInventory);
+
+        if (typeof options.itsType !== 'string') {
+            throw 'its type must be defined';
+        }
+
+        var addToLegend = '';
+
+        // define a style with the helper function if it is not explicitly defined
+        if (typeof options.style == 'undefined') {
+            options.style = defineStyle(options.itsIcon, options.itsLineStyle, options.itsIconConfig, options.itsLineConfig);
+            addToLegend = defineLegend(options.itsIcon, options.itsLineStyle, options.itsIconConfig, options.itsLineConfig);
+        }
+
+        options.params = _typeof(options.params) == 'object' ? options.params : {};
+        _jquery2.default.extend(options.params, { format: 'JSON', resource: options.itsType });
+
+        //add any additional content to the legend
+
+        var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(LayerItsInventory).call(this, 'http://transportal.cee.wisc.edu/its/inventory/', options));
+
+        _this.addLegendContent(addToLegend);
+
+        options.addPopup = typeof options.addPopup == 'boolean' ? options.addPopup : true;
+
+        if (options.addPopup) {
+            _mapPopup2.default.addVectorPopup(_this, function (props) {
+                return '<iframe src="http://transportal.cee.wisc.edu/its/inventory/?feature=' + props['featureGuid'] + '" ' + 'height="250" width="350"></iframe>';
+            });
+        }
+        return _this;
+    }
+
+    /**
+     * callback to generate the parameters passed in the get request
+     * @callback makeGetParams
+     * @param {object} extent - extent object
+     * @param {number} extent.minX - minX
+     * @param {number} extent.minY - minY
+     * @param {number} extent.maxX - maxX
+     * @param {number} extent.maxY - maxY
+     * @param {number} zoomLevel - zoom level
+     */
+
+
+    _createClass(LayerItsInventory, [{
+        key: 'mapMoveMakeGetParams',
+        value: function mapMoveMakeGetParams(extent, zoomLevel) {
+            _get(Object.getPrototypeOf(LayerItsInventory.prototype), 'mapMoveMakeGetParams', this).call(this, extent, zoomLevel);
+            var lowerLeft = new _ol2.default.geom.Point([extent.minX, extent.minY]);
+            lowerLeft.transform(this.mapCrs, "EPSG:4326");
+            var lowerLeftCoordinates = lowerLeft.getCoordinates();
+            var upperRight = new _ol2.default.geom.Point([extent.maxX, extent.maxY]);
+            upperRight.transform(this.mapCrs, "EPSG:4326");
+            var upperRightCoordinates = upperRight.getCoordinates();
+
+            _jquery2.default.extend(this.mapMoveParams, {
+                L: lowerLeftCoordinates[0],
+                R: upperRightCoordinates[0],
+                B: lowerLeftCoordinates[1],
+                T: upperRightCoordinates[1]
+            });
+        }
+    }]);
+
+    return LayerItsInventory;
+}(_LayerBaseVectorGeoJson2.default);
+
+nm.LayerItsInventory = LayerItsInventory;
+exports.default = LayerItsInventory;
+
+},{"../jquery":302,"../ol/ol":319,"../olHelpers/mapMove":310,"../olHelpers/mapPopup":312,"../util/provide":323,"./LayerBaseVectorGeoJson":305}],308:[function(require,module,exports){
+'use strict';
+
+Object.defineProperty(exports, "__esModule", {
+    value: true
+});
+exports.makeFeatureServiceLegendAndSymbol = makeFeatureServiceLegendAndSymbol;
+exports.makeMapServiceLegend = makeMapServiceLegend;
+
+var _provide = require('../util/provide');
+
+var _provide2 = _interopRequireDefault(_provide);
+
+var _ol = require('../ol/ol');
+
+var _ol2 = _interopRequireDefault(_ol);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } /**
+                                                                                                                                                           * Created by gavorhes on 1/4/2016.
+                                                                                                                                                           */
+
+
+var nm = (0, _provide2.default)('olHelpers.esriToOlStyle');
+
+/**
+ * This callback is displayed as part of the Requester class.
+ * @callback styleFunc
+ * @param {ol.Feature} feat - openlayers feature
+ * @param {number} resolution - map resolution
+ */
+
+/**
+ *
+ * @param {Array<number>} colorArray - input color array
+ * @param {number} opacity - the opacity 0 to 1
+ * @returns {string} rgba string
+ * @private
+ */
+function _colorArrayToRgba(colorArray, opacity) {
+    "use strict";
+
+    return 'rgba(' + colorArray[0] + ',' + colorArray[1] + ',' + colorArray[2] + ',' + opacity + ')';
+}
+
+/**
+ * escape html charcters
+ * @param {string} str - input string
+ * @returns {string} escaped string
+ */
+function htmlEscape(str) {
+    return String(str).replace(/&/g, '&amp;').replace(/"/g, '&quot;').replace(/'/g, '&#39;').replace(/</g, '&lt;').replace(/>/g, '&gt;');
+}
+
+nm.htmlEscape = htmlEscape;
+
+var CommonSymbol =
+
+/**
+ * 
+ * @param symbolObj
+ * @param {number} opacity
+ */
+function CommonSymbol(symbolObj, opacity) {
+    _classCallCheck(this, CommonSymbol);
+
+    this.symbolObj = symbolObj;
+    this.opacity = opacity;
+    this.olStyle = undefined;
+    this.legendHtml = '';
+};
+
+var PointSymbol = function (_CommonSymbol) {
+    _inherits(PointSymbol, _CommonSymbol);
+
+    function PointSymbol(symbolObj, opacity) {
+        _classCallCheck(this, PointSymbol);
+
+        var _this2 = _possibleConstructorReturn(this, Object.getPrototypeOf(PointSymbol).call(this, symbolObj, opacity));
+
+        switch (_this2.symbolObj['type']) {
+            case 'esriSMS':
+                var innerColor = _colorArrayToRgba(_this2.symbolObj.color, _this2.opacity);
+                var outerColor = _colorArrayToRgba(_this2.symbolObj.outline.color, _this2.opacity);
+                var outlineWidth = _this2.symbolObj.outline.width;
+                var radius = _this2.symbolObj.size;
+
+                _this2.olStyle = new _ol2.default.style.Style({
+                    image: new _ol2.default.style.Circle({
+                        radius: radius,
+                        fill: new _ol2.default.style.Fill({
+                            color: innerColor
+                        }),
+                        stroke: new _ol2.default.style.Stroke({ color: outerColor, width: outlineWidth })
+                    })
+                });
+                _this2.legendHtml = '<span class="legend-layer-icon" style="color: ' + innerColor + '">&#9679;</span>';
+                break;
+            case 'esriPMS':
+                _this2.olStyle = new _ol2.default.style.Style({
+                    image: new _ol2.default.style.Icon({ src: 'data:image/png;base64,' + _this2.symbolObj['imageData'] })
+                });
+                _this2.legendHtml = '<img class="legend-layer-icon" height="17" src="data:image/png;base64,' + _this2.symbolObj['imageData'] + '">';
+                break;
+            default:
+                console.log(_this2.symbolObj);
+                alert('Point symbol does not handle symbol type: ' + _this2.symbolObj['type']);
+        }
+        return _this2;
+    }
+
+    return PointSymbol;
+}(CommonSymbol);
+
+var LineSymbol = function (_CommonSymbol2) {
+    _inherits(LineSymbol, _CommonSymbol2);
+
+    function LineSymbol(symbolObj, opacity) {
+        _classCallCheck(this, LineSymbol);
+
+        var _this3 = _possibleConstructorReturn(this, Object.getPrototypeOf(LineSymbol).call(this, symbolObj, opacity));
+
+        switch (_this3.symbolObj['type']) {
+            case 'esriSLS':
+                var innerColor = _colorArrayToRgba(_this3.symbolObj.color, _this3.opacity);
+                var lineWidth = _this3.symbolObj.width;
+
+                _this3.olStyle = new _ol2.default.style.Style({
+                    stroke: new _ol2.default.style.Stroke({
+                        color: innerColor,
+                        //lineDash: [4],
+                        width: lineWidth
+                    })
+                });
+
+                _this3.legendHtml = '<span class="legend-layer-icon" ';
+                _this3.legendHtml += 'style="';
+                _this3.legendHtml += 'background-color: ' + innerColor + ';';
+                _this3.legendHtml += 'width: 40px;';
+                _this3.legendHtml += 'height: 4px;';
+                _this3.legendHtml += 'position: relative;';
+                _this3.legendHtml += 'display: inline-block;';
+                _this3.legendHtml += 'top: -1px;';
+                _this3.legendHtml += '"></span>';
+                break;
+            default:
+                console.log(_this3.symbolObj);
+                alert('Line symbol does not handle symbol type: ' + _this3.symbolObj['type']);
+        }
+        return _this3;
+    }
+
+    return LineSymbol;
+}(CommonSymbol);
+
+var PolygonSymbol = function (_CommonSymbol3) {
+    _inherits(PolygonSymbol, _CommonSymbol3);
+
+    function PolygonSymbol(symbolObj, opacity) {
+        _classCallCheck(this, PolygonSymbol);
+
+        var _this4 = _possibleConstructorReturn(this, Object.getPrototypeOf(PolygonSymbol).call(this, symbolObj, opacity));
+
+        switch (_this4.symbolObj['type']) {
+            case 'esriSFS':
+                var innerColor = _colorArrayToRgba(_this4.symbolObj.color, _this4.opacity);
+                var outerColor = _colorArrayToRgba(_this4.symbolObj.outline.color, _this4.opacity);
+                var outlineWidth = _this4.symbolObj.outline.width;
+
+                _this4.olStyle = new _ol2.default.style.Style({
+                    stroke: new _ol2.default.style.Stroke({
+                        color: outerColor,
+                        //lineDash: [4],
+                        width: outlineWidth
+                    }),
+                    fill: new _ol2.default.style.Fill({
+                        color: innerColor
+                    })
+                });
+
+                _this4.legendHtml = '<span class="legend-layer-icon" ';
+                _this4.legendHtml += 'style="';
+                _this4.legendHtml += 'background-color: ' + innerColor + ';';
+                _this4.legendHtml += 'border: solid ' + outerColor + ' 1px;';
+                _this4.legendHtml += 'width: 40px;';
+                _this4.legendHtml += 'height: 9px;';
+                _this4.legendHtml += 'position: relative;';
+                _this4.legendHtml += 'display: inline-block;';
+                _this4.legendHtml += 'top: 2px;';
+                _this4.legendHtml += '"></span>';
+                break;
+
+            default:
+                console.log(_this4.symbolObj);
+                alert('Polygon symbol does handle symbol type: ' + _this4.symbolObj['type']);
+        }
+        return _this4;
+    }
+
+    return PolygonSymbol;
+}(CommonSymbol);
+
+var SymbolGenerator = function SymbolGenerator(esriResponse) {
+    _classCallCheck(this, SymbolGenerator);
+
+    this.opacity = (100 - (esriResponse['drawingInfo']['transparency'] || 0)) / 100;
+    this.renderer = esriResponse['drawingInfo']['renderer'];
+    this.olStyle = undefined;
+    this.legendHtml = '';
+};
+
+var SingleSymbol = function (_SymbolGenerator) {
+    _inherits(SingleSymbol, _SymbolGenerator);
+
+    /**
+     *
+     * @param {object} esriResponse - layer info
+     * @param {Constructor|*} SymbolClass - the symbol class to use
+     */
+
+    function SingleSymbol(esriResponse, SymbolClass) {
+        _classCallCheck(this, SingleSymbol);
+
+        var _this5 = _possibleConstructorReturn(this, Object.getPrototypeOf(SingleSymbol).call(this, esriResponse));
+
+        _this5.symbol = _this5.renderer['symbol'];
+        var symbolObj = new SymbolClass(_this5.symbol, _this5.opacity);
+        _this5.olStyle = symbolObj.olStyle;
+        _this5.legendHtml = symbolObj.legendHtml;
+        return _this5;
+    }
+
+    return SingleSymbol;
+}(SymbolGenerator);
+
+var UniqueValueSymbol = function (_SymbolGenerator2) {
+    _inherits(UniqueValueSymbol, _SymbolGenerator2);
+
+    /**
+     *
+     * @param {object} esriResponse - layer info
+     * @param {Constructor|*} SymbolClass - the Symbol class definition
+     */
+
+    function UniqueValueSymbol(esriResponse, SymbolClass) {
+        _classCallCheck(this, UniqueValueSymbol);
+
+        var _this6 = _possibleConstructorReturn(this, Object.getPrototypeOf(UniqueValueSymbol).call(this, esriResponse));
+
+        _this6.uniqueValueInfos = _this6.renderer['uniqueValueInfos'];
+        _this6.propertyName = _this6.renderer['field1'];
+        _this6.defaultSymbol = _this6.renderer['defaultSymbol'];
+
+        if (_this6.defaultSymbol) {
+            var symbolObj = new SymbolClass(_this6.defaultSymbol, _this6.opacity);
+            _this6.defaultStyle = symbolObj.olStyle;
+            _this6.defaultLabelHtml = '<span class="legend-layer-subitem">' + htmlEscape(_this6.renderer['defaultLabel']) + '</span>' + symbolObj.legendHtml;
+        } else {
+            _this6.defaultStyle = undefined;
+            _this6.defaultLabelHtml = 'other';
+        }
+
+        _this6.valueArray = [];
+        _this6.labelArray = [];
+        _this6.legendArray = [];
+        _this6.propertyStyleLookup = {};
+
+        var _iteratorNormalCompletion = true;
+        var _didIteratorError = false;
+        var _iteratorError = undefined;
+
+        try {
+            for (var _iterator = _this6.uniqueValueInfos[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
+                var uniqueVal = _step.value;
+
+                _this6.labelArray.push(uniqueVal['label']);
+                _this6.valueArray.push(uniqueVal['value']);
+                var uniqueSym = new SymbolClass(uniqueVal.symbol, _this6.opacity);
+                _this6.legendArray.push('<span class="legend-layer-subitem">' + htmlEscape(uniqueVal['label']) + '</span>' + uniqueSym.legendHtml);
+                _this6.propertyStyleLookup[uniqueVal['value']] = uniqueSym.olStyle;
+            }
+        } catch (err) {
+            _didIteratorError = true;
+            _iteratorError = err;
+        } finally {
+            try {
+                if (!_iteratorNormalCompletion && _iterator.return) {
+                    _iterator.return();
+                }
+            } finally {
+                if (_didIteratorError) {
+                    throw _iteratorError;
+                }
+            }
+        }
+
+        var _this = _this6;
+
+        _this6.olStyle = function (feature, resolution) {
+            var checkProperties = feature.getProperties();
+            var checkProperty = checkProperties[_this.propertyName];
+
+            var returnValue = void 0;
+            if (_this.propertyStyleLookup[checkProperty] !== undefined) {
+                returnValue = [_this.propertyStyleLookup[checkProperty]];
+            } else {
+                returnValue = [_this.defaultStyle];
+            }
+
+            return returnValue;
+        };
+
+        if (_this6.defaultLabelHtml !== null) {
+            _this6.legendArray.push(_this6.defaultLabelHtml);
+        }
+
+        _this6.legendHtml = '<ul>';
+        var _iteratorNormalCompletion2 = true;
+        var _didIteratorError2 = false;
+        var _iteratorError2 = undefined;
+
+        try {
+            for (var _iterator2 = _this6.legendArray[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {
+                var h = _step2.value;
+
+                _this6.legendHtml += '<li>' + h + '</li>';
+            }
+        } catch (err) {
+            _didIteratorError2 = true;
+            _iteratorError2 = err;
+        } finally {
+            try {
+                if (!_iteratorNormalCompletion2 && _iterator2.return) {
+                    _iterator2.return();
+                }
+            } finally {
+                if (_didIteratorError2) {
+                    throw _iteratorError2;
+                }
+            }
+        }
+
+        _this6.legendHtml += '</ul>';
+        return _this6;
+    }
+
+    return UniqueValueSymbol;
+}(SymbolGenerator);
+
+/**
+ * style and legend object
+ * @typedef {object} styleAndLegend
+ * @property {styleFunc} style - style function
+ * @property {string} legend - legend content
+ */
+
+/**
+ *
+ * @param {object} esriResponse - layer info
+ * @returns {styleAndLegend} style and legend object
+ */
+
+
+function makeFeatureServiceLegendAndSymbol(esriResponse) {
+    "use strict";
+
+    var renderer = esriResponse['drawingInfo']['renderer'];
+    var symbolLegendOut = null;
+
+    switch (renderer['type']) {
+        case 'simple':
+            switch (esriResponse['geometryType']) {
+                case 'esriGeometryPoint':
+                    symbolLegendOut = new SingleSymbol(esriResponse, PointSymbol);
+                    break;
+                case 'esriGeometryPolyline':
+                    symbolLegendOut = new SingleSymbol(esriResponse, LineSymbol);
+                    break;
+                case 'esriGeometryPolygon':
+                    symbolLegendOut = new SingleSymbol(esriResponse, PolygonSymbol);
+                    break;
+                default:
+                    console.log(esriResponse);
+                    alert(esriResponse['geometryType'] + ' not handled');
+            }
+            break;
+        case 'uniqueValue':
+            switch (esriResponse['geometryType']) {
+                case 'esriGeometryPoint':
+                    symbolLegendOut = new UniqueValueSymbol(esriResponse, PointSymbol);
+                    break;
+                case 'esriGeometryPolyline':
+                    symbolLegendOut = new UniqueValueSymbol(esriResponse, LineSymbol);
+                    break;
+                case 'esriGeometryPolygon':
+                    symbolLegendOut = new UniqueValueSymbol(esriResponse, PolygonSymbol);
+                    break;
+                default:
+                    console.log(esriResponse);
+                    alert(esriResponse['geometryType'] + ' not handled');
+            }
+            break;
+        default:
+            alert('not handled renderer type: ' + renderer['type']);
+    }
+
+    if (symbolLegendOut == null) {
+        return { style: undefined, legend: '' };
+    } else {
+        return { style: symbolLegendOut.olStyle, legend: symbolLegendOut.legendHtml };
+    }
+}
+
+nm.makeFeatureServiceLegendAndSymbol = makeFeatureServiceLegendAndSymbol;
+
+/**
+ *
+ * @param {object} lyrObject - the layer as defined in the response
+ * @param {boolean} [iconsOnly=false] use only icons
+ * @returns {string} legend html
+ */
+function mapServiceLegendItem(lyrObject, iconsOnly) {
+
+    iconsOnly = typeof iconsOnly == 'boolean' ? iconsOnly : false;
+    var layerName = lyrObject['layerName'];
+    var legendItems = lyrObject['legend'];
+    var legendHtml = '';
+
+    if (legendItems.length == 1) {
+        legendHtml = '<img class="legend-layer-icon" height="17" src="data:image/png;base64,' + legendItems[0]['imageData'] + '">';
+    } else {
+        legendHtml += '<span class="legend-items-expander" title="Expand/Collapse">&#9660;</span><ul>';
+        for (var i = 0; i < legendItems.length; i++) {
+            legendHtml += '<li>';
+            legendHtml += '<span class="legend-layer-subitem">' + htmlEscape(legendItems[i]['label']) + '</span>';
+            legendHtml += '<img class="legend-layer-icon" height="17" src="data:image/png;base64,' + legendItems[i]['imageData'] + '">';
+            legendHtml += '</li>';
+        }
+        legendHtml += '</ul>';
+    }
+
+    if (!iconsOnly) {
+        legendHtml = '<span class="legend-layer-subitem">' + layerName + '</span>' + legendHtml;
+    }
+
+    return legendHtml;
+}
+
+/**
+ * make map service legent
+ * @param {object} esriResponse - layer info
+ * @returns {string} legend content
+ */
+function makeMapServiceLegend(esriResponse) {
+    "use strict";
+
+    var newLegendHtml = '';
+
+    var layers = esriResponse['layers'];
+
+    if (layers.length == 1) {
+        newLegendHtml += mapServiceLegendItem(layers[0], true);
+    } else {
+        newLegendHtml += '<ul>';
+        for (var i = 0; i < layers.length; i++) {
+            newLegendHtml += '<li>' + mapServiceLegendItem(layers[i]) + '</li>';
+        }
+        newLegendHtml += '</ul>';
+    }
+
+    return newLegendHtml;
+}
+
+nm.makeMapServiceLegend = makeMapServiceLegend;
+
+},{"../ol/ol":319,"../util/provide":323}],309:[function(require,module,exports){
+'use strict';
+
+Object.defineProperty(exports, "__esModule", {
+    value: true
+});
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); /**
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      * Created by gavorhes on 12/8/2015.
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      */
+
+
+var _provide = require('../util/provide');
+
+var _provide2 = _interopRequireDefault(_provide);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+var nm = (0, _provide2.default)('olHelpers');
+
+/**
+ * base interaction
+ */
+
+var MapInteractionBase = function () {
+
+    /**
+     * map interaction base
+     * @param {string} subtype - the interaction subtype
+     */
+
+    function MapInteractionBase(subtype) {
+        _classCallCheck(this, MapInteractionBase);
+
+        this._map = undefined;
+        this._initialized = false;
+        this._subtype = subtype;
+    }
+
+    /**
+     * base initializer, returns true for already initialized
+     * @param {ol.Map} theMap - the ol Map
+     * @returns {boolean} true for already initialized
+     */
+
+
+    _createClass(MapInteractionBase, [{
+        key: 'init',
+        value: function init(theMap) {
+            if (!this._initialized) {
+                this._map = theMap;
+                this._initialized = true;
+
+                return false;
+            }
+
+            return true;
+        }
+
+        /**
+         * get reference to the ol map object
+         * @returns {ol.Map} the map object
+         */
+
+    }, {
+        key: '_checkInit',
+
+
+        /**
+         * Check the initialization status and throw exception if not valid yet
+         * @protected
+         */
+        value: function _checkInit() {
+            if (!this.initialized) {
+                var msg = this._subtype + ' object not initialized';
+                alert(msg);
+                console.log(msg);
+                throw msg;
+            }
+        }
+
+        /**
+         * Check the initialization status and throw exception if not valid yet
+         */
+
+    }, {
+        key: 'checkInit',
+        value: function checkInit() {
+            this._checkInit();
+        }
+    }, {
+        key: 'map',
+        get: function get() {
+            return this._map;
+        }
+
+        /**
+         * get if is initialized
+         * @returns {boolean} is initialized
+         */
+
+    }, {
+        key: 'initialized',
+        get: function get() {
+            return this._initialized;
+        }
+    }]);
+
+    return MapInteractionBase;
+}();
+
+nm.MapInteractionBase = MapInteractionBase;
+exports.default = MapInteractionBase;
+
+},{"../util/provide":323}],310:[function(require,module,exports){
+'use strict';
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+var _mapMoveCls = require('./mapMoveCls');
+
+var _mapMoveCls2 = _interopRequireDefault(_mapMoveCls);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+/**
+ * The single map move object catch is that it is common to multimap pages
+ * @type {MapMoveCls}
+ */
+exports.default = new _mapMoveCls2.default(); /**
+                                               * Created by gavorhes on 11/3/2015.
+                                               */
+
+},{"./mapMoveCls":311}],311:[function(require,module,exports){
+'use strict';
+
+Object.defineProperty(exports, "__esModule", {
+    value: true
+});
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+var _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if ("value" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };
+
+var _jquery = require('../jquery');
+
+var _jquery2 = _interopRequireDefault(_jquery);
+
+var _mapInteractionBase = require('./mapInteractionBase');
+
+var _mapInteractionBase2 = _interopRequireDefault(_mapInteractionBase);
+
+var _checkDefined = require('../util/checkDefined');
+
+var checkDefined = _interopRequireWildcard(_checkDefined);
+
+var _provide = require('../util/provide');
+
+var _provide2 = _interopRequireDefault(_provide);
+
+var _makeGuid = require('../util/makeGuid');
+
+var _makeGuid2 = _interopRequireDefault(_makeGuid);
+
+function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /**
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                * Created by gavorhes on 11/3/2015.
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                */
+
+var nm = (0, _provide2.default)('olHelpers');
+
+/**
+ * assists with map move interactions, trigger callback functions
+ * @augments MapInteractionBase
+ */
+
+var MapMoveCls = function (_MapInteractionBase) {
+    _inherits(MapMoveCls, _MapInteractionBase);
+
+    /**
+     * constructor called implicitly
+     */
+
+    function MapMoveCls() {
+        _classCallCheck(this, MapMoveCls);
+
+        var _this2 = _possibleConstructorReturn(this, Object.getPrototypeOf(MapMoveCls).call(this, 'map move'));
+
+        _this2._arrLyrRequest = [];
+        _this2._arrLyrTimeout = [];
+        _this2._arrLayer = [];
+        _this2._lookupLayer = {};
+
+        _this2._mapMoveCallbacks = [];
+        _this2._mapMoveCallbacksLookup = {};
+        _this2._mapMoveCallbackDelays = [];
+        _this2._mapMoveCallbackContext = [];
+        _this2._mapMoveCallbackTimeout = [];
+
+        _this2._mapExtent = undefined;
+        _this2._zoomLevel = undefined;
+        return _this2;
+    }
+
+    /**
+     * initialize the map move object
+     * @param {ol.Map} theMap - the ol map
+     */
+
+
+    _createClass(MapMoveCls, [{
+        key: 'init',
+        value: function init(theMap) {
+            if (_get(Object.getPrototypeOf(MapMoveCls.prototype), 'init', this).call(this, theMap)) {
+                return;
+            }
+
+            var _this = this;
+
+            this.map.getView().on(['change:center', 'change:resolution'], function (e) {
+
+                _this._updateMapExtent();
+
+                // trigger the layer updates
+                for (var i = 0; i < _this._arrLayer.length; i++) {
+                    _this.triggerLyrLoad(_this._arrLayer[i], i, e.type);
+                }
+
+                // trigger the map callbacks
+                for (var _i = 0; _i < _this._mapMoveCallbacks.length; _i++) {
+                    _this.triggerMoveCallback(_i, e.type);
+                }
+            });
+        }
+    }, {
+        key: '_updateMapExtent',
+        value: function _updateMapExtent() {
+            var theView = this.map.getView();
+            this._zoomLevel = theView.getZoom();
+
+            var extentArray = theView.calculateExtent(this.map.getSize());
+
+            this._mapExtent = {
+                minX: extentArray[0],
+                minY: extentArray[1],
+                maxX: extentArray[2],
+                maxY: extentArray[3]
+            };
+        }
+
+        /**
+         * return the map extent
+         */
+
+    }, {
+        key: 'triggerLyrLoad',
+
+
+        /**
+         * Trigger the layer load
+         * @param {LayerBaseVector|*} lyr - the layer being acted on
+         * @param {number} [index=undefined] - index of the layer
+         * @param {string|*} [eventType=undefined] the event triggering the load, as 'change:center' or 'change:resolution'
+         */
+        value: function triggerLyrLoad(lyr, index, eventType) {
+            var _this3 = this;
+
+            if (checkDefined.undefinedOrNull(lyr) && checkDefined.undefinedOrNull(index)) {
+                throw 'need to define lyr or index';
+            } else if (checkDefined.definedAndNotNull(lyr) && checkDefined.undefinedOrNull(index)) {
+                index = this._arrLayer.indexOf(lyr);
+            } else if (checkDefined.undefinedOrNull(lyr) && checkDefined.definedAndNotNull(index)) {
+                lyr = this._arrLayer[index];
+            }
+
+            // clear the timeout
+            if (this._arrLyrTimeout[index] != null) {
+                clearTimeout(this._arrLyrTimeout[index]);
+                this._arrLyrTimeout[index] = null;
+            }
+
+            // abort if necessary and clear the request
+            if (this._arrLyrRequest[index] != null && this._arrLyrRequest[index] != 4) {
+                this._arrLyrRequest[index].abort();
+                this._arrLyrRequest[index] = null;
+            }
+
+            // dummy callback used if before load returns false
+            var callbackFunc = function callbackFunc() {};
+
+            if (lyr.mapMoveBefore(this._zoomLevel, eventType)) {
+                (function () {
+                    lyr.mapMoveMakeGetParams(_this3._mapExtent, _this3._zoomLevel);
+
+                    var _this = _this3;
+
+                    callbackFunc = function callbackFunc() {
+                        function innerFunction(theLayer, theIndex) {
+                            var _innerThis = this;
+                            this._arrLyrRequest[theIndex] = _jquery2.default.get(theLayer.url, theLayer.mapMoveParams, function (d) {
+                                /**
+                                 * @type {LayerBaseVector}
+                                 */
+                                theLayer.mapMoveCallback(d);
+                                theLayer.loadCallback();
+                            }, 'json').fail(function (jqXHR) {
+                                if (jqXHR.statusText != 'abort') {
+                                    console.log('failed');
+                                    console.log(theLayer.url);
+                                    console.log(theLayer.mapMoveParams);
+                                }
+                            }).always(function () {
+                                _innerThis._arrLyrTimeout[theIndex] = null;
+                                _innerThis._arrLyrRequest[theIndex] = null;
+                            });
+                        }
+                        innerFunction.call(_this, lyr, index);
+                    };
+                })();
+            } else {
+                lyr.clear();
+            }
+            this._arrLyrTimeout[index] = setTimeout(callbackFunc, lyr.onDemandDelay);
+        }
+
+        /**
+         * trigger the map move call back at the given index
+         * @param {number} ind - the index of the layer
+         * @param {string|*} [eventType=undefined] the event triggering the load as 'change:center' or 'change:resolution'
+         * @param {string} [functionId=undefined] the function id used to reference the added callback function
+         */
+
+    }, {
+        key: 'triggerMoveCallback',
+        value: function triggerMoveCallback(ind, eventType, functionId) {
+
+            if (typeof ind == 'undefined' && typeof functionId == 'undefined') {
+                throw 'either the function index or the id must be defined';
+            }
+
+            if (typeof ind !== 'number') {
+                ind = this._mapMoveCallbacks.indexOf(this._mapMoveCallbacksLookup[functionId]);
+            }
+
+            if (ind < 0) {
+                console.log('function not found');
+
+                return;
+            }
+
+            // clear the timeout
+            if (this._mapMoveCallbackTimeout[ind] != null) {
+                clearTimeout(this._mapMoveCallbackTimeout[ind]);
+                this._mapMoveCallbackTimeout[ind] = null;
+            }
+
+            var ctx = this._mapMoveCallbackContext[ind];
+            var theFunc = this._mapMoveCallbacks[ind];
+
+            var _this = this;
+
+            var f = function f() {
+                if (ctx !== null) {
+                    theFunc.call(ctx, _this._mapExtent, _this._zoomLevel, eventType);
+                } else {
+                    theFunc(_this._mapExtent, _this._zoomLevel, eventType);
+                }
+            };
+
+            this._mapMoveCallbackTimeout[ind] = setTimeout(f, this._mapMoveCallbackDelays[ind]);
+        }
+
+        /**
+         * Add a layer to the interaction
+         * @param {LayerBaseVector|*} lyr - layer to add
+         * @param {boolean} [triggerOnAdd=true] - if the layer should be loaded on add
+         */
+
+    }, {
+        key: 'addVectorLayer',
+        value: function addVectorLayer(lyr, triggerOnAdd) {
+            if (this._arrLayer.indexOf(lyr) > -1) {
+                console.log('already added ' + lyr.name + ' to map move');
+
+                return;
+            }
+            this._checkInit();
+
+            this._arrLyrRequest.push(null);
+            this._arrLyrTimeout.push(null);
+            this._arrLayer.push(lyr);
+            this._lookupLayer[lyr.id] = lyr;
+
+            triggerOnAdd = typeof triggerOnAdd == 'boolean' ? triggerOnAdd : true;
+
+            if (triggerOnAdd) {
+                if (this._mapExtent === undefined) {
+                    this._updateMapExtent();
+                }
+                this.triggerLyrLoad(lyr, this._arrLayer.length - 1);
+            }
+        }
+
+        /**
+         * This callback is displayed as a global member.
+         * @callback mapMoveCallbackFunction
+         * @param {object} extent - extent object
+         * @param {number} extent.minX - minX
+         * @param {number} extent.minY - minY
+         * @param {number} extent.maxX - maxX
+         * @param {number} extent.maxY - maxY
+         * @param {number} zoomLevel - zoom level
+         * @param {string} [evtType=undefined] undefined for initial load, otherwise one of 'change:center', 'change:resolution'
+         */
+
+        /**
+         * add a callback to the map move event
+         * @param {mapMoveCallbackFunction} func - callback function
+         * @param {*} context - the context to use for this function
+         * @param {number} [delay=50] the delay before call load
+         * @param {boolean} [triggerOnAdd=true] if the layer should be loaded on add to mapMove
+         * @param {string} [functionId=undefined] optional id to reference the function later for outside triggering
+         */
+
+    }, {
+        key: 'addCallback',
+        value: function addCallback(func, context, delay, triggerOnAdd, functionId) {
+
+            if (this._mapMoveCallbacks.indexOf(func) > -1) {
+                console.log('this function already added to map move');
+
+                return;
+            }
+            this._checkInit();
+            if (!functionId) {
+                functionId = (0, _makeGuid2.default)();
+            }
+
+            this._mapMoveCallbacks.push(func);
+            this._mapMoveCallbacksLookup[functionId] = func;
+            this._mapMoveCallbackDelays.push(typeof delay == 'number' ? delay : 50);
+            this._mapMoveCallbackContext.push(checkDefined.definedAndNotNull(context) ? context : null);
+            this._mapMoveCallbackTimeout.push(null);
+
+            triggerOnAdd = typeof triggerOnAdd == 'boolean' ? triggerOnAdd : true;
+
+            if (triggerOnAdd) {
+                if (this._mapExtent === undefined) {
+                    this._updateMapExtent();
+                }
+                this.triggerMoveCallback(this._mapMoveCallbacks.length - 1);
+            }
+        }
+    }, {
+        key: 'mapExtent',
+        get: function get() {
+            if (!this._mapExtent) {
+                this._updateMapExtent();
+            }
+
+            return this._mapExtent;
+        }
+    }]);
+
+    return MapMoveCls;
+}(_mapInteractionBase2.default);
+
+nm.MapMoveCls = MapMoveCls;
+exports.default = MapMoveCls;
+
+},{"../jquery":302,"../util/checkDefined":320,"../util/makeGuid":322,"../util/provide":323,"./mapInteractionBase":309}],312:[function(require,module,exports){
+'use strict';
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+var _mapPopupCls = require('./mapPopupCls');
+
+var _mapPopupCls2 = _interopRequireDefault(_mapPopupCls);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+/**
+ * The single popup object catch is that it is common to multimap pages
+ * @type {MapPopupCls}
+ */
+exports.default = new _mapPopupCls2.default(); /**
+                                                * Created by gavorhes on 11/3/2015.
+                                                */
+
+},{"./mapPopupCls":313}],313:[function(require,module,exports){
+'use strict';
+
+Object.defineProperty(exports, "__esModule", {
+    value: true
+});
+
+var _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if ("value" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); /**
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      * Created by gavorhes on 11/3/2015.
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      */
+
+var _jquery = require('../jquery');
+
+var _jquery2 = _interopRequireDefault(_jquery);
+
+var _mapInteractionBase = require('./mapInteractionBase');
+
+var _mapInteractionBase2 = _interopRequireDefault(_mapInteractionBase);
+
+var _propertiesZoomStyle = require('../olHelpers/propertiesZoomStyle');
+
+var _propertiesZoomStyle2 = _interopRequireDefault(_propertiesZoomStyle);
+
+var _provide = require('../util/provide');
+
+var _provide2 = _interopRequireDefault(_provide);
+
+var _ol = require('../ol/ol');
+
+var _ol2 = _interopRequireDefault(_ol);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+var nm = (0, _provide2.default)('olHelpers');
+
+var _FeatureLayerProperties = function () {
+
+    /**
+     *
+     * @param {ol.Feature} feature the feature
+     * @param {LayerBaseVector|*} layer - the layer in the popup
+     * @param {number} layerIndex - index of the layer
+     * @param {ol.layer.Vector} selectionLayer - the ol selection layer
+     * @param {string} [esriLayerName=undefined] - esri layer name
+     */
+
+    function _FeatureLayerProperties(feature, layer, layerIndex, selectionLayer, esriLayerName) {
+        _classCallCheck(this, _FeatureLayerProperties);
+
+        this.feature = feature;
+        this.layer = layer;
+        this.layerIndex = layerIndex;
+        this.selectionLayer = selectionLayer;
+        this.popupContent = '';
+        this.esriLayerName = typeof esriLayerName == 'string' ? esriLayerName : undefined;
+    }
+
+    _createClass(_FeatureLayerProperties, [{
+        key: 'layerName',
+        get: function get() {
+            if (typeof this.esriLayerName == 'string') {
+                return this.esriLayerName;
+            } else {
+                return this.layer.name;
+            }
+        }
+    }]);
+
+    return _FeatureLayerProperties;
+}();
+
+/**
+ * map popup class
+ * @augments MapInteractionBase
+ */
+
+
+var MapPopupCls = function (_MapInteractionBase) {
+    _inherits(MapPopupCls, _MapInteractionBase);
+
+    /**
+     * Definition for openlayers style function
+     * @callback olStyleFunction
+     * &param feature the openlayers vector feature
+     * $param
+     */
+
+    /**
+     * Definition for popup changed callback functions
+     * @callback popupChangedFunction
+     * @param $popContent jquery reference to the popup content
+     */
+
+    /**
+     * map popup constructor
+     */
+
+    function MapPopupCls() {
+        _classCallCheck(this, MapPopupCls);
+
+        var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(MapPopupCls).call(this, 'map popup'));
+
+        _this._arrPopupLayerIds = [];
+        _this._arrPopupLayerNames = [];
+        /**
+         *
+         * @type {Array<LayerBaseVector>}
+         * @private
+         */
+        _this._arrPopupLayers = [];
+        _this._arrPopupOlLayers = [];
+        _this._arrPopupContentFunction = [];
+        _this._$popupContainer = undefined;
+        _this._$popupContent = undefined;
+        _this._$popupCloser = undefined;
+        _this._popupOverlay = undefined;
+        _this._selectionLayers = [];
+        _this._selectionLayerLookup = {};
+        _this._mapClickFunctions = [];
+
+        //let a = function($jqueryContent){console.log($jqueryContent)};
+        //this._popupChangedLookup = {'a': a};
+        _this._popupChangedFunctions = [];
+        /**
+         *
+         * @type {Array<LayerEsriMapServer>}
+         * @private
+         */
+        _this._esriMapServiceLayers = [];
+
+        _this._popupOpen = false;
+        _this._popupCoordinate = null;
+
+        /**
+         *
+         * @type {Array.<_FeatureLayerProperties>}
+         */
+        _this._passThroughLayerFeatureArray = [];
+
+        _this._currentPopupIndex = -1;
+        _this._popupContentLength = 0;
+
+        return _this;
+    }
+
+    /**
+     * map popup initialization
+     * @param {ol.Map} theMap - the ol map
+     */
+
+
+    _createClass(MapPopupCls, [{
+        key: 'init',
+        value: function init(theMap) {
+            var _this2 = this;
+
+            if (_get(Object.getPrototypeOf(MapPopupCls.prototype), 'init', this).call(this, theMap)) {
+                return;
+            }
+            var $map = (0, _jquery2.default)('#' + this.map.getTarget());
+
+            $map.append('<div class="ol-popup">' + '<a href="#" class="ol-popup-closer"></a>' + '<div class="popup-content"></div>' + '</div>');
+
+            this._$popupContainer = $map.find('.ol-popup');
+            this._$popupContent = $map.find('.popup-content');
+            this._$popupCloser = $map.find('.ol-popup-closer');
+
+            this._popupOverlay = new _ol2.default.Overlay({
+                element: this._$popupContainer[0],
+                autoPan: true,
+                autoPanAnimation: {
+                    duration: 250
+                }
+            });
+
+            this._map.addOverlay(this._popupOverlay);
+
+            this._$popupCloser.click(function () {
+                _this2.closePopup();
+            });
+
+            // display popup on click
+            this._map.on('singleclick', function (evt) {
+                _this2.closePopup();
+                _this2._popupCoordinate = evt.coordinate;
+
+                if (_this2._esriMapServiceLayers.length > 0) {
+                    var queryParams = {
+                        geometry: evt.coordinate.join(','),
+                        geometryType: 'esriGeometryPoint',
+                        layers: 'all',
+                        sr: _this2._map.getView().getProjection().getCode().split(':')[1],
+                        mapExtent: _this2._map.getView().calculateExtent(_this2._map.getSize()).join(','),
+                        imageDisplay: _this2._map.getSize().join(',') + ',96',
+                        returnGeometry: true,
+                        tolerance: 15,
+                        f: 'pjson'
+                    };
+
+                    var _iteratorNormalCompletion = true;
+                    var _didIteratorError = false;
+                    var _iteratorError = undefined;
+
+                    try {
+                        for (var _iterator = _this2._esriMapServiceLayers[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
+                            var l = _step.value;
+
+                            l.getPopupInfo(queryParams, _this2._selectionLayerLookup[l.id]);
+                        }
+                    } catch (err) {
+                        _didIteratorError = true;
+                        _iteratorError = err;
+                    } finally {
+                        try {
+                            if (!_iteratorNormalCompletion && _iterator.return) {
+                                _iterator.return();
+                            }
+                        } finally {
+                            if (_didIteratorError) {
+                                throw _iteratorError;
+                            }
+                        }
+                    }
+                }
+
+                var layerFeatureObjectArray = _this2._featuresAtPixel(evt.pixel);
+
+                /**
+                 *
+                 * @type {Array.<_FeatureLayerProperties>}
+                 */
+                _this2._passThroughLayerFeatureArray = [];
+                _this2._currentPopupIndex = -1;
+
+                for (var i = 0; i < layerFeatureObjectArray.length; i++) {
+                    var featObj = layerFeatureObjectArray[i];
+
+                    var props = featObj.feature.getProperties();
+
+                    var popupContentResponse = _this2._arrPopupContentFunction[featObj.layerIndex](props, _this2._$popupContent);
+
+                    //skip if return was false
+                    if (popupContentResponse === false) {
+                        //continue;
+                    } else if (typeof popupContentResponse == 'string') {
+                            featObj.popupContent = popupContentResponse;
+                            _this2._passThroughLayerFeatureArray.push(featObj);
+                        } else {
+                            featObj.selectionLayer.getSource().addFeature(featObj.feature);
+                        }
+                }
+
+                _this2._popupContentLength = _this2._passThroughLayerFeatureArray.length;
+
+                _this2._currentPopupIndex = -1;
+
+                var popupHtml = '<div class="ol-popup-nav">';
+                popupHtml += '<span class="previous-popup ol-popup-nav-arrow">&#9664;</span>';
+                popupHtml += '<span class="next-popup ol-popup-nav-arrow">&#9654;</span>';
+                popupHtml += '<span class="current-popup-item-number" style="font-weight: bold;"></span>';
+                popupHtml += '<span>&nbsp;of&nbsp;</span>';
+                popupHtml += '<span class="popup-content-length" style="font-weight: bold;">' + _this2._popupContentLength + '</span>';
+                popupHtml += '<span>&nbsp;&nbsp;-&nbsp;&nbsp;</span>';
+                popupHtml += '<span class="current-popup-layer-name"></span>';
+                popupHtml += '</div>';
+                popupHtml += '<div class="ol-popup-inner">';
+
+                popupHtml += '</div>';
+
+                _this2._$popupContent.html(popupHtml);
+
+                _this2._$popupContent.find('.previous-popup').click(function () {
+                    if (_this2._popupContentLength == 1) {
+                        return;
+                    }
+
+                    if (_this2._currentPopupIndex == 0) {
+                        _this2._currentPopupIndex = _this2._popupContentLength - 1;
+                    } else {
+                        _this2._currentPopupIndex--;
+                    }
+                    _this2._triggerFeatSelect();
+                });
+
+                var nextPopup = _this2._$popupContent.find('.next-popup');
+
+                nextPopup.click(function () {
+                    if (_this2._popupContentLength == 1 && _this2._currentPopupIndex > -1) {
+                        return;
+                    }
+
+                    if (_this2._currentPopupIndex == _this2._popupContentLength - 1) {
+                        _this2._currentPopupIndex = 0;
+                    } else {
+                        _this2._currentPopupIndex++;
+                    }
+                    _this2._triggerFeatSelect();
+                });
+
+                if (_this2._popupContentLength > 0) {
+                    nextPopup.trigger('click');
+                    _this2._popupOverlay.setPosition(_this2._popupCoordinate);
+                    _this2._$popupContent.scrollTop(0);
+                    _this2._popupOpen = true;
+                }
+            });
+
+            //change mouse cursor when over marker
+            this._map.on('pointermove', function (e) {
+                if (e.dragging) {
+                    return;
+                }
+                var pixel = _this2.map.getEventPixel(e.originalEvent);
+                var hit = _this2.map.hasFeatureAtPixel(pixel, function (lyrCandidate) {
+                    var _iteratorNormalCompletion2 = true;
+                    var _didIteratorError2 = false;
+                    var _iteratorError2 = undefined;
+
+                    try {
+                        for (var _iterator2 = _this2._arrPopupOlLayers[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {
+                            var olLayer = _step2.value;
+
+                            if (lyrCandidate == olLayer) {
+                                return true;
+                            }
+                        }
+                    } catch (err) {
+                        _didIteratorError2 = true;
+                        _iteratorError2 = err;
+                    } finally {
+                        try {
+                            if (!_iteratorNormalCompletion2 && _iterator2.return) {
+                                _iterator2.return();
+                            }
+                        } finally {
+                            if (_didIteratorError2) {
+                                throw _iteratorError2;
+                            }
+                        }
+                    }
+
+                    return false;
+                });
+                _this2.map.getTargetElement().style.cursor = hit ? 'pointer' : '';
+            });
+        }
+
+        /**
+         * helper to select features
+         * @private
+         */
+
+    }, {
+        key: '_triggerFeatSelect',
+        value: function _triggerFeatSelect() {
+            var $currentPopupItemNumber = this._$popupContent.find('.current-popup-item-number');
+            var $innerPopup = this._$popupContent.find('.ol-popup-inner');
+            var $layerNameSpan = this._$popupContent.find('.current-popup-layer-name');
+            this.clearSelection();
+            var lyrFeatObj = this._passThroughLayerFeatureArray[this._currentPopupIndex];
+            $currentPopupItemNumber.html((this._currentPopupIndex + 1).toFixed());
+            $layerNameSpan.html(lyrFeatObj.layerName);
+            $innerPopup.html(lyrFeatObj.popupContent);
+            lyrFeatObj.selectionLayer.getSource().addFeature(lyrFeatObj.feature);
+            var _iteratorNormalCompletion3 = true;
+            var _didIteratorError3 = false;
+            var _iteratorError3 = undefined;
+
+            try {
+                for (var _iterator3 = this._popupChangedFunctions[Symbol.iterator](), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) {
+                    var f = _step3.value;
+
+                    f(this._$popupContent);
+                }
+            } catch (err) {
+                _didIteratorError3 = true;
+                _iteratorError3 = err;
+            } finally {
+                try {
+                    if (!_iteratorNormalCompletion3 && _iterator3.return) {
+                        _iterator3.return();
+                    }
+                } finally {
+                    if (_didIteratorError3) {
+                        throw _iteratorError3;
+                    }
+                }
+            }
+        }
+
+        /**
+         *
+         * @param {ol.Feature} feature - the ol feature
+         * @param {LayerEsriMapServer} lyr - the map server layer
+         * @param {string} popupContent - popup content
+         * @param {string} esriName - esri layer name
+         */
+
+    }, {
+        key: 'addMapServicePopupContent',
+        value: function addMapServicePopupContent(feature, lyr, popupContent, esriName) {
+
+            var featLayerObject = new _FeatureLayerProperties(feature, lyr, this._popupContentLength, this._selectionLayerLookup[lyr.id], esriName);
+            featLayerObject.popupContent = popupContent;
+
+            this._passThroughLayerFeatureArray.push(featLayerObject);
+            this._popupContentLength++;
+
+            (0, _jquery2.default)('.popup-content-length').html(this._popupContentLength.toFixed());
+
+            if (!this._popupOpen) {
+                this._$popupContent.find('.next-popup').trigger('click');
+
+                this._popupOverlay.setPosition(this._popupCoordinate);
+                this._$popupContent.scrollTop(0);
+                this._popupOpen = true;
+            }
+        }
+
+        /**
+         *
+         * @param {ol.Pixel} pixel - the ol pixel
+         * @returns {Array.<_FeatureLayerProperties>} - feature layer properties
+         * @private
+         */
+
+    }, {
+        key: '_featuresAtPixel',
+        value: function _featuresAtPixel(pixel) {
+            var _this3 = this;
+
+            var layerFeatureObjectArray = [];
+            this.map.forEachFeatureAtPixel(pixel, function (feature, layer) {
+                var lyrIndex = _this3._arrPopupOlLayers.indexOf(layer);
+
+                if (lyrIndex > -1) {
+                    layerFeatureObjectArray.push(new _FeatureLayerProperties(feature, _this3._arrPopupLayers[lyrIndex], lyrIndex, _this3._selectionLayers[lyrIndex]));
+                }
+            });
+
+            return layerFeatureObjectArray;
+        }
+    }, {
+        key: 'closePopup',
+        value: function closePopup() {
+            this._checkInit();
+            this._popupOpen = false;
+            this._popupOverlay.setPosition(undefined);
+            this._$popupCloser[0].blur();
+            this.clearSelection();
+            this._$popupContent.html('');
+
+            return false;
+        }
+    }, {
+        key: 'addPopupChangedFunction',
+
+
+        /**
+         *
+         * @param {popupChangedFunction} chgFunction - popup change function
+         */
+        value: function addPopupChangedFunction(chgFunction) {
+            this._popupChangedFunctions.push(chgFunction);
+        }
+
+        /**
+         *
+         * @param {LayerBase|*} lyr - the layer being acted on
+         * @param {object} [selectionStyle={}] the selection style configuration
+         * @param {string} [selectionStyle.color=rgba(255,170,0,0.5)] the selection color
+         * @param {number} [selectionStyle.width=10] the selection width for linear features
+         * @param {object|function} [selectionStyle.olStyle=undefined] an openlayers style object or function
+         * @returns {ol.layer.Vector} the new selection layer
+         * @private
+         */
+
+    }, {
+        key: '_addPopupLayer',
+        value: function _addPopupLayer(lyr, selectionStyle) {
+            this._checkInit();
+
+            selectionStyle = selectionStyle || {};
+            selectionStyle.color = selectionStyle.color || 'rgba(255,170,0,0.5)';
+            selectionStyle.width = selectionStyle.width || 10;
+
+            var theStyle = void 0;
+
+            if (selectionStyle.olStyle) {
+                theStyle = selectionStyle.olStyle;
+            } else {
+                theStyle = new _ol2.default.style.Style({
+                    stroke: new _ol2.default.style.Stroke({
+                        color: selectionStyle.color,
+                        width: selectionStyle.width
+                    }),
+                    image: new _ol2.default.style.Circle({
+                        radius: 7,
+                        fill: new _ol2.default.style.Fill({ color: selectionStyle.color }),
+                        stroke: new _ol2.default.style.Stroke({ color: selectionStyle.color, width: 1 })
+                    }),
+                    fill: new _ol2.default.style.Fill({
+                        color: selectionStyle.color
+                    })
+                });
+            }
+
+            var selectionLayer = new _ol2.default.layer.Vector({
+                source: new _ol2.default.source.Vector(),
+                style: theStyle,
+                zIndex: 100
+            });
+
+            this._selectionLayers.push(selectionLayer);
+            this._selectionLayerLookup[lyr.id] = selectionLayer;
+            this.map.addLayer(selectionLayer);
+
+            return selectionLayer;
+        }
+
+        /**
+         * The popup callback function
+         * @callback popupCallback
+         * @param {object} featureProperties - the feature properties
+         * @param {jQuery} jqRef reference to the div content to do some async stuff inside the div
+         * @returns {string} the html content to be added to the popup
+         */
+
+        /**
+         * Add popup to the map
+         * @param {LayerBase|*} lyr The layer that the popup with act on
+         * @param {popupCallback} popupContentFunction - popup content function that makes popup info
+         * @param {object} [selectionStyle={}] the selection style configuration
+         * @param {string} [selectionStyle.color=rgba(255,170,0,0.5)] the selection color
+         * @param {number} [selectionStyle.width=10] the selection width for linear features
+         * @param {object|function} [selectionStyle.olStyle=undefined] an openlayers style object or function
+         * @returns {object} a reference to the ol selection layer
+         */
+
+    }, {
+        key: 'addVectorPopup',
+        value: function addVectorPopup(lyr, popupContentFunction, selectionStyle) {
+            var selectionLayer = this._addPopupLayer(lyr, selectionStyle);
+            this._arrPopupLayerIds.push(lyr.id);
+            this._arrPopupLayerNames.push(lyr.name);
+            this._arrPopupLayers.push(lyr);
+            this._arrPopupOlLayers.push(lyr.olLayer);
+            this._arrPopupContentFunction.push(popupContentFunction);
+
+            return selectionLayer;
+        }
+    }, {
+        key: 'removeVectorPopup',
+
+
+        /**
+         *
+         * @param {LayerBase} lyr - layer
+         */
+        value: function removeVectorPopup(lyr) {
+            var idx = this._arrPopupLayerIds.indexOf(lyr.id);
+
+            if (idx > -1) {
+                this._arrPopupLayerIds.splice(idx, 1);
+                this._arrPopupLayerNames.splice(idx, 1);
+                this._arrPopupLayers.splice(idx, 1);
+                this._arrPopupOlLayers.splice(idx, 1);
+                this._arrPopupContentFunction.splice(idx, 1);
+                this._selectionLayers.splice(idx, 1);
+                delete this._selectionLayerLookup[lyr.id];
+            }
+        }
+
+        /**
+         *
+         * @param {LayerEsriMapServer} lyr - map server layer
+         * @param {object} [selectionStyle={}] the selection style configuration
+         * @param {string} [selectionStyle.color=rgba(255,170,0,0.5)] the selection color
+         * @param {number} [selectionStyle.width=10] the selection width for linear features
+         * @param {object|function} [selectionStyle.olStyle=undefined] an openlayers style object or function
+         * @returns {object} a reference to the ol selection layer
+         */
+
+    }, {
+        key: 'addMapServicePopup',
+        value: function addMapServicePopup(lyr, selectionStyle) {
+            var selectionLayer = this._addPopupLayer(lyr, selectionStyle);
+            this._esriMapServiceLayers.push(lyr);
+
+            return selectionLayer;
+        }
+    }, {
+        key: 'clearSelection',
+        value: function clearSelection() {
+            this._checkInit();
+            for (var i = 0; i < this._selectionLayers.length; i++) {
+                this._selectionLayers[i].getSource().clear();
+            }
+            var _iteratorNormalCompletion4 = true;
+            var _didIteratorError4 = false;
+            var _iteratorError4 = undefined;
+
+            try {
+                for (var _iterator4 = this._mapClickFunctions[Symbol.iterator](), _step4; !(_iteratorNormalCompletion4 = (_step4 = _iterator4.next()).done); _iteratorNormalCompletion4 = true) {
+                    var f = _step4.value;
+
+                    f();
+                }
+            } catch (err) {
+                _didIteratorError4 = true;
+                _iteratorError4 = err;
+            } finally {
+                try {
+                    if (!_iteratorNormalCompletion4 && _iterator4.return) {
+                        _iterator4.return();
+                    }
+                } finally {
+                    if (_didIteratorError4) {
+                        throw _iteratorError4;
+                    }
+                }
+            }
+        }
+    }, {
+        key: 'addMapClickFunction',
+
+
+        /**
+         * Add a function to be called when the map is clicked but before any popups are implemented
+         * @param {function} func - the map click function
+         */
+        value: function addMapClickFunction(func) {
+            this._mapClickFunctions.push(func);
+        }
+    }]);
+
+    return MapPopupCls;
+}(_mapInteractionBase2.default);
+
+nm.MapPopupCls = MapPopupCls;
+exports.default = MapPopupCls;
+
+},{"../jquery":302,"../ol/ol":319,"../olHelpers/propertiesZoomStyle":314,"../util/provide":323,"./mapInteractionBase":309}],314:[function(require,module,exports){
+'use strict';
+
+Object.defineProperty(exports, "__esModule", {
+    value: true
+});
+
+var _provide = require('../util/provide');
+
+var _provide2 = _interopRequireDefault(_provide);
+
+var _zoomResolutionConvert = require('./zoomResolutionConvert');
+
+var zoomResolutionConvert = _interopRequireWildcard(_zoomResolutionConvert);
+
+function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+/**
+ * Created by gavorhes on 12/14/2015.
+ */
+
+var nm = (0, _provide2.default)('olHelpers');
+
+/**
+ * A style function based on properties and zoom level, wraps normal feature, resolution function
+ * @callback propertiesZoomStyle
+ * @param {object} properties the feature properties
+ * @param {number} zoom level
+ *
+ */
+
+/**
+ * wrapper to define a style function by properties and zoom level
+ * @param {propertiesZoomStyle|*} styleFunc - style function
+ * @returns {function|*} new function
+ */
+function propertiesZoomStyle(styleFunc) {
+    if (styleFunc == undefined) {
+        return undefined;
+    }
+
+    return function (feature, resolution) {
+        styleFunc(feature.getProperties(), zoomResolutionConvert.resolutionToZoom(resolution));
+    };
+}
+
+nm.propertiesZoomStyle = propertiesZoomStyle;
+exports.default = propertiesZoomStyle;
+
+},{"../util/provide":323,"./zoomResolutionConvert":317}],315:[function(require,module,exports){
+'use strict';
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+var _quickMapBase = require('./quickMapBase');
+
+var _quickMapBase2 = _interopRequireDefault(_quickMapBase);
+
+var _provide = require('../util/provide');
+
+var _provide2 = _interopRequireDefault(_provide);
+
+var _mapMove = require('./mapMove');
+
+var _mapMove2 = _interopRequireDefault(_mapMove);
+
+var _mapPopup = require('./mapPopup');
+
+var _mapPopup2 = _interopRequireDefault(_mapPopup);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+/**
+ * Created by gavorhes on 12/15/2015.
+ */
+
+var nm = (0, _provide2.default)('olHelpers');
+
+/**
+ * Sets up a map with some default parameters and initializes
+ * mapMove and mapPopup
+ *
+ * @param {object} [options={}] config options
+ * @param {string} [options.divId=map] map div id
+ * @param {object} [options.center={}] center config object
+ * @param {number} [options.center.x=-10018378] center x, web mercator x or lon
+ * @param {number} [options.center.y=5574910] center y, web mercator y or lat
+ * @param {number} [options.zoom=7] zoom level
+ * @param {number} [options.minZoom=undefined] min zoom
+ * @param {number} [options.maxZoom=undefined] max zoom
+ * @param {boolean} [options.baseSwitcher=true] if add base map switcher
+ * @param {boolean} [options.fullScreen=false] if add base map switcher
+ * @returns {ol.Map} the ol map
+ */
+function quickMap(options) {
+  var m = (0, _quickMapBase2.default)(options);
+  _mapMove2.default.init(m);
+  _mapPopup2.default.init(m);
+
+  return m;
+}
+
+nm.quickMap = quickMap;
+exports.default = quickMap;
+
+},{"../util/provide":323,"./mapMove":310,"./mapPopup":312,"./quickMapBase":316}],316:[function(require,module,exports){
+'use strict';
+
+Object.defineProperty(exports, "__esModule", {
+    value: true
+});
+
+var _jquery = require('../jquery');
+
+var _jquery2 = _interopRequireDefault(_jquery);
+
+var _provide = require('../util/provide');
+
+var _provide2 = _interopRequireDefault(_provide);
+
+var _ol = require('../ol/ol');
+
+var _ol2 = _interopRequireDefault(_ol);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+var nm = (0, _provide2.default)('olHelpers');
+
+/**
+ * Sets up a map with some default parameters and initializes
+ * mapMove and mapPopup
+ *
+ * @param {object} [options={}] config options
+ * @param {string} [options.divId=map] map div id
+ * @param {object} [options.center={}] center config object
+ * @param {number} [options.center.x=-10018378] center x, web mercator x or lon
+ * @param {number} [options.center.y=5574910] center y, web mercator y or lat
+ * @param {number} [options.zoom=7] zoom level
+ * @param {number} [options.minZoom=undefined] min zoom
+ * @param {number} [options.maxZoom=undefined] max zoom
+ * @param {boolean} [options.baseSwitcher=true] if add base map switcher
+ * @param {boolean} [options.fullScreen=false] if add base map switcher
+ * @returns {ol.Map} the ol map
+ */
+/**
+ * Created by gavorhes on 3/25/2016.
+ */
+
+/**
+ * Created by gavorhes on 12/15/2015.
+ */
+
+function quickMapBase(options) {
+    options = options || {};
+    options.divId = options.divId || 'map';
+    options.center = options.center || {};
+    options.center.x = typeof options.center.x == 'number' ? options.center.x : -10018378;
+    options.center.y = typeof options.center.y == 'number' ? options.center.y : 5574910;
+    options.zoom = typeof options.zoom == 'number' ? options.zoom : 7;
+    options.baseSwitcher = typeof options.baseSwitcher == 'boolean' ? options.baseSwitcher : true;
+    options.fullScreen = typeof options.fullScreen == 'boolean' ? options.fullScreen : false;
+
+    var $mapDiv = (0, _jquery2.default)('#' + options.divId);
+    $mapDiv.css('position', 'relative');
+
+    var osmLayer = new _ol2.default.layer.Tile({ source: new _ol2.default.source.OSM() });
+    var satLayer = new _ol2.default.layer.Tile({ visible: false, source: new _ol2.default.source.MapQuest({ layer: 'sat' }) });
+
+    var osmCss = "url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAMAAABg3Am1AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAMAUExURQAAADQ1NDk5OURFREtLS1FHSFlZWGJRVGJiYWdmZWxsbHRmaXBpanN0c3V0dHp5eX5+fIVzd4F3eeV0jud5juZ8k4aHhomHhoyGh5eGj5OVlJiVlZiYl5qZmJydnKOTlaKZmqKdnaOioaqqqKuzsbOvrrSysLa3tbW4uLm6ub27ub+/vbGXwbCZwbCgxLKlxrOqyLStybO3yrSxyrWzzbW2y7a1zbK4y7W6zbW8y760yrTAzbTFzrPKzrLOzrTJzrTOzr7CwbXC0LXK0LTO0L3I0bPQz7TQz7PS0bXQ0LnR0brW1bzT0r7U077V1Lzc2dqNqteUsdyXscaquuOHneaGmueHnOeJnuiBleiKn+eNoOiOoOWUpOiRo+iSpeiUpeqYpumaqOmdrPSynemgruSqtOmisOmlsuuqtequuOW1vOuxu+uxvOq1ve+xvPK0pvW3o/W5pfO5qvS7qfCwvMOuwc2/wNenxNyyzNe/0Nq31Nq51dy72Oy3wOu4wOu+xey4wO+6xO2+xfTAr/TCsvfFtPHLvvTJuMPDwMfHxcXKyc3DxMvFyMvLyM3PzcDV08DV1MTX1cbY1s7X1sjZ1sra2Mnd3M7b2c7c2tfH1tnB1t7F2d7M29fX1tLY1tDd2tHe3NTf3NnS19rZ1tva2Nnf3t3d28rh3tXg3Nnh3tzj393k39ni4N7k4N7n5uXDyOfLz+zAxu3CyOzEyezKzeDJ3eLM3uvP0u3P0ePf2+7R0u7Q1u/U0+7U1ezc0+7a2e/d2+3f3vbFzvLOwfHN0PPQw/TUx/LWyvLYzPDQ1fPe0ubc4vve4uHh3+nh3+/h2u/h3vHj2vHl3uHm4eTn4uDp5ebo4+Xo5ODq6ebq6OTv6+nl4+/j4O7l4e7n5ujp4+np5Ozq5e7s5urt6O7t6Orw6u7x6u3x7vPj5PDl4fDo4vDq5fDt5vDu6PDv7PTv6fDx6vHx7fH17fXw6fXy7fb07/bz8fT18vn38vr39fr48/r59Pr6+P3++//+/gAAALNTSk0AAAEAdFJOU////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wBT9wclAAAACXBIWXMAAA7DAAAOwwHHb6hkAAAAGHRFWHRTb2Z0d2FyZQBwYWludC5uZXQgNC4wLjlsM35OAAAFNElEQVRIS1VVCZxVUxi/9l0UIUT2bMnY43bVI2c0Y01kSWIaS0j2JEtkN41piomZrPPKQ2aQ7JKImOZlnm2493TJzDufuU1Zi+v/fee+mZ//793vnPOd7zvfes5zDBEZkBBjAcIjb+Iiotqgdhat8AMK0vl7/R9N7GiWtshqIr+EZ5gYKibyUsXY1l/mfFpssvUlWQ0FkU3gy4+RB/+kwYcO8pRSnldcOU/r2lAHARSwk2ORgEmOdC1EsuRiYSqMPwwroMIraZk5V2fYJQjCKfZrRmh3gSAZi2i4b7wSylWu8EqZwS59JkFUaW96JbNSc+CEUmt4rorwuZmWdDaoc+uZETuQlTCU5xYzR7muUnVUVo+BcRhre/VwUpasgJwhH7JkYIYA0sNxhmCwUK+lw6vCKBZehw01dEiyw4Q4aE0Z4ahDhKaFQsGnJ2BgqKoTBsNjFy0SlW6whRAZTdm8DBJmkBZhDi1j4xJQBk6ywrWUTymaCxac8lROcdauRGzQSNtA7EHUYhXyEwhhgjFUqRuO+rauhF1awFpzCsmwUbjIFBR0u1bKtyGpulW/H/cVVzkyGaIWTIR9pFAV6GK2gPMXMX8gPk9zzxXgI1kimcAltEYr+cjio1imlKpEa9rOipLm+p+CZ6Bw//qd1/f/O+GwMxbSLpyoZEcwkyh2jIks+3hmdd2jWUw4scxNysnHxU7nSspTRcJjCZGL3IsjsYJMMg5mwgx7gaIOLBFCogAgBBoNa9w+DE6I+Bs7FTgwwrJbHjWDgpYo2KwtBTcYEDuloC9geQw+k2RGnPGpTaOlq7AS+YICUz4DZVaX2TiNDhuYfTtY4geLi0IoCm3XccwM9hx4kU28StQEljDs3ZEpFGA+8dKzLmV9ymIwF5FOGn2GdJM8KLHDJbXyiYVMG9MRTLiXGGg2QKaxM3khPSRrwM9zEIardxU2w/EiA0gOeYKHzDR0V7/QGV3lKIA9ktrDArxO3gdA+k6SKoBiVwcm7NjZb9+Hnztg282TuHVZ9LOISFNt9MgyCetZVczSxnyDbl17Penq6mqpg1IhRaEO2aVLUO4/r17H8tTv6f13h71dduvZI3Y+uMdWksNSauLovJw5hsqiPIUvt0ku7/iBeUR3sksmomYWtRbAjbiLfv2lX9/V7LVG4uYnUZXhQ7f2OPCZEx9wrYWTcePEQqPEML8pl4mMdr/jlXlvHiRiJ2+MSTFY4TTSYStuvz2R/JXh+PPeGXm055J+3/YDWuNu3R3DArPutyg0ZgykMVDU9Ndm22+wYalr2rse48CnsTIFcMn73vfhNrktx1EUcZnPv6ah3Yy5cDTRdBEoGoBeah71dqFyjZDJLkWk3N3v4uuktssjWpzciMPxQeHj8nMKzcGuB0tAyzFhdCKOYWv4HwOQVwIxLG99a6uvH3sJCyO3h+k4EZ+G7+xj5f4XXksoaGrdMRzSc8ARA8+cdOuk2x6fffNNt5x+Ro1omPlrT/CQDlcNlpx4NBIWXhkx7Y3Zp3ofNR7Uv89Om/beW0TLIynHv3vs1VsOFpSWSXvfuPUf9BrRFyxgXdHoKJnQFegPOovvzz59ntrzye240ig8UQ3lDI2VqwagrKIQcLXNFL3wglN2OHdBQ6/vI3kENDVBwRb3k1XtczFbjWn4EzMYi7CF3129+JTYuRSdrGuS92g5dpqn6qXoJQs5xmL8p+Wt4hLbt0mx2OLNZR2bbPy8zJNQGFM/f/CfXZekRYFjGCWjIJpM+WiCzGBPWHhoyaAsjRT/B2Gy5yzYJkwUAAAAAElFTkSuQmCC')";
+    var aerialCss = "url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAMAAABg3Am1AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAMAUExURQALBgIMDQgOBwQOEQcTBwUSCwoVDAwdBw8ZDgUREwYUGAYZFQYZGgkTFQoVGQsZFAwZHBMeDhIbFBEbHAwWIA4bIREcIQ4hCQwjFw4lHBgkDB8sDxUiExIiGhAoGxohFRshGRorHQcrKQsiIQwmKgooJA0pKQ81Jw8yLRMiIxImKxUrJREuKhslJB0rIhooKRUuMBMyLhkwJhozKh48LxUzMRM9MBwzMiUvFCMtGiMwEiwzFCgzHDI+GSIsISkvJSQxIiM2LiY5Jic+Lyk0JSo0Ky49JSs9KSU1NSM7NCs2NS8+NDM1JzU9Ljg7IDJCHS1DLSNAMitCMSxIOjREITZLIDZJKDlFIjpFKztKJT1LKzJBMzpHMD1JMjpKPD1RKjlQNC1DQj5QQEA8MEJGJkBKJUJNK0lLLEJMMkVMPEpONENSLUdZL0pTLkpaLkRUMkRSPEVZMktUM0pVOklZMklZNEpcNU1ZMk1ZNUxfMk5dNkxcOVFUM1RUOFJbNVFZOVNYPVFdOVJdPFVaOVVaPVVdOlVdPVpaNlpdO0phN01hOlBiN1NhPFNoP1piPWFbPmRjPENOQEtPSURTQkJVS0xVQk1VSkxbQkxcS0heUVFXRFRcQlJfTFxeQlpeS05lQk1kSFRjQVRjSlZpQ1tkQlxlSlxpRF1rSVVnUVtlU1llXF9tU1xoXlxwSl9ramRfQmJlQ2FhSWFlSWFlTmVlSWRmTGFoQWFpRWFsRmVpRWVtRmNsSmtlRGpqRmpsS2BmWGRsUmFrW2ptUmZyR2RxTGpxTWVyU2RyW2d5V2tzUmt0WW15VG15WXFuTHNtVnFxTXF4T3h0TnJzUnJ1XHJ4VXN6Wnp0VHx1W315VXp8XGR0YGx0YHVzZXJ0aHR9ZXV+aHl9YHOCXXqBXXeCYHyCY3iEaHyIYn+JaXqKcYB5WIN6Y4SCXoCDZIGEaYCIZoOLa4iCaImJbIOOdYuMco6OeIuVcpOKbZKPc5aQb5eXe5ufg6KjhAAAAAAAAAAAAAAAAOGCeQgAAAEAdFJOU////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wBT9wclAAAACXBIWXMAAA7DAAAOwwHHb6hkAAAAGHRFWHRTb2Z0d2FyZQBwYWludC5uZXQgNC4wLjlsM35OAAAH80lEQVRISy1WbXQUVxm+6wqnk3Zmpxl2FG2EGg92C8GDlWptVTwa+uF3xcKmDfFzCUzDsJNsunXipglJXJbrtJWmwZNSnHD3jojRgUIm2UumIZ0JZ7JByrALbMWW0IBW8aRa4+cf76TeX3Nm3uc+z/s+7/vugl4r/aMTrT4e1pPTqnnmJNn5AyUzRnrRle/qE33dsvrBtAQVoxtpZNK3zSzYjUjviWO2Ag+R77dl7W36n/1Ep9KBPG/S+Py0PkjU/gPKQGqwTHryiWYFAXSvMairsio7SjyNsnCzh0qKImV9/7mhfHQZx2yN1O+7rXUm33MUPaboOkAJHaoIdXfJj2xWeyD8jMFEXkvIu5qzpU988gWB5zl+GS+sFe55trEVPdWZB2miq8bBVkNFO2R0qnrfkiXhcJhtDNXE6tbW97/s9O9/7ZfVhx86/CwrROpfvvxboMqeLsuqPr1j44qEwDNMOBximUiYoU8sw7BC/a7T72uEnyJDlGxZ9KcglZRyuqqrv/tSZErgOI4NgRBTIw9EmHAoFGZZnp6aGaJ2GTxfxYs8kKVUQh7WB5hQeC3LsUxoxVKW14l3BX2WcoUYPiZyLLe8teZ+iuT4GGhvV5KpKWkpyzxEr2MZgQ1xdRjfRBoH+2k6lIHjKTHPPBo8CSJISqqq4wGGOcWylIGlgvgNX1Gd8vF5f+IUIwb30ng+Gg2QfBRIMvy0jG8SVkYo4N0zvUXVRztbJ/L6xL7lUZEXBEHkuZqlS6gEAUgKJurnhFtfpACOYd8b/hVbJPqwi44a6KA0sPVjIi/SIyxb3u8KlAJ0S8jRVgrlW+nVHPdrhiXCxu42d86ByksDc80P3MkJFBFQ8Ho1lQegpWJRWFGsDsRwwv7pIyvuQW0ZkrX6NDVFbqcvaQI8vbyqzt5AARrsbKx5yhQEGs+wPO56bOK+0rcwMrOKkpUbZWYxV04UeZZv/cBKFhRL6Qdv9y4LfEDA7/thg7tTmv1a5/GnO0wl0dQg80wglZaHUmxRvjwAHOfyN0mxrpqLUpcjsK3NHYMo4R1o6eho2ZyIb2FoeOC3ILK8kZ2HQMOuWywGXUkJBCeTbYFS0+ym1h2/6UgmvnrvKYZZtIEXGf75C2cIAp5LHNd71x7uPoTjakrWH9e3KFpaatjUvJUysFw0KrLMYMW2lTg4PeUQx6kJEALvxXEmCdVyPLHtCSjBhc01XCjIgafxou+PE6KC1dhxSCwoBCc+N4P3btM84pmdSSjJnjO/nvY4LQfVyz5/I+v6IwjUOMjy+MVCxIbKupTJaEktp7cTKU42Pvjh2m/8cSpC6aPsaX/MHSuUQLVVsIa4RUTs/r/BVAexNdjdnsNG7j/rV93xheLMzKnFrPeTEQchCyCcKb25aAIn7lrAertrZwyNXM8N6zfWrFo3d2SmOEcF83x/r+OOFgrAHYWF7cELjhV7UQo/6WAIUVl9JFl8a//HZ66VpbY3I9QKZqPru77lA+iOWAIr0hKxHCmmr0othSyeIl5y3qt4xT8gSNrKEZozs8Els67rgsLOZ+ygzwMfbtNhobfgzpEyGnz7htPtzUi6PuOoj7K0WF/MXiUFxwGajRD1hjYXHXI9p406qOyinp5/tiWcDHY0jIu4n64Qfq7kliB2gemag9QbOia0PbbDMbd43SHuvxFxrAocxins7MX5Kqbe1QixKBxoV4//PfAgGCu+Rlm4SvZizyDH+0reDHp92iO0BuX3bCfItl0PEwvYLqpwXG2MHlGsQ4S8pMJZv1JGmHiEoHQDdOjwmVlEP/nE9ADKjI8xLI0OOGITfy0SbeG/C2jKUDGSlDhM9I3IpK9iup6XnbRNC7yqueNsJCCIiXzdQhnaGN+46umnEdy5U5UbUJ48LFM9GkJo8BdDOiAZ7ZIQbKhYLMqvhU2wmNxjEAsS2AI7y4nWF64duePbk7YV3zvAVLEMD9AxJRNa3KDUibV7DjnkuprMEYjScFNcaR2ceP2u9R/5k1052Ryme5phAFRswlHjAudiP4dOy7CaxLgdJh9vUlU1702/+LPa1U9fvPi9qlA4XEUBJc3dFlpsR457IDl1iPqLp7o81NQgyV19iYU38uTiv975Pd3SiwQcsGjx+v4/6fl5T7EOOMTCtpbKxfemsQq/3olQZcminADAAI0cuGLHaHOFxbuGvRk/Z9u7CULqoVR6NE0yx1avj30oRhc/jWUoIALGxkz0dg1Dl9iaI7LqOOXKsXJFwjiuEAi70Jra2nW1PL08zLBhZsMABpW5csI7TPfew9ipFKcn5k1i+1KyCWKjC3W/8dF1d666+RaabBVTFTHacjoojBNDh0NDxk+IPTlwfqJkWpbnpFHXIbLbmpxEQ3ff/Z0g/mauXsoln9wDRjy/NHsQFw3P6vWuTJ43/+FZrk2cvAFRipCKdfD9y2+pjRj78s0KdCUDKJvdV91ChngV38T20TM+gghjpJaPlpFr2xbEz5g4A/NGt5rNwdwmYGeeeMXBSLHHUIc+6RsojRH9VTUm3/mLf/64b470XvoxoTKhlMBQ2jMEzo2PjxdGMppmn1RM24bWFJqaQv4BcuJa2Sam7Zokq1ldCsz06NCBHrhwqVQYpfFj42NZexz1EW9SR/kT58nEeQKJb2fPXjjp0u/YUkwHEgLeOnf2nOuf1TRTM02CLKLTPy60/x1CCztqn7Ev+BdsC3m+30decQvW/wBNTwU+CfUQAQAAAABJRU5ErkJggg==')";
+
+    if (options.baseSwitcher) {
+        var switcherContent = '<div class="base-map-switcher" title="Toggle Base Layer" style="';
+        switcherContent += 'position: absolute; top: 70px; left: 4px; border: solid black 1px; ';
+        switcherContent += 'height: 50px; width: 50px; z-index: 10; border-radius: 4px; background: ' + aerialCss + ';';
+        switcherContent += '"></div>';
+        $mapDiv.append(switcherContent);
+
+        $mapDiv.find('.base-map-switcher').click(function () {
+            "use strict";
+
+            osmLayer.setVisible(!osmLayer.getVisible());
+            satLayer.setVisible(!satLayer.getVisible());
+
+            if (osmLayer.getVisible()) {
+                (0, _jquery2.default)(this).css('background', aerialCss);
+            } else {
+                (0, _jquery2.default)(this).css('background', osmCss);
+            }
+        });
+    }
+
+    if (options.zoom < 0 || options.zoom > 28) {
+        throw 'zoom out of range';
+    }
+
+    if (options.center.x >= -180 && options.center.x <= 180 && options.center.y >= -90 && options.center.y <= 90) {
+        var p = new _ol2.default.geom.Point([options.center.x, options.center.y]);
+        p.transform("EPSG:4326", "EPSG:3857");
+        var coordinates = p.getCoordinates();
+        options.center.x = coordinates[0];
+        options.center.y = coordinates[1];
+    }
+
+    var map = new _ol2.default.Map({
+        layers: [osmLayer, satLayer],
+        target: options.divId,
+        controls: _ol2.default.control.defaults({
+            attributionOptions: { collapsible: false }
+        }),
+        view: new _ol2.default.View({
+            center: [options.center.x, options.center.y],
+            zoom: options.zoom,
+            minZoom: options.minZoom,
+            maxZoom: options.maxZoom
+        })
+    });
+
+    if (options.fullScreen) {
+        map.addControl(new _ol2.default.control.FullScreen());
+    }
+
+    return map;
+}
+
+nm.quickMapBase = quickMapBase;
+exports.default = quickMapBase;
+
+},{"../jquery":302,"../ol/ol":319,"../util/provide":323}],317:[function(require,module,exports){
+'use strict';
+
+Object.defineProperty(exports, "__esModule", {
+    value: true
+});
+exports.zoomToResolution = zoomToResolution;
+exports.resolutionToZoom = resolutionToZoom;
+
+var _provide = require('../util/provide');
+
+var _provide2 = _interopRequireDefault(_provide);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+var nm = (0, _provide2.default)('olHelpers.zoomResolutionConvert'); /**
+                                                                     * Created by gavorhes on 12/14/2015.
+                                                                     */
+
+var _zoomResLookup = [156543.03392804097, //0
+78271.51696402048, //1
+39135.75848201024, //2
+19567.87924100512, //3
+9783.93962050256, //4
+4891.96981025128, //5
+2445.98490512564, //6
+1222.99245256282, //7
+611.49622628141, //8
+305.748113140705, //9
+152.8740565703525, //10
+76.43702828517625, //11
+38.21851414258813, //12
+19.109257071294063, //13
+9.554628535647032, //14
+4.777314267823516, //15
+2.388657133911758, //16
+1.194328566955879, //17
+0.5971642834779395, //18
+0.29858214173896974, //19
+0.14929107086948487, //20
+0.07464553543474244, //21
+0.03732276771737122, //22
+0.01866138385868561, //23
+0.009330691929342804, //24
+0.004665345964671402, //25
+0.002332672982335701, //26
+0.0011663364911678506, //27
+0.0005831682455839253 //28
+];
+
+/**
+ * Get the resolution given the zoom level
+ * @param {number} zoomLevel - the zoom level
+ * @returns {number|*} the map resolution
+ */
+function zoomToResolution(zoomLevel) {
+    "use strict";
+
+    if (typeof zoomLevel == 'number') {
+        if (zoomLevel % 1 === 0 && zoomLevel >= 0 && zoomLevel <= 28) {
+            return _zoomResLookup[zoomLevel];
+        } else {
+            console.log('invalid zoom level provided: ' + zoomLevel);
+
+            return undefined;
+        }
+    } else {
+        return undefined;
+    }
+}
+nm.zoomToResolution = zoomToResolution;
+
+/**
+ * Get resolution from the zoom level
+ * @param {number} resolution - the resolution
+ * @returns {number|*} the zoom level
+ */
+function resolutionToZoom(resolution) {
+    for (var i = 0; i < _zoomResLookup.length; i++) {
+        if (resolution >= _zoomResLookup[i]) {
+            return i;
+        }
+    }
+
+    return 0;
+}
+
+nm.resolutionToZoom = resolutionToZoom;
+
+},{"../util/provide":323}],318:[function(require,module,exports){
+// OpenLayers 3. See http://openlayers.org/
+// License: https://raw.githubusercontent.com/openlayers/ol3/master/LICENSE.md
+(function (root, factory) {
+  if (typeof exports === "object") {
+    module.exports = factory();
+  } else if (typeof define === "function" && define.amd) {
+    define([], factory);
+  } else {
+    root.ol = factory();
+  }
+}(this, function () {
+  var OPENLAYERS = {};
+  var p,x=this;function F(b,c,d){b=b.split(".");d=d||x;b[0]in d||!d.execScript||d.execScript("var "+b[0]);for(var e;b.length&&(e=b.shift());)b.length||void 0===c?d[e]?d=d[e]:d=d[e]={}:d[e]=c}function aa(b){b.ua=function(){return b.Ac?b.Ac:b.Ac=new b}}
+function ba(b){var c=typeof b;if("object"==c)if(b){if(b instanceof Array)return"array";if(b instanceof Object)return c;var d=Object.prototype.toString.call(b);if("[object Window]"==d)return"object";if("[object Array]"==d||"number"==typeof b.length&&"undefined"!=typeof b.splice&&"undefined"!=typeof b.propertyIsEnumerable&&!b.propertyIsEnumerable("splice"))return"array";if("[object Function]"==d||"undefined"!=typeof b.call&&"undefined"!=typeof b.propertyIsEnumerable&&!b.propertyIsEnumerable("call"))return"function"}else return"null";
+else if("function"==c&&"undefined"==typeof b.call)return"object";return c}function ca(b){var c=ba(b);return"array"==c||"object"==c&&"number"==typeof b.length}function da(b){return"string"==typeof b}function ea(b){return"number"==typeof b}function ga(b){return"function"==ba(b)}function ha(b){var c=typeof b;return"object"==c&&null!=b||"function"==c}function I(b){return b[ia]||(b[ia]=++ja)}var ia="closure_uid_"+(1E9*Math.random()>>>0),ja=0;function ka(b,c,d){return b.call.apply(b.bind,arguments)}
+function la(b,c,d){if(!b)throw Error();if(2<arguments.length){var e=Array.prototype.slice.call(arguments,2);return function(){var d=Array.prototype.slice.call(arguments);Array.prototype.unshift.apply(d,e);return b.apply(c,d)}}return function(){return b.apply(c,arguments)}}function ma(b,c,d){ma=Function.prototype.bind&&-1!=Function.prototype.bind.toString().indexOf("native code")?ka:la;return ma.apply(null,arguments)}
+function na(b,c){var d=Array.prototype.slice.call(arguments,1);return function(){var c=d.slice();c.push.apply(c,arguments);return b.apply(this,c)}}function M(b,c){function d(){}d.prototype=c.prototype;b.X=c.prototype;b.prototype=new d;b.prototype.constructor=b;b.We=function(b,d,g){for(var h=Array(arguments.length-2),k=2;k<arguments.length;k++)h[k-2]=arguments[k];return c.prototype[d].apply(b,h)}};var oa;function pa(){};var qa;var sa=String.prototype.trim?function(b){return b.trim()}:function(b){return b.replace(/^[\s\xa0]+|[\s\xa0]+$/g,"")};function ta(b){if(!ua.test(b))return b;-1!=b.indexOf("&")&&(b=b.replace(va,"&amp;"));-1!=b.indexOf("<")&&(b=b.replace(wa,"&lt;"));-1!=b.indexOf(">")&&(b=b.replace(xa,"&gt;"));-1!=b.indexOf('"')&&(b=b.replace(ya,"&quot;"));-1!=b.indexOf("'")&&(b=b.replace(za,"&#39;"));-1!=b.indexOf("\x00")&&(b=b.replace(Aa,"&#0;"));return b}var va=/&/g,wa=/</g,xa=/>/g,ya=/"/g,za=/'/g,Aa=/\x00/g,ua=/[\x00&<>"']/;
+function Ba(b,c){return b<c?-1:b>c?1:0};function Ca(b,c,d){return Math.min(Math.max(b,c),d)}var Da=function(){var b;"cosh"in Math?b=Math.cosh:b=function(b){b=Math.exp(b);return(b+1/b)/2};return b}();function Ea(b,c){var d=b%c;return 0>d*c?d+c:d};function Fa(b){return function(c){if(c)return[Ca(c[0],b[0],b[2]),Ca(c[1],b[1],b[3])]}}function Ga(b){return b};function Ha(b,c){return b>c?1:b<c?-1:0}function Ia(b,c,d){var e=b.length;if(b[0]<=c)return 0;if(!(c<=b[e-1]))if(0<d)for(d=1;d<e;++d){if(b[d]<c)return d-1}else if(0>d)for(d=1;d<e;++d){if(b[d]<=c)return d}else for(d=1;d<e;++d){if(b[d]==c)return d;if(b[d]<c)return b[d-1]-c<c-b[d]?d-1:d}return e-1}function Ja(b){return b.reduce(function(b,d){return Array.isArray(d)?b.concat(Ja(d)):b.concat(d)},[])}function Ka(b,c){var d,e=ca(c)?c:[c],f=e.length;for(d=0;d<f;d++)b[b.length]=e[d]}
+function La(b,c){var d=b.indexOf(c),e=-1<d;e&&b.splice(d,1);return e}function Ma(b,c){var d=b.length;if(d!==c.length)return!1;for(var e=0;e<d;e++)if(b[e]!==c[e])return!1;return!0}function Na(b){var c=Oa,d=b.length,e=Array(b.length),f;for(f=0;f<d;f++)e[f]={index:f,value:b[f]};e.sort(function(b,d){return c(b.value,d.value)||b.index-d.index});for(f=0;f<b.length;f++)b[f]=e[f].value};function Pa(b){return function(c,d,e){if(void 0!==c)return c=Ia(b,c,e),c=Ca(c+d,0,b.length-1),b[c]}}function Qa(b,c,d){return function(e,f,g){if(void 0!==e)return e=Math.max(Math.floor(Math.log(c/e)/Math.log(b)+(0<g?0:0>g?1:.5))+f,0),void 0!==d&&(e=Math.min(e,d)),c/Math.pow(b,e)}};function Ra(b){if(void 0!==b)return 0}function Sa(b,c){if(void 0!==b)return b+c}function Ta(b){var c=2*Math.PI/b;return function(b,e){if(void 0!==b)return b=Math.floor((b+e)/c+.5)*c}}function Ua(){var b=5*Math.PI/180;return function(c,d){if(void 0!==c)return Math.abs(c+d)<=b?0:c+d}};function Va(b,c,d){this.center=b;this.resolution=c;this.rotation=d};var Wa="function"===typeof Object.assign?Object.assign:function(b,c){if(void 0===b||null===b)throw new TypeError("Cannot convert undefined or null to object");for(var d=Object(b),e=1,f=arguments.length;e<f;++e){var g=arguments[e];if(void 0!==g&&null!==g)for(var h in g)g.hasOwnProperty(h)&&(d[h]=g[h])}return d};function Ya(b){for(var c in b)delete b[c]}function Za(b){var c=[],d;for(d in b)c.push(b[d]);return c}function $a(b){for(var c in b)return!1;return!c};var ab="olm_"+(1E4*Math.random()|0);function bb(b){function c(c){var e=b.listener,f=b.hc||b.target;b.kc&&N(b);return e.call(f,c)}return b.ic=c}function cb(b,c,d,e){for(var f,g=0,h=b.length;g<h;++g)if(f=b[g],f.listener===c&&f.hc===d)return e&&(f.deleteIndex=g),f}function db(b,c){var d=b[ab];return d?d[c]:void 0}function eb(b){var c=b[ab];c||(c=b[ab]={});return c}
+function fb(b,c){var d=db(b,c);if(d){for(var e=0,f=d.length;e<f;++e)b.removeEventListener(c,d[e].ic),Ya(d[e]);d.length=0;if(d=b[ab])delete d[c],0===Object.keys(d).length&&delete b[ab]}}function Q(b,c,d,e,f){var g=eb(b),h=g[c];h||(h=g[c]=[]);(g=cb(h,d,e,!1))?f||(g.kc=!1):(g={hc:e,kc:!!f,listener:d,target:b,type:c},b.addEventListener(c,bb(g)),h.push(g));return g}function gb(b,c,d,e){(b=db(b,c))&&(d=cb(b,d,e,!0))&&N(d)}
+function N(b){if(b&&b.target){b.target.removeEventListener(b.type,b.ic);var c=db(b.target,b.type);if(c){var d="deleteIndex"in b?b.deleteIndex:c.indexOf(b);-1!==d&&c.splice(d,1);0===c.length&&fb(b.target,b.type)}Ya(b)}}function hb(b){var c=eb(b),d;for(d in c)fb(b,d)};function ib(){}ib.prototype.ja=!1;function jb(b){b.ja||(b.ja=!0,b.J())}ib.prototype.J=pa;function R(b,c){this.type=b;this.target=c||null}R.prototype.preventDefault=R.prototype.stopPropagation=function(){this.xe=!0};function kb(b){b.stopPropagation()}function lb(b){b.preventDefault()};function mb(){this.H={};this.A={}}M(mb,ib);mb.prototype.addEventListener=function(b,c){var d=this.A[b];d||(d=this.A[b]=[]);-1===d.indexOf(c)&&d.push(c)};function S(b,c){var d="string"===typeof c?new R(c):c,e=d.type;d.target=b;var f=b.A[e],g;if(f){e in b.H||(b.H[e]=0);for(var h=0,k=f.length;h<k;++h)if(!1===f[h].call(b,d)||d.xe){g=!1;break}d=b.H[e];for(delete b.H[e];d--;)b.removeEventListener(e,pa);return g}}mb.prototype.J=function(){hb(this)};
+function nb(b,c){return c?c in b.A:0<Object.keys(b.A).length}mb.prototype.removeEventListener=function(b,c){var d=this.A[b];if(d){var e=d.indexOf(c);b in this.H?(d[e]=pa,++this.H[b]):(d.splice(e,1),0===d.length&&delete this.A[b])}};function ob(){mb.call(this);this.f=0}M(ob,mb);ob.prototype.v=function(){++this.f;S(this,"change")};ob.prototype.ba=function(b,c,d){if(Array.isArray(b)){for(var e=b.length,f=Array(e),g=0;g<e;++g)f[g]=Q(this,b[g],c,d);return f}return Q(this,b,c,d)};function pb(b,c,d){R.call(this,b);this.key=c;this.oldValue=d}M(pb,R);function T(b){ob.call(this);I(this);this.K={};void 0!==b&&this.l(b)}M(T,ob);var qb={};function rb(b){return qb.hasOwnProperty(b)?qb[b]:qb[b]="change:"+b}T.prototype.get=function(b){var c;this.K.hasOwnProperty(b)&&(c=this.K[b]);return c};T.prototype.za=function(){return Wa({},this.K)};T.prototype.set=function(b,c,d){d?this.K[b]=c:(d=this.K[b],this.K[b]=c,d!==c&&(c=rb(b),S(this,new pb(c,b,d)),S(this,new pb("propertychange",b,d))))};
+T.prototype.l=function(b,c){for(var d in b)this.set(d,b[d],c)};function sb(b,c,d){void 0===d&&(d=[0,0]);d[0]=b[0]*c+.5|0;d[1]=b[1]*c+.5|0;return d}function tb(b,c){if(Array.isArray(b))return b;void 0===c?c=[b,b]:(c[0]=b,c[1]=b);return c};function ub(b,c){b[0]+=c[0];b[1]+=c[1]}function vb(b,c){var d=Math.cos(c),e=Math.sin(c),f=b[1]*d+b[0]*e;b[0]=b[0]*d-b[1]*e;b[1]=f};function wb(b){this.length=b.length||b;for(var c=0;c<this.length;c++)this[c]=b[c]||0}wb.prototype.BYTES_PER_ELEMENT=4;wb.prototype.set=function(b,c){c=c||0;for(var d=0;d<b.length&&c+d<this.length;d++)this[c+d]=b[d]};wb.prototype.toString=Array.prototype.join;"undefined"==typeof Float32Array&&(wb.BYTES_PER_ELEMENT=4,wb.prototype.BYTES_PER_ELEMENT=wb.prototype.BYTES_PER_ELEMENT,wb.prototype.set=wb.prototype.set,wb.prototype.toString=wb.prototype.toString,F("Float32Array",wb,void 0));function xb(b){this.length=b.length||b;for(var c=0;c<this.length;c++)this[c]=b[c]||0}xb.prototype.BYTES_PER_ELEMENT=8;xb.prototype.set=function(b,c){c=c||0;for(var d=0;d<b.length&&c+d<this.length;d++)this[c+d]=b[d]};xb.prototype.toString=Array.prototype.join;if("undefined"==typeof Float64Array){try{xb.BYTES_PER_ELEMENT=8}catch(b){}xb.prototype.BYTES_PER_ELEMENT=xb.prototype.BYTES_PER_ELEMENT;xb.prototype.set=xb.prototype.set;xb.prototype.toString=xb.prototype.toString;F("Float64Array",xb,void 0)};function yb(b,c,d,e,f){b[0]=c;b[1]=d;b[2]=e;b[3]=f};function zb(){var b=Array(16);Ab(b,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);return b}function Bb(){var b=Array(16);Ab(b,1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1);return b}function Ab(b,c,d,e,f,g,h,k,l,m,n,q,r,u,w,y,z){b[0]=c;b[1]=d;b[2]=e;b[3]=f;b[4]=g;b[5]=h;b[6]=k;b[7]=l;b[8]=m;b[9]=n;b[10]=q;b[11]=r;b[12]=u;b[13]=w;b[14]=y;b[15]=z}
+function Cb(b,c){b[0]=c[0];b[1]=c[1];b[2]=c[2];b[3]=c[3];b[4]=c[4];b[5]=c[5];b[6]=c[6];b[7]=c[7];b[8]=c[8];b[9]=c[9];b[10]=c[10];b[11]=c[11];b[12]=c[12];b[13]=c[13];b[14]=c[14];b[15]=c[15]}function Db(b){b[0]=1;b[1]=0;b[2]=0;b[3]=0;b[4]=0;b[5]=1;b[6]=0;b[7]=0;b[8]=0;b[9]=0;b[10]=1;b[11]=0;b[12]=0;b[13]=0;b[14]=0;b[15]=1}
+function Eb(b,c){var d=b[0],e=b[1],f=b[2],g=b[3],h=b[4],k=b[5],l=b[6],m=b[7],n=b[8],q=b[9],r=b[10],u=b[11],w=b[12],y=b[13],z=b[14],D=b[15],t=d*k-e*h,v=d*l-f*h,B=d*m-g*h,E=e*l-f*k,C=e*m-g*k,G=f*m-g*l,J=n*y-q*w,A=n*z-r*w,H=n*D-u*w,O=q*z-r*y,P=q*D-u*y,L=r*D-u*z,K=t*L-v*P+B*O+E*H-C*A+G*J;0!=K&&(K=1/K,c[0]=(k*L-l*P+m*O)*K,c[1]=(-e*L+f*P-g*O)*K,c[2]=(y*G-z*C+D*E)*K,c[3]=(-q*G+r*C-u*E)*K,c[4]=(-h*L+l*H-m*A)*K,c[5]=(d*L-f*H+g*A)*K,c[6]=(-w*G+z*B-D*v)*K,c[7]=(n*G-r*B+u*v)*K,c[8]=(h*P-k*H+m*J)*K,c[9]=(-d*P+
+e*H-g*J)*K,c[10]=(w*C-y*B+D*t)*K,c[11]=(-n*C+q*B-u*t)*K,c[12]=(-h*O+k*A-l*J)*K,c[13]=(d*O-e*A+f*J)*K,c[14]=(-w*E+y*v-z*t)*K,c[15]=(n*E-q*v+r*t)*K)}function Fb(b,c,d){var e=b[1]*c+b[5]*d+0*b[9]+b[13],f=b[2]*c+b[6]*d+0*b[10]+b[14],g=b[3]*c+b[7]*d+0*b[11]+b[15];b[12]=b[0]*c+b[4]*d+0*b[8]+b[12];b[13]=e;b[14]=f;b[15]=g}function Gb(b,c,d){Ab(b,b[0]*c,b[1]*c,b[2]*c,b[3]*c,b[4]*d,b[5]*d,b[6]*d,b[7]*d,1*b[8],1*b[9],1*b[10],1*b[11],b[12],b[13],b[14],b[15])}
+function Hb(b,c){var d=b[0],e=b[1],f=b[2],g=b[3],h=b[4],k=b[5],l=b[6],m=b[7],n=Math.cos(c),q=Math.sin(c);b[0]=d*n+h*q;b[1]=e*n+k*q;b[2]=f*n+l*q;b[3]=g*n+m*q;b[4]=d*-q+h*n;b[5]=e*-q+k*n;b[6]=f*-q+l*n;b[7]=g*-q+m*n}new Float64Array(3);new Float64Array(3);new Float64Array(4);new Float64Array(4);new Float64Array(4);new Float64Array(16);function Ib(b){for(var c=Jb(),d=0,e=b.length;d<e;++d)Kb(c,b[d]);return c}function Lb(b,c,d){return d?(d[0]=b[0]-c,d[1]=b[1]-c,d[2]=b[2]+c,d[3]=b[3]+c,d):[b[0]-c,b[1]-c,b[2]+c,b[3]+c]}function Mb(b,c){return c?(c[0]=b[0],c[1]=b[1],c[2]=b[2],c[3]=b[3],c):b.slice()}function Nb(b,c){return b[0]<=c[0]&&c[2]<=b[2]&&b[1]<=c[1]&&c[3]<=b[3]}function Jb(){return[Infinity,Infinity,-Infinity,-Infinity]}function Ob(b,c,d,e,f){return f?(f[0]=b,f[1]=c,f[2]=d,f[3]=e,f):[b,c,d,e]}
+function Pb(b){return Ob(Infinity,Infinity,-Infinity,-Infinity,b)}function Qb(b,c){var d=b[0],e=b[1];return Ob(d,e,d,e,c)}function Rb(b,c){return b[0]==c[0]&&b[2]==c[2]&&b[1]==c[1]&&b[3]==c[3]}function Sb(b,c){c[0]<b[0]&&(b[0]=c[0]);c[2]>b[2]&&(b[2]=c[2]);c[1]<b[1]&&(b[1]=c[1]);c[3]>b[3]&&(b[3]=c[3])}function Kb(b,c){c[0]<b[0]&&(b[0]=c[0]);c[0]>b[2]&&(b[2]=c[0]);c[1]<b[1]&&(b[1]=c[1]);c[1]>b[3]&&(b[3]=c[1])}
+function Tb(b,c,d,e,f){for(;d<e;d+=f){var g=b,h=c[d],k=c[d+1];g[0]=Math.min(g[0],h);g[1]=Math.min(g[1],k);g[2]=Math.max(g[2],h);g[3]=Math.max(g[3],k)}return b}function Ub(b){var c=0;b[2]<b[0]||b[3]<b[1]||(c=Vb(b)*Wb(b));return c}function Xb(b){return[b[0],b[1]]}function Yb(b){return[(b[0]+b[2])/2,(b[1]+b[3])/2]}
+function Zb(b,c,d,e){var f=c*e[0]/2;e=c*e[1]/2;c=Math.cos(d);var g=Math.sin(d);d=f*c;f*=g;c*=e;var h=e*g,k=b[0],l=b[1];b=k-d+h;e=k-d-h;g=k+d-h;d=k+d+h;var h=l-f-c,k=l-f+c,m=l+f+c,f=l+f-c;return Ob(Math.min(b,e,g,d),Math.min(h,k,m,f),Math.max(b,e,g,d),Math.max(h,k,m,f),void 0)}function Wb(b){return b[3]-b[1]}function $b(b,c){var d=Jb();ac(b,c)&&(d[0]=b[0]>c[0]?b[0]:c[0],d[1]=b[1]>c[1]?b[1]:c[1],d[2]=b[2]<c[2]?b[2]:c[2],d[3]=b[3]<c[3]?b[3]:c[3]);return d}function bc(b){return[b[0],b[3]]}
+function Vb(b){return b[2]-b[0]}function ac(b,c){return b[0]<=c[2]&&b[2]>=c[0]&&b[1]<=c[3]&&b[3]>=c[1]};function cc(){return!0}function dc(){return!1};/*
+
+ Latitude/longitude spherical geodesy formulae taken from
+ http://www.movable-type.co.uk/scripts/latlong.html
+ Licensed under CC-BY-3.0.
+*/
+function ec(b){this.radius=b}function fc(b,c){var d=b[1]*Math.PI/180,e=c[1]*Math.PI/180,f=(e-d)/2,g=(c[0]-b[0])*Math.PI/180/2,d=Math.sin(f)*Math.sin(f)+Math.sin(g)*Math.sin(g)*Math.cos(d)*Math.cos(e);return 2*gc.radius*Math.atan2(Math.sqrt(d),Math.sqrt(1-d))}
+ec.prototype.offset=function(b,c,d){var e=b[1]*Math.PI/180;c/=this.radius;var f=Math.asin(Math.sin(e)*Math.cos(c)+Math.cos(e)*Math.sin(c)*Math.cos(d));return[180*(b[0]*Math.PI/180+Math.atan2(Math.sin(d)*Math.sin(c)*Math.cos(e),Math.cos(c)-Math.sin(e)*Math.sin(f)))/Math.PI,180*f/Math.PI]};var gc=new ec(6370997);var hc={};hc.degrees=2*Math.PI*gc.radius/360;hc.ft=.3048;hc.m=1;hc["us-ft"]=1200/3937;
+function ic(b){this.qa=b.code;this.b=b.units;this.h=void 0!==b.extent?b.extent:null;this.f=void 0!==b.global?b.global:!1;this.a=!(!this.f||!this.h);this.i=void 0!==b.getPointResolution?b.getPointResolution:this.j;this.c=null;this.g=b.metersPerUnit;var c=jc,d=b.code,e=kc||x.proj4;if("function"==typeof e&&void 0===c[d]){var f=e.defs(d);if(void 0!==f){void 0===b.metersPerUnit&&(this.g=f.to_meter);void 0===b.units&&(this.b=f.units);var g,h;for(g in c)if(b=e.defs(g),void 0!==b)if(c=lc(g),b===f)mc([c,this]);
+else{h=e(g,d);b=h.forward;h=h.inverse;var c=lc(c),k=lc(this);nc(c,k,oc(b));nc(k,c,oc(h))}}}}ic.prototype.l=function(){return this.qa};ic.prototype.C=function(){return this.h};function pc(b){return b.g||hc[b.b]}ic.prototype.j=function(b,c){if("degrees"==this.b)return b;var d=qc(this,lc("EPSG:4326")),e=[c[0]-b/2,c[1],c[0]+b/2,c[1],c[0],c[1]-b/2,c[0],c[1]+b/2],e=d(e,e,2),d=(fc(e.slice(0,2),e.slice(2,4))+fc(e.slice(4,6),e.slice(6,8)))/2,e=pc(this);void 0!==e&&(d/=e);return d};
+ic.prototype.getPointResolution=function(b,c){return this.i(b,c)};var jc={},rc={},kc=null;function mc(b){sc(b);b.forEach(function(c){b.forEach(function(b){c!==b&&nc(c,b,tc)})})}function uc(b){jc[b.qa]=b;nc(b,b,tc)}function sc(b){var c=[];b.forEach(function(b){c.push(uc(b))})}function vc(b){return b?"string"===typeof b?lc(b):b:lc("EPSG:3857")}function nc(b,c,d){b=b.qa;c=c.qa;b in rc||(rc[b]={});rc[b][c]=d}
+function oc(b){return function(c,d,e){var f=c.length;e=void 0!==e?e:2;d=void 0!==d?d:Array(f);var g,h;for(h=0;h<f;h+=e)for(g=b([c[h],c[h+1]]),d[h]=g[0],d[h+1]=g[1],g=e-1;2<=g;--g)d[h+g]=c[h+g];return d}}function lc(b){var c;if(b instanceof ic)c=b;else if("string"===typeof b){c=jc[b];var d=kc||x.proj4;void 0===c&&"function"==typeof d&&void 0!==d.defs(b)&&(c=new ic({code:b}),uc(c))}else c=null;return c}function wc(b,c){if(b===c)return!0;var d=b.b===c.b;return b.qa===c.qa?d:qc(b,c)===tc&&d}
+function xc(b,c){var d=lc(b),e=lc(c);return qc(d,e)}function qc(b,c){var d=b.qa,e=c.qa,f;d in rc&&e in rc[d]&&(f=rc[d][e]);void 0===f&&(f=yc);return f}function yc(b,c){if(void 0!==c&&b!==c){for(var d=0,e=b.length;d<e;++d)c[d]=b[d];b=c}return b}function tc(b,c){var d;if(void 0!==c){d=0;for(var e=b.length;d<e;++d)c[d]=b[d];d=c}else d=b.slice();return d};function zc(){T.call(this);this.u=Jb();this.w=-1;this.h={};this.s=this.i=0}M(zc,T);zc.prototype.C=function(b){this.w!=this.f&&(this.u=this.ib(this.u),this.w=this.f);var c=this.u;b?(b[0]=c[0],b[1]=c[1],b[2]=c[2],b[3]=c[3]):b=c;return b};zc.prototype.o=function(b,c){this.Eb(xc(b,c));return this};function Ac(b,c,d,e,f,g){var h=f[0],k=f[1],l=f[4],m=f[5],n=f[12];f=f[13];for(var q=g?g:[],r=0;c<d;c+=e){var u=b[c],w=b[c+1];q[r++]=h*u+l*w+n;q[r++]=k*u+m*w+f}g&&q.length!=r&&(q.length=r);return q};function Bc(){zc.call(this);this.g="XY";this.b=2;this.a=null}M(Bc,zc);function Cc(b){if("XY"==b)return 2;if("XYZ"==b||"XYM"==b)return 3;if("XYZM"==b)return 4}p=Bc.prototype;p.ib=function(b){var c=this.a,d=this.a.length,e=this.b;b=Pb(b);return Tb(b,c,0,d,e)};
+p.Ob=function(b){this.s!=this.f&&(Ya(this.h),this.i=0,this.s=this.f);if(0>b||0!==this.i&&b<=this.i)return this;var c=b.toString();if(this.h.hasOwnProperty(c))return this.h[c];var d=this.Ma(b);if(d.a.length<this.a.length)return this.h[c]=d;this.i=b;return this};p.Ma=function(){return this};function U(b,c,d){b.b=Cc(c);b.g=c;b.a=d}function Dc(b,c,d,e){if(c)d=Cc(c);else{for(c=0;c<e;++c){if(0===d.length){b.g="XY";b.b=2;return}d=d[0]}d=d.length;c=2==d?"XY":3==d?"XYZ":4==d?"XYZM":void 0}b.g=c;b.b=d}
+p.Eb=function(b){this.a&&(b(this.a,this.a,this.b),this.v())};p.rotate=function(b,c){var d=this.a;if(d){for(var e=d.length,f=this.b,g=d?d:[],h=Math.cos(b),k=Math.sin(b),l=c[0],m=c[1],n=0,q=0;q<e;q+=f){var r=d[q]-l,u=d[q+1]-m;g[n++]=l+r*h-u*k;g[n++]=m+r*k+u*h;for(r=q+2;r<q+f;++r)g[n++]=d[r]}d&&g.length!=n&&(g.length=n);this.v()}};function Ec(b,c){var d=0,e,f;e=0;for(f=c.length;e<f;++e)b[d++]=c[e];return d}function Fc(b,c,d,e){var f,g;f=0;for(g=d.length;f<g;++f){var h=d[f],k;for(k=0;k<e;++k)b[c++]=h[k]}return c}function Gc(b,c,d,e,f){f=f?f:[];var g=0,h,k;h=0;for(k=d.length;h<k;++h)c=Fc(b,c,d[h],e),f[g++]=c;f.length=g;return f};function Hc(b,c,d,e,f){f=void 0!==f?f:[];for(var g=0;c<d;c+=e)f[g++]=b.slice(c,c+e);f.length=g;return f}function Ic(b,c,d,e,f){f=void 0!==f?f:[];var g=0,h,k;h=0;for(k=d.length;h<k;++h){var l=d[h];f[g++]=Hc(b,c,l,e,f[g]);c=l}f.length=g;return f};function Jc(b,c,d,e,f,g,h){var k=(d-c)/e;if(3>k){for(;c<d;c+=e)g[h++]=b[c],g[h++]=b[c+1];return h}var l=Array(k);l[0]=1;l[k-1]=1;d=[c,d-e];for(var m=0,n;0<d.length;){var q=d.pop(),r=d.pop(),u=0,w=b[r],y=b[r+1],z=b[q],D=b[q+1];for(n=r+e;n<q;n+=e){var t,v=b[n];t=b[n+1];var B=w,E=y,C=z-B,G=D-E;if(0!==C||0!==G){var J=((v-B)*C+(t-E)*G)/(C*C+G*G);1<J?(B=z,E=D):0<J&&(B+=C*J,E+=G*J)}v=B-v;t=E-t;t=v*v+t*t;t>u&&(m=n,u=t)}u>f&&(l[(m-c)/e]=1,r+e<m&&d.push(r,m),m+e<q&&d.push(m,q))}for(n=0;n<k;++n)l[n]&&(g[h++]=
+b[c+n*e],g[h++]=b[c+n*e+1]);return h}
+function Kc(b,c,d,e,f,g,h,k){var l,m;l=0;for(m=d.length;l<m;++l){var n=d[l];a:{var q=b,r=n,u=e,w=f,y=g;if(c!=r){var z=w*Math.round(q[c]/w),D=w*Math.round(q[c+1]/w);c+=u;y[h++]=z;y[h++]=D;var t=void 0,v=void 0;do if(t=w*Math.round(q[c]/w),v=w*Math.round(q[c+1]/w),c+=u,c==r){y[h++]=t;y[h++]=v;break a}while(t==z&&v==D);for(;c<r;){var B,E;B=w*Math.round(q[c]/w);E=w*Math.round(q[c+1]/w);c+=u;if(B!=t||E!=v){var C=t-z,G=v-D,J=B-z,A=E-D;C*A==G*J&&(0>C&&J<C||C==J||0<C&&J>C)&&(0>G&&A<G||G==A||0<G&&A>G)||(y[h++]=
+t,y[h++]=v,z=t,D=v);t=B;v=E}}y[h++]=t;y[h++]=v}}k.push(h);c=n}return h};function Lc(b,c){Bc.call(this);this.W(b,c)}M(Lc,Bc);p=Lc.prototype;p.clone=function(){var b=new Lc(null);U(b,this.g,this.a.slice());b.v();return b};p.ra=function(){return Hc(this.a,0,this.a.length,this.b)};p.Ma=function(b){var c=[];c.length=Jc(this.a,0,this.a.length,this.b,b,c,0);b=new Lc(null);U(b,"XY",c);b.v();return b};p.U=function(){return"LinearRing"};p.W=function(b,c){b?(Dc(this,c,b,1),this.a||(this.a=[]),this.a.length=Fc(this.a,0,b,this.b)):U(this,"XY",null);this.v()};function Mc(b,c){Bc.call(this);this.W(b,c)}M(Mc,Bc);p=Mc.prototype;p.clone=function(){var b=new Mc(null);U(b,this.g,this.a.slice());b.v();return b};p.ra=function(){return this.a?this.a.slice():[]};p.ib=function(b){return Qb(this.a,b)};p.U=function(){return"Point"};p.W=function(b,c){b?(Dc(this,c,b,0),this.a||(this.a=[]),this.a.length=Ec(this.a,b)):U(this,"XY",null);this.v()};function Nc(b,c,d,e,f,g){for(var h=!1,k=b[d-e],l=b[d-e+1];c<d;c+=e){var m=b[c],n=b[c+1];l>g!=n>g&&f<(m-k)*(g-l)/(n-l)+k&&(h=!h);k=m;l=n}return h};function Oc(b,c,d,e,f,g,h){var k,l,m,n,q,r=f[g+1],u=[],w=d[0];m=b[w-e];q=b[w-e+1];for(k=c;k<w;k+=e){n=b[k];l=b[k+1];if(r<=q&&l<=r||q<=r&&r<=l)m=(r-q)/(l-q)*(n-m)+m,u.push(m);m=n;q=l}w=NaN;q=-Infinity;u.sort(Ha);m=u[0];k=1;for(l=u.length;k<l;++k){n=u[k];var y=Math.abs(n-m);if(y>q){m=(m+n)/2;var z;a:if(0!==d.length&&Nc(b,c,d[0],e,m,r)){var D=z=void 0;z=1;for(D=d.length;z<D;++z)if(Nc(b,d[z-1],d[z],e,m,r)){z=!1;break a}z=!0}else z=!1;z&&(w=m,q=y)}m=n}isNaN(w)&&(w=f[g]);return h?(h.push(w,r),h):[w,r]}
+;function Pc(b,c,d,e){for(var f=0,g=b[d-e],h=b[d-e+1];c<d;c+=e)var k=b[c],l=b[c+1],f=f+(k-g)*(l+h),g=k,h=l;return 0<f}function Qc(b,c,d,e){var f=0;e=void 0!==e?e:!1;var g,h;g=0;for(h=c.length;g<h;++g){var k=c[g],f=Pc(b,f,k,d);if(0===g){if(e&&f||!e&&!f)return!1}else if(e&&!f||!e&&f)return!1;f=k}return!0}
+function Rc(b,c,d,e,f){f=void 0!==f?f:!1;var g,h;g=0;for(h=d.length;g<h;++g){var k=d[g],l=Pc(b,c,k,e);if(0===g?f&&l||!f&&!l:f&&!l||!f&&l)for(var l=b,m=k,n=e;c<m-n;){var q;for(q=0;q<n;++q){var r=l[c+q];l[c+q]=l[m-n+q];l[m-n+q]=r}c+=n;m-=n}c=k}return c}function Sc(b,c,d,e){var f=0,g,h;g=0;for(h=c.length;g<h;++g)f=Rc(b,f,c[g],d,e);return f};function Tc(b,c){Bc.call(this);this.c=[];this.B=-1;this.D=null;this.G=-1;this.j=null;this.W(b,c)}M(Tc,Bc);p=Tc.prototype;p.clone=function(){var b=new Tc(null);Uc(b,this.g,this.a.slice(),this.c.slice());return b};p.ra=function(b){var c;void 0!==b?(c=Vc(this).slice(),Rc(c,0,this.c,this.b,b)):c=this.a;return Ic(c,0,this.c,this.b)};p.ab=function(){return this.c};function Wc(b){if(b.B!=b.f){var c=Yb(b.C());b.D=Oc(Vc(b),0,b.c,b.b,c,0);b.B=b.f}return b.D}
+function Vc(b){if(b.G!=b.f){var c=b.a;Qc(c,b.c,b.b)?b.j=c:(b.j=c.slice(),b.j.length=Rc(b.j,0,b.c,b.b));b.G=b.f}return b.j}p.Ma=function(b){var c=[],d=[];c.length=Kc(this.a,0,this.c,this.b,Math.sqrt(b),c,0,d);b=new Tc(null);Uc(b,"XY",c,d);return b};p.U=function(){return"Polygon"};p.W=function(b,c){if(b){Dc(this,c,b,2);this.a||(this.a=[]);var d=Gc(this.a,0,b,this.b,this.c);this.a.length=0===d.length?0:d[d.length-1];this.v()}else Uc(this,"XY",null,this.c)};function Uc(b,c,d,e){U(b,c,d);b.c=e;b.v()};function V(b){T.call(this);b=b||{};this.g=[0,0];var c={};c.center=void 0!==b.center?b.center:null;this.h=vc(b.projection);var d,e,f,g=void 0!==b.minZoom?b.minZoom:0;d=void 0!==b.maxZoom?b.maxZoom:28;var h=void 0!==b.zoomFactor?b.zoomFactor:2;if(void 0!==b.resolutions)d=b.resolutions,e=d[0],f=d[d.length-1],d=Pa(d);else{e=vc(b.projection);f=e.C();var k=(f?Math.max(Vb(f),Wb(f)):360*hc.degrees/pc(e))/256/Math.pow(2,0),l=k/Math.pow(2,28);e=b.maxResolution;void 0!==e?g=0:e=k/Math.pow(h,g);f=b.minResolution;
+void 0===f&&(f=void 0!==b.maxZoom?void 0!==b.maxResolution?e/Math.pow(h,d):k/Math.pow(h,d):l);d=g+Math.floor(Math.log(e/f)/Math.log(h));f=e/Math.pow(h,d-g);d=Qa(h,e,d-g)}this.b=e;this.i=f;this.c=g;g=void 0!==b.extent?Fa(b.extent):Ga;(void 0!==b.enableRotation?b.enableRotation:1)?(e=b.constrainRotation,e=void 0===e||!0===e?Ua():!1===e?Sa:ea(e)?Ta(e):Sa):e=Ra;this.a=new Va(g,d,e);void 0!==b.resolution?c.resolution=b.resolution:void 0!==b.zoom&&(c.resolution=this.constrainResolution(this.b,b.zoom-this.c));
+c.rotation=void 0!==b.rotation?b.rotation:0;this.l(c)}M(V,T);p=V.prototype;p.constrainResolution=function(b,c,d){return this.a.resolution(b,c||0,d||0)};p.constrainRotation=function(b,c){return this.a.rotation(b,c||0)};p.ia=function(){return this.get("center")};p.jc=function(b){var c=this.ia(),d=this.I(),e=this.Z();return Zb(c,d,e,b)};p.le=function(){return this.h};p.I=function(){return this.get("resolution")};function Xc(b,c){return Math.max(Vb(b)/c[0],Wb(b)/c[1])}p.Z=function(){return this.get("rotation")};
+p.N=function(){var b=this.ia(),c=this.h,d=this.I(),e=this.Z();return{center:[Math.round(b[0]/d)*d,Math.round(b[1]/d)*d],projection:void 0!==c?c:null,resolution:d,rotation:e}};p.wd=function(){var b,c=this.I();if(void 0!==c){var d,e=0;do{d=this.constrainResolution(this.b,e);if(d==c){b=e;break}++e}while(d>this.i)}return void 0!==b?this.c+b:b};
+p.nd=function(b,c,d){if(!(b instanceof Bc)){var e=b[0],f=b[1],g=b[2],h=b[3],e=[e,f,e,h,g,h,g,f,e,f],f=new Tc(null);Uc(f,"XY",e,[e.length]);b=f}e=d||{};d=void 0!==e.padding?e.padding:[0,0,0,0];var h=void 0!==e.constrainResolution?e.constrainResolution:!0,f=void 0!==e.nearest?e.nearest:!1,k;void 0!==e.minResolution?k=e.minResolution:void 0!==e.maxZoom?k=this.constrainResolution(this.b,e.maxZoom-this.c,0):k=0;var l=b.a,g=this.Z(),e=Math.cos(-g),g=Math.sin(-g),m=Infinity,n=Infinity,q=-Infinity,r=-Infinity;
+b=b.b;for(var u=0,w=l.length;u<w;u+=b)var y=l[u]*e-l[u+1]*g,z=l[u]*g+l[u+1]*e,m=Math.min(m,y),n=Math.min(n,z),q=Math.max(q,y),r=Math.max(r,z);c=Xc([m,n,q,r],[c[0]-d[1]-d[3],c[1]-d[0]-d[2]]);c=isNaN(c)?k:Math.max(c,k);h&&(k=this.constrainResolution(c,0,0),!f&&k<c&&(k=this.constrainResolution(k,-1,0)),c=k);Yc(this,c);g=-g;k=(m+q)/2+(d[1]-d[3])/2*c;c=(n+r)/2+(d[0]-d[2])/2*c;this.oa([k*e-c*g,c*e+k*g])};
+p.rotate=function(b,c){if(void 0!==c){var d,e=this.ia();void 0!==e&&(d=[e[0]-c[0],e[1]-c[1]],vb(d,b-this.Z()),ub(d,c));this.oa(d)}this.set("rotation",b)};p.oa=function(b){this.set("center",b)};function Zc(b,c){b.g[1]+=c}function Yc(b,c){b.set("resolution",c)}p.Ee=function(b){b=this.constrainResolution(this.b,b-this.c,0);Yc(this,b)};function $c(b){return 1-Math.pow(1-b,3)}function ad(b){return 3*b*b-2*b*b*b}function bd(b){return b};function cd(b){var c=b.source,d=b.start?b.start:Date.now(),e=c[0],f=c[1],g=void 0!==b.duration?b.duration:1E3,h=b.easing?b.easing:ad;return function(b,c){if(c.time<d)return c.animate=!0,c.viewHints[0]+=1,!0;if(c.time<d+g){var m=1-h((c.time-d)/g),n=e-c.viewState.center[0],q=f-c.viewState.center[1];c.animate=!0;c.viewState.center[0]+=m*n;c.viewState.center[1]+=m*q;c.viewHints[0]+=1;return!0}return!1}}
+function dd(b){var c=b.rotation?b.rotation:0,d=b.start?b.start:Date.now(),e=void 0!==b.duration?b.duration:1E3,f=b.easing?b.easing:ad,g=b.anchor?b.anchor:null;return function(b,k){if(k.time<d)return k.animate=!0,k.viewHints[0]+=1,!0;if(k.time<d+e){var l=1-f((k.time-d)/e),l=(c-k.viewState.rotation)*l;k.animate=!0;k.viewState.rotation+=l;if(g){var m=k.viewState.center;m[0]-=g[0];m[1]-=g[1];vb(m,l);ub(m,g)}k.viewHints[0]+=1;return!0}return!1}}
+function ed(b){var c=b.resolution,d=b.start?b.start:Date.now(),e=void 0!==b.duration?b.duration:1E3,f=b.easing?b.easing:ad;return function(b,h){if(h.time<d)return h.animate=!0,h.viewHints[0]+=1,!0;if(h.time<d+e){var k=1-f((h.time-d)/e),l=c-h.viewState.resolution;h.animate=!0;h.viewState.resolution+=k*l;h.viewHints[0]+=1;return!0}return!1}};function fd(b,c,d,e){this.a=b;this.f=c;this.b=d;this.c=e}function gd(b,c,d){return b.a<=c&&c<=b.f&&b.b<=d&&d<=b.c}function hd(b,c){return b.a==c.a&&b.b==c.b&&b.f==c.f&&b.c==c.c}fd.prototype.ha=function(){return this.f-this.a+1};function id(b,c){return b.a<=c.f&&b.f>=c.a&&b.b<=c.c&&b.c>=c.b};function jd(b){this.b=b.html;this.a=b.tileRanges?b.tileRanges:null};function kd(b,c,d){R.call(this,b,d);this.element=c}M(kd,R);function ld(b){T.call(this);this.a=b?b:[];md(this)}M(ld,T);p=ld.prototype;p.clear=function(){for(;0<this.get("length");)this.pop()};function nd(b,c,d){b.a.forEach(c,d)}p.item=function(b){return this.a[b]};p.pop=function(){return od(this,this.get("length")-1)};p.push=function(b){var c=this.a.length;this.a.splice(c,0,b);md(this);S(this,new kd("add",b,this));return c};
+p.remove=function(b){var c=this.a,d,e;d=0;for(e=c.length;d<e;++d)if(c[d]===b)return od(this,d)};function od(b,c){var d=b.a[c];b.a.splice(c,1);md(b);S(b,new kd("remove",d,b));return d}function md(b){b.set("length",b.a.length)};function pd(b,c){Array.prototype.forEach.call(b,c,void 0)}function qd(b){var c=b.length;if(0<c){for(var d=Array(c),e=0;e<c;e++)d[e]=b[e];return d}return[]}function rd(b,c,d){return 2>=arguments.length?Array.prototype.slice.call(b,c):Array.prototype.slice.call(b,c,d)};var sd=/^#(?:[0-9a-f]{3}){1,2}$/i,td=/^(?:rgb)?\((0|[1-9]\d{0,2}),\s?(0|[1-9]\d{0,2}),\s?(0|[1-9]\d{0,2})\)$/i,ud=/^(?:rgba)?\((0|[1-9]\d{0,2}),\s?(0|[1-9]\d{0,2}),\s?(0|[1-9]\d{0,2}),\s?(0|1|0\.\d{0,10})\)$/i;function vd(b){if("string"!==typeof b){var c=b[0];c!=(c|0)&&(c=c+.5|0);var d=b[1];d!=(d|0)&&(d=d+.5|0);var e=b[2];e!=(e|0)&&(e=e+.5|0);b="rgba("+c+","+d+","+e+","+(void 0===b[3]?1:b[3])+")"}return b}
+var xd=function(){var b={},c=0;return function(d){var e;if(b.hasOwnProperty(d))e=b[d];else{if(1024<=c){e=0;for(var f in b)0===(e++&3)&&(delete b[f],--c)}var g,h;sd.exec(d)?(h=3==d.length-1?1:2,e=parseInt(d.substr(1+0*h,h),16),f=parseInt(d.substr(1+1*h,h),16),g=parseInt(d.substr(1+2*h,h),16),1==h&&(e=(e<<4)+e,f=(f<<4)+f,g=(g<<4)+g),e=[e,f,g,1]):(h=ud.exec(d))?(e=Number(h[1]),f=Number(h[2]),g=Number(h[3]),h=Number(h[4]),e=[e,f,g,h],e=wd(e,e)):(h=td.exec(d))?(e=Number(h[1]),f=Number(h[2]),g=Number(h[3]),
+e=[e,f,g,1],e=wd(e,e)):e=void 0;b[d]=e;++c}return e}}();function wd(b,c){var d=c||[];d[0]=Ca(b[0]+.5|0,0,255);d[1]=Ca(b[1]+.5|0,0,255);d[2]=Ca(b[2]+.5|0,0,255);d[3]=Ca(b[3],0,1);return d};function yd(b){return"string"===typeof b||b instanceof CanvasPattern||b instanceof CanvasGradient?b:vd(b)};var zd;a:{var Ad=x.navigator;if(Ad){var Bd=Ad.userAgent;if(Bd){zd=Bd;break a}}zd=""}function W(b){return-1!=zd.indexOf(b)};function Cd(b,c){for(var d in b)c.call(void 0,b[d],d,b)}var Dd="constructor hasOwnProperty isPrototypeOf propertyIsEnumerable toLocaleString toString valueOf".split(" ");function Ed(b,c){for(var d,e,f=1;f<arguments.length;f++){e=arguments[f];for(d in e)b[d]=e[d];for(var g=0;g<Dd.length;g++)d=Dd[g],Object.prototype.hasOwnProperty.call(e,d)&&(b[d]=e[d])}};var Fd=W("Opera")||W("OPR"),Gd=W("Trident")||W("MSIE"),Hd=W("Edge"),Id=W("Gecko")&&!(-1!=zd.toLowerCase().indexOf("webkit")&&!W("Edge"))&&!(W("Trident")||W("MSIE"))&&!W("Edge"),Jd=-1!=zd.toLowerCase().indexOf("webkit")&&!W("Edge");function Kd(){var b=x.document;return b?b.documentMode:void 0}var Ld;
+a:{var Md="",Nd=function(){var b=zd;if(Id)return/rv\:([^\);]+)(\)|;)/.exec(b);if(Hd)return/Edge\/([\d\.]+)/.exec(b);if(Gd)return/\b(?:MSIE|rv)[: ]([^\);]+)(\)|;)/.exec(b);if(Jd)return/WebKit\/(\S+)/.exec(b);if(Fd)return/(?:Version)[ \/]?(\S+)/.exec(b)}();Nd&&(Md=Nd?Nd[1]:"");if(Gd){var Od=Kd();if(null!=Od&&Od>parseFloat(Md)){Ld=String(Od);break a}}Ld=Md}var Pd={};
+function Qd(b){var c;if(!(c=Pd[b])){c=0;for(var d=sa(String(Ld)).split("."),e=sa(String(b)).split("."),f=Math.max(d.length,e.length),g=0;0==c&&g<f;g++){var h=d[g]||"",k=e[g]||"",l=RegExp("(\\d*)(\\D*)","g"),m=RegExp("(\\d*)(\\D*)","g");do{var n=l.exec(h)||["","",""],q=m.exec(k)||["","",""];if(0==n[0].length&&0==q[0].length)break;c=Ba(0==n[1].length?0:parseInt(n[1],10),0==q[1].length?0:parseInt(q[1],10))||Ba(0==n[2].length,0==q[2].length)||Ba(n[2],q[2])}while(0==c)}c=Pd[b]=0<=c}return c}
+var Rd=x.document,Sd=Rd&&Gd?Kd()||("CSS1Compat"==Rd.compatMode?parseInt(Ld,10):5):void 0;var Td=!Gd||9<=Number(Sd);!Id&&!Gd||Gd&&9<=Number(Sd)||Id&&Qd("1.9.1");Gd&&Qd("9");function Ud(b,c){this.x=void 0!==b?b:0;this.y=void 0!==c?c:0}p=Ud.prototype;p.clone=function(){return new Ud(this.x,this.y)};p.ceil=function(){this.x=Math.ceil(this.x);this.y=Math.ceil(this.y);return this};p.floor=function(){this.x=Math.floor(this.x);this.y=Math.floor(this.y);return this};p.round=function(){this.x=Math.round(this.x);this.y=Math.round(this.y);return this};p.scale=function(b,c){var d=ea(c)?c:b;this.x*=b;this.y*=d;return this};function Vd(b,c){this.width=b;this.height=c}p=Vd.prototype;p.clone=function(){return new Vd(this.width,this.height)};p.ceil=function(){this.width=Math.ceil(this.width);this.height=Math.ceil(this.height);return this};p.floor=function(){this.width=Math.floor(this.width);this.height=Math.floor(this.height);return this};p.round=function(){this.width=Math.round(this.width);this.height=Math.round(this.height);return this};p.scale=function(b,c){var d=ea(c)?c:b;this.width*=b;this.height*=d;return this};function Wd(b){return b?new Xd(Yd(b)):qa||(qa=new Xd)}function Zd(b){var c=document;return da(b)?c.getElementById(b):b}function $d(b,c){Cd(c,function(c,e){"style"==e?b.style.cssText=c:"class"==e?b.className=c:"for"==e?b.htmlFor=c:ae.hasOwnProperty(e)?b.setAttribute(ae[e],c):0==e.lastIndexOf("aria-",0)||0==e.lastIndexOf("data-",0)?b.setAttribute(e,c):b[e]=c})}
+var ae={cellpadding:"cellPadding",cellspacing:"cellSpacing",colspan:"colSpan",frameborder:"frameBorder",height:"height",maxlength:"maxLength",nonce:"nonce",role:"role",rowspan:"rowSpan",type:"type",usemap:"useMap",valign:"vAlign",width:"width"};
+function be(b,c,d){var e=arguments,f=document,g=e[0],h=e[1];if(!Td&&h&&(h.name||h.type)){g=["<",g];h.name&&g.push(' name="',ta(h.name),'"');if(h.type){g.push(' type="',ta(h.type),'"');var k={};Ed(k,h);delete k.type;h=k}g.push(">");g=g.join("")}g=f.createElement(g);h&&(da(h)?g.className=h:"array"==ba(h)?g.className=h.join(" "):$d(g,h));2<e.length&&ce(f,g,e);return g}
+function ce(b,c,d){function e(d){d&&c.appendChild(da(d)?b.createTextNode(d):d)}for(var f=2;f<d.length;f++){var g=d[f];!ca(g)||ha(g)&&0<g.nodeType?e(g):pd(de(g)?qd(g):g,e)}}function ee(b){for(var c;c=b.firstChild;)b.removeChild(c)}function fe(b,c,d){b.insertBefore(c,b.childNodes[d]||null)}function ge(b){b&&b.parentNode&&b.parentNode.removeChild(b)}function he(b,c){var d=c.parentNode;d&&d.replaceChild(b,c)}
+function ie(b,c){if(!b||!c)return!1;if(b.contains&&1==c.nodeType)return b==c||b.contains(c);if("undefined"!=typeof b.compareDocumentPosition)return b==c||!!(b.compareDocumentPosition(c)&16);for(;c&&b!=c;)c=c.parentNode;return c==b}function Yd(b){return 9==b.nodeType?b:b.ownerDocument||b.document}function de(b){if(b&&"number"==typeof b.length){if(ha(b))return"function"==typeof b.item||"string"==typeof b.item;if(ga(b))return"function"==typeof b.item}return!1}
+function Xd(b){this.a=b||x.document||document}Xd.prototype.appendChild=function(b,c){b.appendChild(c)};function je(b,c,d,e){this.top=b;this.right=c;this.bottom=d;this.left=e}p=je.prototype;p.ha=function(){return this.right-this.left};p.clone=function(){return new je(this.top,this.right,this.bottom,this.left)};p.ceil=function(){this.top=Math.ceil(this.top);this.right=Math.ceil(this.right);this.bottom=Math.ceil(this.bottom);this.left=Math.ceil(this.left);return this};
+p.floor=function(){this.top=Math.floor(this.top);this.right=Math.floor(this.right);this.bottom=Math.floor(this.bottom);this.left=Math.floor(this.left);return this};p.round=function(){this.top=Math.round(this.top);this.right=Math.round(this.right);this.bottom=Math.round(this.bottom);this.left=Math.round(this.left);return this};p.scale=function(b,c){var d=ea(c)?c:b;this.left*=b;this.right*=b;this.top*=d;this.bottom*=d;return this};function ke(b,c){var d=Yd(b);return d.defaultView&&d.defaultView.getComputedStyle&&(d=d.defaultView.getComputedStyle(b,null))?d[c]||d.getPropertyValue(c)||"":""}function le(b){var c;try{c=b.getBoundingClientRect()}catch(d){return{left:0,top:0,right:0,bottom:0}}Gd&&b.ownerDocument.body&&(b=b.ownerDocument,c.left-=b.documentElement.clientLeft+b.body.clientLeft,c.top-=b.documentElement.clientTop+b.body.clientTop);return c}
+function me(b){var c=ne;if("none"!=(ke(b,"display")||(b.currentStyle?b.currentStyle.display:null)||b.style&&b.style.display))return c(b);var d=b.style,e=d.display,f=d.visibility,g=d.position;d.visibility="hidden";d.position="absolute";d.display="inline";b=c(b);d.display=e;d.position=g;d.visibility=f;return b}function ne(b){var c=b.offsetWidth,d=b.offsetHeight,e=Jd&&!c&&!d;return(void 0===c||e)&&b.getBoundingClientRect?(b=le(b),new Vd(b.right-b.left,b.bottom-b.top)):new Vd(c,d)}
+function oe(b,c){b.style.display=c?"":"none"}function pe(b,c,d,e){if(/^\d+px?$/.test(c))return parseInt(c,10);var f=b.style[d],g=b.runtimeStyle[d];b.runtimeStyle[d]=b.currentStyle[d];b.style[d]=c;c=b.style[e];b.style[d]=f;b.runtimeStyle[d]=g;return c}function qe(b,c){var d=b.currentStyle?b.currentStyle[c]:null;return d?pe(b,d,"left","pixelLeft"):0}var re={thin:2,medium:4,thick:6};
+function se(b,c){if("none"==(b.currentStyle?b.currentStyle[c+"Style"]:null))return 0;var d=b.currentStyle?b.currentStyle[c+"Width"]:null;return d in re?re[d]:pe(b,d,"left","pixelLeft")};function te(b,c,d){R.call(this,b);this.map=c;this.frameState=void 0!==d?d:null}M(te,R);function ue(b){T.call(this);this.element=b.element?b.element:null;this.c=this.B=null;this.h=[];this.render=b.render?b.render:pa;b.target&&(this.B=Zd(b.target))}M(ue,T);ue.prototype.J=function(){ge(this.element);ue.X.J.call(this)};ue.prototype.setMap=function(b){this.c&&ge(this.element);for(var c=0,d=this.h.length;c<d;++c)N(this.h[c]);this.h.length=0;if(this.c=b)(this.B?this.B:b.j).appendChild(this.element),this.render!==pa&&this.h.push(Q(b,"postrender",this.render,this)),b.render()};function ve(){this.f=0;this.c={};this.b=this.a=null}p=ve.prototype;p.clear=function(){this.f=0;this.c={};this.b=this.a=null};function we(b,c){return b.c.hasOwnProperty(c)}function xe(b,c){for(var d=b.a;d;)c.call(void 0,d.Ia,d.Rb,b),d=d.ma}p.get=function(b){b=this.c[b];if(b===this.b)return b.Ia;b===this.a?(this.a=this.a.ma,this.a.Ra=null):(b.ma.Ra=b.Ra,b.Ra.ma=b.ma);b.ma=null;b.Ra=this.b;this.b=this.b.ma=b;return b.Ia};
+p.pop=function(){var b=this.a;delete this.c[b.Rb];b.ma&&(b.ma.Ra=null);this.a=b.ma;this.a||(this.b=null);--this.f;return b.Ia};p.replace=function(b,c){this.get(b);this.c[b].Ia=c};p.set=function(b,c){var d={Rb:b,ma:null,Ra:this.b,Ia:c};this.b?this.b.ma=d:this.a=d;this.b=d;this.c[b]=d;++this.f};function ye(b){ve.call(this);this.g=void 0!==b?b:2048}M(ye,ve);function ze(b){return b.f>b.g}function Ae(b,c){for(var d,e;ze(b);){d=b.a.Ia;e=d.L[0].toString();var f;if(f=e in c)d=d.L,f=gd(c[e],d[1],d[2]);if(f)break;else jb(b.pop())}};function Be(b,c){mb.call(this);this.L=b;this.state=c;this.a=null;this.key=""}M(Be,mb);function Ce(b){S(b,"change")}Be.prototype.getKey=function(){return I(this).toString()};Be.prototype.N=function(){return this.state};function De(b){T.call(this);this.c=lc(b.projection);this.i=Ee(b.attributions);this.w=b.logo;this.B=void 0!==b.state?b.state:"ready";this.j=void 0!==b.wrapX?b.wrapX:!1}M(De,T);function Ee(b){if("string"===typeof b)return[new jd({html:b})];if(b instanceof jd)return[b];if(Array.isArray(b)){for(var c=b.length,d=Array(c),e=0;e<c;e++){var f=b[e];d[e]="string"===typeof f?new jd({html:f}):f}return d}return null}De.prototype.N=function(){return this.B};De.prototype.wa=function(){this.v()};function Fe(b){this.minZoom=void 0!==b.minZoom?b.minZoom:0;this.b=b.resolutions;this.maxZoom=this.b.length-1;this.f=void 0!==b.origin?b.origin:null;this.g=null;void 0!==b.origins&&(this.g=b.origins);var c=b.extent;void 0===c||this.f||this.g||(this.f=bc(c));this.h=null;void 0!==b.tileSizes&&(this.h=b.tileSizes);this.l=void 0!==b.tileSize?b.tileSize:this.h?null:256;this.i=void 0!==c?c:null;this.a=null;void 0!==b.sizes?this.a=b.sizes.map(function(b){return new fd(Math.min(0,b[0]),Math.max(b[0]-1,-1),
+Math.min(0,b[1]),Math.max(b[1]-1,-1))},this):c&&Ge(this,c);this.c=[0,0]}var He=[0,0,0];function Ie(b,c,d,e,f){f=Je(b,c,f);for(c=c[0]-1;c>=b.minZoom;){if(d.call(null,c,Ke(b,f,c,e)))return!0;--c}return!1}Fe.prototype.C=function(){return this.i};Fe.prototype.ka=function(b){return this.f?this.f:this.g[b]};Fe.prototype.I=function(b){return this.b[b]};Fe.prototype.Nb=function(){return this.b};function Le(b,c,d,e){return c[0]<b.maxZoom?(e=Je(b,c,e),Ke(b,e,c[0]+1,d)):null}
+function Me(b,c,d,e){Ne(b,c[0],c[1],d,!1,He);var f=He[1],g=He[2];Ne(b,c[2],c[3],d,!0,He);b=He[1];c=He[2];void 0!==e?(e.a=f,e.f=b,e.b=g,e.c=c):e=new fd(f,b,g,c);return e}function Ke(b,c,d,e){d=b.I(d);return Me(b,c,d,e)}function Oe(b,c){var d=b.ka(c[0]),e=b.I(c[0]),f=tb(Pe(b,c[0]),b.c);return[d[0]+(c[1]+.5)*f[0]*e,d[1]+(c[2]+.5)*f[1]*e]}function Je(b,c,d){var e=b.ka(c[0]),f=b.I(c[0]);b=tb(Pe(b,c[0]),b.c);var g=e[0]+c[1]*b[0]*f;c=e[1]+c[2]*b[1]*f;return Ob(g,c,g+b[0]*f,c+b[1]*f,d)}
+function Ne(b,c,d,e,f,g){var h=Qe(b,e),k=e/b.I(h),l=b.ka(h);b=tb(Pe(b,h),b.c);c=k*Math.floor((c-l[0])/e+(f?.5:0))/b[0];d=k*Math.floor((d-l[1])/e+(f?0:.5))/b[1];f?(c=Math.ceil(c)-1,d=Math.ceil(d)-1):(c=Math.floor(c),d=Math.floor(d));f=c;void 0!==g?(g[0]=h,g[1]=f,g[2]=d):g=[h,f,d];return g}function Re(b,c,d){d=b.I(d);return Ne(b,c[0],c[1],d,!1,void 0)}function Pe(b,c){return b.l?b.l:b.h[c]}function Qe(b,c){var d=Ia(b.b,c,0);return Ca(d,b.minZoom,b.maxZoom)}
+function Ge(b,c){for(var d=b.b.length,e=Array(d),f=b.minZoom;f<d;++f)e[f]=Ke(b,c,f);b.a=e}function Se(b){var c=b.c;if(!c){var c=Te(b),d=Ue(c,void 0,void 0),c=new Fe({extent:c,origin:bc(c),resolutions:d,tileSize:void 0});b.c=c}return c}function Ue(b,c,d){c=void 0!==c?c:42;var e=Wb(b);b=Vb(b);d=tb(void 0!==d?d:256);d=Math.max(b/d[0],e/d[1]);c+=1;e=Array(c);for(b=0;b<c;++b)e[b]=d/Math.pow(2,b);return e}function Te(b){b=lc(b);var c=b.C();c||(b=180*hc.degrees/pc(b),c=Ob(-b,-b,b,b));return c};function Ve(b){De.call(this,{attributions:b.attributions,extent:b.extent,logo:b.logo,projection:b.projection,state:b.state,wrapX:b.wrapX});this.G=void 0!==b.opaque?b.opaque:!1;this.Y=void 0!==b.tilePixelRatio?b.tilePixelRatio:1;this.tileGrid=void 0!==b.tileGrid?b.tileGrid:null;this.a=new ye(b.cacheSize);this.h=[0,0]}M(Ve,De);p=Ve.prototype;p.Qc=function(){return ze(this.a)};p.Rc=function(b,c){var d=this.bb(b);d&&Ae(d,c)};
+function We(b,c,d,e,f){c=b.bb(c);if(!c)return!1;for(var g=!0,h,k,l=e.a;l<=e.f;++l)for(var m=e.b;m<=e.c;++m)h=b.lb(d,l,m),k=!1,we(c,h)&&(h=c.get(h),(k=2===h.N())&&(k=!1!==f(h))),k||(g=!1);return g}p.kb=function(){return 0};p.lb=function(b,c,d){return b+"/"+c+"/"+d};p.Mb=function(){return this.G};p.Nb=function(){return this.tileGrid.Nb()};p.la=function(b){return this.tileGrid?this.tileGrid:Se(b)};p.bb=function(b){var c=this.c;return c&&!wc(c,b)?null:this.a};p.mb=function(){return this.Y};
+function Xe(b,c,d,e){e=b.la(e);d=b.mb(d);c=tb(Pe(e,c),b.h);return 1==d?c:sb(c,d,b.h)}function Ye(b,c,d){var e=void 0!==d?d:b.c;d=b.la(e);if(b.j&&e.f){var f=c;c=f[0];b=Oe(d,f);var e=Te(e),g=b[0],h=b[1];e[0]<=g&&g<=e[2]&&e[1]<=h&&h<=e[3]?c=f:(f=Vb(e),b[0]+=f*Math.ceil((e[0]-b[0])/f),c=Re(d,b,c))}e=c[0];b=c[1];f=c[2];d=d.minZoom>e||e>d.maxZoom?!1:(d=(g=d.C())?Ke(d,g,e):d.a?d.a[e]:null)?gd(d,b,f):!0;return d?c:null}p.wa=function(){this.a.clear();this.v()};p.Yc=pa;
+function Ze(b,c){R.call(this,b);this.tile=c}M(Ze,R);function $e(b){b=b?b:{};this.s=document.createElement("UL");this.j=document.createElement("LI");this.s.appendChild(this.j);oe(this.j,!1);this.g=void 0!==b.collapsed?b.collapsed:!0;this.i=void 0!==b.collapsible?b.collapsible:!0;this.i||(this.g=!1);var c=void 0!==b.className?b.className:"ol-attribution",d=void 0!==b.tipLabel?b.tipLabel:"Attributions",e=void 0!==b.collapseLabel?b.collapseLabel:"\u00bb";this.u="string"===typeof e?be("SPAN",{},e):e;e=void 0!==b.label?b.label:"i";this.w="string"===typeof e?
+be("SPAN",{},e):e;d=be("BUTTON",{type:"button",title:d},this.i&&!this.g?this.u:this.w);Q(d,"click",this.G,this);c=be("DIV",c+" ol-unselectable ol-control"+(this.g&&this.i?" ol-collapsed":"")+(this.i?"":" ol-uncollapsible"),this.s,d);ue.call(this,{element:c,render:b.render?b.render:af,target:b.target});this.o=!0;this.b={};this.a={};this.D={}}M($e,ue);
+function af(b){if(b=b.frameState){var c,d,e,f,g,h,k,l,m,n,q,r=b.layerStatesArray,u=Wa({},b.attributions),w={},y=b.viewState.projection;d=0;for(c=r.length;d<c;d++)if(h=r[d].layer.V())if(n=I(h).toString(),m=h.i)for(e=0,f=m.length;e<f;e++)if(k=m[e],l=I(k).toString(),!(l in u)){if(g=b.usedTiles[n]){var z=h.la(y);a:{q=k;var D=y;if(q.a){var t=void 0,v=void 0,B=void 0,E=void 0;for(E in g)if(E in q.a)for(var B=g[E],C,t=0,v=q.a[E].length;t<v;++t){C=q.a[E][t];if(id(C,B)){q=!0;break a}var G=Ke(z,Te(D),parseInt(E,
+10)),J=G.ha();if(B.a<G.a||B.f>G.f)if(id(C,new fd(Ea(B.a,J),Ea(B.f,J),B.b,B.c))||B.ha()>J&&id(C,G)){q=!0;break a}}q=!1}else q=!0}}else q=!1;q?(l in w&&delete w[l],u[l]=k):w[l]=k}c=[u,w];d=c[0];c=c[1];for(var A in this.b)A in d?(this.a[A]||(oe(this.b[A],!0),this.a[A]=!0),delete d[A]):A in c?(this.a[A]&&(oe(this.b[A],!1),delete this.a[A]),delete c[A]):(ge(this.b[A]),delete this.b[A],delete this.a[A]);for(A in d)e=document.createElement("LI"),e.innerHTML=d[A].b,this.s.appendChild(e),this.b[A]=e,this.a[A]=
+!0;for(A in c)e=document.createElement("LI"),e.innerHTML=c[A].b,oe(e,!1),this.s.appendChild(e),this.b[A]=e;A=!$a(this.a)||!$a(b.logos);this.o!=A&&(oe(this.element,A),this.o=A);A&&$a(this.a)?this.element.classList.add("ol-logo-only"):this.element.classList.remove("ol-logo-only");var H;b=b.logos;A=this.D;for(H in A)H in b||(ge(A[H]),delete A[H]);for(var O in b)O in A||(H=new Image,H.src=O,d=b[O],""===d?d=H:(d=be("A",{href:d}),d.appendChild(H)),this.j.appendChild(d),A[O]=d);oe(this.j,!$a(b))}else this.o&&
+(oe(this.element,!1),this.o=!1)}$e.prototype.G=function(b){b.preventDefault();this.element.classList.toggle("ol-collapsed");this.g?he(this.u,this.w):he(this.w,this.u);this.g=!this.g};function bf(b){b=b?b:{};var c=void 0!==b.className?b.className:"ol-rotate",d=void 0!==b.label?b.label:"\u21e7";this.a=null;"string"===typeof d?this.a=be("SPAN","ol-compass",d):(this.a=d,this.a.classList.add(this.a,"ol-compass"));d=be("BUTTON",{"class":c+"-reset",type:"button",title:b.tipLabel?b.tipLabel:"Reset rotation"},this.a);Q(d,"click",bf.prototype.o,this);c=be("DIV",c+" ol-unselectable ol-control",d);d=b.render?b.render:cf;this.g=b.resetNorth?b.resetNorth:void 0;ue.call(this,{element:c,render:d,
+target:b.target});this.i=void 0!==b.duration?b.duration:250;this.b=void 0!==b.autoHide?b.autoHide:!0;this.j=void 0;this.b&&this.element.classList.add("ol-hidden")}M(bf,ue);bf.prototype.o=function(b){b.preventDefault();if(void 0!==this.g)this.g();else{b=this.c;var c=b.O();if(c){var d=c.Z();void 0!==d&&(0<this.i&&(d%=2*Math.PI,d<-Math.PI&&(d+=2*Math.PI),d>Math.PI&&(d-=2*Math.PI),b.fa(dd({rotation:d,duration:this.i,easing:$c}))),c.set("rotation",0))}}};
+function cf(b){if(b=b.frameState){b=b.viewState.rotation;if(b!=this.j){var c="rotate("+b+"rad)";if(this.b){var d=this.element.classList.contains("ol-hidden");d||0!==b?d&&0!==b&&this.element.classList.remove("ol-hidden"):this.element.classList.add("ol-hidden")}this.a.style.msTransform=c;this.a.style.webkitTransform=c;this.a.style.transform=c}this.j=b}};function df(b){b=b?b:{};var c=void 0!==b.className?b.className:"ol-zoom",d=void 0!==b.delta?b.delta:1,e=void 0!==b.zoomOutLabel?b.zoomOutLabel:"\u2212",f=void 0!==b.zoomOutTipLabel?b.zoomOutTipLabel:"Zoom out",g=be("BUTTON",{"class":c+"-in",type:"button",title:void 0!==b.zoomInTipLabel?b.zoomInTipLabel:"Zoom in"},void 0!==b.zoomInLabel?b.zoomInLabel:"+");Q(g,"click",na(df.prototype.b,d),this);e=be("BUTTON",{"class":c+"-out",type:"button",title:f},e);Q(e,"click",na(df.prototype.b,-d),this);c=be("DIV",
+c+" ol-unselectable ol-control",g,e);ue.call(this,{element:c,target:b.target});this.a=void 0!==b.duration?b.duration:250}M(df,ue);df.prototype.b=function(b,c){c.preventDefault();var d=this.c,e=d.O();if(e){var f=e.I();f&&(0<this.a&&d.fa(ed({resolution:f,duration:this.a,easing:$c})),d=e.constrainResolution(f,b),Yc(e,d))}};function ef(b){b=b?b:{};var c=new ld;(void 0!==b.zoom?b.zoom:1)&&c.push(new df(b.zoomOptions));(void 0!==b.rotate?b.rotate:1)&&c.push(new bf(b.rotateOptions));(void 0!==b.attribution?b.attribution:1)&&c.push(new $e(b.attributionOptions));return c};var ff=Jd?"webkitfullscreenchange":Id?"mozfullscreenchange":Gd?"MSFullscreenChange":"fullscreenchange";function gf(){var b=Wd().a,c=b.body;return!!(c.webkitRequestFullscreen||c.mozRequestFullScreen&&b.mozFullScreenEnabled||c.msRequestFullscreen&&b.msFullscreenEnabled||c.requestFullscreen&&b.fullscreenEnabled)}
+function hf(b){b.webkitRequestFullscreen?b.webkitRequestFullscreen():b.mozRequestFullScreen?b.mozRequestFullScreen():b.msRequestFullscreen?b.msRequestFullscreen():b.requestFullscreen&&b.requestFullscreen()}function jf(){var b=Wd().a;return!!(b.webkitIsFullScreen||b.mozFullScreen||b.msFullscreenElement||b.fullscreenElement)};function kf(b){b=b?b:{};this.a=void 0!==b.className?b.className:"ol-full-screen";var c=void 0!==b.label?b.label:"\u2922";this.b="string"===typeof c?document.createTextNode(c):c;c=void 0!==b.labelActive?b.labelActive:"\u00d7";this.g="string"===typeof c?document.createTextNode(c):c;c=b.tipLabel?b.tipLabel:"Toggle full-screen";c=be("BUTTON",{"class":this.a+"-"+jf(),type:"button",title:c},this.b);Q(c,"click",this.s,this);var d=this.a+" ol-unselectable ol-control "+(gf()?"":"ol-unsupported"),c=be("DIV",
+d,c);ue.call(this,{element:c,target:b.target});this.o=void 0!==b.keys?b.keys:!1;this.i=b.source}M(kf,ue);
+kf.prototype.s=function(b){b.preventDefault();gf()&&(b=this.c)&&(jf()?(b=Wd().a,b.webkitCancelFullScreen?b.webkitCancelFullScreen():b.mozCancelFullScreen?b.mozCancelFullScreen():b.msExitFullscreen?b.msExitFullscreen():b.exitFullscreen&&b.exitFullscreen()):(b=this.i?Zd(this.i):b.Na(),this.o?b.mozRequestFullScreenWithKeys?b.mozRequestFullScreenWithKeys():b.webkitRequestFullscreen?b.webkitRequestFullscreen():hf(b):hf(b)))};
+kf.prototype.j=function(){var b=this.element.firstElementChild,c=this.c;jf()?(b.className=this.a+"-true",he(this.g,this.b)):(b.className=this.a+"-false",he(this.b,this.g));c&&c.vb()};kf.prototype.setMap=function(b){kf.X.setMap.call(this,b);b&&this.h.push(Q(x.document,ff,this.j,this))};var lf;
+function mf(){var b=x.MessageChannel;"undefined"===typeof b&&"undefined"!==typeof window&&window.postMessage&&window.addEventListener&&!W("Presto")&&(b=function(){var b=document.createElement("IFRAME");b.style.display="none";b.src="";document.documentElement.appendChild(b);var c=b.contentWindow,b=c.document;b.open();b.write("");b.close();var d="callImmediate"+Math.random(),e="file:"==c.location.protocol?"*":c.location.protocol+"//"+c.location.host,b=ma(function(b){if(("*"==e||b.origin==e)&&b.data==
+d)this.port1.onmessage()},this);c.addEventListener("message",b,!1);this.port1={};this.port2={postMessage:function(){c.postMessage(d,e)}}});if("undefined"!==typeof b&&!W("Trident")&&!W("MSIE")){var c=new b,d={},e=d;c.port1.onmessage=function(){if(void 0!==d.next){d=d.next;var b=d.lc;d.lc=null;b()}};return function(b){e.next={lc:b};e=e.next;c.port2.postMessage(0)}}return"undefined"!==typeof document&&"onreadystatechange"in document.createElement("SCRIPT")?function(b){var c=document.createElement("SCRIPT");
+c.onreadystatechange=function(){c.onreadystatechange=null;c.parentNode.removeChild(c);c=null;b();b=null};document.documentElement.appendChild(c)}:function(b){x.setTimeout(b,0)}};function nf(b,c,d){R.call(this,b);this.a=c;b=d?d:{};this.buttons=of(b);this.pressure=pf(b,this.buttons);this.bubbles="bubbles"in b?b.bubbles:!1;this.cancelable="cancelable"in b?b.cancelable:!1;this.view="view"in b?b.view:null;this.detail="detail"in b?b.detail:null;this.screenX="screenX"in b?b.screenX:0;this.screenY="screenY"in b?b.screenY:0;this.clientX="clientX"in b?b.clientX:0;this.clientY="clientY"in b?b.clientY:0;this.button="button"in b?b.button:0;this.relatedTarget="relatedTarget"in b?b.relatedTarget:
+null;this.pointerId="pointerId"in b?b.pointerId:0;this.width="width"in b?b.width:0;this.height="height"in b?b.height:0;this.pointerType="pointerType"in b?b.pointerType:"";this.isPrimary="isPrimary"in b?b.isPrimary:!1;c.preventDefault&&(this.preventDefault=function(){c.preventDefault()})}M(nf,R);function of(b){if(b.buttons||qf)b=b.buttons;else switch(b.which){case 1:b=1;break;case 2:b=4;break;case 3:b=2;break;default:b=0}return b}function pf(b,c){var d=0;b.pressure?d=b.pressure:d=c?.5:0;return d}
+var qf=!1;try{qf=1===(new MouseEvent("click",{buttons:1})).buttons}catch(b){};function rf(b,c){var d=document.createElement("CANVAS");b&&(d.width=b);c&&(d.height=c);return d.getContext("2d")}
+var sf=function(){var b;return function(){if(void 0===b){var c=document.createElement("P"),d,e={webkitTransform:"-webkit-transform",OTransform:"-o-transform",msTransform:"-ms-transform",MozTransform:"-moz-transform",transform:"transform"};document.body.appendChild(c);for(var f in e)f in c.style&&(c.style[f]="translate(1px,1px)",d=x.getComputedStyle(c).getPropertyValue(e[f]));document.body.removeChild(c);b=d&&"none"!==d}return b}}(),tf=function(){var b;return function(){if(void 0===b){var c=document.createElement("P"),
+d,e={webkitTransform:"-webkit-transform",OTransform:"-o-transform",msTransform:"-ms-transform",MozTransform:"-moz-transform",transform:"transform"};document.body.appendChild(c);for(var f in e)f in c.style&&(c.style[f]="translate3d(1px,1px,1px)",d=x.getComputedStyle(c).getPropertyValue(e[f]));document.body.removeChild(c);b=d&&"none"!==d}return b}}();
+function uf(b,c){var d=b.style;d.WebkitTransform=c;d.MozTransform=c;d.a=c;d.msTransform=c;d.transform=c;Gd&&Qd("9.0")&&(b.style.transformOrigin="0 0")}function vf(b,c){var d;if(tf()){var e=Array(16);for(d=0;16>d;++d)e[d]=c[d].toFixed(6);uf(b,"matrix3d("+e.join(",")+")")}else if(sf()){var e=[c[0],c[1],c[4],c[5],c[12],c[13]],f=Array(6);for(d=0;6>d;++d)f[d]=e[d].toFixed(6);uf(b,"matrix("+f.join(",")+")")}else b.style.left=Math.round(c[12])+"px",b.style.top=Math.round(c[13])+"px"};var wf=["experimental-webgl","webgl","webkit-3d","moz-webgl"];function xf(b,c){var d,e,f=wf.length;for(e=0;e<f;++e)try{if(d=b.getContext(wf[e],c))return d}catch(g){}return null};var yf,zf="undefined"!==typeof navigator?navigator.userAgent.toLowerCase():"",Af=-1!==zf.indexOf("firefox"),Bf=-1!==zf.indexOf("safari")&&-1===zf.indexOf("chrom"),Cf=-1!==zf.indexOf("macintosh"),Df=x.devicePixelRatio||1,Ef=!1,Ff=function(){if(!("HTMLCanvasElement"in x))return!1;try{var b=rf();return b?(void 0!==b.setLineDash&&(Ef=!0),!0):!1}catch(c){return!1}}(),Gf="ontouchstart"in x,Hf="PointerEvent"in x,If=!!x.navigator.msPointerEnabled,Jf=!1,Kf=[];
+if("WebGLRenderingContext"in x)try{var Lf=xf(document.createElement("CANVAS"),{failIfMajorPerformanceCaveat:!0});Lf&&(Jf=!0,Kf=Lf.getSupportedExtensions())}catch(b){}yf=Jf;oa=Kf;function Mf(b,c){this.a=b;this.g=c};function Nf(b){Mf.call(this,b,{mousedown:this.Vd,mousemove:this.Wd,mouseup:this.Zd,mouseover:this.Yd,mouseout:this.Xd});this.b=b.b;this.f=[]}M(Nf,Mf);function Of(b,c){for(var d=b.f,e=c.clientX,f=c.clientY,g=0,h=d.length,k;g<h&&(k=d[g]);g++){var l=Math.abs(f-k[1]);if(25>=Math.abs(e-k[0])&&25>=l)return!0}return!1}function Pf(b){var c=Qf(b,b),d=c.preventDefault;c.preventDefault=function(){b.preventDefault();d()};c.pointerId=1;c.isPrimary=!0;c.pointerType="mouse";return c}p=Nf.prototype;
+p.Vd=function(b){if(!Of(this,b)){if((1).toString()in this.b){var c=Pf(b);Rf(this.a,Sf,c,b);delete this.b[(1).toString()]}c=Pf(b);this.b[(1).toString()]=b;Rf(this.a,Tf,c,b)}};p.Wd=function(b){if(!Of(this,b)){var c=Pf(b);Rf(this.a,Uf,c,b)}};p.Zd=function(b){if(!Of(this,b)){var c=this.b[(1).toString()];c&&c.button===b.button&&(c=Pf(b),Rf(this.a,Vf,c,b),delete this.b[(1).toString()])}};p.Yd=function(b){if(!Of(this,b)){var c=Pf(b);Wf(this.a,c,b)}};
+p.Xd=function(b){if(!Of(this,b)){var c=Pf(b);Xf(this.a,c,b)}};function Yf(b){Mf.call(this,b,{MSPointerDown:this.de,MSPointerMove:this.ee,MSPointerUp:this.he,MSPointerOut:this.fe,MSPointerOver:this.ge,MSPointerCancel:this.ce,MSGotPointerCapture:this.ae,MSLostPointerCapture:this.be});this.b=b.b;this.f=["","unavailable","touch","pen","mouse"]}M(Yf,Mf);function Zf(b,c){var d=c;ea(c.pointerType)&&(d=Qf(c,c),d.pointerType=b.f[c.pointerType]);return d}p=Yf.prototype;p.de=function(b){this.b[b.pointerId.toString()]=b;var c=Zf(this,b);Rf(this.a,Tf,c,b)};
+p.ee=function(b){var c=Zf(this,b);Rf(this.a,Uf,c,b)};p.he=function(b){var c=Zf(this,b);Rf(this.a,Vf,c,b);delete this.b[b.pointerId.toString()]};p.fe=function(b){var c=Zf(this,b);Xf(this.a,c,b)};p.ge=function(b){var c=Zf(this,b);Wf(this.a,c,b)};p.ce=function(b){var c=Zf(this,b);Rf(this.a,Sf,c,b);delete this.b[b.pointerId.toString()]};p.be=function(b){S(this.a,new nf("lostpointercapture",b,b))};p.ae=function(b){S(this.a,new nf("gotpointercapture",b,b))};function $f(b){Mf.call(this,b,{pointerdown:this.se,pointermove:this.te,pointerup:this.we,pointerout:this.ue,pointerover:this.ve,pointercancel:this.re,gotpointercapture:this.xd,lostpointercapture:this.Ud})}M($f,Mf);p=$f.prototype;p.se=function(b){ag(this.a,b)};p.te=function(b){ag(this.a,b)};p.we=function(b){ag(this.a,b)};p.ue=function(b){ag(this.a,b)};p.ve=function(b){ag(this.a,b)};p.re=function(b){ag(this.a,b)};p.Ud=function(b){ag(this.a,b)};p.xd=function(b){ag(this.a,b)};function bg(b,c){Mf.call(this,b,{touchstart:this.Ie,touchmove:this.He,touchend:this.Ge,touchcancel:this.Fe});this.b=b.b;this.l=c;this.f=void 0;this.h=0;this.c=void 0}M(bg,Mf);p=bg.prototype;p.Vc=function(){this.h=0;this.c=void 0};
+function cg(b,c,d){c=Qf(c,d);c.pointerId=d.identifier+2;c.bubbles=!0;c.cancelable=!0;c.detail=b.h;c.button=0;c.buttons=1;c.width=d.webkitRadiusX||d.radiusX||0;c.height=d.webkitRadiusY||d.radiusY||0;c.pressure=d.webkitForce||d.force||.5;c.isPrimary=b.f===d.identifier;c.pointerType="touch";c.clientX=d.clientX;c.clientY=d.clientY;c.screenX=d.screenX;c.screenY=d.screenY;return c}
+function dg(b,c,d){function e(){c.preventDefault()}var f=Array.prototype.slice.call(c.changedTouches),g=f.length,h,k;for(h=0;h<g;++h)k=cg(b,c,f[h]),k.preventDefault=e,d.call(b,c,k)}
+p.Ie=function(b){var c=b.touches,d=Object.keys(this.b),e=d.length;if(e>=c.length){var f=[],g,h,k;for(g=0;g<e;++g){h=d[g];k=this.b[h];var l;if(!(l=1==h))a:{l=c.length;for(var m=void 0,n=0;n<l;n++)if(m=c[n],m.identifier===h-2){l=!0;break a}l=!1}l||f.push(k.out)}for(g=0;g<f.length;++g)this.Fb(b,f[g])}c=b.changedTouches[0];d=Object.keys(this.b).length;if(0===d||1===d&&(1).toString()in this.b)this.f=c.identifier,void 0!==this.c&&x.clearTimeout(this.c);eg(this,b);this.h++;dg(this,b,this.qe)};
+p.qe=function(b,c){this.b[c.pointerId]={target:c.target,out:c,Sc:c.target};var d=this.a;c.bubbles=!0;Rf(d,fg,c,b);d=this.a;c.bubbles=!1;Rf(d,gg,c,b);Rf(this.a,Tf,c,b)};p.He=function(b){b.preventDefault();dg(this,b,this.$d)};p.$d=function(b,c){var d=this.b[c.pointerId];if(d){var e=d.out,f=d.Sc;Rf(this.a,Uf,c,b);e&&f!==c.target&&(e.relatedTarget=c.target,c.relatedTarget=f,e.target=f,c.target?(Xf(this.a,e,b),Wf(this.a,c,b)):(c.target=f,c.relatedTarget=null,this.Fb(b,c)));d.out=c;d.Sc=c.target}};
+p.Ge=function(b){eg(this,b);dg(this,b,this.Je)};p.Je=function(b,c){Rf(this.a,Vf,c,b);this.a.out(c,b);var d=this.a;c.bubbles=!1;Rf(d,hg,c,b);delete this.b[c.pointerId];c.isPrimary&&(this.f=void 0,this.c=x.setTimeout(this.Vc.bind(this),200))};p.Fe=function(b){dg(this,b,this.Fb)};p.Fb=function(b,c){Rf(this.a,Sf,c,b);this.a.out(c,b);var d=this.a;c.bubbles=!1;Rf(d,hg,c,b);delete this.b[c.pointerId];c.isPrimary&&(this.f=void 0,this.c=x.setTimeout(this.Vc.bind(this),200))};
+function eg(b,c){var d=b.l.f,e=c.changedTouches[0];if(b.f===e.identifier){var f=[e.clientX,e.clientY];d.push(f);x.setTimeout(function(){La(d,f)},2500)}};function ig(b){mb.call(this);this.g=b;this.b={};this.c={};this.a=[];Hf?jg(this,new $f(this)):If?jg(this,new Yf(this)):(b=new Nf(this),jg(this,b),Gf&&jg(this,new bg(this,b)));b=this.a.length;for(var c,d=0;d<b;d++)c=this.a[d],kg(this,Object.keys(c.g))}M(ig,mb);function jg(b,c){var d=Object.keys(c.g);d&&(d.forEach(function(b){var d=c.g[b];d&&(this.c[b]=d.bind(c))},b),b.a.push(c))}ig.prototype.f=function(b){var c=this.c[b.type];c&&c(b)};
+function kg(b,c){c.forEach(function(b){Q(this.g,b,this.f,this)},b)}function lg(b,c){c.forEach(function(b){gb(this.g,b,this.f,this)},b)}function Qf(b,c){for(var d={},e,f=0,g=mg.length;f<g;f++)e=mg[f][0],d[e]=b[e]||c[e]||mg[f][1];return d}ig.prototype.out=function(b,c){b.bubbles=!0;Rf(this,ng,b,c)};function Xf(b,c,d){b.out(c,d);var e=c.relatedTarget;e&&ie(c.target,e)||(c.bubbles=!1,Rf(b,hg,c,d))}
+function Wf(b,c,d){c.bubbles=!0;Rf(b,fg,c,d);var e=c.relatedTarget;e&&ie(c.target,e)||(c.bubbles=!1,Rf(b,gg,c,d))}function Rf(b,c,d,e){S(b,new nf(c,e,d))}function ag(b,c){S(b,new nf(c.type,c,c))}ig.prototype.J=function(){for(var b=this.a.length,c,d=0;d<b;d++)c=this.a[d],lg(this,Object.keys(c.g));ig.X.J.call(this)};
+var Uf="pointermove",Tf="pointerdown",Vf="pointerup",fg="pointerover",ng="pointerout",gg="pointerenter",hg="pointerleave",Sf="pointercancel",mg=[["bubbles",!1],["cancelable",!1],["view",null],["detail",null],["screenX",0],["screenY",0],["clientX",0],["clientY",0],["ctrlKey",!1],["altKey",!1],["shiftKey",!1],["metaKey",!1],["button",0],["relatedTarget",null],["buttons",0],["pointerId",0],["width",0],["height",0],["pressure",0],["tiltX",0],["tiltY",0],["pointerType",""],["hwTimestamp",0],["isPrimary",
+!1],["type",""],["target",null],["currentTarget",null],["which",0]];function og(b,c,d,e,f){te.call(this,b,c,f);this.originalEvent=d;this.pixel=c.vc(d);this.coordinate=c.ta(this.pixel);this.dragging=void 0!==e?e:!1}M(og,te);og.prototype.preventDefault=function(){og.X.preventDefault.call(this);this.originalEvent.preventDefault()};og.prototype.stopPropagation=function(){og.X.stopPropagation.call(this);this.originalEvent.stopPropagation()};function pg(b,c,d,e,f){og.call(this,b,c,d.a,e,f);this.a=d}M(pg,og);
+function qg(b){mb.call(this);this.f=b;this.h=0;this.l=!1;this.c=[];this.b=null;b=this.f.a;this.s=0;this.o={};this.g=new ig(b);this.a=null;this.i=Q(this.g,Tf,this.Jd,this);this.j=Q(this.g,Uf,this.ye,this)}M(qg,mb);function rg(b,c){var d;d=new pg(sg,b.f,c);S(b,d);0!==b.h?(x.clearTimeout(b.h),b.h=0,d=new pg(tg,b.f,c),S(b,d)):b.h=x.setTimeout(function(){this.h=0;var b=new pg(ug,this.f,c);S(this,b)}.bind(b),250)}
+function vg(b,c){c.type==wg||c.type==xg?delete b.o[c.pointerId]:c.type==yg&&(b.o[c.pointerId]=!0);b.s=Object.keys(b.o).length}p=qg.prototype;p.zc=function(b){vg(this,b);var c=new pg(wg,this.f,b);S(this,c);!this.l&&0===b.button&&rg(this,this.b);0===this.s&&(this.c.forEach(N),this.c.length=0,this.l=!1,this.b=null,jb(this.a),this.a=null)};
+p.Jd=function(b){vg(this,b);var c=new pg(yg,this.f,b);S(this,c);this.b=b;0===this.c.length&&(this.a=new ig(document),this.c.push(Q(this.a,zg,this.ke,this),Q(this.a,wg,this.zc,this),Q(this.g,xg,this.zc,this)))};p.ke=function(b){if(b.clientX!=this.b.clientX||b.clientY!=this.b.clientY){this.l=!0;var c=new pg(Ag,this.f,b,this.l);S(this,c)}b.preventDefault()};p.ye=function(b){S(this,new pg(b.type,this.f,b,!(!this.b||b.clientX==this.b.clientX&&b.clientY==this.b.clientY)))};
+p.J=function(){this.j&&(N(this.j),this.j=null);this.i&&(N(this.i),this.i=null);this.c.forEach(N);this.c.length=0;this.a&&(jb(this.a),this.a=null);this.g&&(jb(this.g),this.g=null);qg.X.J.call(this)};var ug="singleclick",sg="click",tg="dblclick",Ag="pointerdrag",zg="pointermove",yg="pointerdown",wg="pointerup",xg="pointercancel",Bg={Ve:ug,Ke:sg,Le:tg,Oe:Ag,Re:zg,Ne:yg,Ue:wg,Te:"pointerover",Se:"pointerout",Pe:"pointerenter",Qe:"pointerleave",Me:xg};function Cg(b){T.call(this);var c=Wa({},b);c.opacity=void 0!==b.opacity?b.opacity:1;c.visible=void 0!==b.visible?b.visible:!0;c.zIndex=void 0!==b.zIndex?b.zIndex:0;c.maxResolution=void 0!==b.maxResolution?b.maxResolution:Infinity;c.minResolution=void 0!==b.minResolution?b.minResolution:0;this.l(c)}M(Cg,T);
+function Dg(b){var c=b.Ub(),d=b.Pb(),e=b.cb(),f=b.C(),g=b.Vb(),h=b.get("maxResolution"),k=b.get("minResolution");return{layer:b,opacity:Ca(c,0,1),$b:d,visible:e,eb:!0,extent:f,zIndex:g,maxResolution:h,minResolution:Math.max(k,0)}}p=Cg.prototype;p.C=function(){return this.get("extent")};p.Ub=function(){return this.get("opacity")};p.cb=function(){return this.get("visible")};p.Vb=function(){return this.get("zIndex")};p.Fc=function(b){this.set("opacity",b)};p.Gc=function(b){this.set("visible",b)};
+p.Hc=function(b){this.set("zIndex",b)};function Eg(){};function Fg(b,c,d,e,f,g){R.call(this,b,c);this.vectorContext=d;this.frameState=e;this.context=f;this.glContext=g}M(Fg,R);function Gg(b){var c=Wa({},b);delete c.source;Cg.call(this,c);this.h=this.c=this.b=null;b.map&&this.setMap(b.map);Q(this,rb("source"),this.Od,this);this.Zb(b.source?b.source:null)}M(Gg,Cg);function Hg(b,c){return b.visible&&c>=b.minResolution&&c<b.maxResolution}p=Gg.prototype;p.Lb=function(b){b=b?b:[];b.push(Dg(this));return b};p.V=function(){return this.get("source")||null};p.Pb=function(){var b=this.V();return b?b.N():"undefined"};p.me=function(){this.v()};
+p.Od=function(){this.h&&(N(this.h),this.h=null);var b=this.V();b&&(this.h=Q(b,"change",this.me,this));this.v()};p.setMap=function(b){this.b&&(N(this.b),this.b=null);b||this.v();this.c&&(N(this.c),this.c=null);b&&(this.b=Q(b,"precompose",function(b){var d=Dg(this);d.eb=!1;d.zIndex=Infinity;b.frameState.layerStatesArray.push(d);b.frameState.layerStates[I(this)]=d},this),this.c=Q(this,"change",b.render,b),this.v())};p.Zb=function(b){this.set("source",b)};function Ig(b,c,d,e,f,g,h,k){Db(b);0===c&&0===d||Fb(b,c,d);1==e&&1==f||Gb(b,e,f);0!==g&&Hb(b,g);0===h&&0===k||Fb(b,h,k);return b}function Jg(b,c){return b[0]==c[0]&&b[1]==c[1]&&b[4]==c[4]&&b[5]==c[5]&&b[12]==c[12]&&b[13]==c[13]}function Kg(b,c,d){var e=b[1],f=b[5],g=b[13],h=c[0];c=c[1];d[0]=b[0]*h+b[4]*c+b[12];d[1]=e*h+f*c+g;return d};function Lg(b){ob.call(this);this.a=b}M(Lg,ob);Lg.prototype.fb=pa;Lg.prototype.Ic=dc;Lg.prototype.l=function(b,c,d){return function(e,f){return We(b,c,e,f,function(b){d[e]||(d[e]={});d[e][b.L.toString()]=b})}};function Mg(b){var c=b.a;c.cb()&&"ready"==c.Pb()&&b.v()}function Ng(b,c){c.Qc()&&b.postRenderFunctions.push(na(function(b,c,f){c=I(b).toString();b.Rc(f.viewState.projection,f.usedTiles[c])},c))}function Og(b,c){if(c){var d,e,f;e=0;for(f=c.length;e<f;++e)d=c[e],b[I(d).toString()]=d}}
+function Pg(b,c){var d=c.w;void 0!==d&&("string"===typeof d?b.logos[d]="":ha(d)&&(b.logos[d.src]=d.href))}function Qg(b,c,d,e){c=I(c).toString();d=d.toString();c in b?d in b[c]?(b=b[c][d],e.a<b.a&&(b.a=e.a),e.f>b.f&&(b.f=e.f),e.b<b.b&&(b.b=e.b),e.c>b.c&&(b.c=e.c)):b[c][d]=e:(b[c]={},b[c][d]=e)}function Rg(b,c,d){return[c*(Math.round(b[0]/c)+d[0]%2/2),c*(Math.round(b[1]/c)+d[1]%2/2)]}
+function Sg(b,c,d,e,f,g,h,k,l,m){var n=I(c).toString();n in b.wantedTiles||(b.wantedTiles[n]={});var q=b.wantedTiles[n];b=b.tileQueue;var r=d.minZoom,u,w,y,z,D,t;for(t=h;t>=r;--t)for(w=Ke(d,g,t,w),y=d.I(t),z=w.a;z<=w.f;++z)for(D=w.b;D<=w.c;++D)h-t<=k?(u=Tg(c,t,z,D,e,f),0==u.N()&&(q[u.L.toString()]=!0,u.getKey()in b.f||b.c([u,n,Oe(d,u.L),y])),void 0!==l&&l.call(m,u)):c.Yc(t,z,D,f)};function Ug(b){this.l=b.opacity;this.i=b.rotateWithView;this.H=b.rotation;this.gb=b.scale;this.u=b.snapToPixel}Ug.prototype.Z=function(){return this.H};function Vg(b){b=b||{};this.g=void 0!==b.anchor?b.anchor:[.5,.5];this.c=null;this.b=void 0!==b.anchorOrigin?b.anchorOrigin:"top-left";this.j=void 0!==b.anchorXUnits?b.anchorXUnits:"fraction";this.A=void 0!==b.anchorYUnits?b.anchorYUnits:"fraction";var c=void 0!==b.crossOrigin?b.crossOrigin:null,d=void 0!==b.img?b.img:null,e=void 0!==b.imgSize?b.imgSize:null,f=b.src;void 0!==f&&0!==f.length||!d||(f=d.src||I(d).toString());var g=void 0!==b.src?0:2,h;void 0!==b.color?(h=b.color,h=Array.isArray(h)?h:
+xd(h)):h=null;var k=Wg.ua(),l=k.get(f,c,h);l||(l=new Xg(d,f,e,c,g,h),k.set(f,c,h,l));this.a=l;this.s=void 0!==b.offset?b.offset:[0,0];this.f=void 0!==b.offsetOrigin?b.offsetOrigin:"top-left";this.h=null;this.o=void 0!==b.size?b.size:null;Ug.call(this,{opacity:void 0!==b.opacity?b.opacity:1,rotation:void 0!==b.rotation?b.rotation:0,scale:void 0!==b.scale?b.scale:1,snapToPixel:void 0!==b.snapToPixel?b.snapToPixel:!0,rotateWithView:void 0!==b.rotateWithView?b.rotateWithView:!1})}M(Vg,Ug);p=Vg.prototype;
+p.jb=function(){if(this.c)return this.c;var b=this.g,c=this.Qa();if("fraction"==this.j||"fraction"==this.A){if(!c)return null;b=this.g.slice();"fraction"==this.j&&(b[0]*=c[0]);"fraction"==this.A&&(b[1]*=c[1])}if("top-left"!=this.b){if(!c)return null;b===this.g&&(b=this.g.slice());if("top-right"==this.b||"bottom-right"==this.b)b[0]=-b[0]+c[0];if("bottom-left"==this.b||"bottom-right"==this.b)b[1]=-b[1]+c[1]}return this.c=b};p.T=function(b){return this.a.T(b)};p.wc=function(){return this.a.b};p.rb=function(){return this.a.f};
+p.Xb=function(){var b=this.a;if(!b.l)if(b.i){var c=b.b[0],d=b.b[1],e=rf(c,d);e.fillRect(0,0,c,d);b.l=e.canvas}else b.l=b.a;return b.l};p.ka=function(){if(this.h)return this.h;var b=this.s;if("top-left"!=this.f){var c=this.Qa(),d=this.a.b;if(!c||!d)return null;b=b.slice();if("top-right"==this.f||"bottom-right"==this.f)b[0]=d[0]-c[0]-b[0];if("bottom-left"==this.f||"bottom-right"==this.f)b[1]=d[1]-c[1]-b[1]}return this.h=b};p.Qa=function(){return this.o?this.o:this.a.b};
+p.Bc=function(b,c){return Q(this.a,"change",b,c)};p.load=function(){this.a.load()};p.Xc=function(b,c){gb(this.a,"change",b,c)};function Xg(b,c,d,e,f,g){mb.call(this);this.l=null;this.a=b?b:new Image;null!==e&&(this.a.crossOrigin=e);this.c=g?document.createElement("CANVAS"):null;this.h=g;this.g=null;this.f=f;this.b=d;this.o=c;this.i=!1;2==this.f&&Yg(this)}M(Xg,mb);function Yg(b){var c=rf(1,1);try{c.drawImage(b.a,0,0),c.getImageData(0,0,1,1)}catch(d){b.i=!0}}
+Xg.prototype.j=function(){this.f=3;this.g.forEach(N);this.g=null;S(this,"change")};
+Xg.prototype.s=function(){this.f=2;this.b&&(this.a.width=this.b[0],this.a.height=this.b[1]);this.b=[this.a.width,this.a.height];this.g.forEach(N);this.g=null;Yg(this);if(!this.i&&null!==this.h){this.c.width=this.a.width;this.c.height=this.a.height;var b=this.c.getContext("2d");b.drawImage(this.a,0,0);for(var c=b.getImageData(0,0,this.a.width,this.a.height),d=c.data,e=this.h[0]/255,f=this.h[1]/255,g=this.h[2]/255,h=0,k=d.length;h<k;h+=4)d[h]*=e,d[h+1]*=f,d[h+2]*=g;b.putImageData(c,0,0)}S(this,"change")};
+Xg.prototype.T=function(){return this.c?this.c:this.a};Xg.prototype.load=function(){if(0==this.f){this.f=1;this.g=[Q(this.a,"error",this.j,this,!0),Q(this.a,"load",this.s,this,!0)];try{this.a.src=this.o}catch(b){this.j()}}};function Wg(){this.a={};this.b=0}aa(Wg);Wg.prototype.clear=function(){this.a={};this.b=0};Wg.prototype.get=function(b,c,d){b=c+":"+b+":"+(d?vd(d):"null");return b in this.a?this.a[b]:null};Wg.prototype.set=function(b,c,d,e){this.a[c+":"+b+":"+(d?vd(d):"null")]=e;++this.b};function Zg(b,c){this.h=c;this.f={};this.A={}}M(Zg,ib);function $g(b){var c=b.viewState,d=b.coordinateToPixelMatrix;Ig(d,b.size[0]/2,b.size[1]/2,1/c.resolution,-1/c.resolution,-c.rotation,-c.center[0],-c.center[1]);Eb(d,b.pixelToCoordinateMatrix)}p=Zg.prototype;p.J=function(){for(var b in this.f)jb(this.f[b])};function ah(){var b=Wg.ua();if(32<b.b){var c=0,d,e;for(d in b.a)e=b.a[d],0!==(c++&3)||nb(e)||(delete b.a[d],--b.b)}}
+p.Wb=function(b,c,d,e,f,g){function h(b,f){var g=I(b).toString(),h=c.layerStates[I(f)].eb;if(!(g in c.skippedFeatureUids)||h)return d.call(e,b,h?f:null)}var k,l=c.viewState,m=l.resolution,n=l.projection,l=b;if(n.a){var n=n.C(),q=Vb(n),r=b[0];if(r<n[0]||r>n[2])l=[r+q*Math.ceil((n[0]-r)/q),b[1]]}n=c.layerStatesArray;for(q=n.length-1;0<=q;--q){var u=n[q],r=u.layer;if(Hg(u,m)&&f.call(g,r)&&(u=bh(this,r),r.V()&&(k=u.fb(r.V().j?l:b,c,h,e)),k))return k}};
+p.Jc=function(b,c,d,e){return void 0!==this.Wb(b,c,cc,this,d,e)};function bh(b,c){var d=I(c).toString();if(d in b.f)return b.f[d];var e=b.Jb(c);b.f[d]=e;b.A[d]=Q(e,"change",b.Dd,b);return e}p.Dd=function(){this.h.render()};p.sb=pa;p.Be=function(b,c){for(var d in this.f)if(!(c&&d in c.layerStates)){var e=d,f=this.f[e];delete this.f[e];N(this.A[e]);delete this.A[e];jb(f)}};function ch(b,c){for(var d in b.f)if(!(d in c.layerStates)){c.postRenderFunctions.push(b.Be.bind(b));break}}
+function Oa(b,c){return b.zIndex-c.zIndex};function dh(b,c){this.j=b;this.l=c;this.a=[];this.b=[];this.f={}}dh.prototype.clear=function(){this.a.length=0;this.b.length=0;Ya(this.f)};function eh(b){var c=b.a,d=b.b,e=c[0];1==c.length?(c.length=0,d.length=0):(c[0]=c.pop(),d[0]=d.pop(),fh(b,0));c=b.l(e);delete b.f[c];return e}dh.prototype.c=function(b){var c=this.j(b);return Infinity!=c?(this.a.push(b),this.b.push(c),this.f[this.l(b)]=!0,gh(this,0,this.a.length-1),!0):!1};
+function fh(b,c){for(var d=b.a,e=b.b,f=d.length,g=d[c],h=e[c],k=c;c<f>>1;){var l=2*c+1,m=2*c+2,l=m<f&&e[m]<e[l]?m:l;d[c]=d[l];e[c]=e[l];c=l}d[c]=g;e[c]=h;gh(b,k,c)}function gh(b,c,d){var e=b.a;b=b.b;for(var f=e[d],g=b[d];d>c;){var h=d-1>>1;if(b[h]>g)e[d]=e[h],b[d]=b[h],d=h;else break}e[d]=f;b[d]=g}function hh(b){var c=b.j,d=b.a,e=b.b,f=0,g=d.length,h,k,l;for(k=0;k<g;++k)h=d[k],l=c(h),Infinity==l?delete b.f[b.l(h)]:(e[f]=l,d[f++]=h);d.length=f;e.length=f;for(c=(b.a.length>>1)-1;0<=c;c--)fh(b,c)};function ih(b,c){dh.call(this,function(c){return b.apply(null,c)},function(b){return b[0].getKey()});this.A=c;this.h=0;this.g={}}M(ih,dh);ih.prototype.c=function(b){var c=ih.X.c.call(this,b);c&&Q(b[0],"change",this.i,this);return c};ih.prototype.i=function(b){b=b.target;var c=b.N();if(2===c||3===c||4===c||5===c)gb(b,"change",this.i,this),b=b.getKey(),b in this.g&&(delete this.g[b],--this.h),this.A()};function jh(){this.a=[];this.b=this.f=0}function kh(b,c){var d=b.b,e=.05-d,f=Math.log(.05/b.b)/-.005;return cd({source:c,duration:f,easing:function(b){return d*(Math.exp(-.005*b*f)-1)/e}})};function lh(b){T.call(this);this.S=null;this.set("active",!0);this.handleEvent=b.handleEvent}M(lh,T);lh.prototype.setMap=function(b){this.S=b};function mh(b,c,d,e,f){if(void 0!==d){var g=c.Z(),h=c.ia();void 0!==g&&h&&f&&0<f&&(b.fa(dd({rotation:g,duration:f,easing:$c})),e&&b.fa(cd({source:h,duration:f,easing:$c})));c.rotate(d,e)}}function nh(b,c,d,e,f){var g=c.I();d=c.constrainResolution(g,d,0);oh(b,c,d,e,f)}
+function oh(b,c,d,e,f){if(d){var g=c.I(),h=c.ia();void 0!==g&&h&&d!==g&&f&&0<f&&(b.fa(ed({resolution:g,duration:f,easing:$c})),e&&b.fa(cd({source:h,duration:f,easing:$c})));if(e){var k;b=c.ia();f=c.I();void 0!==b&&void 0!==f&&(k=[e[0]-d*(e[0]-b[0])/f,e[1]-d*(e[1]-b[1])/f]);c.oa(k)}Yc(c,d)}};function ph(b){b=b?b:{};this.a=b.delta?b.delta:1;lh.call(this,{handleEvent:qh});this.b=void 0!==b.duration?b.duration:250}M(ph,lh);function qh(b){var c=!1,d=b.originalEvent;if(b.type==tg){var c=b.map,e=b.coordinate,d=d.shiftKey?-this.a:this.a,f=c.O();nh(c,f,d,e,this.b);b.preventDefault();c=!0}return!c};function rh(b){b=b.originalEvent;return b.altKey&&!(b.metaKey||b.ctrlKey)&&b.shiftKey}function sh(b){b=b.originalEvent;return 0==b.button&&!(Jd&&Cf&&b.ctrlKey)}function th(b){b=b.originalEvent;return!b.altKey&&!(b.metaKey||b.ctrlKey)&&!b.shiftKey}function uh(b){b=b.originalEvent;return!b.altKey&&!(b.metaKey||b.ctrlKey)&&b.shiftKey}function vh(b){b=b.originalEvent.target.tagName;return"INPUT"!==b&&"SELECT"!==b&&"TEXTAREA"!==b}function wh(b){return"mouse"==b.a.pointerType};function xh(b){b=b?b:{};lh.call(this,{handleEvent:b.handleEvent?b.handleEvent:yh});this.wb=b.handleDownEvent?b.handleDownEvent:dc;this.xb=b.handleDragEvent?b.handleDragEvent:pa;this.yb=b.handleMoveEvent?b.handleMoveEvent:pa;this.zb=b.handleUpEvent?b.handleUpEvent:dc;this.s=!1;this.G={};this.c=[]}M(xh,lh);function zh(b){for(var c=b.length,d=0,e=0,f=0;f<c;f++)d+=b[f].clientX,e+=b[f].clientY;return[d/c,e/c]}
+function yh(b){if(!(b instanceof pg))return!0;var c=!1,d=b.type;if(d===yg||d===Ag||d===wg)d=b.a,b.type==wg?delete this.G[d.pointerId]:b.type==yg?this.G[d.pointerId]=d:d.pointerId in this.G&&(this.G[d.pointerId]=d),this.c=Za(this.G);this.s&&(b.type==Ag?this.xb(b):b.type==wg&&(this.s=this.zb(b)));b.type==yg?(this.s=b=this.wb(b),c=this.w(b)):b.type==zg&&this.yb(b);return!c}xh.prototype.w=function(b){return b};function Ah(b){xh.call(this,{handleDownEvent:Bh,handleDragEvent:Ch,handleUpEvent:Dh});b=b?b:{};this.a=b.kinetic;this.b=this.g=null;this.i=b.condition?b.condition:th;this.h=!1}M(Ah,xh);function Ch(b){var c=zh(this.c);this.a&&this.a.a.push(c[0],c[1],Date.now());if(this.b){var d=this.b[0]-c[0],e=c[1]-this.b[1];b=b.map;var f=b.O(),g=f.N(),e=d=[d,e],h=g.resolution;e[0]*=h;e[1]*=h;vb(d,g.rotation);ub(d,g.center);d=f.a.center(d);b.render();f.oa(d)}this.b=c}
+function Dh(b){b=b.map;var c=b.O();if(0===this.c.length){var d;if(d=!this.h&&this.a)if(d=this.a,6>d.a.length)d=!1;else{var e=Date.now()-100,f=d.a.length-3;if(d.a[f+2]<e)d=!1;else{for(var g=f-3;0<g&&d.a[g+2]>e;)g-=3;var e=d.a[f+2]-d.a[g+2],h=d.a[f]-d.a[g],f=d.a[f+1]-d.a[g+1];d.f=Math.atan2(f,h);d.b=Math.sqrt(h*h+f*f)/e;d=.05<d.b}}d&&(d=(.05-this.a.b)/-.005,f=this.a.f,g=c.ia(),this.g=kh(this.a,g),b.fa(this.g),g=Eh(b,g),d=b.ta([g[0]-d*Math.cos(f),g[1]-d*Math.sin(f)]),d=c.a.center(d),c.oa(d));Zc(c,-1);
+b.render();return!1}this.b=null;return!0}function Bh(b){if(0<this.c.length&&this.i(b)){var c=b.map,d=c.O();this.b=null;this.s||Zc(d,1);c.render();this.g&&La(c.B,this.g)&&(d.oa(b.frameState.viewState.center),this.g=null);this.a&&(b=this.a,b.a.length=0,b.f=0,b.b=0);this.h=1<this.c.length;return!0}return!1}Ah.prototype.w=dc;function Fh(b){b=b?b:{};xh.call(this,{handleDownEvent:Gh,handleDragEvent:Hh,handleUpEvent:Ih});this.b=b.condition?b.condition:rh;this.a=void 0;this.g=void 0!==b.duration?b.duration:250}M(Fh,xh);function Hh(b){if(wh(b)){var c=b.map,d=c.Pa();b=b.pixel;d=Math.atan2(d[1]/2-b[1],b[0]-d[0]/2);if(void 0!==this.a){b=d-this.a;var e=c.O(),f=e.Z();c.render();mh(c,e,f-b)}this.a=d}}
+function Ih(b){if(!wh(b))return!0;b=b.map;var c=b.O();Zc(c,-1);var d=c.Z(),e=this.g,d=c.constrainRotation(d,0);mh(b,c,d,void 0,e);return!1}function Gh(b){return wh(b)&&sh(b)&&this.b(b)?(b=b.map,Zc(b.O(),1),b.render(),this.a=void 0,!0):!1}Fh.prototype.w=dc;function Jh(b){this.c=null;this.b=document.createElement("div");this.b.style.position="absolute";this.b.className="ol-box "+b;this.f=this.g=this.a=null}M(Jh,ib);Jh.prototype.J=function(){this.setMap(null)};function Kh(b){var c=b.g,d=b.f;b=b.b.style;b.left=Math.min(c[0],d[0])+"px";b.top=Math.min(c[1],d[1])+"px";b.width=Math.abs(d[0]-c[0])+"px";b.height=Math.abs(d[1]-c[1])+"px"}
+Jh.prototype.setMap=function(b){if(this.a){this.a.o.removeChild(this.b);var c=this.b.style;c.left=c.top=c.width=c.height="inherit"}(this.a=b)&&this.a.o.appendChild(this.b)};function Lh(b){var c=b.g,d=b.f,c=[c,[c[0],d[1]],d,[d[0],c[1]]].map(b.a.ta,b.a);c[4]=c[0].slice();b.c?b.c.W([c]):b.c=new Tc([c])}Jh.prototype.M=function(){return this.c};function Mh(b,c,d){R.call(this,b);this.coordinate=c;this.mapBrowserEvent=d}M(Mh,R);function Nh(b){xh.call(this,{handleDownEvent:Oh,handleDragEvent:Ph,handleUpEvent:Qh});b=b?b:{};this.a=new Jh(b.className||"ol-dragbox");this.b=null;this.j=b.condition?b.condition:cc;this.i=b.boxEndCondition?b.boxEndCondition:Rh}M(Nh,xh);function Rh(b,c,d){b=d[0]-c[0];c=d[1]-c[1];return 64<=b*b+c*c}
+function Ph(b){if(wh(b)){var c=this.a,d=b.pixel;c.g=this.b;c.f=d;Lh(c);Kh(c);S(this,new Mh("boxdrag",b.coordinate,b))}}Nh.prototype.M=function(){return this.a.M()};Nh.prototype.h=pa;function Qh(b){if(!wh(b))return!0;this.a.setMap(null);this.i(b,this.b,b.pixel)&&(this.h(b),S(this,new Mh("boxend",b.coordinate,b)));return!1}
+function Oh(b){if(wh(b)&&sh(b)&&this.j(b)){this.b=b.pixel;this.a.setMap(b.map);var c=this.a,d=this.b;c.g=this.b;c.f=d;Lh(c);Kh(c);S(this,new Mh("boxstart",b.coordinate,b));return!0}return!1};function Sh(b){b=b?b:{};var c=b.condition?b.condition:uh;this.g=void 0!==b.duration?b.duration:200;this.o=void 0!==b.out?b.out:!1;Nh.call(this,{condition:c,className:b.className||"ol-dragzoom"})}M(Sh,Nh);
+Sh.prototype.h=function(){var b=this.S,c=b.O(),d=b.Pa(),e=this.M().C();if(this.o){var f=c.jc(d),e=[Eh(b,Xb(e)),Eh(b,[e[2],e[3]])],g=Pb(void 0),h,k;h=0;for(k=e.length;h<k;++h)Kb(g,e[h]);g=1/Xc(g,d);e=(f[2]-f[0])/2*(g-1);g=(f[3]-f[1])/2*(g-1);f[0]-=e;f[2]+=e;f[1]-=g;f[3]+=g;e=f}d=c.constrainResolution(Xc(e,d));f=c.I();g=c.ia();b.fa(ed({resolution:f,duration:this.g,easing:$c}));b.fa(cd({source:g,duration:this.g,easing:$c}));c.oa(Yb(e));Yc(c,d)};function Th(b){lh.call(this,{handleEvent:Uh});b=b||{};this.a=function(b){return th.call(this,b)&&vh.call(this,b)};this.b=void 0!==b.condition?b.condition:this.a;this.c=void 0!==b.duration?b.duration:100;this.g=void 0!==b.pixelDelta?b.pixelDelta:128}M(Th,lh);
+function Uh(b){var c=!1;if("keydown"==b.type){var d=b.originalEvent.keyCode;if(this.b(b)&&(40==d||37==d||39==d||38==d)){var e=b.map,c=e.O(),f=c.I()*this.g,g=0,h=0;40==d?h=-f:37==d?g=-f:39==d?g=f:h=f;d=[g,h];vb(d,c.Z());f=this.c;if(g=c.ia())f&&0<f&&e.fa(cd({source:g,duration:f,easing:bd})),e=c.a.center([g[0]+d[0],g[1]+d[1]]),c.oa(e);b.preventDefault();c=!0}}return!c};function Vh(b){lh.call(this,{handleEvent:Wh});b=b?b:{};this.b=b.condition?b.condition:vh;this.a=b.delta?b.delta:1;this.c=void 0!==b.duration?b.duration:100}M(Vh,lh);function Wh(b){var c=!1;if("keydown"==b.type||"keypress"==b.type){var d=b.originalEvent.charCode;if(this.b(b)&&(43==d||45==d)){c=b.map;d=43==d?this.a:-this.a;c.render();var e=c.O();nh(c,e,d,void 0,this.c);b.preventDefault();c=!0}}return!c};function Xh(b){lh.call(this,{handleEvent:Yh});b=b||{};this.a=0;this.i=void 0!==b.duration?b.duration:250;this.j=void 0!==b.useAnchor?b.useAnchor:!0;this.c=null;this.g=this.b=void 0}M(Xh,lh);
+function Yh(b){var c=!1;if("wheel"==b.type||"mousewheel"==b.type){var c=b.map,d=b.originalEvent;this.j&&(this.c=b.coordinate);var e;"wheel"==b.type?(e=d.deltaY,Af&&d.deltaMode===x.WheelEvent.DOM_DELTA_PIXEL&&(e/=Df),d.deltaMode===x.WheelEvent.DOM_DELTA_LINE&&(e*=40)):"mousewheel"==b.type&&(e=-d.wheelDeltaY,Bf&&(e/=3));this.a+=e;void 0===this.b&&(this.b=Date.now());e=Math.max(80-(Date.now()-this.b),0);x.clearTimeout(this.g);this.g=x.setTimeout(this.h.bind(this,c),e);b.preventDefault();c=!0}return!c}
+Xh.prototype.h=function(b){var c=Ca(this.a,-1,1),d=b.O();b.render();nh(b,d,-c,this.c,this.i);this.a=0;this.c=null;this.g=this.b=void 0};function Zh(b){xh.call(this,{handleDownEvent:$h,handleDragEvent:ai,handleUpEvent:bi});b=b||{};this.b=null;this.g=void 0;this.a=!1;this.h=0;this.j=void 0!==b.threshold?b.threshold:.3;this.i=void 0!==b.duration?b.duration:250}M(Zh,xh);
+function ai(b){var c=0,d=this.c[0],e=this.c[1],d=Math.atan2(e.clientY-d.clientY,e.clientX-d.clientX);void 0!==this.g&&(c=d-this.g,this.h+=c,!this.a&&Math.abs(this.h)>this.j&&(this.a=!0));this.g=d;b=b.map;d=b.a.getBoundingClientRect();e=zh(this.c);e[0]-=d.left;e[1]-=d.top;this.b=b.ta(e);this.a&&(d=b.O(),e=d.Z(),b.render(),mh(b,d,e+c,this.b))}
+function bi(b){if(2>this.c.length){b=b.map;var c=b.O();Zc(c,-1);if(this.a){var d=c.Z(),e=this.b,f=this.i,d=c.constrainRotation(d,0);mh(b,c,d,e,f)}return!1}return!0}function $h(b){return 2<=this.c.length?(b=b.map,this.b=null,this.g=void 0,this.a=!1,this.h=0,this.s||Zc(b.O(),1),b.render(),!0):!1}Zh.prototype.w=dc;function ci(b){xh.call(this,{handleDownEvent:di,handleDragEvent:ei,handleUpEvent:fi});b=b?b:{};this.b=null;this.h=void 0!==b.duration?b.duration:400;this.a=void 0;this.g=1}M(ci,xh);function ei(b){var c=1,d=this.c[0],e=this.c[1],f=d.clientX-e.clientX,d=d.clientY-e.clientY,f=Math.sqrt(f*f+d*d);void 0!==this.a&&(c=this.a/f);this.a=f;1!=c&&(this.g=c);b=b.map;var f=b.O(),d=f.I(),e=b.a.getBoundingClientRect(),g=zh(this.c);g[0]-=e.left;g[1]-=e.top;this.b=b.ta(g);b.render();oh(b,f,d*c,this.b)}
+function fi(b){if(2>this.c.length){b=b.map;var c=b.O();Zc(c,-1);var d=c.I(),e=this.b,f=this.h,d=c.constrainResolution(d,0,this.g-1);oh(b,c,d,e,f);return!1}return!0}function di(b){return 2<=this.c.length?(b=b.map,this.b=null,this.a=void 0,this.g=1,this.s||Zc(b.O(),1),b.render(),!0):!1}ci.prototype.w=dc;function gi(b){var c=b||{};b=Wa({},c);delete b.layers;c=c.layers;Cg.call(this,b);this.b=[];this.a={};Q(this,rb("layers"),this.Fd,this);c?Array.isArray(c)&&(c=new ld(c.slice())):c=new ld;this.set("layers",c)}M(gi,Cg);p=gi.prototype;p.ob=function(){this.cb()&&this.v()};
+p.Fd=function(){this.b.forEach(N);this.b.length=0;var b=this.get("layers");this.b.push(Q(b,"add",this.Ed,this),Q(b,"remove",this.Gd,this));for(var c in this.a)this.a[c].forEach(N);Ya(this.a);var b=b.a,d,e;c=0;for(d=b.length;c<d;c++)e=b[c],this.a[I(e).toString()]=[Q(e,"propertychange",this.ob,this),Q(e,"change",this.ob,this)];this.v()};p.Ed=function(b){b=b.element;var c=I(b).toString();this.a[c]=[Q(b,"propertychange",this.ob,this),Q(b,"change",this.ob,this)];this.v()};
+p.Gd=function(b){b=I(b.element).toString();this.a[b].forEach(N);delete this.a[b];this.v()};p.Lb=function(b){var c=void 0!==b?b:[],d=c.length;nd(this.get("layers"),function(b){b.Lb(c)});b=Dg(this);var e,f;for(e=c.length;d<e;d++)f=c[d],f.opacity*=b.opacity,f.visible=f.visible&&b.visible,f.maxResolution=Math.min(f.maxResolution,b.maxResolution),f.minResolution=Math.max(f.minResolution,b.minResolution),void 0!==b.extent&&(f.extent=void 0!==f.extent?$b(f.extent,b.extent):b.extent);return c};p.Pb=function(){return"ready"};function hi(b){ic.call(this,{code:b,units:"m",extent:ii,global:!0,worldExtent:ji})}M(hi,ic);hi.prototype.getPointResolution=function(b,c){return b/Da(c[1]/6378137)};var ki=6378137*Math.PI,ii=[-ki,-ki,ki,ki],ji=[-180,-85,180,85],li="EPSG:3857 EPSG:102100 EPSG:102113 EPSG:900913 urn:ogc:def:crs:EPSG:6.18:3:3857 urn:ogc:def:crs:EPSG::3857 http://www.opengis.net/gml/srs/epsg.xml#3857".split(" ").map(function(b){return new hi(b)});
+function mi(b,c,d){var e=b.length;d=1<d?d:2;void 0===c&&(2<d?c=b.slice():c=Array(e));for(var f=0;f<e;f+=d)c[f]=6378137*Math.PI*b[f]/180,c[f+1]=6378137*Math.log(Math.tan(Math.PI*(b[f+1]+90)/360));return c}function ni(b,c,d){var e=b.length;d=1<d?d:2;void 0===c&&(2<d?c=b.slice():c=Array(e));for(var f=0;f<e;f+=d)c[f]=180*b[f]/(6378137*Math.PI),c[f+1]=360*Math.atan(Math.exp(b[f+1]/6378137))/Math.PI-90;return c};var oi=new ec(6378137);function pi(b,c){ic.call(this,{code:b,units:"degrees",extent:qi,axisOrientation:c,global:!0,metersPerUnit:ri,worldExtent:qi})}M(pi,ic);pi.prototype.getPointResolution=function(b){return b};
+var qi=[-180,-90,180,90],ri=Math.PI*oi.radius/180,si=[new pi("CRS:84"),new pi("EPSG:4326","neu"),new pi("urn:ogc:def:crs:EPSG::4326","neu"),new pi("urn:ogc:def:crs:EPSG:6.6:4326","neu"),new pi("urn:ogc:def:crs:OGC:1.3:CRS84"),new pi("urn:ogc:def:crs:OGC:2:84"),new pi("http://www.opengis.net/gml/srs/epsg.xml#4326","neu"),new pi("urn:x-ogc:def:crs:EPSG:4326","neu")];function X(b){b=b?b:{};var c=Wa({},b);delete c.preload;delete c.useInterimTilesOnError;Gg.call(this,c);this.set("preload",void 0!==b.preload?b.preload:0);this.set("useInterimTilesOnError",void 0!==b.useInterimTilesOnError?b.useInterimTilesOnError:!0)}M(X,Gg);function ti(b){return b.get("useInterimTilesOnError")};var ui=[0,0,0,1],vi=[],wi=[0,0,0,1];function xi(b,c,d,e){0!==c&&(b.translate(d,e),b.rotate(c),b.translate(-d,-e))};function yi(b){b=b||{};this.a=void 0!==b.color?b.color:null;this.b=void 0}yi.prototype.ga=function(){return this.a};function zi(){this.b=-1};function Ai(){this.b=-1;this.b=64;this.a=Array(4);this.g=Array(this.b);this.c=this.f=0;this.a[0]=1732584193;this.a[1]=4023233417;this.a[2]=2562383102;this.a[3]=271733878;this.c=this.f=0}M(Ai,zi);
+function Bi(b,c,d){d||(d=0);var e=Array(16);if(da(c))for(var f=0;16>f;++f)e[f]=c.charCodeAt(d++)|c.charCodeAt(d++)<<8|c.charCodeAt(d++)<<16|c.charCodeAt(d++)<<24;else for(f=0;16>f;++f)e[f]=c[d++]|c[d++]<<8|c[d++]<<16|c[d++]<<24;c=b.a[0];d=b.a[1];var f=b.a[2],g=b.a[3],h=0,h=c+(g^d&(f^g))+e[0]+3614090360&4294967295;c=d+(h<<7&4294967295|h>>>25);h=g+(f^c&(d^f))+e[1]+3905402710&4294967295;g=c+(h<<12&4294967295|h>>>20);h=f+(d^g&(c^d))+e[2]+606105819&4294967295;f=g+(h<<17&4294967295|h>>>15);h=d+(c^f&(g^
+c))+e[3]+3250441966&4294967295;d=f+(h<<22&4294967295|h>>>10);h=c+(g^d&(f^g))+e[4]+4118548399&4294967295;c=d+(h<<7&4294967295|h>>>25);h=g+(f^c&(d^f))+e[5]+1200080426&4294967295;g=c+(h<<12&4294967295|h>>>20);h=f+(d^g&(c^d))+e[6]+2821735955&4294967295;f=g+(h<<17&4294967295|h>>>15);h=d+(c^f&(g^c))+e[7]+4249261313&4294967295;d=f+(h<<22&4294967295|h>>>10);h=c+(g^d&(f^g))+e[8]+1770035416&4294967295;c=d+(h<<7&4294967295|h>>>25);h=g+(f^c&(d^f))+e[9]+2336552879&4294967295;g=c+(h<<12&4294967295|h>>>20);h=f+
+(d^g&(c^d))+e[10]+4294925233&4294967295;f=g+(h<<17&4294967295|h>>>15);h=d+(c^f&(g^c))+e[11]+2304563134&4294967295;d=f+(h<<22&4294967295|h>>>10);h=c+(g^d&(f^g))+e[12]+1804603682&4294967295;c=d+(h<<7&4294967295|h>>>25);h=g+(f^c&(d^f))+e[13]+4254626195&4294967295;g=c+(h<<12&4294967295|h>>>20);h=f+(d^g&(c^d))+e[14]+2792965006&4294967295;f=g+(h<<17&4294967295|h>>>15);h=d+(c^f&(g^c))+e[15]+1236535329&4294967295;d=f+(h<<22&4294967295|h>>>10);h=c+(f^g&(d^f))+e[1]+4129170786&4294967295;c=d+(h<<5&4294967295|
+h>>>27);h=g+(d^f&(c^d))+e[6]+3225465664&4294967295;g=c+(h<<9&4294967295|h>>>23);h=f+(c^d&(g^c))+e[11]+643717713&4294967295;f=g+(h<<14&4294967295|h>>>18);h=d+(g^c&(f^g))+e[0]+3921069994&4294967295;d=f+(h<<20&4294967295|h>>>12);h=c+(f^g&(d^f))+e[5]+3593408605&4294967295;c=d+(h<<5&4294967295|h>>>27);h=g+(d^f&(c^d))+e[10]+38016083&4294967295;g=c+(h<<9&4294967295|h>>>23);h=f+(c^d&(g^c))+e[15]+3634488961&4294967295;f=g+(h<<14&4294967295|h>>>18);h=d+(g^c&(f^g))+e[4]+3889429448&4294967295;d=f+(h<<20&4294967295|
+h>>>12);h=c+(f^g&(d^f))+e[9]+568446438&4294967295;c=d+(h<<5&4294967295|h>>>27);h=g+(d^f&(c^d))+e[14]+3275163606&4294967295;g=c+(h<<9&4294967295|h>>>23);h=f+(c^d&(g^c))+e[3]+4107603335&4294967295;f=g+(h<<14&4294967295|h>>>18);h=d+(g^c&(f^g))+e[8]+1163531501&4294967295;d=f+(h<<20&4294967295|h>>>12);h=c+(f^g&(d^f))+e[13]+2850285829&4294967295;c=d+(h<<5&4294967295|h>>>27);h=g+(d^f&(c^d))+e[2]+4243563512&4294967295;g=c+(h<<9&4294967295|h>>>23);h=f+(c^d&(g^c))+e[7]+1735328473&4294967295;f=g+(h<<14&4294967295|
+h>>>18);h=d+(g^c&(f^g))+e[12]+2368359562&4294967295;d=f+(h<<20&4294967295|h>>>12);h=c+(d^f^g)+e[5]+4294588738&4294967295;c=d+(h<<4&4294967295|h>>>28);h=g+(c^d^f)+e[8]+2272392833&4294967295;g=c+(h<<11&4294967295|h>>>21);h=f+(g^c^d)+e[11]+1839030562&4294967295;f=g+(h<<16&4294967295|h>>>16);h=d+(f^g^c)+e[14]+4259657740&4294967295;d=f+(h<<23&4294967295|h>>>9);h=c+(d^f^g)+e[1]+2763975236&4294967295;c=d+(h<<4&4294967295|h>>>28);h=g+(c^d^f)+e[4]+1272893353&4294967295;g=c+(h<<11&4294967295|h>>>21);h=f+(g^
+c^d)+e[7]+4139469664&4294967295;f=g+(h<<16&4294967295|h>>>16);h=d+(f^g^c)+e[10]+3200236656&4294967295;d=f+(h<<23&4294967295|h>>>9);h=c+(d^f^g)+e[13]+681279174&4294967295;c=d+(h<<4&4294967295|h>>>28);h=g+(c^d^f)+e[0]+3936430074&4294967295;g=c+(h<<11&4294967295|h>>>21);h=f+(g^c^d)+e[3]+3572445317&4294967295;f=g+(h<<16&4294967295|h>>>16);h=d+(f^g^c)+e[6]+76029189&4294967295;d=f+(h<<23&4294967295|h>>>9);h=c+(d^f^g)+e[9]+3654602809&4294967295;c=d+(h<<4&4294967295|h>>>28);h=g+(c^d^f)+e[12]+3873151461&4294967295;
+g=c+(h<<11&4294967295|h>>>21);h=f+(g^c^d)+e[15]+530742520&4294967295;f=g+(h<<16&4294967295|h>>>16);h=d+(f^g^c)+e[2]+3299628645&4294967295;d=f+(h<<23&4294967295|h>>>9);h=c+(f^(d|~g))+e[0]+4096336452&4294967295;c=d+(h<<6&4294967295|h>>>26);h=g+(d^(c|~f))+e[7]+1126891415&4294967295;g=c+(h<<10&4294967295|h>>>22);h=f+(c^(g|~d))+e[14]+2878612391&4294967295;f=g+(h<<15&4294967295|h>>>17);h=d+(g^(f|~c))+e[5]+4237533241&4294967295;d=f+(h<<21&4294967295|h>>>11);h=c+(f^(d|~g))+e[12]+1700485571&4294967295;c=d+
+(h<<6&4294967295|h>>>26);h=g+(d^(c|~f))+e[3]+2399980690&4294967295;g=c+(h<<10&4294967295|h>>>22);h=f+(c^(g|~d))+e[10]+4293915773&4294967295;f=g+(h<<15&4294967295|h>>>17);h=d+(g^(f|~c))+e[1]+2240044497&4294967295;d=f+(h<<21&4294967295|h>>>11);h=c+(f^(d|~g))+e[8]+1873313359&4294967295;c=d+(h<<6&4294967295|h>>>26);h=g+(d^(c|~f))+e[15]+4264355552&4294967295;g=c+(h<<10&4294967295|h>>>22);h=f+(c^(g|~d))+e[6]+2734768916&4294967295;f=g+(h<<15&4294967295|h>>>17);h=d+(g^(f|~c))+e[13]+1309151649&4294967295;
+d=f+(h<<21&4294967295|h>>>11);h=c+(f^(d|~g))+e[4]+4149444226&4294967295;c=d+(h<<6&4294967295|h>>>26);h=g+(d^(c|~f))+e[11]+3174756917&4294967295;g=c+(h<<10&4294967295|h>>>22);h=f+(c^(g|~d))+e[2]+718787259&4294967295;f=g+(h<<15&4294967295|h>>>17);h=d+(g^(f|~c))+e[9]+3951481745&4294967295;b.a[0]=b.a[0]+c&4294967295;b.a[1]=b.a[1]+(f+(h<<21&4294967295|h>>>11))&4294967295;b.a[2]=b.a[2]+f&4294967295;b.a[3]=b.a[3]+g&4294967295}
+function Ci(b,c){var d;void 0===d&&(d=c.length);for(var e=d-b.b,f=b.g,g=b.f,h=0;h<d;){if(0==g)for(;h<=e;)Bi(b,c,h),h+=b.b;if(da(c))for(;h<d;){if(f[g++]=c.charCodeAt(h++),g==b.b){Bi(b,f);g=0;break}}else for(;h<d;)if(f[g++]=c[h++],g==b.b){Bi(b,f);g=0;break}}b.f=g;b.c+=d};function Di(b){b=b||{};this.f=void 0!==b.color?b.color:null;this.Da=b.lineCap;this.a=void 0!==b.lineDash?b.lineDash:null;this.Ea=b.lineJoin;this.Fa=b.miterLimit;this.c=b.width;this.b=void 0}Di.prototype.ga=function(){return this.f};Di.prototype.getLineDash=function(){return this.a};Di.prototype.ha=function(){return this.c};function Ei(b){b=b||{};this.h=this.a=this.g=null;this.f=void 0!==b.fill?b.fill:null;this.b=void 0!==b.stroke?b.stroke:null;this.c=b.radius;this.o=[0,0];this.j=this.s=this.A=null;var c=b.atlasManager,d,e=null,f,g=0;this.b&&(f=vd(this.b.ga()),g=this.b.ha(),void 0===g&&(g=1),e=this.b.getLineDash(),Ef||(e=null));var h=2*(this.c+g)+1;f={strokeStyle:f,Wc:g,size:h,lineDash:e};if(void 0===c)this.a=document.createElement("CANVAS"),this.a.height=h,this.a.width=h,d=h=this.a.width,c=this.a.getContext("2d"),this.tc(f,
+c,0,0),this.f?this.h=this.a:(c=this.h=document.createElement("CANVAS"),c.height=f.size,c.width=f.size,c=c.getContext("2d"),this.oc(f,c,0,0));else{h=Math.round(h);(e=!this.f)&&(d=this.oc.bind(this,f));if(this.b){g=this.b;if(void 0===g.b){var k="s"+(g.f?vd(g.f):"-")+","+(void 0!==g.Da?g.Da.toString():"-")+","+(g.a?g.a.toString():"-")+","+(void 0!==g.Ea?g.Ea:"-")+","+(void 0!==g.Fa?g.Fa.toString():"-")+","+(void 0!==g.c?g.c.toString():"-"),l=new Ai;Ci(l,k);var m=Array((56>l.f?l.b:2*l.b)-l.f);m[0]=128;
+for(k=1;k<m.length-8;++k)m[k]=0;for(var n=8*l.c,k=m.length-8;k<m.length;++k)m[k]=n&255,n/=256;Ci(l,m);m=Array(16);for(k=n=0;4>k;++k)for(var q=0;32>q;q+=8)m[n++]=l.a[k]>>>q&255;if(8192>=m.length)l=String.fromCharCode.apply(null,m);else for(l="",k=0;k<m.length;k+=8192)l+=String.fromCharCode.apply(null,rd(m,k,k+8192));g.b=l}g=g.b}else g="-";this.f?(l=this.f,void 0===l.b&&(l.b=l.a instanceof CanvasPattern||l.a instanceof CanvasGradient?I(l.a).toString():"f"+(l.a?vd(l.a):"-")),l=l.b):l="-";this.g&&g==
+this.g[1]&&l==this.g[2]&&this.c==this.g[3]||(this.g=["c"+g+l+(void 0!==this.c?this.c.toString():"-"),g,l,this.c]);f=c.add(this.g[0],h,h,this.tc.bind(this,f),d);this.a=f.image;this.o=[f.offsetX,f.offsetY];d=f.image.width;e?this.h=f.Ye:this.h=this.a}this.A=[h/2,h/2];this.s=[h,h];this.j=[d,d];Ug.call(this,{opacity:1,rotateWithView:!1,rotation:0,scale:1,snapToPixel:void 0!==b.snapToPixel?b.snapToPixel:!0})}M(Ei,Ug);p=Ei.prototype;p.jb=function(){return this.A};p.Ka=function(){return this.f};p.Xb=function(){return this.h};
+p.T=function(){return this.a};p.rb=function(){return 2};p.wc=function(){return this.j};p.ka=function(){return this.o};p.Qa=function(){return this.s};p.va=function(){return this.b};p.Bc=pa;p.load=pa;p.Xc=pa;p.tc=function(b,c,d,e){c.setTransform(1,0,0,1,0,0);c.translate(d,e);c.beginPath();c.arc(b.size/2,b.size/2,this.c,0,2*Math.PI,!0);this.f&&(c.fillStyle=yd(this.f.ga()),c.fill());this.b&&(c.strokeStyle=b.strokeStyle,c.lineWidth=b.Wc,b.lineDash&&c.setLineDash(b.lineDash),c.stroke());c.closePath()};
+p.oc=function(b,c,d,e){c.setTransform(1,0,0,1,0,0);c.translate(d,e);c.beginPath();c.arc(b.size/2,b.size/2,this.c,0,2*Math.PI,!0);c.fillStyle=vd(ui);c.fill();this.b&&(c.strokeStyle=b.strokeStyle,c.lineWidth=b.Wc,b.lineDash&&c.setLineDash(b.lineDash),c.stroke());c.closePath()};function Fi(b){b=b||{};this.f=null;this.b=Gi;void 0!==b.geometry&&Hi(this,b.geometry);this.c=void 0!==b.fill?b.fill:null;this.g=void 0!==b.image?b.image:null;this.h=void 0!==b.stroke?b.stroke:null;this.sa=void 0!==b.text?b.text:null;this.a=b.zIndex}Fi.prototype.M=function(){return this.f};Fi.prototype.Ka=function(){return this.c};Fi.prototype.T=function(){return this.g};Fi.prototype.va=function(){return this.h};
+function Hi(b,c){ga(c)?b.b=c:"string"===typeof c?b.b=function(b){return b.get(c)}:c?void 0!==c&&(b.b=function(){return c}):b.b=Gi;b.f=c}function Ii(b){if(!ga(b)){var c;c=Array.isArray(b)?b:[b];b=function(){return c}}return b}var Ji=null;function Ki(){if(!Ji){var b=new yi({color:"rgba(255,255,255,0.4)"}),c=new Di({color:"#3399CC",width:1.25});Ji=[new Fi({image:new Ei({fill:b,stroke:c,radius:5}),fill:b,stroke:c})]}return Ji}
+function Li(){var b={},c=[255,255,255,1],d=[0,153,255,1];b.Polygon=[new Fi({fill:new yi({color:[255,255,255,.5]})})];b.MultiPolygon=b.Polygon;b.LineString=[new Fi({stroke:new Di({color:c,width:5})}),new Fi({stroke:new Di({color:d,width:3})})];b.MultiLineString=b.LineString;b.Circle=b.Polygon.concat(b.LineString);b.Point=[new Fi({image:new Ei({radius:6,fill:new yi({color:d}),stroke:new Di({color:c,width:1.5})}),zIndex:Infinity})];b.MultiPoint=b.Point;b.GeometryCollection=b.Polygon.concat(b.LineString,
+b.Point);return b}function Gi(b){return b.M()};function Y(b){b=b?b:{};var c=Wa({},b);delete c.style;delete c.renderBuffer;delete c.updateWhileAnimating;delete c.updateWhileInteracting;Gg.call(this,c);this.a=void 0!==b.renderBuffer?b.renderBuffer:100;this.o=null;this.g=void 0;this.s(b.style);this.i=void 0!==b.updateWhileAnimating?b.updateWhileAnimating:!1;this.j=void 0!==b.updateWhileInteracting?b.updateWhileInteracting:!1}M(Y,Gg);Y.prototype.s=function(b){this.o=void 0!==b?b:Ki;this.g=null===b?void 0:Ii(this.o);this.v()};function Mi(b,c,d,e,f){this.c=b;this.u=c;this.l=d;this.w=e;this.Ja=f;this.g=this.a=this.b=this.Y=this.ba=this.S=null;this.aa=this.ja=this.o=this.D=this.K=this.B=0;this.ea=!1;this.h=this.na=0;this.za=!1;this.G=0;this.f="";this.j=this.H=this.Aa=this.pa=0;this.P=this.A=this.i=null;this.s=[];this.Ba=zb()}M(Mi,Eg);
+function Ni(b,c,d){if(b.g){c=Ac(c,0,d,2,b.w,b.s);d=b.c;var e=b.Ba,f=d.globalAlpha;1!=b.o&&(d.globalAlpha=f*b.o);var g=b.na;b.ea&&(g+=b.Ja);var h,k;h=0;for(k=c.length;h<k;h+=2){var l=c[h]-b.B,m=c[h+1]-b.K;b.za&&(l=Math.round(l),m=Math.round(m));if(0!==g||1!=b.h){var n=l+b.B,q=m+b.K;Ig(e,n,q,b.h,b.h,g,-n,-q);d.setTransform(e[0],e[1],e[4],e[5],e[12],e[13])}d.drawImage(b.g,b.ja,b.aa,b.G,b.D,l,m,b.G,b.D)}0===g&&1==b.h||d.setTransform(1,0,0,1,0,0);1!=b.o&&(d.globalAlpha=f)}}
+function Oi(b,c,d,e){var f=0;if(b.P&&""!==b.f){b.i&&Pi(b,b.i);b.A&&Qi(b,b.A);var g=b.P,h=b.c,k=b.Y;k?(k.font!=g.font&&(k.font=h.font=g.font),k.textAlign!=g.textAlign&&(k.textAlign=h.textAlign=g.textAlign),k.textBaseline!=g.textBaseline&&(k.textBaseline=h.textBaseline=g.textBaseline)):(h.font=g.font,h.textAlign=g.textAlign,h.textBaseline=g.textBaseline,b.Y={font:g.font,textAlign:g.textAlign,textBaseline:g.textBaseline});c=Ac(c,f,d,e,b.w,b.s);for(g=b.c;f<d;f+=e){h=c[f]+b.pa;k=c[f+1]+b.Aa;if(0!==b.H||
+1!=b.j){var l=Ig(b.Ba,h,k,b.j,b.j,b.H,-h,-k);g.setTransform(l[0],l[1],l[4],l[5],l[12],l[13])}b.A&&g.strokeText(b.f,h,k);b.i&&g.fillText(b.f,h,k)}0===b.H&&1==b.j||g.setTransform(1,0,0,1,0,0)}}function Ri(b,c,d,e,f,g){var h=b.c;b=Ac(c,d,e,f,b.w,b.s);h.moveTo(b[0],b[1]);c=b.length;g&&(c-=2);for(d=2;d<c;d+=2)h.lineTo(b[d],b[d+1]);g&&h.closePath();return e}function Si(b,c,d,e,f){var g,h;g=0;for(h=e.length;g<h;++g)d=Ri(b,c,d,e[g],f,!0);return d}p=Mi.prototype;
+p.nc=function(b){if(ac(this.l,b.C())){if(this.b||this.a){this.b&&Pi(this,this.b);this.a&&Qi(this,this.a);var c;c=this.w;var d=this.s,e=b.a;c=e?Ac(e,0,e.length,b.b,c,d):null;d=c[2]-c[0];e=c[3]-c[1];d=Math.sqrt(d*d+e*e);e=this.c;e.beginPath();e.arc(c[0],c[1],d,0,2*Math.PI);this.b&&e.fill();this.a&&e.stroke()}""!==this.f&&Oi(this,b.a.slice(0,b.b),2,2)}};p.$a=function(b){var c=b.a;b=b.b;this.g&&Ni(this,c,c.length);""!==this.f&&Oi(this,c,c.length,b)};
+p.Za=function(b){var c=b.a;b=b.b;this.g&&Ni(this,c,c.length);""!==this.f&&Oi(this,c,c.length,b)};p.pc=function(b){if(ac(this.l,b.C())){if(this.a){Qi(this,this.a);var c=this.c,d=b.a;c.beginPath();Ri(this,d,0,d.length,b.b,!1);c.stroke()}""!==this.f&&(b=Ti(b),Oi(this,b,2,2))}};
+p.qc=function(b){var c=b.C();if(ac(this.l,c)){if(this.a){Qi(this,this.a);var c=this.c,d=b.a,e=0,f=b.ab(),g=b.b;c.beginPath();var h,k;h=0;for(k=f.length;h<k;++h)e=Ri(this,d,e,f[h],g,!1);c.stroke()}""!==this.f&&(b=Ui(b),Oi(this,b,b.length,2))}};p.sc=function(b){if(ac(this.l,b.C())){if(this.a||this.b){this.b&&Pi(this,this.b);this.a&&Qi(this,this.a);var c=this.c;c.beginPath();Si(this,Vc(b),0,b.ab(),b.b);this.b&&c.fill();this.a&&c.stroke()}""!==this.f&&(b=Wc(b),Oi(this,b,2,2))}};
+p.rc=function(b){if(ac(this.l,b.C())){if(this.a||this.b){this.b&&Pi(this,this.b);this.a&&Qi(this,this.a);var c=this.c,d=Vi(b),e=0,f=b.c,g=b.b,h,k;h=0;for(k=f.length;h<k;++h){var l=f[h];c.beginPath();e=Si(this,d,e,l,g);this.b&&c.fill();this.a&&c.stroke()}}""!==this.f&&(b=Wi(b),Oi(this,b,b.length,2))}};function Pi(b,c){var d=b.c,e=b.S;e?e.fillStyle!=c.fillStyle&&(e.fillStyle=d.fillStyle=c.fillStyle):(d.fillStyle=c.fillStyle,b.S={fillStyle:c.fillStyle})}
+function Qi(b,c){var d=b.c,e=b.ba;e?(e.lineCap!=c.lineCap&&(e.lineCap=d.lineCap=c.lineCap),Ef&&!Ma(e.lineDash,c.lineDash)&&d.setLineDash(e.lineDash=c.lineDash),e.lineJoin!=c.lineJoin&&(e.lineJoin=d.lineJoin=c.lineJoin),e.lineWidth!=c.lineWidth&&(e.lineWidth=d.lineWidth=c.lineWidth),e.miterLimit!=c.miterLimit&&(e.miterLimit=d.miterLimit=c.miterLimit),e.strokeStyle!=c.strokeStyle&&(e.strokeStyle=d.strokeStyle=c.strokeStyle)):(d.lineCap=c.lineCap,Ef&&d.setLineDash(c.lineDash),d.lineJoin=c.lineJoin,d.lineWidth=
+c.lineWidth,d.miterLimit=c.miterLimit,d.strokeStyle=c.strokeStyle,b.ba={lineCap:c.lineCap,lineDash:c.lineDash,lineJoin:c.lineJoin,lineWidth:c.lineWidth,miterLimit:c.miterLimit,strokeStyle:c.strokeStyle})}
+p.Ga=function(b,c){if(b){var d=b.ga();this.b={fillStyle:yd(d?d:ui)}}else this.b=null;if(c){var d=c.ga(),e=c.Da,f=c.getLineDash(),g=c.Ea,h=c.ha(),k=c.Fa;this.a={lineCap:void 0!==e?e:"round",lineDash:f?f:vi,lineJoin:void 0!==g?g:"round",lineWidth:this.u*(void 0!==h?h:1),miterLimit:void 0!==k?k:10,strokeStyle:vd(d?d:wi)}}else this.a=null};
+p.Ha=function(b){if(b){var c=b.jb(),d=b.T(1),e=b.ka(),f=b.Qa();this.B=c[0];this.K=c[1];this.D=f[1];this.g=d;this.o=b.l;this.ja=e[0];this.aa=e[1];this.ea=b.i;this.na=b.Z();this.h=b.gb;this.za=b.u;this.G=f[0]}else this.g=null};
+p.xa=function(b){if(b){var c=b.Ka();c?(c=c.ga(),this.i={fillStyle:yd(c?c:ui)}):this.i=null;var d=b.va();if(d){var c=d.ga(),e=d.Da,f=d.getLineDash(),g=d.Ea,h=d.ha(),d=d.Fa;this.A={lineCap:void 0!==e?e:"round",lineDash:f?f:vi,lineJoin:void 0!==g?g:"round",lineWidth:void 0!==h?h:1,miterLimit:void 0!==d?d:10,strokeStyle:vd(c?c:wi)}}else this.A=null;var c=b.qd(),e=b.rd(),f=b.sd(),g=b.Z(),h=b.gb,d=b.sa,k=b.td();b=b.ud();this.P={font:void 0!==c?c:"10px sans-serif",textAlign:void 0!==k?k:"center",textBaseline:void 0!==
+b?b:"middle"};this.f=void 0!==d?d:"";this.pa=void 0!==e?this.u*e:0;this.Aa=void 0!==f?this.u*f:0;this.H=void 0!==g?g:0;this.j=this.u*(void 0!==h?h:1)}else this.f=""};function Xi(b){Lg.call(this,b);this.K=zb()}M(Xi,Lg);
+Xi.prototype.g=function(b,c,d){Yi(this,"precompose",d,b,void 0);var e=this.T();if(e){var f=c.extent,g=void 0!==f;if(g){var h=b.pixelRatio,k=b.size[0]*h,l=b.size[1]*h,m=b.viewState.rotation,n=bc(f),q=[f[2],f[3]],r=[f[2],f[1]],f=Xb(f);Kg(b.coordinateToPixelMatrix,n,n);Kg(b.coordinateToPixelMatrix,q,q);Kg(b.coordinateToPixelMatrix,r,r);Kg(b.coordinateToPixelMatrix,f,f);d.save();xi(d,-m,k/2,l/2);d.beginPath();d.moveTo(n[0]*h,n[1]*h);d.lineTo(q[0]*h,q[1]*h);d.lineTo(r[0]*h,r[1]*h);d.lineTo(f[0]*h,f[1]*
+h);d.clip();xi(d,m,k/2,l/2)}h=this.D;k=d.globalAlpha;d.globalAlpha=c.opacity;d.drawImage(e,0,0,+e.width,+e.height,Math.round(h[12]),Math.round(h[13]),Math.round(e.width*h[0]),Math.round(e.height*h[5]));d.globalAlpha=k;g&&d.restore()}Yi(this,"postcompose",d,b,void 0)};
+function Yi(b,c,d,e,f){var g=b.a;if(nb(g,c)){var h=e.size[0]*e.pixelRatio,k=e.size[1]*e.pixelRatio,l=e.viewState.rotation;xi(d,-l,h/2,k/2);b=void 0!==f?f:Zi(b,e,0);b=new Mi(d,e.pixelRatio,e.extent,b,e.viewState.rotation);S(g,new Fg(c,g,b,e,d,null));xi(d,l,h/2,k/2)}}function Zi(b,c,d){var e=c.viewState,f=c.pixelRatio;return Ig(b.K,f*c.size[0]/2,f*c.size[1]/2,f/e.resolution,-f/e.resolution,-e.rotation,-e.center[0]+d,-e.center[1])};var $i=["Polygon","LineString","Image","Text"];function aj(b,c,d){this.aa=b;this.P=c;this.c=null;this.g=0;this.resolution=d;this.D=this.K=null;this.b=[];this.coordinates=[];this.ba=zb();this.a=[];this.S=[];this.Y=zb();this.ja=zb()}M(aj,Eg);
+function bj(b,c,d,e,f,g){var h=b.coordinates.length,k=b.Kb(),l=[c[d],c[d+1]],m=[NaN,NaN],n=!0,q,r,u;for(q=d+f;q<e;q+=f){m[0]=c[q];m[1]=c[q+1];u=k[1];var w=k[2],y=k[3],z=m[0],D=m[1],t=0;z<k[0]?t=t|16:z>w&&(t=t|4);D<u?t|=8:D>y&&(t|=2);0===t&&(t=1);u=t;u!==r?(n&&(b.coordinates[h++]=l[0],b.coordinates[h++]=l[1]),b.coordinates[h++]=m[0],b.coordinates[h++]=m[1],n=!1):1===u?(b.coordinates[h++]=m[0],b.coordinates[h++]=m[1],n=!1):n=!0;l[0]=m[0];l[1]=m[1];r=u}q===d+f&&(b.coordinates[h++]=l[0],b.coordinates[h++]=
+l[1]);g&&(b.coordinates[h++]=c[d],b.coordinates[h++]=c[d+1]);return h}function cj(b,c){b.K=[0,c,0];b.b.push(b.K);b.D=[0,c,0];b.a.push(b.D)}
+function dj(b,c,d,e,f,g,h,k,l){var m;Jg(e,b.ba)?m=b.S:(m=Ac(b.coordinates,0,b.coordinates.length,2,e,b.S),Cb(b.ba,e));e=!$a(g);var n=0,q=h.length,r=0,u,w=b.Y;b=b.ja;for(var y,z,D,t;n<q;){var v=h[n],B,E,C,G;switch(v[0]){case 0:r=v[1];e&&g[I(r).toString()]||!r.M()?n=v[2]:void 0===l||ac(l,r.M().C())?++n:n=v[2];break;case 1:c.beginPath();++n;break;case 2:r=v[1];u=m[r];v=m[r+1];D=m[r+2]-u;r=m[r+3]-v;c.arc(u,v,Math.sqrt(D*D+r*r),0,2*Math.PI,!0);++n;break;case 3:c.closePath();++n;break;case 4:r=v[1];u=v[2];
+B=v[3];C=v[4]*d;var J=v[5]*d,A=v[6];E=v[7];var H=v[8],O=v[9];D=v[11];t=v[12];var P=v[13],L=v[14];for(v[10]&&(D+=f);r<u;r+=2){v=m[r]-C;G=m[r+1]-J;P&&(v=Math.round(v),G=Math.round(G));if(1!=t||0!==D){var K=v+C,fa=G+J;Ig(w,K,fa,t,t,D,-K,-fa);c.transform(w[0],w[1],w[4],w[5],w[12],w[13])}K=c.globalAlpha;1!=E&&(c.globalAlpha=K*E);var fa=L+H>B.width?B.width-H:L,ra=A+O>B.height?B.height-O:A;c.drawImage(B,H,O,fa,ra,v,G,fa*d,ra*d);1!=E&&(c.globalAlpha=K);if(1!=t||0!==D)Eb(w,b),c.transform(b[0],b[1],b[4],b[5],
+b[12],b[13])}++n;break;case 5:r=v[1];u=v[2];C=v[3];J=v[4]*d;A=v[5]*d;D=v[6];t=v[7]*d;B=v[8];for(E=v[9];r<u;r+=2){v=m[r]+J;G=m[r+1]+A;if(1!=t||0!==D)Ig(w,v,G,t,t,D,-v,-G),c.transform(w[0],w[1],w[4],w[5],w[12],w[13]);H=C.split("\n");O=H.length;1<O?(P=Math.round(1.5*c.measureText("M").width),G-=(O-1)/2*P):P=0;for(L=0;L<O;L++)K=H[L],E&&c.strokeText(K,v,G),B&&c.fillText(K,v,G),G+=P;if(1!=t||0!==D)Eb(w,b),c.transform(b[0],b[1],b[4],b[5],b[12],b[13])}++n;break;case 6:if(void 0!==k&&(r=v[1],r=k(r)))return r;
+++n;break;case 7:c.fill();++n;break;case 8:r=v[1];u=v[2];v=m[r];G=m[r+1];D=v+.5|0;t=G+.5|0;if(D!==y||t!==z)c.moveTo(v,G),y=D,z=t;for(r+=2;r<u;r+=2)if(v=m[r],G=m[r+1],D=v+.5|0,t=G+.5|0,D!==y||t!==z)c.lineTo(v,G),y=D,z=t;++n;break;case 9:c.fillStyle=v[1];++n;break;case 10:y=void 0!==v[7]?v[7]:!0;z=v[2];c.strokeStyle=v[1];c.lineWidth=y?z*d:z;c.lineCap=v[3];c.lineJoin=v[4];c.miterLimit=v[5];Ef&&c.setLineDash(v[6]);z=y=NaN;++n;break;case 11:c.font=v[1];c.textAlign=v[2];c.textBaseline=v[3];++n;break;case 12:c.stroke();
+++n;break;default:++n}}}function ej(b){var c=b.a;c.reverse();var d,e=c.length,f,g,h=-1;for(d=0;d<e;++d)if(f=c[d],g=f[0],6==g)h=d;else if(0==g){f[2]=d;f=b.a;for(g=d;h<g;){var k=f[h];f[h]=f[g];f[g]=k;++h;--g}h=-1}}function fj(b,c){b.K[2]=b.b.length;b.K=null;b.D[2]=b.a.length;b.D=null;var d=[6,c];b.b.push(d);b.a.push(d)}aj.prototype.qb=pa;aj.prototype.Kb=function(){return this.P};
+function gj(b,c,d){aj.call(this,b,c,d);this.i=this.G=null;this.B=this.w=this.H=this.u=this.s=this.o=this.A=this.j=this.l=this.h=this.f=void 0}M(gj,aj);gj.prototype.$a=function(b,c){if(this.i){cj(this,c);var d=b.a,e=this.coordinates.length,d=bj(this,d,0,d.length,b.b,!1);this.b.push([4,e,d,this.i,this.f,this.h,this.l,this.j,this.A,this.o,this.s,this.u,this.H,this.w,this.B]);this.a.push([4,e,d,this.G,this.f,this.h,this.l,this.j,this.A,this.o,this.s,this.u,this.H,this.w,this.B]);fj(this,c)}};
+gj.prototype.Za=function(b,c){if(this.i){cj(this,c);var d=b.a,e=this.coordinates.length,d=bj(this,d,0,d.length,b.b,!1);this.b.push([4,e,d,this.i,this.f,this.h,this.l,this.j,this.A,this.o,this.s,this.u,this.H,this.w,this.B]);this.a.push([4,e,d,this.G,this.f,this.h,this.l,this.j,this.A,this.o,this.s,this.u,this.H,this.w,this.B]);fj(this,c)}};gj.prototype.qb=function(){ej(this);this.h=this.f=void 0;this.i=this.G=null;this.B=this.w=this.u=this.s=this.o=this.A=this.j=this.H=this.l=void 0};
+gj.prototype.Ha=function(b){var c=b.jb(),d=b.Qa(),e=b.Xb(1),f=b.T(1),g=b.ka();this.f=c[0];this.h=c[1];this.G=e;this.i=f;this.l=d[1];this.j=b.l;this.A=g[0];this.o=g[1];this.s=b.i;this.u=b.Z();this.H=b.gb;this.w=b.u;this.B=d[0]};function hj(b,c,d){aj.call(this,b,c,d);this.f={Ya:void 0,Ta:void 0,Ua:null,Va:void 0,Wa:void 0,Xa:void 0,Sb:0,strokeStyle:void 0,lineCap:void 0,lineDash:null,lineJoin:void 0,lineWidth:void 0,miterLimit:void 0}}M(hj,aj);
+function ij(b,c,d,e,f){var g=b.coordinates.length;c=bj(b,c,d,e,f,!1);g=[8,g,c];b.b.push(g);b.a.push(g);return e}p=hj.prototype;p.Kb=function(){this.c||(this.c=Mb(this.P),0<this.g&&Lb(this.c,this.resolution*(this.g+1)/2,this.c));return this.c};
+function jj(b){var c=b.f,d=c.strokeStyle,e=c.lineCap,f=c.lineDash,g=c.lineJoin,h=c.lineWidth,k=c.miterLimit;c.Ya==d&&c.Ta==e&&Ma(c.Ua,f)&&c.Va==g&&c.Wa==h&&c.Xa==k||(c.Sb!=b.coordinates.length&&(b.b.push([12]),c.Sb=b.coordinates.length),b.b.push([10,d,h,e,g,k,f],[1]),c.Ya=d,c.Ta=e,c.Ua=f,c.Va=g,c.Wa=h,c.Xa=k)}
+p.pc=function(b,c){var d=this.f,e=d.lineWidth;void 0!==d.strokeStyle&&void 0!==e&&(jj(this),cj(this,c),this.a.push([10,d.strokeStyle,d.lineWidth,d.lineCap,d.lineJoin,d.miterLimit,d.lineDash],[1]),d=b.a,ij(this,d,0,d.length,b.b),this.a.push([12]),fj(this,c))};
+p.qc=function(b,c){var d=this.f,e=d.lineWidth;if(void 0!==d.strokeStyle&&void 0!==e){jj(this);cj(this,c);this.a.push([10,d.strokeStyle,d.lineWidth,d.lineCap,d.lineJoin,d.miterLimit,d.lineDash],[1]);var d=b.ab(),e=b.a,f=b.b,g=0,h,k;h=0;for(k=d.length;h<k;++h)g=ij(this,e,g,d[h],f);this.a.push([12]);fj(this,c)}};p.qb=function(){this.f.Sb!=this.coordinates.length&&this.b.push([12]);ej(this);this.f=null};
+p.Ga=function(b,c){var d=c.ga();this.f.strokeStyle=vd(d?d:wi);d=c.Da;this.f.lineCap=void 0!==d?d:"round";d=c.getLineDash();this.f.lineDash=d?d:vi;d=c.Ea;this.f.lineJoin=void 0!==d?d:"round";d=c.ha();this.f.lineWidth=void 0!==d?d:1;d=c.Fa;this.f.miterLimit=void 0!==d?d:10;this.f.lineWidth>this.g&&(this.g=this.f.lineWidth,this.c=null)};
+function kj(b,c,d){aj.call(this,b,c,d);this.f={mc:void 0,Ya:void 0,Ta:void 0,Ua:null,Va:void 0,Wa:void 0,Xa:void 0,fillStyle:void 0,strokeStyle:void 0,lineCap:void 0,lineDash:null,lineJoin:void 0,lineWidth:void 0,miterLimit:void 0}}M(kj,aj);
+function lj(b,c,d,e,f){var g=b.f,h=[1];b.b.push(h);b.a.push(h);var k,h=0;for(k=e.length;h<k;++h){var l=e[h],m=b.coordinates.length;d=bj(b,c,d,l,f,!0);d=[8,m,d];m=[3];b.b.push(d,m);b.a.push(d,m);d=l}c=[7];b.a.push(c);void 0!==g.fillStyle&&b.b.push(c);void 0!==g.strokeStyle&&(g=[12],b.b.push(g),b.a.push(g));return d}p=kj.prototype;
+p.nc=function(b,c){var d=this.f,e=d.strokeStyle;if(void 0!==d.fillStyle||void 0!==e){mj(this);cj(this,c);this.a.push([9,vd(ui)]);void 0!==d.strokeStyle&&this.a.push([10,d.strokeStyle,d.lineWidth,d.lineCap,d.lineJoin,d.miterLimit,d.lineDash]);var f=b.a,e=this.coordinates.length;bj(this,f,0,f.length,b.b,!1);f=[1];e=[2,e];this.b.push(f,e);this.a.push(f,e);e=[7];this.a.push(e);void 0!==d.fillStyle&&this.b.push(e);void 0!==d.strokeStyle&&(d=[12],this.b.push(d),this.a.push(d));fj(this,c)}};
+p.sc=function(b,c){var d=this.f,e=d.strokeStyle;if(void 0!==d.fillStyle||void 0!==e)mj(this),cj(this,c),this.a.push([9,vd(ui)]),void 0!==d.strokeStyle&&this.a.push([10,d.strokeStyle,d.lineWidth,d.lineCap,d.lineJoin,d.miterLimit,d.lineDash]),d=b.ab(),e=Vc(b),lj(this,e,0,d,b.b),fj(this,c)};
+p.rc=function(b,c){var d=this.f,e=d.strokeStyle;if(void 0!==d.fillStyle||void 0!==e){mj(this);cj(this,c);this.a.push([9,vd(ui)]);void 0!==d.strokeStyle&&this.a.push([10,d.strokeStyle,d.lineWidth,d.lineCap,d.lineJoin,d.miterLimit,d.lineDash]);var d=b.c,e=Vi(b),f=b.b,g=0,h,k;h=0;for(k=d.length;h<k;++h)g=lj(this,e,g,d[h],f);fj(this,c)}};p.qb=function(){ej(this);this.f=null;var b=this.aa;if(0!==b){var c=this.coordinates,d,e;d=0;for(e=c.length;d<e;++d)c[d]=b*Math.round(c[d]/b)}};
+p.Kb=function(){this.c||(this.c=Mb(this.P),0<this.g&&Lb(this.c,this.resolution*(this.g+1)/2,this.c));return this.c};
+p.Ga=function(b,c){var d=this.f;if(b){var e=b.ga();d.fillStyle=yd(e?e:ui)}else d.fillStyle=void 0;c?(e=c.ga(),d.strokeStyle=vd(e?e:wi),e=c.Da,d.lineCap=void 0!==e?e:"round",e=c.getLineDash(),d.lineDash=e?e.slice():vi,e=c.Ea,d.lineJoin=void 0!==e?e:"round",e=c.ha(),d.lineWidth=void 0!==e?e:1,e=c.Fa,d.miterLimit=void 0!==e?e:10,d.lineWidth>this.g&&(this.g=d.lineWidth,this.c=null)):(d.strokeStyle=void 0,d.lineCap=void 0,d.lineDash=null,d.lineJoin=void 0,d.lineWidth=void 0,d.miterLimit=void 0)};
+function mj(b){var c=b.f,d=c.fillStyle,e=c.strokeStyle,f=c.lineCap,g=c.lineDash,h=c.lineJoin,k=c.lineWidth,l=c.miterLimit;void 0!==d&&c.mc!=d&&(b.b.push([9,d]),c.mc=c.fillStyle);void 0===e||c.Ya==e&&c.Ta==f&&c.Ua==g&&c.Va==h&&c.Wa==k&&c.Xa==l||(b.b.push([10,e,k,f,h,l,g]),c.Ya=e,c.Ta=f,c.Ua=g,c.Va=h,c.Wa=k,c.Xa=l)}function nj(b,c,d){aj.call(this,b,c,d);this.w=this.H=this.u=null;this.i="";this.s=this.o=this.A=this.j=0;this.l=this.h=this.f=null}M(nj,aj);
+function oj(b,c,d,e,f){if(""!==b.i&&b.l&&(b.f||b.h)){if(b.f){var g=b.f,h=b.u;if(!h||h.fillStyle!=g.fillStyle){var k=[9,g.fillStyle];b.b.push(k);b.a.push(k);h?h.fillStyle=g.fillStyle:b.u={fillStyle:g.fillStyle}}}b.h&&(g=b.h,h=b.H,h&&h.lineCap==g.lineCap&&h.lineDash==g.lineDash&&h.lineJoin==g.lineJoin&&h.lineWidth==g.lineWidth&&h.miterLimit==g.miterLimit&&h.strokeStyle==g.strokeStyle||(k=[10,g.strokeStyle,g.lineWidth,g.lineCap,g.lineJoin,g.miterLimit,g.lineDash,!1],b.b.push(k),b.a.push(k),h?(h.lineCap=
+g.lineCap,h.lineDash=g.lineDash,h.lineJoin=g.lineJoin,h.lineWidth=g.lineWidth,h.miterLimit=g.miterLimit,h.strokeStyle=g.strokeStyle):b.H={lineCap:g.lineCap,lineDash:g.lineDash,lineJoin:g.lineJoin,lineWidth:g.lineWidth,miterLimit:g.miterLimit,strokeStyle:g.strokeStyle}));g=b.l;h=b.w;h&&h.font==g.font&&h.textAlign==g.textAlign&&h.textBaseline==g.textBaseline||(k=[11,g.font,g.textAlign,g.textBaseline],b.b.push(k),b.a.push(k),h?(h.font=g.font,h.textAlign=g.textAlign,h.textBaseline=g.textBaseline):b.w=
+{font:g.font,textAlign:g.textAlign,textBaseline:g.textBaseline});cj(b,f);g=b.coordinates.length;c=bj(b,c,0,d,e,!1);c=[5,g,c,b.i,b.j,b.A,b.o,b.s,!!b.f,!!b.h];b.b.push(c);b.a.push(c);fj(b,f)}}
+nj.prototype.xa=function(b){if(b){var c=b.Ka();c?(c=c.ga(),c=yd(c?c:ui),this.f?this.f.fillStyle=c:this.f={fillStyle:c}):this.f=null;var d=b.va();if(d){var c=d.ga(),e=d.Da,f=d.getLineDash(),g=d.Ea,h=d.ha(),d=d.Fa,e=void 0!==e?e:"round",f=f?f.slice():vi,g=void 0!==g?g:"round",h=void 0!==h?h:1,d=void 0!==d?d:10,c=vd(c?c:wi);if(this.h){var k=this.h;k.lineCap=e;k.lineDash=f;k.lineJoin=g;k.lineWidth=h;k.miterLimit=d;k.strokeStyle=c}else this.h={lineCap:e,lineDash:f,lineJoin:g,lineWidth:h,miterLimit:d,strokeStyle:c}}else this.h=
+null;var l=b.qd(),c=b.rd(),e=b.sd(),f=b.Z(),h=b.gb,d=b.sa,g=b.td(),k=b.ud();b=void 0!==l?l:"10px sans-serif";g=void 0!==g?g:"center";k=void 0!==k?k:"middle";this.l?(l=this.l,l.font=b,l.textAlign=g,l.textBaseline=k):this.l={font:b,textAlign:g,textBaseline:k};this.i=void 0!==d?d:"";this.j=void 0!==c?c:0;this.A=void 0!==e?e:0;this.o=void 0!==f?f:0;this.s=void 0!==h?h:1}else this.i=""};function pj(b,c,d,e){this.o=b;this.h=c;this.A=d;this.l=e;this.b={};this.i=rf(1,1);this.j=zb()}
+function qj(b){for(var c in b.b){var d=b.b[c],e;for(e in d)d[e].qb()}}pj.prototype.g=function(b,c,d,e,f){var g=this.j;Ig(g,.5,.5,1/c,-1/c,-d,-b[0],-b[1]);var h=this.i;h.clearRect(0,0,1,1);var k;void 0!==this.l&&(k=Jb(),Kb(k,b),Lb(k,c*this.l,k));return rj(this,h,g,d,e,function(b){if(0<h.getImageData(0,0,1,1).data[3]){if(b=f(b))return b;h.clearRect(0,0,1,1)}},k)};
+pj.prototype.a=function(b,c){var d=void 0!==b?b.toString():"0",e=this.b[d];void 0===e&&(e={},this.b[d]=e);d=e[c];void 0===d&&(d=new sj[c](this.o,this.h,this.A),e[c]=d);return d};pj.prototype.c=function(){return $a(this.b)};
+pj.prototype.f=function(b,c,d,e,f,g){var h=Object.keys(this.b).map(Number);h.sort(Ha);if(!1!==g){var k=this.h;g=k[0];var l=k[1],m=k[2],k=k[3];g=[g,l,g,k,m,k,m,l];Ac(g,0,8,2,d,g);b.save();b.beginPath();b.moveTo(g[0],g[1]);b.lineTo(g[2],g[3]);b.lineTo(g[4],g[5]);b.lineTo(g[6],g[7]);b.closePath();b.clip()}var n,q;g=0;for(l=h.length;g<l;++g)for(n=this.b[h[g].toString()],m=0,k=$i.length;m<k;++m)q=n[$i[m]],void 0!==q&&dj(q,b,c,d,e,f,q.b,void 0);b.restore()};
+function rj(b,c,d,e,f,g,h){var k=Object.keys(b.b).map(Number);k.sort(function(b,c){return c-b});var l,m,n,q,r;l=0;for(m=k.length;l<m;++l)for(q=b.b[k[l].toString()],n=$i.length-1;0<=n;--n)if(r=q[$i[n]],void 0!==r&&(r=dj(r,c,1,d,e,f,r.a,g,h)))return r}var sj={Image:gj,LineString:hj,Polygon:kj,Text:nj};function tj(b,c){return I(b)-I(c)}function uj(b,c){var d=.5*b/c;return d*d}function vj(b,c,d,e,f,g){var h=!1,k,l;if(k=d.T())l=k.rb(),2==l||3==l?k.Xc(f,g):(0==l&&k.load(),k.Bc(f,g),h=!0);if(f=(0,d.b)(c))e=f.Ob(e),(0,wj[e.U()])(b,e,d,c);return h}
+var wj={Point:function(b,c,d,e){var f=d.T();if(f){if(2!=f.rb())return;var g=b.a(d.a,"Image");g.Ha(f);g.$a(c,e)}if(f=d.sa)b=b.a(d.a,"Text"),b.xa(f),oj(b,c.a,2,2,e)},LineString:function(b,c,d,e){var f=d.va();if(f){var g=b.a(d.a,"LineString");g.Ga(null,f);g.pc(c,e)}if(f=d.sa)b=b.a(d.a,"Text"),b.xa(f),oj(b,Ti(c),2,2,e)},Polygon:function(b,c,d,e){var f=d.Ka(),g=d.va();if(f||g){var h=b.a(d.a,"Polygon");h.Ga(f,g);h.sc(c,e)}if(f=d.sa)b=b.a(d.a,"Text"),b.xa(f),oj(b,Wc(c),2,2,e)},MultiPoint:function(b,c,d,
+e){var f=d.T();if(f){if(2!=f.rb())return;var g=b.a(d.a,"Image");g.Ha(f);g.Za(c,e)}if(f=d.sa)b=b.a(d.a,"Text"),b.xa(f),d=c.a,oj(b,d,d.length,c.b,e)},MultiLineString:function(b,c,d,e){var f=d.va();if(f){var g=b.a(d.a,"LineString");g.Ga(null,f);g.qc(c,e)}if(f=d.sa)b=b.a(d.a,"Text"),b.xa(f),c=Ui(c),oj(b,c,c.length,2,e)},MultiPolygon:function(b,c,d,e){var f=d.Ka(),g=d.va();if(g||f){var h=b.a(d.a,"Polygon");h.Ga(f,g);h.rc(c,e)}if(f=d.sa)b=b.a(d.a,"Text"),b.xa(f),c=Wi(c),oj(b,c,c.length,2,e)},GeometryCollection:function(b,
+c,d,e){c=c.a;var f,g;f=0;for(g=c.length;f<g;++f)(0,wj[c[f].U()])(b,c[f],d,e)},Circle:function(b,c,d,e){var f=d.Ka(),g=d.va();if(f||g){var h=b.a(d.a,"Polygon");h.Ga(f,g);h.nc(c,e)}if(f=d.sa)b=b.a(d.a,"Text"),b.xa(f),oj(b,c.a.slice(0,c.b),2,2,e)}};var xj=!((W("Chrome")||W("CriOS"))&&!W("Opera")&&!W("OPR")&&!W("Edge"))||W("iPhone")&&!W("iPod")&&!W("iPad")||W("iPad")||W("iPod");function yj(b,c,d,e){b=d-b;c=e-c;var f=Math.sqrt(b*b+c*c);return[Math.round(d+b/f),Math.round(e+c/f)]}
+function zj(b,c,d,e,f,g,h,k,l,m,n){var q=rf(Math.round(d*b),Math.round(d*c));if(0===l.length)return q.canvas;q.scale(d,d);var r=Jb();l.forEach(function(b){Sb(r,b.extent)});var u=rf(Math.round(d*Vb(r)/e),Math.round(d*Wb(r)/e)),w=d/e;l.forEach(function(b){u.drawImage(b.image,m,m,b.image.width-2*m,b.image.height-2*m,(b.extent[0]-r[0])*w,-(b.extent[3]-r[3])*w,Vb(b.extent)*w,Wb(b.extent)*w)});var y=bc(h);k.c.forEach(function(b){var c=b.source,f=b.target,h=c[1][0],k=c[1][1],l=c[2][0],m=c[2][1];b=(f[0][0]-
+y[0])/g;var w=-(f[0][1]-y[1])/g,n=(f[1][0]-y[0])/g,A=-(f[1][1]-y[1])/g,H=(f[2][0]-y[0])/g,O=-(f[2][1]-y[1])/g,f=c[0][0],c=c[0][1],h=h-f,k=k-c,l=l-f,m=m-c;a:{h=[[h,k,0,0,n-b],[l,m,0,0,H-b],[0,0,h,k,A-w],[0,0,l,m,O-w]];k=h.length;for(l=0;l<k;l++){for(var m=l,P=Math.abs(h[l][l]),L=l+1;L<k;L++){var K=Math.abs(h[L][l]);K>P&&(P=K,m=L)}if(0===P){h=null;break a}P=h[m];h[m]=h[l];h[l]=P;for(m=l+1;m<k;m++)for(P=-h[m][l]/h[l][l],L=l;L<k+1;L++)h[m][L]=l==L?0:h[m][L]+P*h[l][L]}l=Array(k);for(m=k-1;0<=m;m--)for(l[m]=
+h[m][k]/h[m][m],P=m-1;0<=P;P--)h[P][k]-=h[P][m]*l[m];h=l}h&&(q.save(),q.beginPath(),xj?(l=(b+n+H)/3,m=(w+A+O)/3,k=yj(l,m,b,w),n=yj(l,m,n,A),H=yj(l,m,H,O),q.moveTo(k[0],k[1]),q.lineTo(n[0],n[1]),q.lineTo(H[0],H[1])):(q.moveTo(b,w),q.lineTo(n,A),q.lineTo(H,O)),q.closePath(),q.clip(),q.transform(h[0],h[2],h[1],h[3],b,w),q.translate(r[0]-f,r[3]-c),q.scale(e/d,-e/d),q.drawImage(u.canvas,0,0),q.restore())});n&&(q.save(),q.strokeStyle="black",q.lineWidth=1,k.c.forEach(function(b){var c=b.target;b=(c[0][0]-
+y[0])/g;var d=-(c[0][1]-y[1])/g,e=(c[1][0]-y[0])/g,f=-(c[1][1]-y[1])/g,h=(c[2][0]-y[0])/g,c=-(c[2][1]-y[1])/g;q.beginPath();q.moveTo(b,d);q.lineTo(e,f);q.lineTo(h,c);q.closePath();q.stroke()}),q.restore());return q.canvas};function Aj(b,c,d,e,f){this.f=b;this.g=c;var g={},h=xc(this.g,this.f);this.b=function(b){var c=b[0]+"/"+b[1];g[c]||(g[c]=h(b));return g[c]};this.h=e;this.A=f*f;this.c=[];this.i=!1;this.j=this.f.a&&!!e&&!!this.f.C()&&Vb(e)==Vb(this.f.C());this.a=this.f.C()?Vb(this.f.C()):null;this.l=this.g.C()?Vb(this.g.C()):null;b=bc(d);c=[d[2],d[3]];e=[d[2],d[1]];d=Xb(d);f=this.b(b);var k=this.b(c),l=this.b(e),m=this.b(d);Bj(this,b,c,e,d,f,k,l,m,10);if(this.i){var n=Infinity;this.c.forEach(function(b){n=Math.min(n,
+b.source[0][0],b.source[1][0],b.source[2][0])});this.c.forEach(function(b){if(Math.max(b.source[0][0],b.source[1][0],b.source[2][0])-n>this.a/2){var c=[[b.source[0][0],b.source[0][1]],[b.source[1][0],b.source[1][1]],[b.source[2][0],b.source[2][1]]];c[0][0]-n>this.a/2&&(c[0][0]-=this.a);c[1][0]-n>this.a/2&&(c[1][0]-=this.a);c[2][0]-n>this.a/2&&(c[2][0]-=this.a);Math.max(c[0][0],c[1][0],c[2][0])-Math.min(c[0][0],c[1][0],c[2][0])<this.a/2&&(b.source=c)}},this)}g={}}
+function Bj(b,c,d,e,f,g,h,k,l,m){var n=Ib([g,h,k,l]),q=b.a?Vb(n)/b.a:null,r=b.f.a&&.5<q&&1>q,u=!1;if(0<m){if(b.g.f&&b.l)var w=Ib([c,d,e,f]),u=u|.25<Vb(w)/b.l;!r&&b.f.f&&q&&(u|=.25<q)}if(u||!b.h||ac(n,b.h)){if(!(u||isFinite(g[0])&&isFinite(g[1])&&isFinite(h[0])&&isFinite(h[1])&&isFinite(k[0])&&isFinite(k[1])&&isFinite(l[0])&&isFinite(l[1])))if(0<m)u=!0;else return;if(0<m&&(u||(q=b.b([(c[0]+e[0])/2,(c[1]+e[1])/2]),n=r?(Ea(g[0],b.a)+Ea(k[0],b.a))/2-Ea(q[0],b.a):(g[0]+k[0])/2-q[0],q=(g[1]+k[1])/2-q[1],
+u=n*n+q*q>b.A),u)){Math.abs(c[0]-e[0])<=Math.abs(c[1]-e[1])?(r=[(d[0]+e[0])/2,(d[1]+e[1])/2],n=b.b(r),q=[(f[0]+c[0])/2,(f[1]+c[1])/2],u=b.b(q),Bj(b,c,d,r,q,g,h,n,u,m-1),Bj(b,q,r,e,f,u,n,k,l,m-1)):(r=[(c[0]+d[0])/2,(c[1]+d[1])/2],n=b.b(r),q=[(e[0]+f[0])/2,(e[1]+f[1])/2],u=b.b(q),Bj(b,c,r,q,f,g,n,u,l,m-1),Bj(b,r,d,e,q,n,h,k,u,m-1));return}if(r){if(!b.j)return;b.i=!0}b.c.push({source:[g,k,l],target:[c,e,f]});b.c.push({source:[g,h,k],target:[c,d,e]})}}
+function Cj(b){var c=Jb();b.c.forEach(function(b){b=b.source;Kb(c,b[0]);Kb(c,b[1]);Kb(c,b[2])});return c};function Dj(b){T.call(this);this.g=void 0;this.a="geometry";this.h=null;this.c=void 0;this.b=null;Q(this,rb(this.a),this.nb,this);void 0!==b&&(b instanceof zc||!b?Ej(this,b):this.l(b))}M(Dj,T);p=Dj.prototype;p.clone=function(){var b=new Dj(this.za());Fj(b,this.a);var c=this.M();c&&Ej(b,c.clone());if(c=this.h)b.h=c,b.c=c?Gj(c):void 0,b.v();return b};p.M=function(){return this.get(this.a)};p.La=function(){return this.g};p.zd=function(){this.v()};
+p.nb=function(){this.b&&(N(this.b),this.b=null);var b=this.M();b&&(this.b=Q(b,"change",this.zd,this));this.v()};function Ej(b,c){b.set(b.a,c)}function Fj(b,c){gb(b,rb(b.a),b.nb,b);b.a=c;Q(b,rb(b.a),b.nb,b);b.nb()}function Gj(b){if(!ga(b)){var c;c=Array.isArray(b)?b:[b];b=function(){return c}}return b};function Hj(b,c,d){return function(e,f,g){var h=new XMLHttpRequest;h.open("GET",ga(b)?b(e,f,g):b,!0);"arraybuffer"==c.U()&&(h.responseType="arraybuffer");h.onload=function(){if(200<=h.status&&300>h.status){var b=c.U(),e;"json"==b||"text"==b?e=h.responseText:"xml"==b?(e=h.responseXML,e||(b=h.responseText,e=(new DOMParser).parseFromString(b,"application/xml"))):"arraybuffer"==b&&(e=h.response);e&&d.call(this,c.b(e,{featureProjection:g}),c.f(Ij(e)))}}.bind(this);h.send()}}
+function Jj(b,c){return Hj(b,c,function(b){this.Db(b)})};function Kj(){return[[-Infinity,-Infinity,Infinity,Infinity]]};var Lj;
+(function(){var b={uc:{}};(function(){function c(b,d){if(!(this instanceof c))return new c(b,d);this.Bb=Math.max(4,b||9);this.ec=Math.max(2,Math.ceil(.4*this.Bb));d&&this.ed(d);this.clear()}function d(b,c){b.bbox=e(b,0,b.children.length,c)}function e(b,c,d,e){for(var g=[Infinity,Infinity,-Infinity,-Infinity],h;c<d;c++)h=b.children[c],f(g,b.$?e(h):h.bbox);return g}function f(b,c){b[0]=Math.min(b[0],c[0]);b[1]=Math.min(b[1],c[1]);b[2]=Math.max(b[2],c[2]);b[3]=Math.max(b[3],c[3])}function g(b,c){return b.bbox[0]-
+c.bbox[0]}function h(b,c){return b.bbox[1]-c.bbox[1]}function k(b){return(b[2]-b[0])*(b[3]-b[1])}function l(b){return b[2]-b[0]+(b[3]-b[1])}function m(b,c){return b[0]<=c[0]&&b[1]<=c[1]&&c[2]<=b[2]&&c[3]<=b[3]}function n(b,c){return c[0]<=b[2]&&c[1]<=b[3]&&c[2]>=b[0]&&c[3]>=b[1]}function q(b,c,d,e,f){for(var g=[c,d],h;g.length;)d=g.pop(),c=g.pop(),d-c<=e||(h=c+Math.ceil((d-c)/e/2)*e,r(b,c,d,h,f),g.push(c,h,h,d))}function r(b,c,d,e,f){for(var g,h,k,l,m;d>c;){600<d-c&&(g=d-c+1,h=e-c+1,k=Math.log(g),
+l=.5*Math.exp(2*k/3),m=.5*Math.sqrt(k*l*(g-l)/g)*(0>h-g/2?-1:1),k=Math.max(c,Math.floor(e-h*l/g+m)),h=Math.min(d,Math.floor(e+(g-h)*l/g+m)),r(b,k,h,e,f));g=b[e];h=c;l=d;u(b,c,e);for(0<f(b[d],g)&&u(b,c,d);h<l;){u(b,h,l);h++;for(l--;0>f(b[h],g);)h++;for(;0<f(b[l],g);)l--}0===f(b[c],g)?u(b,c,l):(l++,u(b,l,d));l<=e&&(c=l+1);e<=l&&(d=l-1)}}function u(b,c,d){var e=b[c];b[c]=b[d];b[d]=e}c.prototype={all:function(){return this.ac(this.data,[])},search:function(b){var c=this.data,d=[],e=this.da;if(!n(b,c.bbox))return d;
+for(var f=[],g,h,k,l;c;){g=0;for(h=c.children.length;g<h;g++)k=c.children[g],l=c.$?e(k):k.bbox,n(b,l)&&(c.$?d.push(k):m(b,l)?this.ac(k,d):f.push(k));c=f.pop()}return d},load:function(b){if(!b||!b.length)return this;if(b.length<this.ec){for(var c=0,d=b.length;c<d;c++)this.Ca(b[c]);return this}b=this.cc(b.slice(),0,b.length-1,0);this.data.children.length?this.data.height===b.height?this.fc(this.data,b):(this.data.height<b.height&&(c=this.data,this.data=b,b=c),this.dc(b,this.data.height-b.height-1,!0)):
+this.data=b;return this},Ca:function(b){b&&this.dc(b,this.data.height-1);return this},clear:function(){this.data={children:[],height:1,bbox:[Infinity,Infinity,-Infinity,-Infinity],$:!0};return this},remove:function(b){if(!b)return this;for(var c=this.data,d=this.da(b),e=[],f=[],g,h,k,l;c||e.length;){c||(c=e.pop(),h=e[e.length-1],g=f.pop(),l=!0);if(c.$&&(k=c.children.indexOf(b),-1!==k)){c.children.splice(k,1);e.push(c);this.dd(e);break}l||c.$||!m(c.bbox,d)?h?(g++,c=h.children[g],l=!1):c=null:(e.push(c),
+f.push(g),g=0,h=c,c=c.children[0])}return this},da:function(b){return b},Hb:function(b,c){return b[0]-c[0]},Ib:function(b,c){return b[1]-c[1]},toJSON:function(){return this.data},ac:function(b,c){for(var d=[];b;)b.$?c.push.apply(c,b.children):d.push.apply(d,b.children),b=d.pop();return c},cc:function(b,c,e,f){var g=e-c+1,h=this.Bb,k;if(g<=h)return k={children:b.slice(c,e+1),height:1,bbox:null,$:!0},d(k,this.da),k;f||(f=Math.ceil(Math.log(g)/Math.log(h)),h=Math.ceil(g/Math.pow(h,f-1)));k={children:[],
+height:f,bbox:null,$:!1};var g=Math.ceil(g/h),h=g*Math.ceil(Math.sqrt(h)),l,m,n;for(q(b,c,e,h,this.Hb);c<=e;c+=h)for(m=Math.min(c+h-1,e),q(b,c,m,g,this.Ib),l=c;l<=m;l+=g)n=Math.min(l+g-1,m),k.children.push(this.cc(b,l,n,f-1));d(k,this.da);return k},cd:function(b,c,d,e){for(var f,g,h,l,m,n,q,r;;){e.push(c);if(c.$||e.length-1===d)break;q=r=Infinity;f=0;for(g=c.children.length;f<g;f++)h=c.children[f],m=k(h.bbox),n=h.bbox,n=(Math.max(n[2],b[2])-Math.min(n[0],b[0]))*(Math.max(n[3],b[3])-Math.min(n[1],
+b[1]))-m,n<r?(r=n,q=m<q?m:q,l=h):n===r&&m<q&&(q=m,l=h);c=l}return c},dc:function(b,c,d){var e=this.da;d=d?b.bbox:e(b);var e=[],g=this.cd(d,this.data,c,e);g.children.push(b);for(f(g.bbox,d);0<=c;)if(e[c].children.length>this.Bb)this.fd(e,c),c--;else break;this.$c(d,e,c)},fd:function(b,c){var e=b[c],f=e.children.length,g=this.ec;this.ad(e,g,f);f=this.bd(e,g,f);f={children:e.children.splice(f,e.children.length-f),height:e.height,bbox:null,$:!1};e.$&&(f.$=!0);d(e,this.da);d(f,this.da);c?b[c-1].children.push(f):
+this.fc(e,f)},fc:function(b,c){this.data={children:[b,c],height:b.height+1,bbox:null,$:!1};d(this.data,this.da)},bd:function(b,c,d){var f,g,h,l,m,n,q;m=n=Infinity;for(f=c;f<=d-c;f++)g=e(b,0,f,this.da),h=e(b,f,d,this.da),l=Math.max(0,Math.min(g[2],h[2])-Math.max(g[0],h[0]))*Math.max(0,Math.min(g[3],h[3])-Math.max(g[1],h[1])),g=k(g)+k(h),l<m?(m=l,q=f,n=g<n?g:n):l===m&&g<n&&(n=g,q=f);return q},ad:function(b,c,d){var e=b.$?this.Hb:g,f=b.$?this.Ib:h,k=this.bc(b,c,d,e);c=this.bc(b,c,d,f);k<c&&b.children.sort(e)},
+bc:function(b,c,d,g){b.children.sort(g);g=this.da;var h=e(b,0,c,g),k=e(b,d-c,d,g),m=l(h)+l(k),n,q;for(n=c;n<d-c;n++)q=b.children[n],f(h,b.$?g(q):q.bbox),m+=l(h);for(n=d-c-1;n>=c;n--)q=b.children[n],f(k,b.$?g(q):q.bbox),m+=l(k);return m},$c:function(b,c,d){for(;0<=d;d--)f(c[d].bbox,b)},dd:function(b){for(var c=b.length-1,e;0<=c;c--)0===b[c].children.length?0<c?(e=b[c-1].children,e.splice(e.indexOf(b[c]),1)):this.clear():d(b[c],this.da)},ed:function(b){var c=["return a"," - b",";"];this.Hb=new Function("a",
+"b",c.join(b[0]));this.Ib=new Function("a","b",c.join(b[1]));this.da=new Function("a","return [a"+b.join(", a")+"];")}};"undefined"!==typeof b?b.uc=c:"undefined"!==typeof self?self.a=c:window.a=c})();Lj=b.uc})();function Mj(b){this.a=Lj(b);this.b={}}p=Mj.prototype;p.Ca=function(b,c){var d=[b[0],b[1],b[2],b[3],c];this.a.Ca(d);this.b[I(c)]=d};p.load=function(b,c){for(var d=Array(c.length),e=0,f=c.length;e<f;e++){var g=b[e],h=c[e],g=[g[0],g[1],g[2],g[3],h];d[e]=g;this.b[I(h)]=g}this.a.load(d)};p.remove=function(b){b=I(b);var c=this.b[b];delete this.b[b];return null!==this.a.remove(c)};function Nj(b){return b.a.all().map(function(b){return b[4]})}
+function Oj(b,c){return b.a.search(c).map(function(b){return b[4]})}function Pj(b,c,d,e){return Qj(Oj(b,c),d,e)}function Qj(b,c,d){for(var e,f=0,g=b.length;f<g&&!(e=c.call(d,b[f]));f++);return e}p.clear=function(){this.a.clear();this.b={}};p.C=function(){return this.a.data.bbox};function Rj(b){b=b||{};De.call(this,{attributions:b.attributions,logo:b.logo,projection:void 0,state:"ready",wrapX:void 0!==b.wrapX?b.wrapX:!0});this.o=pa;this.D=b.format;this.u=b.url;void 0!==b.loader?this.o=b.loader:void 0!==this.u&&(this.o=Jj(this.u,this.D));this.G=void 0!==b.strategy?b.strategy:Kj;var c=void 0!==b.useSpatialIndex?b.useSpatialIndex:!0;this.R=c?new Mj:null;this.s=new Mj;this.ca={};this.b={};this.g={};this.h={};this.a=null;var d,e;b.features instanceof ld?(d=b.features,e=d.a):Array.isArray(b.features)&&
+(e=b.features);c||void 0!==d||(d=new ld(e));void 0!==e&&Sj(this,e);void 0!==d&&Tj(this,d)}M(Rj,De);p=Rj.prototype;p.Cb=function(b){var c=I(b).toString();if(Uj(this,c,b)){Vj(this,c,b);var d=b.M();d?(c=d.C(),this.R&&this.R.Ca(c,b)):this.ca[c]=b;S(this,new Wj("addfeature",b))}this.v()};function Vj(b,c,d){b.h[c]=[Q(d,"change",b.xc,b),Q(d,"propertychange",b.xc,b)]}function Uj(b,c,d){var e=!0,f=d.La();void 0!==f?f.toString()in b.b?e=!1:b.b[f.toString()]=d:b.g[c]=d;return e}p.Db=function(b){Sj(this,b);this.v()};
+function Sj(b,c){var d,e,f,g,h=[],k=[],l=[];e=0;for(f=c.length;e<f;e++)g=c[e],d=I(g).toString(),Uj(b,d,g)&&k.push(g);e=0;for(f=k.length;e<f;e++){g=k[e];d=I(g).toString();Vj(b,d,g);var m=g.M();m?(d=m.C(),h.push(d),l.push(g)):b.ca[d]=g}b.R&&b.R.load(h,l);e=0;for(f=k.length;e<f;e++)S(b,new Wj("addfeature",k[e]))}
+function Tj(b,c){var d=!1;Q(b,"addfeature",function(b){d||(d=!0,c.push(b.feature),d=!1)});Q(b,"removefeature",function(b){d||(d=!0,c.remove(b.feature),d=!1)});Q(c,"add",function(b){d||(b=b.element,d=!0,this.Cb(b),d=!1)},b);Q(c,"remove",function(b){if(!d){b=b.element;d=!0;var c=I(b).toString();c in this.ca?delete this.ca[c]:this.R&&this.R.remove(b);this.Yb(b);this.v();d=!1}},b);b.a=c}
+p.clear=function(b){if(b){for(var c in this.h)this.h[c].forEach(N);this.a||(this.h={},this.b={},this.g={})}else if(this.R){b=this.Yb;Qj(Nj(this.R),b,this);for(var d in this.ca)this.Yb(this.ca[d])}this.a&&this.a.clear();this.R&&this.R.clear();this.s.clear();this.ca={};S(this,new Wj("clear"));this.v()};p.od=function(b,c){if(this.R)return Qj(Nj(this.R),b,c);if(this.a)return nd(this.a,b,c)};function Xj(b,c,d,e){b.R?Pj(b.R,c,d,e):b.a&&nd(b.a,d,e)}
+p.pe=function(){var b;this.a?b=this.a.a:this.R&&(b=Nj(this.R),$a(this.ca)||Ka(b,Za(this.ca)));return b};p.C=function(){return this.R.C()};
+p.xc=function(b){b=b.target;var c=I(b).toString(),d=b.M();if(d)if(d=d.C(),c in this.ca)delete this.ca[c],this.R&&this.R.Ca(d,b);else{if(this.R){var e=this.R,f=I(b);Rb(e.b[f].slice(0,4),d)||(e.remove(b),e.Ca(d,b))}}else c in this.ca||(this.R&&this.R.remove(b),this.ca[c]=b);d=b.La();void 0!==d?(d=d.toString(),c in this.g?(delete this.g[c],this.b[d]=b):this.b[d]!==b&&(Yj(this,b),this.b[d]=b)):c in this.g||(Yj(this,b),this.g[c]=b);this.v();S(this,new Wj("changefeature",b))};
+function Zj(b,c,d,e){var f=b.s;c=b.G(c,d);var g,h;g=0;for(h=c.length;g<h;++g){var k=c[g];Pj(f,k,function(b){return Nb(b.extent,k)})||(b.o.call(b,k,d,e),f.Ca(k,{extent:k.slice()}))}}p.Yb=function(b){var c=I(b).toString();this.h[c].forEach(N);delete this.h[c];var d=b.La();void 0!==d?delete this.b[d.toString()]:delete this.g[c];S(this,new Wj("removefeature",b))};function Yj(b,c){for(var d in b.b)if(b.b[d]===c){delete b.b[d];break}}function Wj(b,c){R.call(this,b);this.feature=c}M(Wj,R);function ak(b){Xi.call(this,b);this.c=rf();this.b=null;this.j=Jb();this.h=zb()}M(ak,Xi);
+ak.prototype.g=function(b,c,d){var e=b.pixelRatio,f=b.viewState,g=f.center,h=f.projection,k=f.rotation,l=b.size,m=Math.round(e*l[0]/2),n=Math.round(e*l[1]/2),q=e/f.resolution,r=this.a,u=r.V(),w=u.kb(h),f=Zi(this,b,0);Yi(this,"precompose",d,b,f);var l=d,r=nb(r,"render"),y,z,D,t;if(k||r){l=this.c;y=l.canvas;D=u.mb(e)/e;var v=d.canvas.width*D;z=d.canvas.height*D;t=Math.round(Math.sqrt(v*v+z*z));y.width!=t?y.width=y.height=t:l.clearRect(0,0,t,t);y=(t-v)/2/D;z=(t-z)/2/D;q*=D;m=Math.round(D*(m+y));n=Math.round(D*
+(n+z))}v=l.globalAlpha;l.globalAlpha=c.opacity;var B=u.la(h),E=this.b,C;c=u.Mb(h)&&1==c.opacity;c||(E.reverse(),C=[]);for(var G=0,J=E.length;G<J;++G){var A=E[G],H=A.L,O=Je(B,H,this.j),P=H[0],L=Xb(Je(B,Re(B,g,P))),H=Math.round(Vb(O)*q),K=Math.round(Wb(O)*q),fa=Math.round((O[0]-L[0])*q/H)*H+m+Math.round((L[0]-g[0])*q),O=Math.round((L[1]-O[3])*q/K)*K+n+Math.round((g[1]-L[1])*q);if(!c){L=[fa,O,fa+H,O+K];l.save();for(var ra=0,Wl=C.length;ra<Wl;++ra){var Xa=C[ra];ac(L,Xa)&&(l.beginPath(),l.moveTo(L[0],
+L[1]),l.lineTo(L[0],L[3]),l.lineTo(L[2],L[3]),l.lineTo(L[2],L[1]),l.moveTo(Xa[0],Xa[1]),l.lineTo(Xa[2],Xa[1]),l.lineTo(Xa[2],Xa[3]),l.lineTo(Xa[0],Xa[3]),l.closePath(),l.clip())}C.push(L)}P=Xe(u,P,e,h);l.drawImage(A.T(),w,w,P[0],P[1],fa,O,H,K);c||l.restore()}r&&(e=y-m/D+m,h=z-n/D+n,g=Ig(this.h,t/2-e,t/2-h,q,-q,-k,-g[0]+e/q,-g[1]-h/q),Yi(this,"render",l,b,g));(k||r)&&d.drawImage(l.canvas,-Math.round(y),-Math.round(z),t/D,t/D);l.globalAlpha=v;Yi(this,"postcompose",d,b,f)};
+ak.prototype.i=function(b,c){function d(b){b=b.N();return 2==b||4==b||3==b&&!u}var e=b.pixelRatio,f=b.viewState,g=f.projection,h=this.a,k=h.V(),l=k.la(g),m=Qe(l,f.resolution),n=l.I(m),q=f.center;n==f.resolution?(q=Rg(q,n,b.size),f=Zb(q,n,f.rotation,b.size)):f=b.extent;void 0!==c.extent&&(f=$b(f,c.extent));if(f[2]<f[0]||f[3]<f[1])return!1;n=Me(l,f,n);q={};q[m]={};var r=this.l(k,g,q),u=ti(h),w=Jb(),y=new fd(0,0,0,0),z,D,t,v;for(t=n.a;t<=n.f;++t)for(v=n.b;v<=n.c;++v)z=Tg(k,m,t,v,e,g),!d(z)&&z.a&&(z=
+z.a),d(z)?q[m][z.L.toString()]=z:(D=Ie(l,z.L,r,y,w),D||(z=Le(l,z.L,y,w))&&r(m+1,z));r=Object.keys(q).map(Number);r.sort(Ha);var w=[],B,y=0;for(t=r.length;y<t;++y)for(B in z=r[y],v=q[z],v)z=v[B],2==z.N()&&w.push(z);this.b=w;Qg(b.usedTiles,k,m,n);Sg(b,k,l,e,g,f,m,h.get("preload"));Ng(b,k);Pg(b,k);return!0};function bk(b){Xi.call(this,b);this.b=!1;this.w=-1;this.u=NaN;this.j=Jb();this.c=this.o=null;this.h=rf()}M(bk,Xi);
+bk.prototype.g=function(b,c,d){var e=b.extent,f=b.pixelRatio,g=c.eb?b.skippedFeatureUids:{},h=b.viewState,k=h.projection,h=h.rotation,l=k.C(),m=this.a.V(),n=Zi(this,b,0);Yi(this,"precompose",d,b,n);var q=this.c;if(q&&!q.c()){var r;nb(this.a,"render")?(this.h.canvas.width=d.canvas.width,this.h.canvas.height=d.canvas.height,r=this.h):r=d;var u=r.globalAlpha;r.globalAlpha=c.opacity;c=b.size[0]*f;var w=b.size[1]*f;xi(r,-h,c/2,w/2);q.f(r,f,n,h,g);if(m.j&&k.a&&!Nb(l,e)){for(var k=e[0],m=Vb(l),y=0;k<l[0];)--y,
+n=m*y,n=Zi(this,b,n),q.f(r,f,n,h,g),k+=m;y=0;for(k=e[2];k>l[2];)++y,n=m*y,n=Zi(this,b,n),q.f(r,f,n,h,g),k-=m;n=Zi(this,b,0)}xi(r,h,c/2,w/2);r!=d&&(Yi(this,"render",r,b,n),d.drawImage(r.canvas,0,0));r.globalAlpha=u}Yi(this,"postcompose",d,b,n)};bk.prototype.fb=function(b,c,d,e){if(this.c){var f=this.a,g={};return this.c.g(b,c.viewState.resolution,c.viewState.rotation,{},function(b){var c=I(b).toString();if(!(c in g))return g[c]=!0,d.call(e,b,f)})}};bk.prototype.B=function(){Mg(this)};
+bk.prototype.i=function(b){function c(b){var c,e=b.c;e?c=e.call(b,m):(e=d.g)&&(c=e(b,m));if(c){if(c){e=!1;if(Array.isArray(c))for(var f=0,g=c.length;f<g;++f)e=vj(r,b,c[f],uj(m,n),this.B,this)||e;else e=vj(r,b,c,uj(m,n),this.B,this)||e;b=e}else b=!1;this.b=this.b||b}}var d=this.a,e=d.V();Og(b.attributions,e.i);Pg(b,e);var f=b.viewHints[0],g=b.viewHints[1],h=d.i,k=d.j;if(!this.b&&!h&&f||!k&&g)return!0;var l=b.extent,k=b.viewState,f=k.projection,m=k.resolution,n=b.pixelRatio,g=d.f,q=d.a,h=d.get("renderOrder");
+void 0===h&&(h=tj);l=Lb(l,q*m);q=k.projection.C();e.j&&k.projection.a&&!Nb(q,b.extent)&&(b=Math.max(Vb(l)/2,Vb(q)),l[0]=q[0]-b,l[2]=q[2]+b);if(!this.b&&this.u==m&&this.w==g&&this.o==h&&Nb(this.j,l))return!0;this.c=null;this.b=!1;var r=new pj(.5*m/n,l,m,d.a);Zj(e,l,m,f);if(h){var u=[];Xj(e,l,function(b){u.push(b)},this);u.sort(h);u.forEach(c,this)}else Xj(e,l,c,this);qj(r);this.u=m;this.w=g;this.o=h;this.j=l;this.c=r;return!0};function ck(b,c){var d=/\{z\}/g,e=/\{x\}/g,f=/\{y\}/g,g=/\{-y\}/g;return function(h){if(h)return b.replace(d,h[0].toString()).replace(e,h[1].toString()).replace(f,function(){return(-h[2]-1).toString()}).replace(g,function(){var b=c.a?c.a[h[0]]:null;return(b.c-b.b+1+h[2]).toString()})}}function dk(b,c){for(var d=b.length,e=Array(d),f=0;f<d;++f)e[f]=ck(b[f],c);return ek(e)}function ek(b){return 1===b.length?b[0]:function(c,d,e){if(c)return b[Ea((c[1]<<c[0])+c[2],b.length)](c,d,e)}}function fk(){};function gk(b){Ve.call(this,{attributions:b.attributions,cacheSize:b.cacheSize,extent:b.extent,logo:b.logo,opaque:b.opaque,projection:b.projection,state:b.state,tileGrid:b.tileGrid,tilePixelRatio:b.tilePixelRatio,wrapX:b.wrapX});this.tileLoadFunction=b.tileLoadFunction;this.tileUrlFunction=this.g?this.g.bind(this):fk;this.urls=null;if(b.urls){var c=b.urls;this.urls=c;hk(this,this.g?this.g.bind(this):dk(c,this.tileGrid))}else b.url&&this.s(b.url);b.tileUrlFunction&&hk(this,b.tileUrlFunction)}
+M(gk,Ve);gk.prototype.D=function(b){b=b.target;switch(b.N()){case 1:S(this,new Ze("tileloadstart",b));break;case 2:S(this,new Ze("tileloadend",b));break;case 3:S(this,new Ze("tileloaderror",b))}};function hk(b,c){b.a.clear();b.tileUrlFunction=c;b.v()}
+gk.prototype.s=function(b){var c=[],d=/\{(\d)-(\d)\}/.exec(b)||/\{([a-z])-([a-z])\}/.exec(b);if(d){var e=d[2].charCodeAt(0),f;for(f=d[1].charCodeAt(0);f<=e;++f)c.push(b.replace(d[0],String.fromCharCode(f)))}else c.push(b);b=this.urls=c;hk(this,this.g?this.g.bind(this):dk(b,this.tileGrid))};gk.prototype.Yc=function(b,c,d){b=this.lb(b,c,d);we(this.a,b)&&this.a.get(b)};function ik(b,c){Zg.call(this,0,c);this.c=rf();rf();this.a=this.c.canvas;this.a.style.width="100%";this.a.style.height="100%";this.a.className="ol-unselectable";fe(b,this.a,0);this.b=!0;this.g=zb()}M(ik,Zg);ik.prototype.Jb=function(b){return b instanceof X?new ak(b):b instanceof Y?new bk(b):null};
+function jk(b,c,d){var e=b.h,f=b.c;if(nb(e,c)){var g=d.extent,h=d.pixelRatio,k=d.viewState.rotation,l=d.pixelRatio,m=d.viewState,n=m.resolution;b=Ig(b.g,b.a.width/2,b.a.height/2,l/n,-l/n,-m.rotation,-m.center[0],-m.center[1]);g=new Mi(f,h,g,b,k);S(e,new Fg(c,e,g,d,f,null))}}ik.prototype.U=function(){return"canvas"};
+ik.prototype.sb=function(b){if(b){var c=this.c,d=b.pixelRatio,e=Math.round(b.size[0]*d),d=Math.round(b.size[1]*d);this.a.width!=e||this.a.height!=d?(this.a.width=e,this.a.height=d):c.clearRect(0,0,e,d);var f=b.viewState.rotation;$g(b);jk(this,"precompose",b);var g=b.layerStatesArray;Na(g);xi(c,f,e/2,d/2);var h=b.viewState.resolution,k,l,m,n;k=0;for(l=g.length;k<l;++k)n=g[k],m=n.layer,m=bh(this,m),Hg(n,h)&&"ready"==n.$b&&m.i(b,n)&&m.g(b,n,c);xi(c,-f,e/2,d/2);jk(this,"postcompose",b);this.b||(oe(this.a,
+!0),this.b=!0);ch(this,b);b.postRenderFunctions.push(ah)}else this.b&&(oe(this.a,!1),this.b=!1)};function kk(b,c){Lg.call(this,b);this.target=c}M(kk,Lg);kk.prototype.Gb=pa;kk.prototype.Kc=pa;function lk(b){var c=document.createElement("DIV");c.style.position="absolute";kk.call(this,b,c);this.c=!0;this.h=1;this.g=0;this.b={}}M(lk,kk);lk.prototype.Gb=function(){ee(this.target);this.g=0};
+lk.prototype.Lc=function(b,c){if(!c.visible)return this.c&&(oe(this.target,!1),this.c=!1),!0;var d=b.pixelRatio,e=b.viewState,f=e.projection,g=this.a,h=g.V(),k=h.la(f),l=h.kb(f),m=Qe(k,e.resolution),n=k.I(m),q=e.center,r;n==e.resolution?(q=Rg(q,n,b.size),r=Zb(q,n,e.rotation,b.size)):r=b.extent;void 0!==c.extent&&(r=$b(r,c.extent));var n=Me(k,r,n),u={};u[m]={};var w=this.l(h,f,u),y=ti(g),z=Jb(),D=new fd(0,0,0,0),t,v,B,E;for(B=n.a;B<=n.f;++B)for(E=n.b;E<=n.c;++E)t=Tg(h,m,B,E,d,f),v=t.N(),v=2==v||4==
+v||3==v&&!y,!v&&t.a&&(t=t.a),v=t.N(),2==v?u[m][t.L.toString()]=t:4==v||3==v&&!y||(v=Ie(k,t.L,w,D,z),v||(t=Le(k,t.L,D,z))&&w(m+1,t));var C;if(this.g!=h.f){for(C in this.b)y=this.b[+C],ge(y.target);this.b={};this.g=h.f}z=Object.keys(u).map(Number);z.sort(Ha);var w={},G;B=0;for(E=z.length;B<E;++B){C=z[B];C in this.b?y=this.b[C]:(y=Re(k,q,C),y=new mk(k,y),w[C]=!0,this.b[C]=y);C=u[C];for(G in C){t=y;v=C[G];var J=l,A=v.L,H=A[0],O=A[1],P=A[2],A=A.toString();if(!(A in t.b)){var H=tb(Pe(t.g,H),t.i),L=v.T(t),
+K=L.style;K.maxWidth="none";var fa=void 0,ra=void 0;0<J?(fa=document.createElement("DIV"),ra=fa.style,ra.overflow="hidden",ra.width=H[0]+"px",ra.height=H[1]+"px",K.position="absolute",K.left=-J+"px",K.top=-J+"px",K.width=H[0]+2*J+"px",K.height=H[1]+2*J+"px",fa.appendChild(L)):(K.width=H[0]+"px",K.height=H[1]+"px",fa=L,ra=K);ra.position="absolute";ra.left=(O-t.f[1])*H[0]+"px";ra.top=(t.f[2]-P)*H[1]+"px";t.a||(t.a=document.createDocumentFragment());t.a.appendChild(fa);t.b[A]=v}}y.a&&(y.target.appendChild(y.a),
+y.a=null)}l=Object.keys(this.b).map(Number);l.sort(Ha);B=zb();G=0;for(z=l.length;G<z;++G)if(C=l[G],y=this.b[C],C in u)if(t=y.I(),E=y.ka(),Ig(B,b.size[0]/2,b.size[1]/2,t/e.resolution,t/e.resolution,e.rotation,(E[0]-q[0])/t,(q[1]-E[1])/t),y.setTransform(B),C in w){for(--C;0<=C;--C)if(C in this.b){E=this.b[C].target;E.parentNode&&E.parentNode.insertBefore(y.target,E.nextSibling);break}0>C&&fe(this.target,y.target,0)}else{if(!b.viewHints[0]&&!b.viewHints[1]){v=Ke(y.g,r,y.f[0],D);C=[];t=E=void 0;for(t in y.b)E=
+y.b[t],J=E.L,gd(v,J[1],J[2])||C.push(E);J=v=void 0;v=0;for(J=C.length;v<J;++v)E=C[v],t=E.L.toString(),ge(E.T(y)),delete y.b[t]}}else ge(y.target),delete this.b[C];c.opacity!=this.h&&(this.h=this.target.style.opacity=c.opacity);c.visible&&!this.c&&(oe(this.target,!0),this.c=!0);Qg(b.usedTiles,h,m,n);Sg(b,h,k,d,f,r,m,g.get("preload"));Ng(b,h);Pg(b,h);return!0};
+function mk(b,c){this.target=document.createElement("DIV");this.target.style.position="absolute";this.target.style.width="100%";this.target.style.height="100%";this.g=b;this.f=c;this.h=bc(Je(b,c));this.l=b.I(c[0]);this.b={};this.a=null;this.c=Bb();this.i=[0,0]}mk.prototype.ka=function(){return this.h};mk.prototype.I=function(){return this.l};mk.prototype.setTransform=function(b){Jg(b,this.c)||(vf(this.target,b),Cb(this.c,b))};function nk(b){this.g=rf();var c=this.g.canvas;c.style.maxWidth="none";c.style.position="absolute";kk.call(this,b,c);this.b=!1;this.h=-1;this.o=NaN;this.i=Jb();this.c=this.j=null;this.w=zb();this.u=zb()}M(nk,kk);p=nk.prototype;p.Gb=function(){var b=this.g.canvas;b.width=b.width;this.h=0};
+p.Kc=function(b,c){var d=b.viewState,e=d.center,f=d.rotation,g=d.resolution,d=b.pixelRatio,h=b.size[0],k=b.size[1],l=h*d,m=k*d,e=Ig(this.w,d*h/2,d*k/2,d/g,-d/g,-f,-e[0],-e[1]),g=this.g;g.canvas.width=l;g.canvas.height=m;h=Ig(this.u,0,0,1/d,1/d,0,-(l-h)/2*d,-(m-k)/2*d);vf(g.canvas,h);ok(this,"precompose",b,e);(h=this.c)&&!h.c()&&(g.globalAlpha=c.opacity,h.f(g,d,e,f,c.eb?b.skippedFeatureUids:{}),ok(this,"render",b,e));ok(this,"postcompose",b,e)};
+function ok(b,c,d,e){var f=b.g;b=b.a;nb(b,c)&&(e=new Mi(f,d.pixelRatio,d.extent,e,d.viewState.rotation),S(b,new Fg(c,b,e,d,f,null)))}p.fb=function(b,c,d,e){if(this.c){var f=this.a,g={};return this.c.g(b,c.viewState.resolution,c.viewState.rotation,{},function(b){var c=I(b).toString();if(!(c in g))return g[c]=!0,d.call(e,b,f)})}};p.Mc=function(){Mg(this)};
+p.Lc=function(b){function c(b){var c,e=b.c;e?c=e.call(b,l):(e=d.g)&&(c=e(b,l));if(c){if(c){e=!1;if(Array.isArray(c))for(var f=0,g=c.length;f<g;++f)e=vj(n,b,c[f],uj(l,m),this.Mc,this)||e;else e=vj(n,b,c,uj(l,m),this.Mc,this)||e;b=e}else b=!1;this.b=this.b||b}}var d=this.a,e=d.V();Og(b.attributions,e.i);Pg(b,e);var f=b.viewHints[0],g=b.viewHints[1],h=d.i,k=d.j;if(!this.b&&!h&&f||!k&&g)return!0;var g=b.extent,h=b.viewState,f=h.projection,l=h.resolution,m=b.pixelRatio;b=d.f;k=d.a;h=d.get("renderOrder");
+void 0===h&&(h=tj);g=Lb(g,k*l);if(!this.b&&this.o==l&&this.h==b&&this.j==h&&Nb(this.i,g))return!0;this.c=null;this.b=!1;var n=new pj(.5*l/m,g,l,d.a);Zj(e,g,l,f);if(h){var q=[];Xj(e,g,function(b){q.push(b)},this);q.sort(h);q.forEach(c,this)}else Xj(e,g,c,this);qj(n);this.o=l;this.h=b;this.j=h;this.i=g;this.c=n;return!0};function pk(b,c){Zg.call(this,0,c);this.c=rf();var d=this.c.canvas;d.style.position="absolute";d.style.width="100%";d.style.height="100%";d.className="ol-unselectable";fe(b,d,0);this.g=zb();this.a=document.createElement("DIV");this.a.className="ol-unselectable";d=this.a.style;d.position="absolute";d.width="100%";d.height="100%";Q(this.a,"touchstart",lb);fe(b,this.a,0);this.b=!0}M(pk,Zg);pk.prototype.J=function(){ge(this.a);pk.X.J.call(this)};
+pk.prototype.Jb=function(b){if(b instanceof X)b=new lk(b);else if(b instanceof Y)b=new nk(b);else return null;return b};function qk(b,c,d){var e=b.h;if(nb(e,c)){var f=d.extent,g=d.pixelRatio,h=d.viewState,k=h.rotation,l=b.c,m=l.canvas;Ig(b.g,m.width/2,m.height/2,g/h.resolution,-g/h.resolution,-h.rotation,-h.center[0],-h.center[1]);b=new Mi(l,g,f,b.g,k);S(e,new Fg(c,e,b,d,l,null))}}pk.prototype.U=function(){return"dom"};
+pk.prototype.sb=function(b){if(b){var c=this.h;if(nb(c,"precompose")||nb(c,"postcompose")){var c=this.c.canvas,d=b.pixelRatio;c.width=b.size[0]*d;c.height=b.size[1]*d}qk(this,"precompose",b);c=b.layerStatesArray;Na(c);var d=b.viewState.resolution,e,f,g,h;e=0;for(f=c.length;e<f;++e)h=c[e],g=h.layer,g=bh(this,g),fe(this.a,g.target,e),Hg(h,d)&&"ready"==h.$b?g.Lc(b,h)&&g.Kc(b,h):g.Gb();var c=b.layerStates,k;for(k in this.f)k in c||(g=this.f[k],ge(g.target));this.b||(oe(this.a,!0),this.b=!0);$g(b);ch(this,
+b);b.postRenderFunctions.push(ah);qk(this,"postcompose",b)}else this.b&&(oe(this.a,!1),this.b=!1)};function rk(b){this.a=b}function sk(b){this.a=b}M(sk,rk);sk.prototype.U=function(){return 35632};function tk(b){this.a=b}M(tk,rk);tk.prototype.U=function(){return 35633};function uk(){this.a="precision mediump float;varying vec2 a;varying float b;uniform float k;uniform sampler2D l;void main(void){vec4 texColor=texture2D(l,a);gl_FragColor.rgb=texColor.rgb;float alpha=texColor.a*b*k;if(alpha==0.0){discard;}gl_FragColor.a=alpha;}"}M(uk,sk);aa(uk);
+function vk(){this.a="varying vec2 a;varying float b;attribute vec2 c;attribute vec2 d;attribute vec2 e;attribute float f;attribute float g;uniform mat4 h;uniform mat4 i;uniform mat4 j;void main(void){mat4 offsetMatrix=i;if(g==1.0){offsetMatrix=i*j;}vec4 offsets=offsetMatrix*vec4(e,0.,0.);gl_Position=h*vec4(c,0.,1.)+offsets;a=d;b=f;}"}M(vk,tk);aa(vk);
+function wk(b,c){this.i=b.getUniformLocation(c,"j");this.j=b.getUniformLocation(c,"i");this.h=b.getUniformLocation(c,"k");this.l=b.getUniformLocation(c,"h");this.a=b.getAttribLocation(c,"e");this.b=b.getAttribLocation(c,"f");this.c=b.getAttribLocation(c,"c");this.f=b.getAttribLocation(c,"g");this.g=b.getAttribLocation(c,"d")};function xk(b){this.a=void 0!==b?b:[]};function yk(b,c){this.A=b;this.a=c;this.b={};this.g={};this.c={};this.i=this.j=this.h=this.l=null;(this.f=0<=oa.indexOf("OES_element_index_uint"))&&c.getExtension("OES_element_index_uint");Q(this.A,"webglcontextlost",this.o,this);Q(this.A,"webglcontextrestored",this.s,this)}M(yk,ib);
+function zk(b,c,d){var e=b.a,f=d.a,g=String(I(d));if(g in b.b)e.bindBuffer(c,b.b[g].buffer);else{var h=e.createBuffer();e.bindBuffer(c,h);var k;34962==c?k=new Float32Array(f):34963==c&&(k=b.f?new Uint32Array(f):new Uint16Array(f));e.bufferData(c,k,35044);b.b[g]={Xe:d,buffer:h}}}function Ak(b,c){var d=b.a,e=String(I(c)),f=b.b[e];d.isContextLost()||d.deleteBuffer(f.buffer);delete b.b[e]}
+yk.prototype.J=function(){hb(this.A);var b=this.a;if(!b.isContextLost()){for(var c in this.b)b.deleteBuffer(this.b[c].buffer);for(c in this.c)b.deleteProgram(this.c[c]);for(c in this.g)b.deleteShader(this.g[c]);b.deleteFramebuffer(this.h);b.deleteRenderbuffer(this.i);b.deleteTexture(this.j)}};
+function Bk(b){if(!b.h){var c=b.a,d=c.createFramebuffer();c.bindFramebuffer(c.FRAMEBUFFER,d);var e=Ck(c,1,1),f=c.createRenderbuffer();c.bindRenderbuffer(c.RENDERBUFFER,f);c.renderbufferStorage(c.RENDERBUFFER,c.DEPTH_COMPONENT16,1,1);c.framebufferTexture2D(c.FRAMEBUFFER,c.COLOR_ATTACHMENT0,c.TEXTURE_2D,e,0);c.framebufferRenderbuffer(c.FRAMEBUFFER,c.DEPTH_ATTACHMENT,c.RENDERBUFFER,f);c.bindTexture(c.TEXTURE_2D,null);c.bindRenderbuffer(c.RENDERBUFFER,null);c.bindFramebuffer(c.FRAMEBUFFER,null);b.h=d;
+b.j=e;b.i=f}return b.h}function Dk(b,c){var d=String(I(c));if(d in b.g)return b.g[d];var e=b.a,f=e.createShader(c.U());e.shaderSource(f,c.a);e.compileShader(f);return b.g[d]=f}function Ek(b,c,d){var e=I(c)+"/"+I(d);if(e in b.c)return b.c[e];var f=b.a,g=f.createProgram();f.attachShader(g,Dk(b,c));f.attachShader(g,Dk(b,d));f.linkProgram(g);return b.c[e]=g}yk.prototype.o=function(){Ya(this.b);Ya(this.g);Ya(this.c);this.i=this.j=this.h=this.l=null};yk.prototype.s=function(){};
+function Fk(b,c){if(c==b.l)return!1;b.a.useProgram(c);b.l=c;return!0}function Gk(b,c,d){var e=b.createTexture();b.bindTexture(b.TEXTURE_2D,e);b.texParameteri(b.TEXTURE_2D,b.TEXTURE_MAG_FILTER,b.LINEAR);b.texParameteri(b.TEXTURE_2D,b.TEXTURE_MIN_FILTER,b.LINEAR);void 0!==c&&b.texParameteri(3553,10242,c);void 0!==d&&b.texParameteri(3553,10243,d);return e}function Ck(b,c,d){var e=Gk(b,void 0,void 0);b.texImage2D(b.TEXTURE_2D,0,b.RGBA,c,d,0,b.RGBA,b.UNSIGNED_BYTE,null);return e};function Hk(b,c){this.H=this.u=void 0;this.j=Yb(c);this.s=[];this.h=[];this.B=void 0;this.g=[];this.c=[];this.D=this.K=void 0;this.b=[];this.w=this.i=null;this.G=void 0;this.na=Bb();this.za=Bb();this.S=this.P=void 0;this.pa=Bb();this.ja=this.Y=this.ba=void 0;this.ea=[];this.l=[];this.a=[];this.o=null;this.f=[];this.A=[];this.aa=void 0}M(Hk,Eg);
+function Ik(b,c){var d=b.o,e=b.i,f=b.ea,g=b.l,h=c.a;return function(){if(!h.isContextLost()){var b,l;b=0;for(l=f.length;b<l;++b)h.deleteTexture(f[b]);b=0;for(l=g.length;b<l;++b)h.deleteTexture(g[b])}Ak(c,d);Ak(c,e)}}
+function Jk(b,c,d,e){var f=b.u,g=b.H,h=b.B,k=b.K,l=b.D,m=b.G,n=b.P,q=b.S,r=b.ba?1:0,u=b.Y,w=b.ja,y=b.aa,z=Math.cos(u),u=Math.sin(u),D=b.b.length,t=b.a.length,v,B,E,C,G,J;for(v=0;v<d;v+=e)G=c[v]-b.j[0],J=c[v+1]-b.j[1],B=t/8,E=-w*f,C=-w*(h-g),b.a[t++]=G,b.a[t++]=J,b.a[t++]=E*z-C*u,b.a[t++]=E*u+C*z,b.a[t++]=n/l,b.a[t++]=(q+h)/k,b.a[t++]=m,b.a[t++]=r,E=w*(y-f),C=-w*(h-g),b.a[t++]=G,b.a[t++]=J,b.a[t++]=E*z-C*u,b.a[t++]=E*u+C*z,b.a[t++]=(n+y)/l,b.a[t++]=(q+h)/k,b.a[t++]=m,b.a[t++]=r,E=w*(y-f),C=w*g,b.a[t++]=
+G,b.a[t++]=J,b.a[t++]=E*z-C*u,b.a[t++]=E*u+C*z,b.a[t++]=(n+y)/l,b.a[t++]=q/k,b.a[t++]=m,b.a[t++]=r,E=-w*f,C=w*g,b.a[t++]=G,b.a[t++]=J,b.a[t++]=E*z-C*u,b.a[t++]=E*u+C*z,b.a[t++]=n/l,b.a[t++]=q/k,b.a[t++]=m,b.a[t++]=r,b.b[D++]=B,b.b[D++]=B+1,b.b[D++]=B+2,b.b[D++]=B,b.b[D++]=B+2,b.b[D++]=B+3}Hk.prototype.Za=function(b,c){this.f.push(this.b.length);this.A.push(c);var d=b.a;Jk(this,d,d.length,b.b)};Hk.prototype.$a=function(b,c){this.f.push(this.b.length);this.A.push(c);var d=b.a;Jk(this,d,d.length,b.b)};
+function Kk(b,c){var d=c.a;b.s.push(b.b.length);b.h.push(b.b.length);b.o=new xk(b.a);zk(c,34962,b.o);b.i=new xk(b.b);zk(c,34963,b.i);var e={};Lk(b.ea,b.g,e,d);Lk(b.l,b.c,e,d);b.u=void 0;b.H=void 0;b.B=void 0;b.g=null;b.c=null;b.K=void 0;b.D=void 0;b.b=null;b.G=void 0;b.P=void 0;b.S=void 0;b.ba=void 0;b.Y=void 0;b.ja=void 0;b.a=null;b.aa=void 0}
+function Lk(b,c,d,e){var f,g,h,k,l=c.length;for(k=0;k<l;++k){g=c[k];h=I(g).toString();if(h in d)f=d[h];else{f=e;var m=Gk(f,33071,33071);f.texImage2D(f.TEXTURE_2D,0,f.RGBA,f.RGBA,f.UNSIGNED_BYTE,g);f=m;d[h]=f}b[k]=f}}
+function Mk(b,c,d,e,f,g,h,k,l,m,n){var q=c.a;zk(c,34962,b.o);zk(c,34963,b.i);var r=uk.ua(),u=vk.ua(),u=Ek(c,r,u);b.w?r=b.w:(r=new wk(q,u),b.w=r);Fk(c,u);q.enableVertexAttribArray(r.c);q.vertexAttribPointer(r.c,2,5126,!1,32,0);q.enableVertexAttribArray(r.a);q.vertexAttribPointer(r.a,2,5126,!1,32,8);q.enableVertexAttribArray(r.g);q.vertexAttribPointer(r.g,2,5126,!1,32,16);q.enableVertexAttribArray(r.b);q.vertexAttribPointer(r.b,1,5126,!1,32,24);q.enableVertexAttribArray(r.f);q.vertexAttribPointer(r.f,
+1,5126,!1,32,28);u=b.pa;Ig(u,0,0,2/(e*g[0]),2/(e*g[1]),-f,-(d[0]-b.j[0]),-(d[1]-b.j[1]));d=b.za;e=2/g[0];g=2/g[1];Db(d);d[0]=e;d[5]=g;d[10]=1;d[15]=1;g=b.na;Db(g);0!==f&&Hb(g,-f);q.uniformMatrix4fv(r.l,!1,u);q.uniformMatrix4fv(r.j,!1,d);q.uniformMatrix4fv(r.i,!1,g);q.uniform1f(r.h,h);var w;if(void 0===l)Nk(b,q,c,k,b.ea,b.s);else{if(m)a:{f=c.f?5125:5123;c=c.f?4:2;g=b.f.length-1;for(h=b.l.length-1;0<=h;--h)for(q.bindTexture(3553,b.l[h]),m=0<h?b.h[h-1]:0,u=b.h[h];0<=g&&b.f[g]>=m;){w=b.f[g];d=b.A[g];
+e=I(d).toString();if(void 0===k[e]&&d.M()&&(void 0===n||ac(n,d.M().C()))&&(q.clear(q.COLOR_BUFFER_BIT|q.DEPTH_BUFFER_BIT),q.drawElements(4,u-w,f,w*c),u=l(d))){b=u;break a}u=w;g--}b=void 0}else q.clear(q.COLOR_BUFFER_BIT|q.DEPTH_BUFFER_BIT),Nk(b,q,c,k,b.l,b.h),b=(b=l(null))?b:void 0;w=b}q.disableVertexAttribArray(r.c);q.disableVertexAttribArray(r.a);q.disableVertexAttribArray(r.g);q.disableVertexAttribArray(r.b);q.disableVertexAttribArray(r.f);return w}
+function Nk(b,c,d,e,f,g){var h=d.f?5125:5123;d=d.f?4:2;if($a(e)){var k;b=0;e=f.length;for(k=0;b<e;++b){c.bindTexture(3553,f[b]);var l=g[b];c.drawElements(4,l-k,h,k*d);k=l}}else{k=0;var m,l=0;for(m=f.length;l<m;++l){c.bindTexture(3553,f[l]);for(var n=0<l?g[l-1]:0,q=g[l],r=n;k<b.f.length&&b.f[k]<=q;){var u=I(b.A[k]).toString();void 0!==e[u]?(r!==n&&c.drawElements(4,n-r,h,r*d),n=r=k===b.f.length-1?q:b.f[k+1]):n=k===b.f.length-1?q:b.f[k+1];k++}r!==n&&c.drawElements(4,n-r,h,r*d)}}}
+Hk.prototype.Ha=function(b){var c=b.jb(),d=b.T(1),e=b.wc(),f=b.Xb(1),g=b.l,h=b.ka(),k=b.i,l=b.Z(),m=b.Qa();b=b.gb;var n;0===this.g.length?this.g.push(d):(n=this.g[this.g.length-1],I(n)!=I(d)&&(this.s.push(this.b.length),this.g.push(d)));0===this.c.length?this.c.push(f):(n=this.c[this.c.length-1],I(n)!=I(f)&&(this.h.push(this.b.length),this.c.push(f)));this.u=c[0];this.H=c[1];this.B=m[1];this.K=e[1];this.D=e[0];this.G=g;this.P=h[0];this.S=h[1];this.Y=l;this.ba=k;this.ja=b;this.aa=m[0]};
+function Ok(b,c,d){this.l=c;this.i=b;this.h=d;this.b={}}function Pk(b,c){var d=[],e;for(e in b.b)d.push(Ik(b.b[e],c));return function(){for(var b=d.length,c,e=0;e<b;e++)c=d[e].apply(this,arguments);return c}}function Qk(b,c){for(var d in b.b)Kk(b.b[d],c)}Ok.prototype.a=function(b,c){var d=this.b[c];void 0===d&&(d=new Rk[c](this.i,this.l),this.b[c]=d);return d};Ok.prototype.c=function(){return $a(this.b)};
+Ok.prototype.f=function(b,c,d,e,f,g,h,k){var l,m;g=0;for(l=$i.length;g<l;++g)m=this.b[$i[g]],void 0!==m&&Mk(m,b,c,d,e,f,h,k,void 0,!1)};function Sk(b,c,d,e,f,g,h,k,l,m){var n=Tk,q,r;for(q=$i.length-1;0<=q;--q)if(r=b.b[$i[q]],void 0!==r&&(r=Mk(r,c,d,e,f,n,g,h,k,l,m)))return r}
+Ok.prototype.g=function(b,c,d,e,f,g,h,k,l,m){var n=c.a;n.bindFramebuffer(n.FRAMEBUFFER,Bk(c));var q;void 0!==this.h&&(q=Lb(Qb(b),e*this.h));return Sk(this,c,b,e,f,k,l,function(b){var c=new Uint8Array(4);n.readPixels(0,0,1,1,n.RGBA,n.UNSIGNED_BYTE,c);if(0<c[3]&&(b=m(b)))return b},!0,q)};function Uk(b,c,d,e,f,g,h){var k=d.a;k.bindFramebuffer(k.FRAMEBUFFER,Bk(d));return void 0!==Sk(b,d,c,e,f,g,h,function(){var b=new Uint8Array(4);k.readPixels(0,0,1,1,k.RGBA,k.UNSIGNED_BYTE,b);return 0<b[3]},!1)}
+var Rk={Image:Hk},Tk=[1,1];function Vk(b,c,d,e,f,g){this.a=b;this.f=c;this.c=g;this.l=f;this.h=e;this.g=d;this.b=null}M(Vk,Eg);Vk.prototype.$a=function(b,c){var d=this.a,e=(new Ok(1,this.c)).a(0,"Image");e.Ha(this.b);e.$a(b,c);Kk(e,d);Mk(e,this.a,this.f,this.g,this.h,this.l,1,{},void 0,!1);Ik(e,d)()};Vk.prototype.Za=function(b,c){var d=this.a,e=(new Ok(1,this.c)).a(0,"Image");e.Ha(this.b);e.Za(b,c);Kk(e,d);Mk(e,this.a,this.f,this.g,this.h,this.l,1,{},void 0,!1);Ik(e,d)()};Vk.prototype.Ha=function(b){this.b=b};function Wk(){this.a="precision mediump float;varying vec2 a;uniform float f;uniform sampler2D g;void main(void){vec4 texColor=texture2D(g,a);gl_FragColor.rgb=texColor.rgb;gl_FragColor.a=texColor.a*f;}"}M(Wk,sk);aa(Wk);function Xk(){this.a="varying vec2 a;attribute vec2 b;attribute vec2 c;uniform mat4 d;uniform mat4 e;void main(void){gl_Position=e*vec4(b,0.,1.);a=(d*vec4(c,0.,1.)).st;}"}M(Xk,tk);aa(Xk);
+function Yk(b,c){this.f=b.getUniformLocation(c,"f");this.c=b.getUniformLocation(c,"e");this.h=b.getUniformLocation(c,"d");this.g=b.getUniformLocation(c,"g");this.a=b.getAttribLocation(c,"b");this.b=b.getAttribLocation(c,"c")};function Zk(b,c){Lg.call(this,c);this.c=b;this.G=new xk([-1,-1,0,0,1,-1,1,0,-1,1,0,1,1,1,1,1]);this.i=this.ya=null;this.j=void 0;this.D=zb();this.P=Bb();this.o=null}M(Zk,Lg);
+function $k(b,c,d){var e=b.c.c;if(void 0===b.j||b.j!=d){c.postRenderFunctions.push(na(function(b,c,d){b.isContextLost()||(b.deleteFramebuffer(c),b.deleteTexture(d))},e,b.i,b.ya));c=Ck(e,d,d);var f=e.createFramebuffer();e.bindFramebuffer(36160,f);e.framebufferTexture2D(36160,36064,3553,c,0);b.ya=c;b.i=f;b.j=d}else e.bindFramebuffer(36160,b.i)}
+Zk.prototype.Nc=function(b,c,d){al(this,"precompose",d,b);zk(d,34962,this.G);var e=d.a,f=Wk.ua(),g=Xk.ua(),f=Ek(d,f,g);this.o?g=this.o:this.o=g=new Yk(e,f);Fk(d,f)&&(e.enableVertexAttribArray(g.a),e.vertexAttribPointer(g.a,2,5126,!1,16,0),e.enableVertexAttribArray(g.b),e.vertexAttribPointer(g.b,2,5126,!1,16,8),e.uniform1i(g.g,0));e.uniformMatrix4fv(g.h,!1,this.D);e.uniformMatrix4fv(g.c,!1,this.P);e.uniform1f(g.f,c.opacity);e.bindTexture(3553,this.ya);e.drawArrays(5,0,4);al(this,"postcompose",d,b)};
+function al(b,c,d,e){b=b.a;if(nb(b,c)){var f=e.viewState;S(b,new Fg(c,b,new Vk(d,f.center,f.resolution,f.rotation,e.size,e.extent),e,null,d))}}Zk.prototype.s=function(){this.i=this.ya=null;this.j=void 0};function bl(){this.a="precision mediump float;varying vec2 a;uniform sampler2D e;void main(void){gl_FragColor=texture2D(e,a);}"}M(bl,sk);aa(bl);function cl(){this.a="varying vec2 a;attribute vec2 b;attribute vec2 c;uniform vec4 d;void main(void){gl_Position=vec4(b*d.xy+d.zw,0.,1.);a=c;}"}M(cl,tk);aa(cl);function dl(b,c){this.f=b.getUniformLocation(c,"e");this.c=b.getUniformLocation(c,"d");this.a=b.getAttribLocation(c,"b");this.b=b.getAttribLocation(c,"c")};function el(b,c){Zk.call(this,b,c);this.B=bl.ua();this.S=cl.ua();this.b=null;this.w=new xk([0,0,0,1,1,0,1,1,0,1,0,0,1,1,1,0]);this.u=this.g=null;this.h=-1;this.K=[0,0]}M(el,Zk);el.prototype.J=function(){Ak(this.c.g,this.w);el.X.J.call(this)};el.prototype.l=function(b,c,d){var e=this.c;return function(f,g){return We(b,c,f,g,function(b){var c=we(e.b,b.getKey());c&&(d[f]||(d[f]={}),d[f][b.L.toString()]=b);return c})}};el.prototype.s=function(){el.X.s.call(this);this.b=null};
+el.prototype.Oc=function(b,c,d){var e=this.c,f=d.a,g=b.viewState,h=g.projection,k=this.a,l=k.V(),m=l.la(h),n=Qe(m,g.resolution),q=m.I(n),r=Xe(l,n,b.pixelRatio,h),u=r[0]/tb(Pe(m,n),this.K)[0],w=q/u,y=l.kb(h),z=g.center,D;q==g.resolution?(z=Rg(z,q,b.size),D=Zb(z,q,g.rotation,b.size)):D=b.extent;q=Me(m,D,q);if(this.g&&hd(this.g,q)&&this.h==l.f)w=this.u;else{var t=[q.ha(),q.c-q.b+1],v=Math.pow(2,Math.ceil(Math.log(Math.max(t[0]*r[0],t[1]*r[1]))/Math.LN2)),t=w*v,B=m.ka(n),E=B[0]+q.a*r[0]*w,w=B[1]+q.b*
+r[1]*w,w=[E,w,E+t,w+t];$k(this,b,v);f.viewport(0,0,v,v);f.clearColor(0,0,0,0);f.clear(16384);f.disable(3042);v=Ek(d,this.B,this.S);Fk(d,v);this.b||(this.b=new dl(f,v));zk(d,34962,this.w);f.enableVertexAttribArray(this.b.a);f.vertexAttribPointer(this.b.a,2,5126,!1,16,0);f.enableVertexAttribArray(this.b.b);f.vertexAttribPointer(this.b.b,2,5126,!1,16,8);f.uniform1i(this.b.f,0);d={};d[n]={};var C=this.l(l,h,d),G=ti(k),v=!0,E=Jb(),J=new fd(0,0,0,0),A,H,O;for(H=q.a;H<=q.f;++H)for(O=q.b;O<=q.c;++O){B=Tg(l,
+n,H,O,u,h);if(void 0!==c.extent&&(A=Je(m,B.L,E),!ac(A,c.extent)))continue;A=B.N();A=2==A||4==A||3==A&&!G;!A&&B.a&&(B=B.a);A=B.N();if(2==A){if(we(e.b,B.getKey())){d[n][B.L.toString()]=B;continue}}else if(4==A||3==A&&!G)continue;v=!1;A=Ie(m,B.L,C,J,E);A||(B=Le(m,B.L,J,E))&&C(n+1,B)}c=Object.keys(d).map(Number);c.sort(Ha);for(var C=new Float32Array(4),P,L,K,G=0,J=c.length;G<J;++G)for(P in L=d[c[G]],L)B=L[P],A=Je(m,B.L,E),H=2*(A[2]-A[0])/t,O=2*(A[3]-A[1])/t,K=2*(A[0]-w[0])/t-1,A=2*(A[1]-w[1])/t-1,yb(C,
+H,O,K,A),f.uniform4fv(this.b.c,C),fl(e,B,r,y*u),f.drawArrays(5,0,4);v?(this.g=q,this.u=w,this.h=l.f):(this.u=this.g=null,this.h=-1,b.animate=!0)}Qg(b.usedTiles,l,n,q);var fa=e.i;Sg(b,l,m,u,h,D,n,k.get("preload"),function(b){var c;(c=2!=b.N()||we(e.b,b.getKey()))||(c=b.getKey()in fa.f);c||fa.c([b,Oe(m,b.L),m.I(b.L[0]),r,y*u])},this);Ng(b,l);Pg(b,l);f=this.D;Db(f);Fb(f,(z[0]-w[0])/(w[2]-w[0]),(z[1]-w[1])/(w[3]-w[1]));0!==g.rotation&&Hb(f,g.rotation);Gb(f,b.size[0]*g.resolution/(w[2]-w[0]),b.size[1]*
+g.resolution/(w[3]-w[1]));Fb(f,-.5,-.5);return!0};function gl(b,c){Zk.call(this,b,c);this.h=!1;this.K=-1;this.B=NaN;this.u=Jb();this.g=this.b=this.w=null}M(gl,Zk);p=gl.prototype;p.Nc=function(b,c,d){this.g=c;var e=b.viewState,f=this.b;f&&!f.c()&&f.f(d,e.center,e.resolution,e.rotation,b.size,b.pixelRatio,c.opacity,c.eb?b.skippedFeatureUids:{})};p.J=function(){var b=this.b;b&&(Pk(b,this.c.g)(),this.b=null);gl.X.J.call(this)};
+p.fb=function(b,c,d,e){if(this.b&&this.g){var f=c.viewState,g=this.a,h={};return this.b.g(b,this.c.g,f.center,f.resolution,f.rotation,c.size,c.pixelRatio,this.g.opacity,{},function(b){var c=I(b).toString();if(!(c in h))return h[c]=!0,d.call(e,b,g)})}};p.Ic=function(b,c){if(this.b&&this.g){var d=c.viewState;return Uk(this.b,b,this.c.g,d.resolution,d.rotation,this.g.opacity,c.skippedFeatureUids)}return!1};p.Pc=function(){Mg(this)};
+p.Oc=function(b,c,d){function e(b){var c,d=b.c;d?c=d.call(b,m):(d=f.g)&&(c=d(b,m));if(c){if(c){d=!1;if(Array.isArray(c))for(var e=0,g=c.length;e<g;++e)d=vj(r,b,c[e],uj(m,n),this.Pc,this)||d;else d=vj(r,b,c,uj(m,n),this.Pc,this)||d;b=d}else b=!1;this.h=this.h||b}}var f=this.a;c=f.V();Og(b.attributions,c.i);Pg(b,c);var g=b.viewHints[0],h=b.viewHints[1],k=f.i,l=f.j;if(!this.h&&!k&&g||!l&&h)return!0;var h=b.extent,k=b.viewState,g=k.projection,m=k.resolution,n=b.pixelRatio,k=f.f,q=f.a,l=f.get("renderOrder");
+void 0===l&&(l=tj);h=Lb(h,q*m);if(!this.h&&this.B==m&&this.K==k&&this.w==l&&Nb(this.u,h))return!0;this.b&&b.postRenderFunctions.push(Pk(this.b,d));this.h=!1;var r=new Ok(.5*m/n,h,f.a);Zj(c,h,m,g);if(l){var u=[];Xj(c,h,function(b){u.push(b)},this);u.sort(l);u.forEach(e,this)}else Xj(c,h,e,this);Qk(r,d);this.B=m;this.K=k;this.w=l;this.u=h;this.b=r;return!0};function hl(b,c){Zg.call(this,0,c);this.a=document.createElement("CANVAS");this.a.style.width="100%";this.a.style.height="100%";this.a.className="ol-unselectable";fe(b,this.a,0);this.s=this.u=0;this.H=rf();this.j=!0;this.c=xf(this.a,{antialias:!0,depth:!1,failIfMajorPerformanceCaveat:!0,preserveDrawingBuffer:!1,stencil:!0});this.g=new yk(this.a,this.c);Q(this.a,"webglcontextlost",this.ne,this);Q(this.a,"webglcontextrestored",this.oe,this);this.b=new ve;this.o=null;this.i=new dh(function(b){var c=
+b[1];b=b[2];var f=c[0]-this.o[0],c=c[1]-this.o[1];return 65536*Math.log(b)+Math.sqrt(f*f+c*c)/b}.bind(this),function(b){return b[0].getKey()});this.w=function(){if(0!==this.i.a.length){hh(this.i);var b=eh(this.i);fl(this,b[0],b[3],b[4])}return!1}.bind(this);this.l=0;il(this)}M(hl,Zg);
+function fl(b,c,d,e){var f=b.c,g=c.getKey();if(we(b.b,g))b=b.b.get(g),f.bindTexture(3553,b.ya),9729!=b.Cc&&(f.texParameteri(3553,10240,9729),b.Cc=9729),9729!=b.Dc&&(f.texParameteri(3553,10240,9729),b.Dc=9729);else{var h=f.createTexture();f.bindTexture(3553,h);if(0<e){var k=b.H.canvas,l=b.H;b.u!==d[0]||b.s!==d[1]?(k.width=d[0],k.height=d[1],b.u=d[0],b.s=d[1]):l.clearRect(0,0,d[0],d[1]);l.drawImage(c.T(),e,e,d[0],d[1],0,0,d[0],d[1]);f.texImage2D(3553,0,6408,6408,5121,k)}else f.texImage2D(3553,0,6408,
+6408,5121,c.T());f.texParameteri(3553,10240,9729);f.texParameteri(3553,10241,9729);f.texParameteri(3553,10242,33071);f.texParameteri(3553,10243,33071);b.b.set(g,{ya:h,Cc:9729,Dc:9729})}}p=hl.prototype;p.Jb=function(b){return b instanceof X?new el(this,b):b instanceof Y?new gl(this,b):null};function jl(b,c,d){var e=b.h;if(nb(e,c)){b=b.g;var f=d.viewState;S(e,new Fg(c,e,new Vk(b,f.center,f.resolution,f.rotation,d.size,d.extent),d,null,b))}}
+p.J=function(){var b=this.c;b.isContextLost()||xe(this.b,function(c){c&&b.deleteTexture(c.ya)});jb(this.g);hl.X.J.call(this)};p.md=function(b,c){for(var d=this.c,e;1024<this.b.f-this.l;){if(e=this.b.a.Ia)d.deleteTexture(e.ya);else if(+this.b.a.Rb==c.index)break;else--this.l;this.b.pop()}};p.U=function(){return"webgl"};p.ne=function(b){b.preventDefault();this.b.clear();this.l=0;b=this.f;for(var c in b)b[c].s()};p.oe=function(){il(this);this.h.render()};
+function il(b){b=b.c;b.activeTexture(33984);b.blendFuncSeparate(770,771,1,771);b.disable(2884);b.disable(2929);b.disable(3089);b.disable(2960)}
+p.sb=function(b){var c=this.g,d=this.c;if(d.isContextLost())return!1;if(!b)return this.j&&(oe(this.a,!1),this.j=!1),!1;this.o=b.focus;this.b.set((-b.index).toString(),null);++this.l;jl(this,"precompose",b);var e=[],f=b.layerStatesArray;Na(f);var g=b.viewState.resolution,h,k,l,m;h=0;for(k=f.length;h<k;++h)m=f[h],Hg(m,g)&&"ready"==m.$b&&(l=bh(this,m.layer),l.Oc(b,m,c)&&e.push(m));f=b.size[0]*b.pixelRatio;g=b.size[1]*b.pixelRatio;if(this.a.width!=f||this.a.height!=g)this.a.width=f,this.a.height=g;d.bindFramebuffer(36160,
+null);d.clearColor(0,0,0,0);d.clear(16384);d.enable(3042);d.viewport(0,0,this.a.width,this.a.height);h=0;for(k=e.length;h<k;++h)m=e[h],l=bh(this,m.layer),l.Nc(b,m,c);this.j||(oe(this.a,!0),this.j=!0);$g(b);1024<this.b.f-this.l&&b.postRenderFunctions.push(this.md.bind(this));0!==this.i.a.length&&(b.postRenderFunctions.push(this.w),b.animate=!0);jl(this,"postcompose",b);ch(this,b);b.postRenderFunctions.push(ah)};
+p.Wb=function(b,c,d,e,f,g){var h;if(this.c.isContextLost())return!1;var k=c.viewState,l=c.layerStatesArray,m;for(m=l.length-1;0<=m;--m){h=l[m];var n=h.layer;if(Hg(h,k.resolution)&&f.call(g,n)&&(h=bh(this,n).fb(b,c,d,e)))return h}};p.Jc=function(b,c,d,e){var f=!1;if(this.c.isContextLost())return!1;var g=c.viewState,h=c.layerStatesArray,k;for(k=h.length-1;0<=k;--k){var l=h[k],m=l.layer;if(Hg(l,g.resolution)&&d.call(e,m)&&(f=bh(this,m).Ic(b,c)))return!0}return f};var kl=["canvas","webgl","dom"];
+function Z(b){T.call(this);var c=ll(b);this.Ja=void 0!==b.loadTilesWhileAnimating?b.loadTilesWhileAnimating:!1;this.wb=void 0!==b.loadTilesWhileInteracting?b.loadTilesWhileInteracting:!1;this.yb=void 0!==b.pixelRatio?b.pixelRatio:Df;this.xb=c.logos;this.pa=function(){this.h=void 0;this.Ce.call(this,Date.now())}.bind(this);this.Aa=zb();this.zb=zb();this.Ba=0;this.b=null;this.ea=Jb();this.u=this.G=null;this.a=document.createElement("DIV");this.a.className="ol-viewport"+(Gf?" ol-touch":"");this.a.style.position=
+"relative";this.a.style.overflow="hidden";this.a.style.width="100%";this.a.style.height="100%";this.a.style.msTouchAction="none";this.a.style.touchAction="none";this.o=document.createElement("DIV");this.o.className="ol-overlaycontainer";this.a.appendChild(this.o);this.j=document.createElement("DIV");this.j.className="ol-overlaycontainer-stopevent";b=["click","dblclick","mousedown","touchstart","mspointerdown",yg,"mousewheel","wheel"];for(var d=0,e=b.length;d<e;++d)Q(this.j,b[d],kb);this.a.appendChild(this.j);
+this.Y=new qg(this);for(var f in Bg)Q(this.Y,Bg[f],this.yc,this);this.S=c.keyboardEventTarget;this.i=null;Q(this.a,"wheel",this.Oa,this);Q(this.a,"mousewheel",this.Oa,this);this.s=c.controls;this.g=c.interactions;this.w=c.overlays;this.Tc={};this.D=new c.De(this.a,this);this.P=null;this.B=[];this.aa=[];this.na=new ih(this.vd.bind(this),this.Qd.bind(this));this.Ab={};Q(this,rb("layergroup"),this.Ad,this);Q(this,rb("view"),this.Rd,this);Q(this,rb("size"),this.Nd,this);Q(this,rb("target"),this.Pd,this);
+this.l(c.values);nd(this.s,function(b){b.setMap(this)},this);Q(this.s,"add",function(b){b.element.setMap(this)},this);Q(this.s,"remove",function(b){b.element.setMap(null)},this);nd(this.g,function(b){b.setMap(this)},this);Q(this.g,"add",function(b){b.element.setMap(this)},this);Q(this.g,"remove",function(b){b.element.setMap(null)},this);nd(this.w,this.gc,this);Q(this.w,"add",function(b){this.gc(b.element)},this);Q(this.w,"remove",function(b){var c=b.element.La();void 0!==c&&delete this.Tc[c.toString()];
+b.element.setMap(null)},this)}M(Z,T);p=Z.prototype;p.hd=function(b){this.s.push(b)};p.jd=function(b){this.g.push(b)};p.kd=function(b){ml(this).get("layers").push(b)};p.ld=function(b){this.w.push(b)};p.gc=function(b){var c=b.La();void 0!==c&&(this.Tc[c.toString()]=b);b.setMap(this)};p.fa=function(b){this.render();Array.prototype.push.apply(this.B,arguments)};
+p.J=function(){jb(this.Y);jb(this.D);gb(this.a,"wheel",this.Oa,this);gb(this.a,"mousewheel",this.Oa,this);void 0!==this.c&&(x.removeEventListener("resize",this.c,!1),this.c=void 0);this.h&&(x.cancelAnimationFrame(this.h),this.h=void 0);this.set("target",null);Z.X.J.call(this)};p.pd=function(b,c,d,e,f){if(this.b)return b=this.ta(b),this.D.Wb(b,this.b,c,void 0!==d?d:null,void 0!==e?e:cc,void 0!==f?f:null)};
+p.Td=function(b,c,d){if(!this.b)return!1;b=this.ta(b);return this.D.Jc(b,this.b,void 0!==c?c:cc,void 0!==d?d:null)};p.vc=function(b){var c=this.a.getBoundingClientRect();b=b.changedTouches?b.changedTouches[0]:b;return[b.clientX-c.left,b.clientY-c.top]};p.Tb=function(){return this.get("target")};p.Na=function(){var b=this.Tb();return void 0!==b?Zd(b):null};p.ta=function(b){var c=this.b;return c?(b=b.slice(),Kg(c.pixelToCoordinateMatrix,b,b)):null};function ml(b){return b.get("layergroup")}
+function Eh(b,c){var d=b.b;if(d){var e=c.slice(0,2);return Kg(d.coordinateToPixelMatrix,e,e)}return null}p.Pa=function(){return this.get("size")};p.O=function(){return this.get("view")};p.vd=function(b,c,d,e){var f=this.b;if(!(f&&c in f.wantedTiles&&f.wantedTiles[c][b.L.toString()]))return Infinity;b=d[0]-f.focus[0];d=d[1]-f.focus[1];return 65536*Math.log(e)+Math.sqrt(b*b+d*d)/e};p.Oa=function(b,c){var d=new og(c||b.type,this,b);this.yc(d)};
+p.yc=function(b){if(this.b){this.P=b.coordinate;b.frameState=this.b;var c=this.g.a,d;if(!1!==S(this,b))for(d=c.length-1;0<=d;d--){var e=c[d];if(e.get("active")&&!e.handleEvent(b))break}}};
+p.Md=function(){var b=this.b,c=this.na;if(0!==c.a.length){var d=16,e=d;if(b){var f=b.viewHints;f[0]&&(d=this.Ja?8:0,e=2);f[1]&&(d=this.wb?8:0,e=2)}if(c.h<d){hh(c);for(var f=0,g,h;c.h<d&&f<e&&0<c.a.length;)g=eh(c)[0],h=g.getKey(),0!==g.N()||h in c.g||(c.g[h]=!0,++c.h,++f,g.load())}}c=this.aa;d=0;for(e=c.length;d<e;++d)c[d](this,b);c.length=0};p.Nd=function(){this.render()};
+p.Pd=function(){var b;this.Tb()&&(b=this.Na());if(this.i){for(var c=0,d=this.i.length;c<d;++c)N(this.i[c]);this.i=null}b?(b.appendChild(this.a),b=this.S?this.S:b,this.i=[Q(b,"keydown",this.Oa,this),Q(b,"keypress",this.Oa,this)],this.c||(this.c=this.vb.bind(this),x.addEventListener("resize",this.c,!1))):(ge(this.a),void 0!==this.c&&(x.removeEventListener("resize",this.c,!1),this.c=void 0));this.vb()};p.Qd=function(){this.render()};p.Sd=function(){this.render()};
+p.Rd=function(){this.G&&(N(this.G),this.G=null);var b=this.O();b&&(this.G=Q(b,"propertychange",this.Sd,this));this.render()};p.Bd=function(){this.render()};p.Cd=function(){this.render()};p.Ad=function(){this.u&&(this.u.forEach(N),this.u=null);var b=ml(this);b&&(this.u=[Q(b,"propertychange",this.Cd,this),Q(b,"change",this.Bd,this)]);this.render()};p.render=function(){void 0===this.h&&(this.h=x.requestAnimationFrame(this.pa))};p.ze=function(b){return this.g.remove(b)};p.Ae=function(b){return ml(this).get("layers").remove(b)};
+p.Ce=function(b){var c,d,e,f=this.Pa(),g=this.O(),h=null;if(c=void 0!==f&&0<f[0]&&0<f[1]&&g)c=!!g.ia()&&void 0!==g.I();if(c){var h=g.g.slice(),k=ml(this).Lb(),l={};c=0;for(d=k.length;c<d;++c)l[I(k[c].layer)]=k[c];e=g.N();h={animate:!1,attributions:{},coordinateToPixelMatrix:this.Aa,extent:null,focus:this.P?this.P:e.center,index:this.Ba++,layerStates:l,layerStatesArray:k,logos:Wa({},this.xb),pixelRatio:this.yb,pixelToCoordinateMatrix:this.zb,postRenderFunctions:[],size:f,skippedFeatureUids:this.Ab,
+tileQueue:this.na,time:b,usedTiles:{},viewState:e,viewHints:h,wantedTiles:{}}}if(h){b=this.B;c=f=0;for(d=b.length;c<d;++c)g=b[c],g(this,h)&&(b[f++]=g);b.length=f;h.extent=Zb(e.center,e.resolution,e.rotation,h.size)}this.b=h;this.D.sb(h);h&&(h.animate&&this.render(),Array.prototype.push.apply(this.aa,h.postRenderFunctions),0!==this.B.length||h.viewHints[0]||h.viewHints[1]||Rb(h.extent,this.ea)||(S(this,new te("moveend",this,h)),Mb(h.extent,this.ea)));S(this,new te("postrender",this,h));c=e=this.Md;
+this&&(c=ma(e,this));!ga(x.setImmediate)||x.Window&&x.Window.prototype&&!W("Edge")&&x.Window.prototype.setImmediate==x.setImmediate?(lf||(lf=mf()),lf(c)):x.setImmediate(c)};
+p.vb=function(){var b=this.Na();if(b){var c=Yd(b),d=Gd&&b.currentStyle,e;if(e=d)Wd(c),e=!0;if(e&&"auto"!=d.width&&"auto"!=d.height&&!d.boxSizing)c=pe(b,d.width,"width","pixelWidth"),b=pe(b,d.height,"height","pixelHeight"),b=new Vd(c,b);else{d=new Vd(b.offsetWidth,b.offsetHeight);if(Gd){c=qe(b,"paddingLeft");e=qe(b,"paddingRight");var f=qe(b,"paddingTop"),g=qe(b,"paddingBottom"),c=new je(f,e,g,c)}else c=ke(b,"paddingLeft"),e=ke(b,"paddingRight"),f=ke(b,"paddingTop"),g=ke(b,"paddingBottom"),c=new je(parseFloat(f),
+parseFloat(e),parseFloat(g),parseFloat(c));!Gd||9<=Number(Sd)?(e=ke(b,"borderLeftWidth"),f=ke(b,"borderRightWidth"),g=ke(b,"borderTopWidth"),b=ke(b,"borderBottomWidth"),b=new je(parseFloat(g),parseFloat(f),parseFloat(b),parseFloat(e))):(e=se(b,"borderLeft"),f=se(b,"borderRight"),g=se(b,"borderTop"),b=se(b,"borderBottom"),b=new je(g,f,b,e));b=new Vd(d.width-b.left-c.left-c.right-b.right,d.height-b.top-c.top-c.bottom-b.bottom)}this.set("size",[b.width,b.height])}else this.set("size",void 0)};
+function ll(b){var c=null;void 0!==b.keyboardEventTarget&&(c="string"===typeof b.keyboardEventTarget?document.getElementById(b.keyboardEventTarget):b.keyboardEventTarget);var d={},e={};if(void 0===b.logo||"boolean"===typeof b.logo&&b.logo)e["data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAMAAABEpIrGAAAAA3NCSVQICAjb4U/gAAAACXBIWXMAAAHGAAABxgEXwfpGAAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAAhNQTFRF////AP//AICAgP//AFVVQECA////K1VVSbbbYL/fJ05idsTYJFtbbcjbJllmZszWWMTOIFhoHlNiZszTa9DdUcHNHlNlV8XRIVdiasrUHlZjIVZjaMnVH1RlIFRkH1RkH1ZlasvYasvXVsPQH1VkacnVa8vWIVZjIFRjVMPQa8rXIVVkXsXRsNveIFVkIFZlIVVj3eDeh6GmbMvXH1ZkIFRka8rWbMvXIFVkIFVjIFVkbMvWH1VjbMvWIFVlbcvWIFVla8vVIFVkbMvWbMvVH1VkbMvWIFVlbcvWIFVkbcvVbMvWjNPbIFVkU8LPwMzNIFVkbczWIFVkbsvWbMvXIFVkRnB8bcvW2+TkW8XRIFVkIlZlJVloJlpoKlxrLl9tMmJwOWd0Omh1RXF8TneCT3iDUHiDU8LPVMLPVcLPVcPQVsPPVsPQV8PQWMTQWsTQW8TQXMXSXsXRX4SNX8bSYMfTYcfTYsfTY8jUZcfSZsnUaIqTacrVasrVa8jTa8rWbI2VbMvWbcvWdJObdcvUdszUd8vVeJaee87Yfc3WgJyjhqGnitDYjaarldPZnrK2oNbborW5o9bbo9fbpLa6q9ndrL3ArtndscDDutzfu8fJwN7gwt7gxc/QyuHhy+HizeHi0NfX0+Pj19zb1+Tj2uXk29/e3uLg3+Lh3+bl4uXj4ufl4+fl5Ofl5ufl5ujm5+jmySDnBAAAAFp0Uk5TAAECAgMEBAYHCA0NDg4UGRogIiMmKSssLzU7PkJJT1JTVFliY2hrdHZ3foSFhYeJjY2QkpugqbG1tre5w8zQ09XY3uXn6+zx8vT09vf4+Pj5+fr6/P39/f3+gz7SsAAAAVVJREFUOMtjYKA7EBDnwCPLrObS1BRiLoJLnte6CQy8FLHLCzs2QUG4FjZ5GbcmBDDjxJBXDWxCBrb8aM4zbkIDzpLYnAcE9VXlJSWlZRU13koIeW57mGx5XjoMZEUqwxWYQaQbSzLSkYGfKFSe0QMsX5WbjgY0YS4MBplemI4BdGBW+DQ11eZiymfqQuXZIjqwyadPNoSZ4L+0FVM6e+oGI6g8a9iKNT3o8kVzNkzRg5lgl7p4wyRUL9Yt2jAxVh6mQCogae6GmflI8p0r13VFWTHBQ0rWPW7ahgWVcPm+9cuLoyy4kCJDzCm6d8PSFoh0zvQNC5OjDJhQopPPJqph1doJBUD5tnkbZiUEqaCnB3bTqLTFG1bPn71kw4b+GFdpLElKIzRxxgYgWNYc5SCENVHKeUaltHdXx0dZ8uBI1hJ2UUDgq82CM2MwKeibqAvSO7MCABq0wXEPiqWEAAAAAElFTkSuQmCC"]=
+"http://openlayers.org/";else{var f=b.logo;"string"===typeof f?e[f]="":ha(f)&&(e[f.src]=f.href)}f=b.layers instanceof gi?b.layers:new gi({layers:b.layers});d.layergroup=f;d.target=b.target;d.view=void 0!==b.view?b.view:new V;var f=Zg,g;void 0!==b.renderer?Array.isArray(b.renderer)?g=b.renderer:"string"===typeof b.renderer&&(g=[b.renderer]):g=kl;var h,k;h=0;for(k=g.length;h<k;++h){var l=g[h];if("canvas"==l){if(Ff){f=ik;break}}else if("dom"==l){f=pk;break}else if("webgl"==l&&yf){f=hl;break}}var m;void 0!==
+b.controls?m=Array.isArray(b.controls)?new ld(b.controls.slice()):b.controls:m=ef();if(void 0!==b.interactions)g=Array.isArray(b.interactions)?new ld(b.interactions.slice()):b.interactions;else{g={};h=new ld;k=new jh;(void 0!==g.altShiftDragRotate?g.altShiftDragRotate:1)&&h.push(new Fh);(void 0!==g.doubleClickZoom?g.doubleClickZoom:1)&&h.push(new ph({delta:g.zoomDelta,duration:g.zoomDuration}));(void 0!==g.dragPan?g.dragPan:1)&&h.push(new Ah({kinetic:k}));(void 0!==g.pinchRotate?g.pinchRotate:1)&&
+h.push(new Zh);(void 0!==g.pinchZoom?g.pinchZoom:1)&&h.push(new ci({duration:g.zoomDuration}));if(void 0!==g.keyboard?g.keyboard:1)h.push(new Th),h.push(new Vh({delta:g.zoomDelta,duration:g.zoomDuration}));(void 0!==g.mouseWheelZoom?g.mouseWheelZoom:1)&&h.push(new Xh({duration:g.zoomDuration}));(void 0!==g.shiftDragZoom?g.shiftDragZoom:1)&&h.push(new Sh({duration:g.zoomDuration}));g=h}b=void 0!==b.overlays?Array.isArray(b.overlays)?new ld(b.overlays.slice()):b.overlays:new ld;return{controls:m,interactions:g,
+keyboardEventTarget:c,logos:e,overlays:b,De:f,values:d}}mc(li);mc(si);si.forEach(function(b){li.forEach(function(c){nc(b,c,mi);nc(c,b,ni)})});function nl(b){T.call(this);this.j=b.id;this.i=void 0!==b.insertFirst?b.insertFirst:!0;this.o=void 0!==b.stopEvent?b.stopEvent:!0;this.b=document.createElement("DIV");this.b.className="ol-overlay-container";this.b.style.position="absolute";this.autoPan=void 0!==b.autoPan?b.autoPan:!1;this.g=void 0!==b.autoPanAnimation?b.autoPanAnimation:{};this.h=void 0!==b.autoPanMargin?b.autoPanMargin:20;this.a={hb:"",pb:"",tb:"",ub:"",visible:!0};this.c=null;Q(this,rb("element"),this.yd,this);Q(this,rb("map"),
+this.Hd,this);Q(this,rb("offset"),this.Id,this);Q(this,rb("position"),this.Kd,this);Q(this,rb("positioning"),this.Ld,this);void 0!==b.element&&this.set("element",b.element);this.set("offset",void 0!==b.offset?b.offset:[0,0]);this.set("positioning",void 0!==b.positioning?b.positioning:"top-left");void 0!==b.position&&this.Ec(b.position)}M(nl,T);p=nl.prototype;p.La=function(){return this.j};p.yd=function(){ee(this.b);var b=this.get("element");b&&this.b.appendChild(b)};
+p.Hd=function(){this.c&&(ge(this.b),N(this.c),this.c=null);var b=this.get("map");b&&(this.c=Q(b,"postrender",this.render,this),pl(this),b=this.o?b.j:b.o,this.i?fe(b,this.b,0):b.appendChild(this.b))};p.render=function(){pl(this)};p.Id=function(){pl(this)};
+p.Kd=function(){pl(this);if(void 0!==this.get("position")&&this.autoPan){var b=this.get("map");if(void 0!==b&&b.Na()){var c=ql(b.Na(),b.Pa()),d=this.get("element"),e=d.offsetWidth,f=d.currentStyle||x.getComputedStyle(d),e=e+(parseInt(f.marginLeft,10)+parseInt(f.marginRight,10)),f=d.offsetHeight,g=d.currentStyle||x.getComputedStyle(d),f=f+(parseInt(g.marginTop,10)+parseInt(g.marginBottom,10)),h=ql(d,[e,f]),d=this.h;Nb(c,h)||(e=h[0]-c[0],f=c[2]-h[2],g=h[1]-c[1],h=c[3]-h[3],c=[0,0],0>e?c[0]=e-d:0>f&&
+(c[0]=Math.abs(f)+d),0>g?c[1]=g-d:0>h&&(c[1]=Math.abs(h)+d),0===c[0]&&0===c[1])||(d=b.O().ia(),e=Eh(b,d),c=[e[0]+c[0],e[1]+c[1]],this.g&&(this.g.source=d,b.fa(cd(this.g))),b.O().oa(b.ta(c)))}}};p.Ld=function(){pl(this)};p.setMap=function(b){this.set("map",b)};p.Ec=function(b){this.set("position",b)};
+function ql(b,c){var d=Yd(b),e=new Ud(0,0),f;f=d?Yd(d):document;var g;(g=!Gd||9<=Number(Sd))||(Wd(f),g=!0);b!=(g?f.documentElement:f.body)&&(f=le(b),g=Wd(d).a,d=g.scrollingElement?g.scrollingElement:Jd?g.body||g.documentElement:g.documentElement,g=g.parentWindow||g.defaultView,d=Gd&&Qd("10")&&g.pageYOffset!=d.scrollTop?new Ud(d.scrollLeft,d.scrollTop):new Ud(g.pageXOffset||d.scrollLeft,g.pageYOffset||d.scrollTop),e.x=f.left+d.x,e.y=f.top+d.y);return[e.x,e.y,e.x+c[0],e.y+c[1]]}
+function rl(b,c){b.a.visible!==c&&(oe(b.b,c),b.a.visible=c)}
+function pl(b){var c=b.get("map"),d=b.get("position");if(void 0!==c&&c.b&&void 0!==d){var d=Eh(c,d),e=c.Pa(),c=b.b.style,f=b.get("offset"),g=b.get("positioning"),h=f[0],f=f[1];if("bottom-right"==g||"center-right"==g||"top-right"==g)""!==b.a.pb&&(b.a.pb=c.left=""),h=Math.round(e[0]-d[0]-h)+"px",b.a.tb!=h&&(b.a.tb=c.right=h);else{""!==b.a.tb&&(b.a.tb=c.right="");if("bottom-center"==g||"center-center"==g||"top-center"==g)h-=me(b.b).width/2;h=Math.round(d[0]+h)+"px";b.a.pb!=h&&(b.a.pb=c.left=h)}if("bottom-left"==
+g||"bottom-center"==g||"bottom-right"==g)""!==b.a.ub&&(b.a.ub=c.top=""),d=Math.round(e[1]-d[1]-f)+"px",b.a.hb!=d&&(b.a.hb=c.bottom=d);else{""!==b.a.hb&&(b.a.hb=c.bottom="");if("center-left"==g||"center-center"==g||"center-right"==g)f-=me(b.b).height/2;d=Math.round(d[1]+f)+"px";b.a.ub!=d&&(b.a.ub=c.top=d)}rl(b,!0)}else rl(b,!1)};function sl(){this.defaultDataProjection=null}function tl(b,c,d){var e;d&&(e={dataProjection:d.dataProjection?d.dataProjection:b.f(Ij(c)),featureProjection:d.featureProjection});var f;e&&(f={featureProjection:e.featureProjection,dataProjection:e.dataProjection?e.dataProjection:b.defaultDataProjection,rightHanded:e.rightHanded},e.decimals&&(f.decimals=e.decimals));return f}
+function ul(b,c){var d=c?lc(c.featureProjection):null,e=c?lc(c.dataProjection):null;if(d&&e&&!wc(d,e))if(b instanceof zc)d=b.o(e,d);else{e=xc(e,d);d=[b[0],b[1],b[0],b[3],b[2],b[1],b[2],b[3]];e(d,d,2);var f=[d[0],d[2],d[4],d[6]],g=[d[1],d[3],d[5],d[7]],d=Math.min.apply(null,f),e=Math.min.apply(null,g),f=Math.max.apply(null,f),g=Math.max.apply(null,g),d=Ob(d,e,f,g,void 0)}else d=b;return d};function vl(){this.defaultDataProjection=null}M(vl,sl);function Ij(b){return ha(b)?b:"string"===typeof b?(b=JSON.parse(b))?b:null:null}vl.prototype.U=function(){return"json"};vl.prototype.g=function(b,c){return this.a(Ij(b),tl(this,b,c))};vl.prototype.b=function(b,c){return this.h(Ij(b),tl(this,b,c))};function wl(b,c,d,e,f){var g=NaN,h=NaN,k=(d-c)/e;if(0!==k)if(1==k)g=b[c],h=b[c+1];else if(2==k)g=.5*b[c]+.5*b[c+e],h=.5*b[c+1]+.5*b[c+e+1];else{var h=b[c],k=b[c+1],l=0,g=[0],m;for(m=c+e;m<d;m+=e){var n=b[m],q=b[m+1],l=l+Math.sqrt((n-h)*(n-h)+(q-k)*(q-k));g.push(l);h=n;k=q}d=.5*l;l=0;m=g.length;for(n=!1;l<m;)h=l+(m-l>>1),k=+Ha(g[h],d),0>k?l=h+1:(m=h,n=!k);h=n?l:~l;0>h?(d=(d-g[-h-2])/(g[-h-1]-g[-h-2]),c+=(-h-2)*e,g=b[c],g=g+d*(b[c+e]-g),h=b[c+1],h=h+d*(b[c+e+1]-h)):(g=b[c+h*e],h=b[c+h*e+1])}return f?
+(f[0]=g,f[1]=h,f):[g,h]};function xl(b,c){Bc.call(this);this.c=null;this.j=-1;this.W(b,c)}M(xl,Bc);p=xl.prototype;p.clone=function(){var b=new xl(null);U(b,this.g,this.a.slice());b.v();return b};p.ra=function(){return Hc(this.a,0,this.a.length,this.b)};function Ti(b){if(b.j!=b.f){var c;c=wl(b.a,0,b.a.length,b.b,b.c);b.c=c;b.j=b.f}return b.c}p.Ma=function(b){var c=[];c.length=Jc(this.a,0,this.a.length,this.b,b,c,0);b=new xl(null);U(b,"XY",c);b.v();return b};p.U=function(){return"LineString"};
+p.W=function(b,c){b?(Dc(this,c,b,1),this.a||(this.a=[]),this.a.length=Fc(this.a,0,b,this.b)):U(this,"XY",null);this.v()};function yl(b,c){Bc.call(this);this.c=[];this.W(b,c)}M(yl,Bc);p=yl.prototype;p.clone=function(){var b=new yl(null),c=this.c.slice();U(b,this.g,this.a.slice());b.c=c;b.v();return b};p.ra=function(){return Ic(this.a,0,this.c,this.b)};p.ab=function(){return this.c};function Ui(b){var c=[],d=b.a,e=0,f=b.c;b=b.b;var g,h;g=0;for(h=f.length;g<h;++g){var k=f[g],e=wl(d,e,k,b);Ka(c,e);e=k}return c}
+p.Ma=function(b){var c=[],d=[],e=this.a,f=this.c,g=this.b,h=0,k=0,l,m;l=0;for(m=f.length;l<m;++l){var n=f[l],k=Jc(e,h,n,g,b,c,k);d.push(k);h=n}c.length=k;b=new yl(null);U(b,"XY",c);b.c=d;b.v();return b};p.U=function(){return"MultiLineString"};p.W=function(b,c){if(b){Dc(this,c,b,2);this.a||(this.a=[]);var d=Gc(this.a,0,b,this.b,this.c);this.a.length=0===d.length?0:d[d.length-1]}else d=this.c,U(this,"XY",null),this.c=d;this.v()};function zl(b,c){Bc.call(this);this.W(b,c)}M(zl,Bc);zl.prototype.clone=function(){var b=new zl(null);U(b,this.g,this.a.slice());b.v();return b};zl.prototype.ra=function(){return Hc(this.a,0,this.a.length,this.b)};zl.prototype.U=function(){return"MultiPoint"};zl.prototype.W=function(b,c){b?(Dc(this,c,b,1),this.a||(this.a=[]),this.a.length=Fc(this.a,0,b,this.b)):U(this,"XY",null);this.v()};function Al(b,c){Bc.call(this);this.c=[];this.B=-1;this.D=null;this.G=-1;this.j=null;this.W(b,c)}M(Al,Bc);p=Al.prototype;p.clone=function(){for(var b=new Al(null),c=this.c.length,d=Array(c),e=0;e<c;++e)d[e]=this.c[e].slice();U(b,this.g,this.a.slice());b.c=d;b.v();return b};p.ra=function(b){var c;void 0!==b?(c=Vi(this).slice(),Sc(c,this.c,this.b,b)):c=this.a;b=c;c=this.c;var d=this.b,e=0,f=[],g=0,h,k;h=0;for(k=c.length;h<k;++h){var l=c[h];f[g++]=Ic(b,e,l,d,f[g]);e=l[l.length-1]}f.length=g;return f};
+function Wi(b){if(b.B!=b.f){var c=b.a,d=b.c,e=b.b,f=0,g=[],h,k,l=Jb();h=0;for(k=d.length;h<k;++h){var m=d[h],l=c,n=m[0],q=e,r=Pb(void 0),l=Tb(r,l,f,n,q);g.push((l[0]+l[2])/2,(l[1]+l[3])/2);f=m[m.length-1]}c=Vi(b);d=b.c;e=b.b;h=0;k=[];m=0;for(l=d.length;m<l;++m)f=d[m],k=Oc(c,h,f,e,g,2*m,k),h=f[f.length-1];b.D=k;b.B=b.f}return b.D}
+function Vi(b){if(b.G!=b.f){var c=b.a,d;a:{d=b.c;var e,f;e=0;for(f=d.length;e<f;++e)if(!Qc(c,d[e],b.b,void 0)){d=!1;break a}d=!0}d?b.j=c:(b.j=c.slice(),b.j.length=Sc(b.j,b.c,b.b));b.G=b.f}return b.j}p.Ma=function(b){var c=[],d=[],e=this.a,f=this.c,g=this.b;b=Math.sqrt(b);var h=0,k=0,l,m;l=0;for(m=f.length;l<m;++l){var n=f[l],q=[],k=Kc(e,h,n,g,b,c,k,q);d.push(q);h=n[n.length-1]}c.length=k;e=new Al(null);U(e,"XY",c);e.c=d;e.v();return e};p.U=function(){return"MultiPolygon"};
+p.W=function(b,c){if(b){Dc(this,c,b,3);this.a||(this.a=[]);var d=this.a,e=this.b,f=this.c,g=0,f=f?f:[],h=0,k,l;k=0;for(l=b.length;k<l;++k)g=Gc(d,g,b[k],e,f[h]),f[h++]=g,g=g[g.length-1];f.length=h;0===f.length?this.a.length=0:(d=f[f.length-1],this.a.length=0===d.length?0:d[d.length-1])}else d=this.c,U(this,"XY",null),this.c=d;this.v()};function Bl(b){b=b?b:{};this.defaultDataProjection=null;this.c=b.geometryName}M(Bl,vl);function Cl(b){var c="XY";!0===b.hasZ&&!0===b.hasM?c="XYZM":!0===b.hasZ?c="XYZ":!0===b.hasM&&(c="XYM");return c}
+var Dl={Point:function(b){return void 0!==b.m&&void 0!==b.z?new Mc([b.x,b.y,b.z,b.m],"XYZM"):void 0!==b.z?new Mc([b.x,b.y,b.z],"XYZ"):void 0!==b.m?new Mc([b.x,b.y,b.m],"XYM"):new Mc([b.x,b.y])},LineString:function(b){return new xl(b.paths[0],Cl(b))},Polygon:function(b){return new Tc(b.rings,Cl(b))},MultiPoint:function(b){return new zl(b.points,Cl(b))},MultiLineString:function(b){return new yl(b.paths,Cl(b))},MultiPolygon:function(b){return new Al(b.rings,Cl(b))}};
+Bl.prototype.a=function(b,c){var d;if(d=b.geometry){var e;if(ea(d.x)&&ea(d.y))e="Point";else if(d.points)e="MultiPoint";else if(d.paths)e=1===d.paths.length?"LineString":"MultiLineString";else if(d.rings){var f=d.rings,g=Cl(d),h=[];e=[];var k,l;k=0;for(l=f.length;k<l;++k){var m=Ja(f[k]);Pc(m,0,m.length,g.length)?h.push([f[k]]):e.push(f[k])}for(;e.length;){f=e.shift();g=!1;for(k=h.length-1;0<=k;k--)if(Nb((new Lc(h[k][0])).C(),(new Lc(f)).C())){h[k].push(f);g=!0;break}g||h.push([f.reverse()])}d=Wa({},
+d);1===h.length?(e="Polygon",d.rings=h[0]):(e="MultiPolygon",d.rings=h)}d=ul((0,Dl[e])(d),c)}else d=null;h=new Dj;this.c&&Fj(h,this.c);Ej(h,d);c&&c.Qb&&b.attributes[c.Qb]&&(h.g=b.attributes[c.Qb],h.v());b.attributes&&h.l(b.attributes);return h};Bl.prototype.h=function(b,c){var d=c?c:{};if(b.features){var e=[],f=b.features,g,h;d.Qb=b.objectIdFieldName;g=0;for(h=f.length;g<h;++g)e.push(this.a(f[g],d));return e}return[this.a(b,d)]};
+Bl.prototype.f=function(b){return b.spatialReference&&b.spatialReference.wkid?lc("EPSG:"+b.spatialReference.wkid):null};function El(b){zc.call(this);this.a=b?b:null;Fl(this)}M(El,zc);function Gl(b){var c,d;if(b.a)for(c=0,d=b.a.length;c<d;++c)gb(b.a[c],"change",b.v,b)}function Fl(b){var c,d;if(b.a)for(c=0,d=b.a.length;c<d;++c)Q(b.a[c],"change",b.v,b)}p=El.prototype;p.clone=function(){var b=new El(null),c=this.a,d=[],e,f;e=0;for(f=c.length;e<f;++e)d.push(c[e].clone());Gl(b);b.a=d;Fl(b);b.v();return b};p.ib=function(b){Pb(b);for(var c=this.a,d=0,e=c.length;d<e;++d)Sb(b,c[d].C());return b};
+p.Ob=function(b){this.s!=this.f&&(Ya(this.h),this.i=0,this.s=this.f);if(0>b||0!==this.i&&b<this.i)return this;var c=b.toString();if(this.h.hasOwnProperty(c))return this.h[c];var d=[],e=this.a,f=!1,g,h;g=0;for(h=e.length;g<h;++g){var k=e[g],l=k.Ob(b);d.push(l);l!==k&&(f=!0)}if(f)return b=new El(null),Gl(b),b.a=d,Fl(b),b.v(),this.h[c]=b;this.i=b;return this};p.U=function(){return"GeometryCollection"};p.rotate=function(b,c){for(var d=this.a,e=0,f=d.length;e<f;++e)d[e].rotate(b,c);this.v()};
+p.Eb=function(b){var c=this.a,d,e;d=0;for(e=c.length;d<e;++d)c[d].Eb(b);this.v()};p.J=function(){Gl(this);El.X.J.call(this)};function Hl(b){b=b?b:{};this.defaultDataProjection=null;this.defaultDataProjection=lc(b.defaultDataProjection?b.defaultDataProjection:"EPSG:4326");this.c=b.geometryName}M(Hl,vl);function Il(b,c){return b?ul((0,Jl[b.type])(b),c):null}
+var Jl={Point:function(b){return new Mc(b.coordinates)},LineString:function(b){return new xl(b.coordinates)},Polygon:function(b){return new Tc(b.coordinates)},MultiPoint:function(b){return new zl(b.coordinates)},MultiLineString:function(b){return new yl(b.coordinates)},MultiPolygon:function(b){return new Al(b.coordinates)},GeometryCollection:function(b,c){var d=b.geometries.map(function(b){return Il(b,c)});return new El(d)}};
+Hl.prototype.a=function(b,c){var d=Il(b.geometry,c),e=new Dj;this.c&&Fj(e,this.c);Ej(e,d);void 0!==b.id&&(e.g=b.id,e.v());b.properties&&e.l(b.properties);return e};Hl.prototype.h=function(b,c){if("Feature"==b.type)return[this.a(b,c)];if("FeatureCollection"==b.type){var d=[],e=b.features,f,g;f=0;for(g=e.length;f<g;++f)d.push(this.a(e[f],c));return d}return[]};Hl.prototype.f=function(b){return(b=b.crs)?"name"==b.type?lc(b.properties.name):"EPSG"==b.type?lc("EPSG:"+b.properties.code):null:this.defaultDataProjection};function Kl(b,c,d){if("array"==ba(c))for(var e=0;e<c.length;e++)Kl(b,String(c[e]),d);else null!=c&&d.push("&",b,""===c?"":"=",encodeURIComponent(String(c)))};function Ll(b,c,d){Bc.call(this);Ml(this,b,c?c:0,d)}M(Ll,Bc);Ll.prototype.clone=function(){var b=new Ll(null);U(b,this.g,this.a.slice());b.v();return b};Ll.prototype.ib=function(b){var c=this.a,d=c[this.b]-c[0];return Ob(c[0]-d,c[1]-d,c[0]+d,c[1]+d,b)};Ll.prototype.U=function(){return"Circle"};function Ml(b,c,d,e){if(c){Dc(b,e,c,0);b.a||(b.a=[]);e=b.a;c=Ec(e,c);e[c++]=e[0]+d;var f;d=1;for(f=b.b;d<f;++d)e[c++]=e[d];e.length=c}else U(b,"XY",null);b.v()};function Nl(b,c,d,e,f){Be.call(this,b,c);this.g=d;this.b=new Image;null!==e&&(this.b.crossOrigin=e);this.f={};this.c=null;this.h=f}M(Nl,Be);p=Nl.prototype;p.J=function(){1==this.state&&Ol(this);this.a&&jb(this.a);this.state=5;Ce(this);Nl.X.J.call(this)};p.T=function(b){if(void 0!==b){var c=I(b);if(c in this.f)return this.f[c];b=$a(this.f)?this.b:this.b.cloneNode(!1);return this.f[c]=b}return this.b};p.getKey=function(){return this.g};p.ie=function(){this.state=3;Ol(this);Ce(this)};
+p.je=function(){this.state=this.b.naturalWidth&&this.b.naturalHeight?2:4;Ol(this);Ce(this)};p.load=function(){0==this.state&&(this.state=1,Ce(this),this.c=[Q(this.b,"error",this.ie,this,!0),Q(this.b,"load",this.je,this,!0)],this.h(this,this.g))};function Ol(b){b.c.forEach(N);b.c=null};function Pl(b,c){R.call(this,b);this.feature=c}M(Pl,R);
+function Ql(b){xh.call(this,{handleDownEvent:Rl,handleEvent:Sl,handleUpEvent:Tl});this.P=null;this.o=!1;this.Ba=b.source?b.source:null;this.pa=b.features?b.features:null;this.Zc=b.snapTolerance?b.snapTolerance:12;this.D=b.type;this.b=Ul(this.D);this.na=b.minPoints?b.minPoints:this.b===Vl?3:2;this.ea=b.maxPoints?b.maxPoints:Infinity;var c=b.geometryFunction;if(!c)if("Circle"===this.D)c=function(b,c){var d=c?c:new Ll([NaN,NaN]),h=b[0],k=b[1],l=h[0]-k[0],h=h[1]-k[1];Ml(d,b[0],Math.sqrt(l*l+h*h));return d};
+else{var d,c=this.b;c===Xl?d=Mc:c===Yl?d=xl:c===Vl&&(d=Tc);c=function(b,c){var g=c;g?g.W(b):g=new d(b);return g}}this.u=c;this.B=this.i=this.a=this.j=this.g=this.h=null;this.gd=b.clickTolerance?b.clickTolerance*b.clickTolerance:36;this.Y=new Y({source:new Rj({useSpatialIndex:!1,wrapX:b.wrapX?b.wrapX:!1}),style:b.style?b.style:Zl()});this.Aa=b.geometryName;this.Ab=b.condition?b.condition:th;this.aa=b.freehandCondition?b.freehandCondition:uh;Q(this,rb("active"),this.Ja,this)}M(Ql,xh);
+function Zl(){var b=Li();return function(c){return b[c.M().U()]}}Ql.prototype.setMap=function(b){Ql.X.setMap.call(this,b);this.Ja()};function Sl(b){this.b!==Yl&&this.b!==Vl||!this.aa(b)||(this.o=!0);var c=!this.o;this.o&&b.type===Ag?($l(this,b),c=!1):b.type===zg?c=am(this,b):b.type===tg&&(c=!1);return yh.call(this,b)&&c}function Rl(b){return this.Ab(b)?(this.P=b.pixel,!0):this.o?(this.P=b.pixel,this.h||bm(this,b),!0):!1}
+function Tl(b){this.o=!1;var c=this.P,d=b.pixel,e=c[0]-d[0],c=c[1]-d[1],d=!0;e*e+c*c<=this.gd&&(am(this,b),this.h?this.b===cm?dm(this):em(this,b)?dm(this):$l(this,b):(bm(this,b),this.b===Xl&&dm(this)),d=!1);return d}
+function am(b,c){if(b.h){var d=c.coordinate,e=b.g.M(),f;b.b===Xl?f=b.a:b.b===Vl?(f=b.a[0],f=f[f.length-1],em(b,c)&&(d=b.h.slice())):(f=b.a,f=f[f.length-1]);f[0]=d[0];f[1]=d[1];b.u(b.a,e);b.j&&b.j.M().W(d);e instanceof Tc&&b.b!==Vl?(b.i||(b.i=new Dj(new xl(null))),0>=e.c.length?e=null:(d=new Lc(null),U(d,e.g,e.a.slice(0,e.c[0])),d.v(),e=d),d=b.i.M(),U(d,e.g,e.a),d.v()):b.B&&(d=b.i.M(),d.W(b.B));fm(b)}else e=c.coordinate.slice(),b.j?b.j.M().W(e):(b.j=new Dj(new Mc(e)),fm(b));return!0}
+function em(b,c){var d=!1;if(b.g){var e=!1,f=[b.h];b.b===Yl?e=b.a.length>b.na:b.b===Vl&&(e=b.a[0].length>b.na,f=[b.a[0][0],b.a[0][b.a[0].length-2]]);if(e)for(var e=c.map,g=0,h=f.length;g<h;g++){var k=f[g],l=Eh(e,k),m=c.pixel,d=m[0]-l[0],l=m[1]-l[1],m=b.o&&b.aa(c)?1:b.Zc;if(d=Math.sqrt(d*d+l*l)<=m){b.h=k;break}}}return d}
+function bm(b,c){var d=c.coordinate;b.h=d;b.b===Xl?b.a=d.slice():b.b===Vl?(b.a=[[d.slice(),d.slice()]],b.B=b.a[0]):(b.a=[d.slice(),d.slice()],b.b===cm&&(b.B=b.a));b.B&&(b.i=new Dj(new xl(b.B)));d=b.u(b.a);b.g=new Dj;b.Aa&&Fj(b.g,b.Aa);Ej(b.g,d);fm(b);S(b,new Pl("drawstart",b.g))}
+function $l(b,c){var d=c.coordinate,e=b.g.M(),f,g;if(b.b===Yl)b.h=d.slice(),g=b.a,g.push(d.slice()),f=g.length>b.ea,b.u(g,e);else if(b.b===Vl){g=b.a[0];g.push(d.slice());if(f=g.length>b.ea)b.h=g[0];b.u(b.a,e)}fm(b);f&&dm(b)}
+function dm(b){var c=gm(b),d=b.a,e=c.M();b.b===Yl?(d.pop(),b.u(d,e)):b.b===Vl&&(d[0].pop(),d[0].push(d[0][0]),b.u(d,e));"MultiPoint"===b.D?Ej(c,new zl([d])):"MultiLineString"===b.D?Ej(c,new yl([d])):"MultiPolygon"===b.D&&Ej(c,new Al([d]));S(b,new Pl("drawend",c));b.pa&&b.pa.push(c);b.Ba&&b.Ba.Cb(c)}function gm(b){b.h=null;var c=b.g;c&&(b.g=null,b.j=null,b.i=null,b.Y.V().clear(!0));return c}Ql.prototype.w=dc;
+function fm(b){var c=[];b.g&&c.push(b.g);b.i&&c.push(b.i);b.j&&c.push(b.j);b=b.Y.V();b.clear(!0);b.Db(c)}Ql.prototype.Ja=function(){var b=this.S,c=this.get("active");b&&c||gm(this);this.Y.setMap(c?b:null)};function Ul(b){var c;"Point"===b||"MultiPoint"===b?c=Xl:"LineString"===b||"MultiLineString"===b?c=Yl:"Polygon"===b||"MultiPolygon"===b?c=Vl:"Circle"===b&&(c=cm);return c}var Xl="Point",Yl="LineString",Vl="Polygon",cm="Circle";function hm(b,c,d,e,f,g,h,k,l,m,n){Be.call(this,f,0);this.u=void 0!==n?n:!1;this.s=h;this.o=k;this.c=null;this.f={};this.g=c;this.l=e;this.i=g?g:f;this.b=[];this.Sa=null;this.h=0;g=Je(e,this.i);k=this.l.C();f=this.g.C();g=k?$b(g,k):g;if(0===Ub(g))this.state=4;else if((k=b.C())&&(f?f=$b(f,k):f=k),k=e.I(this.i[0]),n=Yb(g),e=xc(d,b)(n,void 0,n.length),k=d.getPointResolution(k,n),n=pc(d),void 0!==n&&(k*=n),n=pc(b),void 0!==n&&(k/=n),e=b.getPointResolution(k,e)/k,isFinite(e)&&0<e&&(k/=e),e=k,!isFinite(e)||
+0>=e)this.state=4;else if(this.j=new Aj(b,d,g,f,e*(void 0!==m?m:.5)),0===this.j.c.length)this.state=4;else if(this.h=Qe(c,e),d=Cj(this.j),f&&(b.a?(d[1]=Ca(d[1],f[1],f[3]),d[3]=Ca(d[3],f[1],f[3])):d=$b(d,f)),Ub(d))if(b=Ke(c,d,this.h),100>b.ha()*(b.c-b.b+1)){for(c=b.a;c<=b.f;c++)for(d=b.b;d<=b.c;d++)(m=l(this.h,c,d,h))&&this.b.push(m);0===this.b.length&&(this.state=4)}else this.state=3;else this.state=4}M(hm,Be);hm.prototype.J=function(){1==this.state&&(this.Sa.forEach(N),this.Sa=null);hm.X.J.call(this)};
+hm.prototype.T=function(b){if(void 0!==b){var c=I(b);if(c in this.f)return this.f[c];b=$a(this.f)?this.c:this.c.cloneNode(!1);return this.f[c]=b}return this.c};
+hm.prototype.Uc=function(){var b=[];this.b.forEach(function(c){c&&2==c.N()&&b.push({extent:Je(this.g,c.L),image:c.T()})},this);this.b.length=0;if(0===b.length)this.state=3;else{var c=this.i[0],d=Pe(this.l,c),e=ea(d)?d:d[0],d=ea(d)?d:d[1],c=this.l.I(c),f=this.g.I(this.h),g=Je(this.l,this.i);this.c=zj(e,d,this.s,f,this.g.C(),c,g,this.j,b,this.o,this.u);this.state=2}Ce(this)};
+hm.prototype.load=function(){if(0==this.state){this.state=1;Ce(this);var b=0;this.Sa=[];this.b.forEach(function(c){var d=c.N();if(0==d||1==d){b++;var e;e=Q(c,"change",function(){var d=c.N();if(2==d||3==d||4==d)N(e),b--,0===b&&(this.Sa.forEach(N),this.Sa=null,this.Uc())},this);this.Sa.push(e)}},this);this.b.forEach(function(b){0==b.N()&&b.load()});0===b&&x.setTimeout(this.Uc.bind(this),0)}};function im(b){gk.call(this,{attributions:b.attributions,cacheSize:b.cacheSize,extent:b.extent,logo:b.logo,opaque:b.opaque,projection:b.projection,state:b.state,tileGrid:b.tileGrid,tileLoadFunction:b.tileLoadFunction?b.tileLoadFunction:jm,tilePixelRatio:b.tilePixelRatio,tileUrlFunction:b.tileUrlFunction,url:b.url,urls:b.urls,wrapX:b.wrapX});this.crossOrigin=void 0!==b.crossOrigin?b.crossOrigin:null;this.tileClass=void 0!==b.tileClass?b.tileClass:Nl;this.b={};this.o={};this.S=b.reprojectionErrorThreshold}
+M(im,gk);p=im.prototype;p.Qc=function(){if(ze(this.a))return!0;for(var b in this.b)if(ze(this.b[b]))return!0;return!1};p.Rc=function(b,c){var d=this.bb(b);Ae(this.a,this.a==d?c:{});for(var e in this.b){var f=this.b[e];Ae(f,f==d?c:{})}};p.kb=function(){return 0};p.Mb=function(b){return this.c&&b&&!wc(this.c,b)?!1:im.X.Mb.call(this,b)};p.la=function(b){var c=this.c;return!this.tileGrid||c&&!wc(c,b)?(c=I(b).toString(),c in this.o||(this.o[c]=Se(b)),this.o[c]):this.tileGrid};
+p.bb=function(b){var c=this.c;if(!c||wc(c,b))return this.a;b=I(b).toString();b in this.b||(this.b[b]=new ye);return this.b[b]};function km(b,c,d,e,f,g){c=[c,d,e];f=(d=Ye(b,c,g))?b.tileUrlFunction(d,f,g):void 0;f=new b.tileClass(c,void 0!==f?0:4,void 0!==f?f:"",b.crossOrigin,b.tileLoadFunction);f.key="";Q(f,"change",b.D,b);return f}
+function Tg(b,c,d,e,f,g){if(b.c&&g&&!wc(b.c,g)){var h=b.bb(g);d=[c,d,e];c=b.lb.apply(b,d);if(we(h,c))return h.get(c);var k=b.c;e=b.la(k);var l=b.la(g),m=Ye(b,d,g);b=new hm(k,e,g,l,d,m,b.mb(f),0,function(b,c,d,e){return lm(this,b,c,d,e,k)}.bind(b),b.S,!1);h.set(c,b);return b}return lm(b,c,d,e,f,g)}
+function lm(b,c,d,e,f,g){var h=null,k=b.lb(c,d,e);if(we(b.a,k)){if(h=b.a.get(k),""!=h.key){var l=h;h.a&&""==h.a.key?(h=h.a,2==l.N()&&(h.a=l)):(h=km(b,c,d,e,f,g),2==l.N()?h.a=l:l.a&&2==l.a.N()&&(h.a=l.a,l.a=null));h.a&&(h.a.a=null);b.a.replace(k,h)}}else h=km(b,c,d,e,f,g),b.a.set(k,h);return h}function jm(b,c){b.T().src=c};function mm(b){var c=void 0!==b.projection?b.projection:"EPSG:3857",d;if(void 0!==b.tileGrid)d=b.tileGrid;else{d={extent:Te(c),maxZoom:b.maxZoom,minZoom:b.minZoom,tileSize:b.tileSize};var e={};Wa(e,void 0!==d?d:{});void 0===e.extent&&(e.extent=lc("EPSG:3857").C());e.resolutions=Ue(e.extent,e.maxZoom,e.tileSize);delete e.maxZoom;d=new Fe(e)}im.call(this,{attributions:b.attributions,cacheSize:b.cacheSize,crossOrigin:b.crossOrigin,logo:b.logo,opaque:b.opaque,projection:c,reprojectionErrorThreshold:b.reprojectionErrorThreshold,
+tileGrid:d,tileLoadFunction:b.tileLoadFunction,tilePixelRatio:b.tilePixelRatio,tileUrlFunction:b.tileUrlFunction,url:b.url,urls:b.urls,wrapX:void 0!==b.wrapX?b.wrapX:!0})}M(mm,im);function nm(b){b=b||{};var c;void 0!==b.attributions?c=b.attributions:c=[om];mm.call(this,{attributions:c,cacheSize:b.cacheSize,crossOrigin:void 0!==b.crossOrigin?b.crossOrigin:"anonymous",opaque:void 0!==b.opaque?b.opaque:!0,maxZoom:void 0!==b.maxZoom?b.maxZoom:19,reprojectionErrorThreshold:b.reprojectionErrorThreshold,tileLoadFunction:b.tileLoadFunction,url:void 0!==b.url?b.url:"https://{a-c}.tile.openstreetmap.org/{z}/{x}/{y}.png",wrapX:b.wrapX})}M(nm,mm);var om=new jd({html:'&copy; <a href="http://www.openstreetmap.org/copyright">OpenStreetMap</a> contributors.'});function pm(b){b=b||{};var c=qm[b.layer];this.u=b.layer;mm.call(this,{attributions:c.attributions,cacheSize:b.cacheSize,crossOrigin:"anonymous",logo:"https://developer.mapquest.com/content/osm/mq_logo.png",maxZoom:c.maxZoom,reprojectionErrorThreshold:b.reprojectionErrorThreshold,opaque:c.opaque,tileLoadFunction:b.tileLoadFunction,url:void 0!==b.url?b.url:"https://otile{1-4}-s.mqcdn.com/tiles/1.0.0/"+this.u+"/{z}/{x}/{y}.jpg"})}M(pm,mm);
+var rm=new jd({html:'Tiles Courtesy of <a href="http://www.mapquest.com/">MapQuest</a>'}),qm={osm:{maxZoom:19,opaque:!0,attributions:[rm,om]},sat:{maxZoom:18,opaque:!0,attributions:[rm,new jd({html:"Portions Courtesy NASA/JPL-Caltech and U.S. Depart. of Agriculture, Farm Service Agency"})]},hyb:{maxZoom:18,opaque:!1,attributions:[rm,om]}};function sm(b){b=b||{};im.call(this,{attributions:b.attributions,cacheSize:b.cacheSize,crossOrigin:b.crossOrigin,logo:b.logo,projection:b.projection,reprojectionErrorThreshold:b.reprojectionErrorThreshold,tileGrid:b.tileGrid,tileLoadFunction:b.tileLoadFunction,url:b.url,urls:b.urls,wrapX:void 0!==b.wrapX?b.wrapX:!0});this.P=b.params||{};this.u=Jb()}M(sm,im);sm.prototype.mb=function(b){return b};
+sm.prototype.g=function(b,c,d){var e=this.tileGrid;e||(e=this.la(d));if(!(e.Nb().length<=b[0])){var f=Je(e,b,this.u),g=tb(Pe(e,b[0]),this.h);1!=c&&(g=sb(g,c,this.h));e={F:"image",FORMAT:"PNG32",TRANSPARENT:!0};Wa(e,this.P);var h;var k=this.urls;if(k){d=d.qa.split(":").pop();e.SIZE=g[0]+","+g[1];e.BBOX=f.join(",");e.BBOXSR=d;e.IMAGESR=d;e.DPI=Math.round(e.DPI?e.DPI*c:90*c);b=[(1==k.length?k[0]:k[Ea((b[1]<<b[0])+b[2],k.length)]).replace(/MapServer\/?$/,"MapServer/export").replace(/ImageServer\/?$/,
+"ImageServer/exportImage")];for(h in e)Kl(h,e[h],b);b[1]&&(h=b[0],c=h.indexOf("#"),0<=c&&(b.push(h.substr(c)),b[0]=h=h.substr(0,c)),c=h.indexOf("?"),0>c?b[1]="?":c==h.length-1&&(b[1]=void 0));h=b.join("")}else h=void 0;return h}};F("ol.format.GeoJSON",Hl,OPENLAYERS);Hl.prototype.readFeatures=Hl.prototype.b;Hl.prototype.readFeature=Hl.prototype.g;F("ol.format.EsriJSON",Bl,OPENLAYERS);Bl.prototype.readFeatures=Bl.prototype.b;Bl.prototype.readFeature=Bl.prototype.g;F("ol.style.Style",Fi,OPENLAYERS);F("ol.style.Circle",Ei,OPENLAYERS);F("ol.style.Fill",yi,OPENLAYERS);F("ol.style.Stroke",Di,OPENLAYERS);F("ol.style.Icon",Vg,OPENLAYERS);F("ol.View",V,OPENLAYERS);V.prototype.on=V.prototype.ba;V.prototype.getZoom=V.prototype.wd;
+V.prototype.setZoom=V.prototype.Ee;V.prototype.getCenter=V.prototype.ia;V.prototype.setCenter=V.prototype.oa;V.prototype.calculateExtent=V.prototype.jc;V.prototype.getProjection=V.prototype.le;V.prototype.fit=V.prototype.nd;F("ol.control.defaults",ef,OPENLAYERS);F("ol.layer.Tile",X,OPENLAYERS);X.prototype.getVisible=X.prototype.cb;X.prototype.setVisible=X.prototype.Gc;X.prototype.getZIndex=X.prototype.Vb;X.prototype.setZIndex=X.prototype.Hc;X.prototype.getOpacity=X.prototype.Ub;
+X.prototype.setOpacity=X.prototype.Fc;X.prototype.getSource=X.prototype.V;X.prototype.setSource=X.prototype.Zb;F("ol.layer.Vector",Y,OPENLAYERS);Y.prototype.getVisible=Y.prototype.cb;Y.prototype.setVisible=Y.prototype.Gc;Y.prototype.getSource=Y.prototype.V;Y.prototype.setStyle=Y.prototype.s;Y.prototype.getZIndex=Y.prototype.Vb;Y.prototype.setZIndex=Y.prototype.Hc;Y.prototype.getOpacity=Y.prototype.Ub;Y.prototype.setOpacity=Y.prototype.Fc;Y.prototype.getSource=Y.prototype.V;Y.prototype.setSource=Y.prototype.Zb;
+F("ol.source.OSM",nm,OPENLAYERS);nm.prototype.refresh=nm.prototype.wa;F("ol.source.MapQuest",pm,OPENLAYERS);pm.prototype.refresh=pm.prototype.wa;F("ol.source.XYZ",mm,OPENLAYERS);mm.prototype.refresh=mm.prototype.wa;mm.prototype.setUrl=mm.prototype.s;mm.prototype.refresh=mm.prototype.wa;F("ol.Map",Z,OPENLAYERS);Z.prototype.on=Z.prototype.ba;Z.prototype.getTarget=Z.prototype.Tb;Z.prototype.getTargetElement=Z.prototype.Na;Z.prototype.getView=Z.prototype.O;Z.prototype.addOverlay=Z.prototype.ld;
+Z.prototype.addLayer=Z.prototype.kd;Z.prototype.removeLayer=Z.prototype.Ae;Z.prototype.getEventPixel=Z.prototype.vc;Z.prototype.hasFeatureAtPixel=Z.prototype.Td;Z.prototype.getSize=Z.prototype.Pa;Z.prototype.updateSize=Z.prototype.vb;Z.prototype.forEachFeatureAtPixel=Z.prototype.pd;Z.prototype.addInteraction=Z.prototype.jd;Z.prototype.removeInteraction=Z.prototype.ze;Z.prototype.beforeRender=Z.prototype.fa;Z.prototype.addControl=Z.prototype.hd;F("ol.source.Vector",Rj,OPENLAYERS);
+Rj.prototype.getFeatures=Rj.prototype.pe;Rj.prototype.getExtent=Rj.prototype.C;Rj.prototype.refresh=Rj.prototype.wa;Rj.prototype.addFeatures=Rj.prototype.Db;Rj.prototype.addFeature=Rj.prototype.Cb;Rj.prototype.clear=Rj.prototype.clear;Rj.prototype.forEachFeature=Rj.prototype.od;Rj.prototype.refresh=Rj.prototype.wa;F("ol.source.TileArcGISRest",sm,OPENLAYERS);sm.prototype.refresh=sm.prototype.wa;F("ol.Overlay",nl,OPENLAYERS);nl.prototype.setPosition=nl.prototype.Ec;F("ol.Feature",Dj,OPENLAYERS);
+Dj.prototype.getProperties=Dj.prototype.za;Dj.prototype.setProperties=Dj.prototype.l;Dj.prototype.getGeometry=Dj.prototype.M;F("ol.geom.Point",Mc,OPENLAYERS);Mc.prototype.transform=Mc.prototype.o;Mc.prototype.getCoordinates=Mc.prototype.ra;Mc.prototype.getExtent=Mc.prototype.C;F("ol.geom.Polygon",Tc,OPENLAYERS);Tc.prototype.getCoordinates=Tc.prototype.ra;Tc.prototype.getExtent=Tc.prototype.C;Tc.prototype.transform=Tc.prototype.o;F("ol.geom.LineString",xl,OPENLAYERS);xl.prototype.getCoordinates=xl.prototype.ra;
+xl.prototype.getExtent=xl.prototype.C;xl.prototype.transform=xl.prototype.o;F("ol.proj.Projection",ic,OPENLAYERS);ic.prototype.getCode=ic.prototype.l;F("ol.interaction.Draw",Ql,OPENLAYERS);Ql.prototype.on=Ql.prototype.ba;F("ol.animation.pan",cd,OPENLAYERS);F("ol.control.FullScreen",kf,OPENLAYERS);
+  return OPENLAYERS.ol;
+}));
+
+
+},{}],319:[function(require,module,exports){
+'use strict';
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+var ol = require('./ol-build');
+
+exports.default = ol;
+
+},{"./ol-build":318}],320:[function(require,module,exports){
+'use strict';
+
+Object.defineProperty(exports, "__esModule", {
+    value: true
+});
+exports.undefinedOrNull = undefinedOrNull;
+exports.definedAndNotNull = definedAndNotNull;
+
+var _provide = require('./provide');
+
+var _provide2 = _interopRequireDefault(_provide);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+var nm = (0, _provide2.default)('util.checkDefined');
+
+/**
+ * check if the input is undefined or null
+ * @param {*} input - input pointer
+ * @returns {boolean} true undefined or null
+ */
+/**
+ * Created by gavorhes on 12/11/2015.
+ */
+function undefinedOrNull(input) {
+    "use strict";
+
+    return typeof input === 'undefined' || input === null;
+}
+
+nm.undefinedOrNull = undefinedOrNull;
+
+/**
+ * check if the input is defined and not null
+ * @param {*} input - input pointer
+ * @returns {boolean} true defined and not null
+ */
+function definedAndNotNull(input) {
+    "use strict";
+
+    return !undefinedOrNull(input);
+}
+
+nm.definedAndNotNull = definedAndNotNull;
+
+},{"./provide":323}],321:[function(require,module,exports){
+'use strict';
+
+Object.defineProperty(exports, "__esModule", {
+    value: true
+});
+exports.rgb2hex = rgb2hex;
+exports.hexAlphaToRgbOrRgba = hexAlphaToRgbOrRgba;
+exports.rgbToRgba = rgbToRgba;
+exports.makeBlueGreenRedGradient = makeBlueGreenRedGradient;
+exports.makeBlueGreenRedGradientZScore = makeBlueGreenRedGradientZScore;
+
+var _provide = require('./provide');
+
+var _provide2 = _interopRequireDefault(_provide);
+
+var _checkDefined = require('./checkDefined');
+
+var chk = _interopRequireWildcard(_checkDefined);
+
+function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+/**
+ * Created by gavorhes on 11/3/2015.
+ */
+
+var nm = (0, _provide2.default)('util.colors');
+
+/**
+ * helper function to convert to hex
+ * @param {number|string} x - the number to convert to hex
+ * @returns {string} number as hex
+ * @private
+ */
+function _hex(x) {
+    var hexDigits = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d", "e", "f"];
+
+    return isNaN(x) ? "00" : hexDigits[(x - x % 16) / 16] + hexDigits[x % 16];
+}
+
+/**
+ * converts an RGB string to hex
+ * @param {string} rgb - rgb color
+ * @returns {string} rbg as hex
+ */
+function rgb2hex(rgb) {
+    var rgb1 = rgb.match(/^rgb\((\d+),\s*(\d+),\s*(\d+)\)$/);
+
+    return ("#" + _hex(rgb1[1]) + _hex(rgb1[2]) + _hex(rgb1[3])).toUpperCase();
+}
+
+nm.rgb2hex = rgb2hex;
+
+/**
+ * Convert hex string to RGB or RGBA string
+ * @param {string} hexString - hex color string
+ * @param {number} [alphaVal=undefined] Alpha value
+ * @returns {string} - rgb or rgba color
+ */
+function hexAlphaToRgbOrRgba(hexString, alphaVal) {
+    hexString = hexString.charAt(0) == "#" ? hexString.substring(1, 7) : hexString;
+    var r = parseInt(hexString.substring(0, 2), 16).toString() || '0';
+    var g = parseInt(hexString.substring(2, 4), 16).toString() || '0';
+    var b = parseInt(hexString.substring(4, 6), 16).toString() || '0';
+    if (alphaVal) {
+        return 'rgba(' + r + ',' + g + ',' + b + ',' + alphaVal + ')';
+    } else {
+        return 'rgba(' + r + ',' + g + ',' + b + ')';
+    }
+}
+
+nm.hexAlphaToRgbOrRgba = hexAlphaToRgbOrRgba;
+
+/**
+ * adds alpha value to rgb string 'rgb(r, b, g)', returns 'rgba(r, g, b, a)'
+ * @param {string} rgb - rgb color
+ * @param {number} alpha - alpha value 0 to 1
+ * @returns {string} rgba color
+ */
+function rgbToRgba(rgb, alpha) {
+    var pieces = rgb.split(',');
+    pieces[0] = pieces[0].replace('rgb', 'rgba');
+    pieces[2] = pieces[2].replace(')', '');
+    pieces.push(' ' + alpha.toFixed(1) + ')');
+
+    return pieces.join(',');
+}
+
+nm.rgbToRgba = rgbToRgba;
+
+/**
+ * @typedef {function} colorLookupByNumber
+ * @param {number} num - the number to use to retrieve the color
+ * @returns {string} rgb color
+ */
+
+/**
+ * Make a blue green red gradient
+ * @param {number} minVal - minimum value
+ * @param {number} maxVal - maximum value
+ * @param {boolean} flipColors - if the colors should be flipped
+ * @returns {colorLookupByNumber} color lookup function
+ */
+function makeBlueGreenRedGradient(minVal, maxVal, flipColors) {
+
+    if (typeof flipColors != "boolean") {
+        flipColors = false;
+    }
+
+    return function (theVal) {
+        var r = void 0,
+            g = void 0,
+            b = void 0;
+        var ratio = void 0;
+
+        if (chk.undefinedOrNull(theVal)) {
+            return 'rgb(100,100,100)';
+        }
+
+        var percent = (theVal - minVal) / (maxVal - minVal);
+
+        if (flipColors == true) {
+            percent = 1 - percent;
+        }
+
+        if (percent >= 1) {
+            r = 255;
+            g = 0;
+            b = 0;
+        } else if (percent <= 0) {
+            r = 0;
+            g = 0;
+            b = 255;
+        } else if (percent < .25) {
+            // green up, blue constant
+            r = 0;
+            g = Math.floor(255 * percent / 0.25);
+            b = 255;
+        } else if (percent < 0.50) {
+            //blue down, green constant
+            ratio = (percent - 0.25) / 0.25;
+            r = 0;
+            g = 255;
+            b = 255 - Math.floor(255 * ratio);
+        } else if (percent < 0.75) {
+            // red up, green constant
+            ratio = (percent - 0.5) / 0.25;
+            r = Math.floor(255 * ratio);
+            g = 255;
+            b = 0;
+        } else {
+            // green down, red constant
+            ratio = (percent - 0.75) / 0.25;
+            r = 255;
+            g = 255 - Math.floor(255 * ratio);
+            b = 0;
+        }
+
+        r = r.toFixed();
+        g = g.toFixed();
+        b = b.toFixed();
+
+        return 'rgb(' + r + ',' + g + ',' + b + ')';
+    };
+}
+
+nm.makeBlueGreenRedGradient = makeBlueGreenRedGradient;
+
+/**
+ * Create a function that will return colors based on a gradient
+ * @param {number} median - median value
+ * @param {number} stdDev - standard deviation
+ * @param {boolean} flipColors - if the colors should be flipped
+ * @returns {colorLookupByNumber} color lookup function
+ */
+function makeBlueGreenRedGradientZScore(median, stdDev, flipColors) {
+
+    var grd = makeBlueGreenRedGradient(-2.5, 2.5, flipColors);
+
+    return function (theVal) {
+
+        var zScore = void 0;
+        if (theVal == null) {
+            zScore = null;
+        } else {
+            zScore = (theVal - median) / stdDev;
+        }
+
+        return grd(zScore);
+    };
+}
+
+nm.makeBlueGreenRedGradientZScore = makeBlueGreenRedGradientZScore;
+
+},{"./checkDefined":320,"./provide":323}],322:[function(require,module,exports){
+'use strict';
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+var _provide = require('./provide');
+
+var _provide2 = _interopRequireDefault(_provide);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+var nm = (0, _provide2.default)('util');
+
+/**
+ * guids are used to uniquely identify groups and features
+ * @returns {string} a new guid
+ */
+/**
+ * Created by gavorhes on 11/3/2015.
+ */
+
+function makeGuid() {
+  return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {
+    var r = Math.random() * 16 | 0,
+        v = c == 'x' ? r : r & 0x3 | 0x8;
+
+    return v.toString(16);
+  });
+}
+nm.makeGuid = makeGuid;
+exports.default = makeGuid;
+
+},{"./provide":323}],323:[function(require,module,exports){
+'use strict';
+
+Object.defineProperty(exports, "__esModule", {
+    value: true
+});
+/**
+ * Created by gavorhes on 12/10/2015.
+ */
+
+/**
+ * create a namespace on the gv object
+ * @param {string} namespace to create
+ * @returns {object} object representing the namespace
+ */
+function provide(namespace) {
+    "use strict";
+
+    if (typeof window.gv == 'undefined') {
+        window.gv = {};
+    }
+
+    var parts = namespace.split('.');
+    var nameSpace = window.gv;
+
+    for (var i = 0; i < parts.length; i++) {
+        var newObject = nameSpace[parts[i]];
+
+        if (typeof newObject == 'undefined') {
+            nameSpace[parts[i]] = {};
+        }
+
+        nameSpace = nameSpace[parts[i]];
+    }
+
+    return nameSpace;
+}
+
+provide('util');
+window.gv.util.provide = provide;
+
+exports.default = provide;
+
+},{}],324:[function(require,module,exports){
+'use strict';
+
+require('babel-polyfill');
+
+var _quickMap = require('../src/olHelpers/quickMap');
+
+var _quickMap2 = _interopRequireDefault(_quickMap);
+
+var _ItsLayerCollection = require('../src/collections/ItsLayerCollection');
+
+var _ItsLayerCollection2 = _interopRequireDefault(_ItsLayerCollection);
+
+var _LayerLegend = require('../src/collections/LayerLegend');
+
+var _LayerLegend2 = _interopRequireDefault(_LayerLegend);
+
+var _LayerItsInventory = require('../src/layers/LayerItsInventory');
+
+var _LayerItsInventory2 = _interopRequireDefault(_LayerItsInventory);
+
+var _LayerBaseVectorGeoJson = require('../src/layers/LayerBaseVectorGeoJson');
+
+var _LayerBaseVectorGeoJson2 = _interopRequireDefault(_LayerBaseVectorGeoJson);
+
+var _LayerEsriMapServer = require('../src/layers/LayerEsriMapServer');
+
+var _LayerEsriMapServer2 = _interopRequireDefault(_LayerEsriMapServer);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+var map = (0, _quickMap2.default)({ fullScreen: true });
+
+//
+// let inventLyr = new LayerItsInventory({name: 'Camera', itsType: 'cctv', minZoom: 4, itsIcon: 'cctv.png'});
+// map.addLayer(inventLyr.olLayer);
+//
+// inventLyr.visible = true;
+//
+// let newLayer = new LayerBaseVectorGeoJson('', {});
+//
+//
+//         let metamanagerSegments = new LayerEsriMapServer(
+//             'http://transportal.cee.wisc.edu/applications/arcgis2/rest/services/MetaManager/MM_All_Segments/MapServer',
+//             {
+//                 minZoom: 3,
+//                 visible: true,
+//                 name: 'Metamanager Segments',
+//                 opacity: 0.6
+//             });
+//
+// // console.log(metamanagerSegments.visible);
+//
+// map.addLayer(metamanagerSegments.olLayer);
+
+/**
+ * Created by gavorhes on 5/19/2016.
+ */
+
+var itsLayerCollection = new _ItsLayerCollection2.default(map);
+
+var _iteratorNormalCompletion = true;
+var _didIteratorError = false;
+var _iteratorError = undefined;
+
+try {
+    for (var _iterator = itsLayerCollection.layers[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
+        var l = _step.value;
+
+        console.log(l.visible);
+        console.log(l);
+    }
+} catch (err) {
+    _didIteratorError = true;
+    _iteratorError = err;
+} finally {
+    try {
+        if (!_iteratorNormalCompletion && _iterator.return) {
+            _iterator.return();
+        }
+    } finally {
+        if (_didIteratorError) {
+            throw _iteratorError;
+        }
+    }
+}
+
+var layerArray = [{
+    groupName: 'ITS Inventory Layers',
+    collapse: false,
+    addCheck: true,
+    items: itsLayerCollection.layers
+}];
+
+var legend = new _LayerLegend2.default(layerArray, 'legend-container', {});
+
+},{"../src/collections/ItsLayerCollection":300,"../src/collections/LayerLegend":301,"../src/layers/LayerBaseVectorGeoJson":305,"../src/layers/LayerEsriMapServer":306,"../src/layers/LayerItsInventory":307,"../src/olHelpers/quickMap":315,"babel-polyfill":1}]},{},[324])
+
+
+//# sourceMappingURL=legend-test.js.map
diff --git a/test-build/legend-test.js.map b/test-build/legend-test.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..a0478766578ba5fae5caf45df131c631cd8b9072
--- /dev/null
+++ b/test-build/legend-test.js.map
@@ -0,0 +1 @@
+{"version":3,"sources":["node_modules/browserify/node_modules/browser-pack/_prelude.js","node_modules/babel-polyfill/lib/index.js","node_modules/babel-polyfill/node_modules/babel-regenerator-runtime/runtime.js","node_modules/babel-polyfill/node_modules/core-js/fn/regexp/escape.js","node_modules/babel-polyfill/node_modules/core-js/modules/_a-function.js","node_modules/babel-polyfill/node_modules/core-js/modules/_a-number-value.js","node_modules/babel-polyfill/node_modules/core-js/modules/_add-to-unscopables.js","node_modules/babel-polyfill/node_modules/core-js/modules/_an-instance.js","node_modules/babel-polyfill/node_modules/core-js/modules/_an-object.js","node_modules/babel-polyfill/node_modules/core-js/modules/_array-copy-within.js","node_modules/babel-polyfill/node_modules/core-js/modules/_array-fill.js","node_modules/babel-polyfill/node_modules/core-js/modules/_array-from-iterable.js","node_modules/babel-polyfill/node_modules/core-js/modules/_array-includes.js","node_modules/babel-polyfill/node_modules/core-js/modules/_array-methods.js","node_modules/babel-polyfill/node_modules/core-js/modules/_array-reduce.js","node_modules/babel-polyfill/node_modules/core-js/modules/_array-species-constructor.js","node_modules/babel-polyfill/node_modules/core-js/modules/_array-species-create.js","node_modules/babel-polyfill/node_modules/core-js/modules/_bind.js","node_modules/babel-polyfill/node_modules/core-js/modules/_classof.js","node_modules/babel-polyfill/node_modules/core-js/modules/_cof.js","node_modules/babel-polyfill/node_modules/core-js/modules/_collection-strong.js","node_modules/babel-polyfill/node_modules/core-js/modules/_collection-to-json.js","node_modules/babel-polyfill/node_modules/core-js/modules/_collection-weak.js","node_modules/babel-polyfill/node_modules/core-js/modules/_collection.js","node_modules/babel-polyfill/node_modules/core-js/modules/_core.js","node_modules/babel-polyfill/node_modules/core-js/modules/_create-property.js","node_modules/babel-polyfill/node_modules/core-js/modules/_ctx.js","node_modules/babel-polyfill/node_modules/core-js/modules/_date-to-primitive.js","node_modules/babel-polyfill/node_modules/core-js/modules/_defined.js","node_modules/babel-polyfill/node_modules/core-js/modules/_descriptors.js","node_modules/babel-polyfill/node_modules/core-js/modules/_dom-create.js","node_modules/babel-polyfill/node_modules/core-js/modules/_enum-bug-keys.js","node_modules/babel-polyfill/node_modules/core-js/modules/_enum-keys.js","node_modules/babel-polyfill/node_modules/core-js/modules/_export.js","node_modules/babel-polyfill/node_modules/core-js/modules/_fails-is-regexp.js","node_modules/babel-polyfill/node_modules/core-js/modules/_fails.js","node_modules/babel-polyfill/node_modules/core-js/modules/_fix-re-wks.js","node_modules/babel-polyfill/node_modules/core-js/modules/_flags.js","node_modules/babel-polyfill/node_modules/core-js/modules/_for-of.js","node_modules/babel-polyfill/node_modules/core-js/modules/_global.js","node_modules/babel-polyfill/node_modules/core-js/modules/_has.js","node_modules/babel-polyfill/node_modules/core-js/modules/_hide.js","node_modules/babel-polyfill/node_modules/core-js/modules/_html.js","node_modules/babel-polyfill/node_modules/core-js/modules/_ie8-dom-define.js","node_modules/babel-polyfill/node_modules/core-js/modules/_inherit-if-required.js","node_modules/babel-polyfill/node_modules/core-js/modules/_invoke.js","node_modules/babel-polyfill/node_modules/core-js/modules/_iobject.js","node_modules/babel-polyfill/node_modules/core-js/modules/_is-array-iter.js","node_modules/babel-polyfill/node_modules/core-js/modules/_is-array.js","node_modules/babel-polyfill/node_modules/core-js/modules/_is-integer.js","node_modules/babel-polyfill/node_modules/core-js/modules/_is-object.js","node_modules/babel-polyfill/node_modules/core-js/modules/_is-regexp.js","node_modules/babel-polyfill/node_modules/core-js/modules/_iter-call.js","node_modules/babel-polyfill/node_modules/core-js/modules/_iter-create.js","node_modules/babel-polyfill/node_modules/core-js/modules/_iter-define.js","node_modules/babel-polyfill/node_modules/core-js/modules/_iter-detect.js","node_modules/babel-polyfill/node_modules/core-js/modules/_iter-step.js","node_modules/babel-polyfill/node_modules/core-js/modules/_iterators.js","node_modules/babel-polyfill/node_modules/core-js/modules/_keyof.js","node_modules/babel-polyfill/node_modules/core-js/modules/_library.js","node_modules/babel-polyfill/node_modules/core-js/modules/_math-expm1.js","node_modules/babel-polyfill/node_modules/core-js/modules/_math-log1p.js","node_modules/babel-polyfill/node_modules/core-js/modules/_math-sign.js","node_modules/babel-polyfill/node_modules/core-js/modules/_meta.js","node_modules/babel-polyfill/node_modules/core-js/modules/_metadata.js","node_modules/babel-polyfill/node_modules/core-js/modules/_microtask.js","node_modules/babel-polyfill/node_modules/core-js/modules/_object-assign.js","node_modules/babel-polyfill/node_modules/core-js/modules/_object-create.js","node_modules/babel-polyfill/node_modules/core-js/modules/_object-dp.js","node_modules/babel-polyfill/node_modules/core-js/modules/_object-dps.js","node_modules/babel-polyfill/node_modules/core-js/modules/_object-forced-pam.js","node_modules/babel-polyfill/node_modules/core-js/modules/_object-gopd.js","node_modules/babel-polyfill/node_modules/core-js/modules/_object-gopn-ext.js","node_modules/babel-polyfill/node_modules/core-js/modules/_object-gopn.js","node_modules/babel-polyfill/node_modules/core-js/modules/_object-gops.js","node_modules/babel-polyfill/node_modules/core-js/modules/_object-gpo.js","node_modules/babel-polyfill/node_modules/core-js/modules/_object-keys-internal.js","node_modules/babel-polyfill/node_modules/core-js/modules/_object-keys.js","node_modules/babel-polyfill/node_modules/core-js/modules/_object-pie.js","node_modules/babel-polyfill/node_modules/core-js/modules/_object-sap.js","node_modules/babel-polyfill/node_modules/core-js/modules/_object-to-array.js","node_modules/babel-polyfill/node_modules/core-js/modules/_own-keys.js","node_modules/babel-polyfill/node_modules/core-js/modules/_parse-float.js","node_modules/babel-polyfill/node_modules/core-js/modules/_parse-int.js","node_modules/babel-polyfill/node_modules/core-js/modules/_partial.js","node_modules/babel-polyfill/node_modules/core-js/modules/_path.js","node_modules/babel-polyfill/node_modules/core-js/modules/_property-desc.js","node_modules/babel-polyfill/node_modules/core-js/modules/_redefine-all.js","node_modules/babel-polyfill/node_modules/core-js/modules/_redefine.js","node_modules/babel-polyfill/node_modules/core-js/modules/_replacer.js","node_modules/babel-polyfill/node_modules/core-js/modules/_same-value.js","node_modules/babel-polyfill/node_modules/core-js/modules/_set-proto.js","node_modules/babel-polyfill/node_modules/core-js/modules/_set-species.js","node_modules/babel-polyfill/node_modules/core-js/modules/_set-to-string-tag.js","node_modules/babel-polyfill/node_modules/core-js/modules/_shared-key.js","node_modules/babel-polyfill/node_modules/core-js/modules/_shared.js","node_modules/babel-polyfill/node_modules/core-js/modules/_species-constructor.js","node_modules/babel-polyfill/node_modules/core-js/modules/_strict-method.js","node_modules/babel-polyfill/node_modules/core-js/modules/_string-at.js","node_modules/babel-polyfill/node_modules/core-js/modules/_string-context.js","node_modules/babel-polyfill/node_modules/core-js/modules/_string-html.js","node_modules/babel-polyfill/node_modules/core-js/modules/_string-pad.js","node_modules/babel-polyfill/node_modules/core-js/modules/_string-repeat.js","node_modules/babel-polyfill/node_modules/core-js/modules/_string-trim.js","node_modules/babel-polyfill/node_modules/core-js/modules/_string-ws.js","node_modules/babel-polyfill/node_modules/core-js/modules/_task.js","node_modules/babel-polyfill/node_modules/core-js/modules/_to-index.js","node_modules/babel-polyfill/node_modules/core-js/modules/_to-integer.js","node_modules/babel-polyfill/node_modules/core-js/modules/_to-iobject.js","node_modules/babel-polyfill/node_modules/core-js/modules/_to-length.js","node_modules/babel-polyfill/node_modules/core-js/modules/_to-object.js","node_modules/babel-polyfill/node_modules/core-js/modules/_to-primitive.js","node_modules/babel-polyfill/node_modules/core-js/modules/_typed-array.js","node_modules/babel-polyfill/node_modules/core-js/modules/_typed-buffer.js","node_modules/babel-polyfill/node_modules/core-js/modules/_typed.js","node_modules/babel-polyfill/node_modules/core-js/modules/_uid.js","node_modules/babel-polyfill/node_modules/core-js/modules/_wks-define.js","node_modules/babel-polyfill/node_modules/core-js/modules/_wks-ext.js","node_modules/babel-polyfill/node_modules/core-js/modules/_wks.js","node_modules/babel-polyfill/node_modules/core-js/modules/core.get-iterator-method.js","node_modules/babel-polyfill/node_modules/core-js/modules/core.is-iterable.js","node_modules/babel-polyfill/node_modules/core-js/modules/core.regexp.escape.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.array.copy-within.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.array.every.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.array.fill.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.array.filter.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.array.find-index.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.array.find.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.array.for-each.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.array.from.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.array.index-of.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.array.is-array.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.array.iterator.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.array.join.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.array.last-index-of.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.array.map.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.array.of.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.array.reduce-right.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.array.reduce.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.array.slice.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.array.some.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.array.sort.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.array.species.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.date.now.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.date.to-iso-string.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.date.to-json.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.date.to-primitive.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.date.to-string.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.function.bind.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.function.has-instance.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.function.name.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.map.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.math.acosh.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.math.asinh.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.math.atanh.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.math.cbrt.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.math.clz32.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.math.cosh.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.math.expm1.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.math.fround.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.math.hypot.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.math.imul.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.math.log10.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.math.log1p.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.math.log2.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.math.sign.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.math.sinh.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.math.tanh.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.math.trunc.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.number.constructor.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.number.epsilon.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.number.is-finite.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.number.is-integer.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.number.is-nan.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.number.is-safe-integer.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.number.max-safe-integer.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.number.min-safe-integer.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.number.parse-float.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.number.parse-int.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.number.to-fixed.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.number.to-precision.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.object.assign.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.object.create.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.object.define-properties.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.object.define-property.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.object.freeze.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.object.get-own-property-descriptor.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.object.get-own-property-names.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.object.get-prototype-of.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.object.is-extensible.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.object.is-frozen.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.object.is-sealed.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.object.is.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.object.keys.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.object.prevent-extensions.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.object.seal.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.object.set-prototype-of.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.object.to-string.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.parse-float.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.parse-int.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.promise.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.reflect.apply.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.reflect.construct.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.reflect.define-property.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.reflect.delete-property.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.reflect.enumerate.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.reflect.get-own-property-descriptor.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.reflect.get-prototype-of.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.reflect.get.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.reflect.has.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.reflect.is-extensible.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.reflect.own-keys.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.reflect.prevent-extensions.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.reflect.set-prototype-of.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.reflect.set.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.regexp.constructor.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.regexp.flags.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.regexp.match.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.regexp.replace.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.regexp.search.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.regexp.split.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.regexp.to-string.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.set.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.string.anchor.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.string.big.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.string.blink.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.string.bold.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.string.code-point-at.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.string.ends-with.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.string.fixed.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.string.fontcolor.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.string.fontsize.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.string.from-code-point.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.string.includes.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.string.italics.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.string.iterator.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.string.link.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.string.raw.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.string.repeat.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.string.small.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.string.starts-with.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.string.strike.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.string.sub.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.string.sup.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.string.trim.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.symbol.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.typed.array-buffer.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.typed.data-view.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.typed.float32-array.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.typed.float64-array.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.typed.int16-array.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.typed.int32-array.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.typed.int8-array.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.typed.uint16-array.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.typed.uint32-array.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.typed.uint8-array.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.typed.uint8-clamped-array.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.weak-map.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.weak-set.js","node_modules/babel-polyfill/node_modules/core-js/modules/es7.array.includes.js","node_modules/babel-polyfill/node_modules/core-js/modules/es7.asap.js","node_modules/babel-polyfill/node_modules/core-js/modules/es7.error.is-error.js","node_modules/babel-polyfill/node_modules/core-js/modules/es7.map.to-json.js","node_modules/babel-polyfill/node_modules/core-js/modules/es7.math.iaddh.js","node_modules/babel-polyfill/node_modules/core-js/modules/es7.math.imulh.js","node_modules/babel-polyfill/node_modules/core-js/modules/es7.math.isubh.js","node_modules/babel-polyfill/node_modules/core-js/modules/es7.math.umulh.js","node_modules/babel-polyfill/node_modules/core-js/modules/es7.object.define-getter.js","node_modules/babel-polyfill/node_modules/core-js/modules/es7.object.define-setter.js","node_modules/babel-polyfill/node_modules/core-js/modules/es7.object.entries.js","node_modules/babel-polyfill/node_modules/core-js/modules/es7.object.get-own-property-descriptors.js","node_modules/babel-polyfill/node_modules/core-js/modules/es7.object.lookup-getter.js","node_modules/babel-polyfill/node_modules/core-js/modules/es7.object.lookup-setter.js","node_modules/babel-polyfill/node_modules/core-js/modules/es7.object.values.js","node_modules/babel-polyfill/node_modules/core-js/modules/es7.observable.js","node_modules/babel-polyfill/node_modules/core-js/modules/es7.reflect.define-metadata.js","node_modules/babel-polyfill/node_modules/core-js/modules/es7.reflect.delete-metadata.js","node_modules/babel-polyfill/node_modules/core-js/modules/es7.reflect.get-metadata-keys.js","node_modules/babel-polyfill/node_modules/core-js/modules/es7.reflect.get-metadata.js","node_modules/babel-polyfill/node_modules/core-js/modules/es7.reflect.get-own-metadata-keys.js","node_modules/babel-polyfill/node_modules/core-js/modules/es7.reflect.get-own-metadata.js","node_modules/babel-polyfill/node_modules/core-js/modules/es7.reflect.has-metadata.js","node_modules/babel-polyfill/node_modules/core-js/modules/es7.reflect.has-own-metadata.js","node_modules/babel-polyfill/node_modules/core-js/modules/es7.reflect.metadata.js","node_modules/babel-polyfill/node_modules/core-js/modules/es7.set.to-json.js","node_modules/babel-polyfill/node_modules/core-js/modules/es7.string.at.js","node_modules/babel-polyfill/node_modules/core-js/modules/es7.string.match-all.js","node_modules/babel-polyfill/node_modules/core-js/modules/es7.string.pad-end.js","node_modules/babel-polyfill/node_modules/core-js/modules/es7.string.pad-start.js","node_modules/babel-polyfill/node_modules/core-js/modules/es7.string.trim-left.js","node_modules/babel-polyfill/node_modules/core-js/modules/es7.string.trim-right.js","node_modules/babel-polyfill/node_modules/core-js/modules/es7.symbol.async-iterator.js","node_modules/babel-polyfill/node_modules/core-js/modules/es7.symbol.observable.js","node_modules/babel-polyfill/node_modules/core-js/modules/es7.system.global.js","node_modules/babel-polyfill/node_modules/core-js/modules/web.dom.iterable.js","node_modules/babel-polyfill/node_modules/core-js/modules/web.immediate.js","node_modules/babel-polyfill/node_modules/core-js/modules/web.timers.js","node_modules/babel-polyfill/node_modules/core-js/shim.js","node_modules/browserify/node_modules/process/browser.js","node_modules/jquery/dist/jquery.js","src/collections/ItsLayerCollection.js","src/collections/LayerLegend.js","src/src/jquery.js","src/layers/LayerBase.js","src/layers/LayerBaseVector.js","src/layers/LayerBaseVectorGeoJson.js","src/layers/LayerEsriMapServer.js","src/layers/LayerItsInventory.js","src/olHelpers/esriToOlStyle.js","src/olHelpers/mapInteractionBase.js","src/olHelpers/mapMove.js","src/olHelpers/mapMoveCls.js","src/olHelpers/mapPopup.js","src/olHelpers/mapPopupCls.js","src/olHelpers/propertiesZoomStyle.js","src/olHelpers/quickMap.js","src/olHelpers/quickMapBase.js","src/olHelpers/zoomResolutionConvert.js","src/ol/ol-build.js","src/ol/ol.js","src/util/checkDefined.js","src/util/colors.js","src/util/makeGuid.js","src/util/provide.js","test/legend-test.js"],"names":[],"mappings":"AAAA;;ACAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;AC/BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACjpBA;AACA;;ACDA;AACA;AACA;AACA;;ACHA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;AACA;AACA;;ACNA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACdA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC3CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC3BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACfA;AACA;AACA;AACA;AACA;AACA;;ACLA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtBA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC9IA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpFA;AACA;;ACDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACRA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;;ACHA;AACA;AACA;AACA;AACA;AACA;AACA;;ACNA;AACA;AACA;AACA;;ACHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACdA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACXA;AACA;AACA;AACA;AACA;AACA;AACA;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC3BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACZA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxBA;AACA;AACA;AACA;;ACHA;AACA;AACA;AACA;;ACHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACPA;;ACAA;AACA;AACA;;ACFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACfA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACPA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;AACA;;ACLA;AACA;AACA;;ACFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACXA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACZA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpBA;AACA;AACA;;ACFA;;ACAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACTA;;ACAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACTA;AACA;AACA;AACA;;ACHA;AACA;AACA;AACA;;ACHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACfA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACZA;AACA;AACA;AACA;AACA;AACA;AACA;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACfA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnBA;AACA;AACA;AACA;AACA;AACA;AACA;;ACNA;;ACAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACZA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChBA;AACA;AACA;AACA;AACA;AACA;AACA;;ACNA;;ACAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACTA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACfA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACTA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtBA;;ACAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACPA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC/BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACPA;AACA;AACA;AACA;;ACHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACZA;AACA;AACA;AACA;AACA;AACA;AACA;;ACNA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;AACA;;ACLA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACXA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC7BA;AACA;;ACDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1EA;AACA;AACA;AACA;AACA;AACA;AACA;;ACNA;AACA;AACA;AACA;AACA;AACA;;ACLA;AACA;AACA;AACA;AACA;AACA;;ACLA;AACA;AACA;AACA;AACA;AACA;;ACLA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACXA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACheA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzBA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACRA;;ACAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACVA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACRA;AACA;AACA;AACA;AACA;AACA;;ACLA;AACA;AACA;AACA;AACA;AACA;;ACLA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACTA;AACA;AACA;AACA;AACA;AACA;;ACLA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACTA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACbA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACbA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACVA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACdA;AACA;AACA;AACA;;ACHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACXA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACTA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACTA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACTA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC3BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACTA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtBA;;ACAA;AACA;AACA;AACA;;ACHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC3BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACbA;AACA;AACA;AACA;;ACHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACVA;AACA;AACA;AACA;;ACHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACZA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACTA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACTA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACRA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACPA;AACA;AACA;AACA;;ACHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACPA;AACA;AACA;AACA;;ACHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACdA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACXA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpEA;AACA;AACA;AACA;;ACHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACRA;AACA;AACA;AACA;;ACHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACTA;AACA;AACA;AACA;;ACHA;AACA;AACA;AACA;;ACHA;AACA;AACA;AACA;;ACHA;AACA;AACA;AACA;;ACHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjBA;AACA;AACA;AACA;;ACHA;AACA;AACA;;ACFA;AACA;AACA;;ACFA;AACA;AACA;;ACFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACRA;AACA;AACA;AACA;;ACHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACPA;AACA;AACA;;ACFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACRA;AACA;AACA;;ACFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACTA;AACA;AACA;AACA;;ACHA;AACA;AACA;AACA;;ACHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC5SA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACVA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACVA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACTA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACTA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACVA;AACA;AACA;AACA;;ACHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACfA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACdA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC9BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1CA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACTA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACXA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACTA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACXA;AACA;AACA;AACA;AACA;AACA;AACA;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnBA;AACA;AACA;AACA;AACA;AACA;AACA;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACXA;AACA;AACA;AACA;AACA;AACA;AACA;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChBA;AACA;AACA;AACA;AACA;AACA;AACA;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjBA;AACA;AACA;AACA;AACA;AACA;;ACLA;AACA;AACA;AACA;AACA;AACA;AACA;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjBA;AACA;AACA;AACA;AACA;AACA;AACA;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1OA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC9CA;AACA;AACA;AACA;;ACHA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACXA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACXA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACXA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACRA;AACA;AACA;AACA;;ACHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACVA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACfA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACVA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACfA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACXA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACXA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACdA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACfA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACdA;AACA;AACA;AACA;;ACHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACTA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC7BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACTA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACTA;AACA;AACA;AACA;AACA;AACA;AACA;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;;ACNA;;ACAA;;ACAA;AACA;AACA;AACA;;ACHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrBA;AACA;AACA;AACA;AACA;AACA;;ACLA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC/KA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC9FA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;AC9mTA;;;;AACA;;IAAY,M;;AACZ;;;;;;;;;;AACA,IAAI,KAAK,uBAAQ,aAAR,CAAT;;AAGA,IAAI,YAAY,CACZ,EAAC,MAAM,QAAP,EAAiB,SAAS,MAA1B,EAAkC,SAAS,EAA3C,EAA+C,SAAS,UAAxD,EADY,EAEZ;AACI,UAAM,eADV;AAEI,aAAS,KAFb;AAGI,aAAS,EAHb;AAII,mBAAe;AACX,cAAM,SADK;AAEX,qBAAa,KAFF;AAGX,qBAAa,SAHF;AAIX,mBAAW,CACP,CAAC,MAAD,EAAS,MAAT,EAAiB,UAAjB,CADO;AAJA;AAJnB,CAFY,EAeZ,EAAC,MAAM,UAAP,EAAmB,SAAS,OAA5B,EAAqC,SAAS,EAA9C,EAAkD,SAAS,iBAA3D,EAA8E,SAAS,KAAvF,EAA8F,UAAU,IAAxG,EAfY,EAgBZ,EAAC,MAAM,WAAP,EAAoB,SAAS,MAA7B,EAAqC,SAAS,EAA9C,EAAkD,SAAS,eAA3D,EAA4E,SAAS,KAArF,EAhBY,EAiBZ,EAAC,MAAM,UAAP,EAAmB,SAAS,SAA5B,EAAuC,SAAS,EAAhD,EAAoD,SAAS,aAA7D,EAA4E,SAAS,KAArF,EAjBY,EAkBZ,EAAC,MAAM,KAAP,EAAc,SAAS,KAAvB,EAA8B,SAAS,EAAvC,EAA2C,SAAS,SAApD,EAA+D,SAAS,KAAxE,EAlBY,EAmBZ,EAAC,MAAM,OAAP,EAAgB,SAAS,OAAzB,EAAkC,SAAS,EAA3C,EAA+C,SAAS,WAAxD,EAAqE,SAAS,KAA9E,EAnBY,EAoBZ,EAAC,MAAM,gBAAP,EAAyB,SAAS,KAAlC,EAAyC,SAAS,EAAlD,EAAsD,SAAS,SAA/D,EAA0E,SAAS,KAAnF,EApBY,EAqBZ;AACI,UAAM,gBADV;AAEI,aAAS,MAFb;AAGI,oBAAgB,IAHpB;AAII,aAAS,EAJb;AAKI,aAAS,KALb;AAMI,mBAAe;AACX,cAAM,WADK;AAEX,qBAAa,OAFF;AAGX,qBAAa,uBAHF;AAIX,mBAAW,CACP,CAAC,UAAD,EAAa,UAAb,EAAyB,kBAAzB,CADO,EAEP,CAAC,MAAD,EAAS,MAAT,EAAiB,sBAAjB,CAFO,EAGP,CAAC,MAAD,EAAS,MAAT,EAAiB,sBAAjB,CAHO;AAJA,KANnB;AAgBI,cAAU;AAhBd,CArBY,EAuCZ,EAAC,MAAM,WAAP,EAAoB,SAAS,WAA7B,EAA0C,SAAS,EAAnD,EAAuD,SAAS,eAAhE,EAAiF,SAAS,KAA1F,EAvCY,EAwCZ,EAAC,MAAM,UAAP,EAAmB,SAAS,MAA5B,EAAoC,SAAS,EAA7C,EAAiD,SAAS,aAA1D,EAAyE,SAAS,KAAlF,EAAyF,UAAU,IAAnG,EAxCY,EAyCZ,EAAC,MAAM,MAAP,EAAe,SAAS,MAAxB,EAAgC,SAAS,CAAzC,EAA4C,SAAS,UAArD,EAAiE,SAAS,KAA1E,EAzCY,EA0CZ,EAAC,MAAM,YAAP,EAAqB,SAAS,MAA9B,EAAsC,SAAS,EAA/C,EAAmD,SAAS,cAA5D,EAA4E,SAAS,KAArF,EA1CY,EA2CZ,EAAC,MAAM,YAAP,EAAqB,SAAS,OAA9B,EAAuC,SAAS,EAAhD,EAAoD,SAAS,eAA7D,EAA8E,SAAS,KAAvF,EA3CY,EA4CZ,EAAC,MAAM,QAAP,EAAiB,SAAS,QAA1B,EAAoC,SAAS,EAA7C,EAAiD,SAAS,YAA1D,EAAwE,SAAS,KAAjF,EAAwF,UAAU,IAAlG,EA5CY,EA6CZ,EAAC,MAAM,OAAP,EAAgB,SAAS,OAAzB,EAAkC,SAAS,EAA3C,EAA+C,SAAS,WAAxD,EAAqE,SAAS,KAA9E,EA7CY,EA8CZ;AACI,UAAM,QADV;AAEI,aAAS,QAFb;AAGI,cAAU,IAHd;AAII,aAAS,KAJb;AAKI,mBAAe,GALnB;AAMI,aAAS,EANb;AAOI,oBAAgB,IAPpB;AAQI,mBAAe;AACX,cAAM,OADK;;;AAIX,sBAAc,OAAO,mBAAP,CAA2B,SAA3B,EAAsC,GAAtC,CAJH;AAKX,mBAAW,CACP,CAAC,QAAD,EAAW,QAAX,EAAqB,OAAO,mBAAP,CAA2B,SAA3B,EAAsC,GAAtC,CAArB,CADO,EAEP,CAAC,KAAD,EAAQ,KAAR,EAAe,OAAO,mBAAP,CAA2B,SAA3B,EAAsC,GAAtC,CAAf,CAFO,EAGP,CAAC,WAAD,EAAc,WAAd,EAA2B,OAAO,mBAAP,CAA2B,SAA3B,EAAsC,GAAtC,CAA3B,CAHO,EAIP,CAAC,MAAD,EAAS,MAAT,EAAiB,OAAO,mBAAP,CAA2B,SAA3B,EAAsC,GAAtC,CAAjB,CAJO,EAKP,CAAC,eAAD,EAAkB,eAAlB,EAAmC,OAAO,mBAAP,CAA2B,SAA3B,EAAsC,GAAtC,CAAnC,CALO,EAMP,CAAC,OAAD,EAAU,OAAV,EAAmB,OAAO,mBAAP,CAA2B,SAA3B,EAAsC,GAAtC,CAAnB,CANO,EAOP,CAAC,WAAD,EAAc,WAAd,EAA2B,OAAO,mBAAP,CAA2B,SAA3B,EAAsC,GAAtC,CAA3B,CAPO,EAQP,CAAC,MAAD,EAAS,MAAT,EAAiB,OAAO,mBAAP,CAA2B,SAA3B,EAAsC,GAAtC,CAAjB,CARO,EASP,CAAC,iBAAD,EAAoB,SAApB,EAA+B,OAAO,mBAAP,CAA2B,SAA3B,EAAsC,GAAtC,CAA/B,CATO;AALA;AARnB,CA9CY,CAAhB;;IA6EM,kB;;;;;;;;;;;;;;;;;;;;;;;;;;AAyBF,gCAAY,MAAZ,EAAoB,OAApB,EAA6B;AAAA;;AAEzB,aAAK,GAAL,GAAW,MAAX;AACA,aAAK,OAAL,GAAe,EAAf;;AAEA,kBAAU,QAAO,OAAP,yCAAO,OAAP,MAAkB,QAAlB,GAA6B,OAA7B,GAAuC,EAAjD;;AAEA,aAAK,IAAI,IAAI,CAAb,EAAgB,IAAI,UAAU,MAA9B,EAAsC,GAAtC,EAA2C;AACvC,gBAAI,YAAY,UAAU,CAAV,CAAhB;AACA,gBAAI,WAAW,IAAf;;AAEA,iBAAK,IAAI,IAAI,CAAb,EAAgB,IAAI,QAAQ,MAA5B,EAAoC,GAApC,EAAyC;AACrC,oBAAI,QAAQ,CAAR,KAAc,UAAU,OAA5B,EAAqC;AACjC,+BAAW,KAAX;AACA;AACH;AACJ;;AAED,gBAAI,QAAJ,EAAc;AACV,oBAAI,YAAY,gCAAsB,SAAtB,CAAhB;AACA,qBAAK,KAAL,EAAY,QAAZ,CAAqB,UAAU,OAA/B;AACA,qBAAK,OAAL,CAAa,IAAb,CAAkB,SAAlB;AAEH;AACJ;AACJ;;;;;;;;;;4BAMY;AACT,mBAAO,KAAK,OAAZ;AACH;;;;;;AAGL,GAAG,kBAAH,GAAwB,kBAAxB;kBACe,kB;;;;;;;;;;;;;;AClJf;;;;AACA;;;;AACA;;;;AACA;;;;;;;;AACA,IAAI,KAAK,uBAAQ,aAAR,CAAT;;IAEM,U;;;;;;;;;;;AAUF,wBAAY,WAAZ,EAAyB,MAAzB,EAAiC;AAAA;;AAC7B,aAAK,WAAL,GAAmB,EAAnB;AACA,aAAK,iBAAL,GAAyB,EAAzB;AACA,aAAK,WAAL,GAAmB,EAAnB;AACA,aAAK,iBAAL,GAAyB,EAAzB;AACA,aAAK,WAAL,GAAmB,EAAnB;;AAEA,YAAI,OAAO,WAAP,IAAsB,WAA1B,EAAuC;AACnC,iBAAK,MAAL,GAAc,IAAd;AACA,iBAAK,OAAL,GAAe,MAAf;AACA,iBAAK,SAAL,GAAiB,MAAjB;AACA,iBAAK,cAAL,GAAsB,EAAC,MAAM,IAAP,EAAtB;AACA,iBAAK,aAAL,GAAqB,CAAC,IAAD,CAArB;AACA,iBAAK,aAAL,GAAqB,EAArB;AACA,iBAAK,cAAL,GAAsB,EAAtB;AACA,iBAAK,iBAAL,GAAyB,EAAzB;AACA,iBAAK,QAAL,GAAgB,KAAhB;AACA,iBAAK,QAAL,GAAgB,KAAhB;AACH,SAXD,MAWO;AACH,iBAAK,OAAL,GAAe,yBAAf;AACA,iBAAK,MAAL,GAAc,MAAd;AACA,iBAAK,SAAL,GAAiB,YAAY,SAA7B;AACA,iBAAK,QAAL,GAAgB,OAAQ,YAAY,QAApB,IAAgC,SAAhC,GAA4C,YAAY,QAAxD,GAAmE,KAAnF;AACA,iBAAK,QAAL,GAAgB,OAAQ,YAAY,QAApB,IAAgC,SAAhC,GAA4C,YAAY,QAAxD,GAAmE,IAAnF;AACH;AACJ;;;;;;;;;;;;;;;iCAWQ,W,EAAa,O,EAAS;AAC3B,gBAAI,eAAJ;AACA,gBAAI,QAAQ,MAAR,GAAiB,CAArB,EAAwB;AACpB,yBAAS,QAAQ,QAAQ,MAAR,GAAiB,CAAzB,CAAT;AACH,aAFD,MAEO;AACH,yBAAS,MAAT;AACH;;;;;AAMD,gBAAI,cAAc,KAAK,cAAL,CAAoB,MAApB,CAAlB;AACA,gBAAI,WAAW,IAAI,UAAJ,CAAe,WAAf,EAA4B,WAA5B,CAAf;AACA,iBAAK,cAAL,CAAoB,SAAS,OAA7B,IAAwC,QAAxC;AACA,iBAAK,aAAL,CAAmB,IAAnB,CAAwB,QAAxB;;AAEA,wBAAY,WAAZ,CAAwB,IAAxB,CAA6B,QAA7B;AACA,wBAAY,iBAAZ,CAA8B,SAAS,OAAvC,IAAkD,QAAlD;;AAEA,gBAAI,YAAY,WAAZ,CAAwB,OAAxB,CAAgC,SAAS,OAAzC,IAAoD,CAAxD,EAA2D;AACvD,wBAAQ,GAAR,CAAY,SAAS,OAArB;AACA,sBAAM,oCAAN;AACH;AACD,wBAAY,WAAZ,CAAwB,IAAxB,CAA6B,SAAS,OAAtC;;AAEA,mBAAO,QAAP;AACH;;;;;;;;;;uCAOc,Q,EAAU,O,EAAS;AAC9B,gBAAI,eAAJ;AACA,gBAAI,QAAQ,MAAR,GAAiB,CAArB,EAAwB;AACpB,yBAAS,QAAQ,QAAQ,MAAR,GAAiB,CAAzB,CAAT;AACH,aAFD,MAEO;AACH,yBAAS,MAAT;AACH;;AAED,iBAAK,cAAL,CAAoB,SAAS,EAA7B,IAAmC,QAAnC;AACA,iBAAK,aAAL,CAAmB,IAAnB,CAAwB,QAAxB;;;;;AAKA,gBAAI,cAAc,KAAK,cAAL,CAAoB,MAApB,CAAlB;;AAEA,wBAAY,WAAZ,CAAwB,IAAxB,CAA6B,QAA7B;AACA,wBAAY,iBAAZ,CAA8B,SAAS,EAAvC,IAA6C,QAA7C;AACA,gBAAI,YAAY,WAAZ,CAAwB,OAAxB,CAAgC,SAAS,EAAzC,IAA+C,CAAnD,EAAsD;AAClD,wBAAQ,GAAR,CAAY,SAAS,EAArB;AACA,sBAAM,oCAAN;AACH;AACD,wBAAY,WAAZ,CAAwB,IAAxB,CAA6B,SAAS,EAAtC;;AAEA,iBAAK,iBAAL,CAAuB,SAAS,EAAhC,IAAsC,WAAtC;AAEH;;;sCAEa,Q,EAAU,O,EAAS;;AAG7B,gBAAI,0BAAwB,QAAxB,gCAAJ;;AAEA,0BAAc,SAAO,QAAQ,WAAf,8DAAmF,QAAnF,iIAC+E,QAD/E,4CAAd;;AAKA,0BAAc,KAAK,YAAL,CAAkB,KAAK,WAAvB,EAAoC,IAApC,EAA0C,QAAQ,eAAlD,IAAqE,OAAnF;;AAEA,mBAAO,UAAP;AACH;;;;;;;;;;;;qCASY,O,EAAS,Q,EAAU,e,EAAiB;;AAE7C,gBAAI,QAAQ,MAAR,IAAkB,CAAtB,EAAyB;AACrB,uBAAO,EAAP;AACH;;AAED,gBAAI,SAAS,EAAb;;AAEA,gBAAI,SAAS,QAAQ,CAAR,CAAb;;AAEA,gBAAI,SAAS,iBAAT,CAA2B,MAA3B,CAAJ,EAAwC;;;;;AAKpC,oBAAI,MAAM,SAAS,iBAAT,CAA2B,MAA3B,CAAV;AACA,0BAAU,aAAW,IAAI,EAAf,0CAAsD,gBAAgB,IAAhB,CAAqB,GAArB,CAAtD,UAAsF,IAAI,YAAJ,EAAtF,GAA2G,OAArH;AAGH,aATD,MASO,IAAI,SAAS,iBAAT,CAA2B,MAA3B,CAAJ,EAAwC;;;;AAI3C,oBAAI,aAAa,SAAS,iBAAT,CAA2B,MAA3B,CAAjB;;AAEA;AACA,0BAAU,cAAY,WAAW,OAAvB,4DACwB,gBAAgB,IAAhB,CAAqB,GAArB,CADxB,QAAV;;AAGA,oBAAI,WAAW,QAAf,EAAyB;AACrB,8BAAU,wCAAsC,WAAW,OAAjD,uCACS,WAAW,OADpB,+DACqF,WAAW,SADhG,cAAV;AAEH,iBAHD,MAGO;AACH,oFAA8D,WAAW,SAAzE;AACH;;AAED;AACA,2BAAa,WAAW,QAAX,GAAsB,sCAAtB,GAA+D,EAA5E;AACA,0BAAU,WAAW,QAAX,GAAsB,SAAtB,GAAkC,SAA5C;AACA,0BAAU,SAAV;;;AAGA,0BAAU,SAAS,KAAK,YAAL,CAAkB,WAAW,WAA7B,EAA0C,UAA1C,EAAsD,eAAtD,CAAT,GAAkF,OAA5F;AACA,0BAAU,QAAV;AACA,0BAAU,OAAV;AACH;;AAED,mBAAO,SAAS,KAAK,YAAL,CAAkB,QAAQ,KAAR,CAAc,CAAd,CAAlB,EAAoC,QAApC,EAA8C,eAA9C,CAAhB;AACH;;;;;;;;;;;IAMC,W;;;;;;;;;;;;AAWF,yBAAY,WAAZ,EAAyB,KAAzB,EAAgC,OAAhC,EAAyC;AAAA;;AAAA;AAAA;AAAA;;AAAA;AACrC,iCAAc,WAAd,8HAA2B;AAAA,oBAAlB,CAAkB;;AACvB,oBAAI,OAAO,CAAP,IAAY,WAAhB,EAA6B;AACzB,0BAAM,sDAAN;AACH;AACJ;AALoC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAOrC,kBAAU,WAAW,EAArB;;AAEA,gBAAQ,WAAR,GAAsB,OAAO,QAAQ,WAAf,IAA8B,QAA9B,GAAyC,QAAQ,WAAjD,GAA+D,QAArF;AACA,gBAAQ,cAAR,GAAyB,OAAO,QAAQ,cAAf,IAAiC,SAAjC,GAA6C,QAAQ,cAArD,GAAsE,IAA/F;AACA,gBAAQ,eAAR,GAA0B,QAAQ,eAAR,IAA2B,EAArD;;;AAGA,YAAI,QAAQ,cAAZ,EAA4B;AACxB,8BAAQ,SAAR;AACH;;AAED,aAAK,WAAL,GAAmB,sBAAE,MAAM,KAAR,CAAnB;;AAEA,aAAK,YAAL,GAAoB,WAApB;;AAEA,aAAK,UAAL,GAAkB,IAAI,UAAJ,EAAlB;;AAEA,aAAK,UAAL,CAAgB,WAAhB;;AAEA,aAAK,QAAL,GAAgB,yBAAhB;;AAEA,aAAK,WAAL,CAAiB,MAAjB,CAAwB,KAAK,UAAL,CAAgB,aAAhB,CAA8B,KAAK,QAAnC,EAA6C,OAA7C,CAAxB;;AA5BqC;AAAA;AAAA;;AAAA;AA8BrC,kCAAc,KAAK,UAAL,CAAgB,aAA9B,mIAA4C;AAAA,oBAAnC,CAAmC;;AACxC,kBAAE,aAAF;AACH;AAhCoC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAkCrC,YAAI,QAAQ,IAAZ;;;AAGA,YAAI,QAAQ,cAAZ,EAA4B;AACxB,8BAAQ,SAAR;;AAEA,8BAAQ,WAAR,CAAoB,UAAU,GAAV,EAAe,IAAf,EAAqB,GAArB,EAA0B;AAC1C,oBAAI,OAAO,GAAP,IAAc,WAAd,IAA6B,OAAO,mBAAxC,EAA6D;AAAA;AAAA;AAAA;;AAAA;AACzD,8CAAgB,KAAK,UAAL,CAAgB,aAAhC,mIAA+C;AAAA,gCAAtC,GAAsC;;AAC3C,gCAAI,SAAS,sBAAE,MAAM,IAAI,EAAV,GAAe,WAAjB,CAAb;AACA,gCAAI,OAAO,IAAI,OAAX,IAAsB,OAAO,IAAI,OAArC,EAA8C;AAC1C,uCAAO,QAAP,CAAgB,mBAAhB;AACH,6BAFD,MAEO;AACH,uCAAO,WAAP,CAAmB,mBAAnB;AACH;AACJ;AARwD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAS5D;AACJ,aAXD,EAWG,IAXH,EAWS,GAXT,EAWc,IAXd,EAWoB,SAXpB;AAYH;;;;AAID,aAAK,WAAL,CAAiB,IAAjB,CAAsB,qBAAtB,EAA6C,MAA7C,CAAoD,YAAY;AAC5D,gBAAI,iBAAiB,sBAAE,kBAAF,CAArB;AACA,gBAAI,KAAK,OAAT,EAAkB;AACd,+BAAe,WAAf,CAA2B,kBAA3B;AACH,aAFD,MAEO;AACH,+BAAe,QAAf,CAAwB,kBAAxB;AACH;AACJ,SAPD;;AAUA,aAAK,WAAL,CAAiB,IAAjB,CAAsB,eAAtB,EAAuC,MAAvC,CAA8C,YAAY;AACtD,gBAAI,QAAQ,KAAK,EAAL,CAAQ,OAAR,CAAgB,qBAAhB,EAAuC,EAAvC,CAAZ;AACA,kBAAM,UAAN,CAAiB,cAAjB,CAAgC,KAAhC,EAAuC,OAAvC,GAAiD,KAAK,OAAtD;AACH,SAHD;;AAKA,aAAK,WAAL,CAAiB,IAAjB,CAAsB,4CAAtB,EAAoE,MAApE,CAA2E,YAAY;AACnF,kCAAE,IAAF,EAAQ,QAAR,CAAiB,IAAjB,EAAuB,IAAvB,CAA4B,sBAA5B,EAAoD,IAApD,CAAyD,SAAzD,EAAoE,KAAK,OAAzE,EAAkF,OAAlF,CAA0F,QAA1F;AACH,SAFD;;AAIA,aAAK,WAAL,CAAiB,IAAjB,CAAsB,uBAAtB,EAA+C,KAA/C,CAAqD,YAAY;AAC7D,gBAAI,QAAQ,sBAAE,IAAF,CAAZ;AACA,kBAAM,WAAN,CAAkB,qCAAlB;;AAEA,kBAAM,QAAN,CAAe,IAAf,EAAqB,WAArB;;AAEA,gBAAI,MAAM,QAAN,CAAe,8BAAf,CAAJ,EAAmD;AAC/C,sBAAM,WAAN,CAAkB,8BAAlB;AACA,sBAAM,IAAN,CAAW,SAAX;AACH,aAHD,MAGO;AACH,sBAAM,QAAN,CAAe,8BAAf;AACA,sBAAM,IAAN,CAAW,SAAX;AACH;AACJ,SAbD;;AAeA,aAAK,WAAL,CAAiB,IAAjB,CAAsB,sCAAtB,EAA8D,OAA9D,CAAsE,OAAtE;;AAEH;;;;;;;;;;;mCAOU,W,EAAa,O,EAAS;;AAE7B,gBAAI,YAAY,MAAZ,IAAsB,CAA1B,EAA6B;AACzB;AACH;;AAED,gBAAI,UAAU,YAAY,CAAZ,CAAd;;;AAGA,gBAAI,KAAK,YAAL,CAAkB,OAAlB,CAA0B,OAA1B,IAAqC,CAAC,CAAtC,IAA2C,OAAO,OAAP,IAAkB,WAAjE,EAA8E;AAC1E,0BAAU,EAAV;AACH;;AAED,gBAAI,OAAO,QAAQ,WAAR,CAAP,KAAgC,WAApC,EAAiD;AAC7C,oBAAI,YAAY,YAAY,CAAZ,CAAhB;AACA,oBAAI,WAAW,KAAK,UAAL,CAAgB,QAAhB,CAAyB,SAAzB,EAAoC,OAApC,CAAf;AACA,wBAAQ,IAAR,CAAa,SAAS,OAAtB;AACA,qBAAK,UAAL,CAAgB,UAAU,KAA1B,EAAiC,OAAjC;AACH,aALD,MAKO;;;;AAIH,oBAAI,YAAY,YAAY,CAAZ,CAAhB;;AAEA,qBAAK,UAAL,CAAgB,cAAhB,CAA+B,SAA/B,EAA0C,OAA1C;AACH;;AAED,iBAAK,UAAL,CAAgB,YAAY,KAAZ,CAAkB,CAAlB,CAAhB,EAAsC,OAAtC;AACH;;;0BAEW,G,EAAK,CAEhB;;;;;;AAGL,GAAG,WAAH,GAAiB,WAAjB;kBACe,W;;;;;;;;;;;;AChVf,OAAO,MAAP,GAAgB,QAAQ,QAAR,CAAhB;;kBAEe,OAAO,M;;;;;;;;;;;;;;;ACLtB;;;;AACA;;;;AACA;;IAAY,qB;;AACZ;;;;;;;;;;AACA,IAAM,KAAK,uBAAQ,QAAR,CAAX;;;;;;;IAMM,S;;;;;;;;;;;;;;;;;;;AAkBF,uBAAY,GAAZ,EAAiB,OAAjB,EAA0B;AAAA;;AACtB,kBAAU,WAAW,EAArB;;AAEA,YAAI,OAAO,GAAP,KAAe,QAAnB,EAA6B;AACzB,kBAAM,aAAN;AACH;AACD,aAAK,IAAL,GAAY,GAAZ;;AAIA,aAAK,OAAL,GAAe,QAAO,QAAQ,MAAf,KAAyB,QAAzB,GAAoC,QAAQ,MAA5C,GAAqD,EAApE;AACA,aAAK,eAAL,GAAuB,OAAO,QAAQ,cAAf,IAAiC,SAAjC,GAA6C,QAAQ,cAArD,GAAsE,KAA7F;AACA,aAAK,eAAL,GAAuB,OAAO,QAAQ,cAAf,IAAiC,SAAjC,GAA6C,QAAQ,cAArD,GAAsE,IAA7F;;AAEA,aAAK,EAAL,GAAU,QAAQ,EAAR,IAAc,yBAAxB;AACA,aAAK,KAAL,GAAa,QAAQ,IAAR,IAAgB,eAA7B;AACA,aAAK,OAAL,GAAe,KAAf;AACA,aAAK,QAAL,GAAgB,OAAO,QAAQ,OAAf,IAA0B,QAA1B,GAAqC,QAAQ,OAA7C,GAAuD,CAAvE;;AAEA,YAAI,KAAK,QAAL,GAAgB,CAApB,EAAuB;AACnB,iBAAK,QAAL,GAAgB,CAAhB;AACH,SAFD,MAEO,IAAI,KAAK,QAAL,GAAgB,CAApB,EAAuB;AAC1B,iBAAK,QAAL,GAAgB,CAAhB;AACH;;AAED,aAAK,QAAL,GAAgB,OAAO,QAAQ,OAAf,KAA2B,SAA3B,GAAuC,QAAQ,OAA/C,GAAyD,IAAzE;;AAEA,aAAK,OAAL,GAAe,SAAf;AACA,aAAK,OAAL,GAAe,SAAf;AACA,aAAK,OAAL,GAAe,KAAf;;AAEA,aAAK,cAAL,GAAsB,sBAAsB,gBAAtB,CAAuC,QAAQ,OAA/C,CAAtB;AACA,YAAI,OAAO,KAAK,cAAZ,KAA+B,WAAnC,EAAgD;AAC5C,iBAAK,cAAL,IAAuB,OAAvB;AACH;AACD,aAAK,cAAL,GAAsB,sBAAsB,gBAAtB,CAAuC,QAAQ,OAA/C,CAAtB;;AAEA,aAAK,QAAL,GAAgB,OAAO,QAAQ,OAAf,IAA0B,QAA1B,GAAqC,QAAQ,OAA7C,GAAuD,SAAvE;AACA,aAAK,QAAL,GAAgB,OAAO,QAAQ,OAAf,IAA0B,QAA1B,GAAqC,QAAQ,OAA7C,GAAuD,SAAvE;AACA,aAAK,OAAL,GAAe,OAAO,QAAQ,MAAf,IAAyB,QAAzB,GAAoC,QAAQ,MAA5C,GAAqD,CAApE;;AAEA,aAAK,YAAL,GAAoB,OAAO,QAAQ,YAAf,IAA+B,UAA/B,GAA4C,QAAQ,YAApD,GAAmE,YAAY,CAClG,CADD;;AAIA,aAAK,cAAL,GAAsB,EAAtB;;AAEA,YAAI,KAAK,eAAT,EAA0B;AACtB,iBAAK,cAAL,IAAuB,6BAA0B,KAAK,OAAL,GAAe,SAAf,GAA2B,EAArD,yCACS,KAAK,EADd,wCAAvB;AAEA,iBAAK,cAAL,qBAAsC,KAAK,EAA3C,uDAA+F,KAAK,IAApG;AACH,SAJD,MAIO;AACH,iBAAK,cAAL,0CAA2D,KAAK,IAAhE;AACH;;AAED,aAAK,WAAL,GAAmB,IAAnB;AACA,aAAK,oBAAL,GAA4B,KAA5B;AACA,aAAK,iBAAL,CAAuB,OAAO,QAAQ,aAAf,KAAiC,QAAjC,GAA4C,QAAQ,aAApD,GAAoE,SAA3F;AACH;;;;;;;;;;;gCAOO;AACJ,gBAAI,KAAK,MAAL,IAAe,IAAnB,EAAyB;AACrB,uBAAO,IAAP;AACH,aAFD,MAEO;AACH,qBAAK,OAAL,GAAe,IAAf;;AAEA,uBAAO,KAAP;AACH;AACJ;;;;;;;;;uCAMc;AACX,0DAA4C,KAAK,EAAjD,2BAAyE,KAAK,cAA9E;AACH;;;;;;;;;;0CAOiB,iB,EAAmB;AACjC,gCAAoB,OAAO,iBAAP,IAA4B,QAA5B,GAAuC,iBAAvC,GAA2D,EAA/E;;AAEA,gBAAI,cAAc,kBAAkB,OAAlB,CAA0B,MAA1B,IAAoC,CAAC,CAAvD;;AAEA,gBAAI,WAAJ,EAAiB;AACb,oCAAoB,+EAA+E,iBAAnG;AACH;;AAED,iBAAK,cAAL,IAAuB,iBAAvB;;AAEA,iBAAK,WAAL,GAAmB,4BAAM,KAAK,EAAX,uBAAnB;;AAEA,gBAAI,KAAK,WAAL,CAAiB,MAAjB,GAA0B,CAA9B,EAAiC;AAC7B,qBAAK,WAAL,CAAiB,MAAjB,CAAwB,iBAAxB;AACA,qBAAK,aAAL;AACH;AACJ;;;;;;;;;yCAMgB,iB,EAAmB;AAChC,iBAAK,iBAAL,CAAuB,iBAAvB;AACH;;;wCAEe;AACZ,gBAAI,KAAK,oBAAT,EAA+B;AAC3B,wBAAQ,GAAR,CAAY,0BAAZ;;AAEA,uBAAO,SAAP;AACH;;AAED,iBAAK,WAAL,GAAmB,4BAAM,KAAK,EAAX,uBAAnB;;AAEA,gBAAI,KAAK,WAAL,CAAiB,MAAjB,GAA0B,CAA9B,EAAiC;;AAE7B,oBAAI,YAAY,KAAK,WAAL,CAAiB,IAAjB,CAAsB,wBAAtB,CAAhB;;AAEA,oBAAI,UAAU,MAAV,GAAmB,CAAvB,EAA0B;AACtB,yBAAK,oBAAL,GAA4B,IAA5B;;AAEA,8BAAU,KAAV,CAAgB,YAAY;AACxB,4BAAI,QAAQ,sBAAE,IAAF,CAAZ;;AAEA,8BAAM,QAAN,CAAe,IAAf,EAAqB,WAArB;;AAEA,4BAAI,MAAM,QAAN,CAAe,8BAAf,CAAJ,EAAoD;AAChD,kCAAM,WAAN,CAAkB,8BAAlB;AACA,kCAAM,IAAN,CAAW,SAAX;AACH,yBAHD,MAGO;AACH,kCAAM,QAAN,CAAe,8BAAf;AACA,kCAAM,IAAN,CAAW,SAAX;AACH;AACJ,qBAZD;;AAcA,wBAAI,KAAK,eAAT,EAA0B;AACtB,kCAAU,OAAV,CAAkB,OAAlB;AACH;AACJ;AACJ;AACJ;;;;;;;;kCAKQ;AACL,gBAAI,KAAK,MAAT,EAAgB;AACZ,qBAAK,MAAL,CAAY,OAAZ;;;;AAIH;AACJ;;;;;;;;;4BAOmB;AAChB,mBAAO,KAAK,cAAZ;AACH;;;;;;;;0BAOiB,M,EAAQ;AACtB,iBAAK,cAAL,GAAsB,MAAtB;AACH;;;;;;;;;4BAMY;AACT,mBAAO,KAAK,OAAZ;AACH;;;;;;;;0BAOU,S,EAAU;AACjB,iBAAK,OAAL,GAAe,SAAf;AACH;;;;;;;;;4BAMmB;AAChB,mBAAO,KAAK,cAAZ;AACH;;;;;;;;;4BAMmB;AAChB,mBAAO,KAAK,cAAZ;AACH;;;;;;;;;4BAMa;AACV,mBAAO,KAAK,QAAZ;AACH;;;;;;;;;4BAMa;AACV,mBAAO,KAAK,QAAZ;AACH;;;;;;;;;4BAMS;AACN,mBAAO,KAAK,IAAZ;AACH;;;;;;;;;4BAMa;AACV,mBAAO,KAAK,QAAZ;AACH;;;;;;;0BAMW,U,EAAY;AACpB,iBAAK,QAAL,GAAgB,UAAhB;AACA,gBAAI,KAAK,OAAT,EAAkB;AACd,qBAAK,OAAL,CAAa,UAAb,CAAwB,KAAK,QAA7B;AACA,oBAAI,cAAc,CAAC,KAAK,OAAxB,EAAiC;AAC7B,yBAAK,KAAL;AACH;AACJ;AACJ;;;;;;;;;4BAMa;AACV,mBAAO,KAAK,QAAZ;AACH;;;;;;;0BAMW,O,EAAS;AACjB,iBAAK,QAAL,GAAgB,OAAhB;AACA,gBAAI,KAAK,OAAT,EAAkB;AACd,qBAAK,OAAL,CAAa,UAAb,CAAwB,KAAK,QAA7B;AACH;AACJ;;;;;;;;;4BAMU;AACP,mBAAO,KAAK,KAAZ;AACH;;;;;;;0BAMQ,O,EAAS;AACd,iBAAK,KAAL,GAAa,OAAb;AACH;;;;;;;;;4BAMY;AACT,mBAAO,KAAK,OAAZ;AACH;;;;;;;;;4BAMY;AACT,mBAAO,KAAK,OAAZ;AACH;;;;;;;;;4BAMW;AACR,mBAAO,KAAK,OAAZ;AACH;;;;;;;0BAMU,I,EAAK;AACZ,iBAAK,OAAL,GAAe,IAAf;AACA,iBAAK,OAAL,CAAa,SAAb,CAAuB,KAAK,MAA5B;AACH;;;;;;AAGL,GAAG,SAAH,GAAe,SAAf;kBACe,S;;;;;;;;;;;;;;;ACvWf;;;;AACA;;;;AACA;;;;AACA;;;;AACA;;;;;;;;;;;;AACA,IAAM,KAAK,uBAAQ,QAAR,CAAX;;;;;;;;;;;;;;;;;;;;;IAqBM,e;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA2BF,6BAAY,GAAZ,EAAiB,OAAjB,EAA0B;AAAA;;;;AAAA,uGAChB,GADgB,EACX,OADW;;AAItB,YAAI,MAAK,GAAL,CAAS,IAAT,MAAmB,EAAvB,EAA2B;AACvB,kBAAK,OAAL,GAAe,IAAf;AACH;;AAED,cAAK,MAAL,GAAc,OAAO,QAAQ,KAAf,IAAwB,WAAxB,GAAsC,SAAtC,GAAkD,QAAQ,KAAxE;;AAEA,YAAI,MAAK,OAAT,EAAkB;AACd,kBAAK,SAAL,GAAiB,IAAjB;AACH,SAFD,MAEO;AACH,kBAAK,SAAL,GAAkB,OAAO,QAAQ,UAAR,CAAP,IAA8B,SAA9B,GAA0C,QAAQ,UAAR,CAA1C,GAAgE,KAAlF;AACH;;AAED,cAAK,SAAL,GAAiB,OAAO,QAAQ,QAAf,IAA2B,SAA3B,GAAuC,QAAQ,QAA/C,GAA0D,KAA3E;AACA,cAAK,cAAL,GAAsB,OAAO,QAAQ,aAAf,IAAgC,QAAhC,GAA2C,QAAQ,aAAnD,GAAmE,GAAzF;;AAEA,YAAI,QAAQ,UAAZ,EAAuB;AACnB,kBAAK,QAAL,GAAgB,QAAQ,UAAxB;AACH,SAFD,MAEO;AACH,kBAAK,QAAL,GAAgB,MAAK,SAAL,uBAA2B,SAA3C;AACH;;AAED,cAAK,qBAAL,GAA6B,OAAO,QAAQ,oBAAf,IAAuC,UAAvC,GAAoD,QAAQ,oBAA5D,GACzB,UAAS,GAAT,EAAc,MAAd,EAAsB,SAAtB,EAAgC;AAC5B,mBAAO,EAAP;AACH,SAHL;;AAKA,YAAI,MAAK,SAAT,EAAoB;AAChB,kBAAK,OAAL,GAAe,IAAf;AACA,kBAAK,cAAL,GAAsB,EAAtB;AACA,kBAAK,QAAL,CAAc,SAAd;AACA,kBAAK,QAAL,CAAc,cAAd;AACH;;AAED,cAAK,OAAL,GAAe,IAAI,aAAG,MAAH,CAAU,MAAd,EAAf;;;;;;AAMA,cAAK,OAAL,GAAe,IAAI,aAAG,KAAH,CAAS,MAAb,CACX;AACI,oBAAQ,MAAK,OADjB;AAEI,qBAAS,MAAK,OAFlB;AAGI,mBAAO,MAAK,KAHhB;AAII,2BAAe,MAAK,cAJxB;AAKI,2BAAe,MAAK,cALxB;AAMI,oBAAQ,MAAK;AANjB,SADW,CAAf;AA3CsB;AAqDzB;;;;;;;;;;oCAMW,iB,EAAmB;AAC3B,oBAAQ,GAAR,CAAY,iEAAZ;AACH;;;;;;;;;;;sCAQa,I,EAAM,O,EAAS;AACzB,gBAAI,KAAK,OAAL,KAAiB,SAArB,EAAgC;AAC5B,oBAAI,OAAO,KAAK,OAAhB,EAAyB;AACrB,2BAAO,KAAP;AACH;AACJ;;AAED,gBAAI,KAAK,OAAL,KAAiB,SAArB,EAAgC;AAC5B,oBAAI,OAAO,KAAK,OAAhB,EAAyB;AACrB,2BAAO,KAAP;AACH;AACJ;;AAED,mBAAO,KAAK,OAAZ;AACH;;;;;;;;;;;;;;6CAWoB,M,EAAQ,S,EAAW;AACpC,iBAAK,cAAL,GAAsB,EAAtB;AACA,6BAAE,MAAF,CAAS,KAAK,cAAd,EAA8B,KAAK,MAAnC;AACA,6BAAE,MAAF,CAAS,KAAK,cAAd,EAA8B,KAAK,qBAAL,CAA2B,IAA3B,EAAiC,MAAjC,EAAyC,SAAzC,CAA9B;AACH;;;;;;;;;wCAMe,C,EAAG;AACf,gBAAI,KAAK,MAAT,EAAiB;AACb,qBAAK,OAAL,CAAa,KAAb;AACH;AACJ;;;;;;;;gCAKO;AACJ,gBAAI,KAAK,OAAT,EAAkB;AACd,qBAAK,OAAL,CAAa,KAAb;AACH;AACJ;;;;;;;;;4BAMmB;AAChB,mBAAO,KAAK,cAAZ;AACH;;;;;;;;;4BAMc;AACX,mBAAO,KAAK,SAAZ;AACH;;;;;;;;;4BAMW;AACR,mBAAO,KAAK,MAAZ;AACH;;;;;;;0BAMS,K,EAAO;AACb,iBAAK,MAAL,GAAc,KAAd;AACA,iBAAK,OAAL,CAAa,QAAb,CAAsB,KAAK,MAA3B;AACH;;;;;;;;;4BAMY;AACT,gBAAI,KAAK,QAAT,EAAmB;AACf,uBAAO,KAAK,QAAL,CAAc,GAAd,CAAkB,OAAlB,GAA4B,aAA5B,GAA4C,OAA5C,EAAP;AACH,aAFD,MAEO;AACH,uBAAO,SAAP;AACH;AACJ;;;;;;;;;4BAMa;AACV,mBAAO,KAAK,QAAZ;AACH;;;;;;;;;4BAMmB;AAChB,mBAAO,KAAK,cAAZ;AACH;;;;;;;;;4BAMa;AACV;AACH;;;;;;;;0BAOW,U,EAAY;AACpB,8EAAgB,UAAhB;;AAEA,gBAAI,KAAK,SAAT,EAAoB;AAChB,qBAAK,OAAL,CAAa,cAAb,CAA4B,IAA5B;AACH;AACJ;;;;;;;;;;4BAOW;AACR;AACH;;;;;;;;;4BAMa;AACV,mBAAO,KAAK,MAAL,CAAY,WAAZ,EAAP;AACH;;;;;;AAGL,GAAG,eAAH,GAAqB,eAArB;kBACe,e;;;;;;;;;;;;;AC7Qf;;;;AACA;;;;AACA;;;;AACA;;;;;;;;;;;;;;AACA,IAAI,KAAK,uBAAQ,QAAR,CAAT;;;;;;;IAMM,sB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA6BF,oCAAY,GAAZ,EAAiB,OAAjB,EAA0B;AAAA;;AACtB,cAAM,OAAO,GAAP,IAAc,QAAd,GAAyB,GAAzB,GAA+B,EAArC;;AADsB,8GAEhB,GAFgB,EAEX,OAFW;;AAItB,cAAK,cAAL,GAAsB,IAAI,aAAG,MAAH,CAAU,OAAd,EAAtB;;AAEA,cAAK,UAAL,GAAkB,QAAQ,SAAR,IAAqB,EAAvC;AACA,cAAK,UAAL,CAAgB,cAAhB,GAAiC,MAAK,UAAL,CAAgB,cAAhB,IAAkC,WAAnE;AACA,cAAK,UAAL,CAAgB,iBAAhB,GAAoC,MAAK,UAAL,CAAgB,iBAAhB,IAAqC,WAAzE;;AAEA,YAAI,MAAK,QAAL,IAAiB,MAAK,OAA1B,EAAmC;AAC/B,kBAAK,KAAL;AACH;AAZqB;AAazB;;;;;;;;;;oCAMW,iB,EAAmB;AAC3B,gBAAI,KAAK,UAAL,CAAgB,cAAhB,IAAkC,WAAlC,IAAiD,KAAK,UAAL,CAAgB,iBAAhB,IAAqC,WAA1F,EAAuG;AACnG,qBAAK,OAAL,CAAa,WAAb,CAAyB,KAAK,cAAL,CAAoB,YAApB,CAAiC,iBAAjC,CAAzB;AACH,aAFD,MAEO;AACH,qBAAK,OAAL,CAAa,WAAb,CAAyB,KAAK,cAAL,CAAoB,YAApB,CAAiC,iBAAjC,EAAoD,KAAK,UAAzD,CAAzB;AACH;AACJ;;;;;;;;;;gCAOO;AAAA;;AAEJ,yGAAmB;AACf,uBAAO,IAAP;AACH;;AAED,6BAAE,GAAF,CAAM,KAAK,IAAX,EACI,KAAK,OADT,EAEI,UAAC,CAAD,EAAO;AACH,uBAAK,WAAL,CAAiB,CAAjB;AACA,uBAAK,YAAL;AACH,aALL,EAKO,MALP,EAKe,IALf,CAMI,YAAY;AACR,qBAAK,OAAL,GAAe,KAAf;AACH,aARL;;AAWA,mBAAO,KAAP;AACH;;;;;;;;;;wCAOe,C,EAAG;AACf,8GAAsB,CAAtB;AACA,iBAAK,OAAL,CAAa,WAAb,CAAyB,KAAK,cAAL,CAAoB,YAApB,CAAiC,CAAjC,EAAoC,KAAK,UAAzC,CAAzB;AACH;;;;;;AAGL,GAAG,sBAAH,GAA4B,sBAA5B;kBACe,sB;;;;;;;;;;;;;ACxGf;;;;AACA;;;;AACA;;IAAY,Q;;AACZ;;;;AACA;;;;AACA;;;;;;;;;;;;;;;;;AACA,IAAM,KAAK,uBAAQ,QAAR,CAAX;;;;;;;IAMM,kB;;;;;;;;;;;;;;;;;;;;;;AAmBF,gCAAY,GAAZ,EAAiB,OAAjB,EAA0B;AAAA;;AAAA,2GAChB,GADgB,EACX,OADW;;AAEtB,eAAK,OAAL,GAAe,IAAI,aAAG,MAAH,CAAU,cAAd,CAA6B,EAAC,KAAK,OAAK,GAAL,IAAY,EAAZ,GAAiB,SAAjB,GAA6B,OAAK,GAAxC,EAA7B,CAAf;;AAEA,eAAK,OAAL,GAAe,IAAI,aAAG,KAAH,CAAS,IAAb,CAAkB;AAC7B,oBAAQ,OAAK,OADgB;AAE7B,qBAAS,OAAK,OAFe;AAG7B,qBAAS,OAAK,OAHe;AAI7B,2BAAe,OAAK,cAJS;AAK7B,2BAAe,OAAK,cALS;AAM7B,oBAAQ,OAAK;AANgB,SAAlB,CAAf;;AASA,gBAAQ,QAAR,GAAmB,OAAO,QAAQ,QAAf,IAA2B,SAA3B,GAAuC,QAAQ,QAA/C,GAA0D,KAA7E;;AAEA,eAAK,WAAL,GAAmB,IAAI,aAAG,MAAH,CAAU,QAAd,EAAnB;AACA,eAAK,aAAL,GAAqB,IAArB;;AAEA,eAAK,gBAAL;;AAEA,YAAI,QAAQ,QAAZ,EAAsB;AAClB,+BAAS,kBAAT;AACH;AAtBqB;AAuBzB;;;;;;;;;;yCAMgB,iB,EAAmB;AAChC,gBAAI,UAAU,KAAK,GAAnB;;AAEA,gBAAI,QAAQ,QAAQ,MAAR,GAAiB,CAAzB,MAAgC,GAApC,EAAyC;AACrC,2BAAW,GAAX;AACH;;AAED,uBAAW,2BAAX;;AAEA,gBAAI,QAAQ,IAAZ;AACA,gBAAI,oGAAJ;;AAEA,6BAAE,GAAF,CAAM,OAAN,EAAe,EAAf,EAAmB,UAAU,CAAV,EAAa;AAC5B,oBAAI,UAAU,SAAS,oBAAT,CAA8B,CAA9B,CAAd;AACA,+BAAe,IAAf,CAAoB,KAApB,EAA2B,OAA3B;AACH,aAHD,EAGG,MAHH;AAIH;;;qCAGY,W,EAAa;AACtB,gBAAI,CAAC,KAAK,OAAV,EAAmB;AACf;AACH;;AAED,gBAAI,UAAU,KAAK,GAAnB;;AAEA,gBAAI,QAAQ,QAAQ,MAAR,GAAiB,CAAzB,KAA+B,GAAnC,EAAwC;AACpC,2BAAW,GAAX;AACH;;AAED,uBAAW,qBAAX;;AAEA,gBAAI,QAAQ,IAAZ;;AAEA,gBAAI,KAAK,aAAL,IAAsB,IAA1B,EAAgC;AAC5B,qBAAK,aAAL,CAAmB,KAAnB;AACH;;AAED,iBAAK,aAAL,GAAqB,iBAAE,GAAF,CAAM,OAAN,EAAe,WAAf,EAA4B,UAAU,CAAV,EAAa;AAAA;AAAA;AAAA;;AAAA;AAC1D,yCAAc,EAAE,SAAF,CAAd,8HAA4B;AAAA,4BAAnB,CAAmB;;;AAExB,4BAAI,YAAY,kCAAhB;;AAEA,6BAAK,IAAI,CAAT,IAAc,EAAE,YAAF,CAAd,EAA+B;AAC3B,gCAAI,EAAE,YAAF,EAAgB,cAAhB,CAA+B,CAA/B,CAAJ,EAAuC;AACnC,oCAAI,UAAU,EAAE,YAAF,EAAgB,CAAhB,CAAd;;AAEA,oCAAI,WAAW,IAAX,IAAmB,QAAQ,QAAR,GAAmB,WAAnB,MAAoC,MAA3D,EAAmE;AAC/D;AACH;;AAED,oCAAI,OAAO,CAAX;AACA,oCAAI,KAAK,MAAL,GAAc,EAAlB,EAAsB;AAClB,2CAAO,KAAK,KAAL,CAAW,CAAX,EAAc,EAAd,IAAoB,KAA3B;AACH;;AAED,0DAAwB,IAAxB,iBAAwC,OAAxC;AACH;AACJ;;AAED,qCAAa,UAAb;;AAEA,2CAAS,yBAAT,CAAmC,MAAM,WAAN,CAAkB,WAAlB,CAA8B,CAA9B,CAAnC,EAAqE,KAArE,EAA4E,SAA5E,EAAuF,EAAE,WAAF,CAAvF;AACH;AAzByD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA0B7D,aA1BoB,EA0BlB,MA1BkB,EA0BV,MA1BU,CA0BH,YAAY;AAC1B,sBAAM,aAAN,GAAsB,IAAtB;AACH,aA5BoB,CAArB;AA6BH;;;;;;;;;gCAMO,CACP;;;;;;;;;4BAMY;AACT;AACH;;;;;;AAEL,GAAG,kBAAH,GAAwB,kBAAxB;kBACe,kB;;;;;;;;;;;;;;;;;AChJf;;;;AACA;;;;AACA;;;;AACA;;;;AACA;;;;AACA;;;;;;;;;;;;AACA,IAAI,KAAK,uBAAQ,QAAR,CAAT;;AAGA,SAAS,gBAAT,CAA0B,OAA1B,EAAmC,YAAnC,EAAiD,aAAjD,EAAgE,aAAhE,EAA+E;AAC3E;;;;AAGA,QAAI,cAAc,CAAlB;AACA,QAAI,OAAO,OAAP,IAAkB,QAAtB,EAAgC;AAC5B;AACH;;AAED,QAAI,QAAO,YAAP,yCAAO,YAAP,MAAuB,QAA3B,EAAqC;AACjC,qBAAa,KAAb,GAAqB,OAAO,aAAa,KAApB,IAA6B,QAA7B,GAAwC,aAAa,KAArD,GAA6D,CAAlF;AACA,qBAAa,KAAb,GAAqB,OAAO,aAAa,KAApB,IAA6B,QAA7B,GAAwC,aAAa,KAArD,GAA6D,KAAlF;AACA;AACH;;AAED,QAAI,QAAO,aAAP,yCAAO,aAAP,MAAwB,QAA5B,EAAsC;AAClC,sBAAc,WAAd,GAA4B,cAAc,WAAd,IAA6B,OAAzD;;AAEA,YAAI,OAAO,cAAc,SAArB,IAAkC,WAAtC,EAAmD;AAC/C,0BAAc,SAAd,GAA0B,EAA1B;AACH;;AAED;AACH;;AAED,QAAI,QAAO,aAAP,yCAAO,aAAP,MAAwB,QAA5B,EAAsC;AAClC,sBAAc,WAAd,GAA4B,cAAc,WAAd,IAA6B,OAAzD;AACA,sBAAc,YAAd,GAA6B,cAAc,YAAd,IAA8B,CAA3D;AACA,sBAAc,YAAd,GAA6B,cAAc,YAAd,IAA8B,KAA3D;;AAGA,YAAI,OAAO,cAAc,SAArB,IAAkC,WAAtC,EAAmD;AAC/C,0BAAc,SAAd,GAA0B,EAA1B;AACH;;;AAGD,aAAK,IAAI,IAAI,CAAb,EAAgB,IAAI,cAAc,SAAd,CAAwB,MAA5C,EAAoD,GAApD,EAAyD;AACrD,gBAAI,cAAc,SAAd,CAAwB,CAAxB,EAA2B,MAA3B,IAAqC,CAAzC,EAA4C;AACxC,8BAAc,SAAd,CAAwB,CAAxB,EAA2B,IAA3B,CAAgC,CAAhC;AACH;AACJ;;AAED;AACH;;AAED,QAAI,cAAc,CAAlB,EAAqB;AACjB,cAAM,sCAAN;AACH;AACJ;;;;;;;;;;;;;;;;;;;;;;;;AAwBD,SAAS,WAAT,CAAqB,OAArB,EAA8B,YAA9B,EAA4C,aAA5C,EAA2D,aAA3D,EAA0E;AACtE;;AACA,qBAAiB,OAAjB,EAA0B,YAA1B,EAAwC,aAAxC,EAAuD,aAAvD;;AAEA,QAAI,eAAe,sDAAnB;;AAEA,QAAI,OAAJ,EAAa;AACT,eAAO,IAAI,aAAG,KAAH,CAAS,KAAb,CAAmB;AACtB,mBAAO,IAAI,aAAG,KAAH,CAAS,IAAb,CAAkB,EAAC,KAAK,eAAe,OAArB,EAAlB;AADe,SAAnB,CAAP;AAGH,KAJD,MAIO,IAAI,YAAJ,EAAkB;AACrB,eAAO,IAAI,aAAG,KAAH,CAAS,KAAb,CAAmB;AACtB,oBAAQ,IAAI,aAAG,KAAH,CAAS,MAAb,CAAoB;AACxB,uBAAO,aAAa,KADI;AAExB,uBAAO,aAAa;AAFI,aAApB;AADc,SAAnB,CAAP;AAMH,KAPM,MAOA,IAAI,aAAJ,EAAmB;AACtB,eAAO,UAAU,OAAV,EAAmB;AACtB,gBAAI,aAAa,QAAQ,aAAR,GAAwB,cAAc,IAAtC,CAAjB;AACA,gBAAI,UAAU,eAAe,cAAc,WAA3C;;AAEA,iBAAK,IAAI,IAAI,CAAb,EAAgB,IAAI,cAAc,SAAd,CAAwB,MAA5C,EAAoD,GAApD,EAAyD;AACrD,oBAAI,WAAW,cAAc,SAAd,CAAwB,CAAxB,CAAf;;AAEA,oBAAI,WAAW,IAAX,GAAkB,iBAAlB,MAAyC,SAAS,CAAT,EAAY,IAAZ,GAAmB,iBAAnB,EAA7C,EAAqF;AACjF,8BAAU,eAAe,SAAS,CAAT,CAAzB;AACA;AACH;AACJ;;AAED,mBAAO,CAAC,IAAI,aAAG,KAAH,CAAS,KAAb,CAAmB;AACvB,uBAAO,IAAI,aAAG,KAAH,CAAS,IAAb,CAAkB,EAAC,KAAK,OAAN,EAAlB;AADgB,aAAnB,CAAD,CAAP;AAGH,SAhBD;AAiBH,KAlBM,MAkBA,IAAI,aAAJ,EAAmB;AACtB,eAAO,UAAU,OAAV,EAAmB;AACtB,gBAAI,aAAa,QAAQ,aAAR,GAAwB,cAAc,IAAtC,CAAjB;AACA,gBAAI,OAAO,cAAc,YAAd,IAA8B,KAAzC;AACA,gBAAI,QAAQ,cAAc,YAAd,IAA8B,CAA1C;;AAEA,iBAAK,IAAI,IAAI,CAAb,EAAgB,IAAI,cAAc,SAAd,CAAwB,MAA5C,EAAoD,GAApD,EAAyD;AACrD,oBAAI,WAAW,cAAc,SAAd,CAAwB,CAAxB,CAAf;;AAEA,oBAAI,WAAW,IAAX,GAAkB,iBAAlB,MAAyC,SAAS,CAAT,EAAY,IAAZ,GAAmB,iBAAnB,EAA7C,EAAqF;AACjF,2BAAO,SAAS,CAAT,CAAP;AACA,4BAAQ,SAAS,CAAT,CAAR;AACA;AACH;AACJ;;AAED,mBAAO,CAAC,IAAI,aAAG,KAAH,CAAS,KAAb,CAAmB;AACvB,wBAAQ,IAAI,aAAG,KAAH,CAAS,MAAb,CAAoB;AACxB,2BAAO,IADiB;AAExB,2BAAO;AAFiB,iBAApB;AADe,aAAnB,CAAD,CAAP;AAMH,SArBD;AAsBH,KAvBM,MAuBA;AACH,eAAO,SAAP;AACH;AACJ;;;;;;;;;;;;;;;;;;;;;;;;AAwBD,SAAS,YAAT,CAAsB,OAAtB,EAA+B,YAA/B,EAA6C,aAA7C,EAA4D,aAA5D,EAA2E;AACvE;;AAEA,QAAI,aAAa,EAAjB;;AAEA,qBAAiB,OAAjB,EAA0B,YAA1B,EAAwC,aAAxC,EAAuD,aAAvD;;AAEA,QAAI,eAAe,sDAAnB;;AAEA,QAAI,OAAJ,EAAa;AACT,+BAAoB,eAAe,OAAnC,6CAAiF,UAAjF;AACH,KAFD,MAEO,IAAI,YAAJ,EAAkB;AACrB,uCAA6B,aAAa,KAA1C,8BAAwE,aAAa,KAArF;AACH,KAFM,MAEA,IAAI,aAAJ,EAAmB;AACtB,YAAI,UAAU,EAAd;AACA,mBAAW,MAAX;;AAFsB;AAAA;AAAA;;AAAA;AAItB,iCAAc,cAAc,SAA5B,8HAAuC;AAAA,oBAA9B,CAA8B;;AACnC,uEAAqD,EAAE,CAAF,CAArD,0BAA6E,eAAe,EAAE,CAAF,CAA5F,6CAAuI,UAAvI;AACH;AANqB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAOtB,mBAAW,4CAA0C,cAAc,WAAxD,gCACM,eAAe,cAAc,WADnC,6CACqF,UADrF,aAAX;AAEA,mBAAW,OAAX;;AAEA,eAAO,OAAP;AACH,KAZM,MAYA,IAAI,aAAJ,EAAmB;AACtB,YAAI,WAAU,EAAd;AACA,oBAAW,MAAX;AAFsB;AAAA;AAAA;;AAAA;AAGtB,kCAAe,cAAc,SAA7B,mIAAwC;AAAA,oBAA/B,EAA+B;;AACpC,4BAAW,4CAA0C,GAAG,CAAH,CAA1C,wCACe,GAAG,CAAH,CADf,8BAC6C,GAAG,CAAH,CAD7C,QAAX;AAEH;AANqB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAOtB,oBAAW,4CAA0C,cAAc,WAAxD,wCACe,cAAc,YAD7B,8BACkE,cAAc,YADhF,aAAX;AAEA,oBAAW,OAAX;;AAEA,eAAO,QAAP;AACH,KAZM,MAYA;AACH,eAAO,EAAP;AACH;AACJ;;;;;;;IAMK,iB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8CF,+BAAY,OAAZ,EAAqB;AAAA;;AACjB,YAAI,OAAO,QAAQ,OAAf,KAA2B,QAA/B,EAAyC;AACrC,kBAAM,0BAAN;AACH;;AAED,YAAI,cAAc,EAAlB;;;AAGA,YAAI,OAAO,QAAQ,KAAf,IAAwB,WAA5B,EAAyC;AACrC,oBAAQ,KAAR,GAAgB,YACZ,QAAQ,OADI,EACK,QAAQ,YADb,EAC2B,QAAQ,aADnC,EACkD,QAAQ,aAD1D,CAAhB;AAGA,0BAAc,aACV,QAAQ,OADE,EACO,QAAQ,YADf,EAC6B,QAAQ,aADrC,EACoD,QAAQ,aAD5D,CAAd;AAGH;;AAED,gBAAQ,MAAR,GAAiB,QAAO,QAAQ,MAAf,KAAyB,QAAzB,GAAoC,QAAQ,MAA5C,GAAqD,EAAtE;AACA,yBAAE,MAAF,CAAS,QAAQ,MAAjB,EAAyB,EAAC,QAAQ,MAAT,EAAiB,UAAU,QAAQ,OAAnC,EAAzB;;;;AAlBiB,yGAoBX,gDApBW,EAoBuC,OApBvC;;AAuBjB,cAAK,gBAAL,CAAsB,WAAtB;;AAEA,gBAAQ,QAAR,GAAmB,OAAO,QAAQ,QAAf,IAA2B,SAA3B,GAAuC,QAAQ,QAA/C,GAA0D,IAA7E;;AAEA,YAAI,QAAQ,QAAZ,EAAsB;AAClB,+BAAS,cAAT,QAA8B,UAAU,KAAV,EAAiB;AAC3C,uBAAO,yEAAuE,MAAM,aAAN,CAAvE,8CAAP;AAEH,aAHD;AAIH;AAhCgB;AAiCpB;;;;;;;;;;;;;;;;6CAYoB,M,EAAQ,S,EAAW;AACpC,8GAA2B,MAA3B,EAAmC,SAAnC;AACA,gBAAI,YAAY,IAAI,aAAG,IAAH,CAAQ,KAAZ,CAAkB,CAAC,OAAO,IAAR,EAAc,OAAO,IAArB,CAAlB,CAAhB;AACA,sBAAU,SAAV,CAAoB,KAAK,MAAzB,EAAiC,WAAjC;AACA,gBAAI,uBAAuB,UAAU,cAAV,EAA3B;AACA,gBAAI,aAAa,IAAI,aAAG,IAAH,CAAQ,KAAZ,CAAkB,CAAC,OAAO,IAAR,EAAc,OAAO,IAArB,CAAlB,CAAjB;AACA,uBAAW,SAAX,CAAqB,KAAK,MAA1B,EAAkC,WAAlC;AACA,gBAAI,wBAAwB,WAAW,cAAX,EAA5B;;AAEA,6BAAE,MAAF,CAAS,KAAK,aAAd,EACI;AACI,mBAAG,qBAAqB,CAArB,CADP;AAEI,mBAAG,sBAAsB,CAAtB,CAFP;AAGI,mBAAG,qBAAqB,CAArB,CAHP;AAII,mBAAG,sBAAsB,CAAtB;AAJP,aADJ;AAOH;;;;;;AAGL,GAAG,iBAAH,GAAuB,iBAAvB;kBACe,iB;;;;;;;;QC1DC,iC,GAAA,iC;QA0FA,oB,GAAA,oB;;AApWhB;;;;AACA;;;;;;;;;;;;;;;AACA,IAAM,KAAK,uBAAQ,yBAAR,CAAX;;;;;;;;;;;;;;;;AAgBA,SAAS,iBAAT,CAA2B,UAA3B,EAAuC,OAAvC,EAAgD;AAC5C;;AAEA,qBAAe,WAAW,CAAX,CAAf,SAAgC,WAAW,CAAX,CAAhC,SAAiD,WAAW,CAAX,CAAjD,SAAkE,OAAlE;AACH;;;;;;;AAOD,SAAS,UAAT,CAAoB,GAApB,EAAyB;AACrB,WAAO,OAAO,GAAP,EACF,OADE,CACM,IADN,EACY,OADZ,EAEF,OAFE,CAEM,IAFN,EAEY,QAFZ,EAGF,OAHE,CAGM,IAHN,EAGY,OAHZ,EAIF,OAJE,CAIM,IAJN,EAIY,MAJZ,EAKF,OALE,CAKM,IALN,EAKY,MALZ,CAAP;AAMH;;AAED,GAAG,UAAH,GAAgB,UAAhB;;IAGM,Y;;;;;;;AAOF,sBAAY,SAAZ,EAAuB,OAAvB,EAAgC;AAAA;;AAC5B,SAAK,SAAL,GAAiB,SAAjB;AACA,SAAK,OAAL,GAAe,OAAf;AACA,SAAK,OAAL,GAAe,SAAf;AACA,SAAK,UAAL,GAAkB,EAAlB;AACH,C;;IAGC,W;;;AACF,yBAAY,SAAZ,EAAuB,OAAvB,EAAgC;AAAA;;AAAA,oGACtB,SADsB,EACX,OADW;;AAE5B,gBAAQ,OAAK,SAAL,CAAe,MAAf,CAAR;AACI,iBAAK,SAAL;AACI,oBAAI,aAAa,kBAAkB,OAAK,SAAL,CAAe,KAAjC,EAAwC,OAAK,OAA7C,CAAjB;AACA,oBAAI,aAAa,kBAAkB,OAAK,SAAL,CAAe,OAAf,CAAuB,KAAzC,EAAgD,OAAK,OAArD,CAAjB;AACA,oBAAI,eAAe,OAAK,SAAL,CAAe,OAAf,CAAuB,KAA1C;AACA,oBAAI,SAAS,OAAK,SAAL,CAAe,IAA5B;;AAGA,uBAAK,OAAL,GAAe,IAAI,aAAG,KAAH,CAAS,KAAb,CAAmB;AAC9B,2BAAO,IAAI,aAAG,KAAH,CAAS,MAAb,CAAoB;AACvB,gCAAQ,MADe;AAEvB,8BAAM,IAAI,aAAG,KAAH,CAAS,IAAb,CAAkB;AACpB,mCAAO;AADa,yBAAlB,CAFiB;AAKvB,gCAAQ,IAAI,aAAG,KAAH,CAAS,MAAb,CAAoB,EAAC,OAAO,UAAR,EAAoB,OAAO,YAA3B,EAApB;AALe,qBAApB;AADuB,iBAAnB,CAAf;AASA,uBAAK,UAAL,sDAAmE,UAAnE;AACA;AACJ,iBAAK,SAAL;AACI,uBAAK,OAAL,GAAe,IAAI,aAAG,KAAH,CAAS,KAAb,CAAmB;AAC9B,2BAAO,IAAI,aAAG,KAAH,CAAS,IAAb,CAAkB,EAAC,gCAA8B,OAAK,SAAL,CAAe,WAAf,CAA/B,EAAlB;AADuB,iBAAnB,CAAf;AAGA,uBAAK,UAAL,8EAA2F,OAAK,SAAL,CAAe,WAAf,CAA3F;AACA;AACJ;AACI,wBAAQ,GAAR,CAAY,OAAK,SAAjB;AACA,sBAAM,+CAA+C,OAAK,SAAL,CAAe,MAAf,CAArD;AA3BR;AAF4B;AA+B/B;;;EAhCqB,Y;;IAmCpB,U;;;AACF,wBAAY,SAAZ,EAAuB,OAAvB,EAAgC;AAAA;;AAAA,mGACtB,SADsB,EACX,OADW;;AAE5B,gBAAQ,OAAK,SAAL,CAAe,MAAf,CAAR;AACI,iBAAK,SAAL;AACI,oBAAI,aAAa,kBAAkB,OAAK,SAAL,CAAe,KAAjC,EAAwC,OAAK,OAA7C,CAAjB;AACA,oBAAI,YAAY,OAAK,SAAL,CAAe,KAA/B;;AAEA,uBAAK,OAAL,GAAe,IAAI,aAAG,KAAH,CAAS,KAAb,CAAmB;AAC9B,4BAAQ,IAAI,aAAG,KAAH,CAAS,MAAb,CAAoB;AACxB,+BAAO,UADiB;;AAGxB,+BAAO;AAHiB,qBAApB;AADsB,iBAAnB,CAAf;;AAQA,uBAAK,UAAL;AACA,uBAAK,UAAL;AACA,uBAAK,UAAL,2BAAwC,UAAxC;AACA,uBAAK,UAAL;AACA,uBAAK,UAAL;AACA,uBAAK,UAAL;AACA,uBAAK,UAAL;AACA,uBAAK,UAAL;AACA,uBAAK,UAAL;AACA;AACJ;AACI,wBAAQ,GAAR,CAAY,OAAK,SAAjB;AACA,sBAAM,8CAA8C,OAAK,SAAL,CAAe,MAAf,CAApD;AAzBR;AAF4B;AA6B/B;;;EA9BoB,Y;;IAiCnB,a;;;AACF,2BAAY,SAAZ,EAAuB,OAAvB,EAAgC;AAAA;;AAAA,sGACtB,SADsB,EACX,OADW;;AAE5B,gBAAQ,OAAK,SAAL,CAAe,MAAf,CAAR;AACI,iBAAK,SAAL;AACI,oBAAI,aAAa,kBAAkB,OAAK,SAAL,CAAe,KAAjC,EAAwC,OAAK,OAA7C,CAAjB;AACA,oBAAI,aAAa,kBAAkB,OAAK,SAAL,CAAe,OAAf,CAAuB,KAAzC,EAAgD,OAAK,OAArD,CAAjB;AACA,oBAAI,eAAe,OAAK,SAAL,CAAe,OAAf,CAAuB,KAA1C;;AAEA,uBAAK,OAAL,GAAe,IAAI,aAAG,KAAH,CAAS,KAAb,CAAmB;AAC9B,4BAAQ,IAAI,aAAG,KAAH,CAAS,MAAb,CAAoB;AACxB,+BAAO,UADiB;;AAGxB,+BAAO;AAHiB,qBAApB,CADsB;AAM9B,0BAAM,IAAI,aAAG,KAAH,CAAS,IAAb,CAAkB;AACpB,+BAAO;AADa,qBAAlB;AANwB,iBAAnB,CAAf;;AAWA,uBAAK,UAAL;AACA,uBAAK,UAAL;AACA,uBAAK,UAAL,2BAAwC,UAAxC;AACA,uBAAK,UAAL,uBAAoC,UAApC;AACA,uBAAK,UAAL;AACA,uBAAK,UAAL;AACA,uBAAK,UAAL;AACA,uBAAK,UAAL;AACA,uBAAK,UAAL;AACA,uBAAK,UAAL;AACA;;AAEJ;AACI,wBAAQ,GAAR,CAAY,OAAK,SAAjB;AACA,sBAAM,6CAA6C,OAAK,SAAL,CAAe,MAAf,CAAnD;AA/BR;AAF4B;AAmC/B;;;EApCuB,Y;;IAuCtB,e,GACF,yBAAY,YAAZ,EAA0B;AAAA;;AACtB,SAAK,OAAL,GAAe,CAAC,OAAO,aAAa,aAAb,EAA4B,cAA5B,KAA+C,CAAtD,CAAD,IAA6D,GAA5E;AACA,SAAK,QAAL,GAAgB,aAAa,aAAb,EAA4B,UAA5B,CAAhB;AACA,SAAK,OAAL,GAAe,SAAf;AACA,SAAK,UAAL,GAAkB,EAAlB;AACH,C;;IAGC,Y;;;;;;;;;AAMF,0BAAY,YAAZ,EAA0B,WAA1B,EAAuC;AAAA;;AAAA,qGAC7B,YAD6B;;AAEnC,eAAK,MAAL,GAAc,OAAK,QAAL,CAAc,QAAd,CAAd;AACA,YAAI,YAAY,IAAI,WAAJ,CAAgB,OAAK,MAArB,EAA6B,OAAK,OAAlC,CAAhB;AACA,eAAK,OAAL,GAAe,UAAU,OAAzB;AACA,eAAK,UAAL,GAAkB,UAAU,UAA5B;AALmC;AAMtC;;;EAZsB,e;;IAerB,iB;;;;;;;;;AAMF,+BAAY,YAAZ,EAA0B,WAA1B,EAAuC;AAAA;;AAAA,0GAC7B,YAD6B;;AAEnC,eAAK,gBAAL,GAAwB,OAAK,QAAL,CAAc,kBAAd,CAAxB;AACA,eAAK,YAAL,GAAoB,OAAK,QAAL,CAAc,QAAd,CAApB;AACA,eAAK,aAAL,GAAqB,OAAK,QAAL,CAAc,eAAd,CAArB;;AAGA,YAAI,OAAK,aAAT,EAAwB;AACpB,gBAAI,YAAY,IAAI,WAAJ,CAAgB,OAAK,aAArB,EAAoC,OAAK,OAAzC,CAAhB;AACA,mBAAK,YAAL,GAAoB,UAAU,OAA9B;AACA,mBAAK,gBAAL,GAAwB,wCAAsC,WAAW,OAAK,QAAL,CAAc,cAAd,CAAX,CAAtC,eAA2F,UAAU,UAA7H;AACH,SAJD,MAIO;AACH,mBAAK,YAAL,GAAoB,SAApB;AACA,mBAAK,gBAAL,GAAwB,OAAxB;AACH;;AAED,eAAK,UAAL,GAAkB,EAAlB;AACA,eAAK,UAAL,GAAkB,EAAlB;AACA,eAAK,WAAL,GAAmB,EAAnB;AACA,eAAK,mBAAL,GAA2B,EAA3B;;AAnBmC;AAAA;AAAA;;AAAA;AAqBnC,iCAAsB,OAAK,gBAA3B,8HAA6C;AAAA,oBAApC,SAAoC;;AACzC,uBAAK,UAAL,CAAgB,IAAhB,CAAqB,UAAU,OAAV,CAArB;AACA,uBAAK,UAAL,CAAgB,IAAhB,CAAqB,UAAU,OAAV,CAArB;AACA,oBAAI,YAAY,IAAI,WAAJ,CAAgB,UAAU,MAA1B,EAAkC,OAAK,OAAvC,CAAhB;AACA,uBAAK,WAAL,CAAiB,IAAjB,CAAsB,wCAAsC,WAAW,UAAU,OAAV,CAAX,CAAtC,eAAgF,UAAU,UAAhH;AACA,uBAAK,mBAAL,CAAyB,UAAU,OAAV,CAAzB,IAA+C,UAAU,OAAzD;AACH;AA3BkC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AA6BnC,YAAI,cAAJ;;AAEA,eAAK,OAAL,GAAe,UAAU,OAAV,EAAmB,UAAnB,EAA+B;AAC1C,gBAAI,kBAAkB,QAAQ,aAAR,EAAtB;AACA,gBAAI,gBAAgB,gBAAgB,MAAM,YAAtB,CAApB;;AAEA,gBAAI,oBAAJ;AACA,gBAAI,MAAM,mBAAN,CAA0B,aAA1B,MAA6C,SAAjD,EAA4D;AACxD,8BAAc,CAAC,MAAM,mBAAN,CAA0B,aAA1B,CAAD,CAAd;AACH,aAFD,MAEO;AACJ,8BAAc,CAAC,MAAM,YAAP,CAAd;AACF;;AAED,mBAAO,WAAP;AACH,SAZD;;AAcA,YAAI,OAAK,gBAAL,KAA0B,IAA9B,EAAoC;AAChC,mBAAK,WAAL,CAAiB,IAAjB,CAAsB,OAAK,gBAA3B;AACH;;AAED,eAAK,UAAL,GAAkB,MAAlB;AAjDmC;AAAA;AAAA;;AAAA;AAkDnC,kCAAc,OAAK,WAAnB,mIAAgC;AAAA,oBAAvB,CAAuB;;AAC5B,uBAAK,UAAL,aAA0B,CAA1B;AACH;AApDkC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAqDnC,eAAK,UAAL,IAAmB,OAAnB;AArDmC;AAsDtC;;;EA5D2B,e;;;;;;;;;;;;;;;;AA+EzB,SAAS,iCAAT,CAA2C,YAA3C,EAAyD;AAC5D;;AACA,QAAI,WAAW,aAAa,aAAb,EAA4B,UAA5B,CAAf;AACA,QAAI,kBAAkB,IAAtB;;AAEA,YAAQ,SAAS,MAAT,CAAR;AACI,aAAK,QAAL;AACI,oBAAQ,aAAa,cAAb,CAAR;AACI,qBAAK,mBAAL;AACI,sCAAkB,IAAI,YAAJ,CAAiB,YAAjB,EAA+B,WAA/B,CAAlB;AACA;AACJ,qBAAK,sBAAL;AACI,sCAAkB,IAAI,YAAJ,CAAiB,YAAjB,EAA+B,UAA/B,CAAlB;AACA;AACJ,qBAAK,qBAAL;AACI,sCAAkB,IAAI,YAAJ,CAAiB,YAAjB,EAA+B,aAA/B,CAAlB;AACA;AACJ;AACI,4BAAQ,GAAR,CAAY,YAAZ;AACA,0BAAM,aAAa,cAAb,IAA+B,cAArC;AAZR;AAcA;AACJ,aAAK,aAAL;AACI,oBAAQ,aAAa,cAAb,CAAR;AACI,qBAAK,mBAAL;AACI,sCAAkB,IAAI,iBAAJ,CAAsB,YAAtB,EAAoC,WAApC,CAAlB;AACA;AACJ,qBAAK,sBAAL;AACI,sCAAkB,IAAI,iBAAJ,CAAsB,YAAtB,EAAoC,UAApC,CAAlB;AACA;AACJ,qBAAK,qBAAL;AACI,sCAAkB,IAAI,iBAAJ,CAAsB,YAAtB,EAAoC,aAApC,CAAlB;AACA;AACJ;AACI,4BAAQ,GAAR,CAAY,YAAZ;AACA,0BAAM,aAAa,cAAb,IAA+B,cAArC;AAZR;AAcA;AACJ;AACI,kBAAM,gCAAgC,SAAS,MAAT,CAAtC;AAlCR;;AAqCA,QAAI,mBAAmB,IAAvB,EAA6B;AACzB,eAAO,EAAC,OAAO,SAAR,EAAmB,QAAQ,EAA3B,EAAP;AACH,KAFD,MAEO;AACH,eAAO,EAAC,OAAO,gBAAgB,OAAxB,EAAiC,QAAQ,gBAAgB,UAAzD,EAAP;AACH;AACJ;;AAED,GAAG,iCAAH,GAAuC,iCAAvC;;;;;;;;AAQA,SAAS,oBAAT,CAA8B,SAA9B,EAAyC,SAAzC,EAAoD;;AAGhD,gBAAY,OAAO,SAAP,IAAoB,SAApB,GAAgC,SAAhC,GAA4C,KAAxD;AACA,QAAI,YAAY,UAAU,WAAV,CAAhB;AACA,QAAI,cAAc,UAAU,QAAV,CAAlB;AACA,QAAI,aAAa,EAAjB;;AAEA,QAAI,YAAY,MAAZ,IAAsB,CAA1B,EAA6B;AACzB,gGAAsF,YAAY,CAAZ,EAAe,WAAf,CAAtF;AACH,KAFD,MAEO;AACH,sBAAc,gFAAd;AACA,aAAK,IAAI,IAAI,CAAb,EAAgB,IAAI,YAAY,MAAhC,EAAwC,GAAxC,EAA6C;AACzC;AACA,kEAAoD,WAAW,YAAY,CAAZ,EAAe,OAAf,CAAX,CAApD;AACA,qGAAuF,YAAY,CAAZ,EAAe,WAAf,CAAvF;AACA;AACH;AACD,sBAAc,OAAd;AACH;;AAED,QAAI,CAAC,SAAL,EAAgB;AACZ,qBAAa,wCAAsC,SAAtC,eAA2D,UAAxE;AACH;;AAED,WAAO,UAAP;AACH;;;;;;;AAOM,SAAS,oBAAT,CAA8B,YAA9B,EAA4C;AAC/C;;AAEA,QAAI,gBAAgB,EAApB;;AAEA,QAAI,SAAS,aAAa,QAAb,CAAb;;AAEA,QAAI,OAAO,MAAP,IAAiB,CAArB,EAAwB;AACpB,yBAAiB,qBAAqB,OAAO,CAAP,CAArB,EAAgC,IAAhC,CAAjB;AACH,KAFD,MAEO;AACH,yBAAiB,MAAjB;AACA,aAAK,IAAI,IAAI,CAAb,EAAgB,IAAI,OAAO,MAA3B,EAAmC,GAAnC,EAAwC;AACpC,6BAAiB,SAAS,qBAAqB,OAAO,CAAP,CAArB,CAAT,GAA2C,OAA5D;AACH;AACD,yBAAiB,OAAjB;AACH;;AAED,WAAO,aAAP;AACH;;AAED,GAAG,oBAAH,GAA0B,oBAA1B;;;;;;;;;;;;;;ACxXA;;;;;;;;AACA,IAAM,KAAK,uBAAQ,WAAR,CAAX;;;;;;IAMM,kB;;;;;;;AAMF,gCAAY,OAAZ,EAAqB;AAAA;;AACjB,aAAK,IAAL,GAAY,SAAZ;AACA,aAAK,YAAL,GAAoB,KAApB;AACA,aAAK,QAAL,GAAgB,OAAhB;AACH;;;;;;;;;;;6BAOI,M,EAAQ;AACT,gBAAI,CAAC,KAAK,YAAV,EAAwB;AACpB,qBAAK,IAAL,GAAY,MAAZ;AACA,qBAAK,YAAL,GAAoB,IAApB;;AAEA,uBAAO,KAAP;AACH;;AAED,mBAAO,IAAP;AACH;;;;;;;;;;;;;;;qCAsBY;AACT,gBAAI,CAAC,KAAK,WAAV,EAAuB;AACnB,oBAAI,MAAS,KAAK,QAAd,4BAAJ;AACA,sBAAM,GAAN;AACA,wBAAQ,GAAR,CAAY,GAAZ;AACA,sBAAM,GAAN;AACH;AACJ;;;;;;;;oCAKU;AACP,iBAAK,UAAL;AACH;;;4BA9BS;AACN,mBAAO,KAAK,IAAZ;AACH;;;;;;;;;4BAMiB;AACd,mBAAO,KAAK,YAAZ;AACH;;;;;;AAsBL,GAAG,kBAAH,GAAwB,kBAAxB;kBACe,kB;;;;;;;;;ACvEf;;;;;;;;;;kBAMe,0B;;;;;;;;;;;;;;;ACLf;;;;AACA;;;;AACA;;IAAY,Y;;AACZ;;;;AACA;;;;;;;;;;;;;;;;AACA,IAAM,KAAK,uBAAQ,WAAR,CAAX;;;;;;;IAMM,U;;;;;;;AAKF,0BAAc;AAAA;;AAAA,mGACJ,UADI;;AAEV,eAAK,cAAL,GAAsB,EAAtB;AACA,eAAK,cAAL,GAAsB,EAAtB;AACA,eAAK,SAAL,GAAiB,EAAjB;AACA,eAAK,YAAL,GAAoB,EAApB;;AAEA,eAAK,iBAAL,GAAyB,EAAzB;AACA,eAAK,uBAAL,GAA+B,EAA/B;AACA,eAAK,sBAAL,GAA8B,EAA9B;AACA,eAAK,uBAAL,GAA+B,EAA/B;AACA,eAAK,uBAAL,GAA+B,EAA/B;;AAEA,eAAK,UAAL,GAAkB,SAAlB;AACA,eAAK,UAAL,GAAkB,SAAlB;AAdU;AAeb;;;;;;;;;;6BAMI,M,EAAQ;AACT,2FAAe,MAAf,GAAwB;AACpB;AACH;;AAED,gBAAI,QAAQ,IAAZ;;AAEA,iBAAK,GAAL,CAAS,OAAT,GAAmB,EAAnB,CAAsB,CAAC,eAAD,EAAkB,mBAAlB,CAAtB,EAA8D,UAAU,CAAV,EAAa;;AAEvE,sBAAM,gBAAN;;;AAGA,qBAAK,IAAI,IAAI,CAAb,EAAgB,IAAI,MAAM,SAAN,CAAgB,MAApC,EAA4C,GAA5C,EAAiD;AAC7C,0BAAM,cAAN,CAAqB,MAAM,SAAN,CAAgB,CAAhB,CAArB,EAAyC,CAAzC,EAA4C,EAAE,IAA9C;AACH;;;AAGD,qBAAK,IAAI,KAAI,CAAb,EAAgB,KAAI,MAAM,iBAAN,CAAwB,MAA5C,EAAoD,IAApD,EAAyD;AACrD,0BAAM,mBAAN,CAA0B,EAA1B,EAA6B,EAAE,IAA/B;AACH;AACJ,aAbD;AAcH;;;2CAEkB;AACf,gBAAI,UAAU,KAAK,GAAL,CAAS,OAAT,EAAd;AACA,iBAAK,UAAL,GAAkB,QAAQ,OAAR,EAAlB;;AAEA,gBAAI,cAAc,QAAQ,eAAR,CAAwB,KAAK,GAAL,CAAS,OAAT,EAAxB,CAAlB;;AAEA,iBAAK,UAAL,GAAkB;AACd,sBAAM,YAAY,CAAZ,CADQ;AAEd,sBAAM,YAAY,CAAZ,CAFQ;AAGd,sBAAM,YAAY,CAAZ,CAHQ;AAId,sBAAM,YAAY,CAAZ;AAJQ,aAAlB;AAMH;;;;;;;;;;;;;;;;uCAmBc,G,EAAK,K,EAAO,S,EAAW;AAAA;;AAElC,gBAAI,aAAa,eAAb,CAA6B,GAA7B,KAAqC,aAAa,eAAb,CAA6B,KAA7B,CAAzC,EAA8E;AAC1E,sBAAM,6BAAN;AACH,aAFD,MAEO,IAAI,aAAa,iBAAb,CAA+B,GAA/B,KAAuC,aAAa,eAAb,CAA6B,KAA7B,CAA3C,EAAgF;AACnF,wBAAQ,KAAK,SAAL,CAAe,OAAf,CAAuB,GAAvB,CAAR;AACH,aAFM,MAEA,IAAI,aAAa,eAAb,CAA6B,GAA7B,KAAqC,aAAa,iBAAb,CAA+B,KAA/B,CAAzC,EAAgF;AACnF,sBAAM,KAAK,SAAL,CAAe,KAAf,CAAN;AACH;;;AAGD,gBAAI,KAAK,cAAL,CAAoB,KAApB,KAA8B,IAAlC,EAAwC;AACpC,6BAAa,KAAK,cAAL,CAAoB,KAApB,CAAb;AACA,qBAAK,cAAL,CAAoB,KAApB,IAA6B,IAA7B;AACH;;;AAGD,gBAAI,KAAK,cAAL,CAAoB,KAApB,KAA8B,IAA9B,IAAsC,KAAK,cAAL,CAAoB,KAApB,KAA8B,CAAxE,EAA2E;AACvE,qBAAK,cAAL,CAAoB,KAApB,EAA2B,KAA3B;AACA,qBAAK,cAAL,CAAoB,KAApB,IAA6B,IAA7B;AACH;;;AAGD,gBAAI,eAAe,wBAAY,CAAE,CAAjC;;AAEA,gBAAI,IAAI,aAAJ,CAAkB,KAAK,UAAvB,EAAmC,SAAnC,CAAJ,EAAmD;AAAA;AAC/C,wBAAI,oBAAJ,CAAyB,OAAK,UAA9B,EAA0C,OAAK,UAA/C;;AAEA,wBAAI,cAAJ;;AAEA,mCAAe,wBAAY;AACvB,iCAAS,aAAT,CAAuB,QAAvB,EAAiC,QAAjC,EAA2C;AACvC,gCAAI,aAAa,IAAjB;AACA,iCAAK,cAAL,CAAoB,QAApB,IAAgC,iBAAE,GAAF,CAC5B,SAAS,GADmB,EAE5B,SAAS,aAFmB,EAG5B,UAAU,CAAV,EAAa;;;;AAIT,yCAAS,eAAT,CAAyB,CAAzB;AACA,yCAAS,YAAT;AACH,6BAT2B,EASzB,MATyB,EASjB,IATiB,CAU5B,UAAU,KAAV,EAAiB;AACb,oCAAI,MAAM,UAAN,IAAoB,OAAxB,EAAiC;AAC7B,4CAAQ,GAAR,CAAY,QAAZ;AACA,4CAAQ,GAAR,CAAY,SAAS,GAArB;AACA,4CAAQ,GAAR,CAAY,SAAS,aAArB;AACH;AACJ,6BAhB2B,EAgBzB,MAhByB,CAiB5B,YAAY;AACR,2CAAW,cAAX,CAA0B,QAA1B,IAAsC,IAAtC;AACA,2CAAW,cAAX,CAA0B,QAA1B,IAAsC,IAAtC;AACH,6BApB2B,CAAhC;AAqBH;AACD,sCAAc,IAAd,CAAmB,KAAnB,EAA0B,GAA1B,EAA+B,KAA/B;AACH,qBA1BD;AAL+C;AAgClD,aAhCD,MAgCO;AACH,oBAAI,KAAJ;AACH;AACD,iBAAK,cAAL,CAAoB,KAApB,IAA6B,WAAW,YAAX,EAAyB,IAAI,aAA7B,CAA7B;AACH;;;;;;;;;;;4CAQmB,G,EAAK,S,EAAW,U,EAAY;;AAE5C,gBAAI,OAAO,GAAP,IAAc,WAAd,IAA6B,OAAO,UAAP,IAAqB,WAAtD,EAAkE;AAC9D,sBAAM,qDAAN;AACH;;AAED,gBAAI,OAAO,GAAP,KAAe,QAAnB,EAA4B;AACxB,sBAAM,KAAK,iBAAL,CAAuB,OAAvB,CAA+B,KAAK,uBAAL,CAA6B,UAA7B,CAA/B,CAAN;AACH;;AAED,gBAAI,MAAM,CAAV,EAAY;AACR,wBAAQ,GAAR,CAAY,oBAAZ;;AAEA;AACH;;;AAGD,gBAAI,KAAK,uBAAL,CAA6B,GAA7B,KAAqC,IAAzC,EAA+C;AAC3C,6BAAa,KAAK,uBAAL,CAA6B,GAA7B,CAAb;AACA,qBAAK,uBAAL,CAA6B,GAA7B,IAAoC,IAApC;AACH;;AAED,gBAAI,MAAM,KAAK,uBAAL,CAA6B,GAA7B,CAAV;AACA,gBAAI,UAAU,KAAK,iBAAL,CAAuB,GAAvB,CAAd;;AAEA,gBAAI,QAAQ,IAAZ;;AAEA,gBAAI,IAAI,SAAJ,CAAI,GAAY;AAChB,oBAAI,QAAQ,IAAZ,EAAkB;AACd,4BAAQ,IAAR,CAAa,GAAb,EAAkB,MAAM,UAAxB,EAAoC,MAAM,UAA1C,EAAsD,SAAtD;AACH,iBAFD,MAEO;AACH,4BAAQ,MAAM,UAAd,EAA0B,MAAM,UAAhC,EAA4C,SAA5C;AACH;AACJ,aAND;;AAQA,iBAAK,uBAAL,CAA6B,GAA7B,IAAoC,WAAW,CAAX,EAAc,KAAK,sBAAL,CAA4B,GAA5B,CAAd,CAApC;AACH;;;;;;;;;;uCAOc,G,EAAK,Y,EAAc;AAC9B,gBAAI,KAAK,SAAL,CAAe,OAAf,CAAuB,GAAvB,IAA8B,CAAC,CAAnC,EAAsC;AAClC,wBAAQ,GAAR,CAAY,mBAAmB,IAAI,IAAvB,GAA8B,cAA1C;;AAEA;AACH;AACD,iBAAK,UAAL;;AAEA,iBAAK,cAAL,CAAoB,IAApB,CAAyB,IAAzB;AACA,iBAAK,cAAL,CAAoB,IAApB,CAAyB,IAAzB;AACA,iBAAK,SAAL,CAAe,IAAf,CAAoB,GAApB;AACA,iBAAK,YAAL,CAAkB,IAAI,EAAtB,IAA4B,GAA5B;;AAEA,2BAAe,OAAO,YAAP,IAAuB,SAAvB,GAAmC,YAAnC,GAAkD,IAAjE;;AAEA,gBAAI,YAAJ,EAAkB;AACd,oBAAI,KAAK,UAAL,KAAoB,SAAxB,EAAmC;AAC/B,yBAAK,gBAAL;AACH;AACD,qBAAK,cAAL,CAAoB,GAApB,EAAyB,KAAK,SAAL,CAAe,MAAf,GAAwB,CAAjD;AACH;AACJ;;;;;;;;;;;;;;;;;;;;;;;;;oCAsBW,I,EAAM,O,EAAS,K,EAAO,Y,EAAc,U,EAAY;;AAExD,gBAAI,KAAK,iBAAL,CAAuB,OAAvB,CAA+B,IAA/B,IAAuC,CAAC,CAA5C,EAA+C;AAC3C,wBAAQ,GAAR,CAAY,yCAAZ;;AAEA;AACH;AACD,iBAAK,UAAL;AACA,gBAAI,CAAC,UAAL,EAAgB;AACZ,6BAAa,yBAAb;AACH;;AAED,iBAAK,iBAAL,CAAuB,IAAvB,CAA4B,IAA5B;AACA,iBAAK,uBAAL,CAA6B,UAA7B,IAA2C,IAA3C;AACA,iBAAK,sBAAL,CAA4B,IAA5B,CAAiC,OAAO,KAAP,IAAgB,QAAhB,GAA2B,KAA3B,GAAmC,EAApE;AACA,iBAAK,uBAAL,CAA6B,IAA7B,CAAkC,aAAa,iBAAb,CAA+B,OAA/B,IAA0C,OAA1C,GAAoD,IAAtF;AACA,iBAAK,uBAAL,CAA6B,IAA7B,CAAkC,IAAlC;;AAEA,2BAAe,OAAO,YAAP,IAAuB,SAAvB,GAAmC,YAAnC,GAAkD,IAAjE;;AAEA,gBAAI,YAAJ,EAAkB;AACd,oBAAI,KAAK,UAAL,KAAoB,SAAxB,EAAmC;AAC/B,yBAAK,gBAAL;AACH;AACD,qBAAK,mBAAL,CAAyB,KAAK,iBAAL,CAAuB,MAAvB,GAAgC,CAAzD;AACH;AACJ;;;4BAnMe;AACZ,gBAAI,CAAC,KAAK,UAAV,EAAsB;AAClB,qBAAK,gBAAL;AACH;;AAED,mBAAO,KAAK,UAAZ;AACH;;;;;;AAgML,GAAG,UAAH,GAAgB,UAAhB;kBACe,U;;;;;;;;;ACrRf;;;;;;;;;;kBAMe,2B;;;;;;;;;;;;;;;;;ACNf;;;;AACA;;;;AACA;;;;AACA;;;;AACA;;;;;;;;;;;;AAGA,IAAM,KAAK,uBAAQ,WAAR,CAAX;;IAGM,uB;;;;;;;;;;;AAUF,qCAAY,OAAZ,EAAqB,KAArB,EAA4B,UAA5B,EAAwC,cAAxC,EAAwD,aAAxD,EAAuE;AAAA;;AACnE,aAAK,OAAL,GAAe,OAAf;AACA,aAAK,KAAL,GAAa,KAAb;AACA,aAAK,UAAL,GAAkB,UAAlB;AACA,aAAK,cAAL,GAAsB,cAAtB;AACA,aAAK,YAAL,GAAoB,EAApB;AACA,aAAK,aAAL,GAAqB,OAAO,aAAP,IAAwB,QAAxB,GAAmC,aAAnC,GAAmD,SAAxE;AACH;;;;4BAEe;AACZ,gBAAI,OAAO,KAAK,aAAZ,IAA6B,QAAjC,EAA2C;AACvC,uBAAO,KAAK,aAAZ;AACH,aAFD,MAEO;AACH,uBAAO,KAAK,KAAL,CAAW,IAAlB;AACH;AACJ;;;;;;;;;;;;IAOC,W;;;;;;;;;;;;;;;;;;;;AAkBF,2BAAc;AAAA;;AAAA,mGACJ,WADI;;AAEV,cAAK,iBAAL,GAAyB,EAAzB;AACA,cAAK,mBAAL,GAA2B,EAA3B;;;;;;AAMA,cAAK,eAAL,GAAuB,EAAvB;AACA,cAAK,iBAAL,GAAyB,EAAzB;AACA,cAAK,wBAAL,GAAgC,EAAhC;AACA,cAAK,gBAAL,GAAwB,SAAxB;AACA,cAAK,cAAL,GAAsB,SAAtB;AACA,cAAK,aAAL,GAAqB,SAArB;AACA,cAAK,aAAL,GAAqB,SAArB;AACA,cAAK,gBAAL,GAAwB,EAAxB;AACA,cAAK,qBAAL,GAA6B,EAA7B;AACA,cAAK,kBAAL,GAA0B,EAA1B;;;;AAIA,cAAK,sBAAL,GAA8B,EAA9B;;;;;;AAMA,cAAK,qBAAL,GAA6B,EAA7B;;AAEA,cAAK,UAAL,GAAkB,KAAlB;AACA,cAAK,gBAAL,GAAwB,IAAxB;;;;;;AAMA,cAAK,6BAAL,GAAqC,EAArC;;AAEA,cAAK,kBAAL,GAA0B,CAAC,CAA3B;AACA,cAAK,mBAAL,GAA2B,CAA3B;;AAxCU;AA0Cb;;;;;;;;;;6BAMI,M,EAAQ;AAAA;;AACT,4FAAe,MAAf,GAAwB;AACpB;AACH;AACD,gBAAI,OAAO,sBAAE,MAAM,KAAK,GAAL,CAAS,SAAT,EAAR,CAAX;;AAEA,iBAAK,MAAL,CACI,2BACA,0CADA,GAEA,mCAFA,GAGA,QAJJ;;AAOA,iBAAK,gBAAL,GAAwB,KAAK,IAAL,CAAU,WAAV,CAAxB;AACA,iBAAK,cAAL,GAAsB,KAAK,IAAL,CAAU,gBAAV,CAAtB;AACA,iBAAK,aAAL,GAAqB,KAAK,IAAL,CAAU,kBAAV,CAArB;;AAEA,iBAAK,aAAL,GAAqB,IAAI,aAAG,OAAP,CAAe;AAChC,yBAAS,KAAK,gBAAL,CAAsB,CAAtB,CADuB;AAEhC,yBAAS,IAFuB;AAGhC,kCAAkB;AACd,8BAAU;AADI;AAHc,aAAf,CAArB;;AAQA,iBAAK,IAAL,CAAU,UAAV,CAAqB,KAAK,aAA1B;;AAEA,iBAAK,aAAL,CAAmB,KAAnB,CAAyB,YAAM;AAC3B,uBAAK,UAAL;AACH,aAFD;;;AAKA,iBAAK,IAAL,CAAU,EAAV,CAAa,aAAb,EAA4B,UAAC,GAAD,EAAS;AACjC,uBAAK,UAAL;AACA,uBAAK,gBAAL,GAAwB,IAAI,UAA5B;;AAEA,oBAAI,OAAK,qBAAL,CAA2B,MAA3B,GAAoC,CAAxC,EAA2C;AACvC,wBAAI,cAAc;AACd,kCAAU,IAAI,UAAJ,CAAe,IAAf,CAAoB,GAApB,CADI;AAEd,sCAAc,mBAFA;AAGd,gCAAQ,KAHM;AAId,4BAAI,OAAK,IAAL,CAAU,OAAV,GAAoB,aAApB,GAAoC,OAApC,GAA8C,KAA9C,CAAoD,GAApD,EAAyD,CAAzD,CAJU;AAKd,mCAAW,OAAK,IAAL,CAAU,OAAV,GAAoB,eAApB,CAAoC,OAAK,IAAL,CAAU,OAAV,EAApC,EAAyD,IAAzD,CAA8D,GAA9D,CALG;AAMd,sCAAc,OAAK,IAAL,CAAU,OAAV,GAAoB,IAApB,CAAyB,GAAzB,IAAgC,KANhC;AAOd,wCAAgB,IAPF;AAQd,mCAAW,EARG;AASd,2BAAG;AATW,qBAAlB;;AADuC;AAAA;AAAA;;AAAA;AAavC,6CAAc,OAAK,qBAAnB,8HAA0C;AAAA,gCAAjC,CAAiC;;AACtC,8BAAE,YAAF,CAAe,WAAf,EAA4B,OAAK,qBAAL,CAA2B,EAAE,EAA7B,CAA5B;AACH;AAfsC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAgB1C;;AAED,oBAAI,0BAA0B,OAAK,gBAAL,CAAsB,IAAI,KAA1B,CAA9B;;;;;;AAMA,uBAAK,6BAAL,GAAqC,EAArC;AACA,uBAAK,kBAAL,GAA0B,CAAC,CAA3B;;AAEA,qBAAK,IAAI,IAAI,CAAb,EAAgB,IAAI,wBAAwB,MAA5C,EAAoD,GAApD,EAAyD;AACrD,wBAAI,UAAU,wBAAwB,CAAxB,CAAd;;AAEA,wBAAI,QAAQ,QAAQ,OAAR,CAAgB,aAAhB,EAAZ;;AAEA,wBAAI,uBAAuB,OAAK,wBAAL,CAA8B,QAAQ,UAAtC,EAAkD,KAAlD,EAAyD,OAAK,cAA9D,CAA3B;;;AAGA,wBAAI,yBAAyB,KAA7B,EAAoC;;AAEnC,qBAFD,MAEO,IAAI,OAAO,oBAAP,IAA+B,QAAnC,EAA6C;AAChD,oCAAQ,YAAR,GAAuB,oBAAvB;AACA,mCAAK,6BAAL,CAAmC,IAAnC,CAAwC,OAAxC;AACH,yBAHM,MAGA;AACH,oCAAQ,cAAR,CAAuB,SAAvB,GAAmC,UAAnC,CAA8C,QAAQ,OAAtD;AACH;AACJ;;AAED,uBAAK,mBAAL,GAA2B,OAAK,6BAAL,CAAmC,MAA9D;;AAEA,uBAAK,kBAAL,GAA0B,CAAC,CAA3B;;AAEA,oBAAI,YAAY,4BAAhB;AACA,6BAAa,gEAAb;AACA,6BAAa,4DAAb;AACA;AACA;AACA,gGAA8E,OAAK,mBAAnF;AACA;AACA;AACA,6BAAa,QAAb;AACA,6BAAa,8BAAb;;AAEA,6BAAa,QAAb;;AAEA,uBAAK,cAAL,CAAoB,IAApB,CAAyB,SAAzB;;AAEA,uBAAK,cAAL,CAAoB,IAApB,CAAyB,iBAAzB,EAA4C,KAA5C,CAAkD,YAAM;AACpD,wBAAI,OAAK,mBAAL,IAA4B,CAAhC,EAAmC;AAC/B;AACH;;AAED,wBAAI,OAAK,kBAAL,IAA2B,CAA/B,EAAkC;AAC9B,+BAAK,kBAAL,GAA0B,OAAK,mBAAL,GAA2B,CAArD;AACH,qBAFD,MAEO;AACH,+BAAK,kBAAL;AACH;AACD,2BAAK,kBAAL;AACH,iBAXD;;AAaA,oBAAI,YAAY,OAAK,cAAL,CAAoB,IAApB,CAAyB,aAAzB,CAAhB;;AAEA,0BAAU,KAAV,CAAgB,YAAM;AAClB,wBAAI,OAAK,mBAAL,IAA4B,CAA5B,IAAiC,OAAK,kBAAL,GAA0B,CAAC,CAAhE,EAAmE;AAC/D;AACH;;AAED,wBAAI,OAAK,kBAAL,IAA2B,OAAK,mBAAL,GAA2B,CAA1D,EAA6D;AACzD,+BAAK,kBAAL,GAA0B,CAA1B;AACH,qBAFD,MAEO;AACH,+BAAK,kBAAL;AACH;AACD,2BAAK,kBAAL;AACH,iBAXD;;AAcA,oBAAI,OAAK,mBAAL,GAA2B,CAA/B,EAAkC;AAC9B,8BAAU,OAAV,CAAkB,OAAlB;AACA,2BAAK,aAAL,CAAmB,WAAnB,CAA+B,OAAK,gBAApC;AACA,2BAAK,cAAL,CAAoB,SAApB,CAA8B,CAA9B;AACA,2BAAK,UAAL,GAAkB,IAAlB;AACH;AACJ,aAvGD;;;AA0GA,iBAAK,IAAL,CAAU,EAAV,CAAa,aAAb,EAA4B,UAAC,CAAD,EAAO;AAC/B,oBAAI,EAAE,QAAN,EAAgB;AACZ;AACH;AACD,oBAAI,QAAQ,OAAK,GAAL,CAAS,aAAT,CAAuB,EAAE,aAAzB,CAAZ;AACA,oBAAI,MAAM,OAAK,GAAL,CAAS,iBAAT,CAA2B,KAA3B,EAAkC,UAAC,YAAD,EAAkB;AAAA;AAAA;AAAA;;AAAA;AAC1D,8CAAoB,OAAK,iBAAzB,mIAA4C;AAAA,gCAAnC,OAAmC;;AACxC,gCAAI,gBAAgB,OAApB,EAA6B;AACzB,uCAAO,IAAP;AACH;AACJ;AALyD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAO1D,2BAAO,KAAP;AACH,iBARS,CAAV;AASA,uBAAK,GAAL,CAAS,gBAAT,GAA4B,KAA5B,CAAkC,MAAlC,GAA2C,MAAM,SAAN,GAAkB,EAA7D;AACH,aAfD;AAgBH;;;;;;;;;6CAMoB;AACjB,gBAAI,0BAA0B,KAAK,cAAL,CAAoB,IAApB,CAAyB,4BAAzB,CAA9B;AACA,gBAAI,cAAc,KAAK,cAAL,CAAoB,IAApB,CAAyB,iBAAzB,CAAlB;AACA,gBAAI,iBAAiB,KAAK,cAAL,CAAoB,IAApB,CAAyB,2BAAzB,CAArB;AACA,iBAAK,cAAL;AACA,gBAAI,aAAa,KAAK,6BAAL,CAAmC,KAAK,kBAAxC,CAAjB;AACA,oCAAwB,IAAxB,CAA6B,CAAC,KAAK,kBAAL,GAA0B,CAA3B,EAA8B,OAA9B,EAA7B;AACA,2BAAe,IAAf,CAAoB,WAAW,SAA/B;AACA,wBAAY,IAAZ,CAAiB,WAAW,YAA5B;AACA,uBAAW,cAAX,CAA0B,SAA1B,GAAsC,UAAtC,CAAiD,WAAW,OAA5D;AATiB;AAAA;AAAA;;AAAA;AAUjB,sCAAc,KAAK,sBAAnB,mIAA2C;AAAA,wBAAlC,CAAkC;;AACvC,sBAAE,KAAK,cAAP;AACH;AAZgB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAapB;;;;;;;;;;;;kDAUyB,O,EAAS,G,EAAK,Y,EAAc,Q,EAAU;;AAE5D,gBAAI,kBAAkB,IAAI,uBAAJ,CAClB,OADkB,EACT,GADS,EACJ,KAAK,mBADD,EACsB,KAAK,qBAAL,CAA2B,IAAI,EAA/B,CADtB,EAC0D,QAD1D,CAAtB;AAGA,4BAAgB,YAAhB,GAA+B,YAA/B;;AAEA,iBAAK,6BAAL,CAAmC,IAAnC,CAAwC,eAAxC;AACA,iBAAK,mBAAL;;AAEA,kCAAE,uBAAF,EAA2B,IAA3B,CAAgC,KAAK,mBAAL,CAAyB,OAAzB,EAAhC;;AAEA,gBAAI,CAAC,KAAK,UAAV,EAAsB;AAClB,qBAAK,cAAL,CAAoB,IAApB,CAAyB,aAAzB,EAAwC,OAAxC,CAAgD,OAAhD;;AAEA,qBAAK,aAAL,CAAmB,WAAnB,CAA+B,KAAK,gBAApC;AACA,qBAAK,cAAL,CAAoB,SAApB,CAA8B,CAA9B;AACA,qBAAK,UAAL,GAAkB,IAAlB;AACH;AACJ;;;;;;;;;;;yCAQgB,K,EAAO;AAAA;;AACpB,gBAAI,0BAA0B,EAA9B;AACA,iBAAK,GAAL,CAAS,qBAAT,CAA+B,KAA/B,EAAsC,UAAC,OAAD,EAAU,KAAV,EAAoB;AACtD,oBAAI,WAAW,OAAK,iBAAL,CAAuB,OAAvB,CAA+B,KAA/B,CAAf;;AAEA,oBAAI,WAAW,CAAC,CAAhB,EAAmB;AACf,4CAAwB,IAAxB,CAA6B,IAAI,uBAAJ,CACzB,OADyB,EAChB,OAAK,eAAL,CAAqB,QAArB,CADgB,EACgB,QADhB,EAC0B,OAAK,gBAAL,CAAsB,QAAtB,CAD1B,CAA7B;AAEH;AACJ,aAPD;;AASA,mBAAO,uBAAP;AACH;;;qCAEY;AACT,iBAAK,UAAL;AACA,iBAAK,UAAL,GAAkB,KAAlB;AACA,iBAAK,aAAL,CAAmB,WAAnB,CAA+B,SAA/B;AACA,iBAAK,aAAL,CAAmB,CAAnB,EAAsB,IAAtB;AACA,iBAAK,cAAL;AACA,iBAAK,cAAL,CAAoB,IAApB,CAAyB,EAAzB;;AAEA,mBAAO,KAAP;AACH;;;;;;;;;gDAMuB,W,EAAa;AACjC,iBAAK,sBAAL,CAA4B,IAA5B,CAAiC,WAAjC;AACH;;;;;;;;;;;;;;;uCAYc,G,EAAK,c,EAAgB;AAChC,iBAAK,UAAL;;AAEA,6BAAiB,kBAAkB,EAAnC;AACA,2BAAe,KAAf,GAAuB,eAAe,KAAf,IAAwB,qBAA/C;AACA,2BAAe,KAAf,GAAuB,eAAe,KAAf,IAAwB,EAA/C;;AAEA,gBAAI,iBAAJ;;AAEA,gBAAI,eAAe,OAAnB,EAA4B;AACxB,2BAAW,eAAe,OAA1B;AACH,aAFD,MAEO;AACH,2BAAW,IAAI,aAAG,KAAH,CAAS,KAAb,CAAmB;AAC1B,4BAAQ,IAAI,aAAG,KAAH,CAAS,MAAb,CAAoB;AACxB,+BAAO,eAAe,KADE;AAExB,+BAAO,eAAe;AAFE,qBAApB,CADkB;AAK1B,2BAAO,IAAI,aAAG,KAAH,CAAS,MAAb,CAAoB;AACvB,gCAAQ,CADe;AAEvB,8BAAM,IAAI,aAAG,KAAH,CAAS,IAAb,CAAkB,EAAC,OAAO,eAAe,KAAvB,EAAlB,CAFiB;AAGvB,gCAAQ,IAAI,aAAG,KAAH,CAAS,MAAb,CAAoB,EAAC,OAAO,eAAe,KAAvB,EAA8B,OAAO,CAArC,EAApB;AAHe,qBAApB,CALmB;AAU1B,0BAAM,IAAI,aAAG,KAAH,CAAS,IAAb,CAAkB;AACpB,+BAAO,eAAe;AADF,qBAAlB;AAVoB,iBAAnB,CAAX;AAcH;;AAED,gBAAI,iBAAiB,IAAI,aAAG,KAAH,CAAS,MAAb,CACjB;AACI,wBAAQ,IAAI,aAAG,MAAH,CAAU,MAAd,EADZ;AAEI,uBAAO,QAFX;AAGI,wBAAQ;AAHZ,aADiB,CAArB;;AAQA,iBAAK,gBAAL,CAAsB,IAAtB,CAA2B,cAA3B;AACA,iBAAK,qBAAL,CAA2B,IAAI,EAA/B,IAAqC,cAArC;AACA,iBAAK,GAAL,CAAS,QAAT,CAAkB,cAAlB;;AAEA,mBAAO,cAAP;AACH;;;;;;;;;;;;;;;;;;;;;;;uCAoBc,G,EAAK,oB,EAAsB,c,EAAgB;AACtD,gBAAI,iBAAiB,KAAK,cAAL,CAAoB,GAApB,EAAyB,cAAzB,CAArB;AACA,iBAAK,iBAAL,CAAuB,IAAvB,CAA4B,IAAI,EAAhC;AACA,iBAAK,mBAAL,CAAyB,IAAzB,CAA8B,IAAI,IAAlC;AACA,iBAAK,eAAL,CAAqB,IAArB,CAA0B,GAA1B;AACA,iBAAK,iBAAL,CAAuB,IAAvB,CAA4B,IAAI,OAAhC;AACA,iBAAK,wBAAL,CAA8B,IAA9B,CAAmC,oBAAnC;;AAEA,mBAAO,cAAP;AACH;;;;;;;;;0CAMiB,G,EAAK;AACnB,gBAAI,MAAM,KAAK,iBAAL,CAAuB,OAAvB,CAA+B,IAAI,EAAnC,CAAV;;AAEA,gBAAI,MAAM,CAAC,CAAX,EAAc;AACV,qBAAK,iBAAL,CAAuB,MAAvB,CAA8B,GAA9B,EAAmC,CAAnC;AACA,qBAAK,mBAAL,CAAyB,MAAzB,CAAgC,GAAhC,EAAqC,CAArC;AACA,qBAAK,eAAL,CAAqB,MAArB,CAA4B,GAA5B,EAAiC,CAAjC;AACA,qBAAK,iBAAL,CAAuB,MAAvB,CAA8B,GAA9B,EAAmC,CAAnC;AACA,qBAAK,wBAAL,CAA8B,MAA9B,CAAqC,GAArC,EAA0C,CAA1C;AACA,qBAAK,gBAAL,CAAsB,MAAtB,CAA6B,GAA7B,EAAkC,CAAlC;AACA,uBAAO,KAAK,qBAAL,CAA2B,IAAI,EAA/B,CAAP;AACH;AACJ;;;;;;;;;;;;;;2CAWkB,G,EAAK,c,EAAgB;AACpC,gBAAI,iBAAiB,KAAK,cAAL,CAAoB,GAApB,EAAyB,cAAzB,CAArB;AACA,iBAAK,qBAAL,CAA2B,IAA3B,CAAgC,GAAhC;;AAEA,mBAAO,cAAP;AACH;;;yCAEgB;AACb,iBAAK,UAAL;AACA,iBAAK,IAAI,IAAI,CAAb,EAAgB,IAAI,KAAK,gBAAL,CAAsB,MAA1C,EAAkD,GAAlD,EAAuD;AACnD,qBAAK,gBAAL,CAAsB,CAAtB,EAAyB,SAAzB,GAAqC,KAArC;AACH;AAJY;AAAA;AAAA;;AAAA;AAKb,sCAAc,KAAK,kBAAnB,mIAAuC;AAAA,wBAA9B,CAA8B;;AACnC;AACH;AAPY;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAQhB;;;;;;;;;4CAMmB,I,EAAM;AACtB,iBAAK,kBAAL,CAAwB,IAAxB,CAA6B,IAA7B;AACH;;;;;;AAEL,GAAG,WAAH,GAAiB,WAAjB;kBACe,W;;;;;;;;;ACtef;;;;AACA;;IAAY,qB;;;;;;;;;;AACZ,IAAM,KAAK,uBAAQ,WAAR,CAAX;;;;;;;;;;;;;;;AAeA,SAAS,mBAAT,CAA6B,SAA7B,EAAwC;AACpC,QAAI,aAAa,SAAjB,EAA2B;AACvB,eAAO,SAAP;AACH;;AAED,WAAO,UAAU,OAAV,EAAmB,UAAnB,EAA+B;AAClC,kBAAU,QAAQ,aAAR,EAAV,EAAmC,sBAAsB,gBAAtB,CAAuC,UAAvC,CAAnC;AACH,KAFD;AAGH;;AAED,GAAG,mBAAH,GAAyB,mBAAzB;kBACe,mB;;;;;;;;;AC5Bf;;;;AACA;;;;AACA;;;;AACA;;;;;;;;;;AACA,IAAI,KAAK,uBAAQ,WAAR,CAAT;;;;;;;;;;;;;;;;;;AAkBA,SAAS,QAAT,CAAkB,OAAlB,EAA2B;AACvB,MAAI,IAAI,4BAAa,OAAb,CAAR;AACA,oBAAQ,IAAR,CAAa,CAAb;AACA,qBAAS,IAAT,CAAc,CAAd;;AAEA,SAAO,CAAP;AACH;;AAGD,GAAG,QAAH,GAAc,QAAd;kBACe,Q;;;;;;;;;AC5Bf;;;;AACA;;;;AACA;;;;;;AACA,IAAM,KAAK,uBAAQ,WAAR,CAAX;;;;;;;;;;;;;;;;;;;;;;;;;;AAkBA,SAAS,YAAT,CAAsB,OAAtB,EAA+B;AAC3B,cAAU,WAAW,EAArB;AACA,YAAQ,KAAR,GAAgB,QAAQ,KAAR,IAAiB,KAAjC;AACA,YAAQ,MAAR,GAAiB,QAAQ,MAAR,IAAkB,EAAnC;AACA,YAAQ,MAAR,CAAe,CAAf,GAAmB,OAAO,QAAQ,MAAR,CAAe,CAAtB,IAA2B,QAA3B,GAAsC,QAAQ,MAAR,CAAe,CAArD,GAAyD,CAAC,QAA7E;AACA,YAAQ,MAAR,CAAe,CAAf,GAAmB,OAAO,QAAQ,MAAR,CAAe,CAAtB,IAA2B,QAA3B,GAAsC,QAAQ,MAAR,CAAe,CAArD,GAAyD,OAA5E;AACA,YAAQ,IAAR,GAAe,OAAO,QAAQ,IAAf,IAAuB,QAAvB,GAAkC,QAAQ,IAA1C,GAAiD,CAAhE;AACA,YAAQ,YAAR,GAAuB,OAAO,QAAQ,YAAf,IAA+B,SAA/B,GAA2C,QAAQ,YAAnD,GAAkE,IAAzF;AACA,YAAQ,UAAR,GAAqB,OAAO,QAAQ,UAAf,IAA6B,SAA7B,GAAyC,QAAQ,UAAjD,GAA8D,KAAnF;;AAGA,QAAI,UAAU,sBAAE,MAAM,QAAQ,KAAhB,CAAd;AACA,YAAQ,GAAR,CAAY,UAAZ,EAAwB,UAAxB;;AAEA,QAAI,WAAW,IAAI,aAAG,KAAH,CAAS,IAAb,CAAkB,EAAC,QAAQ,IAAI,aAAG,MAAH,CAAU,GAAd,EAAT,EAAlB,CAAf;AACA,QAAI,WAAW,IAAI,aAAG,KAAH,CAAS,IAAb,CAAkB,EAAC,SAAS,KAAV,EAAiB,QAAQ,IAAI,aAAG,MAAH,CAAU,QAAd,CAAuB,EAAC,OAAO,KAAR,EAAvB,CAAzB,EAAlB,CAAf;;AAEA,QAAI,SAAS,m0GAAb;AACA,QAAI,YAAY,+uIAAhB;;AAEA,QAAI,QAAQ,YAAZ,EAA0B;AACtB,YAAI,kBAAkB,kEAAtB;AACA,2BAAmB,qEAAnB;AACA,wGAA8F,SAA9F;AACA,2BAAmB,UAAnB;AACA,gBAAQ,MAAR,CAAe,eAAf;;AAED,gBAAQ,IAAR,CAAa,oBAAb,EAAmC,KAAnC,CAAyC,YAAW;AAC/C;;AACA,qBAAS,UAAT,CAAoB,CAAC,SAAS,UAAT,EAArB;AACA,qBAAS,UAAT,CAAoB,CAAC,SAAS,UAAT,EAArB;;AAEA,gBAAI,SAAS,UAAT,EAAJ,EAA0B;AACtB,sCAAE,IAAF,EAAQ,GAAR,CAAY,YAAZ,EAA0B,SAA1B;AACH,aAFD,MAEO;AACH,sCAAE,IAAF,EAAQ,GAAR,CAAY,YAAZ,EAA0B,MAA1B;AACH;AACJ,SAVF;AAWF;;AAED,QAAI,QAAQ,IAAR,GAAe,CAAf,IAAoB,QAAQ,IAAR,GAAe,EAAvC,EAA2C;AACvC,cAAM,mBAAN;AACH;;AAED,QAAI,QAAQ,MAAR,CAAe,CAAf,IAAoB,CAAC,GAArB,IAA4B,QAAQ,MAAR,CAAe,CAAf,IAAoB,GAAhD,IAAuD,QAAQ,MAAR,CAAe,CAAf,IAAoB,CAAC,EAA5E,IAAkF,QAAQ,MAAR,CAAe,CAAf,IAAoB,EAA1G,EAA8G;AAC1G,YAAI,IAAI,IAAI,aAAG,IAAH,CAAQ,KAAZ,CAAkB,CAAC,QAAQ,MAAR,CAAe,CAAhB,EAAmB,QAAQ,MAAR,CAAe,CAAlC,CAAlB,CAAR;AACA,UAAE,SAAF,CAAY,WAAZ,EAAyB,WAAzB;AACA,YAAI,cAAc,EAAE,cAAF,EAAlB;AACA,gBAAQ,MAAR,CAAe,CAAf,GAAmB,YAAY,CAAZ,CAAnB;AACA,gBAAQ,MAAR,CAAe,CAAf,GAAmB,YAAY,CAAZ,CAAnB;AACH;;AAED,QAAI,MAAM,IAAI,aAAG,GAAP,CAAW;AACjB,gBAAQ,CAAC,QAAD,EAAW,QAAX,CADS;AAEjB,gBAAQ,QAAQ,KAFC;AAGjB,kBAAU,aAAG,OAAH,CAAW,QAAX,CAAoB;AAC1B,gCAAoB,EAAC,aAAa,KAAd;AADM,SAApB,CAHO;AAMjB,cAAM,IAAI,aAAG,IAAP,CAAY;AACd,oBAAQ,CAAC,QAAQ,MAAR,CAAe,CAAhB,EAAmB,QAAQ,MAAR,CAAe,CAAlC,CADM;AAEd,kBAAM,QAAQ,IAFA;AAGd,qBAAS,QAAQ,OAHH;AAId,qBAAS,QAAQ;AAJH,SAAZ;AANW,KAAX,CAAV;;AAcA,QAAI,QAAQ,UAAZ,EAAuB;AACnB,YAAI,UAAJ,CAAe,IAAI,aAAG,OAAH,CAAW,UAAf,EAAf;AACH;;AAED,WAAO,GAAP;AACH;;AAED,GAAG,YAAH,GAAkB,YAAlB;kBACe,Y;;;;;;;;QC3DC,gB,GAAA,gB;QAuBA,gB,GAAA,gB;;AA/DhB;;;;;;AACA,IAAM,KAAK,uBAAQ,iCAAR,CAAX,C;;;;AAEA,IAAI,iBAAiB,CACjB,kBADiB,E;AAEjB,iBAFiB,E;AAGjB,iBAHiB,E;AAIjB,iBAJiB,E;AAKjB,gBALiB,E;AAMjB,gBANiB,E;AAOjB,gBAPiB,E;AAQjB,gBARiB,E;AASjB,eATiB,E;AAUjB,gBAViB,E;AAWjB,iBAXiB,E;AAYjB,iBAZiB,E;AAajB,iBAbiB,E;AAcjB,kBAdiB,E;AAejB,iBAfiB,E;AAgBjB,iBAhBiB,E;AAiBjB,iBAjBiB,E;AAkBjB,iBAlBiB,E;AAmBjB,kBAnBiB,E;AAoBjB,mBApBiB,E;AAqBjB,mBArBiB,E;AAsBjB,mBAtBiB,E;AAuBjB,mBAvBiB,E;AAwBjB,mBAxBiB,E;AAyBjB,oBAzBiB,E;AA0BjB,oBA1BiB,E;AA2BjB,oBA3BiB,E;AA4BjB,qBA5BiB,E;AA6BjB,qB;AA7BiB,CAArB;;;;;;;AAqCO,SAAS,gBAAT,CAA0B,SAA1B,EAAqC;AACxC;;AAEA,QAAI,OAAO,SAAP,IAAoB,QAAxB,EAAkC;AAC9B,YAAI,YAAY,CAAZ,KAAkB,CAAlB,IAAuB,aAAa,CAApC,IAAyC,aAAa,EAA1D,EAA8D;AAC1D,mBAAO,eAAe,SAAf,CAAP;AACH,SAFD,MAEO;AACH,oBAAQ,GAAR,mCAA4C,SAA5C;;AAEA,mBAAO,SAAP;AACH;AACJ,KARD,MAQO;AACH,eAAO,SAAP;AACH;AACJ;AACD,GAAG,gBAAH,GAAsB,gBAAtB;;;;;;;AAQO,SAAS,gBAAT,CAA0B,UAA1B,EAAqC;AACxC,SAAK,IAAI,IAAI,CAAb,EAAgB,IAAI,eAAe,MAAnC,EAA2C,GAA3C,EAA+C;AAC3C,YAAI,cAAc,eAAe,CAAf,CAAlB,EAAqC;AACjC,mBAAO,CAAP;AACH;AACJ;;AAED,WAAO,CAAP;AACH;;AAED,GAAG,gBAAH,GAAsB,gBAAtB;;;AC7EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;AChZA,IAAM,KAAK,QAAQ,YAAR,CAAX;;kBAEe,E;;;;;;;;QCSC,e,GAAA,e;QAcA,iB,GAAA,iB;;AAtBhB;;;;;;AACA,IAAI,KAAK,uBAAQ,mBAAR,CAAT;;;;;;;;;;AAOO,SAAS,eAAT,CAA0B,KAA1B,EAAgC;AACnC;;AAEA,WAAQ,OAAO,KAAP,KAAiB,WAAjB,IAAgC,UAAU,IAAlD;AACH;;AAED,GAAG,eAAH,GAAqB,eAArB;;;;;;;AAQO,SAAS,iBAAT,CAA4B,KAA5B,EAAkC;AACrC;;AAEA,WAAO,CAAE,gBAAgB,KAAhB,CAAT;AACH;;AAED,GAAG,iBAAH,GAAuB,iBAAvB;;;;;;;;QCNgB,O,GAAA,O;QAeA,mB,GAAA,mB;QAqBA,S,GAAA,S;QA0BA,wB,GAAA,wB;QAuEA,8B,GAAA,8B;;AA3JhB;;;;AACA;;IAAY,G;;;;;;;;;;AACZ,IAAI,KAAK,uBAAQ,aAAR,CAAT;;;;;;;;AASA,SAAS,IAAT,CAAc,CAAd,EAAiB;AACb,QAAI,YAAY,CAAC,GAAD,EAAM,GAAN,EAAW,GAAX,EAAgB,GAAhB,EAAqB,GAArB,EAA0B,GAA1B,EAA+B,GAA/B,EAAoC,GAApC,EAAyC,GAAzC,EAA8C,GAA9C,EAAmD,GAAnD,EAAwD,GAAxD,EAA6D,GAA7D,EAAkE,GAAlE,EAAuE,GAAvE,EAA4E,GAA5E,CAAhB;;AAEA,WAAO,MAAM,CAAN,IAAW,IAAX,GAAkB,UAAU,CAAC,IAAI,IAAI,EAAT,IAAe,EAAzB,IAA+B,UAAU,IAAI,EAAd,CAAxD;AACH;;;;;;;AAOM,SAAS,OAAT,CAAiB,GAAjB,EAAsB;AACzB,QAAI,OAAO,IAAI,KAAJ,CAAU,kCAAV,CAAX;;AAEA,WAAO,CAAC,MAAM,KAAK,KAAK,CAAL,CAAL,CAAN,GAAsB,KAAK,KAAK,CAAL,CAAL,CAAtB,GAAsC,KAAK,KAAK,CAAL,CAAL,CAAvC,EAAsD,WAAtD,EAAP;AACH;;AAED,GAAG,OAAH,GAAa,OAAb;;;;;;;;AASO,SAAS,mBAAT,CAA6B,SAA7B,EAAwC,QAAxC,EAAkD;AACrD,gBAAc,UAAU,MAAV,CAAiB,CAAjB,KAAuB,GAAxB,GAA+B,UAAU,SAAV,CAAoB,CAApB,EAAuB,CAAvB,CAA/B,GAA2D,SAAxE;AACA,QAAI,IAAI,SAAS,UAAU,SAAV,CAAoB,CAApB,EAAuB,CAAvB,CAAT,EAAoC,EAApC,EAAwC,QAAxC,MAAsD,GAA9D;AACA,QAAI,IAAI,SAAS,UAAU,SAAV,CAAoB,CAApB,EAAuB,CAAvB,CAAT,EAAoC,EAApC,EAAwC,QAAxC,MAAsD,GAA9D;AACA,QAAI,IAAI,SAAS,UAAU,SAAV,CAAoB,CAApB,EAAuB,CAAvB,CAAT,EAAoC,EAApC,EAAwC,QAAxC,MAAsD,GAA9D;AACA,QAAI,QAAJ,EAAc;AACV,yBAAe,CAAf,SAAoB,CAApB,SAAyB,CAAzB,SAA8B,QAA9B;AACH,KAFD,MAEO;AACH,yBAAe,CAAf,SAAoB,CAApB,SAAyB,CAAzB;AACH;AACJ;;AAED,GAAG,mBAAH,GAAyB,mBAAzB;;;;;;;;AASO,SAAS,SAAT,CAAmB,GAAnB,EAAwB,KAAxB,EAA+B;AAClC,QAAI,SAAS,IAAI,KAAJ,CAAU,GAAV,CAAb;AACA,WAAO,CAAP,IAAY,OAAO,CAAP,EAAU,OAAV,CAAkB,KAAlB,EAAyB,MAAzB,CAAZ;AACA,WAAO,CAAP,IAAY,OAAO,CAAP,EAAU,OAAV,CAAkB,GAAlB,EAAuB,EAAvB,CAAZ;AACA,WAAO,IAAP,CAAY,MAAM,MAAM,OAAN,CAAc,CAAd,CAAN,GAAyB,GAArC;;AAEA,WAAO,OAAO,IAAP,CAAY,GAAZ,CAAP;AACH;;AAED,GAAG,SAAH,GAAe,SAAf;;;;;;;;;;;;;;;AAiBO,SAAS,wBAAT,CAAkC,MAAlC,EAA0C,MAA1C,EAAkD,UAAlD,EAA8D;;AAEjE,QAAI,OAAO,UAAP,IAAqB,SAAzB,EAAoC;AAChC,qBAAa,KAAb;AACH;;AAED,WAAO,UAAU,MAAV,EAAkB;AACrB,YAAI,UAAJ;YAAO,UAAP;YAAU,UAAV;AACA,YAAI,cAAJ;;AAEA,YAAI,IAAI,eAAJ,CAAoB,MAApB,CAAJ,EAAiC;AAC7B,mBAAO,kBAAP;AACH;;AAED,YAAI,UAAU,CAAC,SAAS,MAAV,KAAqB,SAAS,MAA9B,CAAd;;AAEA,YAAI,cAAc,IAAlB,EAAwB;AACpB,sBAAU,IAAI,OAAd;AACH;;AAED,YAAI,WAAW,CAAf,EAAkB;AACd,gBAAI,GAAJ;AACA,gBAAI,CAAJ;AACA,gBAAI,CAAJ;AACH,SAJD,MAIO,IAAI,WAAW,CAAf,EAAkB;AACrB,gBAAI,CAAJ;AACA,gBAAI,CAAJ;AACA,gBAAI,GAAJ;AACH,SAJM,MAIA,IAAI,UAAU,GAAd,EAAmB;;AAEtB,gBAAI,CAAJ;AACA,gBAAI,KAAK,KAAL,CAAW,MAAM,OAAN,GAAgB,IAA3B,CAAJ;AACA,gBAAI,GAAJ;AACH,SALM,MAKA,IAAI,UAAU,IAAd,EAAoB;;AAEvB,oBAAQ,CAAC,UAAU,IAAX,IAAmB,IAA3B;AACA,gBAAI,CAAJ;AACA,gBAAI,GAAJ;AACA,gBAAI,MAAM,KAAK,KAAL,CAAW,MAAM,KAAjB,CAAV;AACH,SANM,MAMA,IAAI,UAAU,IAAd,EAAoB;;AAEvB,oBAAQ,CAAC,UAAU,GAAX,IAAkB,IAA1B;AACA,gBAAI,KAAK,KAAL,CAAW,MAAM,KAAjB,CAAJ;AACA,gBAAI,GAAJ;AACA,gBAAI,CAAJ;AACH,SANM,MAMA;;AAEH,oBAAQ,CAAC,UAAU,IAAX,IAAmB,IAA3B;AACA,gBAAI,GAAJ;AACA,gBAAI,MAAM,KAAK,KAAL,CAAW,MAAM,KAAjB,CAAV;AACA,gBAAI,CAAJ;AACH;;AAED,YAAI,EAAE,OAAF,EAAJ;AACA,YAAI,EAAE,OAAF,EAAJ;AACA,YAAI,EAAE,OAAF,EAAJ;;AAEA,eAAO,SAAS,CAAT,GAAa,GAAb,GAAmB,CAAnB,GAAuB,GAAvB,GAA6B,CAA7B,GAAiC,GAAxC;AACH,KApDD;AAqDH;;AAED,GAAG,wBAAH,GAA8B,wBAA9B;;;;;;;;;AAUO,SAAS,8BAAT,CAAwC,MAAxC,EAAgD,MAAhD,EAAwD,UAAxD,EAAoE;;AAEvE,QAAI,MAAM,yBAAyB,CAAC,GAA1B,EAA+B,GAA/B,EAAoC,UAApC,CAAV;;AAEA,WAAO,UAAU,MAAV,EAAkB;;AAErB,YAAI,eAAJ;AACA,YAAI,UAAU,IAAd,EAAoB;AAChB,qBAAS,IAAT;AACH,SAFD,MAEO;AACH,qBAAS,CAAC,SAAS,MAAV,IAAoB,MAA7B;AACH;;AAED,eAAO,IAAI,MAAJ,CAAP;AACH,KAVD;AAWH;;AAED,GAAG,8BAAH,GAAoC,8BAApC;;;;;;;;;AC3KA;;;;;;AACA,IAAI,KAAK,uBAAQ,MAAR,CAAT;;;;;;;;;;AAOA,SAAS,QAAT,GAAoB;AACZ,SAAO,uCACF,OADE,CACM,OADN,EACe,UAAU,CAAV,EAAa;AAC3B,QAAI,IAAI,KAAK,MAAL,KAAgB,EAAhB,GAAqB,CAA7B;QAAgC,IAAI,KAAK,GAAL,GAAW,CAAX,GAAe,IAAI,GAAJ,GAAU,GAA7D;;AAEA,WAAO,EAAE,QAAF,CAAW,EAAX,CAAP;AACH,GALE,CAAP;AAOP;AACD,GAAG,QAAH,GAAc,QAAd;kBACe,Q;;;;;;;;;;;;;;;;;ACZf,SAAS,OAAT,CAAiB,SAAjB,EAA2B;AACvB;;AACA,QAAI,OAAO,OAAO,EAAd,IAAoB,WAAxB,EAAoC;AAChC,eAAO,EAAP,GAAY,EAAZ;AACH;;AAED,QAAI,QAAQ,UAAU,KAAV,CAAgB,GAAhB,CAAZ;AACA,QAAI,YAAY,OAAO,EAAvB;;AAEA,SAAK,IAAI,IAAE,CAAX,EAAc,IAAG,MAAM,MAAvB,EAA+B,GAA/B,EAAmC;AAC/B,YAAI,YAAY,UAAU,MAAM,CAAN,CAAV,CAAhB;;AAEA,YAAI,OAAO,SAAP,IAAoB,WAAxB,EAAoC;AAChC,sBAAU,MAAM,CAAN,CAAV,IAAsB,EAAtB;AACH;;AAED,oBAAY,UAAU,MAAM,CAAN,CAAV,CAAZ;AACH;;AAED,WAAO,SAAP;AACH;;AAED,QAAQ,MAAR;AACA,OAAO,EAAP,CAAU,IAAV,CAAe,OAAf,GAAyB,OAAzB;;kBAEe,O;;;;;AC/Bf;;AACA;;;;AACA;;;;AACA;;;;AACA;;;;AACA;;;;AACA;;;;;;AAEA,IAAI,MAAM,wBAAS,EAAC,YAAY,IAAb,EAAT,CAAV;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA2BA,IAAI,qBAAqB,iCAAuB,GAAvB,CAAzB;;;;;;;AAEA,yBAAc,mBAAmB,MAAjC,8HAAwC;AAAA,YAA/B,CAA+B;;AACpC,gBAAQ,GAAR,CAAY,EAAE,OAAd;AACA,gBAAQ,GAAR,CAAY,CAAZ;AACH;;;;;;;;;;;;;;;;AAGD,IAAI,aAAa,CACb;AACI,eAAW,sBADf;AAEI,cAAU,KAFd;AAGI,cAAU,IAHd;AAII,WAAO,mBAAmB;AAJ9B,CADa,CAAjB;;AASA,IAAI,SAAS,0BAAgB,UAAhB,EAA4B,kBAA5B,EAAgD,EAAhD,CAAb","file":"legend-test.js","sourceRoot":"/source/","sourcesContent":["(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error(\"Cannot find module '\"+o+\"'\");throw f.code=\"MODULE_NOT_FOUND\",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require==\"function\"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})","/*istanbul ignore next*/\"use strict\";\n\n/*istanbul ignore next*/require(\"core-js/shim\");\n\n/*istanbul ignore next*/require(\"babel-regenerator-runtime\");\n\n/*istanbul ignore next*/require(\"core-js/fn/regexp/escape\");\n\n/* eslint max-len: 0 */\n\nif (global._babelPolyfill) {\n  throw new Error(\"only one instance of babel-polyfill is allowed\");\n}\nglobal._babelPolyfill = true;\n\n// Should be removed in the next major release:\n\nvar DEFINE_PROPERTY = \"defineProperty\";\nfunction define(O, key, value) {\n  O[key] || Object[DEFINE_PROPERTY](O, key, {\n    writable: true,\n    configurable: true,\n    value: value\n  });\n}\n\ndefine(String.prototype, \"padLeft\", \"\".padStart);\ndefine(String.prototype, \"padRight\", \"\".padEnd);\n\n\"pop,reverse,shift,keys,values,entries,indexOf,every,some,forEach,map,filter,find,findIndex,includes,join,slice,concat,push,splice,unshift,sort,lastIndexOf,reduce,reduceRight,copyWithin,fill\".split(\",\").forEach(function (key) {\n  [][key] && define(Array, key, Function.call.bind([][key]));\n});","/**\n * Copyright (c) 2014, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * https://raw.github.com/facebook/regenerator/master/LICENSE file. An\n * additional grant of patent rights can be found in the PATENTS file in\n * the same directory.\n */\n\n!(function(global) {\n  \"use strict\";\n\n  var hasOwn = Object.prototype.hasOwnProperty;\n  var undefined; // More compressible than void 0.\n  var iteratorSymbol =\n    typeof Symbol === \"function\" && Symbol.iterator || \"@@iterator\";\n\n  var inModule = typeof module === \"object\";\n  var runtime = global.regeneratorRuntime;\n  if (runtime) {\n    if (inModule) {\n      // If regeneratorRuntime is defined globally and we're in a module,\n      // make the exports object identical to regeneratorRuntime.\n      module.exports = runtime;\n    }\n    // Don't bother evaluating the rest of this file if the runtime was\n    // already defined globally.\n    return;\n  }\n\n  // Define the runtime globally (as expected by generated code) as either\n  // module.exports (if we're in a module) or a new, empty object.\n  runtime = global.regeneratorRuntime = inModule ? module.exports : {};\n\n  function wrap(innerFn, outerFn, self, tryLocsList) {\n    // If outerFn provided, then outerFn.prototype instanceof Generator.\n    var generator = Object.create((outerFn || Generator).prototype);\n    var context = new Context(tryLocsList || []);\n\n    // The ._invoke method unifies the implementations of the .next,\n    // .throw, and .return methods.\n    generator._invoke = makeInvokeMethod(innerFn, self, context);\n\n    return generator;\n  }\n  runtime.wrap = wrap;\n\n  // Try/catch helper to minimize deoptimizations. Returns a completion\n  // record like context.tryEntries[i].completion. This interface could\n  // have been (and was previously) designed to take a closure to be\n  // invoked without arguments, but in all the cases we care about we\n  // already have an existing method we want to call, so there's no need\n  // to create a new function object. We can even get away with assuming\n  // the method takes exactly one argument, since that happens to be true\n  // in every case, so we don't have to touch the arguments object. The\n  // only additional allocation required is the completion record, which\n  // has a stable shape and so hopefully should be cheap to allocate.\n  function tryCatch(fn, obj, arg) {\n    try {\n      return { type: \"normal\", arg: fn.call(obj, arg) };\n    } catch (err) {\n      return { type: \"throw\", arg: err };\n    }\n  }\n\n  var GenStateSuspendedStart = \"suspendedStart\";\n  var GenStateSuspendedYield = \"suspendedYield\";\n  var GenStateExecuting = \"executing\";\n  var GenStateCompleted = \"completed\";\n\n  // Returning this object from the innerFn has the same effect as\n  // breaking out of the dispatch switch statement.\n  var ContinueSentinel = {};\n\n  // Dummy constructor functions that we use as the .constructor and\n  // .constructor.prototype properties for functions that return Generator\n  // objects. For full spec compliance, you may wish to configure your\n  // minifier not to mangle the names of these two functions.\n  function Generator() {}\n  function GeneratorFunction() {}\n  function GeneratorFunctionPrototype() {}\n\n  var Gp = GeneratorFunctionPrototype.prototype = Generator.prototype;\n  GeneratorFunction.prototype = Gp.constructor = GeneratorFunctionPrototype;\n  GeneratorFunctionPrototype.constructor = GeneratorFunction;\n  GeneratorFunction.displayName = \"GeneratorFunction\";\n\n  // Helper for defining the .next, .throw, and .return methods of the\n  // Iterator interface in terms of a single ._invoke method.\n  function defineIteratorMethods(prototype) {\n    [\"next\", \"throw\", \"return\"].forEach(function(method) {\n      prototype[method] = function(arg) {\n        return this._invoke(method, arg);\n      };\n    });\n  }\n\n  runtime.isGeneratorFunction = function(genFun) {\n    var ctor = typeof genFun === \"function\" && genFun.constructor;\n    return ctor\n      ? ctor === GeneratorFunction ||\n        // For the native GeneratorFunction constructor, the best we can\n        // do is to check its .name property.\n        (ctor.displayName || ctor.name) === \"GeneratorFunction\"\n      : false;\n  };\n\n  runtime.mark = function(genFun) {\n    if (Object.setPrototypeOf) {\n      Object.setPrototypeOf(genFun, GeneratorFunctionPrototype);\n    } else {\n      genFun.__proto__ = GeneratorFunctionPrototype;\n    }\n    genFun.prototype = Object.create(Gp);\n    return genFun;\n  };\n\n  // Within the body of any async function, `await x` is transformed to\n  // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test\n  // `value instanceof AwaitArgument` to determine if the yielded value is\n  // meant to be awaited. Some may consider the name of this method too\n  // cutesy, but they are curmudgeons.\n  runtime.awrap = function(arg) {\n    return new AwaitArgument(arg);\n  };\n\n  function AwaitArgument(arg) {\n    this.arg = arg;\n  }\n\n  function AsyncIterator(generator) {\n    // This invoke function is written in a style that assumes some\n    // calling function (or Promise) will handle exceptions.\n    function invoke(method, arg) {\n      var result = generator[method](arg);\n      var value = result.value;\n      return value instanceof AwaitArgument\n        ? Promise.resolve(value.arg).then(invokeNext, invokeThrow)\n        : Promise.resolve(value).then(function(unwrapped) {\n            // When a yielded Promise is resolved, its final value becomes\n            // the .value of the Promise<{value,done}> result for the\n            // current iteration. If the Promise is rejected, however, the\n            // result for this iteration will be rejected with the same\n            // reason. Note that rejections of yielded Promises are not\n            // thrown back into the generator function, as is the case\n            // when an awaited Promise is rejected. This difference in\n            // behavior between yield and await is important, because it\n            // allows the consumer to decide what to do with the yielded\n            // rejection (swallow it and continue, manually .throw it back\n            // into the generator, abandon iteration, whatever). With\n            // await, by contrast, there is no opportunity to examine the\n            // rejection reason outside the generator function, so the\n            // only option is to throw it from the await expression, and\n            // let the generator function handle the exception.\n            result.value = unwrapped;\n            return result;\n          });\n    }\n\n    if (typeof process === \"object\" && process.domain) {\n      invoke = process.domain.bind(invoke);\n    }\n\n    var invokeNext = invoke.bind(generator, \"next\");\n    var invokeThrow = invoke.bind(generator, \"throw\");\n    var invokeReturn = invoke.bind(generator, \"return\");\n    var previousPromise;\n\n    function enqueue(method, arg) {\n      function callInvokeWithMethodAndArg() {\n        return invoke(method, arg);\n      }\n\n      return previousPromise =\n        // If enqueue has been called before, then we want to wait until\n        // all previous Promises have been resolved before calling invoke,\n        // so that results are always delivered in the correct order. If\n        // enqueue has not been called before, then it is important to\n        // call invoke immediately, without waiting on a callback to fire,\n        // so that the async generator function has the opportunity to do\n        // any necessary setup in a predictable way. This predictability\n        // is why the Promise constructor synchronously invokes its\n        // executor callback, and why async functions synchronously\n        // execute code before the first await. Since we implement simple\n        // async functions in terms of async generators, it is especially\n        // important to get this right, even though it requires care.\n        previousPromise ? previousPromise.then(\n          callInvokeWithMethodAndArg,\n          // Avoid propagating failures to Promises returned by later\n          // invocations of the iterator.\n          callInvokeWithMethodAndArg\n        ) : new Promise(function (resolve) {\n          resolve(callInvokeWithMethodAndArg());\n        });\n    }\n\n    // Define the unified helper method that is used to implement .next,\n    // .throw, and .return (see defineIteratorMethods).\n    this._invoke = enqueue;\n  }\n\n  defineIteratorMethods(AsyncIterator.prototype);\n\n  // Note that simple async functions are implemented on top of\n  // AsyncIterator objects; they just return a Promise for the value of\n  // the final result produced by the iterator.\n  runtime.async = function(innerFn, outerFn, self, tryLocsList) {\n    var iter = new AsyncIterator(\n      wrap(innerFn, outerFn, self, tryLocsList)\n    );\n\n    return runtime.isGeneratorFunction(outerFn)\n      ? iter // If outerFn is a generator, return the full iterator.\n      : iter.next().then(function(result) {\n          return result.done ? result.value : iter.next();\n        });\n  };\n\n  function makeInvokeMethod(innerFn, self, context) {\n    var state = GenStateSuspendedStart;\n\n    return function invoke(method, arg) {\n      if (state === GenStateExecuting) {\n        throw new Error(\"Generator is already running\");\n      }\n\n      if (state === GenStateCompleted) {\n        if (method === \"throw\") {\n          throw arg;\n        }\n\n        // Be forgiving, per 25.3.3.3.3 of the spec:\n        // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume\n        return doneResult();\n      }\n\n      while (true) {\n        var delegate = context.delegate;\n        if (delegate) {\n          if (method === \"return\" ||\n              (method === \"throw\" && delegate.iterator[method] === undefined)) {\n            // A return or throw (when the delegate iterator has no throw\n            // method) always terminates the yield* loop.\n            context.delegate = null;\n\n            // If the delegate iterator has a return method, give it a\n            // chance to clean up.\n            var returnMethod = delegate.iterator[\"return\"];\n            if (returnMethod) {\n              var record = tryCatch(returnMethod, delegate.iterator, arg);\n              if (record.type === \"throw\") {\n                // If the return method threw an exception, let that\n                // exception prevail over the original return or throw.\n                method = \"throw\";\n                arg = record.arg;\n                continue;\n              }\n            }\n\n            if (method === \"return\") {\n              // Continue with the outer return, now that the delegate\n              // iterator has been terminated.\n              continue;\n            }\n          }\n\n          var record = tryCatch(\n            delegate.iterator[method],\n            delegate.iterator,\n            arg\n          );\n\n          if (record.type === \"throw\") {\n            context.delegate = null;\n\n            // Like returning generator.throw(uncaught), but without the\n            // overhead of an extra function call.\n            method = \"throw\";\n            arg = record.arg;\n            continue;\n          }\n\n          // Delegate generator ran and handled its own exceptions so\n          // regardless of what the method was, we continue as if it is\n          // \"next\" with an undefined arg.\n          method = \"next\";\n          arg = undefined;\n\n          var info = record.arg;\n          if (info.done) {\n            context[delegate.resultName] = info.value;\n            context.next = delegate.nextLoc;\n          } else {\n            state = GenStateSuspendedYield;\n            return info;\n          }\n\n          context.delegate = null;\n        }\n\n        if (method === \"next\") {\n          context._sent = arg;\n\n          if (state === GenStateSuspendedYield) {\n            context.sent = arg;\n          } else {\n            context.sent = undefined;\n          }\n        } else if (method === \"throw\") {\n          if (state === GenStateSuspendedStart) {\n            state = GenStateCompleted;\n            throw arg;\n          }\n\n          if (context.dispatchException(arg)) {\n            // If the dispatched exception was caught by a catch block,\n            // then let that catch block handle the exception normally.\n            method = \"next\";\n            arg = undefined;\n          }\n\n        } else if (method === \"return\") {\n          context.abrupt(\"return\", arg);\n        }\n\n        state = GenStateExecuting;\n\n        var record = tryCatch(innerFn, self, context);\n        if (record.type === \"normal\") {\n          // If an exception is thrown from innerFn, we leave state ===\n          // GenStateExecuting and loop back for another invocation.\n          state = context.done\n            ? GenStateCompleted\n            : GenStateSuspendedYield;\n\n          var info = {\n            value: record.arg,\n            done: context.done\n          };\n\n          if (record.arg === ContinueSentinel) {\n            if (context.delegate && method === \"next\") {\n              // Deliberately forget the last sent value so that we don't\n              // accidentally pass it on to the delegate.\n              arg = undefined;\n            }\n          } else {\n            return info;\n          }\n\n        } else if (record.type === \"throw\") {\n          state = GenStateCompleted;\n          // Dispatch the exception by looping back around to the\n          // context.dispatchException(arg) call above.\n          method = \"throw\";\n          arg = record.arg;\n        }\n      }\n    };\n  }\n\n  // Define Generator.prototype.{next,throw,return} in terms of the\n  // unified ._invoke helper method.\n  defineIteratorMethods(Gp);\n\n  Gp[iteratorSymbol] = function() {\n    return this;\n  };\n\n  Gp.toString = function() {\n    return \"[object Generator]\";\n  };\n\n  function pushTryEntry(locs) {\n    var entry = { tryLoc: locs[0] };\n\n    if (1 in locs) {\n      entry.catchLoc = locs[1];\n    }\n\n    if (2 in locs) {\n      entry.finallyLoc = locs[2];\n      entry.afterLoc = locs[3];\n    }\n\n    this.tryEntries.push(entry);\n  }\n\n  function resetTryEntry(entry) {\n    var record = entry.completion || {};\n    record.type = \"normal\";\n    delete record.arg;\n    entry.completion = record;\n  }\n\n  function Context(tryLocsList) {\n    // The root entry object (effectively a try statement without a catch\n    // or a finally block) gives us a place to store values thrown from\n    // locations where there is no enclosing try statement.\n    this.tryEntries = [{ tryLoc: \"root\" }];\n    tryLocsList.forEach(pushTryEntry, this);\n    this.reset(true);\n  }\n\n  runtime.keys = function(object) {\n    var keys = [];\n    for (var key in object) {\n      keys.push(key);\n    }\n    keys.reverse();\n\n    // Rather than returning an object with a next method, we keep\n    // things simple and return the next function itself.\n    return function next() {\n      while (keys.length) {\n        var key = keys.pop();\n        if (key in object) {\n          next.value = key;\n          next.done = false;\n          return next;\n        }\n      }\n\n      // To avoid creating an additional object, we just hang the .value\n      // and .done properties off the next function object itself. This\n      // also ensures that the minifier will not anonymize the function.\n      next.done = true;\n      return next;\n    };\n  };\n\n  function values(iterable) {\n    if (iterable) {\n      var iteratorMethod = iterable[iteratorSymbol];\n      if (iteratorMethod) {\n        return iteratorMethod.call(iterable);\n      }\n\n      if (typeof iterable.next === \"function\") {\n        return iterable;\n      }\n\n      if (!isNaN(iterable.length)) {\n        var i = -1, next = function next() {\n          while (++i < iterable.length) {\n            if (hasOwn.call(iterable, i)) {\n              next.value = iterable[i];\n              next.done = false;\n              return next;\n            }\n          }\n\n          next.value = undefined;\n          next.done = true;\n\n          return next;\n        };\n\n        return next.next = next;\n      }\n    }\n\n    // Return an iterator with no values.\n    return { next: doneResult };\n  }\n  runtime.values = values;\n\n  function doneResult() {\n    return { value: undefined, done: true };\n  }\n\n  Context.prototype = {\n    constructor: Context,\n\n    reset: function(skipTempReset) {\n      this.prev = 0;\n      this.next = 0;\n      this.sent = undefined;\n      this.done = false;\n      this.delegate = null;\n\n      this.tryEntries.forEach(resetTryEntry);\n\n      if (!skipTempReset) {\n        for (var name in this) {\n          // Not sure about the optimal order of these conditions:\n          if (name.charAt(0) === \"t\" &&\n              hasOwn.call(this, name) &&\n              !isNaN(+name.slice(1))) {\n            this[name] = undefined;\n          }\n        }\n      }\n    },\n\n    stop: function() {\n      this.done = true;\n\n      var rootEntry = this.tryEntries[0];\n      var rootRecord = rootEntry.completion;\n      if (rootRecord.type === \"throw\") {\n        throw rootRecord.arg;\n      }\n\n      return this.rval;\n    },\n\n    dispatchException: function(exception) {\n      if (this.done) {\n        throw exception;\n      }\n\n      var context = this;\n      function handle(loc, caught) {\n        record.type = \"throw\";\n        record.arg = exception;\n        context.next = loc;\n        return !!caught;\n      }\n\n      for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n        var entry = this.tryEntries[i];\n        var record = entry.completion;\n\n        if (entry.tryLoc === \"root\") {\n          // Exception thrown outside of any try block that could handle\n          // it, so set the completion value of the entire function to\n          // throw the exception.\n          return handle(\"end\");\n        }\n\n        if (entry.tryLoc <= this.prev) {\n          var hasCatch = hasOwn.call(entry, \"catchLoc\");\n          var hasFinally = hasOwn.call(entry, \"finallyLoc\");\n\n          if (hasCatch && hasFinally) {\n            if (this.prev < entry.catchLoc) {\n              return handle(entry.catchLoc, true);\n            } else if (this.prev < entry.finallyLoc) {\n              return handle(entry.finallyLoc);\n            }\n\n          } else if (hasCatch) {\n            if (this.prev < entry.catchLoc) {\n              return handle(entry.catchLoc, true);\n            }\n\n          } else if (hasFinally) {\n            if (this.prev < entry.finallyLoc) {\n              return handle(entry.finallyLoc);\n            }\n\n          } else {\n            throw new Error(\"try statement without catch or finally\");\n          }\n        }\n      }\n    },\n\n    abrupt: function(type, arg) {\n      for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n        var entry = this.tryEntries[i];\n        if (entry.tryLoc <= this.prev &&\n            hasOwn.call(entry, \"finallyLoc\") &&\n            this.prev < entry.finallyLoc) {\n          var finallyEntry = entry;\n          break;\n        }\n      }\n\n      if (finallyEntry &&\n          (type === \"break\" ||\n           type === \"continue\") &&\n          finallyEntry.tryLoc <= arg &&\n          arg <= finallyEntry.finallyLoc) {\n        // Ignore the finally entry if control is not jumping to a\n        // location outside the try/catch block.\n        finallyEntry = null;\n      }\n\n      var record = finallyEntry ? finallyEntry.completion : {};\n      record.type = type;\n      record.arg = arg;\n\n      if (finallyEntry) {\n        this.next = finallyEntry.finallyLoc;\n      } else {\n        this.complete(record);\n      }\n\n      return ContinueSentinel;\n    },\n\n    complete: function(record, afterLoc) {\n      if (record.type === \"throw\") {\n        throw record.arg;\n      }\n\n      if (record.type === \"break\" ||\n          record.type === \"continue\") {\n        this.next = record.arg;\n      } else if (record.type === \"return\") {\n        this.rval = record.arg;\n        this.next = \"end\";\n      } else if (record.type === \"normal\" && afterLoc) {\n        this.next = afterLoc;\n      }\n    },\n\n    finish: function(finallyLoc) {\n      for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n        var entry = this.tryEntries[i];\n        if (entry.finallyLoc === finallyLoc) {\n          this.complete(entry.completion, entry.afterLoc);\n          resetTryEntry(entry);\n          return ContinueSentinel;\n        }\n      }\n    },\n\n    \"catch\": function(tryLoc) {\n      for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n        var entry = this.tryEntries[i];\n        if (entry.tryLoc === tryLoc) {\n          var record = entry.completion;\n          if (record.type === \"throw\") {\n            var thrown = record.arg;\n            resetTryEntry(entry);\n          }\n          return thrown;\n        }\n      }\n\n      // The context.catch method must only be called with a location\n      // argument that corresponds to a known catch block.\n      throw new Error(\"illegal catch attempt\");\n    },\n\n    delegateYield: function(iterable, resultName, nextLoc) {\n      this.delegate = {\n        iterator: values(iterable),\n        resultName: resultName,\n        nextLoc: nextLoc\n      };\n\n      return ContinueSentinel;\n    }\n  };\n})(\n  // Among the various tricks for obtaining a reference to the global\n  // object, this seems to be the most reliable technique that does not\n  // use indirect eval (which violates Content Security Policy).\n  typeof global === \"object\" ? global :\n  typeof window === \"object\" ? window :\n  typeof self === \"object\" ? self : this\n);\n","require('../../modules/core.regexp.escape');\nmodule.exports = require('../../modules/_core').RegExp.escape;","module.exports = function(it){\n  if(typeof it != 'function')throw TypeError(it + ' is not a function!');\n  return it;\n};","var cof = require('./_cof');\r\nmodule.exports = function(it, msg){\r\n  if(typeof it != 'number' && cof(it) != 'Number')throw TypeError(msg);\r\n  return +it;\r\n};","// 22.1.3.31 Array.prototype[@@unscopables]\nvar UNSCOPABLES = require('./_wks')('unscopables')\n  , ArrayProto  = Array.prototype;\nif(ArrayProto[UNSCOPABLES] == undefined)require('./_hide')(ArrayProto, UNSCOPABLES, {});\nmodule.exports = function(key){\n  ArrayProto[UNSCOPABLES][key] = true;\n};","module.exports = function(it, Constructor, name, forbiddenField){\n  if(!(it instanceof Constructor) || (forbiddenField !== undefined && forbiddenField in it)){\n    throw TypeError(name + ': incorrect invocation!');\n  } return it;\n};","var isObject = require('./_is-object');\nmodule.exports = function(it){\n  if(!isObject(it))throw TypeError(it + ' is not an object!');\n  return it;\n};","// 22.1.3.3 Array.prototype.copyWithin(target, start, end = this.length)\n'use strict';\nvar toObject = require('./_to-object')\n  , toIndex  = require('./_to-index')\n  , toLength = require('./_to-length');\n\nmodule.exports = [].copyWithin || function copyWithin(target/*= 0*/, start/*= 0, end = @length*/){\n  var O     = toObject(this)\n    , len   = toLength(O.length)\n    , to    = toIndex(target, len)\n    , from  = toIndex(start, len)\n    , end   = arguments.length > 2 ? arguments[2] : undefined\n    , count = Math.min((end === undefined ? len : toIndex(end, len)) - from, len - to)\n    , inc   = 1;\n  if(from < to && to < from + count){\n    inc  = -1;\n    from += count - 1;\n    to   += count - 1;\n  }\n  while(count-- > 0){\n    if(from in O)O[to] = O[from];\n    else delete O[to];\n    to   += inc;\n    from += inc;\n  } return O;\n};","// 22.1.3.6 Array.prototype.fill(value, start = 0, end = this.length)\n'use strict';\nvar toObject = require('./_to-object')\n  , toIndex  = require('./_to-index')\n  , toLength = require('./_to-length');\nmodule.exports = function fill(value /*, start = 0, end = @length */){\n  var O      = toObject(this)\n    , length = toLength(O.length)\n    , aLen   = arguments.length\n    , index  = toIndex(aLen > 1 ? arguments[1] : undefined, length)\n    , end    = aLen > 2 ? arguments[2] : undefined\n    , endPos = end === undefined ? length : toIndex(end, length);\n  while(endPos > index)O[index++] = value;\n  return O;\n};","var forOf = require('./_for-of');\n\nmodule.exports = function(iter, ITERATOR){\n  var result = [];\n  forOf(iter, false, result.push, result, ITERATOR);\n  return result;\n};\n","// false -> Array#indexOf\n// true  -> Array#includes\nvar toIObject = require('./_to-iobject')\n  , toLength  = require('./_to-length')\n  , toIndex   = require('./_to-index');\nmodule.exports = function(IS_INCLUDES){\n  return function($this, el, fromIndex){\n    var O      = toIObject($this)\n      , length = toLength(O.length)\n      , index  = toIndex(fromIndex, length)\n      , value;\n    // Array#includes uses SameValueZero equality algorithm\n    if(IS_INCLUDES && el != el)while(length > index){\n      value = O[index++];\n      if(value != value)return true;\n    // Array#toIndex ignores holes, Array#includes - not\n    } else for(;length > index; index++)if(IS_INCLUDES || index in O){\n      if(O[index] === el)return IS_INCLUDES || index || 0;\n    } return !IS_INCLUDES && -1;\n  };\n};","// 0 -> Array#forEach\n// 1 -> Array#map\n// 2 -> Array#filter\n// 3 -> Array#some\n// 4 -> Array#every\n// 5 -> Array#find\n// 6 -> Array#findIndex\nvar ctx      = require('./_ctx')\n  , IObject  = require('./_iobject')\n  , toObject = require('./_to-object')\n  , toLength = require('./_to-length')\n  , asc      = require('./_array-species-create');\nmodule.exports = function(TYPE, $create){\n  var IS_MAP        = TYPE == 1\n    , IS_FILTER     = TYPE == 2\n    , IS_SOME       = TYPE == 3\n    , IS_EVERY      = TYPE == 4\n    , IS_FIND_INDEX = TYPE == 6\n    , NO_HOLES      = TYPE == 5 || IS_FIND_INDEX\n    , create        = $create || asc;\n  return function($this, callbackfn, that){\n    var O      = toObject($this)\n      , self   = IObject(O)\n      , f      = ctx(callbackfn, that, 3)\n      , length = toLength(self.length)\n      , index  = 0\n      , result = IS_MAP ? create($this, length) : IS_FILTER ? create($this, 0) : undefined\n      , val, res;\n    for(;length > index; index++)if(NO_HOLES || index in self){\n      val = self[index];\n      res = f(val, index, O);\n      if(TYPE){\n        if(IS_MAP)result[index] = res;            // map\n        else if(res)switch(TYPE){\n          case 3: return true;                    // some\n          case 5: return val;                     // find\n          case 6: return index;                   // findIndex\n          case 2: result.push(val);               // filter\n        } else if(IS_EVERY)return false;          // every\n      }\n    }\n    return IS_FIND_INDEX ? -1 : IS_SOME || IS_EVERY ? IS_EVERY : result;\n  };\n};","var aFunction = require('./_a-function')\r\n  , toObject  = require('./_to-object')\r\n  , IObject   = require('./_iobject')\r\n  , toLength  = require('./_to-length');\r\n\r\nmodule.exports = function(that, callbackfn, aLen, memo, isRight){\r\n  aFunction(callbackfn);\r\n  var O      = toObject(that)\r\n    , self   = IObject(O)\r\n    , length = toLength(O.length)\r\n    , index  = isRight ? length - 1 : 0\r\n    , i      = isRight ? -1 : 1;\r\n  if(aLen < 2)for(;;){\r\n    if(index in self){\r\n      memo = self[index];\r\n      index += i;\r\n      break;\r\n    }\r\n    index += i;\r\n    if(isRight ? index < 0 : length <= index){\r\n      throw TypeError('Reduce of empty array with no initial value');\r\n    }\r\n  }\r\n  for(;isRight ? index >= 0 : length > index; index += i)if(index in self){\r\n    memo = callbackfn(memo, self[index], index, O);\r\n  }\r\n  return memo;\r\n};","var isObject = require('./_is-object')\r\n  , isArray  = require('./_is-array')\r\n  , SPECIES  = require('./_wks')('species');\r\n\r\nmodule.exports = function(original){\r\n  var C;\r\n  if(isArray(original)){\r\n    C = original.constructor;\r\n    // cross-realm fallback\r\n    if(typeof C == 'function' && (C === Array || isArray(C.prototype)))C = undefined;\r\n    if(isObject(C)){\r\n      C = C[SPECIES];\r\n      if(C === null)C = undefined;\r\n    }\r\n  } return C === undefined ? Array : C;\r\n};","// 9.4.2.3 ArraySpeciesCreate(originalArray, length)\nvar speciesConstructor = require('./_array-species-constructor');\n\nmodule.exports = function(original, length){\n  return new (speciesConstructor(original))(length);\n};","'use strict';\nvar aFunction  = require('./_a-function')\n  , isObject   = require('./_is-object')\n  , invoke     = require('./_invoke')\n  , arraySlice = [].slice\n  , factories  = {};\n\nvar construct = function(F, len, args){\n  if(!(len in factories)){\n    for(var n = [], i = 0; i < len; i++)n[i] = 'a[' + i + ']';\n    factories[len] = Function('F,a', 'return new F(' + n.join(',') + ')');\n  } return factories[len](F, args);\n};\n\nmodule.exports = Function.bind || function bind(that /*, args... */){\n  var fn       = aFunction(this)\n    , partArgs = arraySlice.call(arguments, 1);\n  var bound = function(/* args... */){\n    var args = partArgs.concat(arraySlice.call(arguments));\n    return this instanceof bound ? construct(fn, args.length, args) : invoke(fn, args, that);\n  };\n  if(isObject(fn.prototype))bound.prototype = fn.prototype;\n  return bound;\n};","// getting tag from 19.1.3.6 Object.prototype.toString()\nvar cof = require('./_cof')\n  , TAG = require('./_wks')('toStringTag')\n  // ES3 wrong here\n  , ARG = cof(function(){ return arguments; }()) == 'Arguments';\n\n// fallback for IE11 Script Access Denied error\nvar tryGet = function(it, key){\n  try {\n    return it[key];\n  } catch(e){ /* empty */ }\n};\n\nmodule.exports = function(it){\n  var O, T, B;\n  return it === undefined ? 'Undefined' : it === null ? 'Null'\n    // @@toStringTag case\n    : typeof (T = tryGet(O = Object(it), TAG)) == 'string' ? T\n    // builtinTag case\n    : ARG ? cof(O)\n    // ES3 arguments fallback\n    : (B = cof(O)) == 'Object' && typeof O.callee == 'function' ? 'Arguments' : B;\n};","var toString = {}.toString;\n\nmodule.exports = function(it){\n  return toString.call(it).slice(8, -1);\n};","'use strict';\nvar dP          = require('./_object-dp').f\n  , create      = require('./_object-create')\n  , hide        = require('./_hide')\n  , redefineAll = require('./_redefine-all')\n  , ctx         = require('./_ctx')\n  , anInstance  = require('./_an-instance')\n  , defined     = require('./_defined')\n  , forOf       = require('./_for-of')\n  , $iterDefine = require('./_iter-define')\n  , step        = require('./_iter-step')\n  , setSpecies  = require('./_set-species')\n  , DESCRIPTORS = require('./_descriptors')\n  , fastKey     = require('./_meta').fastKey\n  , SIZE        = DESCRIPTORS ? '_s' : 'size';\n\nvar getEntry = function(that, key){\n  // fast case\n  var index = fastKey(key), entry;\n  if(index !== 'F')return that._i[index];\n  // frozen object case\n  for(entry = that._f; entry; entry = entry.n){\n    if(entry.k == key)return entry;\n  }\n};\n\nmodule.exports = {\n  getConstructor: function(wrapper, NAME, IS_MAP, ADDER){\n    var C = wrapper(function(that, iterable){\n      anInstance(that, C, NAME, '_i');\n      that._i = create(null); // index\n      that._f = undefined;    // first entry\n      that._l = undefined;    // last entry\n      that[SIZE] = 0;         // size\n      if(iterable != undefined)forOf(iterable, IS_MAP, that[ADDER], that);\n    });\n    redefineAll(C.prototype, {\n      // 23.1.3.1 Map.prototype.clear()\n      // 23.2.3.2 Set.prototype.clear()\n      clear: function clear(){\n        for(var that = this, data = that._i, entry = that._f; entry; entry = entry.n){\n          entry.r = true;\n          if(entry.p)entry.p = entry.p.n = undefined;\n          delete data[entry.i];\n        }\n        that._f = that._l = undefined;\n        that[SIZE] = 0;\n      },\n      // 23.1.3.3 Map.prototype.delete(key)\n      // 23.2.3.4 Set.prototype.delete(value)\n      'delete': function(key){\n        var that  = this\n          , entry = getEntry(that, key);\n        if(entry){\n          var next = entry.n\n            , prev = entry.p;\n          delete that._i[entry.i];\n          entry.r = true;\n          if(prev)prev.n = next;\n          if(next)next.p = prev;\n          if(that._f == entry)that._f = next;\n          if(that._l == entry)that._l = prev;\n          that[SIZE]--;\n        } return !!entry;\n      },\n      // 23.2.3.6 Set.prototype.forEach(callbackfn, thisArg = undefined)\n      // 23.1.3.5 Map.prototype.forEach(callbackfn, thisArg = undefined)\n      forEach: function forEach(callbackfn /*, that = undefined */){\n        anInstance(this, C, 'forEach');\n        var f = ctx(callbackfn, arguments.length > 1 ? arguments[1] : undefined, 3)\n          , entry;\n        while(entry = entry ? entry.n : this._f){\n          f(entry.v, entry.k, this);\n          // revert to the last existing entry\n          while(entry && entry.r)entry = entry.p;\n        }\n      },\n      // 23.1.3.7 Map.prototype.has(key)\n      // 23.2.3.7 Set.prototype.has(value)\n      has: function has(key){\n        return !!getEntry(this, key);\n      }\n    });\n    if(DESCRIPTORS)dP(C.prototype, 'size', {\n      get: function(){\n        return defined(this[SIZE]);\n      }\n    });\n    return C;\n  },\n  def: function(that, key, value){\n    var entry = getEntry(that, key)\n      , prev, index;\n    // change existing entry\n    if(entry){\n      entry.v = value;\n    // create new entry\n    } else {\n      that._l = entry = {\n        i: index = fastKey(key, true), // <- index\n        k: key,                        // <- key\n        v: value,                      // <- value\n        p: prev = that._l,             // <- previous entry\n        n: undefined,                  // <- next entry\n        r: false                       // <- removed\n      };\n      if(!that._f)that._f = entry;\n      if(prev)prev.n = entry;\n      that[SIZE]++;\n      // add to index\n      if(index !== 'F')that._i[index] = entry;\n    } return that;\n  },\n  getEntry: getEntry,\n  setStrong: function(C, NAME, IS_MAP){\n    // add .keys, .values, .entries, [@@iterator]\n    // 23.1.3.4, 23.1.3.8, 23.1.3.11, 23.1.3.12, 23.2.3.5, 23.2.3.8, 23.2.3.10, 23.2.3.11\n    $iterDefine(C, NAME, function(iterated, kind){\n      this._t = iterated;  // target\n      this._k = kind;      // kind\n      this._l = undefined; // previous\n    }, function(){\n      var that  = this\n        , kind  = that._k\n        , entry = that._l;\n      // revert to the last existing entry\n      while(entry && entry.r)entry = entry.p;\n      // get next entry\n      if(!that._t || !(that._l = entry = entry ? entry.n : that._t._f)){\n        // or finish the iteration\n        that._t = undefined;\n        return step(1);\n      }\n      // return step by kind\n      if(kind == 'keys'  )return step(0, entry.k);\n      if(kind == 'values')return step(0, entry.v);\n      return step(0, [entry.k, entry.v]);\n    }, IS_MAP ? 'entries' : 'values' , !IS_MAP, true);\n\n    // add [@@species], 23.1.2.2, 23.2.2.2\n    setSpecies(NAME);\n  }\n};","// https://github.com/DavidBruant/Map-Set.prototype.toJSON\nvar classof = require('./_classof')\n  , from    = require('./_array-from-iterable');\nmodule.exports = function(NAME){\n  return function toJSON(){\n    if(classof(this) != NAME)throw TypeError(NAME + \"#toJSON isn't generic\");\n    return from(this);\n  };\n};","'use strict';\nvar redefineAll       = require('./_redefine-all')\n  , getWeak           = require('./_meta').getWeak\n  , anObject          = require('./_an-object')\n  , isObject          = require('./_is-object')\n  , anInstance        = require('./_an-instance')\n  , forOf             = require('./_for-of')\n  , createArrayMethod = require('./_array-methods')\n  , $has              = require('./_has')\n  , arrayFind         = createArrayMethod(5)\n  , arrayFindIndex    = createArrayMethod(6)\n  , id                = 0;\n\n// fallback for uncaught frozen keys\nvar uncaughtFrozenStore = function(that){\n  return that._l || (that._l = new UncaughtFrozenStore);\n};\nvar UncaughtFrozenStore = function(){\n  this.a = [];\n};\nvar findUncaughtFrozen = function(store, key){\n  return arrayFind(store.a, function(it){\n    return it[0] === key;\n  });\n};\nUncaughtFrozenStore.prototype = {\n  get: function(key){\n    var entry = findUncaughtFrozen(this, key);\n    if(entry)return entry[1];\n  },\n  has: function(key){\n    return !!findUncaughtFrozen(this, key);\n  },\n  set: function(key, value){\n    var entry = findUncaughtFrozen(this, key);\n    if(entry)entry[1] = value;\n    else this.a.push([key, value]);\n  },\n  'delete': function(key){\n    var index = arrayFindIndex(this.a, function(it){\n      return it[0] === key;\n    });\n    if(~index)this.a.splice(index, 1);\n    return !!~index;\n  }\n};\n\nmodule.exports = {\n  getConstructor: function(wrapper, NAME, IS_MAP, ADDER){\n    var C = wrapper(function(that, iterable){\n      anInstance(that, C, NAME, '_i');\n      that._i = id++;      // collection id\n      that._l = undefined; // leak store for uncaught frozen objects\n      if(iterable != undefined)forOf(iterable, IS_MAP, that[ADDER], that);\n    });\n    redefineAll(C.prototype, {\n      // 23.3.3.2 WeakMap.prototype.delete(key)\n      // 23.4.3.3 WeakSet.prototype.delete(value)\n      'delete': function(key){\n        if(!isObject(key))return false;\n        var data = getWeak(key);\n        if(data === true)return uncaughtFrozenStore(this)['delete'](key);\n        return data && $has(data, this._i) && delete data[this._i];\n      },\n      // 23.3.3.4 WeakMap.prototype.has(key)\n      // 23.4.3.4 WeakSet.prototype.has(value)\n      has: function has(key){\n        if(!isObject(key))return false;\n        var data = getWeak(key);\n        if(data === true)return uncaughtFrozenStore(this).has(key);\n        return data && $has(data, this._i);\n      }\n    });\n    return C;\n  },\n  def: function(that, key, value){\n    var data = getWeak(anObject(key), true);\n    if(data === true)uncaughtFrozenStore(that).set(key, value);\n    else data[that._i] = value;\n    return that;\n  },\n  ufstore: uncaughtFrozenStore\n};","'use strict';\nvar global            = require('./_global')\n  , $export           = require('./_export')\n  , redefine          = require('./_redefine')\n  , redefineAll       = require('./_redefine-all')\n  , meta              = require('./_meta')\n  , forOf             = require('./_for-of')\n  , anInstance        = require('./_an-instance')\n  , isObject          = require('./_is-object')\n  , fails             = require('./_fails')\n  , $iterDetect       = require('./_iter-detect')\n  , setToStringTag    = require('./_set-to-string-tag')\n  , inheritIfRequired = require('./_inherit-if-required');\n\nmodule.exports = function(NAME, wrapper, methods, common, IS_MAP, IS_WEAK){\n  var Base  = global[NAME]\n    , C     = Base\n    , ADDER = IS_MAP ? 'set' : 'add'\n    , proto = C && C.prototype\n    , O     = {};\n  var fixMethod = function(KEY){\n    var fn = proto[KEY];\n    redefine(proto, KEY,\n      KEY == 'delete' ? function(a){\n        return IS_WEAK && !isObject(a) ? false : fn.call(this, a === 0 ? 0 : a);\n      } : KEY == 'has' ? function has(a){\n        return IS_WEAK && !isObject(a) ? false : fn.call(this, a === 0 ? 0 : a);\n      } : KEY == 'get' ? function get(a){\n        return IS_WEAK && !isObject(a) ? undefined : fn.call(this, a === 0 ? 0 : a);\n      } : KEY == 'add' ? function add(a){ fn.call(this, a === 0 ? 0 : a); return this; }\n        : function set(a, b){ fn.call(this, a === 0 ? 0 : a, b); return this; }\n    );\n  };\n  if(typeof C != 'function' || !(IS_WEAK || proto.forEach && !fails(function(){\n    new C().entries().next();\n  }))){\n    // create collection constructor\n    C = common.getConstructor(wrapper, NAME, IS_MAP, ADDER);\n    redefineAll(C.prototype, methods);\n    meta.NEED = true;\n  } else {\n    var instance             = new C\n      // early implementations not supports chaining\n      , HASNT_CHAINING       = instance[ADDER](IS_WEAK ? {} : -0, 1) != instance\n      // V8 ~  Chromium 40- weak-collections throws on primitives, but should return false\n      , THROWS_ON_PRIMITIVES = fails(function(){ instance.has(1); })\n      // most early implementations doesn't supports iterables, most modern - not close it correctly\n      , ACCEPT_ITERABLES     = $iterDetect(function(iter){ new C(iter); }) // eslint-disable-line no-new\n      // for early implementations -0 and +0 not the same\n      , BUGGY_ZERO = !IS_WEAK && fails(function(){\n        // V8 ~ Chromium 42- fails only with 5+ elements\n        var $instance = new C()\n          , index     = 5;\n        while(index--)$instance[ADDER](index, index);\n        return !$instance.has(-0);\n      });\n    if(!ACCEPT_ITERABLES){ \n      C = wrapper(function(target, iterable){\n        anInstance(target, C, NAME);\n        var that = inheritIfRequired(new Base, target, C);\n        if(iterable != undefined)forOf(iterable, IS_MAP, that[ADDER], that);\n        return that;\n      });\n      C.prototype = proto;\n      proto.constructor = C;\n    }\n    if(THROWS_ON_PRIMITIVES || BUGGY_ZERO){\n      fixMethod('delete');\n      fixMethod('has');\n      IS_MAP && fixMethod('get');\n    }\n    if(BUGGY_ZERO || HASNT_CHAINING)fixMethod(ADDER);\n    // weak collections should not contains .clear method\n    if(IS_WEAK && proto.clear)delete proto.clear;\n  }\n\n  setToStringTag(C, NAME);\n\n  O[NAME] = C;\n  $export($export.G + $export.W + $export.F * (C != Base), O);\n\n  if(!IS_WEAK)common.setStrong(C, NAME, IS_MAP);\n\n  return C;\n};","var core = module.exports = {version: '2.4.0'};\nif(typeof __e == 'number')__e = core; // eslint-disable-line no-undef","'use strict';\r\nvar $defineProperty = require('./_object-dp')\r\n  , createDesc      = require('./_property-desc');\r\n\r\nmodule.exports = function(object, index, value){\r\n  if(index in object)$defineProperty.f(object, index, createDesc(0, value));\r\n  else object[index] = value;\r\n};","// optional / simple context binding\nvar aFunction = require('./_a-function');\nmodule.exports = function(fn, that, length){\n  aFunction(fn);\n  if(that === undefined)return fn;\n  switch(length){\n    case 1: return function(a){\n      return fn.call(that, a);\n    };\n    case 2: return function(a, b){\n      return fn.call(that, a, b);\n    };\n    case 3: return function(a, b, c){\n      return fn.call(that, a, b, c);\n    };\n  }\n  return function(/* ...args */){\n    return fn.apply(that, arguments);\n  };\n};","'use strict';\r\nvar anObject    = require('./_an-object')\r\n  , toPrimitive = require('./_to-primitive')\r\n  , NUMBER      = 'number';\r\n\r\nmodule.exports = function(hint){\r\n  if(hint !== 'string' && hint !== NUMBER && hint !== 'default')throw TypeError('Incorrect hint');\r\n  return toPrimitive(anObject(this), hint != NUMBER);\r\n};","// 7.2.1 RequireObjectCoercible(argument)\nmodule.exports = function(it){\n  if(it == undefined)throw TypeError(\"Can't call method on  \" + it);\n  return it;\n};","// Thank's IE8 for his funny defineProperty\nmodule.exports = !require('./_fails')(function(){\n  return Object.defineProperty({}, 'a', {get: function(){ return 7; }}).a != 7;\n});","var isObject = require('./_is-object')\n  , document = require('./_global').document\n  // in old IE typeof document.createElement is 'object'\n  , is = isObject(document) && isObject(document.createElement);\nmodule.exports = function(it){\n  return is ? document.createElement(it) : {};\n};","// IE 8- don't enum bug keys\r\nmodule.exports = (\r\n  'constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf'\r\n).split(',');","// all enumerable object keys, includes symbols\nvar getKeys = require('./_object-keys')\n  , gOPS    = require('./_object-gops')\n  , pIE     = require('./_object-pie');\nmodule.exports = function(it){\n  var result     = getKeys(it)\n    , getSymbols = gOPS.f;\n  if(getSymbols){\n    var symbols = getSymbols(it)\n      , isEnum  = pIE.f\n      , i       = 0\n      , key;\n    while(symbols.length > i)if(isEnum.call(it, key = symbols[i++]))result.push(key);\n  } return result;\n};","var global    = require('./_global')\n  , core      = require('./_core')\n  , hide      = require('./_hide')\n  , redefine  = require('./_redefine')\n  , ctx       = require('./_ctx')\n  , PROTOTYPE = 'prototype';\n\nvar $export = function(type, name, source){\n  var IS_FORCED = type & $export.F\n    , IS_GLOBAL = type & $export.G\n    , IS_STATIC = type & $export.S\n    , IS_PROTO  = type & $export.P\n    , IS_BIND   = type & $export.B\n    , target    = IS_GLOBAL ? global : IS_STATIC ? global[name] || (global[name] = {}) : (global[name] || {})[PROTOTYPE]\n    , exports   = IS_GLOBAL ? core : core[name] || (core[name] = {})\n    , expProto  = exports[PROTOTYPE] || (exports[PROTOTYPE] = {})\n    , key, own, out, exp;\n  if(IS_GLOBAL)source = name;\n  for(key in source){\n    // contains in native\n    own = !IS_FORCED && target && target[key] !== undefined;\n    // export native or passed\n    out = (own ? target : source)[key];\n    // bind timers to global for call from export context\n    exp = IS_BIND && own ? ctx(out, global) : IS_PROTO && typeof out == 'function' ? ctx(Function.call, out) : out;\n    // extend global\n    if(target)redefine(target, key, out, type & $export.U);\n    // export\n    if(exports[key] != out)hide(exports, key, exp);\n    if(IS_PROTO && expProto[key] != out)expProto[key] = out;\n  }\n};\nglobal.core = core;\n// type bitmap\n$export.F = 1;   // forced\n$export.G = 2;   // global\n$export.S = 4;   // static\n$export.P = 8;   // proto\n$export.B = 16;  // bind\n$export.W = 32;  // wrap\n$export.U = 64;  // safe\n$export.R = 128; // real proto method for `library` \nmodule.exports = $export;","var MATCH = require('./_wks')('match');\nmodule.exports = function(KEY){\n  var re = /./;\n  try {\n    '/./'[KEY](re);\n  } catch(e){\n    try {\n      re[MATCH] = false;\n      return !'/./'[KEY](re);\n    } catch(f){ /* empty */ }\n  } return true;\n};","module.exports = function(exec){\n  try {\n    return !!exec();\n  } catch(e){\n    return true;\n  }\n};","'use strict';\nvar hide     = require('./_hide')\n  , redefine = require('./_redefine')\n  , fails    = require('./_fails')\n  , defined  = require('./_defined')\n  , wks      = require('./_wks');\n\nmodule.exports = function(KEY, length, exec){\n  var SYMBOL   = wks(KEY)\n    , fns      = exec(defined, SYMBOL, ''[KEY])\n    , strfn    = fns[0]\n    , rxfn     = fns[1];\n  if(fails(function(){\n    var O = {};\n    O[SYMBOL] = function(){ return 7; };\n    return ''[KEY](O) != 7;\n  })){\n    redefine(String.prototype, KEY, strfn);\n    hide(RegExp.prototype, SYMBOL, length == 2\n      // 21.2.5.8 RegExp.prototype[@@replace](string, replaceValue)\n      // 21.2.5.11 RegExp.prototype[@@split](string, limit)\n      ? function(string, arg){ return rxfn.call(string, this, arg); }\n      // 21.2.5.6 RegExp.prototype[@@match](string)\n      // 21.2.5.9 RegExp.prototype[@@search](string)\n      : function(string){ return rxfn.call(string, this); }\n    );\n  }\n};","'use strict';\n// 21.2.5.3 get RegExp.prototype.flags\nvar anObject = require('./_an-object');\nmodule.exports = function(){\n  var that   = anObject(this)\n    , result = '';\n  if(that.global)     result += 'g';\n  if(that.ignoreCase) result += 'i';\n  if(that.multiline)  result += 'm';\n  if(that.unicode)    result += 'u';\n  if(that.sticky)     result += 'y';\n  return result;\n};","var ctx         = require('./_ctx')\n  , call        = require('./_iter-call')\n  , isArrayIter = require('./_is-array-iter')\n  , anObject    = require('./_an-object')\n  , toLength    = require('./_to-length')\n  , getIterFn   = require('./core.get-iterator-method')\n  , BREAK       = {}\n  , RETURN      = {};\nvar exports = module.exports = function(iterable, entries, fn, that, ITERATOR){\n  var iterFn = ITERATOR ? function(){ return iterable; } : getIterFn(iterable)\n    , f      = ctx(fn, that, entries ? 2 : 1)\n    , index  = 0\n    , length, step, iterator, result;\n  if(typeof iterFn != 'function')throw TypeError(iterable + ' is not iterable!');\n  // fast case for arrays with default iterator\n  if(isArrayIter(iterFn))for(length = toLength(iterable.length); length > index; index++){\n    result = entries ? f(anObject(step = iterable[index])[0], step[1]) : f(iterable[index]);\n    if(result === BREAK || result === RETURN)return result;\n  } else for(iterator = iterFn.call(iterable); !(step = iterator.next()).done; ){\n    result = call(iterator, f, step.value, entries);\n    if(result === BREAK || result === RETURN)return result;\n  }\n};\nexports.BREAK  = BREAK;\nexports.RETURN = RETURN;","// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\nvar global = module.exports = typeof window != 'undefined' && window.Math == Math\n  ? window : typeof self != 'undefined' && self.Math == Math ? self : Function('return this')();\nif(typeof __g == 'number')__g = global; // eslint-disable-line no-undef","var hasOwnProperty = {}.hasOwnProperty;\nmodule.exports = function(it, key){\n  return hasOwnProperty.call(it, key);\n};","var dP         = require('./_object-dp')\n  , createDesc = require('./_property-desc');\nmodule.exports = require('./_descriptors') ? function(object, key, value){\n  return dP.f(object, key, createDesc(1, value));\n} : function(object, key, value){\n  object[key] = value;\n  return object;\n};","module.exports = require('./_global').document && document.documentElement;","module.exports = !require('./_descriptors') && !require('./_fails')(function(){\r\n  return Object.defineProperty(require('./_dom-create')('div'), 'a', {get: function(){ return 7; }}).a != 7;\r\n});","var isObject       = require('./_is-object')\r\n  , setPrototypeOf = require('./_set-proto').set;\r\nmodule.exports = function(that, target, C){\r\n  var P, S = target.constructor;\r\n  if(S !== C && typeof S == 'function' && (P = S.prototype) !== C.prototype && isObject(P) && setPrototypeOf){\r\n    setPrototypeOf(that, P);\r\n  } return that;\r\n};","// fast apply, http://jsperf.lnkit.com/fast-apply/5\nmodule.exports = function(fn, args, that){\n  var un = that === undefined;\n  switch(args.length){\n    case 0: return un ? fn()\n                      : fn.call(that);\n    case 1: return un ? fn(args[0])\n                      : fn.call(that, args[0]);\n    case 2: return un ? fn(args[0], args[1])\n                      : fn.call(that, args[0], args[1]);\n    case 3: return un ? fn(args[0], args[1], args[2])\n                      : fn.call(that, args[0], args[1], args[2]);\n    case 4: return un ? fn(args[0], args[1], args[2], args[3])\n                      : fn.call(that, args[0], args[1], args[2], args[3]);\n  } return              fn.apply(that, args);\n};","// fallback for non-array-like ES3 and non-enumerable old V8 strings\nvar cof = require('./_cof');\nmodule.exports = Object('z').propertyIsEnumerable(0) ? Object : function(it){\n  return cof(it) == 'String' ? it.split('') : Object(it);\n};","// check on default Array iterator\nvar Iterators  = require('./_iterators')\n  , ITERATOR   = require('./_wks')('iterator')\n  , ArrayProto = Array.prototype;\n\nmodule.exports = function(it){\n  return it !== undefined && (Iterators.Array === it || ArrayProto[ITERATOR] === it);\n};","// 7.2.2 IsArray(argument)\nvar cof = require('./_cof');\nmodule.exports = Array.isArray || function isArray(arg){\n  return cof(arg) == 'Array';\n};","// 20.1.2.3 Number.isInteger(number)\nvar isObject = require('./_is-object')\n  , floor    = Math.floor;\nmodule.exports = function isInteger(it){\n  return !isObject(it) && isFinite(it) && floor(it) === it;\n};","module.exports = function(it){\n  return typeof it === 'object' ? it !== null : typeof it === 'function';\n};","// 7.2.8 IsRegExp(argument)\nvar isObject = require('./_is-object')\n  , cof      = require('./_cof')\n  , MATCH    = require('./_wks')('match');\nmodule.exports = function(it){\n  var isRegExp;\n  return isObject(it) && ((isRegExp = it[MATCH]) !== undefined ? !!isRegExp : cof(it) == 'RegExp');\n};","// call something on iterator step with safe closing on error\nvar anObject = require('./_an-object');\nmodule.exports = function(iterator, fn, value, entries){\n  try {\n    return entries ? fn(anObject(value)[0], value[1]) : fn(value);\n  // 7.4.6 IteratorClose(iterator, completion)\n  } catch(e){\n    var ret = iterator['return'];\n    if(ret !== undefined)anObject(ret.call(iterator));\n    throw e;\n  }\n};","'use strict';\nvar create         = require('./_object-create')\n  , descriptor     = require('./_property-desc')\n  , setToStringTag = require('./_set-to-string-tag')\n  , IteratorPrototype = {};\n\n// 25.1.2.1.1 %IteratorPrototype%[@@iterator]()\nrequire('./_hide')(IteratorPrototype, require('./_wks')('iterator'), function(){ return this; });\n\nmodule.exports = function(Constructor, NAME, next){\n  Constructor.prototype = create(IteratorPrototype, {next: descriptor(1, next)});\n  setToStringTag(Constructor, NAME + ' Iterator');\n};","'use strict';\nvar LIBRARY        = require('./_library')\n  , $export        = require('./_export')\n  , redefine       = require('./_redefine')\n  , hide           = require('./_hide')\n  , has            = require('./_has')\n  , Iterators      = require('./_iterators')\n  , $iterCreate    = require('./_iter-create')\n  , setToStringTag = require('./_set-to-string-tag')\n  , getPrototypeOf = require('./_object-gpo')\n  , ITERATOR       = require('./_wks')('iterator')\n  , BUGGY          = !([].keys && 'next' in [].keys()) // Safari has buggy iterators w/o `next`\n  , FF_ITERATOR    = '@@iterator'\n  , KEYS           = 'keys'\n  , VALUES         = 'values';\n\nvar returnThis = function(){ return this; };\n\nmodule.exports = function(Base, NAME, Constructor, next, DEFAULT, IS_SET, FORCED){\n  $iterCreate(Constructor, NAME, next);\n  var getMethod = function(kind){\n    if(!BUGGY && kind in proto)return proto[kind];\n    switch(kind){\n      case KEYS: return function keys(){ return new Constructor(this, kind); };\n      case VALUES: return function values(){ return new Constructor(this, kind); };\n    } return function entries(){ return new Constructor(this, kind); };\n  };\n  var TAG        = NAME + ' Iterator'\n    , DEF_VALUES = DEFAULT == VALUES\n    , VALUES_BUG = false\n    , proto      = Base.prototype\n    , $native    = proto[ITERATOR] || proto[FF_ITERATOR] || DEFAULT && proto[DEFAULT]\n    , $default   = $native || getMethod(DEFAULT)\n    , $entries   = DEFAULT ? !DEF_VALUES ? $default : getMethod('entries') : undefined\n    , $anyNative = NAME == 'Array' ? proto.entries || $native : $native\n    , methods, key, IteratorPrototype;\n  // Fix native\n  if($anyNative){\n    IteratorPrototype = getPrototypeOf($anyNative.call(new Base));\n    if(IteratorPrototype !== Object.prototype){\n      // Set @@toStringTag to native iterators\n      setToStringTag(IteratorPrototype, TAG, true);\n      // fix for some old engines\n      if(!LIBRARY && !has(IteratorPrototype, ITERATOR))hide(IteratorPrototype, ITERATOR, returnThis);\n    }\n  }\n  // fix Array#{values, @@iterator}.name in V8 / FF\n  if(DEF_VALUES && $native && $native.name !== VALUES){\n    VALUES_BUG = true;\n    $default = function values(){ return $native.call(this); };\n  }\n  // Define iterator\n  if((!LIBRARY || FORCED) && (BUGGY || VALUES_BUG || !proto[ITERATOR])){\n    hide(proto, ITERATOR, $default);\n  }\n  // Plug for library\n  Iterators[NAME] = $default;\n  Iterators[TAG]  = returnThis;\n  if(DEFAULT){\n    methods = {\n      values:  DEF_VALUES ? $default : getMethod(VALUES),\n      keys:    IS_SET     ? $default : getMethod(KEYS),\n      entries: $entries\n    };\n    if(FORCED)for(key in methods){\n      if(!(key in proto))redefine(proto, key, methods[key]);\n    } else $export($export.P + $export.F * (BUGGY || VALUES_BUG), NAME, methods);\n  }\n  return methods;\n};","var ITERATOR     = require('./_wks')('iterator')\n  , SAFE_CLOSING = false;\n\ntry {\n  var riter = [7][ITERATOR]();\n  riter['return'] = function(){ SAFE_CLOSING = true; };\n  Array.from(riter, function(){ throw 2; });\n} catch(e){ /* empty */ }\n\nmodule.exports = function(exec, skipClosing){\n  if(!skipClosing && !SAFE_CLOSING)return false;\n  var safe = false;\n  try {\n    var arr  = [7]\n      , iter = arr[ITERATOR]();\n    iter.next = function(){ return {done: safe = true}; };\n    arr[ITERATOR] = function(){ return iter; };\n    exec(arr);\n  } catch(e){ /* empty */ }\n  return safe;\n};","module.exports = function(done, value){\n  return {value: value, done: !!done};\n};","module.exports = {};","var getKeys   = require('./_object-keys')\n  , toIObject = require('./_to-iobject');\nmodule.exports = function(object, el){\n  var O      = toIObject(object)\n    , keys   = getKeys(O)\n    , length = keys.length\n    , index  = 0\n    , key;\n  while(length > index)if(O[key = keys[index++]] === el)return key;\n};","module.exports = false;","// 20.2.2.14 Math.expm1(x)\nvar $expm1 = Math.expm1;\nmodule.exports = (!$expm1\n  // Old FF bug\n  || $expm1(10) > 22025.465794806719 || $expm1(10) < 22025.4657948067165168\n  // Tor Browser bug\n  || $expm1(-2e-17) != -2e-17\n) ? function expm1(x){\n  return (x = +x) == 0 ? x : x > -1e-6 && x < 1e-6 ? x + x * x / 2 : Math.exp(x) - 1;\n} : $expm1;","// 20.2.2.20 Math.log1p(x)\nmodule.exports = Math.log1p || function log1p(x){\n  return (x = +x) > -1e-8 && x < 1e-8 ? x - x * x / 2 : Math.log(1 + x);\n};","// 20.2.2.28 Math.sign(x)\nmodule.exports = Math.sign || function sign(x){\n  return (x = +x) == 0 || x != x ? x : x < 0 ? -1 : 1;\n};","var META     = require('./_uid')('meta')\n  , isObject = require('./_is-object')\n  , has      = require('./_has')\n  , setDesc  = require('./_object-dp').f\n  , id       = 0;\nvar isExtensible = Object.isExtensible || function(){\n  return true;\n};\nvar FREEZE = !require('./_fails')(function(){\n  return isExtensible(Object.preventExtensions({}));\n});\nvar setMeta = function(it){\n  setDesc(it, META, {value: {\n    i: 'O' + ++id, // object ID\n    w: {}          // weak collections IDs\n  }});\n};\nvar fastKey = function(it, create){\n  // return primitive with prefix\n  if(!isObject(it))return typeof it == 'symbol' ? it : (typeof it == 'string' ? 'S' : 'P') + it;\n  if(!has(it, META)){\n    // can't set metadata to uncaught frozen object\n    if(!isExtensible(it))return 'F';\n    // not necessary to add metadata\n    if(!create)return 'E';\n    // add missing metadata\n    setMeta(it);\n  // return object ID\n  } return it[META].i;\n};\nvar getWeak = function(it, create){\n  if(!has(it, META)){\n    // can't set metadata to uncaught frozen object\n    if(!isExtensible(it))return true;\n    // not necessary to add metadata\n    if(!create)return false;\n    // add missing metadata\n    setMeta(it);\n  // return hash weak collections IDs\n  } return it[META].w;\n};\n// add metadata on freeze-family methods calling\nvar onFreeze = function(it){\n  if(FREEZE && meta.NEED && isExtensible(it) && !has(it, META))setMeta(it);\n  return it;\n};\nvar meta = module.exports = {\n  KEY:      META,\n  NEED:     false,\n  fastKey:  fastKey,\n  getWeak:  getWeak,\n  onFreeze: onFreeze\n};","var Map     = require('./es6.map')\n  , $export = require('./_export')\n  , shared  = require('./_shared')('metadata')\n  , store   = shared.store || (shared.store = new (require('./es6.weak-map')));\n\nvar getOrCreateMetadataMap = function(target, targetKey, create){\n  var targetMetadata = store.get(target);\n  if(!targetMetadata){\n    if(!create)return undefined;\n    store.set(target, targetMetadata = new Map);\n  }\n  var keyMetadata = targetMetadata.get(targetKey);\n  if(!keyMetadata){\n    if(!create)return undefined;\n    targetMetadata.set(targetKey, keyMetadata = new Map);\n  } return keyMetadata;\n};\nvar ordinaryHasOwnMetadata = function(MetadataKey, O, P){\n  var metadataMap = getOrCreateMetadataMap(O, P, false);\n  return metadataMap === undefined ? false : metadataMap.has(MetadataKey);\n};\nvar ordinaryGetOwnMetadata = function(MetadataKey, O, P){\n  var metadataMap = getOrCreateMetadataMap(O, P, false);\n  return metadataMap === undefined ? undefined : metadataMap.get(MetadataKey);\n};\nvar ordinaryDefineOwnMetadata = function(MetadataKey, MetadataValue, O, P){\n  getOrCreateMetadataMap(O, P, true).set(MetadataKey, MetadataValue);\n};\nvar ordinaryOwnMetadataKeys = function(target, targetKey){\n  var metadataMap = getOrCreateMetadataMap(target, targetKey, false)\n    , keys        = [];\n  if(metadataMap)metadataMap.forEach(function(_, key){ keys.push(key); });\n  return keys;\n};\nvar toMetaKey = function(it){\n  return it === undefined || typeof it == 'symbol' ? it : String(it);\n};\nvar exp = function(O){\n  $export($export.S, 'Reflect', O);\n};\n\nmodule.exports = {\n  store: store,\n  map: getOrCreateMetadataMap,\n  has: ordinaryHasOwnMetadata,\n  get: ordinaryGetOwnMetadata,\n  set: ordinaryDefineOwnMetadata,\n  keys: ordinaryOwnMetadataKeys,\n  key: toMetaKey,\n  exp: exp\n};","var global    = require('./_global')\n  , macrotask = require('./_task').set\n  , Observer  = global.MutationObserver || global.WebKitMutationObserver\n  , process   = global.process\n  , Promise   = global.Promise\n  , isNode    = require('./_cof')(process) == 'process';\n\nmodule.exports = function(){\n  var head, last, notify;\n\n  var flush = function(){\n    var parent, fn;\n    if(isNode && (parent = process.domain))parent.exit();\n    while(head){\n      fn   = head.fn;\n      head = head.next;\n      try {\n        fn();\n      } catch(e){\n        if(head)notify();\n        else last = undefined;\n        throw e;\n      }\n    } last = undefined;\n    if(parent)parent.enter();\n  };\n\n  // Node.js\n  if(isNode){\n    notify = function(){\n      process.nextTick(flush);\n    };\n  // browsers with MutationObserver\n  } else if(Observer){\n    var toggle = true\n      , node   = document.createTextNode('');\n    new Observer(flush).observe(node, {characterData: true}); // eslint-disable-line no-new\n    notify = function(){\n      node.data = toggle = !toggle;\n    };\n  // environments with maybe non-completely correct, but existent Promise\n  } else if(Promise && Promise.resolve){\n    var promise = Promise.resolve();\n    notify = function(){\n      promise.then(flush);\n    };\n  // for other environments - macrotask based on:\n  // - setImmediate\n  // - MessageChannel\n  // - window.postMessag\n  // - onreadystatechange\n  // - setTimeout\n  } else {\n    notify = function(){\n      // strange IE + webpack dev server bug - use .call(global)\n      macrotask.call(global, flush);\n    };\n  }\n\n  return function(fn){\n    var task = {fn: fn, next: undefined};\n    if(last)last.next = task;\n    if(!head){\n      head = task;\n      notify();\n    } last = task;\n  };\n};","'use strict';\n// 19.1.2.1 Object.assign(target, source, ...)\nvar getKeys  = require('./_object-keys')\n  , gOPS     = require('./_object-gops')\n  , pIE      = require('./_object-pie')\n  , toObject = require('./_to-object')\n  , IObject  = require('./_iobject')\n  , $assign  = Object.assign;\n\n// should work with symbols and should have deterministic property order (V8 bug)\nmodule.exports = !$assign || require('./_fails')(function(){\n  var A = {}\n    , B = {}\n    , S = Symbol()\n    , K = 'abcdefghijklmnopqrst';\n  A[S] = 7;\n  K.split('').forEach(function(k){ B[k] = k; });\n  return $assign({}, A)[S] != 7 || Object.keys($assign({}, B)).join('') != K;\n}) ? function assign(target, source){ // eslint-disable-line no-unused-vars\n  var T     = toObject(target)\n    , aLen  = arguments.length\n    , index = 1\n    , getSymbols = gOPS.f\n    , isEnum     = pIE.f;\n  while(aLen > index){\n    var S      = IObject(arguments[index++])\n      , keys   = getSymbols ? getKeys(S).concat(getSymbols(S)) : getKeys(S)\n      , length = keys.length\n      , j      = 0\n      , key;\n    while(length > j)if(isEnum.call(S, key = keys[j++]))T[key] = S[key];\n  } return T;\n} : $assign;","// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])\r\nvar anObject    = require('./_an-object')\r\n  , dPs         = require('./_object-dps')\r\n  , enumBugKeys = require('./_enum-bug-keys')\r\n  , IE_PROTO    = require('./_shared-key')('IE_PROTO')\r\n  , Empty       = function(){ /* empty */ }\r\n  , PROTOTYPE   = 'prototype';\r\n\r\n// Create object with fake `null` prototype: use iframe Object with cleared prototype\r\nvar createDict = function(){\r\n  // Thrash, waste and sodomy: IE GC bug\r\n  var iframe = require('./_dom-create')('iframe')\r\n    , i      = enumBugKeys.length\r\n    , gt     = '>'\r\n    , iframeDocument;\r\n  iframe.style.display = 'none';\r\n  require('./_html').appendChild(iframe);\r\n  iframe.src = 'javascript:'; // eslint-disable-line no-script-url\r\n  // createDict = iframe.contentWindow.Object;\r\n  // html.removeChild(iframe);\r\n  iframeDocument = iframe.contentWindow.document;\r\n  iframeDocument.open();\r\n  iframeDocument.write('<script>document.F=Object</script' + gt);\r\n  iframeDocument.close();\r\n  createDict = iframeDocument.F;\r\n  while(i--)delete createDict[PROTOTYPE][enumBugKeys[i]];\r\n  return createDict();\r\n};\r\n\r\nmodule.exports = Object.create || function create(O, Properties){\r\n  var result;\r\n  if(O !== null){\r\n    Empty[PROTOTYPE] = anObject(O);\r\n    result = new Empty;\r\n    Empty[PROTOTYPE] = null;\r\n    // add \"__proto__\" for Object.getPrototypeOf polyfill\r\n    result[IE_PROTO] = O;\r\n  } else result = createDict();\r\n  return Properties === undefined ? result : dPs(result, Properties);\r\n};","var anObject       = require('./_an-object')\n  , IE8_DOM_DEFINE = require('./_ie8-dom-define')\n  , toPrimitive    = require('./_to-primitive')\n  , dP             = Object.defineProperty;\n\nexports.f = require('./_descriptors') ? Object.defineProperty : function defineProperty(O, P, Attributes){\n  anObject(O);\n  P = toPrimitive(P, true);\n  anObject(Attributes);\n  if(IE8_DOM_DEFINE)try {\n    return dP(O, P, Attributes);\n  } catch(e){ /* empty */ }\n  if('get' in Attributes || 'set' in Attributes)throw TypeError('Accessors not supported!');\n  if('value' in Attributes)O[P] = Attributes.value;\n  return O;\n};","var dP       = require('./_object-dp')\r\n  , anObject = require('./_an-object')\r\n  , getKeys  = require('./_object-keys');\r\n\r\nmodule.exports = require('./_descriptors') ? Object.defineProperties : function defineProperties(O, Properties){\r\n  anObject(O);\r\n  var keys   = getKeys(Properties)\r\n    , length = keys.length\r\n    , i = 0\r\n    , P;\r\n  while(length > i)dP.f(O, P = keys[i++], Properties[P]);\r\n  return O;\r\n};","// Forced replacement prototype accessors methods\r\nmodule.exports = require('./_library')|| !require('./_fails')(function(){\r\n  var K = Math.random();\r\n  // In FF throws only define methods\r\n  __defineSetter__.call(null, K, function(){ /* empty */});\r\n  delete require('./_global')[K];\r\n});","var pIE            = require('./_object-pie')\r\n  , createDesc     = require('./_property-desc')\r\n  , toIObject      = require('./_to-iobject')\r\n  , toPrimitive    = require('./_to-primitive')\r\n  , has            = require('./_has')\r\n  , IE8_DOM_DEFINE = require('./_ie8-dom-define')\r\n  , gOPD           = Object.getOwnPropertyDescriptor;\r\n\r\nexports.f = require('./_descriptors') ? gOPD : function getOwnPropertyDescriptor(O, P){\r\n  O = toIObject(O);\r\n  P = toPrimitive(P, true);\r\n  if(IE8_DOM_DEFINE)try {\r\n    return gOPD(O, P);\r\n  } catch(e){ /* empty */ }\r\n  if(has(O, P))return createDesc(!pIE.f.call(O, P), O[P]);\r\n};","// fallback for IE11 buggy Object.getOwnPropertyNames with iframe and window\nvar toIObject = require('./_to-iobject')\n  , gOPN      = require('./_object-gopn').f\n  , toString  = {}.toString;\n\nvar windowNames = typeof window == 'object' && window && Object.getOwnPropertyNames\n  ? Object.getOwnPropertyNames(window) : [];\n\nvar getWindowNames = function(it){\n  try {\n    return gOPN(it);\n  } catch(e){\n    return windowNames.slice();\n  }\n};\n\nmodule.exports.f = function getOwnPropertyNames(it){\n  return windowNames && toString.call(it) == '[object Window]' ? getWindowNames(it) : gOPN(toIObject(it));\n};\n","// 19.1.2.7 / 15.2.3.4 Object.getOwnPropertyNames(O)\r\nvar $keys      = require('./_object-keys-internal')\r\n  , hiddenKeys = require('./_enum-bug-keys').concat('length', 'prototype');\r\n\r\nexports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O){\r\n  return $keys(O, hiddenKeys);\r\n};","exports.f = Object.getOwnPropertySymbols;","// 19.1.2.9 / 15.2.3.2 Object.getPrototypeOf(O)\r\nvar has         = require('./_has')\r\n  , toObject    = require('./_to-object')\r\n  , IE_PROTO    = require('./_shared-key')('IE_PROTO')\r\n  , ObjectProto = Object.prototype;\r\n\r\nmodule.exports = Object.getPrototypeOf || function(O){\r\n  O = toObject(O);\r\n  if(has(O, IE_PROTO))return O[IE_PROTO];\r\n  if(typeof O.constructor == 'function' && O instanceof O.constructor){\r\n    return O.constructor.prototype;\r\n  } return O instanceof Object ? ObjectProto : null;\r\n};","var has          = require('./_has')\r\n  , toIObject    = require('./_to-iobject')\r\n  , arrayIndexOf = require('./_array-includes')(false)\r\n  , IE_PROTO     = require('./_shared-key')('IE_PROTO');\r\n\r\nmodule.exports = function(object, names){\r\n  var O      = toIObject(object)\r\n    , i      = 0\r\n    , result = []\r\n    , key;\r\n  for(key in O)if(key != IE_PROTO)has(O, key) && result.push(key);\r\n  // Don't enum bug & hidden keys\r\n  while(names.length > i)if(has(O, key = names[i++])){\r\n    ~arrayIndexOf(result, key) || result.push(key);\r\n  }\r\n  return result;\r\n};","// 19.1.2.14 / 15.2.3.14 Object.keys(O)\r\nvar $keys       = require('./_object-keys-internal')\r\n  , enumBugKeys = require('./_enum-bug-keys');\r\n\r\nmodule.exports = Object.keys || function keys(O){\r\n  return $keys(O, enumBugKeys);\r\n};","exports.f = {}.propertyIsEnumerable;","// most Object methods by ES6 should accept primitives\nvar $export = require('./_export')\n  , core    = require('./_core')\n  , fails   = require('./_fails');\nmodule.exports = function(KEY, exec){\n  var fn  = (core.Object || {})[KEY] || Object[KEY]\n    , exp = {};\n  exp[KEY] = exec(fn);\n  $export($export.S + $export.F * fails(function(){ fn(1); }), 'Object', exp);\n};","var getKeys   = require('./_object-keys')\n  , toIObject = require('./_to-iobject')\n  , isEnum    = require('./_object-pie').f;\nmodule.exports = function(isEntries){\n  return function(it){\n    var O      = toIObject(it)\n      , keys   = getKeys(O)\n      , length = keys.length\n      , i      = 0\n      , result = []\n      , key;\n    while(length > i)if(isEnum.call(O, key = keys[i++])){\n      result.push(isEntries ? [key, O[key]] : O[key]);\n    } return result;\n  };\n};","// all object keys, includes non-enumerable and symbols\nvar gOPN     = require('./_object-gopn')\n  , gOPS     = require('./_object-gops')\n  , anObject = require('./_an-object')\n  , Reflect  = require('./_global').Reflect;\nmodule.exports = Reflect && Reflect.ownKeys || function ownKeys(it){\n  var keys       = gOPN.f(anObject(it))\n    , getSymbols = gOPS.f;\n  return getSymbols ? keys.concat(getSymbols(it)) : keys;\n};","var $parseFloat = require('./_global').parseFloat\n  , $trim       = require('./_string-trim').trim;\n\nmodule.exports = 1 / $parseFloat(require('./_string-ws') + '-0') !== -Infinity ? function parseFloat(str){\n  var string = $trim(String(str), 3)\n    , result = $parseFloat(string);\n  return result === 0 && string.charAt(0) == '-' ? -0 : result;\n} : $parseFloat;","var $parseInt = require('./_global').parseInt\n  , $trim     = require('./_string-trim').trim\n  , ws        = require('./_string-ws')\n  , hex       = /^[\\-+]?0[xX]/;\n\nmodule.exports = $parseInt(ws + '08') !== 8 || $parseInt(ws + '0x16') !== 22 ? function parseInt(str, radix){\n  var string = $trim(String(str), 3);\n  return $parseInt(string, (radix >>> 0) || (hex.test(string) ? 16 : 10));\n} : $parseInt;","'use strict';\nvar path      = require('./_path')\n  , invoke    = require('./_invoke')\n  , aFunction = require('./_a-function');\nmodule.exports = function(/* ...pargs */){\n  var fn     = aFunction(this)\n    , length = arguments.length\n    , pargs  = Array(length)\n    , i      = 0\n    , _      = path._\n    , holder = false;\n  while(length > i)if((pargs[i] = arguments[i++]) === _)holder = true;\n  return function(/* ...args */){\n    var that = this\n      , aLen = arguments.length\n      , j = 0, k = 0, args;\n    if(!holder && !aLen)return invoke(fn, pargs, that);\n    args = pargs.slice();\n    if(holder)for(;length > j; j++)if(args[j] === _)args[j] = arguments[k++];\n    while(aLen > k)args.push(arguments[k++]);\n    return invoke(fn, args, that);\n  };\n};","module.exports = require('./_global');","module.exports = function(bitmap, value){\n  return {\n    enumerable  : !(bitmap & 1),\n    configurable: !(bitmap & 2),\n    writable    : !(bitmap & 4),\n    value       : value\n  };\n};","var redefine = require('./_redefine');\nmodule.exports = function(target, src, safe){\n  for(var key in src)redefine(target, key, src[key], safe);\n  return target;\n};","var global    = require('./_global')\n  , hide      = require('./_hide')\n  , has       = require('./_has')\n  , SRC       = require('./_uid')('src')\n  , TO_STRING = 'toString'\n  , $toString = Function[TO_STRING]\n  , TPL       = ('' + $toString).split(TO_STRING);\n\nrequire('./_core').inspectSource = function(it){\n  return $toString.call(it);\n};\n\n(module.exports = function(O, key, val, safe){\n  var isFunction = typeof val == 'function';\n  if(isFunction)has(val, 'name') || hide(val, 'name', key);\n  if(O[key] === val)return;\n  if(isFunction)has(val, SRC) || hide(val, SRC, O[key] ? '' + O[key] : TPL.join(String(key)));\n  if(O === global){\n    O[key] = val;\n  } else {\n    if(!safe){\n      delete O[key];\n      hide(O, key, val);\n    } else {\n      if(O[key])O[key] = val;\n      else hide(O, key, val);\n    }\n  }\n// add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative\n})(Function.prototype, TO_STRING, function toString(){\n  return typeof this == 'function' && this[SRC] || $toString.call(this);\n});","module.exports = function(regExp, replace){\n  var replacer = replace === Object(replace) ? function(part){\n    return replace[part];\n  } : replace;\n  return function(it){\n    return String(it).replace(regExp, replacer);\n  };\n};","// 7.2.9 SameValue(x, y)\nmodule.exports = Object.is || function is(x, y){\n  return x === y ? x !== 0 || 1 / x === 1 / y : x != x && y != y;\n};","// Works with __proto__ only. Old v8 can't work with null proto objects.\n/* eslint-disable no-proto */\nvar isObject = require('./_is-object')\n  , anObject = require('./_an-object');\nvar check = function(O, proto){\n  anObject(O);\n  if(!isObject(proto) && proto !== null)throw TypeError(proto + \": can't set as prototype!\");\n};\nmodule.exports = {\n  set: Object.setPrototypeOf || ('__proto__' in {} ? // eslint-disable-line\n    function(test, buggy, set){\n      try {\n        set = require('./_ctx')(Function.call, require('./_object-gopd').f(Object.prototype, '__proto__').set, 2);\n        set(test, []);\n        buggy = !(test instanceof Array);\n      } catch(e){ buggy = true; }\n      return function setPrototypeOf(O, proto){\n        check(O, proto);\n        if(buggy)O.__proto__ = proto;\n        else set(O, proto);\n        return O;\n      };\n    }({}, false) : undefined),\n  check: check\n};","'use strict';\nvar global      = require('./_global')\n  , dP          = require('./_object-dp')\n  , DESCRIPTORS = require('./_descriptors')\n  , SPECIES     = require('./_wks')('species');\n\nmodule.exports = function(KEY){\n  var C = global[KEY];\n  if(DESCRIPTORS && C && !C[SPECIES])dP.f(C, SPECIES, {\n    configurable: true,\n    get: function(){ return this; }\n  });\n};","var def = require('./_object-dp').f\n  , has = require('./_has')\n  , TAG = require('./_wks')('toStringTag');\n\nmodule.exports = function(it, tag, stat){\n  if(it && !has(it = stat ? it : it.prototype, TAG))def(it, TAG, {configurable: true, value: tag});\n};","var shared = require('./_shared')('keys')\r\n  , uid    = require('./_uid');\r\nmodule.exports = function(key){\r\n  return shared[key] || (shared[key] = uid(key));\r\n};","var global = require('./_global')\n  , SHARED = '__core-js_shared__'\n  , store  = global[SHARED] || (global[SHARED] = {});\nmodule.exports = function(key){\n  return store[key] || (store[key] = {});\n};","// 7.3.20 SpeciesConstructor(O, defaultConstructor)\nvar anObject  = require('./_an-object')\n  , aFunction = require('./_a-function')\n  , SPECIES   = require('./_wks')('species');\nmodule.exports = function(O, D){\n  var C = anObject(O).constructor, S;\n  return C === undefined || (S = anObject(C)[SPECIES]) == undefined ? D : aFunction(S);\n};","var fails = require('./_fails');\r\n\r\nmodule.exports = function(method, arg){\r\n  return !!method && fails(function(){\r\n    arg ? method.call(null, function(){}, 1) : method.call(null);\r\n  });\r\n};","var toInteger = require('./_to-integer')\n  , defined   = require('./_defined');\n// true  -> String#at\n// false -> String#codePointAt\nmodule.exports = function(TO_STRING){\n  return function(that, pos){\n    var s = String(defined(that))\n      , i = toInteger(pos)\n      , l = s.length\n      , a, b;\n    if(i < 0 || i >= l)return TO_STRING ? '' : undefined;\n    a = s.charCodeAt(i);\n    return a < 0xd800 || a > 0xdbff || i + 1 === l || (b = s.charCodeAt(i + 1)) < 0xdc00 || b > 0xdfff\n      ? TO_STRING ? s.charAt(i) : a\n      : TO_STRING ? s.slice(i, i + 2) : (a - 0xd800 << 10) + (b - 0xdc00) + 0x10000;\n  };\n};","// helper for String#{startsWith, endsWith, includes}\nvar isRegExp = require('./_is-regexp')\n  , defined  = require('./_defined');\n\nmodule.exports = function(that, searchString, NAME){\n  if(isRegExp(searchString))throw TypeError('String#' + NAME + \" doesn't accept regex!\");\n  return String(defined(that));\n};","var $export = require('./_export')\n  , fails   = require('./_fails')\n  , defined = require('./_defined')\n  , quot    = /\"/g;\n// B.2.3.2.1 CreateHTML(string, tag, attribute, value)\nvar createHTML = function(string, tag, attribute, value) {\n  var S  = String(defined(string))\n    , p1 = '<' + tag;\n  if(attribute !== '')p1 += ' ' + attribute + '=\"' + String(value).replace(quot, '&quot;') + '\"';\n  return p1 + '>' + S + '</' + tag + '>';\n};\nmodule.exports = function(NAME, exec){\n  var O = {};\n  O[NAME] = exec(createHTML);\n  $export($export.P + $export.F * fails(function(){\n    var test = ''[NAME]('\"');\n    return test !== test.toLowerCase() || test.split('\"').length > 3;\n  }), 'String', O);\n};","// https://github.com/tc39/proposal-string-pad-start-end\nvar toLength = require('./_to-length')\n  , repeat   = require('./_string-repeat')\n  , defined  = require('./_defined');\n\nmodule.exports = function(that, maxLength, fillString, left){\n  var S            = String(defined(that))\n    , stringLength = S.length\n    , fillStr      = fillString === undefined ? ' ' : String(fillString)\n    , intMaxLength = toLength(maxLength);\n  if(intMaxLength <= stringLength || fillStr == '')return S;\n  var fillLen = intMaxLength - stringLength\n    , stringFiller = repeat.call(fillStr, Math.ceil(fillLen / fillStr.length));\n  if(stringFiller.length > fillLen)stringFiller = stringFiller.slice(0, fillLen);\n  return left ? stringFiller + S : S + stringFiller;\n};\n","'use strict';\nvar toInteger = require('./_to-integer')\n  , defined   = require('./_defined');\n\nmodule.exports = function repeat(count){\n  var str = String(defined(this))\n    , res = ''\n    , n   = toInteger(count);\n  if(n < 0 || n == Infinity)throw RangeError(\"Count can't be negative\");\n  for(;n > 0; (n >>>= 1) && (str += str))if(n & 1)res += str;\n  return res;\n};","var $export = require('./_export')\n  , defined = require('./_defined')\n  , fails   = require('./_fails')\n  , spaces  = require('./_string-ws')\n  , space   = '[' + spaces + ']'\n  , non     = '\\u200b\\u0085'\n  , ltrim   = RegExp('^' + space + space + '*')\n  , rtrim   = RegExp(space + space + '*$');\n\nvar exporter = function(KEY, exec, ALIAS){\n  var exp   = {};\n  var FORCE = fails(function(){\n    return !!spaces[KEY]() || non[KEY]() != non;\n  });\n  var fn = exp[KEY] = FORCE ? exec(trim) : spaces[KEY];\n  if(ALIAS)exp[ALIAS] = fn;\n  $export($export.P + $export.F * FORCE, 'String', exp);\n};\n\n// 1 -> String#trimLeft\n// 2 -> String#trimRight\n// 3 -> String#trim\nvar trim = exporter.trim = function(string, TYPE){\n  string = String(defined(string));\n  if(TYPE & 1)string = string.replace(ltrim, '');\n  if(TYPE & 2)string = string.replace(rtrim, '');\n  return string;\n};\n\nmodule.exports = exporter;","module.exports = '\\x09\\x0A\\x0B\\x0C\\x0D\\x20\\xA0\\u1680\\u180E\\u2000\\u2001\\u2002\\u2003' +\r\n  '\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200A\\u202F\\u205F\\u3000\\u2028\\u2029\\uFEFF';","var ctx                = require('./_ctx')\n  , invoke             = require('./_invoke')\n  , html               = require('./_html')\n  , cel                = require('./_dom-create')\n  , global             = require('./_global')\n  , process            = global.process\n  , setTask            = global.setImmediate\n  , clearTask          = global.clearImmediate\n  , MessageChannel     = global.MessageChannel\n  , counter            = 0\n  , queue              = {}\n  , ONREADYSTATECHANGE = 'onreadystatechange'\n  , defer, channel, port;\nvar run = function(){\n  var id = +this;\n  if(queue.hasOwnProperty(id)){\n    var fn = queue[id];\n    delete queue[id];\n    fn();\n  }\n};\nvar listener = function(event){\n  run.call(event.data);\n};\n// Node.js 0.9+ & IE10+ has setImmediate, otherwise:\nif(!setTask || !clearTask){\n  setTask = function setImmediate(fn){\n    var args = [], i = 1;\n    while(arguments.length > i)args.push(arguments[i++]);\n    queue[++counter] = function(){\n      invoke(typeof fn == 'function' ? fn : Function(fn), args);\n    };\n    defer(counter);\n    return counter;\n  };\n  clearTask = function clearImmediate(id){\n    delete queue[id];\n  };\n  // Node.js 0.8-\n  if(require('./_cof')(process) == 'process'){\n    defer = function(id){\n      process.nextTick(ctx(run, id, 1));\n    };\n  // Browsers with MessageChannel, includes WebWorkers\n  } else if(MessageChannel){\n    channel = new MessageChannel;\n    port    = channel.port2;\n    channel.port1.onmessage = listener;\n    defer = ctx(port.postMessage, port, 1);\n  // Browsers with postMessage, skip WebWorkers\n  // IE8 has postMessage, but it's sync & typeof its postMessage is 'object'\n  } else if(global.addEventListener && typeof postMessage == 'function' && !global.importScripts){\n    defer = function(id){\n      global.postMessage(id + '', '*');\n    };\n    global.addEventListener('message', listener, false);\n  // IE8-\n  } else if(ONREADYSTATECHANGE in cel('script')){\n    defer = function(id){\n      html.appendChild(cel('script'))[ONREADYSTATECHANGE] = function(){\n        html.removeChild(this);\n        run.call(id);\n      };\n    };\n  // Rest old browsers\n  } else {\n    defer = function(id){\n      setTimeout(ctx(run, id, 1), 0);\n    };\n  }\n}\nmodule.exports = {\n  set:   setTask,\n  clear: clearTask\n};","var toInteger = require('./_to-integer')\n  , max       = Math.max\n  , min       = Math.min;\nmodule.exports = function(index, length){\n  index = toInteger(index);\n  return index < 0 ? max(index + length, 0) : min(index, length);\n};","// 7.1.4 ToInteger\nvar ceil  = Math.ceil\n  , floor = Math.floor;\nmodule.exports = function(it){\n  return isNaN(it = +it) ? 0 : (it > 0 ? floor : ceil)(it);\n};","// to indexed object, toObject with fallback for non-array-like ES3 strings\nvar IObject = require('./_iobject')\n  , defined = require('./_defined');\nmodule.exports = function(it){\n  return IObject(defined(it));\n};","// 7.1.15 ToLength\nvar toInteger = require('./_to-integer')\n  , min       = Math.min;\nmodule.exports = function(it){\n  return it > 0 ? min(toInteger(it), 0x1fffffffffffff) : 0; // pow(2, 53) - 1 == 9007199254740991\n};","// 7.1.13 ToObject(argument)\nvar defined = require('./_defined');\nmodule.exports = function(it){\n  return Object(defined(it));\n};","// 7.1.1 ToPrimitive(input [, PreferredType])\nvar isObject = require('./_is-object');\n// instead of the ES6 spec version, we didn't implement @@toPrimitive case\n// and the second argument - flag - preferred type is a string\nmodule.exports = function(it, S){\n  if(!isObject(it))return it;\n  var fn, val;\n  if(S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it)))return val;\n  if(typeof (fn = it.valueOf) == 'function' && !isObject(val = fn.call(it)))return val;\n  if(!S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it)))return val;\n  throw TypeError(\"Can't convert object to primitive value\");\n};","'use strict';\nif(require('./_descriptors')){\n  var LIBRARY             = require('./_library')\n    , global              = require('./_global')\n    , fails               = require('./_fails')\n    , $export             = require('./_export')\n    , $typed              = require('./_typed')\n    , $buffer             = require('./_typed-buffer')\n    , ctx                 = require('./_ctx')\n    , anInstance          = require('./_an-instance')\n    , propertyDesc        = require('./_property-desc')\n    , hide                = require('./_hide')\n    , redefineAll         = require('./_redefine-all')\n    , isInteger           = require('./_is-integer')\n    , toInteger           = require('./_to-integer')\n    , toLength            = require('./_to-length')\n    , toIndex             = require('./_to-index')\n    , toPrimitive         = require('./_to-primitive')\n    , has                 = require('./_has')\n    , same                = require('./_same-value')\n    , classof             = require('./_classof')\n    , isObject            = require('./_is-object')\n    , toObject            = require('./_to-object')\n    , isArrayIter         = require('./_is-array-iter')\n    , create              = require('./_object-create')\n    , getPrototypeOf      = require('./_object-gpo')\n    , gOPN                = require('./_object-gopn').f\n    , isIterable          = require('./core.is-iterable')\n    , getIterFn           = require('./core.get-iterator-method')\n    , uid                 = require('./_uid')\n    , wks                 = require('./_wks')\n    , createArrayMethod   = require('./_array-methods')\n    , createArrayIncludes = require('./_array-includes')\n    , speciesConstructor  = require('./_species-constructor')\n    , ArrayIterators      = require('./es6.array.iterator')\n    , Iterators           = require('./_iterators')\n    , $iterDetect         = require('./_iter-detect')\n    , setSpecies          = require('./_set-species')\n    , arrayFill           = require('./_array-fill')\n    , arrayCopyWithin     = require('./_array-copy-within')\n    , $DP                 = require('./_object-dp')\n    , $GOPD               = require('./_object-gopd')\n    , dP                  = $DP.f\n    , gOPD                = $GOPD.f\n    , RangeError          = global.RangeError\n    , TypeError           = global.TypeError\n    , Uint8Array          = global.Uint8Array\n    , ARRAY_BUFFER        = 'ArrayBuffer'\n    , SHARED_BUFFER       = 'Shared' + ARRAY_BUFFER\n    , BYTES_PER_ELEMENT   = 'BYTES_PER_ELEMENT'\n    , PROTOTYPE           = 'prototype'\n    , ArrayProto          = Array[PROTOTYPE]\n    , $ArrayBuffer        = $buffer.ArrayBuffer\n    , $DataView           = $buffer.DataView\n    , arrayForEach        = createArrayMethod(0)\n    , arrayFilter         = createArrayMethod(2)\n    , arraySome           = createArrayMethod(3)\n    , arrayEvery          = createArrayMethod(4)\n    , arrayFind           = createArrayMethod(5)\n    , arrayFindIndex      = createArrayMethod(6)\n    , arrayIncludes       = createArrayIncludes(true)\n    , arrayIndexOf        = createArrayIncludes(false)\n    , arrayValues         = ArrayIterators.values\n    , arrayKeys           = ArrayIterators.keys\n    , arrayEntries        = ArrayIterators.entries\n    , arrayLastIndexOf    = ArrayProto.lastIndexOf\n    , arrayReduce         = ArrayProto.reduce\n    , arrayReduceRight    = ArrayProto.reduceRight\n    , arrayJoin           = ArrayProto.join\n    , arraySort           = ArrayProto.sort\n    , arraySlice          = ArrayProto.slice\n    , arrayToString       = ArrayProto.toString\n    , arrayToLocaleString = ArrayProto.toLocaleString\n    , ITERATOR            = wks('iterator')\n    , TAG                 = wks('toStringTag')\n    , TYPED_CONSTRUCTOR   = uid('typed_constructor')\n    , DEF_CONSTRUCTOR     = uid('def_constructor')\n    , ALL_CONSTRUCTORS    = $typed.CONSTR\n    , TYPED_ARRAY         = $typed.TYPED\n    , VIEW                = $typed.VIEW\n    , WRONG_LENGTH        = 'Wrong length!';\n\n  var $map = createArrayMethod(1, function(O, length){\n    return allocate(speciesConstructor(O, O[DEF_CONSTRUCTOR]), length);\n  });\n\n  var LITTLE_ENDIAN = fails(function(){\n    return new Uint8Array(new Uint16Array([1]).buffer)[0] === 1;\n  });\n\n  var FORCED_SET = !!Uint8Array && !!Uint8Array[PROTOTYPE].set && fails(function(){\n    new Uint8Array(1).set({});\n  });\n\n  var strictToLength = function(it, SAME){\n    if(it === undefined)throw TypeError(WRONG_LENGTH);\n    var number = +it\n      , length = toLength(it);\n    if(SAME && !same(number, length))throw RangeError(WRONG_LENGTH);\n    return length;\n  };\n\n  var toOffset = function(it, BYTES){\n    var offset = toInteger(it);\n    if(offset < 0 || offset % BYTES)throw RangeError('Wrong offset!');\n    return offset;\n  };\n\n  var validate = function(it){\n    if(isObject(it) && TYPED_ARRAY in it)return it;\n    throw TypeError(it + ' is not a typed array!');\n  };\n\n  var allocate = function(C, length){\n    if(!(isObject(C) && TYPED_CONSTRUCTOR in C)){\n      throw TypeError('It is not a typed array constructor!');\n    } return new C(length);\n  };\n\n  var speciesFromList = function(O, list){\n    return fromList(speciesConstructor(O, O[DEF_CONSTRUCTOR]), list);\n  };\n\n  var fromList = function(C, list){\n    var index  = 0\n      , length = list.length\n      , result = allocate(C, length);\n    while(length > index)result[index] = list[index++];\n    return result;\n  };\n\n  var addGetter = function(it, key, internal){\n    dP(it, key, {get: function(){ return this._d[internal]; }});\n  };\n\n  var $from = function from(source /*, mapfn, thisArg */){\n    var O       = toObject(source)\n      , aLen    = arguments.length\n      , mapfn   = aLen > 1 ? arguments[1] : undefined\n      , mapping = mapfn !== undefined\n      , iterFn  = getIterFn(O)\n      , i, length, values, result, step, iterator;\n    if(iterFn != undefined && !isArrayIter(iterFn)){\n      for(iterator = iterFn.call(O), values = [], i = 0; !(step = iterator.next()).done; i++){\n        values.push(step.value);\n      } O = values;\n    }\n    if(mapping && aLen > 2)mapfn = ctx(mapfn, arguments[2], 2);\n    for(i = 0, length = toLength(O.length), result = allocate(this, length); length > i; i++){\n      result[i] = mapping ? mapfn(O[i], i) : O[i];\n    }\n    return result;\n  };\n\n  var $of = function of(/*...items*/){\n    var index  = 0\n      , length = arguments.length\n      , result = allocate(this, length);\n    while(length > index)result[index] = arguments[index++];\n    return result;\n  };\n\n  // iOS Safari 6.x fails here\n  var TO_LOCALE_BUG = !!Uint8Array && fails(function(){ arrayToLocaleString.call(new Uint8Array(1)); });\n\n  var $toLocaleString = function toLocaleString(){\n    return arrayToLocaleString.apply(TO_LOCALE_BUG ? arraySlice.call(validate(this)) : validate(this), arguments);\n  };\n\n  var proto = {\n    copyWithin: function copyWithin(target, start /*, end */){\n      return arrayCopyWithin.call(validate(this), target, start, arguments.length > 2 ? arguments[2] : undefined);\n    },\n    every: function every(callbackfn /*, thisArg */){\n      return arrayEvery(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n    },\n    fill: function fill(value /*, start, end */){ // eslint-disable-line no-unused-vars\n      return arrayFill.apply(validate(this), arguments);\n    },\n    filter: function filter(callbackfn /*, thisArg */){\n      return speciesFromList(this, arrayFilter(validate(this), callbackfn,\n        arguments.length > 1 ? arguments[1] : undefined));\n    },\n    find: function find(predicate /*, thisArg */){\n      return arrayFind(validate(this), predicate, arguments.length > 1 ? arguments[1] : undefined);\n    },\n    findIndex: function findIndex(predicate /*, thisArg */){\n      return arrayFindIndex(validate(this), predicate, arguments.length > 1 ? arguments[1] : undefined);\n    },\n    forEach: function forEach(callbackfn /*, thisArg */){\n      arrayForEach(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n    },\n    indexOf: function indexOf(searchElement /*, fromIndex */){\n      return arrayIndexOf(validate(this), searchElement, arguments.length > 1 ? arguments[1] : undefined);\n    },\n    includes: function includes(searchElement /*, fromIndex */){\n      return arrayIncludes(validate(this), searchElement, arguments.length > 1 ? arguments[1] : undefined);\n    },\n    join: function join(separator){ // eslint-disable-line no-unused-vars\n      return arrayJoin.apply(validate(this), arguments);\n    },\n    lastIndexOf: function lastIndexOf(searchElement /*, fromIndex */){ // eslint-disable-line no-unused-vars\n      return arrayLastIndexOf.apply(validate(this), arguments);\n    },\n    map: function map(mapfn /*, thisArg */){\n      return $map(validate(this), mapfn, arguments.length > 1 ? arguments[1] : undefined);\n    },\n    reduce: function reduce(callbackfn /*, initialValue */){ // eslint-disable-line no-unused-vars\n      return arrayReduce.apply(validate(this), arguments);\n    },\n    reduceRight: function reduceRight(callbackfn /*, initialValue */){ // eslint-disable-line no-unused-vars\n      return arrayReduceRight.apply(validate(this), arguments);\n    },\n    reverse: function reverse(){\n      var that   = this\n        , length = validate(that).length\n        , middle = Math.floor(length / 2)\n        , index  = 0\n        , value;\n      while(index < middle){\n        value         = that[index];\n        that[index++] = that[--length];\n        that[length]  = value;\n      } return that;\n    },\n    some: function some(callbackfn /*, thisArg */){\n      return arraySome(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n    },\n    sort: function sort(comparefn){\n      return arraySort.call(validate(this), comparefn);\n    },\n    subarray: function subarray(begin, end){\n      var O      = validate(this)\n        , length = O.length\n        , $begin = toIndex(begin, length);\n      return new (speciesConstructor(O, O[DEF_CONSTRUCTOR]))(\n        O.buffer,\n        O.byteOffset + $begin * O.BYTES_PER_ELEMENT,\n        toLength((end === undefined ? length : toIndex(end, length)) - $begin)\n      );\n    }\n  };\n\n  var $slice = function slice(start, end){\n    return speciesFromList(this, arraySlice.call(validate(this), start, end));\n  };\n\n  var $set = function set(arrayLike /*, offset */){\n    validate(this);\n    var offset = toOffset(arguments[1], 1)\n      , length = this.length\n      , src    = toObject(arrayLike)\n      , len    = toLength(src.length)\n      , index  = 0;\n    if(len + offset > length)throw RangeError(WRONG_LENGTH);\n    while(index < len)this[offset + index] = src[index++];\n  };\n\n  var $iterators = {\n    entries: function entries(){\n      return arrayEntries.call(validate(this));\n    },\n    keys: function keys(){\n      return arrayKeys.call(validate(this));\n    },\n    values: function values(){\n      return arrayValues.call(validate(this));\n    }\n  };\n\n  var isTAIndex = function(target, key){\n    return isObject(target)\n      && target[TYPED_ARRAY]\n      && typeof key != 'symbol'\n      && key in target\n      && String(+key) == String(key);\n  };\n  var $getDesc = function getOwnPropertyDescriptor(target, key){\n    return isTAIndex(target, key = toPrimitive(key, true))\n      ? propertyDesc(2, target[key])\n      : gOPD(target, key);\n  };\n  var $setDesc = function defineProperty(target, key, desc){\n    if(isTAIndex(target, key = toPrimitive(key, true))\n      && isObject(desc)\n      && has(desc, 'value')\n      && !has(desc, 'get')\n      && !has(desc, 'set')\n      // TODO: add validation descriptor w/o calling accessors\n      && !desc.configurable\n      && (!has(desc, 'writable') || desc.writable)\n      && (!has(desc, 'enumerable') || desc.enumerable)\n    ){\n      target[key] = desc.value;\n      return target;\n    } else return dP(target, key, desc);\n  };\n\n  if(!ALL_CONSTRUCTORS){\n    $GOPD.f = $getDesc;\n    $DP.f   = $setDesc;\n  }\n\n  $export($export.S + $export.F * !ALL_CONSTRUCTORS, 'Object', {\n    getOwnPropertyDescriptor: $getDesc,\n    defineProperty:           $setDesc\n  });\n\n  if(fails(function(){ arrayToString.call({}); })){\n    arrayToString = arrayToLocaleString = function toString(){\n      return arrayJoin.call(this);\n    }\n  }\n\n  var $TypedArrayPrototype$ = redefineAll({}, proto);\n  redefineAll($TypedArrayPrototype$, $iterators);\n  hide($TypedArrayPrototype$, ITERATOR, $iterators.values);\n  redefineAll($TypedArrayPrototype$, {\n    slice:          $slice,\n    set:            $set,\n    constructor:    function(){ /* noop */ },\n    toString:       arrayToString,\n    toLocaleString: $toLocaleString\n  });\n  addGetter($TypedArrayPrototype$, 'buffer', 'b');\n  addGetter($TypedArrayPrototype$, 'byteOffset', 'o');\n  addGetter($TypedArrayPrototype$, 'byteLength', 'l');\n  addGetter($TypedArrayPrototype$, 'length', 'e');\n  dP($TypedArrayPrototype$, TAG, {\n    get: function(){ return this[TYPED_ARRAY]; }\n  });\n\n  module.exports = function(KEY, BYTES, wrapper, CLAMPED){\n    CLAMPED = !!CLAMPED;\n    var NAME       = KEY + (CLAMPED ? 'Clamped' : '') + 'Array'\n      , ISNT_UINT8 = NAME != 'Uint8Array'\n      , GETTER     = 'get' + KEY\n      , SETTER     = 'set' + KEY\n      , TypedArray = global[NAME]\n      , Base       = TypedArray || {}\n      , TAC        = TypedArray && getPrototypeOf(TypedArray)\n      , FORCED     = !TypedArray || !$typed.ABV\n      , O          = {}\n      , TypedArrayPrototype = TypedArray && TypedArray[PROTOTYPE];\n    var getter = function(that, index){\n      var data = that._d;\n      return data.v[GETTER](index * BYTES + data.o, LITTLE_ENDIAN);\n    };\n    var setter = function(that, index, value){\n      var data = that._d;\n      if(CLAMPED)value = (value = Math.round(value)) < 0 ? 0 : value > 0xff ? 0xff : value & 0xff;\n      data.v[SETTER](index * BYTES + data.o, value, LITTLE_ENDIAN);\n    };\n    var addElement = function(that, index){\n      dP(that, index, {\n        get: function(){\n          return getter(this, index);\n        },\n        set: function(value){\n          return setter(this, index, value);\n        },\n        enumerable: true\n      });\n    };\n    if(FORCED){\n      TypedArray = wrapper(function(that, data, $offset, $length){\n        anInstance(that, TypedArray, NAME, '_d');\n        var index  = 0\n          , offset = 0\n          , buffer, byteLength, length, klass;\n        if(!isObject(data)){\n          length     = strictToLength(data, true)\n          byteLength = length * BYTES;\n          buffer     = new $ArrayBuffer(byteLength);\n        } else if(data instanceof $ArrayBuffer || (klass = classof(data)) == ARRAY_BUFFER || klass == SHARED_BUFFER){\n          buffer = data;\n          offset = toOffset($offset, BYTES);\n          var $len = data.byteLength;\n          if($length === undefined){\n            if($len % BYTES)throw RangeError(WRONG_LENGTH);\n            byteLength = $len - offset;\n            if(byteLength < 0)throw RangeError(WRONG_LENGTH);\n          } else {\n            byteLength = toLength($length) * BYTES;\n            if(byteLength + offset > $len)throw RangeError(WRONG_LENGTH);\n          }\n          length = byteLength / BYTES;\n        } else if(TYPED_ARRAY in data){\n          return fromList(TypedArray, data);\n        } else {\n          return $from.call(TypedArray, data);\n        }\n        hide(that, '_d', {\n          b: buffer,\n          o: offset,\n          l: byteLength,\n          e: length,\n          v: new $DataView(buffer)\n        });\n        while(index < length)addElement(that, index++);\n      });\n      TypedArrayPrototype = TypedArray[PROTOTYPE] = create($TypedArrayPrototype$);\n      hide(TypedArrayPrototype, 'constructor', TypedArray);\n    } else if(!$iterDetect(function(iter){\n      // V8 works with iterators, but fails in many other cases\n      // https://code.google.com/p/v8/issues/detail?id=4552\n      new TypedArray(null); // eslint-disable-line no-new\n      new TypedArray(iter); // eslint-disable-line no-new\n    }, true)){\n      TypedArray = wrapper(function(that, data, $offset, $length){\n        anInstance(that, TypedArray, NAME);\n        var klass;\n        // `ws` module bug, temporarily remove validation length for Uint8Array\n        // https://github.com/websockets/ws/pull/645\n        if(!isObject(data))return new Base(strictToLength(data, ISNT_UINT8));\n        if(data instanceof $ArrayBuffer || (klass = classof(data)) == ARRAY_BUFFER || klass == SHARED_BUFFER){\n          return $length !== undefined\n            ? new Base(data, toOffset($offset, BYTES), $length)\n            : $offset !== undefined\n              ? new Base(data, toOffset($offset, BYTES))\n              : new Base(data);\n        }\n        if(TYPED_ARRAY in data)return fromList(TypedArray, data);\n        return $from.call(TypedArray, data);\n      });\n      arrayForEach(TAC !== Function.prototype ? gOPN(Base).concat(gOPN(TAC)) : gOPN(Base), function(key){\n        if(!(key in TypedArray))hide(TypedArray, key, Base[key]);\n      });\n      TypedArray[PROTOTYPE] = TypedArrayPrototype;\n      if(!LIBRARY)TypedArrayPrototype.constructor = TypedArray;\n    }\n    var $nativeIterator   = TypedArrayPrototype[ITERATOR]\n      , CORRECT_ITER_NAME = !!$nativeIterator && ($nativeIterator.name == 'values' || $nativeIterator.name == undefined)\n      , $iterator         = $iterators.values;\n    hide(TypedArray, TYPED_CONSTRUCTOR, true);\n    hide(TypedArrayPrototype, TYPED_ARRAY, NAME);\n    hide(TypedArrayPrototype, VIEW, true);\n    hide(TypedArrayPrototype, DEF_CONSTRUCTOR, TypedArray);\n\n    if(CLAMPED ? new TypedArray(1)[TAG] != NAME : !(TAG in TypedArrayPrototype)){\n      dP(TypedArrayPrototype, TAG, {\n        get: function(){ return NAME; }\n      });\n    }\n\n    O[NAME] = TypedArray;\n\n    $export($export.G + $export.W + $export.F * (TypedArray != Base), O);\n\n    $export($export.S, NAME, {\n      BYTES_PER_ELEMENT: BYTES,\n      from: $from,\n      of: $of\n    });\n\n    if(!(BYTES_PER_ELEMENT in TypedArrayPrototype))hide(TypedArrayPrototype, BYTES_PER_ELEMENT, BYTES);\n\n    $export($export.P, NAME, proto);\n\n    setSpecies(NAME);\n\n    $export($export.P + $export.F * FORCED_SET, NAME, {set: $set});\n\n    $export($export.P + $export.F * !CORRECT_ITER_NAME, NAME, $iterators);\n\n    $export($export.P + $export.F * (TypedArrayPrototype.toString != arrayToString), NAME, {toString: arrayToString});\n\n    $export($export.P + $export.F * fails(function(){\n      new TypedArray(1).slice();\n    }), NAME, {slice: $slice});\n\n    $export($export.P + $export.F * (fails(function(){\n      return [1, 2].toLocaleString() != new TypedArray([1, 2]).toLocaleString()\n    }) || !fails(function(){\n      TypedArrayPrototype.toLocaleString.call([1, 2]);\n    })), NAME, {toLocaleString: $toLocaleString});\n\n    Iterators[NAME] = CORRECT_ITER_NAME ? $nativeIterator : $iterator;\n    if(!LIBRARY && !CORRECT_ITER_NAME)hide(TypedArrayPrototype, ITERATOR, $iterator);\n  };\n} else module.exports = function(){ /* empty */ };","'use strict';\nvar global         = require('./_global')\n  , DESCRIPTORS    = require('./_descriptors')\n  , LIBRARY        = require('./_library')\n  , $typed         = require('./_typed')\n  , hide           = require('./_hide')\n  , redefineAll    = require('./_redefine-all')\n  , fails          = require('./_fails')\n  , anInstance     = require('./_an-instance')\n  , toInteger      = require('./_to-integer')\n  , toLength       = require('./_to-length')\n  , gOPN           = require('./_object-gopn').f\n  , dP             = require('./_object-dp').f\n  , arrayFill      = require('./_array-fill')\n  , setToStringTag = require('./_set-to-string-tag')\n  , ARRAY_BUFFER   = 'ArrayBuffer'\n  , DATA_VIEW      = 'DataView'\n  , PROTOTYPE      = 'prototype'\n  , WRONG_LENGTH   = 'Wrong length!'\n  , WRONG_INDEX    = 'Wrong index!'\n  , $ArrayBuffer   = global[ARRAY_BUFFER]\n  , $DataView      = global[DATA_VIEW]\n  , Math           = global.Math\n  , parseInt       = global.parseInt\n  , RangeError     = global.RangeError\n  , Infinity       = global.Infinity\n  , BaseBuffer     = $ArrayBuffer\n  , abs            = Math.abs\n  , pow            = Math.pow\n  , min            = Math.min\n  , floor          = Math.floor\n  , log            = Math.log\n  , LN2            = Math.LN2\n  , BUFFER         = 'buffer'\n  , BYTE_LENGTH    = 'byteLength'\n  , BYTE_OFFSET    = 'byteOffset'\n  , $BUFFER        = DESCRIPTORS ? '_b' : BUFFER\n  , $LENGTH        = DESCRIPTORS ? '_l' : BYTE_LENGTH\n  , $OFFSET        = DESCRIPTORS ? '_o' : BYTE_OFFSET;\n\n// IEEE754 conversions based on https://github.com/feross/ieee754\nvar packIEEE754 = function(value, mLen, nBytes){\n  var buffer = Array(nBytes)\n    , eLen   = nBytes * 8 - mLen - 1\n    , eMax   = (1 << eLen) - 1\n    , eBias  = eMax >> 1\n    , rt     = mLen === 23 ? pow(2, -24) - pow(2, -77) : 0\n    , i      = 0\n    , s      = value < 0 || value === 0 && 1 / value < 0 ? 1 : 0\n    , e, m, c;\n  value = abs(value)\n  if(value != value || value === Infinity){\n    m = value != value ? 1 : 0;\n    e = eMax;\n  } else {\n    e = floor(log(value) / LN2);\n    if(value * (c = pow(2, -e)) < 1){\n      e--;\n      c *= 2;\n    }\n    if(e + eBias >= 1){\n      value += rt / c;\n    } else {\n      value += rt * pow(2, 1 - eBias);\n    }\n    if(value * c >= 2){\n      e++;\n      c /= 2;\n    }\n    if(e + eBias >= eMax){\n      m = 0;\n      e = eMax;\n    } else if(e + eBias >= 1){\n      m = (value * c - 1) * pow(2, mLen);\n      e = e + eBias;\n    } else {\n      m = value * pow(2, eBias - 1) * pow(2, mLen);\n      e = 0;\n    }\n  }\n  for(; mLen >= 8; buffer[i++] = m & 255, m /= 256, mLen -= 8);\n  e = e << mLen | m;\n  eLen += mLen;\n  for(; eLen > 0; buffer[i++] = e & 255, e /= 256, eLen -= 8);\n  buffer[--i] |= s * 128;\n  return buffer;\n};\nvar unpackIEEE754 = function(buffer, mLen, nBytes){\n  var eLen  = nBytes * 8 - mLen - 1\n    , eMax  = (1 << eLen) - 1\n    , eBias = eMax >> 1\n    , nBits = eLen - 7\n    , i     = nBytes - 1\n    , s     = buffer[i--]\n    , e     = s & 127\n    , m;\n  s >>= 7;\n  for(; nBits > 0; e = e * 256 + buffer[i], i--, nBits -= 8);\n  m = e & (1 << -nBits) - 1;\n  e >>= -nBits;\n  nBits += mLen;\n  for(; nBits > 0; m = m * 256 + buffer[i], i--, nBits -= 8);\n  if(e === 0){\n    e = 1 - eBias;\n  } else if(e === eMax){\n    return m ? NaN : s ? -Infinity : Infinity;\n  } else {\n    m = m + pow(2, mLen);\n    e = e - eBias;\n  } return (s ? -1 : 1) * m * pow(2, e - mLen);\n};\n\nvar unpackI32 = function(bytes){\n  return bytes[3] << 24 | bytes[2] << 16 | bytes[1] << 8 | bytes[0];\n};\nvar packI8 = function(it){\n  return [it & 0xff];\n};\nvar packI16 = function(it){\n  return [it & 0xff, it >> 8 & 0xff];\n};\nvar packI32 = function(it){\n  return [it & 0xff, it >> 8 & 0xff, it >> 16 & 0xff, it >> 24 & 0xff];\n};\nvar packF64 = function(it){\n  return packIEEE754(it, 52, 8);\n};\nvar packF32 = function(it){\n  return packIEEE754(it, 23, 4);\n};\n\nvar addGetter = function(C, key, internal){\n  dP(C[PROTOTYPE], key, {get: function(){ return this[internal]; }});\n};\n\nvar get = function(view, bytes, index, isLittleEndian){\n  var numIndex = +index\n    , intIndex = toInteger(numIndex);\n  if(numIndex != intIndex || intIndex < 0 || intIndex + bytes > view[$LENGTH])throw RangeError(WRONG_INDEX);\n  var store = view[$BUFFER]._b\n    , start = intIndex + view[$OFFSET]\n    , pack  = store.slice(start, start + bytes);\n  return isLittleEndian ? pack : pack.reverse();\n};\nvar set = function(view, bytes, index, conversion, value, isLittleEndian){\n  var numIndex = +index\n    , intIndex = toInteger(numIndex);\n  if(numIndex != intIndex || intIndex < 0 || intIndex + bytes > view[$LENGTH])throw RangeError(WRONG_INDEX);\n  var store = view[$BUFFER]._b\n    , start = intIndex + view[$OFFSET]\n    , pack  = conversion(+value);\n  for(var i = 0; i < bytes; i++)store[start + i] = pack[isLittleEndian ? i : bytes - i - 1];\n};\n\nvar validateArrayBufferArguments = function(that, length){\n  anInstance(that, $ArrayBuffer, ARRAY_BUFFER);\n  var numberLength = +length\n    , byteLength   = toLength(numberLength);\n  if(numberLength != byteLength)throw RangeError(WRONG_LENGTH);\n  return byteLength;\n};\n\nif(!$typed.ABV){\n  $ArrayBuffer = function ArrayBuffer(length){\n    var byteLength = validateArrayBufferArguments(this, length);\n    this._b       = arrayFill.call(Array(byteLength), 0);\n    this[$LENGTH] = byteLength;\n  };\n\n  $DataView = function DataView(buffer, byteOffset, byteLength){\n    anInstance(this, $DataView, DATA_VIEW);\n    anInstance(buffer, $ArrayBuffer, DATA_VIEW);\n    var bufferLength = buffer[$LENGTH]\n      , offset       = toInteger(byteOffset);\n    if(offset < 0 || offset > bufferLength)throw RangeError('Wrong offset!');\n    byteLength = byteLength === undefined ? bufferLength - offset : toLength(byteLength);\n    if(offset + byteLength > bufferLength)throw RangeError(WRONG_LENGTH);\n    this[$BUFFER] = buffer;\n    this[$OFFSET] = offset;\n    this[$LENGTH] = byteLength;\n  };\n\n  if(DESCRIPTORS){\n    addGetter($ArrayBuffer, BYTE_LENGTH, '_l');\n    addGetter($DataView, BUFFER, '_b');\n    addGetter($DataView, BYTE_LENGTH, '_l');\n    addGetter($DataView, BYTE_OFFSET, '_o');\n  }\n\n  redefineAll($DataView[PROTOTYPE], {\n    getInt8: function getInt8(byteOffset){\n      return get(this, 1, byteOffset)[0] << 24 >> 24;\n    },\n    getUint8: function getUint8(byteOffset){\n      return get(this, 1, byteOffset)[0];\n    },\n    getInt16: function getInt16(byteOffset /*, littleEndian */){\n      var bytes = get(this, 2, byteOffset, arguments[1]);\n      return (bytes[1] << 8 | bytes[0]) << 16 >> 16;\n    },\n    getUint16: function getUint16(byteOffset /*, littleEndian */){\n      var bytes = get(this, 2, byteOffset, arguments[1]);\n      return bytes[1] << 8 | bytes[0];\n    },\n    getInt32: function getInt32(byteOffset /*, littleEndian */){\n      return unpackI32(get(this, 4, byteOffset, arguments[1]));\n    },\n    getUint32: function getUint32(byteOffset /*, littleEndian */){\n      return unpackI32(get(this, 4, byteOffset, arguments[1])) >>> 0;\n    },\n    getFloat32: function getFloat32(byteOffset /*, littleEndian */){\n      return unpackIEEE754(get(this, 4, byteOffset, arguments[1]), 23, 4);\n    },\n    getFloat64: function getFloat64(byteOffset /*, littleEndian */){\n      return unpackIEEE754(get(this, 8, byteOffset, arguments[1]), 52, 8);\n    },\n    setInt8: function setInt8(byteOffset, value){\n      set(this, 1, byteOffset, packI8, value);\n    },\n    setUint8: function setUint8(byteOffset, value){\n      set(this, 1, byteOffset, packI8, value);\n    },\n    setInt16: function setInt16(byteOffset, value /*, littleEndian */){\n      set(this, 2, byteOffset, packI16, value, arguments[2]);\n    },\n    setUint16: function setUint16(byteOffset, value /*, littleEndian */){\n      set(this, 2, byteOffset, packI16, value, arguments[2]);\n    },\n    setInt32: function setInt32(byteOffset, value /*, littleEndian */){\n      set(this, 4, byteOffset, packI32, value, arguments[2]);\n    },\n    setUint32: function setUint32(byteOffset, value /*, littleEndian */){\n      set(this, 4, byteOffset, packI32, value, arguments[2]);\n    },\n    setFloat32: function setFloat32(byteOffset, value /*, littleEndian */){\n      set(this, 4, byteOffset, packF32, value, arguments[2]);\n    },\n    setFloat64: function setFloat64(byteOffset, value /*, littleEndian */){\n      set(this, 8, byteOffset, packF64, value, arguments[2]);\n    }\n  });\n} else {\n  if(!fails(function(){\n    new $ArrayBuffer;     // eslint-disable-line no-new\n  }) || !fails(function(){\n    new $ArrayBuffer(.5); // eslint-disable-line no-new\n  })){\n    $ArrayBuffer = function ArrayBuffer(length){\n      return new BaseBuffer(validateArrayBufferArguments(this, length));\n    };\n    var ArrayBufferProto = $ArrayBuffer[PROTOTYPE] = BaseBuffer[PROTOTYPE];\n    for(var keys = gOPN(BaseBuffer), j = 0, key; keys.length > j; ){\n      if(!((key = keys[j++]) in $ArrayBuffer))hide($ArrayBuffer, key, BaseBuffer[key]);\n    };\n    if(!LIBRARY)ArrayBufferProto.constructor = $ArrayBuffer;\n  }\n  // iOS Safari 7.x bug\n  var view = new $DataView(new $ArrayBuffer(2))\n    , $setInt8 = $DataView[PROTOTYPE].setInt8;\n  view.setInt8(0, 2147483648);\n  view.setInt8(1, 2147483649);\n  if(view.getInt8(0) || !view.getInt8(1))redefineAll($DataView[PROTOTYPE], {\n    setInt8: function setInt8(byteOffset, value){\n      $setInt8.call(this, byteOffset, value << 24 >> 24);\n    },\n    setUint8: function setUint8(byteOffset, value){\n      $setInt8.call(this, byteOffset, value << 24 >> 24);\n    }\n  }, true);\n}\nsetToStringTag($ArrayBuffer, ARRAY_BUFFER);\nsetToStringTag($DataView, DATA_VIEW);\nhide($DataView[PROTOTYPE], $typed.VIEW, true);\nexports[ARRAY_BUFFER] = $ArrayBuffer;\nexports[DATA_VIEW] = $DataView;","var global = require('./_global')\n  , hide   = require('./_hide')\n  , uid    = require('./_uid')\n  , TYPED  = uid('typed_array')\n  , VIEW   = uid('view')\n  , ABV    = !!(global.ArrayBuffer && global.DataView)\n  , CONSTR = ABV\n  , i = 0, l = 9, Typed;\n\nvar TypedArrayConstructors = (\n  'Int8Array,Uint8Array,Uint8ClampedArray,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array'\n).split(',');\n\nwhile(i < l){\n  if(Typed = global[TypedArrayConstructors[i++]]){\n    hide(Typed.prototype, TYPED, true);\n    hide(Typed.prototype, VIEW, true);\n  } else CONSTR = false;\n}\n\nmodule.exports = {\n  ABV:    ABV,\n  CONSTR: CONSTR,\n  TYPED:  TYPED,\n  VIEW:   VIEW\n};","var id = 0\n  , px = Math.random();\nmodule.exports = function(key){\n  return 'Symbol('.concat(key === undefined ? '' : key, ')_', (++id + px).toString(36));\n};","var global         = require('./_global')\r\n  , core           = require('./_core')\r\n  , LIBRARY        = require('./_library')\r\n  , wksExt         = require('./_wks-ext')\r\n  , defineProperty = require('./_object-dp').f;\r\nmodule.exports = function(name){\r\n  var $Symbol = core.Symbol || (core.Symbol = LIBRARY ? {} : global.Symbol || {});\r\n  if(name.charAt(0) != '_' && !(name in $Symbol))defineProperty($Symbol, name, {value: wksExt.f(name)});\r\n};","exports.f = require('./_wks');","var store      = require('./_shared')('wks')\n  , uid        = require('./_uid')\n  , Symbol     = require('./_global').Symbol\n  , USE_SYMBOL = typeof Symbol == 'function';\n\nvar $exports = module.exports = function(name){\n  return store[name] || (store[name] =\n    USE_SYMBOL && Symbol[name] || (USE_SYMBOL ? Symbol : uid)('Symbol.' + name));\n};\n\n$exports.store = store;","var classof   = require('./_classof')\n  , ITERATOR  = require('./_wks')('iterator')\n  , Iterators = require('./_iterators');\nmodule.exports = require('./_core').getIteratorMethod = function(it){\n  if(it != undefined)return it[ITERATOR]\n    || it['@@iterator']\n    || Iterators[classof(it)];\n};","var classof   = require('./_classof')\n  , ITERATOR  = require('./_wks')('iterator')\n  , Iterators = require('./_iterators');\nmodule.exports = require('./_core').isIterable = function(it){\n  var O = Object(it);\n  return O[ITERATOR] !== undefined\n    || '@@iterator' in O\n    || Iterators.hasOwnProperty(classof(O));\n};","// https://github.com/benjamingr/RexExp.escape\nvar $export = require('./_export')\n  , $re     = require('./_replacer')(/[\\\\^$*+?.()|[\\]{}]/g, '\\\\$&');\n\n$export($export.S, 'RegExp', {escape: function escape(it){ return $re(it); }});\n","// 22.1.3.3 Array.prototype.copyWithin(target, start, end = this.length)\nvar $export = require('./_export');\n\n$export($export.P, 'Array', {copyWithin: require('./_array-copy-within')});\n\nrequire('./_add-to-unscopables')('copyWithin');","'use strict';\r\nvar $export = require('./_export')\r\n  , $every  = require('./_array-methods')(4);\r\n\r\n$export($export.P + $export.F * !require('./_strict-method')([].every, true), 'Array', {\r\n  // 22.1.3.5 / 15.4.4.16 Array.prototype.every(callbackfn [, thisArg])\r\n  every: function every(callbackfn /* , thisArg */){\r\n    return $every(this, callbackfn, arguments[1]);\r\n  }\r\n});","// 22.1.3.6 Array.prototype.fill(value, start = 0, end = this.length)\nvar $export = require('./_export');\n\n$export($export.P, 'Array', {fill: require('./_array-fill')});\n\nrequire('./_add-to-unscopables')('fill');","'use strict';\nvar $export = require('./_export')\n  , $filter = require('./_array-methods')(2);\n\n$export($export.P + $export.F * !require('./_strict-method')([].filter, true), 'Array', {\n  // 22.1.3.7 / 15.4.4.20 Array.prototype.filter(callbackfn [, thisArg])\n  filter: function filter(callbackfn /* , thisArg */){\n    return $filter(this, callbackfn, arguments[1]);\n  }\n});","'use strict';\n// 22.1.3.9 Array.prototype.findIndex(predicate, thisArg = undefined)\nvar $export = require('./_export')\n  , $find   = require('./_array-methods')(6)\n  , KEY     = 'findIndex'\n  , forced  = true;\n// Shouldn't skip holes\nif(KEY in [])Array(1)[KEY](function(){ forced = false; });\n$export($export.P + $export.F * forced, 'Array', {\n  findIndex: function findIndex(callbackfn/*, that = undefined */){\n    return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n  }\n});\nrequire('./_add-to-unscopables')(KEY);","'use strict';\n// 22.1.3.8 Array.prototype.find(predicate, thisArg = undefined)\nvar $export = require('./_export')\n  , $find   = require('./_array-methods')(5)\n  , KEY     = 'find'\n  , forced  = true;\n// Shouldn't skip holes\nif(KEY in [])Array(1)[KEY](function(){ forced = false; });\n$export($export.P + $export.F * forced, 'Array', {\n  find: function find(callbackfn/*, that = undefined */){\n    return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n  }\n});\nrequire('./_add-to-unscopables')(KEY);","'use strict';\r\nvar $export  = require('./_export')\r\n  , $forEach = require('./_array-methods')(0)\r\n  , STRICT   = require('./_strict-method')([].forEach, true);\r\n\r\n$export($export.P + $export.F * !STRICT, 'Array', {\r\n  // 22.1.3.10 / 15.4.4.18 Array.prototype.forEach(callbackfn [, thisArg])\r\n  forEach: function forEach(callbackfn /* , thisArg */){\r\n    return $forEach(this, callbackfn, arguments[1]);\r\n  }\r\n});","'use strict';\nvar ctx            = require('./_ctx')\n  , $export        = require('./_export')\n  , toObject       = require('./_to-object')\n  , call           = require('./_iter-call')\n  , isArrayIter    = require('./_is-array-iter')\n  , toLength       = require('./_to-length')\n  , createProperty = require('./_create-property')\n  , getIterFn      = require('./core.get-iterator-method');\n\n$export($export.S + $export.F * !require('./_iter-detect')(function(iter){ Array.from(iter); }), 'Array', {\n  // 22.1.2.1 Array.from(arrayLike, mapfn = undefined, thisArg = undefined)\n  from: function from(arrayLike/*, mapfn = undefined, thisArg = undefined*/){\n    var O       = toObject(arrayLike)\n      , C       = typeof this == 'function' ? this : Array\n      , aLen    = arguments.length\n      , mapfn   = aLen > 1 ? arguments[1] : undefined\n      , mapping = mapfn !== undefined\n      , index   = 0\n      , iterFn  = getIterFn(O)\n      , length, result, step, iterator;\n    if(mapping)mapfn = ctx(mapfn, aLen > 2 ? arguments[2] : undefined, 2);\n    // if object isn't iterable or it's array with default iterator - use simple case\n    if(iterFn != undefined && !(C == Array && isArrayIter(iterFn))){\n      for(iterator = iterFn.call(O), result = new C; !(step = iterator.next()).done; index++){\n        createProperty(result, index, mapping ? call(iterator, mapfn, [step.value, index], true) : step.value);\n      }\n    } else {\n      length = toLength(O.length);\n      for(result = new C(length); length > index; index++){\n        createProperty(result, index, mapping ? mapfn(O[index], index) : O[index]);\n      }\n    }\n    result.length = index;\n    return result;\n  }\n});\n","'use strict';\r\nvar $export       = require('./_export')\r\n  , $indexOf      = require('./_array-includes')(false)\r\n  , $native       = [].indexOf\r\n  , NEGATIVE_ZERO = !!$native && 1 / [1].indexOf(1, -0) < 0;\r\n\r\n$export($export.P + $export.F * (NEGATIVE_ZERO || !require('./_strict-method')($native)), 'Array', {\r\n  // 22.1.3.11 / 15.4.4.14 Array.prototype.indexOf(searchElement [, fromIndex])\r\n  indexOf: function indexOf(searchElement /*, fromIndex = 0 */){\r\n    return NEGATIVE_ZERO\r\n      // convert -0 to +0\r\n      ? $native.apply(this, arguments) || 0\r\n      : $indexOf(this, searchElement, arguments[1]);\r\n  }\r\n});","// 22.1.2.2 / 15.4.3.2 Array.isArray(arg)\r\nvar $export = require('./_export');\r\n\r\n$export($export.S, 'Array', {isArray: require('./_is-array')});","'use strict';\nvar addToUnscopables = require('./_add-to-unscopables')\n  , step             = require('./_iter-step')\n  , Iterators        = require('./_iterators')\n  , toIObject        = require('./_to-iobject');\n\n// 22.1.3.4 Array.prototype.entries()\n// 22.1.3.13 Array.prototype.keys()\n// 22.1.3.29 Array.prototype.values()\n// 22.1.3.30 Array.prototype[@@iterator]()\nmodule.exports = require('./_iter-define')(Array, 'Array', function(iterated, kind){\n  this._t = toIObject(iterated); // target\n  this._i = 0;                   // next index\n  this._k = kind;                // kind\n// 22.1.5.2.1 %ArrayIteratorPrototype%.next()\n}, function(){\n  var O     = this._t\n    , kind  = this._k\n    , index = this._i++;\n  if(!O || index >= O.length){\n    this._t = undefined;\n    return step(1);\n  }\n  if(kind == 'keys'  )return step(0, index);\n  if(kind == 'values')return step(0, O[index]);\n  return step(0, [index, O[index]]);\n}, 'values');\n\n// argumentsList[@@iterator] is %ArrayProto_values% (9.4.4.6, 9.4.4.7)\nIterators.Arguments = Iterators.Array;\n\naddToUnscopables('keys');\naddToUnscopables('values');\naddToUnscopables('entries');","'use strict';\r\n// 22.1.3.13 Array.prototype.join(separator)\r\nvar $export   = require('./_export')\r\n  , toIObject = require('./_to-iobject')\r\n  , arrayJoin = [].join;\r\n\r\n// fallback for not array-like strings\r\n$export($export.P + $export.F * (require('./_iobject') != Object || !require('./_strict-method')(arrayJoin)), 'Array', {\r\n  join: function join(separator){\r\n    return arrayJoin.call(toIObject(this), separator === undefined ? ',' : separator);\r\n  }\r\n});","'use strict';\r\nvar $export       = require('./_export')\r\n  , toIObject     = require('./_to-iobject')\r\n  , toInteger     = require('./_to-integer')\r\n  , toLength      = require('./_to-length')\r\n  , $native       = [].lastIndexOf\r\n  , NEGATIVE_ZERO = !!$native && 1 / [1].lastIndexOf(1, -0) < 0;\r\n\r\n$export($export.P + $export.F * (NEGATIVE_ZERO || !require('./_strict-method')($native)), 'Array', {\r\n  // 22.1.3.14 / 15.4.4.15 Array.prototype.lastIndexOf(searchElement [, fromIndex])\r\n  lastIndexOf: function lastIndexOf(searchElement /*, fromIndex = @[*-1] */){\r\n    // convert -0 to +0\r\n    if(NEGATIVE_ZERO)return $native.apply(this, arguments) || 0;\r\n    var O      = toIObject(this)\r\n      , length = toLength(O.length)\r\n      , index  = length - 1;\r\n    if(arguments.length > 1)index = Math.min(index, toInteger(arguments[1]));\r\n    if(index < 0)index = length + index;\r\n    for(;index >= 0; index--)if(index in O)if(O[index] === searchElement)return index || 0;\r\n    return -1;\r\n  }\r\n});","'use strict';\r\nvar $export = require('./_export')\r\n  , $map    = require('./_array-methods')(1);\r\n\r\n$export($export.P + $export.F * !require('./_strict-method')([].map, true), 'Array', {\r\n  // 22.1.3.15 / 15.4.4.19 Array.prototype.map(callbackfn [, thisArg])\r\n  map: function map(callbackfn /* , thisArg */){\r\n    return $map(this, callbackfn, arguments[1]);\r\n  }\r\n});","'use strict';\nvar $export        = require('./_export')\n  , createProperty = require('./_create-property');\n\n// WebKit Array.of isn't generic\n$export($export.S + $export.F * require('./_fails')(function(){\n  function F(){}\n  return !(Array.of.call(F) instanceof F);\n}), 'Array', {\n  // 22.1.2.3 Array.of( ...items)\n  of: function of(/* ...args */){\n    var index  = 0\n      , aLen   = arguments.length\n      , result = new (typeof this == 'function' ? this : Array)(aLen);\n    while(aLen > index)createProperty(result, index, arguments[index++]);\n    result.length = aLen;\n    return result;\n  }\n});","'use strict';\r\nvar $export = require('./_export')\r\n  , $reduce = require('./_array-reduce');\r\n\r\n$export($export.P + $export.F * !require('./_strict-method')([].reduceRight, true), 'Array', {\r\n  // 22.1.3.19 / 15.4.4.22 Array.prototype.reduceRight(callbackfn [, initialValue])\r\n  reduceRight: function reduceRight(callbackfn /* , initialValue */){\r\n    return $reduce(this, callbackfn, arguments.length, arguments[1], true);\r\n  }\r\n});","'use strict';\r\nvar $export = require('./_export')\r\n  , $reduce = require('./_array-reduce');\r\n\r\n$export($export.P + $export.F * !require('./_strict-method')([].reduce, true), 'Array', {\r\n  // 22.1.3.18 / 15.4.4.21 Array.prototype.reduce(callbackfn [, initialValue])\r\n  reduce: function reduce(callbackfn /* , initialValue */){\r\n    return $reduce(this, callbackfn, arguments.length, arguments[1], false);\r\n  }\r\n});","'use strict';\r\nvar $export    = require('./_export')\r\n  , html       = require('./_html')\r\n  , cof        = require('./_cof')\r\n  , toIndex    = require('./_to-index')\r\n  , toLength   = require('./_to-length')\r\n  , arraySlice = [].slice;\r\n\r\n// fallback for not array-like ES3 strings and DOM objects\r\n$export($export.P + $export.F * require('./_fails')(function(){\r\n  if(html)arraySlice.call(html);\r\n}), 'Array', {\r\n  slice: function slice(begin, end){\r\n    var len   = toLength(this.length)\r\n      , klass = cof(this);\r\n    end = end === undefined ? len : end;\r\n    if(klass == 'Array')return arraySlice.call(this, begin, end);\r\n    var start  = toIndex(begin, len)\r\n      , upTo   = toIndex(end, len)\r\n      , size   = toLength(upTo - start)\r\n      , cloned = Array(size)\r\n      , i      = 0;\r\n    for(; i < size; i++)cloned[i] = klass == 'String'\r\n      ? this.charAt(start + i)\r\n      : this[start + i];\r\n    return cloned;\r\n  }\r\n});","'use strict';\r\nvar $export = require('./_export')\r\n  , $some   = require('./_array-methods')(3);\r\n\r\n$export($export.P + $export.F * !require('./_strict-method')([].some, true), 'Array', {\r\n  // 22.1.3.23 / 15.4.4.17 Array.prototype.some(callbackfn [, thisArg])\r\n  some: function some(callbackfn /* , thisArg */){\r\n    return $some(this, callbackfn, arguments[1]);\r\n  }\r\n});","'use strict';\r\nvar $export   = require('./_export')\r\n  , aFunction = require('./_a-function')\r\n  , toObject  = require('./_to-object')\r\n  , fails     = require('./_fails')\r\n  , $sort     = [].sort\r\n  , test      = [1, 2, 3];\r\n\r\n$export($export.P + $export.F * (fails(function(){\r\n  // IE8-\r\n  test.sort(undefined);\r\n}) || !fails(function(){\r\n  // V8 bug\r\n  test.sort(null);\r\n  // Old WebKit\r\n}) || !require('./_strict-method')($sort)), 'Array', {\r\n  // 22.1.3.25 Array.prototype.sort(comparefn)\r\n  sort: function sort(comparefn){\r\n    return comparefn === undefined\r\n      ? $sort.call(toObject(this))\r\n      : $sort.call(toObject(this), aFunction(comparefn));\r\n  }\r\n});","require('./_set-species')('Array');","// 20.3.3.1 / 15.9.4.4 Date.now()\r\nvar $export = require('./_export');\r\n\r\n$export($export.S, 'Date', {now: function(){ return new Date().getTime(); }});","'use strict';\r\n// 20.3.4.36 / 15.9.5.43 Date.prototype.toISOString()\r\nvar $export = require('./_export')\r\n  , fails   = require('./_fails')\r\n  , getTime = Date.prototype.getTime;\r\n\r\nvar lz = function(num){\r\n  return num > 9 ? num : '0' + num;\r\n};\r\n\r\n// PhantomJS / old WebKit has a broken implementations\r\n$export($export.P + $export.F * (fails(function(){\r\n  return new Date(-5e13 - 1).toISOString() != '0385-07-25T07:06:39.999Z';\r\n}) || !fails(function(){\r\n  new Date(NaN).toISOString();\r\n})), 'Date', {\r\n  toISOString: function toISOString(){\r\n    if(!isFinite(getTime.call(this)))throw RangeError('Invalid time value');\r\n    var d = this\r\n      , y = d.getUTCFullYear()\r\n      , m = d.getUTCMilliseconds()\r\n      , s = y < 0 ? '-' : y > 9999 ? '+' : '';\r\n    return s + ('00000' + Math.abs(y)).slice(s ? -6 : -4) +\r\n      '-' + lz(d.getUTCMonth() + 1) + '-' + lz(d.getUTCDate()) +\r\n      'T' + lz(d.getUTCHours()) + ':' + lz(d.getUTCMinutes()) +\r\n      ':' + lz(d.getUTCSeconds()) + '.' + (m > 99 ? m : '0' + lz(m)) + 'Z';\r\n  }\r\n});","'use strict';\nvar $export     = require('./_export')\n  , toObject    = require('./_to-object')\n  , toPrimitive = require('./_to-primitive');\n\n$export($export.P + $export.F * require('./_fails')(function(){\n  return new Date(NaN).toJSON() !== null || Date.prototype.toJSON.call({toISOString: function(){ return 1; }}) !== 1;\n}), 'Date', {\n  toJSON: function toJSON(key){\n    var O  = toObject(this)\n      , pv = toPrimitive(O);\n    return typeof pv == 'number' && !isFinite(pv) ? null : O.toISOString();\n  }\n});","var TO_PRIMITIVE = require('./_wks')('toPrimitive')\r\n  , proto        = Date.prototype;\r\n\r\nif(!(TO_PRIMITIVE in proto))require('./_hide')(proto, TO_PRIMITIVE, require('./_date-to-primitive'));","var DateProto    = Date.prototype\n  , INVALID_DATE = 'Invalid Date'\n  , TO_STRING    = 'toString'\n  , $toString    = DateProto[TO_STRING]\n  , getTime      = DateProto.getTime;\nif(new Date(NaN) + '' != INVALID_DATE){\n  require('./_redefine')(DateProto, TO_STRING, function toString(){\n    var value = getTime.call(this);\n    return value === value ? $toString.call(this) : INVALID_DATE;\n  });\n}","// 19.2.3.2 / 15.3.4.5 Function.prototype.bind(thisArg, args...)\r\nvar $export = require('./_export');\r\n\r\n$export($export.P, 'Function', {bind: require('./_bind')});","'use strict';\nvar isObject       = require('./_is-object')\n  , getPrototypeOf = require('./_object-gpo')\n  , HAS_INSTANCE   = require('./_wks')('hasInstance')\n  , FunctionProto  = Function.prototype;\n// 19.2.3.6 Function.prototype[@@hasInstance](V)\nif(!(HAS_INSTANCE in FunctionProto))require('./_object-dp').f(FunctionProto, HAS_INSTANCE, {value: function(O){\n  if(typeof this != 'function' || !isObject(O))return false;\n  if(!isObject(this.prototype))return O instanceof this;\n  // for environment w/o native `@@hasInstance` logic enough `instanceof`, but add this:\n  while(O = getPrototypeOf(O))if(this.prototype === O)return true;\n  return false;\n}});","var dP         = require('./_object-dp').f\n  , createDesc = require('./_property-desc')\n  , has        = require('./_has')\n  , FProto     = Function.prototype\n  , nameRE     = /^\\s*function ([^ (]*)/\n  , NAME       = 'name';\n\nvar isExtensible = Object.isExtensible || function(){\n  return true;\n};\n\n// 19.2.4.2 name\nNAME in FProto || require('./_descriptors') && dP(FProto, NAME, {\n  configurable: true,\n  get: function(){\n    try {\n      var that = this\n        , name = ('' + that).match(nameRE)[1];\n      has(that, NAME) || !isExtensible(that) || dP(that, NAME, createDesc(5, name));\n      return name;\n    } catch(e){\n      return '';\n    }\n  }\n});","'use strict';\nvar strong = require('./_collection-strong');\n\n// 23.1 Map Objects\nmodule.exports = require('./_collection')('Map', function(get){\n  return function Map(){ return get(this, arguments.length > 0 ? arguments[0] : undefined); };\n}, {\n  // 23.1.3.6 Map.prototype.get(key)\n  get: function get(key){\n    var entry = strong.getEntry(this, key);\n    return entry && entry.v;\n  },\n  // 23.1.3.9 Map.prototype.set(key, value)\n  set: function set(key, value){\n    return strong.def(this, key === 0 ? 0 : key, value);\n  }\n}, strong, true);","// 20.2.2.3 Math.acosh(x)\nvar $export = require('./_export')\n  , log1p   = require('./_math-log1p')\n  , sqrt    = Math.sqrt\n  , $acosh  = Math.acosh;\n\n$export($export.S + $export.F * !($acosh\n  // V8 bug: https://code.google.com/p/v8/issues/detail?id=3509\n  && Math.floor($acosh(Number.MAX_VALUE)) == 710\n  // Tor Browser bug: Math.acosh(Infinity) -> NaN \n  && $acosh(Infinity) == Infinity\n), 'Math', {\n  acosh: function acosh(x){\n    return (x = +x) < 1 ? NaN : x > 94906265.62425156\n      ? Math.log(x) + Math.LN2\n      : log1p(x - 1 + sqrt(x - 1) * sqrt(x + 1));\n  }\n});","// 20.2.2.5 Math.asinh(x)\nvar $export = require('./_export')\n  , $asinh  = Math.asinh;\n\nfunction asinh(x){\n  return !isFinite(x = +x) || x == 0 ? x : x < 0 ? -asinh(-x) : Math.log(x + Math.sqrt(x * x + 1));\n}\n\n// Tor Browser bug: Math.asinh(0) -> -0 \n$export($export.S + $export.F * !($asinh && 1 / $asinh(0) > 0), 'Math', {asinh: asinh});","// 20.2.2.7 Math.atanh(x)\nvar $export = require('./_export')\n  , $atanh  = Math.atanh;\n\n// Tor Browser bug: Math.atanh(-0) -> 0 \n$export($export.S + $export.F * !($atanh && 1 / $atanh(-0) < 0), 'Math', {\n  atanh: function atanh(x){\n    return (x = +x) == 0 ? x : Math.log((1 + x) / (1 - x)) / 2;\n  }\n});","// 20.2.2.9 Math.cbrt(x)\nvar $export = require('./_export')\n  , sign    = require('./_math-sign');\n\n$export($export.S, 'Math', {\n  cbrt: function cbrt(x){\n    return sign(x = +x) * Math.pow(Math.abs(x), 1 / 3);\n  }\n});","// 20.2.2.11 Math.clz32(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n  clz32: function clz32(x){\n    return (x >>>= 0) ? 31 - Math.floor(Math.log(x + 0.5) * Math.LOG2E) : 32;\n  }\n});","// 20.2.2.12 Math.cosh(x)\nvar $export = require('./_export')\n  , exp     = Math.exp;\n\n$export($export.S, 'Math', {\n  cosh: function cosh(x){\n    return (exp(x = +x) + exp(-x)) / 2;\n  }\n});","// 20.2.2.14 Math.expm1(x)\nvar $export = require('./_export')\n  , $expm1  = require('./_math-expm1');\n\n$export($export.S + $export.F * ($expm1 != Math.expm1), 'Math', {expm1: $expm1});","// 20.2.2.16 Math.fround(x)\nvar $export   = require('./_export')\n  , sign      = require('./_math-sign')\n  , pow       = Math.pow\n  , EPSILON   = pow(2, -52)\n  , EPSILON32 = pow(2, -23)\n  , MAX32     = pow(2, 127) * (2 - EPSILON32)\n  , MIN32     = pow(2, -126);\n\nvar roundTiesToEven = function(n){\n  return n + 1 / EPSILON - 1 / EPSILON;\n};\n\n\n$export($export.S, 'Math', {\n  fround: function fround(x){\n    var $abs  = Math.abs(x)\n      , $sign = sign(x)\n      , a, result;\n    if($abs < MIN32)return $sign * roundTiesToEven($abs / MIN32 / EPSILON32) * MIN32 * EPSILON32;\n    a = (1 + EPSILON32 / EPSILON) * $abs;\n    result = a - (a - $abs);\n    if(result > MAX32 || result != result)return $sign * Infinity;\n    return $sign * result;\n  }\n});","// 20.2.2.17 Math.hypot([value1[, value2[, … ]]])\nvar $export = require('./_export')\n  , abs     = Math.abs;\n\n$export($export.S, 'Math', {\n  hypot: function hypot(value1, value2){ // eslint-disable-line no-unused-vars\n    var sum  = 0\n      , i    = 0\n      , aLen = arguments.length\n      , larg = 0\n      , arg, div;\n    while(i < aLen){\n      arg = abs(arguments[i++]);\n      if(larg < arg){\n        div  = larg / arg;\n        sum  = sum * div * div + 1;\n        larg = arg;\n      } else if(arg > 0){\n        div  = arg / larg;\n        sum += div * div;\n      } else sum += arg;\n    }\n    return larg === Infinity ? Infinity : larg * Math.sqrt(sum);\n  }\n});","// 20.2.2.18 Math.imul(x, y)\nvar $export = require('./_export')\n  , $imul   = Math.imul;\n\n// some WebKit versions fails with big numbers, some has wrong arity\n$export($export.S + $export.F * require('./_fails')(function(){\n  return $imul(0xffffffff, 5) != -5 || $imul.length != 2;\n}), 'Math', {\n  imul: function imul(x, y){\n    var UINT16 = 0xffff\n      , xn = +x\n      , yn = +y\n      , xl = UINT16 & xn\n      , yl = UINT16 & yn;\n    return 0 | xl * yl + ((UINT16 & xn >>> 16) * yl + xl * (UINT16 & yn >>> 16) << 16 >>> 0);\n  }\n});","// 20.2.2.21 Math.log10(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n  log10: function log10(x){\n    return Math.log(x) / Math.LN10;\n  }\n});","// 20.2.2.20 Math.log1p(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {log1p: require('./_math-log1p')});","// 20.2.2.22 Math.log2(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n  log2: function log2(x){\n    return Math.log(x) / Math.LN2;\n  }\n});","// 20.2.2.28 Math.sign(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {sign: require('./_math-sign')});","// 20.2.2.30 Math.sinh(x)\nvar $export = require('./_export')\n  , expm1   = require('./_math-expm1')\n  , exp     = Math.exp;\n\n// V8 near Chromium 38 has a problem with very small numbers\n$export($export.S + $export.F * require('./_fails')(function(){\n  return !Math.sinh(-2e-17) != -2e-17;\n}), 'Math', {\n  sinh: function sinh(x){\n    return Math.abs(x = +x) < 1\n      ? (expm1(x) - expm1(-x)) / 2\n      : (exp(x - 1) - exp(-x - 1)) * (Math.E / 2);\n  }\n});","// 20.2.2.33 Math.tanh(x)\nvar $export = require('./_export')\n  , expm1   = require('./_math-expm1')\n  , exp     = Math.exp;\n\n$export($export.S, 'Math', {\n  tanh: function tanh(x){\n    var a = expm1(x = +x)\n      , b = expm1(-x);\n    return a == Infinity ? 1 : b == Infinity ? -1 : (a - b) / (exp(x) + exp(-x));\n  }\n});","// 20.2.2.34 Math.trunc(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n  trunc: function trunc(it){\n    return (it > 0 ? Math.floor : Math.ceil)(it);\n  }\n});","'use strict';\nvar global            = require('./_global')\n  , has               = require('./_has')\n  , cof               = require('./_cof')\n  , inheritIfRequired = require('./_inherit-if-required')\n  , toPrimitive       = require('./_to-primitive')\n  , fails             = require('./_fails')\n  , gOPN              = require('./_object-gopn').f\n  , gOPD              = require('./_object-gopd').f\n  , dP                = require('./_object-dp').f\n  , $trim             = require('./_string-trim').trim\n  , NUMBER            = 'Number'\n  , $Number           = global[NUMBER]\n  , Base              = $Number\n  , proto             = $Number.prototype\n  // Opera ~12 has broken Object#toString\n  , BROKEN_COF        = cof(require('./_object-create')(proto)) == NUMBER\n  , TRIM              = 'trim' in String.prototype;\n\n// 7.1.3 ToNumber(argument)\nvar toNumber = function(argument){\n  var it = toPrimitive(argument, false);\n  if(typeof it == 'string' && it.length > 2){\n    it = TRIM ? it.trim() : $trim(it, 3);\n    var first = it.charCodeAt(0)\n      , third, radix, maxCode;\n    if(first === 43 || first === 45){\n      third = it.charCodeAt(2);\n      if(third === 88 || third === 120)return NaN; // Number('+0x1') should be NaN, old V8 fix\n    } else if(first === 48){\n      switch(it.charCodeAt(1)){\n        case 66 : case 98  : radix = 2; maxCode = 49; break; // fast equal /^0b[01]+$/i\n        case 79 : case 111 : radix = 8; maxCode = 55; break; // fast equal /^0o[0-7]+$/i\n        default : return +it;\n      }\n      for(var digits = it.slice(2), i = 0, l = digits.length, code; i < l; i++){\n        code = digits.charCodeAt(i);\n        // parseInt parses a string to a first unavailable symbol\n        // but ToNumber should return NaN if a string contains unavailable symbols\n        if(code < 48 || code > maxCode)return NaN;\n      } return parseInt(digits, radix);\n    }\n  } return +it;\n};\n\nif(!$Number(' 0o1') || !$Number('0b1') || $Number('+0x1')){\n  $Number = function Number(value){\n    var it = arguments.length < 1 ? 0 : value\n      , that = this;\n    return that instanceof $Number\n      // check on 1..constructor(foo) case\n      && (BROKEN_COF ? fails(function(){ proto.valueOf.call(that); }) : cof(that) != NUMBER)\n        ? inheritIfRequired(new Base(toNumber(it)), that, $Number) : toNumber(it);\n  };\n  for(var keys = require('./_descriptors') ? gOPN(Base) : (\n    // ES3:\n    'MAX_VALUE,MIN_VALUE,NaN,NEGATIVE_INFINITY,POSITIVE_INFINITY,' +\n    // ES6 (in case, if modules with ES6 Number statics required before):\n    'EPSILON,isFinite,isInteger,isNaN,isSafeInteger,MAX_SAFE_INTEGER,' +\n    'MIN_SAFE_INTEGER,parseFloat,parseInt,isInteger'\n  ).split(','), j = 0, key; keys.length > j; j++){\n    if(has(Base, key = keys[j]) && !has($Number, key)){\n      dP($Number, key, gOPD(Base, key));\n    }\n  }\n  $Number.prototype = proto;\n  proto.constructor = $Number;\n  require('./_redefine')(global, NUMBER, $Number);\n}","// 20.1.2.1 Number.EPSILON\nvar $export = require('./_export');\n\n$export($export.S, 'Number', {EPSILON: Math.pow(2, -52)});","// 20.1.2.2 Number.isFinite(number)\nvar $export   = require('./_export')\n  , _isFinite = require('./_global').isFinite;\n\n$export($export.S, 'Number', {\n  isFinite: function isFinite(it){\n    return typeof it == 'number' && _isFinite(it);\n  }\n});","// 20.1.2.3 Number.isInteger(number)\nvar $export = require('./_export');\n\n$export($export.S, 'Number', {isInteger: require('./_is-integer')});","// 20.1.2.4 Number.isNaN(number)\nvar $export = require('./_export');\n\n$export($export.S, 'Number', {\n  isNaN: function isNaN(number){\n    return number != number;\n  }\n});","// 20.1.2.5 Number.isSafeInteger(number)\nvar $export   = require('./_export')\n  , isInteger = require('./_is-integer')\n  , abs       = Math.abs;\n\n$export($export.S, 'Number', {\n  isSafeInteger: function isSafeInteger(number){\n    return isInteger(number) && abs(number) <= 0x1fffffffffffff;\n  }\n});","// 20.1.2.6 Number.MAX_SAFE_INTEGER\nvar $export = require('./_export');\n\n$export($export.S, 'Number', {MAX_SAFE_INTEGER: 0x1fffffffffffff});","// 20.1.2.10 Number.MIN_SAFE_INTEGER\nvar $export = require('./_export');\n\n$export($export.S, 'Number', {MIN_SAFE_INTEGER: -0x1fffffffffffff});","var $export     = require('./_export')\n  , $parseFloat = require('./_parse-float');\n// 20.1.2.12 Number.parseFloat(string)\n$export($export.S + $export.F * (Number.parseFloat != $parseFloat), 'Number', {parseFloat: $parseFloat});","var $export   = require('./_export')\n  , $parseInt = require('./_parse-int');\n// 20.1.2.13 Number.parseInt(string, radix)\n$export($export.S + $export.F * (Number.parseInt != $parseInt), 'Number', {parseInt: $parseInt});","'use strict';\r\nvar $export      = require('./_export')\r\n  , anInstance   = require('./_an-instance')\r\n  , toInteger    = require('./_to-integer')\r\n  , aNumberValue = require('./_a-number-value')\r\n  , repeat       = require('./_string-repeat')\r\n  , $toFixed     = 1..toFixed\r\n  , floor        = Math.floor\r\n  , data         = [0, 0, 0, 0, 0, 0]\r\n  , ERROR        = 'Number.toFixed: incorrect invocation!'\r\n  , ZERO         = '0';\r\n\r\nvar multiply = function(n, c){\r\n  var i  = -1\r\n    , c2 = c;\r\n  while(++i < 6){\r\n    c2 += n * data[i];\r\n    data[i] = c2 % 1e7;\r\n    c2 = floor(c2 / 1e7);\r\n  }\r\n};\r\nvar divide = function(n){\r\n  var i = 6\r\n    , c = 0;\r\n  while(--i >= 0){\r\n    c += data[i];\r\n    data[i] = floor(c / n);\r\n    c = (c % n) * 1e7;\r\n  }\r\n};\r\nvar numToString = function(){\r\n  var i = 6\r\n    , s = '';\r\n  while(--i >= 0){\r\n    if(s !== '' || i === 0 || data[i] !== 0){\r\n      var t = String(data[i]);\r\n      s = s === '' ? t : s + repeat.call(ZERO, 7 - t.length) + t;\r\n    }\r\n  } return s;\r\n};\r\nvar pow = function(x, n, acc){\r\n  return n === 0 ? acc : n % 2 === 1 ? pow(x, n - 1, acc * x) : pow(x * x, n / 2, acc);\r\n};\r\nvar log = function(x){\r\n  var n  = 0\r\n    , x2 = x;\r\n  while(x2 >= 4096){\r\n    n += 12;\r\n    x2 /= 4096;\r\n  }\r\n  while(x2 >= 2){\r\n    n  += 1;\r\n    x2 /= 2;\r\n  } return n;\r\n};\r\n\r\n$export($export.P + $export.F * (!!$toFixed && (\r\n  0.00008.toFixed(3) !== '0.000' ||\r\n  0.9.toFixed(0) !== '1' ||\r\n  1.255.toFixed(2) !== '1.25' ||\r\n  1000000000000000128..toFixed(0) !== '1000000000000000128'\r\n) || !require('./_fails')(function(){\r\n  // V8 ~ Android 4.3-\r\n  $toFixed.call({});\r\n})), 'Number', {\r\n  toFixed: function toFixed(fractionDigits){\r\n    var x = aNumberValue(this, ERROR)\r\n      , f = toInteger(fractionDigits)\r\n      , s = ''\r\n      , m = ZERO\r\n      , e, z, j, k;\r\n    if(f < 0 || f > 20)throw RangeError(ERROR);\r\n    if(x != x)return 'NaN';\r\n    if(x <= -1e21 || x >= 1e21)return String(x);\r\n    if(x < 0){\r\n      s = '-';\r\n      x = -x;\r\n    }\r\n    if(x > 1e-21){\r\n      e = log(x * pow(2, 69, 1)) - 69;\r\n      z = e < 0 ? x * pow(2, -e, 1) : x / pow(2, e, 1);\r\n      z *= 0x10000000000000;\r\n      e = 52 - e;\r\n      if(e > 0){\r\n        multiply(0, z);\r\n        j = f;\r\n        while(j >= 7){\r\n          multiply(1e7, 0);\r\n          j -= 7;\r\n        }\r\n        multiply(pow(10, j, 1), 0);\r\n        j = e - 1;\r\n        while(j >= 23){\r\n          divide(1 << 23);\r\n          j -= 23;\r\n        }\r\n        divide(1 << j);\r\n        multiply(1, 1);\r\n        divide(2);\r\n        m = numToString();\r\n      } else {\r\n        multiply(0, z);\r\n        multiply(1 << -e, 0);\r\n        m = numToString() + repeat.call(ZERO, f);\r\n      }\r\n    }\r\n    if(f > 0){\r\n      k = m.length;\r\n      m = s + (k <= f ? '0.' + repeat.call(ZERO, f - k) + m : m.slice(0, k - f) + '.' + m.slice(k - f));\r\n    } else {\r\n      m = s + m;\r\n    } return m;\r\n  }\r\n});","'use strict';\r\nvar $export      = require('./_export')\r\n  , $fails       = require('./_fails')\r\n  , aNumberValue = require('./_a-number-value')\r\n  , $toPrecision = 1..toPrecision;\r\n\r\n$export($export.P + $export.F * ($fails(function(){\r\n  // IE7-\r\n  return $toPrecision.call(1, undefined) !== '1';\r\n}) || !$fails(function(){\r\n  // V8 ~ Android 4.3-\r\n  $toPrecision.call({});\r\n})), 'Number', {\r\n  toPrecision: function toPrecision(precision){\r\n    var that = aNumberValue(this, 'Number#toPrecision: incorrect invocation!');\r\n    return precision === undefined ? $toPrecision.call(that) : $toPrecision.call(that, precision); \r\n  }\r\n});","// 19.1.3.1 Object.assign(target, source)\nvar $export = require('./_export');\n\n$export($export.S + $export.F, 'Object', {assign: require('./_object-assign')});","var $export = require('./_export')\r\n// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])\r\n$export($export.S, 'Object', {create: require('./_object-create')});","var $export = require('./_export');\r\n// 19.1.2.3 / 15.2.3.7 Object.defineProperties(O, Properties)\r\n$export($export.S + $export.F * !require('./_descriptors'), 'Object', {defineProperties: require('./_object-dps')});","var $export = require('./_export');\r\n// 19.1.2.4 / 15.2.3.6 Object.defineProperty(O, P, Attributes)\r\n$export($export.S + $export.F * !require('./_descriptors'), 'Object', {defineProperty: require('./_object-dp').f});","// 19.1.2.5 Object.freeze(O)\nvar isObject = require('./_is-object')\n  , meta     = require('./_meta').onFreeze;\n\nrequire('./_object-sap')('freeze', function($freeze){\n  return function freeze(it){\n    return $freeze && isObject(it) ? $freeze(meta(it)) : it;\n  };\n});","// 19.1.2.6 Object.getOwnPropertyDescriptor(O, P)\nvar toIObject                 = require('./_to-iobject')\n  , $getOwnPropertyDescriptor = require('./_object-gopd').f;\n\nrequire('./_object-sap')('getOwnPropertyDescriptor', function(){\n  return function getOwnPropertyDescriptor(it, key){\n    return $getOwnPropertyDescriptor(toIObject(it), key);\n  };\n});","// 19.1.2.7 Object.getOwnPropertyNames(O)\nrequire('./_object-sap')('getOwnPropertyNames', function(){\n  return require('./_object-gopn-ext').f;\n});","// 19.1.2.9 Object.getPrototypeOf(O)\nvar toObject        = require('./_to-object')\n  , $getPrototypeOf = require('./_object-gpo');\n\nrequire('./_object-sap')('getPrototypeOf', function(){\n  return function getPrototypeOf(it){\n    return $getPrototypeOf(toObject(it));\n  };\n});","// 19.1.2.11 Object.isExtensible(O)\nvar isObject = require('./_is-object');\n\nrequire('./_object-sap')('isExtensible', function($isExtensible){\n  return function isExtensible(it){\n    return isObject(it) ? $isExtensible ? $isExtensible(it) : true : false;\n  };\n});","// 19.1.2.12 Object.isFrozen(O)\nvar isObject = require('./_is-object');\n\nrequire('./_object-sap')('isFrozen', function($isFrozen){\n  return function isFrozen(it){\n    return isObject(it) ? $isFrozen ? $isFrozen(it) : false : true;\n  };\n});","// 19.1.2.13 Object.isSealed(O)\nvar isObject = require('./_is-object');\n\nrequire('./_object-sap')('isSealed', function($isSealed){\n  return function isSealed(it){\n    return isObject(it) ? $isSealed ? $isSealed(it) : false : true;\n  };\n});","// 19.1.3.10 Object.is(value1, value2)\nvar $export = require('./_export');\n$export($export.S, 'Object', {is: require('./_same-value')});","// 19.1.2.14 Object.keys(O)\nvar toObject = require('./_to-object')\n  , $keys    = require('./_object-keys');\n\nrequire('./_object-sap')('keys', function(){\n  return function keys(it){\n    return $keys(toObject(it));\n  };\n});","// 19.1.2.15 Object.preventExtensions(O)\nvar isObject = require('./_is-object')\n  , meta     = require('./_meta').onFreeze;\n\nrequire('./_object-sap')('preventExtensions', function($preventExtensions){\n  return function preventExtensions(it){\n    return $preventExtensions && isObject(it) ? $preventExtensions(meta(it)) : it;\n  };\n});","// 19.1.2.17 Object.seal(O)\nvar isObject = require('./_is-object')\n  , meta     = require('./_meta').onFreeze;\n\nrequire('./_object-sap')('seal', function($seal){\n  return function seal(it){\n    return $seal && isObject(it) ? $seal(meta(it)) : it;\n  };\n});","// 19.1.3.19 Object.setPrototypeOf(O, proto)\nvar $export = require('./_export');\n$export($export.S, 'Object', {setPrototypeOf: require('./_set-proto').set});","'use strict';\n// 19.1.3.6 Object.prototype.toString()\nvar classof = require('./_classof')\n  , test    = {};\ntest[require('./_wks')('toStringTag')] = 'z';\nif(test + '' != '[object z]'){\n  require('./_redefine')(Object.prototype, 'toString', function toString(){\n    return '[object ' + classof(this) + ']';\n  }, true);\n}","var $export     = require('./_export')\r\n  , $parseFloat = require('./_parse-float');\r\n// 18.2.4 parseFloat(string)\r\n$export($export.G + $export.F * (parseFloat != $parseFloat), {parseFloat: $parseFloat});","var $export   = require('./_export')\r\n  , $parseInt = require('./_parse-int');\r\n// 18.2.5 parseInt(string, radix)\r\n$export($export.G + $export.F * (parseInt != $parseInt), {parseInt: $parseInt});","'use strict';\nvar LIBRARY            = require('./_library')\n  , global             = require('./_global')\n  , ctx                = require('./_ctx')\n  , classof            = require('./_classof')\n  , $export            = require('./_export')\n  , isObject           = require('./_is-object')\n  , anObject           = require('./_an-object')\n  , aFunction          = require('./_a-function')\n  , anInstance         = require('./_an-instance')\n  , forOf              = require('./_for-of')\n  , setProto           = require('./_set-proto').set\n  , speciesConstructor = require('./_species-constructor')\n  , task               = require('./_task').set\n  , microtask          = require('./_microtask')()\n  , PROMISE            = 'Promise'\n  , TypeError          = global.TypeError\n  , process            = global.process\n  , $Promise           = global[PROMISE]\n  , process            = global.process\n  , isNode             = classof(process) == 'process'\n  , empty              = function(){ /* empty */ }\n  , Internal, GenericPromiseCapability, Wrapper;\n\nvar USE_NATIVE = !!function(){\n  try {\n    // correct subclassing with @@species support\n    var promise     = $Promise.resolve(1)\n      , FakePromise = (promise.constructor = {})[require('./_wks')('species')] = function(exec){ exec(empty, empty); };\n    // unhandled rejections tracking support, NodeJS Promise without it fails @@species test\n    return (isNode || typeof PromiseRejectionEvent == 'function') && promise.then(empty) instanceof FakePromise;\n  } catch(e){ /* empty */ }\n}();\n\n// helpers\nvar sameConstructor = function(a, b){\n  // with library wrapper special case\n  return a === b || a === $Promise && b === Wrapper;\n};\nvar isThenable = function(it){\n  var then;\n  return isObject(it) && typeof (then = it.then) == 'function' ? then : false;\n};\nvar newPromiseCapability = function(C){\n  return sameConstructor($Promise, C)\n    ? new PromiseCapability(C)\n    : new GenericPromiseCapability(C);\n};\nvar PromiseCapability = GenericPromiseCapability = function(C){\n  var resolve, reject;\n  this.promise = new C(function($$resolve, $$reject){\n    if(resolve !== undefined || reject !== undefined)throw TypeError('Bad Promise constructor');\n    resolve = $$resolve;\n    reject  = $$reject;\n  });\n  this.resolve = aFunction(resolve);\n  this.reject  = aFunction(reject);\n};\nvar perform = function(exec){\n  try {\n    exec();\n  } catch(e){\n    return {error: e};\n  }\n};\nvar notify = function(promise, isReject){\n  if(promise._n)return;\n  promise._n = true;\n  var chain = promise._c;\n  microtask(function(){\n    var value = promise._v\n      , ok    = promise._s == 1\n      , i     = 0;\n    var run = function(reaction){\n      var handler = ok ? reaction.ok : reaction.fail\n        , resolve = reaction.resolve\n        , reject  = reaction.reject\n        , domain  = reaction.domain\n        , result, then;\n      try {\n        if(handler){\n          if(!ok){\n            if(promise._h == 2)onHandleUnhandled(promise);\n            promise._h = 1;\n          }\n          if(handler === true)result = value;\n          else {\n            if(domain)domain.enter();\n            result = handler(value);\n            if(domain)domain.exit();\n          }\n          if(result === reaction.promise){\n            reject(TypeError('Promise-chain cycle'));\n          } else if(then = isThenable(result)){\n            then.call(result, resolve, reject);\n          } else resolve(result);\n        } else reject(value);\n      } catch(e){\n        reject(e);\n      }\n    };\n    while(chain.length > i)run(chain[i++]); // variable length - can't use forEach\n    promise._c = [];\n    promise._n = false;\n    if(isReject && !promise._h)onUnhandled(promise);\n  });\n};\nvar onUnhandled = function(promise){\n  task.call(global, function(){\n    var value = promise._v\n      , abrupt, handler, console;\n    if(isUnhandled(promise)){\n      abrupt = perform(function(){\n        if(isNode){\n          process.emit('unhandledRejection', value, promise);\n        } else if(handler = global.onunhandledrejection){\n          handler({promise: promise, reason: value});\n        } else if((console = global.console) && console.error){\n          console.error('Unhandled promise rejection', value);\n        }\n      });\n      // Browsers should not trigger `rejectionHandled` event if it was handled here, NodeJS - should\n      promise._h = isNode || isUnhandled(promise) ? 2 : 1;\n    } promise._a = undefined;\n    if(abrupt)throw abrupt.error;\n  });\n};\nvar isUnhandled = function(promise){\n  if(promise._h == 1)return false;\n  var chain = promise._a || promise._c\n    , i     = 0\n    , reaction;\n  while(chain.length > i){\n    reaction = chain[i++];\n    if(reaction.fail || !isUnhandled(reaction.promise))return false;\n  } return true;\n};\nvar onHandleUnhandled = function(promise){\n  task.call(global, function(){\n    var handler;\n    if(isNode){\n      process.emit('rejectionHandled', promise);\n    } else if(handler = global.onrejectionhandled){\n      handler({promise: promise, reason: promise._v});\n    }\n  });\n};\nvar $reject = function(value){\n  var promise = this;\n  if(promise._d)return;\n  promise._d = true;\n  promise = promise._w || promise; // unwrap\n  promise._v = value;\n  promise._s = 2;\n  if(!promise._a)promise._a = promise._c.slice();\n  notify(promise, true);\n};\nvar $resolve = function(value){\n  var promise = this\n    , then;\n  if(promise._d)return;\n  promise._d = true;\n  promise = promise._w || promise; // unwrap\n  try {\n    if(promise === value)throw TypeError(\"Promise can't be resolved itself\");\n    if(then = isThenable(value)){\n      microtask(function(){\n        var wrapper = {_w: promise, _d: false}; // wrap\n        try {\n          then.call(value, ctx($resolve, wrapper, 1), ctx($reject, wrapper, 1));\n        } catch(e){\n          $reject.call(wrapper, e);\n        }\n      });\n    } else {\n      promise._v = value;\n      promise._s = 1;\n      notify(promise, false);\n    }\n  } catch(e){\n    $reject.call({_w: promise, _d: false}, e); // wrap\n  }\n};\n\n// constructor polyfill\nif(!USE_NATIVE){\n  // 25.4.3.1 Promise(executor)\n  $Promise = function Promise(executor){\n    anInstance(this, $Promise, PROMISE, '_h');\n    aFunction(executor);\n    Internal.call(this);\n    try {\n      executor(ctx($resolve, this, 1), ctx($reject, this, 1));\n    } catch(err){\n      $reject.call(this, err);\n    }\n  };\n  Internal = function Promise(executor){\n    this._c = [];             // <- awaiting reactions\n    this._a = undefined;      // <- checked in isUnhandled reactions\n    this._s = 0;              // <- state\n    this._d = false;          // <- done\n    this._v = undefined;      // <- value\n    this._h = 0;              // <- rejection state, 0 - default, 1 - handled, 2 - unhandled\n    this._n = false;          // <- notify\n  };\n  Internal.prototype = require('./_redefine-all')($Promise.prototype, {\n    // 25.4.5.3 Promise.prototype.then(onFulfilled, onRejected)\n    then: function then(onFulfilled, onRejected){\n      var reaction    = newPromiseCapability(speciesConstructor(this, $Promise));\n      reaction.ok     = typeof onFulfilled == 'function' ? onFulfilled : true;\n      reaction.fail   = typeof onRejected == 'function' && onRejected;\n      reaction.domain = isNode ? process.domain : undefined;\n      this._c.push(reaction);\n      if(this._a)this._a.push(reaction);\n      if(this._s)notify(this, false);\n      return reaction.promise;\n    },\n    // 25.4.5.1 Promise.prototype.catch(onRejected)\n    'catch': function(onRejected){\n      return this.then(undefined, onRejected);\n    }\n  });\n  PromiseCapability = function(){\n    var promise  = new Internal;\n    this.promise = promise;\n    this.resolve = ctx($resolve, promise, 1);\n    this.reject  = ctx($reject, promise, 1);\n  };\n}\n\n$export($export.G + $export.W + $export.F * !USE_NATIVE, {Promise: $Promise});\nrequire('./_set-to-string-tag')($Promise, PROMISE);\nrequire('./_set-species')(PROMISE);\nWrapper = require('./_core')[PROMISE];\n\n// statics\n$export($export.S + $export.F * !USE_NATIVE, PROMISE, {\n  // 25.4.4.5 Promise.reject(r)\n  reject: function reject(r){\n    var capability = newPromiseCapability(this)\n      , $$reject   = capability.reject;\n    $$reject(r);\n    return capability.promise;\n  }\n});\n$export($export.S + $export.F * (LIBRARY || !USE_NATIVE), PROMISE, {\n  // 25.4.4.6 Promise.resolve(x)\n  resolve: function resolve(x){\n    // instanceof instead of internal slot check because we should fix it without replacement native Promise core\n    if(x instanceof $Promise && sameConstructor(x.constructor, this))return x;\n    var capability = newPromiseCapability(this)\n      , $$resolve  = capability.resolve;\n    $$resolve(x);\n    return capability.promise;\n  }\n});\n$export($export.S + $export.F * !(USE_NATIVE && require('./_iter-detect')(function(iter){\n  $Promise.all(iter)['catch'](empty);\n})), PROMISE, {\n  // 25.4.4.1 Promise.all(iterable)\n  all: function all(iterable){\n    var C          = this\n      , capability = newPromiseCapability(C)\n      , resolve    = capability.resolve\n      , reject     = capability.reject;\n    var abrupt = perform(function(){\n      var values    = []\n        , index     = 0\n        , remaining = 1;\n      forOf(iterable, false, function(promise){\n        var $index        = index++\n          , alreadyCalled = false;\n        values.push(undefined);\n        remaining++;\n        C.resolve(promise).then(function(value){\n          if(alreadyCalled)return;\n          alreadyCalled  = true;\n          values[$index] = value;\n          --remaining || resolve(values);\n        }, reject);\n      });\n      --remaining || resolve(values);\n    });\n    if(abrupt)reject(abrupt.error);\n    return capability.promise;\n  },\n  // 25.4.4.4 Promise.race(iterable)\n  race: function race(iterable){\n    var C          = this\n      , capability = newPromiseCapability(C)\n      , reject     = capability.reject;\n    var abrupt = perform(function(){\n      forOf(iterable, false, function(promise){\n        C.resolve(promise).then(capability.resolve, reject);\n      });\n    });\n    if(abrupt)reject(abrupt.error);\n    return capability.promise;\n  }\n});","// 26.1.1 Reflect.apply(target, thisArgument, argumentsList)\nvar $export   = require('./_export')\n  , aFunction = require('./_a-function')\n  , anObject  = require('./_an-object')\n  , _apply    = Function.apply;\n\n$export($export.S, 'Reflect', {\n  apply: function apply(target, thisArgument, argumentsList){\n    return _apply.call(aFunction(target), thisArgument, anObject(argumentsList));\n  }\n});","// 26.1.2 Reflect.construct(target, argumentsList [, newTarget])\nvar $export   = require('./_export')\n  , create    = require('./_object-create')\n  , aFunction = require('./_a-function')\n  , anObject  = require('./_an-object')\n  , isObject  = require('./_is-object')\n  , bind      = require('./_bind');\n\n// MS Edge supports only 2 arguments\n// FF Nightly sets third argument as `new.target`, but does not create `this` from it\n$export($export.S + $export.F * require('./_fails')(function(){\n  function F(){}\n  return !(Reflect.construct(function(){}, [], F) instanceof F);\n}), 'Reflect', {\n  construct: function construct(Target, args /*, newTarget*/){\n    aFunction(Target);\n    anObject(args);\n    var newTarget = arguments.length < 3 ? Target : aFunction(arguments[2]);\n    if(Target == newTarget){\n      // w/o altered newTarget, optimization for 0-4 arguments\n      switch(args.length){\n        case 0: return new Target;\n        case 1: return new Target(args[0]);\n        case 2: return new Target(args[0], args[1]);\n        case 3: return new Target(args[0], args[1], args[2]);\n        case 4: return new Target(args[0], args[1], args[2], args[3]);\n      }\n      // w/o altered newTarget, lot of arguments case\n      var $args = [null];\n      $args.push.apply($args, args);\n      return new (bind.apply(Target, $args));\n    }\n    // with altered newTarget, not support built-in constructors\n    var proto    = newTarget.prototype\n      , instance = create(isObject(proto) ? proto : Object.prototype)\n      , result   = Function.apply.call(Target, instance, args);\n    return isObject(result) ? result : instance;\n  }\n});","// 26.1.3 Reflect.defineProperty(target, propertyKey, attributes)\nvar dP          = require('./_object-dp')\n  , $export     = require('./_export')\n  , anObject    = require('./_an-object')\n  , toPrimitive = require('./_to-primitive');\n\n// MS Edge has broken Reflect.defineProperty - throwing instead of returning false\n$export($export.S + $export.F * require('./_fails')(function(){\n  Reflect.defineProperty(dP.f({}, 1, {value: 1}), 1, {value: 2});\n}), 'Reflect', {\n  defineProperty: function defineProperty(target, propertyKey, attributes){\n    anObject(target);\n    propertyKey = toPrimitive(propertyKey, true);\n    anObject(attributes);\n    try {\n      dP.f(target, propertyKey, attributes);\n      return true;\n    } catch(e){\n      return false;\n    }\n  }\n});","// 26.1.4 Reflect.deleteProperty(target, propertyKey)\nvar $export  = require('./_export')\n  , gOPD     = require('./_object-gopd').f\n  , anObject = require('./_an-object');\n\n$export($export.S, 'Reflect', {\n  deleteProperty: function deleteProperty(target, propertyKey){\n    var desc = gOPD(anObject(target), propertyKey);\n    return desc && !desc.configurable ? false : delete target[propertyKey];\n  }\n});","'use strict';\n// 26.1.5 Reflect.enumerate(target)\nvar $export  = require('./_export')\n  , anObject = require('./_an-object');\nvar Enumerate = function(iterated){\n  this._t = anObject(iterated); // target\n  this._i = 0;                  // next index\n  var keys = this._k = []       // keys\n    , key;\n  for(key in iterated)keys.push(key);\n};\nrequire('./_iter-create')(Enumerate, 'Object', function(){\n  var that = this\n    , keys = that._k\n    , key;\n  do {\n    if(that._i >= keys.length)return {value: undefined, done: true};\n  } while(!((key = keys[that._i++]) in that._t));\n  return {value: key, done: false};\n});\n\n$export($export.S, 'Reflect', {\n  enumerate: function enumerate(target){\n    return new Enumerate(target);\n  }\n});","// 26.1.7 Reflect.getOwnPropertyDescriptor(target, propertyKey)\nvar gOPD     = require('./_object-gopd')\n  , $export  = require('./_export')\n  , anObject = require('./_an-object');\n\n$export($export.S, 'Reflect', {\n  getOwnPropertyDescriptor: function getOwnPropertyDescriptor(target, propertyKey){\n    return gOPD.f(anObject(target), propertyKey);\n  }\n});","// 26.1.8 Reflect.getPrototypeOf(target)\nvar $export  = require('./_export')\n  , getProto = require('./_object-gpo')\n  , anObject = require('./_an-object');\n\n$export($export.S, 'Reflect', {\n  getPrototypeOf: function getPrototypeOf(target){\n    return getProto(anObject(target));\n  }\n});","// 26.1.6 Reflect.get(target, propertyKey [, receiver])\nvar gOPD           = require('./_object-gopd')\n  , getPrototypeOf = require('./_object-gpo')\n  , has            = require('./_has')\n  , $export        = require('./_export')\n  , isObject       = require('./_is-object')\n  , anObject       = require('./_an-object');\n\nfunction get(target, propertyKey/*, receiver*/){\n  var receiver = arguments.length < 3 ? target : arguments[2]\n    , desc, proto;\n  if(anObject(target) === receiver)return target[propertyKey];\n  if(desc = gOPD.f(target, propertyKey))return has(desc, 'value')\n    ? desc.value\n    : desc.get !== undefined\n      ? desc.get.call(receiver)\n      : undefined;\n  if(isObject(proto = getPrototypeOf(target)))return get(proto, propertyKey, receiver);\n}\n\n$export($export.S, 'Reflect', {get: get});","// 26.1.9 Reflect.has(target, propertyKey)\nvar $export = require('./_export');\n\n$export($export.S, 'Reflect', {\n  has: function has(target, propertyKey){\n    return propertyKey in target;\n  }\n});","// 26.1.10 Reflect.isExtensible(target)\nvar $export       = require('./_export')\n  , anObject      = require('./_an-object')\n  , $isExtensible = Object.isExtensible;\n\n$export($export.S, 'Reflect', {\n  isExtensible: function isExtensible(target){\n    anObject(target);\n    return $isExtensible ? $isExtensible(target) : true;\n  }\n});","// 26.1.11 Reflect.ownKeys(target)\nvar $export = require('./_export');\n\n$export($export.S, 'Reflect', {ownKeys: require('./_own-keys')});","// 26.1.12 Reflect.preventExtensions(target)\nvar $export            = require('./_export')\n  , anObject           = require('./_an-object')\n  , $preventExtensions = Object.preventExtensions;\n\n$export($export.S, 'Reflect', {\n  preventExtensions: function preventExtensions(target){\n    anObject(target);\n    try {\n      if($preventExtensions)$preventExtensions(target);\n      return true;\n    } catch(e){\n      return false;\n    }\n  }\n});","// 26.1.14 Reflect.setPrototypeOf(target, proto)\nvar $export  = require('./_export')\n  , setProto = require('./_set-proto');\n\nif(setProto)$export($export.S, 'Reflect', {\n  setPrototypeOf: function setPrototypeOf(target, proto){\n    setProto.check(target, proto);\n    try {\n      setProto.set(target, proto);\n      return true;\n    } catch(e){\n      return false;\n    }\n  }\n});","// 26.1.13 Reflect.set(target, propertyKey, V [, receiver])\nvar dP             = require('./_object-dp')\n  , gOPD           = require('./_object-gopd')\n  , getPrototypeOf = require('./_object-gpo')\n  , has            = require('./_has')\n  , $export        = require('./_export')\n  , createDesc     = require('./_property-desc')\n  , anObject       = require('./_an-object')\n  , isObject       = require('./_is-object');\n\nfunction set(target, propertyKey, V/*, receiver*/){\n  var receiver = arguments.length < 4 ? target : arguments[3]\n    , ownDesc  = gOPD.f(anObject(target), propertyKey)\n    , existingDescriptor, proto;\n  if(!ownDesc){\n    if(isObject(proto = getPrototypeOf(target))){\n      return set(proto, propertyKey, V, receiver);\n    }\n    ownDesc = createDesc(0);\n  }\n  if(has(ownDesc, 'value')){\n    if(ownDesc.writable === false || !isObject(receiver))return false;\n    existingDescriptor = gOPD.f(receiver, propertyKey) || createDesc(0);\n    existingDescriptor.value = V;\n    dP.f(receiver, propertyKey, existingDescriptor);\n    return true;\n  }\n  return ownDesc.set === undefined ? false : (ownDesc.set.call(receiver, V), true);\n}\n\n$export($export.S, 'Reflect', {set: set});","var global            = require('./_global')\n  , inheritIfRequired = require('./_inherit-if-required')\n  , dP                = require('./_object-dp').f\n  , gOPN              = require('./_object-gopn').f\n  , isRegExp          = require('./_is-regexp')\n  , $flags            = require('./_flags')\n  , $RegExp           = global.RegExp\n  , Base              = $RegExp\n  , proto             = $RegExp.prototype\n  , re1               = /a/g\n  , re2               = /a/g\n  // \"new\" creates a new object, old webkit buggy here\n  , CORRECT_NEW       = new $RegExp(re1) !== re1;\n\nif(require('./_descriptors') && (!CORRECT_NEW || require('./_fails')(function(){\n  re2[require('./_wks')('match')] = false;\n  // RegExp constructor can alter flags and IsRegExp works correct with @@match\n  return $RegExp(re1) != re1 || $RegExp(re2) == re2 || $RegExp(re1, 'i') != '/a/i';\n}))){\n  $RegExp = function RegExp(p, f){\n    var tiRE = this instanceof $RegExp\n      , piRE = isRegExp(p)\n      , fiU  = f === undefined;\n    return !tiRE && piRE && p.constructor === $RegExp && fiU ? p\n      : inheritIfRequired(CORRECT_NEW\n        ? new Base(piRE && !fiU ? p.source : p, f)\n        : Base((piRE = p instanceof $RegExp) ? p.source : p, piRE && fiU ? $flags.call(p) : f)\n      , tiRE ? this : proto, $RegExp);\n  };\n  var proxy = function(key){\n    key in $RegExp || dP($RegExp, key, {\n      configurable: true,\n      get: function(){ return Base[key]; },\n      set: function(it){ Base[key] = it; }\n    });\n  };\n  for(var keys = gOPN(Base), i = 0; keys.length > i; )proxy(keys[i++]);\n  proto.constructor = $RegExp;\n  $RegExp.prototype = proto;\n  require('./_redefine')(global, 'RegExp', $RegExp);\n}\n\nrequire('./_set-species')('RegExp');","// 21.2.5.3 get RegExp.prototype.flags()\nif(require('./_descriptors') && /./g.flags != 'g')require('./_object-dp').f(RegExp.prototype, 'flags', {\n  configurable: true,\n  get: require('./_flags')\n});","// @@match logic\nrequire('./_fix-re-wks')('match', 1, function(defined, MATCH, $match){\n  // 21.1.3.11 String.prototype.match(regexp)\n  return [function match(regexp){\n    'use strict';\n    var O  = defined(this)\n      , fn = regexp == undefined ? undefined : regexp[MATCH];\n    return fn !== undefined ? fn.call(regexp, O) : new RegExp(regexp)[MATCH](String(O));\n  }, $match];\n});","// @@replace logic\nrequire('./_fix-re-wks')('replace', 2, function(defined, REPLACE, $replace){\n  // 21.1.3.14 String.prototype.replace(searchValue, replaceValue)\n  return [function replace(searchValue, replaceValue){\n    'use strict';\n    var O  = defined(this)\n      , fn = searchValue == undefined ? undefined : searchValue[REPLACE];\n    return fn !== undefined\n      ? fn.call(searchValue, O, replaceValue)\n      : $replace.call(String(O), searchValue, replaceValue);\n  }, $replace];\n});","// @@search logic\nrequire('./_fix-re-wks')('search', 1, function(defined, SEARCH, $search){\n  // 21.1.3.15 String.prototype.search(regexp)\n  return [function search(regexp){\n    'use strict';\n    var O  = defined(this)\n      , fn = regexp == undefined ? undefined : regexp[SEARCH];\n    return fn !== undefined ? fn.call(regexp, O) : new RegExp(regexp)[SEARCH](String(O));\n  }, $search];\n});","// @@split logic\nrequire('./_fix-re-wks')('split', 2, function(defined, SPLIT, $split){\n  'use strict';\n  var isRegExp   = require('./_is-regexp')\n    , _split     = $split\n    , $push      = [].push\n    , $SPLIT     = 'split'\n    , LENGTH     = 'length'\n    , LAST_INDEX = 'lastIndex';\n  if(\n    'abbc'[$SPLIT](/(b)*/)[1] == 'c' ||\n    'test'[$SPLIT](/(?:)/, -1)[LENGTH] != 4 ||\n    'ab'[$SPLIT](/(?:ab)*/)[LENGTH] != 2 ||\n    '.'[$SPLIT](/(.?)(.?)/)[LENGTH] != 4 ||\n    '.'[$SPLIT](/()()/)[LENGTH] > 1 ||\n    ''[$SPLIT](/.?/)[LENGTH]\n  ){\n    var NPCG = /()??/.exec('')[1] === undefined; // nonparticipating capturing group\n    // based on es5-shim implementation, need to rework it\n    $split = function(separator, limit){\n      var string = String(this);\n      if(separator === undefined && limit === 0)return [];\n      // If `separator` is not a regex, use native split\n      if(!isRegExp(separator))return _split.call(string, separator, limit);\n      var output = [];\n      var flags = (separator.ignoreCase ? 'i' : '') +\n                  (separator.multiline ? 'm' : '') +\n                  (separator.unicode ? 'u' : '') +\n                  (separator.sticky ? 'y' : '');\n      var lastLastIndex = 0;\n      var splitLimit = limit === undefined ? 4294967295 : limit >>> 0;\n      // Make `global` and avoid `lastIndex` issues by working with a copy\n      var separatorCopy = new RegExp(separator.source, flags + 'g');\n      var separator2, match, lastIndex, lastLength, i;\n      // Doesn't need flags gy, but they don't hurt\n      if(!NPCG)separator2 = new RegExp('^' + separatorCopy.source + '$(?!\\\\s)', flags);\n      while(match = separatorCopy.exec(string)){\n        // `separatorCopy.lastIndex` is not reliable cross-browser\n        lastIndex = match.index + match[0][LENGTH];\n        if(lastIndex > lastLastIndex){\n          output.push(string.slice(lastLastIndex, match.index));\n          // Fix browsers whose `exec` methods don't consistently return `undefined` for NPCG\n          if(!NPCG && match[LENGTH] > 1)match[0].replace(separator2, function(){\n            for(i = 1; i < arguments[LENGTH] - 2; i++)if(arguments[i] === undefined)match[i] = undefined;\n          });\n          if(match[LENGTH] > 1 && match.index < string[LENGTH])$push.apply(output, match.slice(1));\n          lastLength = match[0][LENGTH];\n          lastLastIndex = lastIndex;\n          if(output[LENGTH] >= splitLimit)break;\n        }\n        if(separatorCopy[LAST_INDEX] === match.index)separatorCopy[LAST_INDEX]++; // Avoid an infinite loop\n      }\n      if(lastLastIndex === string[LENGTH]){\n        if(lastLength || !separatorCopy.test(''))output.push('');\n      } else output.push(string.slice(lastLastIndex));\n      return output[LENGTH] > splitLimit ? output.slice(0, splitLimit) : output;\n    };\n  // Chakra, V8\n  } else if('0'[$SPLIT](undefined, 0)[LENGTH]){\n    $split = function(separator, limit){\n      return separator === undefined && limit === 0 ? [] : _split.call(this, separator, limit);\n    };\n  }\n  // 21.1.3.17 String.prototype.split(separator, limit)\n  return [function split(separator, limit){\n    var O  = defined(this)\n      , fn = separator == undefined ? undefined : separator[SPLIT];\n    return fn !== undefined ? fn.call(separator, O, limit) : $split.call(String(O), separator, limit);\n  }, $split];\n});","'use strict';\r\nrequire('./es6.regexp.flags');\r\nvar anObject    = require('./_an-object')\r\n  , $flags      = require('./_flags')\r\n  , DESCRIPTORS = require('./_descriptors')\r\n  , TO_STRING   = 'toString'\r\n  , $toString   = /./[TO_STRING];\r\n\r\nvar define = function(fn){\r\n  require('./_redefine')(RegExp.prototype, TO_STRING, fn, true);\r\n};\r\n\r\n// 21.2.5.14 RegExp.prototype.toString()\r\nif(require('./_fails')(function(){ return $toString.call({source: 'a', flags: 'b'}) != '/a/b'; })){\r\n  define(function toString(){\r\n    var R = anObject(this);\r\n    return '/'.concat(R.source, '/',\r\n      'flags' in R ? R.flags : !DESCRIPTORS && R instanceof RegExp ? $flags.call(R) : undefined);\r\n  });\r\n// FF44- RegExp#toString has a wrong name\r\n} else if($toString.name != TO_STRING){\r\n  define(function toString(){\r\n    return $toString.call(this);\r\n  });\r\n}","'use strict';\nvar strong = require('./_collection-strong');\n\n// 23.2 Set Objects\nmodule.exports = require('./_collection')('Set', function(get){\n  return function Set(){ return get(this, arguments.length > 0 ? arguments[0] : undefined); };\n}, {\n  // 23.2.3.1 Set.prototype.add(value)\n  add: function add(value){\n    return strong.def(this, value = value === 0 ? 0 : value, value);\n  }\n}, strong);","'use strict';\n// B.2.3.2 String.prototype.anchor(name)\nrequire('./_string-html')('anchor', function(createHTML){\n  return function anchor(name){\n    return createHTML(this, 'a', 'name', name);\n  }\n});","'use strict';\n// B.2.3.3 String.prototype.big()\nrequire('./_string-html')('big', function(createHTML){\n  return function big(){\n    return createHTML(this, 'big', '', '');\n  }\n});","'use strict';\n// B.2.3.4 String.prototype.blink()\nrequire('./_string-html')('blink', function(createHTML){\n  return function blink(){\n    return createHTML(this, 'blink', '', '');\n  }\n});","'use strict';\n// B.2.3.5 String.prototype.bold()\nrequire('./_string-html')('bold', function(createHTML){\n  return function bold(){\n    return createHTML(this, 'b', '', '');\n  }\n});","'use strict';\nvar $export = require('./_export')\n  , $at     = require('./_string-at')(false);\n$export($export.P, 'String', {\n  // 21.1.3.3 String.prototype.codePointAt(pos)\n  codePointAt: function codePointAt(pos){\n    return $at(this, pos);\n  }\n});","// 21.1.3.6 String.prototype.endsWith(searchString [, endPosition])\n'use strict';\nvar $export   = require('./_export')\n  , toLength  = require('./_to-length')\n  , context   = require('./_string-context')\n  , ENDS_WITH = 'endsWith'\n  , $endsWith = ''[ENDS_WITH];\n\n$export($export.P + $export.F * require('./_fails-is-regexp')(ENDS_WITH), 'String', {\n  endsWith: function endsWith(searchString /*, endPosition = @length */){\n    var that = context(this, searchString, ENDS_WITH)\n      , endPosition = arguments.length > 1 ? arguments[1] : undefined\n      , len    = toLength(that.length)\n      , end    = endPosition === undefined ? len : Math.min(toLength(endPosition), len)\n      , search = String(searchString);\n    return $endsWith\n      ? $endsWith.call(that, search, end)\n      : that.slice(end - search.length, end) === search;\n  }\n});","'use strict';\n// B.2.3.6 String.prototype.fixed()\nrequire('./_string-html')('fixed', function(createHTML){\n  return function fixed(){\n    return createHTML(this, 'tt', '', '');\n  }\n});","'use strict';\n// B.2.3.7 String.prototype.fontcolor(color)\nrequire('./_string-html')('fontcolor', function(createHTML){\n  return function fontcolor(color){\n    return createHTML(this, 'font', 'color', color);\n  }\n});","'use strict';\n// B.2.3.8 String.prototype.fontsize(size)\nrequire('./_string-html')('fontsize', function(createHTML){\n  return function fontsize(size){\n    return createHTML(this, 'font', 'size', size);\n  }\n});","var $export        = require('./_export')\n  , toIndex        = require('./_to-index')\n  , fromCharCode   = String.fromCharCode\n  , $fromCodePoint = String.fromCodePoint;\n\n// length should be 1, old FF problem\n$export($export.S + $export.F * (!!$fromCodePoint && $fromCodePoint.length != 1), 'String', {\n  // 21.1.2.2 String.fromCodePoint(...codePoints)\n  fromCodePoint: function fromCodePoint(x){ // eslint-disable-line no-unused-vars\n    var res  = []\n      , aLen = arguments.length\n      , i    = 0\n      , code;\n    while(aLen > i){\n      code = +arguments[i++];\n      if(toIndex(code, 0x10ffff) !== code)throw RangeError(code + ' is not a valid code point');\n      res.push(code < 0x10000\n        ? fromCharCode(code)\n        : fromCharCode(((code -= 0x10000) >> 10) + 0xd800, code % 0x400 + 0xdc00)\n      );\n    } return res.join('');\n  }\n});","// 21.1.3.7 String.prototype.includes(searchString, position = 0)\n'use strict';\nvar $export  = require('./_export')\n  , context  = require('./_string-context')\n  , INCLUDES = 'includes';\n\n$export($export.P + $export.F * require('./_fails-is-regexp')(INCLUDES), 'String', {\n  includes: function includes(searchString /*, position = 0 */){\n    return !!~context(this, searchString, INCLUDES)\n      .indexOf(searchString, arguments.length > 1 ? arguments[1] : undefined);\n  }\n});","'use strict';\n// B.2.3.9 String.prototype.italics()\nrequire('./_string-html')('italics', function(createHTML){\n  return function italics(){\n    return createHTML(this, 'i', '', '');\n  }\n});","'use strict';\nvar $at  = require('./_string-at')(true);\n\n// 21.1.3.27 String.prototype[@@iterator]()\nrequire('./_iter-define')(String, 'String', function(iterated){\n  this._t = String(iterated); // target\n  this._i = 0;                // next index\n// 21.1.5.2.1 %StringIteratorPrototype%.next()\n}, function(){\n  var O     = this._t\n    , index = this._i\n    , point;\n  if(index >= O.length)return {value: undefined, done: true};\n  point = $at(O, index);\n  this._i += point.length;\n  return {value: point, done: false};\n});","'use strict';\n// B.2.3.10 String.prototype.link(url)\nrequire('./_string-html')('link', function(createHTML){\n  return function link(url){\n    return createHTML(this, 'a', 'href', url);\n  }\n});","var $export   = require('./_export')\n  , toIObject = require('./_to-iobject')\n  , toLength  = require('./_to-length');\n\n$export($export.S, 'String', {\n  // 21.1.2.4 String.raw(callSite, ...substitutions)\n  raw: function raw(callSite){\n    var tpl  = toIObject(callSite.raw)\n      , len  = toLength(tpl.length)\n      , aLen = arguments.length\n      , res  = []\n      , i    = 0;\n    while(len > i){\n      res.push(String(tpl[i++]));\n      if(i < aLen)res.push(String(arguments[i]));\n    } return res.join('');\n  }\n});","var $export = require('./_export');\n\n$export($export.P, 'String', {\n  // 21.1.3.13 String.prototype.repeat(count)\n  repeat: require('./_string-repeat')\n});","'use strict';\n// B.2.3.11 String.prototype.small()\nrequire('./_string-html')('small', function(createHTML){\n  return function small(){\n    return createHTML(this, 'small', '', '');\n  }\n});","// 21.1.3.18 String.prototype.startsWith(searchString [, position ])\n'use strict';\nvar $export     = require('./_export')\n  , toLength    = require('./_to-length')\n  , context     = require('./_string-context')\n  , STARTS_WITH = 'startsWith'\n  , $startsWith = ''[STARTS_WITH];\n\n$export($export.P + $export.F * require('./_fails-is-regexp')(STARTS_WITH), 'String', {\n  startsWith: function startsWith(searchString /*, position = 0 */){\n    var that   = context(this, searchString, STARTS_WITH)\n      , index  = toLength(Math.min(arguments.length > 1 ? arguments[1] : undefined, that.length))\n      , search = String(searchString);\n    return $startsWith\n      ? $startsWith.call(that, search, index)\n      : that.slice(index, index + search.length) === search;\n  }\n});","'use strict';\n// B.2.3.12 String.prototype.strike()\nrequire('./_string-html')('strike', function(createHTML){\n  return function strike(){\n    return createHTML(this, 'strike', '', '');\n  }\n});","'use strict';\n// B.2.3.13 String.prototype.sub()\nrequire('./_string-html')('sub', function(createHTML){\n  return function sub(){\n    return createHTML(this, 'sub', '', '');\n  }\n});","'use strict';\n// B.2.3.14 String.prototype.sup()\nrequire('./_string-html')('sup', function(createHTML){\n  return function sup(){\n    return createHTML(this, 'sup', '', '');\n  }\n});","'use strict';\n// 21.1.3.25 String.prototype.trim()\nrequire('./_string-trim')('trim', function($trim){\n  return function trim(){\n    return $trim(this, 3);\n  };\n});","'use strict';\n// ECMAScript 6 symbols shim\nvar global         = require('./_global')\n  , has            = require('./_has')\n  , DESCRIPTORS    = require('./_descriptors')\n  , $export        = require('./_export')\n  , redefine       = require('./_redefine')\n  , META           = require('./_meta').KEY\n  , $fails         = require('./_fails')\n  , shared         = require('./_shared')\n  , setToStringTag = require('./_set-to-string-tag')\n  , uid            = require('./_uid')\n  , wks            = require('./_wks')\n  , wksExt         = require('./_wks-ext')\n  , wksDefine      = require('./_wks-define')\n  , keyOf          = require('./_keyof')\n  , enumKeys       = require('./_enum-keys')\n  , isArray        = require('./_is-array')\n  , anObject       = require('./_an-object')\n  , toIObject      = require('./_to-iobject')\n  , toPrimitive    = require('./_to-primitive')\n  , createDesc     = require('./_property-desc')\n  , _create        = require('./_object-create')\n  , gOPNExt        = require('./_object-gopn-ext')\n  , $GOPD          = require('./_object-gopd')\n  , $DP            = require('./_object-dp')\n  , $keys          = require('./_object-keys')\n  , gOPD           = $GOPD.f\n  , dP             = $DP.f\n  , gOPN           = gOPNExt.f\n  , $Symbol        = global.Symbol\n  , $JSON          = global.JSON\n  , _stringify     = $JSON && $JSON.stringify\n  , PROTOTYPE      = 'prototype'\n  , HIDDEN         = wks('_hidden')\n  , TO_PRIMITIVE   = wks('toPrimitive')\n  , isEnum         = {}.propertyIsEnumerable\n  , SymbolRegistry = shared('symbol-registry')\n  , AllSymbols     = shared('symbols')\n  , OPSymbols      = shared('op-symbols')\n  , ObjectProto    = Object[PROTOTYPE]\n  , USE_NATIVE     = typeof $Symbol == 'function'\n  , QObject        = global.QObject;\n// Don't use setters in Qt Script, https://github.com/zloirock/core-js/issues/173\nvar setter = !QObject || !QObject[PROTOTYPE] || !QObject[PROTOTYPE].findChild;\n\n// fallback for old Android, https://code.google.com/p/v8/issues/detail?id=687\nvar setSymbolDesc = DESCRIPTORS && $fails(function(){\n  return _create(dP({}, 'a', {\n    get: function(){ return dP(this, 'a', {value: 7}).a; }\n  })).a != 7;\n}) ? function(it, key, D){\n  var protoDesc = gOPD(ObjectProto, key);\n  if(protoDesc)delete ObjectProto[key];\n  dP(it, key, D);\n  if(protoDesc && it !== ObjectProto)dP(ObjectProto, key, protoDesc);\n} : dP;\n\nvar wrap = function(tag){\n  var sym = AllSymbols[tag] = _create($Symbol[PROTOTYPE]);\n  sym._k = tag;\n  return sym;\n};\n\nvar isSymbol = USE_NATIVE && typeof $Symbol.iterator == 'symbol' ? function(it){\n  return typeof it == 'symbol';\n} : function(it){\n  return it instanceof $Symbol;\n};\n\nvar $defineProperty = function defineProperty(it, key, D){\n  if(it === ObjectProto)$defineProperty(OPSymbols, key, D);\n  anObject(it);\n  key = toPrimitive(key, true);\n  anObject(D);\n  if(has(AllSymbols, key)){\n    if(!D.enumerable){\n      if(!has(it, HIDDEN))dP(it, HIDDEN, createDesc(1, {}));\n      it[HIDDEN][key] = true;\n    } else {\n      if(has(it, HIDDEN) && it[HIDDEN][key])it[HIDDEN][key] = false;\n      D = _create(D, {enumerable: createDesc(0, false)});\n    } return setSymbolDesc(it, key, D);\n  } return dP(it, key, D);\n};\nvar $defineProperties = function defineProperties(it, P){\n  anObject(it);\n  var keys = enumKeys(P = toIObject(P))\n    , i    = 0\n    , l = keys.length\n    , key;\n  while(l > i)$defineProperty(it, key = keys[i++], P[key]);\n  return it;\n};\nvar $create = function create(it, P){\n  return P === undefined ? _create(it) : $defineProperties(_create(it), P);\n};\nvar $propertyIsEnumerable = function propertyIsEnumerable(key){\n  var E = isEnum.call(this, key = toPrimitive(key, true));\n  if(this === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key))return false;\n  return E || !has(this, key) || !has(AllSymbols, key) || has(this, HIDDEN) && this[HIDDEN][key] ? E : true;\n};\nvar $getOwnPropertyDescriptor = function getOwnPropertyDescriptor(it, key){\n  it  = toIObject(it);\n  key = toPrimitive(key, true);\n  if(it === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key))return;\n  var D = gOPD(it, key);\n  if(D && has(AllSymbols, key) && !(has(it, HIDDEN) && it[HIDDEN][key]))D.enumerable = true;\n  return D;\n};\nvar $getOwnPropertyNames = function getOwnPropertyNames(it){\n  var names  = gOPN(toIObject(it))\n    , result = []\n    , i      = 0\n    , key;\n  while(names.length > i){\n    if(!has(AllSymbols, key = names[i++]) && key != HIDDEN && key != META)result.push(key);\n  } return result;\n};\nvar $getOwnPropertySymbols = function getOwnPropertySymbols(it){\n  var IS_OP  = it === ObjectProto\n    , names  = gOPN(IS_OP ? OPSymbols : toIObject(it))\n    , result = []\n    , i      = 0\n    , key;\n  while(names.length > i){\n    if(has(AllSymbols, key = names[i++]) && (IS_OP ? has(ObjectProto, key) : true))result.push(AllSymbols[key]);\n  } return result;\n};\n\n// 19.4.1.1 Symbol([description])\nif(!USE_NATIVE){\n  $Symbol = function Symbol(){\n    if(this instanceof $Symbol)throw TypeError('Symbol is not a constructor!');\n    var tag = uid(arguments.length > 0 ? arguments[0] : undefined);\n    var $set = function(value){\n      if(this === ObjectProto)$set.call(OPSymbols, value);\n      if(has(this, HIDDEN) && has(this[HIDDEN], tag))this[HIDDEN][tag] = false;\n      setSymbolDesc(this, tag, createDesc(1, value));\n    };\n    if(DESCRIPTORS && setter)setSymbolDesc(ObjectProto, tag, {configurable: true, set: $set});\n    return wrap(tag);\n  };\n  redefine($Symbol[PROTOTYPE], 'toString', function toString(){\n    return this._k;\n  });\n\n  $GOPD.f = $getOwnPropertyDescriptor;\n  $DP.f   = $defineProperty;\n  require('./_object-gopn').f = gOPNExt.f = $getOwnPropertyNames;\n  require('./_object-pie').f  = $propertyIsEnumerable;\n  require('./_object-gops').f = $getOwnPropertySymbols;\n\n  if(DESCRIPTORS && !require('./_library')){\n    redefine(ObjectProto, 'propertyIsEnumerable', $propertyIsEnumerable, true);\n  }\n\n  wksExt.f = function(name){\n    return wrap(wks(name));\n  }\n}\n\n$export($export.G + $export.W + $export.F * !USE_NATIVE, {Symbol: $Symbol});\n\nfor(var symbols = (\n  // 19.4.2.2, 19.4.2.3, 19.4.2.4, 19.4.2.6, 19.4.2.8, 19.4.2.9, 19.4.2.10, 19.4.2.11, 19.4.2.12, 19.4.2.13, 19.4.2.14\n  'hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables'\n).split(','), i = 0; symbols.length > i; )wks(symbols[i++]);\n\nfor(var symbols = $keys(wks.store), i = 0; symbols.length > i; )wksDefine(symbols[i++]);\n\n$export($export.S + $export.F * !USE_NATIVE, 'Symbol', {\n  // 19.4.2.1 Symbol.for(key)\n  'for': function(key){\n    return has(SymbolRegistry, key += '')\n      ? SymbolRegistry[key]\n      : SymbolRegistry[key] = $Symbol(key);\n  },\n  // 19.4.2.5 Symbol.keyFor(sym)\n  keyFor: function keyFor(key){\n    if(isSymbol(key))return keyOf(SymbolRegistry, key);\n    throw TypeError(key + ' is not a symbol!');\n  },\n  useSetter: function(){ setter = true; },\n  useSimple: function(){ setter = false; }\n});\n\n$export($export.S + $export.F * !USE_NATIVE, 'Object', {\n  // 19.1.2.2 Object.create(O [, Properties])\n  create: $create,\n  // 19.1.2.4 Object.defineProperty(O, P, Attributes)\n  defineProperty: $defineProperty,\n  // 19.1.2.3 Object.defineProperties(O, Properties)\n  defineProperties: $defineProperties,\n  // 19.1.2.6 Object.getOwnPropertyDescriptor(O, P)\n  getOwnPropertyDescriptor: $getOwnPropertyDescriptor,\n  // 19.1.2.7 Object.getOwnPropertyNames(O)\n  getOwnPropertyNames: $getOwnPropertyNames,\n  // 19.1.2.8 Object.getOwnPropertySymbols(O)\n  getOwnPropertySymbols: $getOwnPropertySymbols\n});\n\n// 24.3.2 JSON.stringify(value [, replacer [, space]])\n$JSON && $export($export.S + $export.F * (!USE_NATIVE || $fails(function(){\n  var S = $Symbol();\n  // MS Edge converts symbol values to JSON as {}\n  // WebKit converts symbol values to JSON as null\n  // V8 throws on boxed symbols\n  return _stringify([S]) != '[null]' || _stringify({a: S}) != '{}' || _stringify(Object(S)) != '{}';\n})), 'JSON', {\n  stringify: function stringify(it){\n    if(it === undefined || isSymbol(it))return; // IE8 returns string on undefined\n    var args = [it]\n      , i    = 1\n      , replacer, $replacer;\n    while(arguments.length > i)args.push(arguments[i++]);\n    replacer = args[1];\n    if(typeof replacer == 'function')$replacer = replacer;\n    if($replacer || !isArray(replacer))replacer = function(key, value){\n      if($replacer)value = $replacer.call(this, key, value);\n      if(!isSymbol(value))return value;\n    };\n    args[1] = replacer;\n    return _stringify.apply($JSON, args);\n  }\n});\n\n// 19.4.3.4 Symbol.prototype[@@toPrimitive](hint)\n$Symbol[PROTOTYPE][TO_PRIMITIVE] || require('./_hide')($Symbol[PROTOTYPE], TO_PRIMITIVE, $Symbol[PROTOTYPE].valueOf);\n// 19.4.3.5 Symbol.prototype[@@toStringTag]\nsetToStringTag($Symbol, 'Symbol');\n// 20.2.1.9 Math[@@toStringTag]\nsetToStringTag(Math, 'Math', true);\n// 24.3.3 JSON[@@toStringTag]\nsetToStringTag(global.JSON, 'JSON', true);","'use strict';\nvar $export      = require('./_export')\n  , $typed       = require('./_typed')\n  , buffer       = require('./_typed-buffer')\n  , anObject     = require('./_an-object')\n  , toIndex      = require('./_to-index')\n  , toLength     = require('./_to-length')\n  , isObject     = require('./_is-object')\n  , TYPED_ARRAY  = require('./_wks')('typed_array')\n  , ArrayBuffer  = require('./_global').ArrayBuffer\n  , speciesConstructor = require('./_species-constructor')\n  , $ArrayBuffer = buffer.ArrayBuffer\n  , $DataView    = buffer.DataView\n  , $isView      = $typed.ABV && ArrayBuffer.isView\n  , $slice       = $ArrayBuffer.prototype.slice\n  , VIEW         = $typed.VIEW\n  , ARRAY_BUFFER = 'ArrayBuffer';\n\n$export($export.G + $export.W + $export.F * (ArrayBuffer !== $ArrayBuffer), {ArrayBuffer: $ArrayBuffer});\n\n$export($export.S + $export.F * !$typed.CONSTR, ARRAY_BUFFER, {\n  // 24.1.3.1 ArrayBuffer.isView(arg)\n  isView: function isView(it){\n    return $isView && $isView(it) || isObject(it) && VIEW in it;\n  }\n});\n\n$export($export.P + $export.U + $export.F * require('./_fails')(function(){\n  return !new $ArrayBuffer(2).slice(1, undefined).byteLength;\n}), ARRAY_BUFFER, {\n  // 24.1.4.3 ArrayBuffer.prototype.slice(start, end)\n  slice: function slice(start, end){\n    if($slice !== undefined && end === undefined)return $slice.call(anObject(this), start); // FF fix\n    var len    = anObject(this).byteLength\n      , first  = toIndex(start, len)\n      , final  = toIndex(end === undefined ? len : end, len)\n      , result = new (speciesConstructor(this, $ArrayBuffer))(toLength(final - first))\n      , viewS  = new $DataView(this)\n      , viewT  = new $DataView(result)\n      , index  = 0;\n    while(first < final){\n      viewT.setUint8(index++, viewS.getUint8(first++));\n    } return result;\n  }\n});\n\nrequire('./_set-species')(ARRAY_BUFFER);","var $export = require('./_export');\n$export($export.G + $export.W + $export.F * !require('./_typed').ABV, {\n  DataView: require('./_typed-buffer').DataView\n});","require('./_typed-array')('Float32', 4, function(init){\n  return function Float32Array(data, byteOffset, length){\n    return init(this, data, byteOffset, length);\n  };\n});","require('./_typed-array')('Float64', 8, function(init){\n  return function Float64Array(data, byteOffset, length){\n    return init(this, data, byteOffset, length);\n  };\n});","require('./_typed-array')('Int16', 2, function(init){\n  return function Int16Array(data, byteOffset, length){\n    return init(this, data, byteOffset, length);\n  };\n});","require('./_typed-array')('Int32', 4, function(init){\n  return function Int32Array(data, byteOffset, length){\n    return init(this, data, byteOffset, length);\n  };\n});","require('./_typed-array')('Int8', 1, function(init){\n  return function Int8Array(data, byteOffset, length){\n    return init(this, data, byteOffset, length);\n  };\n});","require('./_typed-array')('Uint16', 2, function(init){\n  return function Uint16Array(data, byteOffset, length){\n    return init(this, data, byteOffset, length);\n  };\n});","require('./_typed-array')('Uint32', 4, function(init){\n  return function Uint32Array(data, byteOffset, length){\n    return init(this, data, byteOffset, length);\n  };\n});","require('./_typed-array')('Uint8', 1, function(init){\n  return function Uint8Array(data, byteOffset, length){\n    return init(this, data, byteOffset, length);\n  };\n});","require('./_typed-array')('Uint8', 1, function(init){\n  return function Uint8ClampedArray(data, byteOffset, length){\n    return init(this, data, byteOffset, length);\n  };\n}, true);","'use strict';\nvar each         = require('./_array-methods')(0)\n  , redefine     = require('./_redefine')\n  , meta         = require('./_meta')\n  , assign       = require('./_object-assign')\n  , weak         = require('./_collection-weak')\n  , isObject     = require('./_is-object')\n  , has          = require('./_has')\n  , getWeak      = meta.getWeak\n  , isExtensible = Object.isExtensible\n  , uncaughtFrozenStore = weak.ufstore\n  , tmp          = {}\n  , InternalMap;\n\nvar wrapper = function(get){\n  return function WeakMap(){\n    return get(this, arguments.length > 0 ? arguments[0] : undefined);\n  };\n};\n\nvar methods = {\n  // 23.3.3.3 WeakMap.prototype.get(key)\n  get: function get(key){\n    if(isObject(key)){\n      var data = getWeak(key);\n      if(data === true)return uncaughtFrozenStore(this).get(key);\n      return data ? data[this._i] : undefined;\n    }\n  },\n  // 23.3.3.5 WeakMap.prototype.set(key, value)\n  set: function set(key, value){\n    return weak.def(this, key, value);\n  }\n};\n\n// 23.3 WeakMap Objects\nvar $WeakMap = module.exports = require('./_collection')('WeakMap', wrapper, methods, weak, true, true);\n\n// IE11 WeakMap frozen keys fix\nif(new $WeakMap().set((Object.freeze || Object)(tmp), 7).get(tmp) != 7){\n  InternalMap = weak.getConstructor(wrapper);\n  assign(InternalMap.prototype, methods);\n  meta.NEED = true;\n  each(['delete', 'has', 'get', 'set'], function(key){\n    var proto  = $WeakMap.prototype\n      , method = proto[key];\n    redefine(proto, key, function(a, b){\n      // store frozen objects on internal weakmap shim\n      if(isObject(a) && !isExtensible(a)){\n        if(!this._f)this._f = new InternalMap;\n        var result = this._f[key](a, b);\n        return key == 'set' ? this : result;\n      // store all the rest on native weakmap\n      } return method.call(this, a, b);\n    });\n  });\n}","'use strict';\nvar weak = require('./_collection-weak');\n\n// 23.4 WeakSet Objects\nrequire('./_collection')('WeakSet', function(get){\n  return function WeakSet(){ return get(this, arguments.length > 0 ? arguments[0] : undefined); };\n}, {\n  // 23.4.3.1 WeakSet.prototype.add(value)\n  add: function add(value){\n    return weak.def(this, value, true);\n  }\n}, weak, false, true);","'use strict';\n// https://github.com/tc39/Array.prototype.includes\nvar $export   = require('./_export')\n  , $includes = require('./_array-includes')(true);\n\n$export($export.P, 'Array', {\n  includes: function includes(el /*, fromIndex = 0 */){\n    return $includes(this, el, arguments.length > 1 ? arguments[1] : undefined);\n  }\n});\n\nrequire('./_add-to-unscopables')('includes');","// https://github.com/rwaldron/tc39-notes/blob/master/es6/2014-09/sept-25.md#510-globalasap-for-enqueuing-a-microtask\r\nvar $export   = require('./_export')\r\n  , microtask = require('./_microtask')()\r\n  , process   = require('./_global').process\r\n  , isNode    = require('./_cof')(process) == 'process';\r\n\r\n$export($export.G, {\r\n  asap: function asap(fn){\r\n    var domain = isNode && process.domain;\r\n    microtask(domain ? domain.bind(fn) : fn);\r\n  }\r\n});","// https://github.com/ljharb/proposal-is-error\nvar $export = require('./_export')\n  , cof     = require('./_cof');\n\n$export($export.S, 'Error', {\n  isError: function isError(it){\n    return cof(it) === 'Error';\n  }\n});","// https://github.com/DavidBruant/Map-Set.prototype.toJSON\nvar $export  = require('./_export');\n\n$export($export.P + $export.R, 'Map', {toJSON: require('./_collection-to-json')('Map')});","// https://gist.github.com/BrendanEich/4294d5c212a6d2254703\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n  iaddh: function iaddh(x0, x1, y0, y1){\n    var $x0 = x0 >>> 0\n      , $x1 = x1 >>> 0\n      , $y0 = y0 >>> 0;\n    return $x1 + (y1 >>> 0) + (($x0 & $y0 | ($x0 | $y0) & ~($x0 + $y0 >>> 0)) >>> 31) | 0;\n  }\n});","// https://gist.github.com/BrendanEich/4294d5c212a6d2254703\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n  imulh: function imulh(u, v){\n    var UINT16 = 0xffff\n      , $u = +u\n      , $v = +v\n      , u0 = $u & UINT16\n      , v0 = $v & UINT16\n      , u1 = $u >> 16\n      , v1 = $v >> 16\n      , t  = (u1 * v0 >>> 0) + (u0 * v0 >>> 16);\n    return u1 * v1 + (t >> 16) + ((u0 * v1 >>> 0) + (t & UINT16) >> 16);\n  }\n});","// https://gist.github.com/BrendanEich/4294d5c212a6d2254703\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n  isubh: function isubh(x0, x1, y0, y1){\n    var $x0 = x0 >>> 0\n      , $x1 = x1 >>> 0\n      , $y0 = y0 >>> 0;\n    return $x1 - (y1 >>> 0) - ((~$x0 & $y0 | ~($x0 ^ $y0) & $x0 - $y0 >>> 0) >>> 31) | 0;\n  }\n});","// https://gist.github.com/BrendanEich/4294d5c212a6d2254703\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n  umulh: function umulh(u, v){\n    var UINT16 = 0xffff\n      , $u = +u\n      , $v = +v\n      , u0 = $u & UINT16\n      , v0 = $v & UINT16\n      , u1 = $u >>> 16\n      , v1 = $v >>> 16\n      , t  = (u1 * v0 >>> 0) + (u0 * v0 >>> 16);\n    return u1 * v1 + (t >>> 16) + ((u0 * v1 >>> 0) + (t & UINT16) >>> 16);\n  }\n});","'use strict';\r\nvar $export         = require('./_export')\r\n  , toObject        = require('./_to-object')\r\n  , aFunction       = require('./_a-function')\r\n  , $defineProperty = require('./_object-dp');\r\n\r\n// B.2.2.2 Object.prototype.__defineGetter__(P, getter)\r\nrequire('./_descriptors') && $export($export.P + require('./_object-forced-pam'), 'Object', {\r\n  __defineGetter__: function __defineGetter__(P, getter){\r\n    $defineProperty.f(toObject(this), P, {get: aFunction(getter), enumerable: true, configurable: true});\r\n  }\r\n});","'use strict';\r\nvar $export         = require('./_export')\r\n  , toObject        = require('./_to-object')\r\n  , aFunction       = require('./_a-function')\r\n  , $defineProperty = require('./_object-dp');\r\n\r\n// B.2.2.3 Object.prototype.__defineSetter__(P, setter)\r\nrequire('./_descriptors') && $export($export.P + require('./_object-forced-pam'), 'Object', {\r\n  __defineSetter__: function __defineSetter__(P, setter){\r\n    $defineProperty.f(toObject(this), P, {set: aFunction(setter), enumerable: true, configurable: true});\r\n  }\r\n});","// https://github.com/tc39/proposal-object-values-entries\nvar $export  = require('./_export')\n  , $entries = require('./_object-to-array')(true);\n\n$export($export.S, 'Object', {\n  entries: function entries(it){\n    return $entries(it);\n  }\n});","// https://github.com/tc39/proposal-object-getownpropertydescriptors\nvar $export        = require('./_export')\n  , ownKeys        = require('./_own-keys')\n  , toIObject      = require('./_to-iobject')\n  , gOPD           = require('./_object-gopd')\n  , createProperty = require('./_create-property');\n\n$export($export.S, 'Object', {\n  getOwnPropertyDescriptors: function getOwnPropertyDescriptors(object){\n    var O       = toIObject(object)\n      , getDesc = gOPD.f\n      , keys    = ownKeys(O)\n      , result  = {}\n      , i       = 0\n      , key, D;\n    while(keys.length > i)createProperty(result, key = keys[i++], getDesc(O, key));\n    return result;\n  }\n});","'use strict';\r\nvar $export                  = require('./_export')\r\n  , toObject                 = require('./_to-object')\r\n  , toPrimitive              = require('./_to-primitive')\r\n  , getPrototypeOf           = require('./_object-gpo')\r\n  , getOwnPropertyDescriptor = require('./_object-gopd').f;\r\n\r\n// B.2.2.4 Object.prototype.__lookupGetter__(P)\r\nrequire('./_descriptors') && $export($export.P + require('./_object-forced-pam'), 'Object', {\r\n  __lookupGetter__: function __lookupGetter__(P){\r\n    var O = toObject(this)\r\n      , K = toPrimitive(P, true)\r\n      , D;\r\n    do {\r\n      if(D = getOwnPropertyDescriptor(O, K))return D.get;\r\n    } while(O = getPrototypeOf(O));\r\n  }\r\n});","'use strict';\r\nvar $export                  = require('./_export')\r\n  , toObject                 = require('./_to-object')\r\n  , toPrimitive              = require('./_to-primitive')\r\n  , getPrototypeOf           = require('./_object-gpo')\r\n  , getOwnPropertyDescriptor = require('./_object-gopd').f;\r\n\r\n// B.2.2.5 Object.prototype.__lookupSetter__(P)\r\nrequire('./_descriptors') && $export($export.P + require('./_object-forced-pam'), 'Object', {\r\n  __lookupSetter__: function __lookupSetter__(P){\r\n    var O = toObject(this)\r\n      , K = toPrimitive(P, true)\r\n      , D;\r\n    do {\r\n      if(D = getOwnPropertyDescriptor(O, K))return D.set;\r\n    } while(O = getPrototypeOf(O));\r\n  }\r\n});","// https://github.com/tc39/proposal-object-values-entries\nvar $export = require('./_export')\n  , $values = require('./_object-to-array')(false);\n\n$export($export.S, 'Object', {\n  values: function values(it){\n    return $values(it);\n  }\n});","'use strict';\r\n// https://github.com/zenparsing/es-observable\r\nvar $export     = require('./_export')\r\n  , global      = require('./_global')\r\n  , core        = require('./_core')\r\n  , microtask   = require('./_microtask')()\r\n  , OBSERVABLE  = require('./_wks')('observable')\r\n  , aFunction   = require('./_a-function')\r\n  , anObject    = require('./_an-object')\r\n  , anInstance  = require('./_an-instance')\r\n  , redefineAll = require('./_redefine-all')\r\n  , hide        = require('./_hide')\r\n  , forOf       = require('./_for-of')\r\n  , RETURN      = forOf.RETURN;\r\n\r\nvar getMethod = function(fn){\r\n  return fn == null ? undefined : aFunction(fn);\r\n};\r\n\r\nvar cleanupSubscription = function(subscription){\r\n  var cleanup = subscription._c;\r\n  if(cleanup){\r\n    subscription._c = undefined;\r\n    cleanup();\r\n  }\r\n};\r\n\r\nvar subscriptionClosed = function(subscription){\r\n  return subscription._o === undefined;\r\n};\r\n\r\nvar closeSubscription = function(subscription){\r\n  if(!subscriptionClosed(subscription)){\r\n    subscription._o = undefined;\r\n    cleanupSubscription(subscription);\r\n  }\r\n};\r\n\r\nvar Subscription = function(observer, subscriber){\r\n  anObject(observer);\r\n  this._c = undefined;\r\n  this._o = observer;\r\n  observer = new SubscriptionObserver(this);\r\n  try {\r\n    var cleanup      = subscriber(observer)\r\n      , subscription = cleanup;\r\n    if(cleanup != null){\r\n      if(typeof cleanup.unsubscribe === 'function')cleanup = function(){ subscription.unsubscribe(); };\r\n      else aFunction(cleanup);\r\n      this._c = cleanup;\r\n    }\r\n  } catch(e){\r\n    observer.error(e);\r\n    return;\r\n  } if(subscriptionClosed(this))cleanupSubscription(this);\r\n};\r\n\r\nSubscription.prototype = redefineAll({}, {\r\n  unsubscribe: function unsubscribe(){ closeSubscription(this); }\r\n});\r\n\r\nvar SubscriptionObserver = function(subscription){\r\n  this._s = subscription;\r\n};\r\n\r\nSubscriptionObserver.prototype = redefineAll({}, {\r\n  next: function next(value){\r\n    var subscription = this._s;\r\n    if(!subscriptionClosed(subscription)){\r\n      var observer = subscription._o;\r\n      try {\r\n        var m = getMethod(observer.next);\r\n        if(m)return m.call(observer, value);\r\n      } catch(e){\r\n        try {\r\n          closeSubscription(subscription);\r\n        } finally {\r\n          throw e;\r\n        }\r\n      }\r\n    }\r\n  },\r\n  error: function error(value){\r\n    var subscription = this._s;\r\n    if(subscriptionClosed(subscription))throw value;\r\n    var observer = subscription._o;\r\n    subscription._o = undefined;\r\n    try {\r\n      var m = getMethod(observer.error);\r\n      if(!m)throw value;\r\n      value = m.call(observer, value);\r\n    } catch(e){\r\n      try {\r\n        cleanupSubscription(subscription);\r\n      } finally {\r\n        throw e;\r\n      }\r\n    } cleanupSubscription(subscription);\r\n    return value;\r\n  },\r\n  complete: function complete(value){\r\n    var subscription = this._s;\r\n    if(!subscriptionClosed(subscription)){\r\n      var observer = subscription._o;\r\n      subscription._o = undefined;\r\n      try {\r\n        var m = getMethod(observer.complete);\r\n        value = m ? m.call(observer, value) : undefined;\r\n      } catch(e){\r\n        try {\r\n          cleanupSubscription(subscription);\r\n        } finally {\r\n          throw e;\r\n        }\r\n      } cleanupSubscription(subscription);\r\n      return value;\r\n    }\r\n  }\r\n});\r\n\r\nvar $Observable = function Observable(subscriber){\r\n  anInstance(this, $Observable, 'Observable', '_f')._f = aFunction(subscriber);\r\n};\r\n\r\nredefineAll($Observable.prototype, {\r\n  subscribe: function subscribe(observer){\r\n    return new Subscription(observer, this._f);\r\n  },\r\n  forEach: function forEach(fn){\r\n    var that = this;\r\n    return new (core.Promise || global.Promise)(function(resolve, reject){\r\n      aFunction(fn);\r\n      var subscription = that.subscribe({\r\n        next : function(value){\r\n          try {\r\n            return fn(value);\r\n          } catch(e){\r\n            reject(e);\r\n            subscription.unsubscribe();\r\n          }\r\n        },\r\n        error: reject,\r\n        complete: resolve\r\n      });\r\n    });\r\n  }\r\n});\r\n\r\nredefineAll($Observable, {\r\n  from: function from(x){\r\n    var C = typeof this === 'function' ? this : $Observable;\r\n    var method = getMethod(anObject(x)[OBSERVABLE]);\r\n    if(method){\r\n      var observable = anObject(method.call(x));\r\n      return observable.constructor === C ? observable : new C(function(observer){\r\n        return observable.subscribe(observer);\r\n      });\r\n    }\r\n    return new C(function(observer){\r\n      var done = false;\r\n      microtask(function(){\r\n        if(!done){\r\n          try {\r\n            if(forOf(x, false, function(it){\r\n              observer.next(it);\r\n              if(done)return RETURN;\r\n            }) === RETURN)return;\r\n          } catch(e){\r\n            if(done)throw e;\r\n            observer.error(e);\r\n            return;\r\n          } observer.complete();\r\n        }\r\n      });\r\n      return function(){ done = true; };\r\n    });\r\n  },\r\n  of: function of(){\r\n    for(var i = 0, l = arguments.length, items = Array(l); i < l;)items[i] = arguments[i++];\r\n    return new (typeof this === 'function' ? this : $Observable)(function(observer){\r\n      var done = false;\r\n      microtask(function(){\r\n        if(!done){\r\n          for(var i = 0; i < items.length; ++i){\r\n            observer.next(items[i]);\r\n            if(done)return;\r\n          } observer.complete();\r\n        }\r\n      });\r\n      return function(){ done = true; };\r\n    });\r\n  }\r\n});\r\n\r\nhide($Observable.prototype, OBSERVABLE, function(){ return this; });\r\n\r\n$export($export.G, {Observable: $Observable});\r\n\r\nrequire('./_set-species')('Observable');","var metadata                  = require('./_metadata')\n  , anObject                  = require('./_an-object')\n  , toMetaKey                 = metadata.key\n  , ordinaryDefineOwnMetadata = metadata.set;\n\nmetadata.exp({defineMetadata: function defineMetadata(metadataKey, metadataValue, target, targetKey){\n  ordinaryDefineOwnMetadata(metadataKey, metadataValue, anObject(target), toMetaKey(targetKey));\n}});","var metadata               = require('./_metadata')\n  , anObject               = require('./_an-object')\n  , toMetaKey              = metadata.key\n  , getOrCreateMetadataMap = metadata.map\n  , store                  = metadata.store;\n\nmetadata.exp({deleteMetadata: function deleteMetadata(metadataKey, target /*, targetKey */){\n  var targetKey   = arguments.length < 3 ? undefined : toMetaKey(arguments[2])\n    , metadataMap = getOrCreateMetadataMap(anObject(target), targetKey, false);\n  if(metadataMap === undefined || !metadataMap['delete'](metadataKey))return false;\n  if(metadataMap.size)return true;\n  var targetMetadata = store.get(target);\n  targetMetadata['delete'](targetKey);\n  return !!targetMetadata.size || store['delete'](target);\n}});","var Set                     = require('./es6.set')\n  , from                    = require('./_array-from-iterable')\n  , metadata                = require('./_metadata')\n  , anObject                = require('./_an-object')\n  , getPrototypeOf          = require('./_object-gpo')\n  , ordinaryOwnMetadataKeys = metadata.keys\n  , toMetaKey               = metadata.key;\n\nvar ordinaryMetadataKeys = function(O, P){\n  var oKeys  = ordinaryOwnMetadataKeys(O, P)\n    , parent = getPrototypeOf(O);\n  if(parent === null)return oKeys;\n  var pKeys  = ordinaryMetadataKeys(parent, P);\n  return pKeys.length ? oKeys.length ? from(new Set(oKeys.concat(pKeys))) : pKeys : oKeys;\n};\n\nmetadata.exp({getMetadataKeys: function getMetadataKeys(target /*, targetKey */){\n  return ordinaryMetadataKeys(anObject(target), arguments.length < 2 ? undefined : toMetaKey(arguments[1]));\n}});","var metadata               = require('./_metadata')\n  , anObject               = require('./_an-object')\n  , getPrototypeOf         = require('./_object-gpo')\n  , ordinaryHasOwnMetadata = metadata.has\n  , ordinaryGetOwnMetadata = metadata.get\n  , toMetaKey              = metadata.key;\n\nvar ordinaryGetMetadata = function(MetadataKey, O, P){\n  var hasOwn = ordinaryHasOwnMetadata(MetadataKey, O, P);\n  if(hasOwn)return ordinaryGetOwnMetadata(MetadataKey, O, P);\n  var parent = getPrototypeOf(O);\n  return parent !== null ? ordinaryGetMetadata(MetadataKey, parent, P) : undefined;\n};\n\nmetadata.exp({getMetadata: function getMetadata(metadataKey, target /*, targetKey */){\n  return ordinaryGetMetadata(metadataKey, anObject(target), arguments.length < 3 ? undefined : toMetaKey(arguments[2]));\n}});","var metadata                = require('./_metadata')\n  , anObject                = require('./_an-object')\n  , ordinaryOwnMetadataKeys = metadata.keys\n  , toMetaKey               = metadata.key;\n\nmetadata.exp({getOwnMetadataKeys: function getOwnMetadataKeys(target /*, targetKey */){\n  return ordinaryOwnMetadataKeys(anObject(target), arguments.length < 2 ? undefined : toMetaKey(arguments[1]));\n}});","var metadata               = require('./_metadata')\n  , anObject               = require('./_an-object')\n  , ordinaryGetOwnMetadata = metadata.get\n  , toMetaKey              = metadata.key;\n\nmetadata.exp({getOwnMetadata: function getOwnMetadata(metadataKey, target /*, targetKey */){\n  return ordinaryGetOwnMetadata(metadataKey, anObject(target)\n    , arguments.length < 3 ? undefined : toMetaKey(arguments[2]));\n}});","var metadata               = require('./_metadata')\n  , anObject               = require('./_an-object')\n  , getPrototypeOf         = require('./_object-gpo')\n  , ordinaryHasOwnMetadata = metadata.has\n  , toMetaKey              = metadata.key;\n\nvar ordinaryHasMetadata = function(MetadataKey, O, P){\n  var hasOwn = ordinaryHasOwnMetadata(MetadataKey, O, P);\n  if(hasOwn)return true;\n  var parent = getPrototypeOf(O);\n  return parent !== null ? ordinaryHasMetadata(MetadataKey, parent, P) : false;\n};\n\nmetadata.exp({hasMetadata: function hasMetadata(metadataKey, target /*, targetKey */){\n  return ordinaryHasMetadata(metadataKey, anObject(target), arguments.length < 3 ? undefined : toMetaKey(arguments[2]));\n}});","var metadata               = require('./_metadata')\n  , anObject               = require('./_an-object')\n  , ordinaryHasOwnMetadata = metadata.has\n  , toMetaKey              = metadata.key;\n\nmetadata.exp({hasOwnMetadata: function hasOwnMetadata(metadataKey, target /*, targetKey */){\n  return ordinaryHasOwnMetadata(metadataKey, anObject(target)\n    , arguments.length < 3 ? undefined : toMetaKey(arguments[2]));\n}});","var metadata                  = require('./_metadata')\n  , anObject                  = require('./_an-object')\n  , aFunction                 = require('./_a-function')\n  , toMetaKey                 = metadata.key\n  , ordinaryDefineOwnMetadata = metadata.set;\n\nmetadata.exp({metadata: function metadata(metadataKey, metadataValue){\n  return function decorator(target, targetKey){\n    ordinaryDefineOwnMetadata(\n      metadataKey, metadataValue,\n      (targetKey !== undefined ? anObject : aFunction)(target),\n      toMetaKey(targetKey)\n    );\n  };\n}});","// https://github.com/DavidBruant/Map-Set.prototype.toJSON\nvar $export  = require('./_export');\n\n$export($export.P + $export.R, 'Set', {toJSON: require('./_collection-to-json')('Set')});","'use strict';\n// https://github.com/mathiasbynens/String.prototype.at\nvar $export = require('./_export')\n  , $at     = require('./_string-at')(true);\n\n$export($export.P, 'String', {\n  at: function at(pos){\n    return $at(this, pos);\n  }\n});","'use strict';\r\n// https://tc39.github.io/String.prototype.matchAll/\r\nvar $export     = require('./_export')\r\n  , defined     = require('./_defined')\r\n  , toLength    = require('./_to-length')\r\n  , isRegExp    = require('./_is-regexp')\r\n  , getFlags    = require('./_flags')\r\n  , RegExpProto = RegExp.prototype;\r\n\r\nvar $RegExpStringIterator = function(regexp, string){\r\n  this._r = regexp;\r\n  this._s = string;\r\n};\r\n\r\nrequire('./_iter-create')($RegExpStringIterator, 'RegExp String', function next(){\r\n  var match = this._r.exec(this._s);\r\n  return {value: match, done: match === null};\r\n});\r\n\r\n$export($export.P, 'String', {\r\n  matchAll: function matchAll(regexp){\r\n    defined(this);\r\n    if(!isRegExp(regexp))throw TypeError(regexp + ' is not a regexp!');\r\n    var S     = String(this)\r\n      , flags = 'flags' in RegExpProto ? String(regexp.flags) : getFlags.call(regexp)\r\n      , rx    = new RegExp(regexp.source, ~flags.indexOf('g') ? flags : 'g' + flags);\r\n    rx.lastIndex = toLength(regexp.lastIndex);\r\n    return new $RegExpStringIterator(rx, S);\r\n  }\r\n});","'use strict';\n// https://github.com/tc39/proposal-string-pad-start-end\nvar $export = require('./_export')\n  , $pad    = require('./_string-pad');\n\n$export($export.P, 'String', {\n  padEnd: function padEnd(maxLength /*, fillString = ' ' */){\n    return $pad(this, maxLength, arguments.length > 1 ? arguments[1] : undefined, false);\n  }\n});","'use strict';\n// https://github.com/tc39/proposal-string-pad-start-end\nvar $export = require('./_export')\n  , $pad    = require('./_string-pad');\n\n$export($export.P, 'String', {\n  padStart: function padStart(maxLength /*, fillString = ' ' */){\n    return $pad(this, maxLength, arguments.length > 1 ? arguments[1] : undefined, true);\n  }\n});","'use strict';\n// https://github.com/sebmarkbage/ecmascript-string-left-right-trim\nrequire('./_string-trim')('trimLeft', function($trim){\n  return function trimLeft(){\n    return $trim(this, 1);\n  };\n}, 'trimStart');","'use strict';\n// https://github.com/sebmarkbage/ecmascript-string-left-right-trim\nrequire('./_string-trim')('trimRight', function($trim){\n  return function trimRight(){\n    return $trim(this, 2);\n  };\n}, 'trimEnd');","require('./_wks-define')('asyncIterator');","require('./_wks-define')('observable');","// https://github.com/ljharb/proposal-global\nvar $export = require('./_export');\n\n$export($export.S, 'System', {global: require('./_global')});","var $iterators    = require('./es6.array.iterator')\n  , redefine      = require('./_redefine')\n  , global        = require('./_global')\n  , hide          = require('./_hide')\n  , Iterators     = require('./_iterators')\n  , wks           = require('./_wks')\n  , ITERATOR      = wks('iterator')\n  , TO_STRING_TAG = wks('toStringTag')\n  , ArrayValues   = Iterators.Array;\n\nfor(var collections = ['NodeList', 'DOMTokenList', 'MediaList', 'StyleSheetList', 'CSSRuleList'], i = 0; i < 5; i++){\n  var NAME       = collections[i]\n    , Collection = global[NAME]\n    , proto      = Collection && Collection.prototype\n    , key;\n  if(proto){\n    if(!proto[ITERATOR])hide(proto, ITERATOR, ArrayValues);\n    if(!proto[TO_STRING_TAG])hide(proto, TO_STRING_TAG, NAME);\n    Iterators[NAME] = ArrayValues;\n    for(key in $iterators)if(!proto[key])redefine(proto, key, $iterators[key], true);\n  }\n}","var $export = require('./_export')\n  , $task   = require('./_task');\n$export($export.G + $export.B, {\n  setImmediate:   $task.set,\n  clearImmediate: $task.clear\n});","// ie9- setTimeout & setInterval additional parameters fix\nvar global     = require('./_global')\n  , $export    = require('./_export')\n  , invoke     = require('./_invoke')\n  , partial    = require('./_partial')\n  , navigator  = global.navigator\n  , MSIE       = !!navigator && /MSIE .\\./.test(navigator.userAgent); // <- dirty ie9- check\nvar wrap = function(set){\n  return MSIE ? function(fn, time /*, ...args */){\n    return set(invoke(\n      partial,\n      [].slice.call(arguments, 2),\n      typeof fn == 'function' ? fn : Function(fn)\n    ), time);\n  } : set;\n};\n$export($export.G + $export.B + $export.F * MSIE, {\n  setTimeout:  wrap(global.setTimeout),\n  setInterval: wrap(global.setInterval)\n});","require('./modules/es6.symbol');\nrequire('./modules/es6.object.create');\nrequire('./modules/es6.object.define-property');\nrequire('./modules/es6.object.define-properties');\nrequire('./modules/es6.object.get-own-property-descriptor');\nrequire('./modules/es6.object.get-prototype-of');\nrequire('./modules/es6.object.keys');\nrequire('./modules/es6.object.get-own-property-names');\nrequire('./modules/es6.object.freeze');\nrequire('./modules/es6.object.seal');\nrequire('./modules/es6.object.prevent-extensions');\nrequire('./modules/es6.object.is-frozen');\nrequire('./modules/es6.object.is-sealed');\nrequire('./modules/es6.object.is-extensible');\nrequire('./modules/es6.object.assign');\nrequire('./modules/es6.object.is');\nrequire('./modules/es6.object.set-prototype-of');\nrequire('./modules/es6.object.to-string');\nrequire('./modules/es6.function.bind');\nrequire('./modules/es6.function.name');\nrequire('./modules/es6.function.has-instance');\nrequire('./modules/es6.parse-int');\nrequire('./modules/es6.parse-float');\nrequire('./modules/es6.number.constructor');\nrequire('./modules/es6.number.to-fixed');\nrequire('./modules/es6.number.to-precision');\nrequire('./modules/es6.number.epsilon');\nrequire('./modules/es6.number.is-finite');\nrequire('./modules/es6.number.is-integer');\nrequire('./modules/es6.number.is-nan');\nrequire('./modules/es6.number.is-safe-integer');\nrequire('./modules/es6.number.max-safe-integer');\nrequire('./modules/es6.number.min-safe-integer');\nrequire('./modules/es6.number.parse-float');\nrequire('./modules/es6.number.parse-int');\nrequire('./modules/es6.math.acosh');\nrequire('./modules/es6.math.asinh');\nrequire('./modules/es6.math.atanh');\nrequire('./modules/es6.math.cbrt');\nrequire('./modules/es6.math.clz32');\nrequire('./modules/es6.math.cosh');\nrequire('./modules/es6.math.expm1');\nrequire('./modules/es6.math.fround');\nrequire('./modules/es6.math.hypot');\nrequire('./modules/es6.math.imul');\nrequire('./modules/es6.math.log10');\nrequire('./modules/es6.math.log1p');\nrequire('./modules/es6.math.log2');\nrequire('./modules/es6.math.sign');\nrequire('./modules/es6.math.sinh');\nrequire('./modules/es6.math.tanh');\nrequire('./modules/es6.math.trunc');\nrequire('./modules/es6.string.from-code-point');\nrequire('./modules/es6.string.raw');\nrequire('./modules/es6.string.trim');\nrequire('./modules/es6.string.iterator');\nrequire('./modules/es6.string.code-point-at');\nrequire('./modules/es6.string.ends-with');\nrequire('./modules/es6.string.includes');\nrequire('./modules/es6.string.repeat');\nrequire('./modules/es6.string.starts-with');\nrequire('./modules/es6.string.anchor');\nrequire('./modules/es6.string.big');\nrequire('./modules/es6.string.blink');\nrequire('./modules/es6.string.bold');\nrequire('./modules/es6.string.fixed');\nrequire('./modules/es6.string.fontcolor');\nrequire('./modules/es6.string.fontsize');\nrequire('./modules/es6.string.italics');\nrequire('./modules/es6.string.link');\nrequire('./modules/es6.string.small');\nrequire('./modules/es6.string.strike');\nrequire('./modules/es6.string.sub');\nrequire('./modules/es6.string.sup');\nrequire('./modules/es6.date.now');\nrequire('./modules/es6.date.to-json');\nrequire('./modules/es6.date.to-iso-string');\nrequire('./modules/es6.date.to-string');\nrequire('./modules/es6.date.to-primitive');\nrequire('./modules/es6.array.is-array');\nrequire('./modules/es6.array.from');\nrequire('./modules/es6.array.of');\nrequire('./modules/es6.array.join');\nrequire('./modules/es6.array.slice');\nrequire('./modules/es6.array.sort');\nrequire('./modules/es6.array.for-each');\nrequire('./modules/es6.array.map');\nrequire('./modules/es6.array.filter');\nrequire('./modules/es6.array.some');\nrequire('./modules/es6.array.every');\nrequire('./modules/es6.array.reduce');\nrequire('./modules/es6.array.reduce-right');\nrequire('./modules/es6.array.index-of');\nrequire('./modules/es6.array.last-index-of');\nrequire('./modules/es6.array.copy-within');\nrequire('./modules/es6.array.fill');\nrequire('./modules/es6.array.find');\nrequire('./modules/es6.array.find-index');\nrequire('./modules/es6.array.species');\nrequire('./modules/es6.array.iterator');\nrequire('./modules/es6.regexp.constructor');\nrequire('./modules/es6.regexp.to-string');\nrequire('./modules/es6.regexp.flags');\nrequire('./modules/es6.regexp.match');\nrequire('./modules/es6.regexp.replace');\nrequire('./modules/es6.regexp.search');\nrequire('./modules/es6.regexp.split');\nrequire('./modules/es6.promise');\nrequire('./modules/es6.map');\nrequire('./modules/es6.set');\nrequire('./modules/es6.weak-map');\nrequire('./modules/es6.weak-set');\nrequire('./modules/es6.typed.array-buffer');\nrequire('./modules/es6.typed.data-view');\nrequire('./modules/es6.typed.int8-array');\nrequire('./modules/es6.typed.uint8-array');\nrequire('./modules/es6.typed.uint8-clamped-array');\nrequire('./modules/es6.typed.int16-array');\nrequire('./modules/es6.typed.uint16-array');\nrequire('./modules/es6.typed.int32-array');\nrequire('./modules/es6.typed.uint32-array');\nrequire('./modules/es6.typed.float32-array');\nrequire('./modules/es6.typed.float64-array');\nrequire('./modules/es6.reflect.apply');\nrequire('./modules/es6.reflect.construct');\nrequire('./modules/es6.reflect.define-property');\nrequire('./modules/es6.reflect.delete-property');\nrequire('./modules/es6.reflect.enumerate');\nrequire('./modules/es6.reflect.get');\nrequire('./modules/es6.reflect.get-own-property-descriptor');\nrequire('./modules/es6.reflect.get-prototype-of');\nrequire('./modules/es6.reflect.has');\nrequire('./modules/es6.reflect.is-extensible');\nrequire('./modules/es6.reflect.own-keys');\nrequire('./modules/es6.reflect.prevent-extensions');\nrequire('./modules/es6.reflect.set');\nrequire('./modules/es6.reflect.set-prototype-of');\nrequire('./modules/es7.array.includes');\nrequire('./modules/es7.string.at');\nrequire('./modules/es7.string.pad-start');\nrequire('./modules/es7.string.pad-end');\nrequire('./modules/es7.string.trim-left');\nrequire('./modules/es7.string.trim-right');\nrequire('./modules/es7.string.match-all');\nrequire('./modules/es7.symbol.async-iterator');\nrequire('./modules/es7.symbol.observable');\nrequire('./modules/es7.object.get-own-property-descriptors');\nrequire('./modules/es7.object.values');\nrequire('./modules/es7.object.entries');\nrequire('./modules/es7.object.define-getter');\nrequire('./modules/es7.object.define-setter');\nrequire('./modules/es7.object.lookup-getter');\nrequire('./modules/es7.object.lookup-setter');\nrequire('./modules/es7.map.to-json');\nrequire('./modules/es7.set.to-json');\nrequire('./modules/es7.system.global');\nrequire('./modules/es7.error.is-error');\nrequire('./modules/es7.math.iaddh');\nrequire('./modules/es7.math.isubh');\nrequire('./modules/es7.math.imulh');\nrequire('./modules/es7.math.umulh');\nrequire('./modules/es7.reflect.define-metadata');\nrequire('./modules/es7.reflect.delete-metadata');\nrequire('./modules/es7.reflect.get-metadata');\nrequire('./modules/es7.reflect.get-metadata-keys');\nrequire('./modules/es7.reflect.get-own-metadata');\nrequire('./modules/es7.reflect.get-own-metadata-keys');\nrequire('./modules/es7.reflect.has-metadata');\nrequire('./modules/es7.reflect.has-own-metadata');\nrequire('./modules/es7.reflect.metadata');\nrequire('./modules/es7.asap');\nrequire('./modules/es7.observable');\nrequire('./modules/web.timers');\nrequire('./modules/web.immediate');\nrequire('./modules/web.dom.iterable');\nmodule.exports = require('./modules/_core');","// shim for using process in browser\n\nvar process = module.exports = {};\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n    if (!draining || !currentQueue) {\n        return;\n    }\n    draining = false;\n    if (currentQueue.length) {\n        queue = currentQueue.concat(queue);\n    } else {\n        queueIndex = -1;\n    }\n    if (queue.length) {\n        drainQueue();\n    }\n}\n\nfunction drainQueue() {\n    if (draining) {\n        return;\n    }\n    var timeout = setTimeout(cleanUpNextTick);\n    draining = true;\n\n    var len = queue.length;\n    while(len) {\n        currentQueue = queue;\n        queue = [];\n        while (++queueIndex < len) {\n            if (currentQueue) {\n                currentQueue[queueIndex].run();\n            }\n        }\n        queueIndex = -1;\n        len = queue.length;\n    }\n    currentQueue = null;\n    draining = false;\n    clearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n    var args = new Array(arguments.length - 1);\n    if (arguments.length > 1) {\n        for (var i = 1; i < arguments.length; i++) {\n            args[i - 1] = arguments[i];\n        }\n    }\n    queue.push(new Item(fun, args));\n    if (queue.length === 1 && !draining) {\n        setTimeout(drainQueue, 0);\n    }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n    this.fun = fun;\n    this.array = array;\n}\nItem.prototype.run = function () {\n    this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\n\nprocess.binding = function (name) {\n    throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n    throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n","/*!\n * jQuery JavaScript Library v2.2.3\n * http://jquery.com/\n *\n * Includes Sizzle.js\n * http://sizzlejs.com/\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license\n * http://jquery.org/license\n *\n * Date: 2016-04-05T19:26Z\n */\n\n(function( global, factory ) {\n\n\tif ( typeof module === \"object\" && typeof module.exports === \"object\" ) {\n\t\t// For CommonJS and CommonJS-like environments where a proper `window`\n\t\t// is present, execute the factory and get jQuery.\n\t\t// For environments that do not have a `window` with a `document`\n\t\t// (such as Node.js), expose a factory as module.exports.\n\t\t// This accentuates the need for the creation of a real `window`.\n\t\t// e.g. var jQuery = require(\"jquery\")(window);\n\t\t// See ticket #14549 for more info.\n\t\tmodule.exports = global.document ?\n\t\t\tfactory( global, true ) :\n\t\t\tfunction( w ) {\n\t\t\t\tif ( !w.document ) {\n\t\t\t\t\tthrow new Error( \"jQuery requires a window with a document\" );\n\t\t\t\t}\n\t\t\t\treturn factory( w );\n\t\t\t};\n\t} else {\n\t\tfactory( global );\n\t}\n\n// Pass this if window is not defined yet\n}(typeof window !== \"undefined\" ? window : this, function( window, noGlobal ) {\n\n// Support: Firefox 18+\n// Can't be in strict mode, several libs including ASP.NET trace\n// the stack via arguments.caller.callee and Firefox dies if\n// you try to trace through \"use strict\" call chains. (#13335)\n//\"use strict\";\nvar arr = [];\n\nvar document = window.document;\n\nvar slice = arr.slice;\n\nvar concat = arr.concat;\n\nvar push = arr.push;\n\nvar indexOf = arr.indexOf;\n\nvar class2type = {};\n\nvar toString = class2type.toString;\n\nvar hasOwn = class2type.hasOwnProperty;\n\nvar support = {};\n\n\n\nvar\n\tversion = \"2.2.3\",\n\n\t// Define a local copy of jQuery\n\tjQuery = function( selector, context ) {\n\n\t\t// The jQuery object is actually just the init constructor 'enhanced'\n\t\t// Need init if jQuery is called (just allow error to be thrown if not included)\n\t\treturn new jQuery.fn.init( selector, context );\n\t},\n\n\t// Support: Android<4.1\n\t// Make sure we trim BOM and NBSP\n\trtrim = /^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g,\n\n\t// Matches dashed string for camelizing\n\trmsPrefix = /^-ms-/,\n\trdashAlpha = /-([\\da-z])/gi,\n\n\t// Used by jQuery.camelCase as callback to replace()\n\tfcamelCase = function( all, letter ) {\n\t\treturn letter.toUpperCase();\n\t};\n\njQuery.fn = jQuery.prototype = {\n\n\t// The current version of jQuery being used\n\tjquery: version,\n\n\tconstructor: jQuery,\n\n\t// Start with an empty selector\n\tselector: \"\",\n\n\t// The default length of a jQuery object is 0\n\tlength: 0,\n\n\ttoArray: function() {\n\t\treturn slice.call( this );\n\t},\n\n\t// Get the Nth element in the matched element set OR\n\t// Get the whole matched element set as a clean array\n\tget: function( num ) {\n\t\treturn num != null ?\n\n\t\t\t// Return just the one element from the set\n\t\t\t( num < 0 ? this[ num + this.length ] : this[ num ] ) :\n\n\t\t\t// Return all the elements in a clean array\n\t\t\tslice.call( this );\n\t},\n\n\t// Take an array of elements and push it onto the stack\n\t// (returning the new matched element set)\n\tpushStack: function( elems ) {\n\n\t\t// Build a new jQuery matched element set\n\t\tvar ret = jQuery.merge( this.constructor(), elems );\n\n\t\t// Add the old object onto the stack (as a reference)\n\t\tret.prevObject = this;\n\t\tret.context = this.context;\n\n\t\t// Return the newly-formed element set\n\t\treturn ret;\n\t},\n\n\t// Execute a callback for every element in the matched set.\n\teach: function( callback ) {\n\t\treturn jQuery.each( this, callback );\n\t},\n\n\tmap: function( callback ) {\n\t\treturn this.pushStack( jQuery.map( this, function( elem, i ) {\n\t\t\treturn callback.call( elem, i, elem );\n\t\t} ) );\n\t},\n\n\tslice: function() {\n\t\treturn this.pushStack( slice.apply( this, arguments ) );\n\t},\n\n\tfirst: function() {\n\t\treturn this.eq( 0 );\n\t},\n\n\tlast: function() {\n\t\treturn this.eq( -1 );\n\t},\n\n\teq: function( i ) {\n\t\tvar len = this.length,\n\t\t\tj = +i + ( i < 0 ? len : 0 );\n\t\treturn this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] );\n\t},\n\n\tend: function() {\n\t\treturn this.prevObject || this.constructor();\n\t},\n\n\t// For internal use only.\n\t// Behaves like an Array's method, not like a jQuery method.\n\tpush: push,\n\tsort: arr.sort,\n\tsplice: arr.splice\n};\n\njQuery.extend = jQuery.fn.extend = function() {\n\tvar options, name, src, copy, copyIsArray, clone,\n\t\ttarget = arguments[ 0 ] || {},\n\t\ti = 1,\n\t\tlength = arguments.length,\n\t\tdeep = false;\n\n\t// Handle a deep copy situation\n\tif ( typeof target === \"boolean\" ) {\n\t\tdeep = target;\n\n\t\t// Skip the boolean and the target\n\t\ttarget = arguments[ i ] || {};\n\t\ti++;\n\t}\n\n\t// Handle case when target is a string or something (possible in deep copy)\n\tif ( typeof target !== \"object\" && !jQuery.isFunction( target ) ) {\n\t\ttarget = {};\n\t}\n\n\t// Extend jQuery itself if only one argument is passed\n\tif ( i === length ) {\n\t\ttarget = this;\n\t\ti--;\n\t}\n\n\tfor ( ; i < length; i++ ) {\n\n\t\t// Only deal with non-null/undefined values\n\t\tif ( ( options = arguments[ i ] ) != null ) {\n\n\t\t\t// Extend the base object\n\t\t\tfor ( name in options ) {\n\t\t\t\tsrc = target[ name ];\n\t\t\t\tcopy = options[ name ];\n\n\t\t\t\t// Prevent never-ending loop\n\t\t\t\tif ( target === copy ) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// Recurse if we're merging plain objects or arrays\n\t\t\t\tif ( deep && copy && ( jQuery.isPlainObject( copy ) ||\n\t\t\t\t\t( copyIsArray = jQuery.isArray( copy ) ) ) ) {\n\n\t\t\t\t\tif ( copyIsArray ) {\n\t\t\t\t\t\tcopyIsArray = false;\n\t\t\t\t\t\tclone = src && jQuery.isArray( src ) ? src : [];\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tclone = src && jQuery.isPlainObject( src ) ? src : {};\n\t\t\t\t\t}\n\n\t\t\t\t\t// Never move original objects, clone them\n\t\t\t\t\ttarget[ name ] = jQuery.extend( deep, clone, copy );\n\n\t\t\t\t// Don't bring in undefined values\n\t\t\t\t} else if ( copy !== undefined ) {\n\t\t\t\t\ttarget[ name ] = copy;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Return the modified object\n\treturn target;\n};\n\njQuery.extend( {\n\n\t// Unique for each copy of jQuery on the page\n\texpando: \"jQuery\" + ( version + Math.random() ).replace( /\\D/g, \"\" ),\n\n\t// Assume jQuery is ready without the ready module\n\tisReady: true,\n\n\terror: function( msg ) {\n\t\tthrow new Error( msg );\n\t},\n\n\tnoop: function() {},\n\n\tisFunction: function( obj ) {\n\t\treturn jQuery.type( obj ) === \"function\";\n\t},\n\n\tisArray: Array.isArray,\n\n\tisWindow: function( obj ) {\n\t\treturn obj != null && obj === obj.window;\n\t},\n\n\tisNumeric: function( obj ) {\n\n\t\t// parseFloat NaNs numeric-cast false positives (null|true|false|\"\")\n\t\t// ...but misinterprets leading-number strings, particularly hex literals (\"0x...\")\n\t\t// subtraction forces infinities to NaN\n\t\t// adding 1 corrects loss of precision from parseFloat (#15100)\n\t\tvar realStringObj = obj && obj.toString();\n\t\treturn !jQuery.isArray( obj ) && ( realStringObj - parseFloat( realStringObj ) + 1 ) >= 0;\n\t},\n\n\tisPlainObject: function( obj ) {\n\t\tvar key;\n\n\t\t// Not plain objects:\n\t\t// - Any object or value whose internal [[Class]] property is not \"[object Object]\"\n\t\t// - DOM nodes\n\t\t// - window\n\t\tif ( jQuery.type( obj ) !== \"object\" || obj.nodeType || jQuery.isWindow( obj ) ) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Not own constructor property must be Object\n\t\tif ( obj.constructor &&\n\t\t\t\t!hasOwn.call( obj, \"constructor\" ) &&\n\t\t\t\t!hasOwn.call( obj.constructor.prototype || {}, \"isPrototypeOf\" ) ) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Own properties are enumerated firstly, so to speed up,\n\t\t// if last one is own, then all properties are own\n\t\tfor ( key in obj ) {}\n\n\t\treturn key === undefined || hasOwn.call( obj, key );\n\t},\n\n\tisEmptyObject: function( obj ) {\n\t\tvar name;\n\t\tfor ( name in obj ) {\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t},\n\n\ttype: function( obj ) {\n\t\tif ( obj == null ) {\n\t\t\treturn obj + \"\";\n\t\t}\n\n\t\t// Support: Android<4.0, iOS<6 (functionish RegExp)\n\t\treturn typeof obj === \"object\" || typeof obj === \"function\" ?\n\t\t\tclass2type[ toString.call( obj ) ] || \"object\" :\n\t\t\ttypeof obj;\n\t},\n\n\t// Evaluates a script in a global context\n\tglobalEval: function( code ) {\n\t\tvar script,\n\t\t\tindirect = eval;\n\n\t\tcode = jQuery.trim( code );\n\n\t\tif ( code ) {\n\n\t\t\t// If the code includes a valid, prologue position\n\t\t\t// strict mode pragma, execute code by injecting a\n\t\t\t// script tag into the document.\n\t\t\tif ( code.indexOf( \"use strict\" ) === 1 ) {\n\t\t\t\tscript = document.createElement( \"script\" );\n\t\t\t\tscript.text = code;\n\t\t\t\tdocument.head.appendChild( script ).parentNode.removeChild( script );\n\t\t\t} else {\n\n\t\t\t\t// Otherwise, avoid the DOM node creation, insertion\n\t\t\t\t// and removal by using an indirect global eval\n\n\t\t\t\tindirect( code );\n\t\t\t}\n\t\t}\n\t},\n\n\t// Convert dashed to camelCase; used by the css and data modules\n\t// Support: IE9-11+\n\t// Microsoft forgot to hump their vendor prefix (#9572)\n\tcamelCase: function( string ) {\n\t\treturn string.replace( rmsPrefix, \"ms-\" ).replace( rdashAlpha, fcamelCase );\n\t},\n\n\tnodeName: function( elem, name ) {\n\t\treturn elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();\n\t},\n\n\teach: function( obj, callback ) {\n\t\tvar length, i = 0;\n\n\t\tif ( isArrayLike( obj ) ) {\n\t\t\tlength = obj.length;\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tif ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tfor ( i in obj ) {\n\t\t\t\tif ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn obj;\n\t},\n\n\t// Support: Android<4.1\n\ttrim: function( text ) {\n\t\treturn text == null ?\n\t\t\t\"\" :\n\t\t\t( text + \"\" ).replace( rtrim, \"\" );\n\t},\n\n\t// results is for internal usage only\n\tmakeArray: function( arr, results ) {\n\t\tvar ret = results || [];\n\n\t\tif ( arr != null ) {\n\t\t\tif ( isArrayLike( Object( arr ) ) ) {\n\t\t\t\tjQuery.merge( ret,\n\t\t\t\t\ttypeof arr === \"string\" ?\n\t\t\t\t\t[ arr ] : arr\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tpush.call( ret, arr );\n\t\t\t}\n\t\t}\n\n\t\treturn ret;\n\t},\n\n\tinArray: function( elem, arr, i ) {\n\t\treturn arr == null ? -1 : indexOf.call( arr, elem, i );\n\t},\n\n\tmerge: function( first, second ) {\n\t\tvar len = +second.length,\n\t\t\tj = 0,\n\t\t\ti = first.length;\n\n\t\tfor ( ; j < len; j++ ) {\n\t\t\tfirst[ i++ ] = second[ j ];\n\t\t}\n\n\t\tfirst.length = i;\n\n\t\treturn first;\n\t},\n\n\tgrep: function( elems, callback, invert ) {\n\t\tvar callbackInverse,\n\t\t\tmatches = [],\n\t\t\ti = 0,\n\t\t\tlength = elems.length,\n\t\t\tcallbackExpect = !invert;\n\n\t\t// Go through the array, only saving the items\n\t\t// that pass the validator function\n\t\tfor ( ; i < length; i++ ) {\n\t\t\tcallbackInverse = !callback( elems[ i ], i );\n\t\t\tif ( callbackInverse !== callbackExpect ) {\n\t\t\t\tmatches.push( elems[ i ] );\n\t\t\t}\n\t\t}\n\n\t\treturn matches;\n\t},\n\n\t// arg is for internal usage only\n\tmap: function( elems, callback, arg ) {\n\t\tvar length, value,\n\t\t\ti = 0,\n\t\t\tret = [];\n\n\t\t// Go through the array, translating each of the items to their new values\n\t\tif ( isArrayLike( elems ) ) {\n\t\t\tlength = elems.length;\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret.push( value );\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Go through every key on the object,\n\t\t} else {\n\t\t\tfor ( i in elems ) {\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret.push( value );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Flatten any nested arrays\n\t\treturn concat.apply( [], ret );\n\t},\n\n\t// A global GUID counter for objects\n\tguid: 1,\n\n\t// Bind a function to a context, optionally partially applying any\n\t// arguments.\n\tproxy: function( fn, context ) {\n\t\tvar tmp, args, proxy;\n\n\t\tif ( typeof context === \"string\" ) {\n\t\t\ttmp = fn[ context ];\n\t\t\tcontext = fn;\n\t\t\tfn = tmp;\n\t\t}\n\n\t\t// Quick check to determine if target is callable, in the spec\n\t\t// this throws a TypeError, but we will just return undefined.\n\t\tif ( !jQuery.isFunction( fn ) ) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\t// Simulated bind\n\t\targs = slice.call( arguments, 2 );\n\t\tproxy = function() {\n\t\t\treturn fn.apply( context || this, args.concat( slice.call( arguments ) ) );\n\t\t};\n\n\t\t// Set the guid of unique handler to the same of original handler, so it can be removed\n\t\tproxy.guid = fn.guid = fn.guid || jQuery.guid++;\n\n\t\treturn proxy;\n\t},\n\n\tnow: Date.now,\n\n\t// jQuery.support is not used in Core but other projects attach their\n\t// properties to it so it needs to exist.\n\tsupport: support\n} );\n\n// JSHint would error on this code due to the Symbol not being defined in ES5.\n// Defining this global in .jshintrc would create a danger of using the global\n// unguarded in another place, it seems safer to just disable JSHint for these\n// three lines.\n/* jshint ignore: start */\nif ( typeof Symbol === \"function\" ) {\n\tjQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ];\n}\n/* jshint ignore: end */\n\n// Populate the class2type map\njQuery.each( \"Boolean Number String Function Array Date RegExp Object Error Symbol\".split( \" \" ),\nfunction( i, name ) {\n\tclass2type[ \"[object \" + name + \"]\" ] = name.toLowerCase();\n} );\n\nfunction isArrayLike( obj ) {\n\n\t// Support: iOS 8.2 (not reproducible in simulator)\n\t// `in` check used to prevent JIT error (gh-2145)\n\t// hasOwn isn't used here due to false negatives\n\t// regarding Nodelist length in IE\n\tvar length = !!obj && \"length\" in obj && obj.length,\n\t\ttype = jQuery.type( obj );\n\n\tif ( type === \"function\" || jQuery.isWindow( obj ) ) {\n\t\treturn false;\n\t}\n\n\treturn type === \"array\" || length === 0 ||\n\t\ttypeof length === \"number\" && length > 0 && ( length - 1 ) in obj;\n}\nvar Sizzle =\n/*!\n * Sizzle CSS Selector Engine v2.2.1\n * http://sizzlejs.com/\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license\n * http://jquery.org/license\n *\n * Date: 2015-10-17\n */\n(function( window ) {\n\nvar i,\n\tsupport,\n\tExpr,\n\tgetText,\n\tisXML,\n\ttokenize,\n\tcompile,\n\tselect,\n\toutermostContext,\n\tsortInput,\n\thasDuplicate,\n\n\t// Local document vars\n\tsetDocument,\n\tdocument,\n\tdocElem,\n\tdocumentIsHTML,\n\trbuggyQSA,\n\trbuggyMatches,\n\tmatches,\n\tcontains,\n\n\t// Instance-specific data\n\texpando = \"sizzle\" + 1 * new Date(),\n\tpreferredDoc = window.document,\n\tdirruns = 0,\n\tdone = 0,\n\tclassCache = createCache(),\n\ttokenCache = createCache(),\n\tcompilerCache = createCache(),\n\tsortOrder = function( a, b ) {\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t}\n\t\treturn 0;\n\t},\n\n\t// General-purpose constants\n\tMAX_NEGATIVE = 1 << 31,\n\n\t// Instance methods\n\thasOwn = ({}).hasOwnProperty,\n\tarr = [],\n\tpop = arr.pop,\n\tpush_native = arr.push,\n\tpush = arr.push,\n\tslice = arr.slice,\n\t// Use a stripped-down indexOf as it's faster than native\n\t// http://jsperf.com/thor-indexof-vs-for/5\n\tindexOf = function( list, elem ) {\n\t\tvar i = 0,\n\t\t\tlen = list.length;\n\t\tfor ( ; i < len; i++ ) {\n\t\t\tif ( list[i] === elem ) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t},\n\n\tbooleans = \"checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped\",\n\n\t// Regular expressions\n\n\t// http://www.w3.org/TR/css3-selectors/#whitespace\n\twhitespace = \"[\\\\x20\\\\t\\\\r\\\\n\\\\f]\",\n\n\t// http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier\n\tidentifier = \"(?:\\\\\\\\.|[\\\\w-]|[^\\\\x00-\\\\xa0])+\",\n\n\t// Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors\n\tattributes = \"\\\\[\" + whitespace + \"*(\" + identifier + \")(?:\" + whitespace +\n\t\t// Operator (capture 2)\n\t\t\"*([*^$|!~]?=)\" + whitespace +\n\t\t// \"Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]\"\n\t\t\"*(?:'((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\"|(\" + identifier + \"))|)\" + whitespace +\n\t\t\"*\\\\]\",\n\n\tpseudos = \":(\" + identifier + \")(?:\\\\((\" +\n\t\t// To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:\n\t\t// 1. quoted (capture 3; capture 4 or capture 5)\n\t\t\"('((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\")|\" +\n\t\t// 2. simple (capture 6)\n\t\t\"((?:\\\\\\\\.|[^\\\\\\\\()[\\\\]]|\" + attributes + \")*)|\" +\n\t\t// 3. anything else (capture 2)\n\t\t\".*\" +\n\t\t\")\\\\)|)\",\n\n\t// Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter\n\trwhitespace = new RegExp( whitespace + \"+\", \"g\" ),\n\trtrim = new RegExp( \"^\" + whitespace + \"+|((?:^|[^\\\\\\\\])(?:\\\\\\\\.)*)\" + whitespace + \"+$\", \"g\" ),\n\n\trcomma = new RegExp( \"^\" + whitespace + \"*,\" + whitespace + \"*\" ),\n\trcombinators = new RegExp( \"^\" + whitespace + \"*([>+~]|\" + whitespace + \")\" + whitespace + \"*\" ),\n\n\trattributeQuotes = new RegExp( \"=\" + whitespace + \"*([^\\\\]'\\\"]*?)\" + whitespace + \"*\\\\]\", \"g\" ),\n\n\trpseudo = new RegExp( pseudos ),\n\tridentifier = new RegExp( \"^\" + identifier + \"$\" ),\n\n\tmatchExpr = {\n\t\t\"ID\": new RegExp( \"^#(\" + identifier + \")\" ),\n\t\t\"CLASS\": new RegExp( \"^\\\\.(\" + identifier + \")\" ),\n\t\t\"TAG\": new RegExp( \"^(\" + identifier + \"|[*])\" ),\n\t\t\"ATTR\": new RegExp( \"^\" + attributes ),\n\t\t\"PSEUDO\": new RegExp( \"^\" + pseudos ),\n\t\t\"CHILD\": new RegExp( \"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\\\(\" + whitespace +\n\t\t\t\"*(even|odd|(([+-]|)(\\\\d*)n|)\" + whitespace + \"*(?:([+-]|)\" + whitespace +\n\t\t\t\"*(\\\\d+)|))\" + whitespace + \"*\\\\)|)\", \"i\" ),\n\t\t\"bool\": new RegExp( \"^(?:\" + booleans + \")$\", \"i\" ),\n\t\t// For use in libraries implementing .is()\n\t\t// We use this for POS matching in `select`\n\t\t\"needsContext\": new RegExp( \"^\" + whitespace + \"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\\\(\" +\n\t\t\twhitespace + \"*((?:-\\\\d)?\\\\d*)\" + whitespace + \"*\\\\)|)(?=[^-]|$)\", \"i\" )\n\t},\n\n\trinputs = /^(?:input|select|textarea|button)$/i,\n\trheader = /^h\\d$/i,\n\n\trnative = /^[^{]+\\{\\s*\\[native \\w/,\n\n\t// Easily-parseable/retrievable ID or TAG or CLASS selectors\n\trquickExpr = /^(?:#([\\w-]+)|(\\w+)|\\.([\\w-]+))$/,\n\n\trsibling = /[+~]/,\n\trescape = /'|\\\\/g,\n\n\t// CSS escapes http://www.w3.org/TR/CSS21/syndata.html#escaped-characters\n\trunescape = new RegExp( \"\\\\\\\\([\\\\da-f]{1,6}\" + whitespace + \"?|(\" + whitespace + \")|.)\", \"ig\" ),\n\tfunescape = function( _, escaped, escapedWhitespace ) {\n\t\tvar high = \"0x\" + escaped - 0x10000;\n\t\t// NaN means non-codepoint\n\t\t// Support: Firefox<24\n\t\t// Workaround erroneous numeric interpretation of +\"0x\"\n\t\treturn high !== high || escapedWhitespace ?\n\t\t\tescaped :\n\t\t\thigh < 0 ?\n\t\t\t\t// BMP codepoint\n\t\t\t\tString.fromCharCode( high + 0x10000 ) :\n\t\t\t\t// Supplemental Plane codepoint (surrogate pair)\n\t\t\t\tString.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );\n\t},\n\n\t// Used for iframes\n\t// See setDocument()\n\t// Removing the function wrapper causes a \"Permission Denied\"\n\t// error in IE\n\tunloadHandler = function() {\n\t\tsetDocument();\n\t};\n\n// Optimize for push.apply( _, NodeList )\ntry {\n\tpush.apply(\n\t\t(arr = slice.call( preferredDoc.childNodes )),\n\t\tpreferredDoc.childNodes\n\t);\n\t// Support: Android<4.0\n\t// Detect silently failing push.apply\n\tarr[ preferredDoc.childNodes.length ].nodeType;\n} catch ( e ) {\n\tpush = { apply: arr.length ?\n\n\t\t// Leverage slice if possible\n\t\tfunction( target, els ) {\n\t\t\tpush_native.apply( target, slice.call(els) );\n\t\t} :\n\n\t\t// Support: IE<9\n\t\t// Otherwise append directly\n\t\tfunction( target, els ) {\n\t\t\tvar j = target.length,\n\t\t\t\ti = 0;\n\t\t\t// Can't trust NodeList.length\n\t\t\twhile ( (target[j++] = els[i++]) ) {}\n\t\t\ttarget.length = j - 1;\n\t\t}\n\t};\n}\n\nfunction Sizzle( selector, context, results, seed ) {\n\tvar m, i, elem, nid, nidselect, match, groups, newSelector,\n\t\tnewContext = context && context.ownerDocument,\n\n\t\t// nodeType defaults to 9, since context defaults to document\n\t\tnodeType = context ? context.nodeType : 9;\n\n\tresults = results || [];\n\n\t// Return early from calls with invalid selector or context\n\tif ( typeof selector !== \"string\" || !selector ||\n\t\tnodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) {\n\n\t\treturn results;\n\t}\n\n\t// Try to shortcut find operations (as opposed to filters) in HTML documents\n\tif ( !seed ) {\n\n\t\tif ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) {\n\t\t\tsetDocument( context );\n\t\t}\n\t\tcontext = context || document;\n\n\t\tif ( documentIsHTML ) {\n\n\t\t\t// If the selector is sufficiently simple, try using a \"get*By*\" DOM method\n\t\t\t// (excepting DocumentFragment context, where the methods don't exist)\n\t\t\tif ( nodeType !== 11 && (match = rquickExpr.exec( selector )) ) {\n\n\t\t\t\t// ID selector\n\t\t\t\tif ( (m = match[1]) ) {\n\n\t\t\t\t\t// Document context\n\t\t\t\t\tif ( nodeType === 9 ) {\n\t\t\t\t\t\tif ( (elem = context.getElementById( m )) ) {\n\n\t\t\t\t\t\t\t// Support: IE, Opera, Webkit\n\t\t\t\t\t\t\t// TODO: identify versions\n\t\t\t\t\t\t\t// getElementById can match elements by name instead of ID\n\t\t\t\t\t\t\tif ( elem.id === m ) {\n\t\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t// Element context\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// Support: IE, Opera, Webkit\n\t\t\t\t\t\t// TODO: identify versions\n\t\t\t\t\t\t// getElementById can match elements by name instead of ID\n\t\t\t\t\t\tif ( newContext && (elem = newContext.getElementById( m )) &&\n\t\t\t\t\t\t\tcontains( context, elem ) &&\n\t\t\t\t\t\t\telem.id === m ) {\n\n\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t// Type selector\n\t\t\t\t} else if ( match[2] ) {\n\t\t\t\t\tpush.apply( results, context.getElementsByTagName( selector ) );\n\t\t\t\t\treturn results;\n\n\t\t\t\t// Class selector\n\t\t\t\t} else if ( (m = match[3]) && support.getElementsByClassName &&\n\t\t\t\t\tcontext.getElementsByClassName ) {\n\n\t\t\t\t\tpush.apply( results, context.getElementsByClassName( m ) );\n\t\t\t\t\treturn results;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Take advantage of querySelectorAll\n\t\t\tif ( support.qsa &&\n\t\t\t\t!compilerCache[ selector + \" \" ] &&\n\t\t\t\t(!rbuggyQSA || !rbuggyQSA.test( selector )) ) {\n\n\t\t\t\tif ( nodeType !== 1 ) {\n\t\t\t\t\tnewContext = context;\n\t\t\t\t\tnewSelector = selector;\n\n\t\t\t\t// qSA looks outside Element context, which is not what we want\n\t\t\t\t// Thanks to Andrew Dupont for this workaround technique\n\t\t\t\t// Support: IE <=8\n\t\t\t\t// Exclude object elements\n\t\t\t\t} else if ( context.nodeName.toLowerCase() !== \"object\" ) {\n\n\t\t\t\t\t// Capture the context ID, setting it first if necessary\n\t\t\t\t\tif ( (nid = context.getAttribute( \"id\" )) ) {\n\t\t\t\t\t\tnid = nid.replace( rescape, \"\\\\$&\" );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcontext.setAttribute( \"id\", (nid = expando) );\n\t\t\t\t\t}\n\n\t\t\t\t\t// Prefix every selector in the list\n\t\t\t\t\tgroups = tokenize( selector );\n\t\t\t\t\ti = groups.length;\n\t\t\t\t\tnidselect = ridentifier.test( nid ) ? \"#\" + nid : \"[id='\" + nid + \"']\";\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tgroups[i] = nidselect + \" \" + toSelector( groups[i] );\n\t\t\t\t\t}\n\t\t\t\t\tnewSelector = groups.join( \",\" );\n\n\t\t\t\t\t// Expand context for sibling selectors\n\t\t\t\t\tnewContext = rsibling.test( selector ) && testContext( context.parentNode ) ||\n\t\t\t\t\t\tcontext;\n\t\t\t\t}\n\n\t\t\t\tif ( newSelector ) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tpush.apply( results,\n\t\t\t\t\t\t\tnewContext.querySelectorAll( newSelector )\n\t\t\t\t\t\t);\n\t\t\t\t\t\treturn results;\n\t\t\t\t\t} catch ( qsaError ) {\n\t\t\t\t\t} finally {\n\t\t\t\t\t\tif ( nid === expando ) {\n\t\t\t\t\t\t\tcontext.removeAttribute( \"id\" );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// All others\n\treturn select( selector.replace( rtrim, \"$1\" ), context, results, seed );\n}\n\n/**\n * Create key-value caches of limited size\n * @returns {function(string, object)} Returns the Object data after storing it on itself with\n *\tproperty name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)\n *\tdeleting the oldest entry\n */\nfunction createCache() {\n\tvar keys = [];\n\n\tfunction cache( key, value ) {\n\t\t// Use (key + \" \") to avoid collision with native prototype properties (see Issue #157)\n\t\tif ( keys.push( key + \" \" ) > Expr.cacheLength ) {\n\t\t\t// Only keep the most recent entries\n\t\t\tdelete cache[ keys.shift() ];\n\t\t}\n\t\treturn (cache[ key + \" \" ] = value);\n\t}\n\treturn cache;\n}\n\n/**\n * Mark a function for special use by Sizzle\n * @param {Function} fn The function to mark\n */\nfunction markFunction( fn ) {\n\tfn[ expando ] = true;\n\treturn fn;\n}\n\n/**\n * Support testing using an element\n * @param {Function} fn Passed the created div and expects a boolean result\n */\nfunction assert( fn ) {\n\tvar div = document.createElement(\"div\");\n\n\ttry {\n\t\treturn !!fn( div );\n\t} catch (e) {\n\t\treturn false;\n\t} finally {\n\t\t// Remove from its parent by default\n\t\tif ( div.parentNode ) {\n\t\t\tdiv.parentNode.removeChild( div );\n\t\t}\n\t\t// release memory in IE\n\t\tdiv = null;\n\t}\n}\n\n/**\n * Adds the same handler for all of the specified attrs\n * @param {String} attrs Pipe-separated list of attributes\n * @param {Function} handler The method that will be applied\n */\nfunction addHandle( attrs, handler ) {\n\tvar arr = attrs.split(\"|\"),\n\t\ti = arr.length;\n\n\twhile ( i-- ) {\n\t\tExpr.attrHandle[ arr[i] ] = handler;\n\t}\n}\n\n/**\n * Checks document order of two siblings\n * @param {Element} a\n * @param {Element} b\n * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b\n */\nfunction siblingCheck( a, b ) {\n\tvar cur = b && a,\n\t\tdiff = cur && a.nodeType === 1 && b.nodeType === 1 &&\n\t\t\t( ~b.sourceIndex || MAX_NEGATIVE ) -\n\t\t\t( ~a.sourceIndex || MAX_NEGATIVE );\n\n\t// Use IE sourceIndex if available on both nodes\n\tif ( diff ) {\n\t\treturn diff;\n\t}\n\n\t// Check if b follows a\n\tif ( cur ) {\n\t\twhile ( (cur = cur.nextSibling) ) {\n\t\t\tif ( cur === b ) {\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn a ? 1 : -1;\n}\n\n/**\n * Returns a function to use in pseudos for input types\n * @param {String} type\n */\nfunction createInputPseudo( type ) {\n\treturn function( elem ) {\n\t\tvar name = elem.nodeName.toLowerCase();\n\t\treturn name === \"input\" && elem.type === type;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for buttons\n * @param {String} type\n */\nfunction createButtonPseudo( type ) {\n\treturn function( elem ) {\n\t\tvar name = elem.nodeName.toLowerCase();\n\t\treturn (name === \"input\" || name === \"button\") && elem.type === type;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for positionals\n * @param {Function} fn\n */\nfunction createPositionalPseudo( fn ) {\n\treturn markFunction(function( argument ) {\n\t\targument = +argument;\n\t\treturn markFunction(function( seed, matches ) {\n\t\t\tvar j,\n\t\t\t\tmatchIndexes = fn( [], seed.length, argument ),\n\t\t\t\ti = matchIndexes.length;\n\n\t\t\t// Match elements found at the specified indexes\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( seed[ (j = matchIndexes[i]) ] ) {\n\t\t\t\t\tseed[j] = !(matches[j] = seed[j]);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t});\n}\n\n/**\n * Checks a node for validity as a Sizzle context\n * @param {Element|Object=} context\n * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value\n */\nfunction testContext( context ) {\n\treturn context && typeof context.getElementsByTagName !== \"undefined\" && context;\n}\n\n// Expose support vars for convenience\nsupport = Sizzle.support = {};\n\n/**\n * Detects XML nodes\n * @param {Element|Object} elem An element or a document\n * @returns {Boolean} True iff elem is a non-HTML XML node\n */\nisXML = Sizzle.isXML = function( elem ) {\n\t// documentElement is verified for cases where it doesn't yet exist\n\t// (such as loading iframes in IE - #4833)\n\tvar documentElement = elem && (elem.ownerDocument || elem).documentElement;\n\treturn documentElement ? documentElement.nodeName !== \"HTML\" : false;\n};\n\n/**\n * Sets document-related variables once based on the current document\n * @param {Element|Object} [doc] An element or document object to use to set the document\n * @returns {Object} Returns the current document\n */\nsetDocument = Sizzle.setDocument = function( node ) {\n\tvar hasCompare, parent,\n\t\tdoc = node ? node.ownerDocument || node : preferredDoc;\n\n\t// Return early if doc is invalid or already selected\n\tif ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) {\n\t\treturn document;\n\t}\n\n\t// Update global variables\n\tdocument = doc;\n\tdocElem = document.documentElement;\n\tdocumentIsHTML = !isXML( document );\n\n\t// Support: IE 9-11, Edge\n\t// Accessing iframe documents after unload throws \"permission denied\" errors (jQuery #13936)\n\tif ( (parent = document.defaultView) && parent.top !== parent ) {\n\t\t// Support: IE 11\n\t\tif ( parent.addEventListener ) {\n\t\t\tparent.addEventListener( \"unload\", unloadHandler, false );\n\n\t\t// Support: IE 9 - 10 only\n\t\t} else if ( parent.attachEvent ) {\n\t\t\tparent.attachEvent( \"onunload\", unloadHandler );\n\t\t}\n\t}\n\n\t/* Attributes\n\t---------------------------------------------------------------------- */\n\n\t// Support: IE<8\n\t// Verify that getAttribute really returns attributes and not properties\n\t// (excepting IE8 booleans)\n\tsupport.attributes = assert(function( div ) {\n\t\tdiv.className = \"i\";\n\t\treturn !div.getAttribute(\"className\");\n\t});\n\n\t/* getElement(s)By*\n\t---------------------------------------------------------------------- */\n\n\t// Check if getElementsByTagName(\"*\") returns only elements\n\tsupport.getElementsByTagName = assert(function( div ) {\n\t\tdiv.appendChild( document.createComment(\"\") );\n\t\treturn !div.getElementsByTagName(\"*\").length;\n\t});\n\n\t// Support: IE<9\n\tsupport.getElementsByClassName = rnative.test( document.getElementsByClassName );\n\n\t// Support: IE<10\n\t// Check if getElementById returns elements by name\n\t// The broken getElementById methods don't pick up programatically-set names,\n\t// so use a roundabout getElementsByName test\n\tsupport.getById = assert(function( div ) {\n\t\tdocElem.appendChild( div ).id = expando;\n\t\treturn !document.getElementsByName || !document.getElementsByName( expando ).length;\n\t});\n\n\t// ID find and filter\n\tif ( support.getById ) {\n\t\tExpr.find[\"ID\"] = function( id, context ) {\n\t\t\tif ( typeof context.getElementById !== \"undefined\" && documentIsHTML ) {\n\t\t\t\tvar m = context.getElementById( id );\n\t\t\t\treturn m ? [ m ] : [];\n\t\t\t}\n\t\t};\n\t\tExpr.filter[\"ID\"] = function( id ) {\n\t\t\tvar attrId = id.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\treturn elem.getAttribute(\"id\") === attrId;\n\t\t\t};\n\t\t};\n\t} else {\n\t\t// Support: IE6/7\n\t\t// getElementById is not reliable as a find shortcut\n\t\tdelete Expr.find[\"ID\"];\n\n\t\tExpr.filter[\"ID\"] =  function( id ) {\n\t\t\tvar attrId = id.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\tvar node = typeof elem.getAttributeNode !== \"undefined\" &&\n\t\t\t\t\telem.getAttributeNode(\"id\");\n\t\t\t\treturn node && node.value === attrId;\n\t\t\t};\n\t\t};\n\t}\n\n\t// Tag\n\tExpr.find[\"TAG\"] = support.getElementsByTagName ?\n\t\tfunction( tag, context ) {\n\t\t\tif ( typeof context.getElementsByTagName !== \"undefined\" ) {\n\t\t\t\treturn context.getElementsByTagName( tag );\n\n\t\t\t// DocumentFragment nodes don't have gEBTN\n\t\t\t} else if ( support.qsa ) {\n\t\t\t\treturn context.querySelectorAll( tag );\n\t\t\t}\n\t\t} :\n\n\t\tfunction( tag, context ) {\n\t\t\tvar elem,\n\t\t\t\ttmp = [],\n\t\t\t\ti = 0,\n\t\t\t\t// By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too\n\t\t\t\tresults = context.getElementsByTagName( tag );\n\n\t\t\t// Filter out possible comments\n\t\t\tif ( tag === \"*\" ) {\n\t\t\t\twhile ( (elem = results[i++]) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\t\t\ttmp.push( elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn tmp;\n\t\t\t}\n\t\t\treturn results;\n\t\t};\n\n\t// Class\n\tExpr.find[\"CLASS\"] = support.getElementsByClassName && function( className, context ) {\n\t\tif ( typeof context.getElementsByClassName !== \"undefined\" && documentIsHTML ) {\n\t\t\treturn context.getElementsByClassName( className );\n\t\t}\n\t};\n\n\t/* QSA/matchesSelector\n\t---------------------------------------------------------------------- */\n\n\t// QSA and matchesSelector support\n\n\t// matchesSelector(:active) reports false when true (IE9/Opera 11.5)\n\trbuggyMatches = [];\n\n\t// qSa(:focus) reports false when true (Chrome 21)\n\t// We allow this because of a bug in IE8/9 that throws an error\n\t// whenever `document.activeElement` is accessed on an iframe\n\t// So, we allow :focus to pass through QSA all the time to avoid the IE error\n\t// See http://bugs.jquery.com/ticket/13378\n\trbuggyQSA = [];\n\n\tif ( (support.qsa = rnative.test( document.querySelectorAll )) ) {\n\t\t// Build QSA regex\n\t\t// Regex strategy adopted from Diego Perini\n\t\tassert(function( div ) {\n\t\t\t// Select is set to empty string on purpose\n\t\t\t// This is to test IE's treatment of not explicitly\n\t\t\t// setting a boolean content attribute,\n\t\t\t// since its presence should be enough\n\t\t\t// http://bugs.jquery.com/ticket/12359\n\t\t\tdocElem.appendChild( div ).innerHTML = \"<a id='\" + expando + \"'></a>\" +\n\t\t\t\t\"<select id='\" + expando + \"-\\r\\\\' msallowcapture=''>\" +\n\t\t\t\t\"<option selected=''></option></select>\";\n\n\t\t\t// Support: IE8, Opera 11-12.16\n\t\t\t// Nothing should be selected when empty strings follow ^= or $= or *=\n\t\t\t// The test attribute must be unknown in Opera but \"safe\" for WinRT\n\t\t\t// http://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section\n\t\t\tif ( div.querySelectorAll(\"[msallowcapture^='']\").length ) {\n\t\t\t\trbuggyQSA.push( \"[*^$]=\" + whitespace + \"*(?:''|\\\"\\\")\" );\n\t\t\t}\n\n\t\t\t// Support: IE8\n\t\t\t// Boolean attributes and \"value\" are not treated correctly\n\t\t\tif ( !div.querySelectorAll(\"[selected]\").length ) {\n\t\t\t\trbuggyQSA.push( \"\\\\[\" + whitespace + \"*(?:value|\" + booleans + \")\" );\n\t\t\t}\n\n\t\t\t// Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+\n\t\t\tif ( !div.querySelectorAll( \"[id~=\" + expando + \"-]\" ).length ) {\n\t\t\t\trbuggyQSA.push(\"~=\");\n\t\t\t}\n\n\t\t\t// Webkit/Opera - :checked should return selected option elements\n\t\t\t// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n\t\t\t// IE8 throws error here and will not see later tests\n\t\t\tif ( !div.querySelectorAll(\":checked\").length ) {\n\t\t\t\trbuggyQSA.push(\":checked\");\n\t\t\t}\n\n\t\t\t// Support: Safari 8+, iOS 8+\n\t\t\t// https://bugs.webkit.org/show_bug.cgi?id=136851\n\t\t\t// In-page `selector#id sibing-combinator selector` fails\n\t\t\tif ( !div.querySelectorAll( \"a#\" + expando + \"+*\" ).length ) {\n\t\t\t\trbuggyQSA.push(\".#.+[+~]\");\n\t\t\t}\n\t\t});\n\n\t\tassert(function( div ) {\n\t\t\t// Support: Windows 8 Native Apps\n\t\t\t// The type and name attributes are restricted during .innerHTML assignment\n\t\t\tvar input = document.createElement(\"input\");\n\t\t\tinput.setAttribute( \"type\", \"hidden\" );\n\t\t\tdiv.appendChild( input ).setAttribute( \"name\", \"D\" );\n\n\t\t\t// Support: IE8\n\t\t\t// Enforce case-sensitivity of name attribute\n\t\t\tif ( div.querySelectorAll(\"[name=d]\").length ) {\n\t\t\t\trbuggyQSA.push( \"name\" + whitespace + \"*[*^$|!~]?=\" );\n\t\t\t}\n\n\t\t\t// FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled)\n\t\t\t// IE8 throws error here and will not see later tests\n\t\t\tif ( !div.querySelectorAll(\":enabled\").length ) {\n\t\t\t\trbuggyQSA.push( \":enabled\", \":disabled\" );\n\t\t\t}\n\n\t\t\t// Opera 10-11 does not throw on post-comma invalid pseudos\n\t\t\tdiv.querySelectorAll(\"*,:x\");\n\t\t\trbuggyQSA.push(\",.*:\");\n\t\t});\n\t}\n\n\tif ( (support.matchesSelector = rnative.test( (matches = docElem.matches ||\n\t\tdocElem.webkitMatchesSelector ||\n\t\tdocElem.mozMatchesSelector ||\n\t\tdocElem.oMatchesSelector ||\n\t\tdocElem.msMatchesSelector) )) ) {\n\n\t\tassert(function( div ) {\n\t\t\t// Check to see if it's possible to do matchesSelector\n\t\t\t// on a disconnected node (IE 9)\n\t\t\tsupport.disconnectedMatch = matches.call( div, \"div\" );\n\n\t\t\t// This should fail with an exception\n\t\t\t// Gecko does not error, returns false instead\n\t\t\tmatches.call( div, \"[s!='']:x\" );\n\t\t\trbuggyMatches.push( \"!=\", pseudos );\n\t\t});\n\t}\n\n\trbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join(\"|\") );\n\trbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join(\"|\") );\n\n\t/* Contains\n\t---------------------------------------------------------------------- */\n\thasCompare = rnative.test( docElem.compareDocumentPosition );\n\n\t// Element contains another\n\t// Purposefully self-exclusive\n\t// As in, an element does not contain itself\n\tcontains = hasCompare || rnative.test( docElem.contains ) ?\n\t\tfunction( a, b ) {\n\t\t\tvar adown = a.nodeType === 9 ? a.documentElement : a,\n\t\t\t\tbup = b && b.parentNode;\n\t\t\treturn a === bup || !!( bup && bup.nodeType === 1 && (\n\t\t\t\tadown.contains ?\n\t\t\t\t\tadown.contains( bup ) :\n\t\t\t\t\ta.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16\n\t\t\t));\n\t\t} :\n\t\tfunction( a, b ) {\n\t\t\tif ( b ) {\n\t\t\t\twhile ( (b = b.parentNode) ) {\n\t\t\t\t\tif ( b === a ) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n\n\t/* Sorting\n\t---------------------------------------------------------------------- */\n\n\t// Document order sorting\n\tsortOrder = hasCompare ?\n\tfunction( a, b ) {\n\n\t\t// Flag for duplicate removal\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t\treturn 0;\n\t\t}\n\n\t\t// Sort on method existence if only one input has compareDocumentPosition\n\t\tvar compare = !a.compareDocumentPosition - !b.compareDocumentPosition;\n\t\tif ( compare ) {\n\t\t\treturn compare;\n\t\t}\n\n\t\t// Calculate position if both inputs belong to the same document\n\t\tcompare = ( a.ownerDocument || a ) === ( b.ownerDocument || b ) ?\n\t\t\ta.compareDocumentPosition( b ) :\n\n\t\t\t// Otherwise we know they are disconnected\n\t\t\t1;\n\n\t\t// Disconnected nodes\n\t\tif ( compare & 1 ||\n\t\t\t(!support.sortDetached && b.compareDocumentPosition( a ) === compare) ) {\n\n\t\t\t// Choose the first element that is related to our preferred document\n\t\t\tif ( a === document || a.ownerDocument === preferredDoc && contains(preferredDoc, a) ) {\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t\tif ( b === document || b.ownerDocument === preferredDoc && contains(preferredDoc, b) ) {\n\t\t\t\treturn 1;\n\t\t\t}\n\n\t\t\t// Maintain original order\n\t\t\treturn sortInput ?\n\t\t\t\t( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :\n\t\t\t\t0;\n\t\t}\n\n\t\treturn compare & 4 ? -1 : 1;\n\t} :\n\tfunction( a, b ) {\n\t\t// Exit early if the nodes are identical\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t\treturn 0;\n\t\t}\n\n\t\tvar cur,\n\t\t\ti = 0,\n\t\t\taup = a.parentNode,\n\t\t\tbup = b.parentNode,\n\t\t\tap = [ a ],\n\t\t\tbp = [ b ];\n\n\t\t// Parentless nodes are either documents or disconnected\n\t\tif ( !aup || !bup ) {\n\t\t\treturn a === document ? -1 :\n\t\t\t\tb === document ? 1 :\n\t\t\t\taup ? -1 :\n\t\t\t\tbup ? 1 :\n\t\t\t\tsortInput ?\n\t\t\t\t( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :\n\t\t\t\t0;\n\n\t\t// If the nodes are siblings, we can do a quick check\n\t\t} else if ( aup === bup ) {\n\t\t\treturn siblingCheck( a, b );\n\t\t}\n\n\t\t// Otherwise we need full lists of their ancestors for comparison\n\t\tcur = a;\n\t\twhile ( (cur = cur.parentNode) ) {\n\t\t\tap.unshift( cur );\n\t\t}\n\t\tcur = b;\n\t\twhile ( (cur = cur.parentNode) ) {\n\t\t\tbp.unshift( cur );\n\t\t}\n\n\t\t// Walk down the tree looking for a discrepancy\n\t\twhile ( ap[i] === bp[i] ) {\n\t\t\ti++;\n\t\t}\n\n\t\treturn i ?\n\t\t\t// Do a sibling check if the nodes have a common ancestor\n\t\t\tsiblingCheck( ap[i], bp[i] ) :\n\n\t\t\t// Otherwise nodes in our document sort first\n\t\t\tap[i] === preferredDoc ? -1 :\n\t\t\tbp[i] === preferredDoc ? 1 :\n\t\t\t0;\n\t};\n\n\treturn document;\n};\n\nSizzle.matches = function( expr, elements ) {\n\treturn Sizzle( expr, null, null, elements );\n};\n\nSizzle.matchesSelector = function( elem, expr ) {\n\t// Set document vars if needed\n\tif ( ( elem.ownerDocument || elem ) !== document ) {\n\t\tsetDocument( elem );\n\t}\n\n\t// Make sure that attribute selectors are quoted\n\texpr = expr.replace( rattributeQuotes, \"='$1']\" );\n\n\tif ( support.matchesSelector && documentIsHTML &&\n\t\t!compilerCache[ expr + \" \" ] &&\n\t\t( !rbuggyMatches || !rbuggyMatches.test( expr ) ) &&\n\t\t( !rbuggyQSA     || !rbuggyQSA.test( expr ) ) ) {\n\n\t\ttry {\n\t\t\tvar ret = matches.call( elem, expr );\n\n\t\t\t// IE 9's matchesSelector returns false on disconnected nodes\n\t\t\tif ( ret || support.disconnectedMatch ||\n\t\t\t\t\t// As well, disconnected nodes are said to be in a document\n\t\t\t\t\t// fragment in IE 9\n\t\t\t\t\telem.document && elem.document.nodeType !== 11 ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\t\t} catch (e) {}\n\t}\n\n\treturn Sizzle( expr, document, null, [ elem ] ).length > 0;\n};\n\nSizzle.contains = function( context, elem ) {\n\t// Set document vars if needed\n\tif ( ( context.ownerDocument || context ) !== document ) {\n\t\tsetDocument( context );\n\t}\n\treturn contains( context, elem );\n};\n\nSizzle.attr = function( elem, name ) {\n\t// Set document vars if needed\n\tif ( ( elem.ownerDocument || elem ) !== document ) {\n\t\tsetDocument( elem );\n\t}\n\n\tvar fn = Expr.attrHandle[ name.toLowerCase() ],\n\t\t// Don't get fooled by Object.prototype properties (jQuery #13807)\n\t\tval = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ?\n\t\t\tfn( elem, name, !documentIsHTML ) :\n\t\t\tundefined;\n\n\treturn val !== undefined ?\n\t\tval :\n\t\tsupport.attributes || !documentIsHTML ?\n\t\t\telem.getAttribute( name ) :\n\t\t\t(val = elem.getAttributeNode(name)) && val.specified ?\n\t\t\t\tval.value :\n\t\t\t\tnull;\n};\n\nSizzle.error = function( msg ) {\n\tthrow new Error( \"Syntax error, unrecognized expression: \" + msg );\n};\n\n/**\n * Document sorting and removing duplicates\n * @param {ArrayLike} results\n */\nSizzle.uniqueSort = function( results ) {\n\tvar elem,\n\t\tduplicates = [],\n\t\tj = 0,\n\t\ti = 0;\n\n\t// Unless we *know* we can detect duplicates, assume their presence\n\thasDuplicate = !support.detectDuplicates;\n\tsortInput = !support.sortStable && results.slice( 0 );\n\tresults.sort( sortOrder );\n\n\tif ( hasDuplicate ) {\n\t\twhile ( (elem = results[i++]) ) {\n\t\t\tif ( elem === results[ i ] ) {\n\t\t\t\tj = duplicates.push( i );\n\t\t\t}\n\t\t}\n\t\twhile ( j-- ) {\n\t\t\tresults.splice( duplicates[ j ], 1 );\n\t\t}\n\t}\n\n\t// Clear input after sorting to release objects\n\t// See https://github.com/jquery/sizzle/pull/225\n\tsortInput = null;\n\n\treturn results;\n};\n\n/**\n * Utility function for retrieving the text value of an array of DOM nodes\n * @param {Array|Element} elem\n */\ngetText = Sizzle.getText = function( elem ) {\n\tvar node,\n\t\tret = \"\",\n\t\ti = 0,\n\t\tnodeType = elem.nodeType;\n\n\tif ( !nodeType ) {\n\t\t// If no nodeType, this is expected to be an array\n\t\twhile ( (node = elem[i++]) ) {\n\t\t\t// Do not traverse comment nodes\n\t\t\tret += getText( node );\n\t\t}\n\t} else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) {\n\t\t// Use textContent for elements\n\t\t// innerText usage removed for consistency of new lines (jQuery #11153)\n\t\tif ( typeof elem.textContent === \"string\" ) {\n\t\t\treturn elem.textContent;\n\t\t} else {\n\t\t\t// Traverse its children\n\t\t\tfor ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {\n\t\t\t\tret += getText( elem );\n\t\t\t}\n\t\t}\n\t} else if ( nodeType === 3 || nodeType === 4 ) {\n\t\treturn elem.nodeValue;\n\t}\n\t// Do not include comment or processing instruction nodes\n\n\treturn ret;\n};\n\nExpr = Sizzle.selectors = {\n\n\t// Can be adjusted by the user\n\tcacheLength: 50,\n\n\tcreatePseudo: markFunction,\n\n\tmatch: matchExpr,\n\n\tattrHandle: {},\n\n\tfind: {},\n\n\trelative: {\n\t\t\">\": { dir: \"parentNode\", first: true },\n\t\t\" \": { dir: \"parentNode\" },\n\t\t\"+\": { dir: \"previousSibling\", first: true },\n\t\t\"~\": { dir: \"previousSibling\" }\n\t},\n\n\tpreFilter: {\n\t\t\"ATTR\": function( match ) {\n\t\t\tmatch[1] = match[1].replace( runescape, funescape );\n\n\t\t\t// Move the given value to match[3] whether quoted or unquoted\n\t\t\tmatch[3] = ( match[3] || match[4] || match[5] || \"\" ).replace( runescape, funescape );\n\n\t\t\tif ( match[2] === \"~=\" ) {\n\t\t\t\tmatch[3] = \" \" + match[3] + \" \";\n\t\t\t}\n\n\t\t\treturn match.slice( 0, 4 );\n\t\t},\n\n\t\t\"CHILD\": function( match ) {\n\t\t\t/* matches from matchExpr[\"CHILD\"]\n\t\t\t\t1 type (only|nth|...)\n\t\t\t\t2 what (child|of-type)\n\t\t\t\t3 argument (even|odd|\\d*|\\d*n([+-]\\d+)?|...)\n\t\t\t\t4 xn-component of xn+y argument ([+-]?\\d*n|)\n\t\t\t\t5 sign of xn-component\n\t\t\t\t6 x of xn-component\n\t\t\t\t7 sign of y-component\n\t\t\t\t8 y of y-component\n\t\t\t*/\n\t\t\tmatch[1] = match[1].toLowerCase();\n\n\t\t\tif ( match[1].slice( 0, 3 ) === \"nth\" ) {\n\t\t\t\t// nth-* requires argument\n\t\t\t\tif ( !match[3] ) {\n\t\t\t\t\tSizzle.error( match[0] );\n\t\t\t\t}\n\n\t\t\t\t// numeric x and y parameters for Expr.filter.CHILD\n\t\t\t\t// remember that false/true cast respectively to 0/1\n\t\t\t\tmatch[4] = +( match[4] ? match[5] + (match[6] || 1) : 2 * ( match[3] === \"even\" || match[3] === \"odd\" ) );\n\t\t\t\tmatch[5] = +( ( match[7] + match[8] ) || match[3] === \"odd\" );\n\n\t\t\t// other types prohibit arguments\n\t\t\t} else if ( match[3] ) {\n\t\t\t\tSizzle.error( match[0] );\n\t\t\t}\n\n\t\t\treturn match;\n\t\t},\n\n\t\t\"PSEUDO\": function( match ) {\n\t\t\tvar excess,\n\t\t\t\tunquoted = !match[6] && match[2];\n\n\t\t\tif ( matchExpr[\"CHILD\"].test( match[0] ) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\t// Accept quoted arguments as-is\n\t\t\tif ( match[3] ) {\n\t\t\t\tmatch[2] = match[4] || match[5] || \"\";\n\n\t\t\t// Strip excess characters from unquoted arguments\n\t\t\t} else if ( unquoted && rpseudo.test( unquoted ) &&\n\t\t\t\t// Get excess from tokenize (recursively)\n\t\t\t\t(excess = tokenize( unquoted, true )) &&\n\t\t\t\t// advance to the next closing parenthesis\n\t\t\t\t(excess = unquoted.indexOf( \")\", unquoted.length - excess ) - unquoted.length) ) {\n\n\t\t\t\t// excess is a negative index\n\t\t\t\tmatch[0] = match[0].slice( 0, excess );\n\t\t\t\tmatch[2] = unquoted.slice( 0, excess );\n\t\t\t}\n\n\t\t\t// Return only captures needed by the pseudo filter method (type and argument)\n\t\t\treturn match.slice( 0, 3 );\n\t\t}\n\t},\n\n\tfilter: {\n\n\t\t\"TAG\": function( nodeNameSelector ) {\n\t\t\tvar nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase();\n\t\t\treturn nodeNameSelector === \"*\" ?\n\t\t\t\tfunction() { return true; } :\n\t\t\t\tfunction( elem ) {\n\t\t\t\t\treturn elem.nodeName && elem.nodeName.toLowerCase() === nodeName;\n\t\t\t\t};\n\t\t},\n\n\t\t\"CLASS\": function( className ) {\n\t\t\tvar pattern = classCache[ className + \" \" ];\n\n\t\t\treturn pattern ||\n\t\t\t\t(pattern = new RegExp( \"(^|\" + whitespace + \")\" + className + \"(\" + whitespace + \"|$)\" )) &&\n\t\t\t\tclassCache( className, function( elem ) {\n\t\t\t\t\treturn pattern.test( typeof elem.className === \"string\" && elem.className || typeof elem.getAttribute !== \"undefined\" && elem.getAttribute(\"class\") || \"\" );\n\t\t\t\t});\n\t\t},\n\n\t\t\"ATTR\": function( name, operator, check ) {\n\t\t\treturn function( elem ) {\n\t\t\t\tvar result = Sizzle.attr( elem, name );\n\n\t\t\t\tif ( result == null ) {\n\t\t\t\t\treturn operator === \"!=\";\n\t\t\t\t}\n\t\t\t\tif ( !operator ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\tresult += \"\";\n\n\t\t\t\treturn operator === \"=\" ? result === check :\n\t\t\t\t\toperator === \"!=\" ? result !== check :\n\t\t\t\t\toperator === \"^=\" ? check && result.indexOf( check ) === 0 :\n\t\t\t\t\toperator === \"*=\" ? check && result.indexOf( check ) > -1 :\n\t\t\t\t\toperator === \"$=\" ? check && result.slice( -check.length ) === check :\n\t\t\t\t\toperator === \"~=\" ? ( \" \" + result.replace( rwhitespace, \" \" ) + \" \" ).indexOf( check ) > -1 :\n\t\t\t\t\toperator === \"|=\" ? result === check || result.slice( 0, check.length + 1 ) === check + \"-\" :\n\t\t\t\t\tfalse;\n\t\t\t};\n\t\t},\n\n\t\t\"CHILD\": function( type, what, argument, first, last ) {\n\t\t\tvar simple = type.slice( 0, 3 ) !== \"nth\",\n\t\t\t\tforward = type.slice( -4 ) !== \"last\",\n\t\t\t\tofType = what === \"of-type\";\n\n\t\t\treturn first === 1 && last === 0 ?\n\n\t\t\t\t// Shortcut for :nth-*(n)\n\t\t\t\tfunction( elem ) {\n\t\t\t\t\treturn !!elem.parentNode;\n\t\t\t\t} :\n\n\t\t\t\tfunction( elem, context, xml ) {\n\t\t\t\t\tvar cache, uniqueCache, outerCache, node, nodeIndex, start,\n\t\t\t\t\t\tdir = simple !== forward ? \"nextSibling\" : \"previousSibling\",\n\t\t\t\t\t\tparent = elem.parentNode,\n\t\t\t\t\t\tname = ofType && elem.nodeName.toLowerCase(),\n\t\t\t\t\t\tuseCache = !xml && !ofType,\n\t\t\t\t\t\tdiff = false;\n\n\t\t\t\t\tif ( parent ) {\n\n\t\t\t\t\t\t// :(first|last|only)-(child|of-type)\n\t\t\t\t\t\tif ( simple ) {\n\t\t\t\t\t\t\twhile ( dir ) {\n\t\t\t\t\t\t\t\tnode = elem;\n\t\t\t\t\t\t\t\twhile ( (node = node[ dir ]) ) {\n\t\t\t\t\t\t\t\t\tif ( ofType ?\n\t\t\t\t\t\t\t\t\t\tnode.nodeName.toLowerCase() === name :\n\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1 ) {\n\n\t\t\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t// Reverse direction for :only-* (if we haven't yet done so)\n\t\t\t\t\t\t\t\tstart = dir = type === \"only\" && !start && \"nextSibling\";\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tstart = [ forward ? parent.firstChild : parent.lastChild ];\n\n\t\t\t\t\t\t// non-xml :nth-child(...) stores cache data on `parent`\n\t\t\t\t\t\tif ( forward && useCache ) {\n\n\t\t\t\t\t\t\t// Seek `elem` from a previously-cached index\n\n\t\t\t\t\t\t\t// ...in a gzip-friendly way\n\t\t\t\t\t\t\tnode = parent;\n\t\t\t\t\t\t\touterCache = node[ expando ] || (node[ expando ] = {});\n\n\t\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\t\tuniqueCache = outerCache[ node.uniqueID ] ||\n\t\t\t\t\t\t\t\t(outerCache[ node.uniqueID ] = {});\n\n\t\t\t\t\t\t\tcache = uniqueCache[ type ] || [];\n\t\t\t\t\t\t\tnodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];\n\t\t\t\t\t\t\tdiff = nodeIndex && cache[ 2 ];\n\t\t\t\t\t\t\tnode = nodeIndex && parent.childNodes[ nodeIndex ];\n\n\t\t\t\t\t\t\twhile ( (node = ++nodeIndex && node && node[ dir ] ||\n\n\t\t\t\t\t\t\t\t// Fallback to seeking `elem` from the start\n\t\t\t\t\t\t\t\t(diff = nodeIndex = 0) || start.pop()) ) {\n\n\t\t\t\t\t\t\t\t// When found, cache indexes on `parent` and break\n\t\t\t\t\t\t\t\tif ( node.nodeType === 1 && ++diff && node === elem ) {\n\t\t\t\t\t\t\t\t\tuniqueCache[ type ] = [ dirruns, nodeIndex, diff ];\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// Use previously-cached element index if available\n\t\t\t\t\t\t\tif ( useCache ) {\n\t\t\t\t\t\t\t\t// ...in a gzip-friendly way\n\t\t\t\t\t\t\t\tnode = elem;\n\t\t\t\t\t\t\t\touterCache = node[ expando ] || (node[ expando ] = {});\n\n\t\t\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\t\t\tuniqueCache = outerCache[ node.uniqueID ] ||\n\t\t\t\t\t\t\t\t\t(outerCache[ node.uniqueID ] = {});\n\n\t\t\t\t\t\t\t\tcache = uniqueCache[ type ] || [];\n\t\t\t\t\t\t\t\tnodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];\n\t\t\t\t\t\t\t\tdiff = nodeIndex;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// xml :nth-child(...)\n\t\t\t\t\t\t\t// or :nth-last-child(...) or :nth(-last)?-of-type(...)\n\t\t\t\t\t\t\tif ( diff === false ) {\n\t\t\t\t\t\t\t\t// Use the same loop as above to seek `elem` from the start\n\t\t\t\t\t\t\t\twhile ( (node = ++nodeIndex && node && node[ dir ] ||\n\t\t\t\t\t\t\t\t\t(diff = nodeIndex = 0) || start.pop()) ) {\n\n\t\t\t\t\t\t\t\t\tif ( ( ofType ?\n\t\t\t\t\t\t\t\t\t\tnode.nodeName.toLowerCase() === name :\n\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1 ) &&\n\t\t\t\t\t\t\t\t\t\t++diff ) {\n\n\t\t\t\t\t\t\t\t\t\t// Cache the index of each encountered element\n\t\t\t\t\t\t\t\t\t\tif ( useCache ) {\n\t\t\t\t\t\t\t\t\t\t\touterCache = node[ expando ] || (node[ expando ] = {});\n\n\t\t\t\t\t\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\t\t\t\t\t\tuniqueCache = outerCache[ node.uniqueID ] ||\n\t\t\t\t\t\t\t\t\t\t\t\t(outerCache[ node.uniqueID ] = {});\n\n\t\t\t\t\t\t\t\t\t\t\tuniqueCache[ type ] = [ dirruns, diff ];\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\tif ( node === elem ) {\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Incorporate the offset, then check against cycle size\n\t\t\t\t\t\tdiff -= last;\n\t\t\t\t\t\treturn diff === first || ( diff % first === 0 && diff / first >= 0 );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t},\n\n\t\t\"PSEUDO\": function( pseudo, argument ) {\n\t\t\t// pseudo-class names are case-insensitive\n\t\t\t// http://www.w3.org/TR/selectors/#pseudo-classes\n\t\t\t// Prioritize by case sensitivity in case custom pseudos are added with uppercase letters\n\t\t\t// Remember that setFilters inherits from pseudos\n\t\t\tvar args,\n\t\t\t\tfn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] ||\n\t\t\t\t\tSizzle.error( \"unsupported pseudo: \" + pseudo );\n\n\t\t\t// The user may use createPseudo to indicate that\n\t\t\t// arguments are needed to create the filter function\n\t\t\t// just as Sizzle does\n\t\t\tif ( fn[ expando ] ) {\n\t\t\t\treturn fn( argument );\n\t\t\t}\n\n\t\t\t// But maintain support for old signatures\n\t\t\tif ( fn.length > 1 ) {\n\t\t\t\targs = [ pseudo, pseudo, \"\", argument ];\n\t\t\t\treturn Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ?\n\t\t\t\t\tmarkFunction(function( seed, matches ) {\n\t\t\t\t\t\tvar idx,\n\t\t\t\t\t\t\tmatched = fn( seed, argument ),\n\t\t\t\t\t\t\ti = matched.length;\n\t\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\t\tidx = indexOf( seed, matched[i] );\n\t\t\t\t\t\t\tseed[ idx ] = !( matches[ idx ] = matched[i] );\n\t\t\t\t\t\t}\n\t\t\t\t\t}) :\n\t\t\t\t\tfunction( elem ) {\n\t\t\t\t\t\treturn fn( elem, 0, args );\n\t\t\t\t\t};\n\t\t\t}\n\n\t\t\treturn fn;\n\t\t}\n\t},\n\n\tpseudos: {\n\t\t// Potentially complex pseudos\n\t\t\"not\": markFunction(function( selector ) {\n\t\t\t// Trim the selector passed to compile\n\t\t\t// to avoid treating leading and trailing\n\t\t\t// spaces as combinators\n\t\t\tvar input = [],\n\t\t\t\tresults = [],\n\t\t\t\tmatcher = compile( selector.replace( rtrim, \"$1\" ) );\n\n\t\t\treturn matcher[ expando ] ?\n\t\t\t\tmarkFunction(function( seed, matches, context, xml ) {\n\t\t\t\t\tvar elem,\n\t\t\t\t\t\tunmatched = matcher( seed, null, xml, [] ),\n\t\t\t\t\t\ti = seed.length;\n\n\t\t\t\t\t// Match elements unmatched by `matcher`\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( (elem = unmatched[i]) ) {\n\t\t\t\t\t\t\tseed[i] = !(matches[i] = elem);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}) :\n\t\t\t\tfunction( elem, context, xml ) {\n\t\t\t\t\tinput[0] = elem;\n\t\t\t\t\tmatcher( input, null, xml, results );\n\t\t\t\t\t// Don't keep the element (issue #299)\n\t\t\t\t\tinput[0] = null;\n\t\t\t\t\treturn !results.pop();\n\t\t\t\t};\n\t\t}),\n\n\t\t\"has\": markFunction(function( selector ) {\n\t\t\treturn function( elem ) {\n\t\t\t\treturn Sizzle( selector, elem ).length > 0;\n\t\t\t};\n\t\t}),\n\n\t\t\"contains\": markFunction(function( text ) {\n\t\t\ttext = text.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\treturn ( elem.textContent || elem.innerText || getText( elem ) ).indexOf( text ) > -1;\n\t\t\t};\n\t\t}),\n\n\t\t// \"Whether an element is represented by a :lang() selector\n\t\t// is based solely on the element's language value\n\t\t// being equal to the identifier C,\n\t\t// or beginning with the identifier C immediately followed by \"-\".\n\t\t// The matching of C against the element's language value is performed case-insensitively.\n\t\t// The identifier C does not have to be a valid language name.\"\n\t\t// http://www.w3.org/TR/selectors/#lang-pseudo\n\t\t\"lang\": markFunction( function( lang ) {\n\t\t\t// lang value must be a valid identifier\n\t\t\tif ( !ridentifier.test(lang || \"\") ) {\n\t\t\t\tSizzle.error( \"unsupported lang: \" + lang );\n\t\t\t}\n\t\t\tlang = lang.replace( runescape, funescape ).toLowerCase();\n\t\t\treturn function( elem ) {\n\t\t\t\tvar elemLang;\n\t\t\t\tdo {\n\t\t\t\t\tif ( (elemLang = documentIsHTML ?\n\t\t\t\t\t\telem.lang :\n\t\t\t\t\t\telem.getAttribute(\"xml:lang\") || elem.getAttribute(\"lang\")) ) {\n\n\t\t\t\t\t\telemLang = elemLang.toLowerCase();\n\t\t\t\t\t\treturn elemLang === lang || elemLang.indexOf( lang + \"-\" ) === 0;\n\t\t\t\t\t}\n\t\t\t\t} while ( (elem = elem.parentNode) && elem.nodeType === 1 );\n\t\t\t\treturn false;\n\t\t\t};\n\t\t}),\n\n\t\t// Miscellaneous\n\t\t\"target\": function( elem ) {\n\t\t\tvar hash = window.location && window.location.hash;\n\t\t\treturn hash && hash.slice( 1 ) === elem.id;\n\t\t},\n\n\t\t\"root\": function( elem ) {\n\t\t\treturn elem === docElem;\n\t\t},\n\n\t\t\"focus\": function( elem ) {\n\t\t\treturn elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex);\n\t\t},\n\n\t\t// Boolean properties\n\t\t\"enabled\": function( elem ) {\n\t\t\treturn elem.disabled === false;\n\t\t},\n\n\t\t\"disabled\": function( elem ) {\n\t\t\treturn elem.disabled === true;\n\t\t},\n\n\t\t\"checked\": function( elem ) {\n\t\t\t// In CSS3, :checked should return both checked and selected elements\n\t\t\t// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n\t\t\tvar nodeName = elem.nodeName.toLowerCase();\n\t\t\treturn (nodeName === \"input\" && !!elem.checked) || (nodeName === \"option\" && !!elem.selected);\n\t\t},\n\n\t\t\"selected\": function( elem ) {\n\t\t\t// Accessing this property makes selected-by-default\n\t\t\t// options in Safari work properly\n\t\t\tif ( elem.parentNode ) {\n\t\t\t\telem.parentNode.selectedIndex;\n\t\t\t}\n\n\t\t\treturn elem.selected === true;\n\t\t},\n\n\t\t// Contents\n\t\t\"empty\": function( elem ) {\n\t\t\t// http://www.w3.org/TR/selectors/#empty-pseudo\n\t\t\t// :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5),\n\t\t\t//   but not by others (comment: 8; processing instruction: 7; etc.)\n\t\t\t// nodeType < 6 works because attributes (2) do not appear as children\n\t\t\tfor ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {\n\t\t\t\tif ( elem.nodeType < 6 ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\n\t\t\"parent\": function( elem ) {\n\t\t\treturn !Expr.pseudos[\"empty\"]( elem );\n\t\t},\n\n\t\t// Element/input types\n\t\t\"header\": function( elem ) {\n\t\t\treturn rheader.test( elem.nodeName );\n\t\t},\n\n\t\t\"input\": function( elem ) {\n\t\t\treturn rinputs.test( elem.nodeName );\n\t\t},\n\n\t\t\"button\": function( elem ) {\n\t\t\tvar name = elem.nodeName.toLowerCase();\n\t\t\treturn name === \"input\" && elem.type === \"button\" || name === \"button\";\n\t\t},\n\n\t\t\"text\": function( elem ) {\n\t\t\tvar attr;\n\t\t\treturn elem.nodeName.toLowerCase() === \"input\" &&\n\t\t\t\telem.type === \"text\" &&\n\n\t\t\t\t// Support: IE<8\n\t\t\t\t// New HTML5 attribute values (e.g., \"search\") appear with elem.type === \"text\"\n\t\t\t\t( (attr = elem.getAttribute(\"type\")) == null || attr.toLowerCase() === \"text\" );\n\t\t},\n\n\t\t// Position-in-collection\n\t\t\"first\": createPositionalPseudo(function() {\n\t\t\treturn [ 0 ];\n\t\t}),\n\n\t\t\"last\": createPositionalPseudo(function( matchIndexes, length ) {\n\t\t\treturn [ length - 1 ];\n\t\t}),\n\n\t\t\"eq\": createPositionalPseudo(function( matchIndexes, length, argument ) {\n\t\t\treturn [ argument < 0 ? argument + length : argument ];\n\t\t}),\n\n\t\t\"even\": createPositionalPseudo(function( matchIndexes, length ) {\n\t\t\tvar i = 0;\n\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t}),\n\n\t\t\"odd\": createPositionalPseudo(function( matchIndexes, length ) {\n\t\t\tvar i = 1;\n\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t}),\n\n\t\t\"lt\": createPositionalPseudo(function( matchIndexes, length, argument ) {\n\t\t\tvar i = argument < 0 ? argument + length : argument;\n\t\t\tfor ( ; --i >= 0; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t}),\n\n\t\t\"gt\": createPositionalPseudo(function( matchIndexes, length, argument ) {\n\t\t\tvar i = argument < 0 ? argument + length : argument;\n\t\t\tfor ( ; ++i < length; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t})\n\t}\n};\n\nExpr.pseudos[\"nth\"] = Expr.pseudos[\"eq\"];\n\n// Add button/input type pseudos\nfor ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) {\n\tExpr.pseudos[ i ] = createInputPseudo( i );\n}\nfor ( i in { submit: true, reset: true } ) {\n\tExpr.pseudos[ i ] = createButtonPseudo( i );\n}\n\n// Easy API for creating new setFilters\nfunction setFilters() {}\nsetFilters.prototype = Expr.filters = Expr.pseudos;\nExpr.setFilters = new setFilters();\n\ntokenize = Sizzle.tokenize = function( selector, parseOnly ) {\n\tvar matched, match, tokens, type,\n\t\tsoFar, groups, preFilters,\n\t\tcached = tokenCache[ selector + \" \" ];\n\n\tif ( cached ) {\n\t\treturn parseOnly ? 0 : cached.slice( 0 );\n\t}\n\n\tsoFar = selector;\n\tgroups = [];\n\tpreFilters = Expr.preFilter;\n\n\twhile ( soFar ) {\n\n\t\t// Comma and first run\n\t\tif ( !matched || (match = rcomma.exec( soFar )) ) {\n\t\t\tif ( match ) {\n\t\t\t\t// Don't consume trailing commas as valid\n\t\t\t\tsoFar = soFar.slice( match[0].length ) || soFar;\n\t\t\t}\n\t\t\tgroups.push( (tokens = []) );\n\t\t}\n\n\t\tmatched = false;\n\n\t\t// Combinators\n\t\tif ( (match = rcombinators.exec( soFar )) ) {\n\t\t\tmatched = match.shift();\n\t\t\ttokens.push({\n\t\t\t\tvalue: matched,\n\t\t\t\t// Cast descendant combinators to space\n\t\t\t\ttype: match[0].replace( rtrim, \" \" )\n\t\t\t});\n\t\t\tsoFar = soFar.slice( matched.length );\n\t\t}\n\n\t\t// Filters\n\t\tfor ( type in Expr.filter ) {\n\t\t\tif ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] ||\n\t\t\t\t(match = preFilters[ type ]( match ))) ) {\n\t\t\t\tmatched = match.shift();\n\t\t\t\ttokens.push({\n\t\t\t\t\tvalue: matched,\n\t\t\t\t\ttype: type,\n\t\t\t\t\tmatches: match\n\t\t\t\t});\n\t\t\t\tsoFar = soFar.slice( matched.length );\n\t\t\t}\n\t\t}\n\n\t\tif ( !matched ) {\n\t\t\tbreak;\n\t\t}\n\t}\n\n\t// Return the length of the invalid excess\n\t// if we're just parsing\n\t// Otherwise, throw an error or return tokens\n\treturn parseOnly ?\n\t\tsoFar.length :\n\t\tsoFar ?\n\t\t\tSizzle.error( selector ) :\n\t\t\t// Cache the tokens\n\t\t\ttokenCache( selector, groups ).slice( 0 );\n};\n\nfunction toSelector( tokens ) {\n\tvar i = 0,\n\t\tlen = tokens.length,\n\t\tselector = \"\";\n\tfor ( ; i < len; i++ ) {\n\t\tselector += tokens[i].value;\n\t}\n\treturn selector;\n}\n\nfunction addCombinator( matcher, combinator, base ) {\n\tvar dir = combinator.dir,\n\t\tcheckNonElements = base && dir === \"parentNode\",\n\t\tdoneName = done++;\n\n\treturn combinator.first ?\n\t\t// Check against closest ancestor/preceding element\n\t\tfunction( elem, context, xml ) {\n\t\t\twhile ( (elem = elem[ dir ]) ) {\n\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\treturn matcher( elem, context, xml );\n\t\t\t\t}\n\t\t\t}\n\t\t} :\n\n\t\t// Check against all ancestor/preceding elements\n\t\tfunction( elem, context, xml ) {\n\t\t\tvar oldCache, uniqueCache, outerCache,\n\t\t\t\tnewCache = [ dirruns, doneName ];\n\n\t\t\t// We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching\n\t\t\tif ( xml ) {\n\t\t\t\twhile ( (elem = elem[ dir ]) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\t\tif ( matcher( elem, context, xml ) ) {\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\twhile ( (elem = elem[ dir ]) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\t\touterCache = elem[ expando ] || (elem[ expando ] = {});\n\n\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\tuniqueCache = outerCache[ elem.uniqueID ] || (outerCache[ elem.uniqueID ] = {});\n\n\t\t\t\t\t\tif ( (oldCache = uniqueCache[ dir ]) &&\n\t\t\t\t\t\t\toldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) {\n\n\t\t\t\t\t\t\t// Assign to newCache so results back-propagate to previous elements\n\t\t\t\t\t\t\treturn (newCache[ 2 ] = oldCache[ 2 ]);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// Reuse newcache so results back-propagate to previous elements\n\t\t\t\t\t\t\tuniqueCache[ dir ] = newCache;\n\n\t\t\t\t\t\t\t// A match means we're done; a fail means we have to keep checking\n\t\t\t\t\t\t\tif ( (newCache[ 2 ] = matcher( elem, context, xml )) ) {\n\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t};\n}\n\nfunction elementMatcher( matchers ) {\n\treturn matchers.length > 1 ?\n\t\tfunction( elem, context, xml ) {\n\t\t\tvar i = matchers.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( !matchers[i]( elem, context, xml ) ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t} :\n\t\tmatchers[0];\n}\n\nfunction multipleContexts( selector, contexts, results ) {\n\tvar i = 0,\n\t\tlen = contexts.length;\n\tfor ( ; i < len; i++ ) {\n\t\tSizzle( selector, contexts[i], results );\n\t}\n\treturn results;\n}\n\nfunction condense( unmatched, map, filter, context, xml ) {\n\tvar elem,\n\t\tnewUnmatched = [],\n\t\ti = 0,\n\t\tlen = unmatched.length,\n\t\tmapped = map != null;\n\n\tfor ( ; i < len; i++ ) {\n\t\tif ( (elem = unmatched[i]) ) {\n\t\t\tif ( !filter || filter( elem, context, xml ) ) {\n\t\t\t\tnewUnmatched.push( elem );\n\t\t\t\tif ( mapped ) {\n\t\t\t\t\tmap.push( i );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn newUnmatched;\n}\n\nfunction setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) {\n\tif ( postFilter && !postFilter[ expando ] ) {\n\t\tpostFilter = setMatcher( postFilter );\n\t}\n\tif ( postFinder && !postFinder[ expando ] ) {\n\t\tpostFinder = setMatcher( postFinder, postSelector );\n\t}\n\treturn markFunction(function( seed, results, context, xml ) {\n\t\tvar temp, i, elem,\n\t\t\tpreMap = [],\n\t\t\tpostMap = [],\n\t\t\tpreexisting = results.length,\n\n\t\t\t// Get initial elements from seed or context\n\t\t\telems = seed || multipleContexts( selector || \"*\", context.nodeType ? [ context ] : context, [] ),\n\n\t\t\t// Prefilter to get matcher input, preserving a map for seed-results synchronization\n\t\t\tmatcherIn = preFilter && ( seed || !selector ) ?\n\t\t\t\tcondense( elems, preMap, preFilter, context, xml ) :\n\t\t\t\telems,\n\n\t\t\tmatcherOut = matcher ?\n\t\t\t\t// If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results,\n\t\t\t\tpostFinder || ( seed ? preFilter : preexisting || postFilter ) ?\n\n\t\t\t\t\t// ...intermediate processing is necessary\n\t\t\t\t\t[] :\n\n\t\t\t\t\t// ...otherwise use results directly\n\t\t\t\t\tresults :\n\t\t\t\tmatcherIn;\n\n\t\t// Find primary matches\n\t\tif ( matcher ) {\n\t\t\tmatcher( matcherIn, matcherOut, context, xml );\n\t\t}\n\n\t\t// Apply postFilter\n\t\tif ( postFilter ) {\n\t\t\ttemp = condense( matcherOut, postMap );\n\t\t\tpostFilter( temp, [], context, xml );\n\n\t\t\t// Un-match failing elements by moving them back to matcherIn\n\t\t\ti = temp.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( (elem = temp[i]) ) {\n\t\t\t\t\tmatcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif ( seed ) {\n\t\t\tif ( postFinder || preFilter ) {\n\t\t\t\tif ( postFinder ) {\n\t\t\t\t\t// Get the final matcherOut by condensing this intermediate into postFinder contexts\n\t\t\t\t\ttemp = [];\n\t\t\t\t\ti = matcherOut.length;\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( (elem = matcherOut[i]) ) {\n\t\t\t\t\t\t\t// Restore matcherIn since elem is not yet a final match\n\t\t\t\t\t\t\ttemp.push( (matcherIn[i] = elem) );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tpostFinder( null, (matcherOut = []), temp, xml );\n\t\t\t\t}\n\n\t\t\t\t// Move matched elements from seed to results to keep them synchronized\n\t\t\t\ti = matcherOut.length;\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\tif ( (elem = matcherOut[i]) &&\n\t\t\t\t\t\t(temp = postFinder ? indexOf( seed, elem ) : preMap[i]) > -1 ) {\n\n\t\t\t\t\t\tseed[temp] = !(results[temp] = elem);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Add elements to results, through postFinder if defined\n\t\t} else {\n\t\t\tmatcherOut = condense(\n\t\t\t\tmatcherOut === results ?\n\t\t\t\t\tmatcherOut.splice( preexisting, matcherOut.length ) :\n\t\t\t\t\tmatcherOut\n\t\t\t);\n\t\t\tif ( postFinder ) {\n\t\t\t\tpostFinder( null, results, matcherOut, xml );\n\t\t\t} else {\n\t\t\t\tpush.apply( results, matcherOut );\n\t\t\t}\n\t\t}\n\t});\n}\n\nfunction matcherFromTokens( tokens ) {\n\tvar checkContext, matcher, j,\n\t\tlen = tokens.length,\n\t\tleadingRelative = Expr.relative[ tokens[0].type ],\n\t\timplicitRelative = leadingRelative || Expr.relative[\" \"],\n\t\ti = leadingRelative ? 1 : 0,\n\n\t\t// The foundational matcher ensures that elements are reachable from top-level context(s)\n\t\tmatchContext = addCombinator( function( elem ) {\n\t\t\treturn elem === checkContext;\n\t\t}, implicitRelative, true ),\n\t\tmatchAnyContext = addCombinator( function( elem ) {\n\t\t\treturn indexOf( checkContext, elem ) > -1;\n\t\t}, implicitRelative, true ),\n\t\tmatchers = [ function( elem, context, xml ) {\n\t\t\tvar ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || (\n\t\t\t\t(checkContext = context).nodeType ?\n\t\t\t\t\tmatchContext( elem, context, xml ) :\n\t\t\t\t\tmatchAnyContext( elem, context, xml ) );\n\t\t\t// Avoid hanging onto element (issue #299)\n\t\t\tcheckContext = null;\n\t\t\treturn ret;\n\t\t} ];\n\n\tfor ( ; i < len; i++ ) {\n\t\tif ( (matcher = Expr.relative[ tokens[i].type ]) ) {\n\t\t\tmatchers = [ addCombinator(elementMatcher( matchers ), matcher) ];\n\t\t} else {\n\t\t\tmatcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches );\n\n\t\t\t// Return special upon seeing a positional matcher\n\t\t\tif ( matcher[ expando ] ) {\n\t\t\t\t// Find the next relative operator (if any) for proper handling\n\t\t\t\tj = ++i;\n\t\t\t\tfor ( ; j < len; j++ ) {\n\t\t\t\t\tif ( Expr.relative[ tokens[j].type ] ) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn setMatcher(\n\t\t\t\t\ti > 1 && elementMatcher( matchers ),\n\t\t\t\t\ti > 1 && toSelector(\n\t\t\t\t\t\t// If the preceding token was a descendant combinator, insert an implicit any-element `*`\n\t\t\t\t\t\ttokens.slice( 0, i - 1 ).concat({ value: tokens[ i - 2 ].type === \" \" ? \"*\" : \"\" })\n\t\t\t\t\t).replace( rtrim, \"$1\" ),\n\t\t\t\t\tmatcher,\n\t\t\t\t\ti < j && matcherFromTokens( tokens.slice( i, j ) ),\n\t\t\t\t\tj < len && matcherFromTokens( (tokens = tokens.slice( j )) ),\n\t\t\t\t\tj < len && toSelector( tokens )\n\t\t\t\t);\n\t\t\t}\n\t\t\tmatchers.push( matcher );\n\t\t}\n\t}\n\n\treturn elementMatcher( matchers );\n}\n\nfunction matcherFromGroupMatchers( elementMatchers, setMatchers ) {\n\tvar bySet = setMatchers.length > 0,\n\t\tbyElement = elementMatchers.length > 0,\n\t\tsuperMatcher = function( seed, context, xml, results, outermost ) {\n\t\t\tvar elem, j, matcher,\n\t\t\t\tmatchedCount = 0,\n\t\t\t\ti = \"0\",\n\t\t\t\tunmatched = seed && [],\n\t\t\t\tsetMatched = [],\n\t\t\t\tcontextBackup = outermostContext,\n\t\t\t\t// We must always have either seed elements or outermost context\n\t\t\t\telems = seed || byElement && Expr.find[\"TAG\"]( \"*\", outermost ),\n\t\t\t\t// Use integer dirruns iff this is the outermost matcher\n\t\t\t\tdirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1),\n\t\t\t\tlen = elems.length;\n\n\t\t\tif ( outermost ) {\n\t\t\t\toutermostContext = context === document || context || outermost;\n\t\t\t}\n\n\t\t\t// Add elements passing elementMatchers directly to results\n\t\t\t// Support: IE<9, Safari\n\t\t\t// Tolerate NodeList properties (IE: \"length\"; Safari: <number>) matching elements by id\n\t\t\tfor ( ; i !== len && (elem = elems[i]) != null; i++ ) {\n\t\t\t\tif ( byElement && elem ) {\n\t\t\t\t\tj = 0;\n\t\t\t\t\tif ( !context && elem.ownerDocument !== document ) {\n\t\t\t\t\t\tsetDocument( elem );\n\t\t\t\t\t\txml = !documentIsHTML;\n\t\t\t\t\t}\n\t\t\t\t\twhile ( (matcher = elementMatchers[j++]) ) {\n\t\t\t\t\t\tif ( matcher( elem, context || document, xml) ) {\n\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( outermost ) {\n\t\t\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Track unmatched elements for set filters\n\t\t\t\tif ( bySet ) {\n\t\t\t\t\t// They will have gone through all possible matchers\n\t\t\t\t\tif ( (elem = !matcher && elem) ) {\n\t\t\t\t\t\tmatchedCount--;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Lengthen the array for every element, matched or not\n\t\t\t\t\tif ( seed ) {\n\t\t\t\t\t\tunmatched.push( elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// `i` is now the count of elements visited above, and adding it to `matchedCount`\n\t\t\t// makes the latter nonnegative.\n\t\t\tmatchedCount += i;\n\n\t\t\t// Apply set filters to unmatched elements\n\t\t\t// NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount`\n\t\t\t// equals `i`), unless we didn't visit _any_ elements in the above loop because we have\n\t\t\t// no element matchers and no seed.\n\t\t\t// Incrementing an initially-string \"0\" `i` allows `i` to remain a string only in that\n\t\t\t// case, which will result in a \"00\" `matchedCount` that differs from `i` but is also\n\t\t\t// numerically zero.\n\t\t\tif ( bySet && i !== matchedCount ) {\n\t\t\t\tj = 0;\n\t\t\t\twhile ( (matcher = setMatchers[j++]) ) {\n\t\t\t\t\tmatcher( unmatched, setMatched, context, xml );\n\t\t\t\t}\n\n\t\t\t\tif ( seed ) {\n\t\t\t\t\t// Reintegrate element matches to eliminate the need for sorting\n\t\t\t\t\tif ( matchedCount > 0 ) {\n\t\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\t\tif ( !(unmatched[i] || setMatched[i]) ) {\n\t\t\t\t\t\t\t\tsetMatched[i] = pop.call( results );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Discard index placeholder values to get only actual matches\n\t\t\t\t\tsetMatched = condense( setMatched );\n\t\t\t\t}\n\n\t\t\t\t// Add matches to results\n\t\t\t\tpush.apply( results, setMatched );\n\n\t\t\t\t// Seedless set matches succeeding multiple successful matchers stipulate sorting\n\t\t\t\tif ( outermost && !seed && setMatched.length > 0 &&\n\t\t\t\t\t( matchedCount + setMatchers.length ) > 1 ) {\n\n\t\t\t\t\tSizzle.uniqueSort( results );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Override manipulation of globals by nested matchers\n\t\t\tif ( outermost ) {\n\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\toutermostContext = contextBackup;\n\t\t\t}\n\n\t\t\treturn unmatched;\n\t\t};\n\n\treturn bySet ?\n\t\tmarkFunction( superMatcher ) :\n\t\tsuperMatcher;\n}\n\ncompile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) {\n\tvar i,\n\t\tsetMatchers = [],\n\t\telementMatchers = [],\n\t\tcached = compilerCache[ selector + \" \" ];\n\n\tif ( !cached ) {\n\t\t// Generate a function of recursive functions that can be used to check each element\n\t\tif ( !match ) {\n\t\t\tmatch = tokenize( selector );\n\t\t}\n\t\ti = match.length;\n\t\twhile ( i-- ) {\n\t\t\tcached = matcherFromTokens( match[i] );\n\t\t\tif ( cached[ expando ] ) {\n\t\t\t\tsetMatchers.push( cached );\n\t\t\t} else {\n\t\t\t\telementMatchers.push( cached );\n\t\t\t}\n\t\t}\n\n\t\t// Cache the compiled function\n\t\tcached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) );\n\n\t\t// Save selector and tokenization\n\t\tcached.selector = selector;\n\t}\n\treturn cached;\n};\n\n/**\n * A low-level selection function that works with Sizzle's compiled\n *  selector functions\n * @param {String|Function} selector A selector or a pre-compiled\n *  selector function built with Sizzle.compile\n * @param {Element} context\n * @param {Array} [results]\n * @param {Array} [seed] A set of elements to match against\n */\nselect = Sizzle.select = function( selector, context, results, seed ) {\n\tvar i, tokens, token, type, find,\n\t\tcompiled = typeof selector === \"function\" && selector,\n\t\tmatch = !seed && tokenize( (selector = compiled.selector || selector) );\n\n\tresults = results || [];\n\n\t// Try to minimize operations if there is only one selector in the list and no seed\n\t// (the latter of which guarantees us context)\n\tif ( match.length === 1 ) {\n\n\t\t// Reduce context if the leading compound selector is an ID\n\t\ttokens = match[0] = match[0].slice( 0 );\n\t\tif ( tokens.length > 2 && (token = tokens[0]).type === \"ID\" &&\n\t\t\t\tsupport.getById && context.nodeType === 9 && documentIsHTML &&\n\t\t\t\tExpr.relative[ tokens[1].type ] ) {\n\n\t\t\tcontext = ( Expr.find[\"ID\"]( token.matches[0].replace(runescape, funescape), context ) || [] )[0];\n\t\t\tif ( !context ) {\n\t\t\t\treturn results;\n\n\t\t\t// Precompiled matchers will still verify ancestry, so step up a level\n\t\t\t} else if ( compiled ) {\n\t\t\t\tcontext = context.parentNode;\n\t\t\t}\n\n\t\t\tselector = selector.slice( tokens.shift().value.length );\n\t\t}\n\n\t\t// Fetch a seed set for right-to-left matching\n\t\ti = matchExpr[\"needsContext\"].test( selector ) ? 0 : tokens.length;\n\t\twhile ( i-- ) {\n\t\t\ttoken = tokens[i];\n\n\t\t\t// Abort if we hit a combinator\n\t\t\tif ( Expr.relative[ (type = token.type) ] ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif ( (find = Expr.find[ type ]) ) {\n\t\t\t\t// Search, expanding context for leading sibling combinators\n\t\t\t\tif ( (seed = find(\n\t\t\t\t\ttoken.matches[0].replace( runescape, funescape ),\n\t\t\t\t\trsibling.test( tokens[0].type ) && testContext( context.parentNode ) || context\n\t\t\t\t)) ) {\n\n\t\t\t\t\t// If seed is empty or no tokens remain, we can return early\n\t\t\t\t\ttokens.splice( i, 1 );\n\t\t\t\t\tselector = seed.length && toSelector( tokens );\n\t\t\t\t\tif ( !selector ) {\n\t\t\t\t\t\tpush.apply( results, seed );\n\t\t\t\t\t\treturn results;\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Compile and execute a filtering function if one is not provided\n\t// Provide `match` to avoid retokenization if we modified the selector above\n\t( compiled || compile( selector, match ) )(\n\t\tseed,\n\t\tcontext,\n\t\t!documentIsHTML,\n\t\tresults,\n\t\t!context || rsibling.test( selector ) && testContext( context.parentNode ) || context\n\t);\n\treturn results;\n};\n\n// One-time assignments\n\n// Sort stability\nsupport.sortStable = expando.split(\"\").sort( sortOrder ).join(\"\") === expando;\n\n// Support: Chrome 14-35+\n// Always assume duplicates if they aren't passed to the comparison function\nsupport.detectDuplicates = !!hasDuplicate;\n\n// Initialize against the default document\nsetDocument();\n\n// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27)\n// Detached nodes confoundingly follow *each other*\nsupport.sortDetached = assert(function( div1 ) {\n\t// Should return 1, but returns 4 (following)\n\treturn div1.compareDocumentPosition( document.createElement(\"div\") ) & 1;\n});\n\n// Support: IE<8\n// Prevent attribute/property \"interpolation\"\n// http://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx\nif ( !assert(function( div ) {\n\tdiv.innerHTML = \"<a href='#'></a>\";\n\treturn div.firstChild.getAttribute(\"href\") === \"#\" ;\n}) ) {\n\taddHandle( \"type|href|height|width\", function( elem, name, isXML ) {\n\t\tif ( !isXML ) {\n\t\t\treturn elem.getAttribute( name, name.toLowerCase() === \"type\" ? 1 : 2 );\n\t\t}\n\t});\n}\n\n// Support: IE<9\n// Use defaultValue in place of getAttribute(\"value\")\nif ( !support.attributes || !assert(function( div ) {\n\tdiv.innerHTML = \"<input/>\";\n\tdiv.firstChild.setAttribute( \"value\", \"\" );\n\treturn div.firstChild.getAttribute( \"value\" ) === \"\";\n}) ) {\n\taddHandle( \"value\", function( elem, name, isXML ) {\n\t\tif ( !isXML && elem.nodeName.toLowerCase() === \"input\" ) {\n\t\t\treturn elem.defaultValue;\n\t\t}\n\t});\n}\n\n// Support: IE<9\n// Use getAttributeNode to fetch booleans when getAttribute lies\nif ( !assert(function( div ) {\n\treturn div.getAttribute(\"disabled\") == null;\n}) ) {\n\taddHandle( booleans, function( elem, name, isXML ) {\n\t\tvar val;\n\t\tif ( !isXML ) {\n\t\t\treturn elem[ name ] === true ? name.toLowerCase() :\n\t\t\t\t\t(val = elem.getAttributeNode( name )) && val.specified ?\n\t\t\t\t\tval.value :\n\t\t\t\tnull;\n\t\t}\n\t});\n}\n\nreturn Sizzle;\n\n})( window );\n\n\n\njQuery.find = Sizzle;\njQuery.expr = Sizzle.selectors;\njQuery.expr[ \":\" ] = jQuery.expr.pseudos;\njQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort;\njQuery.text = Sizzle.getText;\njQuery.isXMLDoc = Sizzle.isXML;\njQuery.contains = Sizzle.contains;\n\n\n\nvar dir = function( elem, dir, until ) {\n\tvar matched = [],\n\t\ttruncate = until !== undefined;\n\n\twhile ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) {\n\t\tif ( elem.nodeType === 1 ) {\n\t\t\tif ( truncate && jQuery( elem ).is( until ) ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tmatched.push( elem );\n\t\t}\n\t}\n\treturn matched;\n};\n\n\nvar siblings = function( n, elem ) {\n\tvar matched = [];\n\n\tfor ( ; n; n = n.nextSibling ) {\n\t\tif ( n.nodeType === 1 && n !== elem ) {\n\t\t\tmatched.push( n );\n\t\t}\n\t}\n\n\treturn matched;\n};\n\n\nvar rneedsContext = jQuery.expr.match.needsContext;\n\nvar rsingleTag = ( /^<([\\w-]+)\\s*\\/?>(?:<\\/\\1>|)$/ );\n\n\n\nvar risSimple = /^.[^:#\\[\\.,]*$/;\n\n// Implement the identical functionality for filter and not\nfunction winnow( elements, qualifier, not ) {\n\tif ( jQuery.isFunction( qualifier ) ) {\n\t\treturn jQuery.grep( elements, function( elem, i ) {\n\t\t\t/* jshint -W018 */\n\t\t\treturn !!qualifier.call( elem, i, elem ) !== not;\n\t\t} );\n\n\t}\n\n\tif ( qualifier.nodeType ) {\n\t\treturn jQuery.grep( elements, function( elem ) {\n\t\t\treturn ( elem === qualifier ) !== not;\n\t\t} );\n\n\t}\n\n\tif ( typeof qualifier === \"string\" ) {\n\t\tif ( risSimple.test( qualifier ) ) {\n\t\t\treturn jQuery.filter( qualifier, elements, not );\n\t\t}\n\n\t\tqualifier = jQuery.filter( qualifier, elements );\n\t}\n\n\treturn jQuery.grep( elements, function( elem ) {\n\t\treturn ( indexOf.call( qualifier, elem ) > -1 ) !== not;\n\t} );\n}\n\njQuery.filter = function( expr, elems, not ) {\n\tvar elem = elems[ 0 ];\n\n\tif ( not ) {\n\t\texpr = \":not(\" + expr + \")\";\n\t}\n\n\treturn elems.length === 1 && elem.nodeType === 1 ?\n\t\tjQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [] :\n\t\tjQuery.find.matches( expr, jQuery.grep( elems, function( elem ) {\n\t\t\treturn elem.nodeType === 1;\n\t\t} ) );\n};\n\njQuery.fn.extend( {\n\tfind: function( selector ) {\n\t\tvar i,\n\t\t\tlen = this.length,\n\t\t\tret = [],\n\t\t\tself = this;\n\n\t\tif ( typeof selector !== \"string\" ) {\n\t\t\treturn this.pushStack( jQuery( selector ).filter( function() {\n\t\t\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\t\t\tif ( jQuery.contains( self[ i ], this ) ) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} ) );\n\t\t}\n\n\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\tjQuery.find( selector, self[ i ], ret );\n\t\t}\n\n\t\t// Needed because $( selector, context ) becomes $( context ).find( selector )\n\t\tret = this.pushStack( len > 1 ? jQuery.unique( ret ) : ret );\n\t\tret.selector = this.selector ? this.selector + \" \" + selector : selector;\n\t\treturn ret;\n\t},\n\tfilter: function( selector ) {\n\t\treturn this.pushStack( winnow( this, selector || [], false ) );\n\t},\n\tnot: function( selector ) {\n\t\treturn this.pushStack( winnow( this, selector || [], true ) );\n\t},\n\tis: function( selector ) {\n\t\treturn !!winnow(\n\t\t\tthis,\n\n\t\t\t// If this is a positional/relative selector, check membership in the returned set\n\t\t\t// so $(\"p:first\").is(\"p:last\") won't return true for a doc with two \"p\".\n\t\t\ttypeof selector === \"string\" && rneedsContext.test( selector ) ?\n\t\t\t\tjQuery( selector ) :\n\t\t\t\tselector || [],\n\t\t\tfalse\n\t\t).length;\n\t}\n} );\n\n\n// Initialize a jQuery object\n\n\n// A central reference to the root jQuery(document)\nvar rootjQuery,\n\n\t// A simple way to check for HTML strings\n\t// Prioritize #id over <tag> to avoid XSS via location.hash (#9521)\n\t// Strict HTML recognition (#11290: must start with <)\n\trquickExpr = /^(?:\\s*(<[\\w\\W]+>)[^>]*|#([\\w-]*))$/,\n\n\tinit = jQuery.fn.init = function( selector, context, root ) {\n\t\tvar match, elem;\n\n\t\t// HANDLE: $(\"\"), $(null), $(undefined), $(false)\n\t\tif ( !selector ) {\n\t\t\treturn this;\n\t\t}\n\n\t\t// Method init() accepts an alternate rootjQuery\n\t\t// so migrate can support jQuery.sub (gh-2101)\n\t\troot = root || rootjQuery;\n\n\t\t// Handle HTML strings\n\t\tif ( typeof selector === \"string\" ) {\n\t\t\tif ( selector[ 0 ] === \"<\" &&\n\t\t\t\tselector[ selector.length - 1 ] === \">\" &&\n\t\t\t\tselector.length >= 3 ) {\n\n\t\t\t\t// Assume that strings that start and end with <> are HTML and skip the regex check\n\t\t\t\tmatch = [ null, selector, null ];\n\n\t\t\t} else {\n\t\t\t\tmatch = rquickExpr.exec( selector );\n\t\t\t}\n\n\t\t\t// Match html or make sure no context is specified for #id\n\t\t\tif ( match && ( match[ 1 ] || !context ) ) {\n\n\t\t\t\t// HANDLE: $(html) -> $(array)\n\t\t\t\tif ( match[ 1 ] ) {\n\t\t\t\t\tcontext = context instanceof jQuery ? context[ 0 ] : context;\n\n\t\t\t\t\t// Option to run scripts is true for back-compat\n\t\t\t\t\t// Intentionally let the error be thrown if parseHTML is not present\n\t\t\t\t\tjQuery.merge( this, jQuery.parseHTML(\n\t\t\t\t\t\tmatch[ 1 ],\n\t\t\t\t\t\tcontext && context.nodeType ? context.ownerDocument || context : document,\n\t\t\t\t\t\ttrue\n\t\t\t\t\t) );\n\n\t\t\t\t\t// HANDLE: $(html, props)\n\t\t\t\t\tif ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) {\n\t\t\t\t\t\tfor ( match in context ) {\n\n\t\t\t\t\t\t\t// Properties of context are called as methods if possible\n\t\t\t\t\t\t\tif ( jQuery.isFunction( this[ match ] ) ) {\n\t\t\t\t\t\t\t\tthis[ match ]( context[ match ] );\n\n\t\t\t\t\t\t\t// ...and otherwise set as attributes\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthis.attr( match, context[ match ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\treturn this;\n\n\t\t\t\t// HANDLE: $(#id)\n\t\t\t\t} else {\n\t\t\t\t\telem = document.getElementById( match[ 2 ] );\n\n\t\t\t\t\t// Support: Blackberry 4.6\n\t\t\t\t\t// gEBID returns nodes no longer in the document (#6963)\n\t\t\t\t\tif ( elem && elem.parentNode ) {\n\n\t\t\t\t\t\t// Inject the element directly into the jQuery object\n\t\t\t\t\t\tthis.length = 1;\n\t\t\t\t\t\tthis[ 0 ] = elem;\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.context = document;\n\t\t\t\t\tthis.selector = selector;\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\n\t\t\t// HANDLE: $(expr, $(...))\n\t\t\t} else if ( !context || context.jquery ) {\n\t\t\t\treturn ( context || root ).find( selector );\n\n\t\t\t// HANDLE: $(expr, context)\n\t\t\t// (which is just equivalent to: $(context).find(expr)\n\t\t\t} else {\n\t\t\t\treturn this.constructor( context ).find( selector );\n\t\t\t}\n\n\t\t// HANDLE: $(DOMElement)\n\t\t} else if ( selector.nodeType ) {\n\t\t\tthis.context = this[ 0 ] = selector;\n\t\t\tthis.length = 1;\n\t\t\treturn this;\n\n\t\t// HANDLE: $(function)\n\t\t// Shortcut for document ready\n\t\t} else if ( jQuery.isFunction( selector ) ) {\n\t\t\treturn root.ready !== undefined ?\n\t\t\t\troot.ready( selector ) :\n\n\t\t\t\t// Execute immediately if ready is not present\n\t\t\t\tselector( jQuery );\n\t\t}\n\n\t\tif ( selector.selector !== undefined ) {\n\t\t\tthis.selector = selector.selector;\n\t\t\tthis.context = selector.context;\n\t\t}\n\n\t\treturn jQuery.makeArray( selector, this );\n\t};\n\n// Give the init function the jQuery prototype for later instantiation\ninit.prototype = jQuery.fn;\n\n// Initialize central reference\nrootjQuery = jQuery( document );\n\n\nvar rparentsprev = /^(?:parents|prev(?:Until|All))/,\n\n\t// Methods guaranteed to produce a unique set when starting from a unique set\n\tguaranteedUnique = {\n\t\tchildren: true,\n\t\tcontents: true,\n\t\tnext: true,\n\t\tprev: true\n\t};\n\njQuery.fn.extend( {\n\thas: function( target ) {\n\t\tvar targets = jQuery( target, this ),\n\t\t\tl = targets.length;\n\n\t\treturn this.filter( function() {\n\t\t\tvar i = 0;\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tif ( jQuery.contains( this, targets[ i ] ) ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t},\n\n\tclosest: function( selectors, context ) {\n\t\tvar cur,\n\t\t\ti = 0,\n\t\t\tl = this.length,\n\t\t\tmatched = [],\n\t\t\tpos = rneedsContext.test( selectors ) || typeof selectors !== \"string\" ?\n\t\t\t\tjQuery( selectors, context || this.context ) :\n\t\t\t\t0;\n\n\t\tfor ( ; i < l; i++ ) {\n\t\t\tfor ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) {\n\n\t\t\t\t// Always skip document fragments\n\t\t\t\tif ( cur.nodeType < 11 && ( pos ?\n\t\t\t\t\tpos.index( cur ) > -1 :\n\n\t\t\t\t\t// Don't pass non-elements to Sizzle\n\t\t\t\t\tcur.nodeType === 1 &&\n\t\t\t\t\t\tjQuery.find.matchesSelector( cur, selectors ) ) ) {\n\n\t\t\t\t\tmatched.push( cur );\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched );\n\t},\n\n\t// Determine the position of an element within the set\n\tindex: function( elem ) {\n\n\t\t// No argument, return index in parent\n\t\tif ( !elem ) {\n\t\t\treturn ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1;\n\t\t}\n\n\t\t// Index in selector\n\t\tif ( typeof elem === \"string\" ) {\n\t\t\treturn indexOf.call( jQuery( elem ), this[ 0 ] );\n\t\t}\n\n\t\t// Locate the position of the desired element\n\t\treturn indexOf.call( this,\n\n\t\t\t// If it receives a jQuery object, the first element is used\n\t\t\telem.jquery ? elem[ 0 ] : elem\n\t\t);\n\t},\n\n\tadd: function( selector, context ) {\n\t\treturn this.pushStack(\n\t\t\tjQuery.uniqueSort(\n\t\t\t\tjQuery.merge( this.get(), jQuery( selector, context ) )\n\t\t\t)\n\t\t);\n\t},\n\n\taddBack: function( selector ) {\n\t\treturn this.add( selector == null ?\n\t\t\tthis.prevObject : this.prevObject.filter( selector )\n\t\t);\n\t}\n} );\n\nfunction sibling( cur, dir ) {\n\twhile ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {}\n\treturn cur;\n}\n\njQuery.each( {\n\tparent: function( elem ) {\n\t\tvar parent = elem.parentNode;\n\t\treturn parent && parent.nodeType !== 11 ? parent : null;\n\t},\n\tparents: function( elem ) {\n\t\treturn dir( elem, \"parentNode\" );\n\t},\n\tparentsUntil: function( elem, i, until ) {\n\t\treturn dir( elem, \"parentNode\", until );\n\t},\n\tnext: function( elem ) {\n\t\treturn sibling( elem, \"nextSibling\" );\n\t},\n\tprev: function( elem ) {\n\t\treturn sibling( elem, \"previousSibling\" );\n\t},\n\tnextAll: function( elem ) {\n\t\treturn dir( elem, \"nextSibling\" );\n\t},\n\tprevAll: function( elem ) {\n\t\treturn dir( elem, \"previousSibling\" );\n\t},\n\tnextUntil: function( elem, i, until ) {\n\t\treturn dir( elem, \"nextSibling\", until );\n\t},\n\tprevUntil: function( elem, i, until ) {\n\t\treturn dir( elem, \"previousSibling\", until );\n\t},\n\tsiblings: function( elem ) {\n\t\treturn siblings( ( elem.parentNode || {} ).firstChild, elem );\n\t},\n\tchildren: function( elem ) {\n\t\treturn siblings( elem.firstChild );\n\t},\n\tcontents: function( elem ) {\n\t\treturn elem.contentDocument || jQuery.merge( [], elem.childNodes );\n\t}\n}, function( name, fn ) {\n\tjQuery.fn[ name ] = function( until, selector ) {\n\t\tvar matched = jQuery.map( this, fn, until );\n\n\t\tif ( name.slice( -5 ) !== \"Until\" ) {\n\t\t\tselector = until;\n\t\t}\n\n\t\tif ( selector && typeof selector === \"string\" ) {\n\t\t\tmatched = jQuery.filter( selector, matched );\n\t\t}\n\n\t\tif ( this.length > 1 ) {\n\n\t\t\t// Remove duplicates\n\t\t\tif ( !guaranteedUnique[ name ] ) {\n\t\t\t\tjQuery.uniqueSort( matched );\n\t\t\t}\n\n\t\t\t// Reverse order for parents* and prev-derivatives\n\t\t\tif ( rparentsprev.test( name ) ) {\n\t\t\t\tmatched.reverse();\n\t\t\t}\n\t\t}\n\n\t\treturn this.pushStack( matched );\n\t};\n} );\nvar rnotwhite = ( /\\S+/g );\n\n\n\n// Convert String-formatted options into Object-formatted ones\nfunction createOptions( options ) {\n\tvar object = {};\n\tjQuery.each( options.match( rnotwhite ) || [], function( _, flag ) {\n\t\tobject[ flag ] = true;\n\t} );\n\treturn object;\n}\n\n/*\n * Create a callback list using the following parameters:\n *\n *\toptions: an optional list of space-separated options that will change how\n *\t\t\tthe callback list behaves or a more traditional option object\n *\n * By default a callback list will act like an event callback list and can be\n * \"fired\" multiple times.\n *\n * Possible options:\n *\n *\tonce:\t\t\twill ensure the callback list can only be fired once (like a Deferred)\n *\n *\tmemory:\t\t\twill keep track of previous values and will call any callback added\n *\t\t\t\t\tafter the list has been fired right away with the latest \"memorized\"\n *\t\t\t\t\tvalues (like a Deferred)\n *\n *\tunique:\t\t\twill ensure a callback can only be added once (no duplicate in the list)\n *\n *\tstopOnFalse:\tinterrupt callings when a callback returns false\n *\n */\njQuery.Callbacks = function( options ) {\n\n\t// Convert options from String-formatted to Object-formatted if needed\n\t// (we check in cache first)\n\toptions = typeof options === \"string\" ?\n\t\tcreateOptions( options ) :\n\t\tjQuery.extend( {}, options );\n\n\tvar // Flag to know if list is currently firing\n\t\tfiring,\n\n\t\t// Last fire value for non-forgettable lists\n\t\tmemory,\n\n\t\t// Flag to know if list was already fired\n\t\tfired,\n\n\t\t// Flag to prevent firing\n\t\tlocked,\n\n\t\t// Actual callback list\n\t\tlist = [],\n\n\t\t// Queue of execution data for repeatable lists\n\t\tqueue = [],\n\n\t\t// Index of currently firing callback (modified by add/remove as needed)\n\t\tfiringIndex = -1,\n\n\t\t// Fire callbacks\n\t\tfire = function() {\n\n\t\t\t// Enforce single-firing\n\t\t\tlocked = options.once;\n\n\t\t\t// Execute callbacks for all pending executions,\n\t\t\t// respecting firingIndex overrides and runtime changes\n\t\t\tfired = firing = true;\n\t\t\tfor ( ; queue.length; firingIndex = -1 ) {\n\t\t\t\tmemory = queue.shift();\n\t\t\t\twhile ( ++firingIndex < list.length ) {\n\n\t\t\t\t\t// Run callback and check for early termination\n\t\t\t\t\tif ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false &&\n\t\t\t\t\t\toptions.stopOnFalse ) {\n\n\t\t\t\t\t\t// Jump to end and forget the data so .add doesn't re-fire\n\t\t\t\t\t\tfiringIndex = list.length;\n\t\t\t\t\t\tmemory = false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Forget the data if we're done with it\n\t\t\tif ( !options.memory ) {\n\t\t\t\tmemory = false;\n\t\t\t}\n\n\t\t\tfiring = false;\n\n\t\t\t// Clean up if we're done firing for good\n\t\t\tif ( locked ) {\n\n\t\t\t\t// Keep an empty list if we have data for future add calls\n\t\t\t\tif ( memory ) {\n\t\t\t\t\tlist = [];\n\n\t\t\t\t// Otherwise, this object is spent\n\t\t\t\t} else {\n\t\t\t\t\tlist = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t// Actual Callbacks object\n\t\tself = {\n\n\t\t\t// Add a callback or a collection of callbacks to the list\n\t\t\tadd: function() {\n\t\t\t\tif ( list ) {\n\n\t\t\t\t\t// If we have memory from a past run, we should fire after adding\n\t\t\t\t\tif ( memory && !firing ) {\n\t\t\t\t\t\tfiringIndex = list.length - 1;\n\t\t\t\t\t\tqueue.push( memory );\n\t\t\t\t\t}\n\n\t\t\t\t\t( function add( args ) {\n\t\t\t\t\t\tjQuery.each( args, function( _, arg ) {\n\t\t\t\t\t\t\tif ( jQuery.isFunction( arg ) ) {\n\t\t\t\t\t\t\t\tif ( !options.unique || !self.has( arg ) ) {\n\t\t\t\t\t\t\t\t\tlist.push( arg );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else if ( arg && arg.length && jQuery.type( arg ) !== \"string\" ) {\n\n\t\t\t\t\t\t\t\t// Inspect recursively\n\t\t\t\t\t\t\t\tadd( arg );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} );\n\t\t\t\t\t} )( arguments );\n\n\t\t\t\t\tif ( memory && !firing ) {\n\t\t\t\t\t\tfire();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Remove a callback from the list\n\t\t\tremove: function() {\n\t\t\t\tjQuery.each( arguments, function( _, arg ) {\n\t\t\t\t\tvar index;\n\t\t\t\t\twhile ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) {\n\t\t\t\t\t\tlist.splice( index, 1 );\n\n\t\t\t\t\t\t// Handle firing indexes\n\t\t\t\t\t\tif ( index <= firingIndex ) {\n\t\t\t\t\t\t\tfiringIndex--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Check if a given callback is in the list.\n\t\t\t// If no argument is given, return whether or not list has callbacks attached.\n\t\t\thas: function( fn ) {\n\t\t\t\treturn fn ?\n\t\t\t\t\tjQuery.inArray( fn, list ) > -1 :\n\t\t\t\t\tlist.length > 0;\n\t\t\t},\n\n\t\t\t// Remove all callbacks from the list\n\t\t\tempty: function() {\n\t\t\t\tif ( list ) {\n\t\t\t\t\tlist = [];\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Disable .fire and .add\n\t\t\t// Abort any current/pending executions\n\t\t\t// Clear all callbacks and values\n\t\t\tdisable: function() {\n\t\t\t\tlocked = queue = [];\n\t\t\t\tlist = memory = \"\";\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\tdisabled: function() {\n\t\t\t\treturn !list;\n\t\t\t},\n\n\t\t\t// Disable .fire\n\t\t\t// Also disable .add unless we have memory (since it would have no effect)\n\t\t\t// Abort any pending executions\n\t\t\tlock: function() {\n\t\t\t\tlocked = queue = [];\n\t\t\t\tif ( !memory ) {\n\t\t\t\t\tlist = memory = \"\";\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\tlocked: function() {\n\t\t\t\treturn !!locked;\n\t\t\t},\n\n\t\t\t// Call all callbacks with the given context and arguments\n\t\t\tfireWith: function( context, args ) {\n\t\t\t\tif ( !locked ) {\n\t\t\t\t\targs = args || [];\n\t\t\t\t\targs = [ context, args.slice ? args.slice() : args ];\n\t\t\t\t\tqueue.push( args );\n\t\t\t\t\tif ( !firing ) {\n\t\t\t\t\t\tfire();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Call all the callbacks with the given arguments\n\t\t\tfire: function() {\n\t\t\t\tself.fireWith( this, arguments );\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// To know if the callbacks have already been called at least once\n\t\t\tfired: function() {\n\t\t\t\treturn !!fired;\n\t\t\t}\n\t\t};\n\n\treturn self;\n};\n\n\njQuery.extend( {\n\n\tDeferred: function( func ) {\n\t\tvar tuples = [\n\n\t\t\t\t// action, add listener, listener list, final state\n\t\t\t\t[ \"resolve\", \"done\", jQuery.Callbacks( \"once memory\" ), \"resolved\" ],\n\t\t\t\t[ \"reject\", \"fail\", jQuery.Callbacks( \"once memory\" ), \"rejected\" ],\n\t\t\t\t[ \"notify\", \"progress\", jQuery.Callbacks( \"memory\" ) ]\n\t\t\t],\n\t\t\tstate = \"pending\",\n\t\t\tpromise = {\n\t\t\t\tstate: function() {\n\t\t\t\t\treturn state;\n\t\t\t\t},\n\t\t\t\talways: function() {\n\t\t\t\t\tdeferred.done( arguments ).fail( arguments );\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\t\t\t\tthen: function( /* fnDone, fnFail, fnProgress */ ) {\n\t\t\t\t\tvar fns = arguments;\n\t\t\t\t\treturn jQuery.Deferred( function( newDefer ) {\n\t\t\t\t\t\tjQuery.each( tuples, function( i, tuple ) {\n\t\t\t\t\t\t\tvar fn = jQuery.isFunction( fns[ i ] ) && fns[ i ];\n\n\t\t\t\t\t\t\t// deferred[ done | fail | progress ] for forwarding actions to newDefer\n\t\t\t\t\t\t\tdeferred[ tuple[ 1 ] ]( function() {\n\t\t\t\t\t\t\t\tvar returned = fn && fn.apply( this, arguments );\n\t\t\t\t\t\t\t\tif ( returned && jQuery.isFunction( returned.promise ) ) {\n\t\t\t\t\t\t\t\t\treturned.promise()\n\t\t\t\t\t\t\t\t\t\t.progress( newDefer.notify )\n\t\t\t\t\t\t\t\t\t\t.done( newDefer.resolve )\n\t\t\t\t\t\t\t\t\t\t.fail( newDefer.reject );\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tnewDefer[ tuple[ 0 ] + \"With\" ](\n\t\t\t\t\t\t\t\t\t\tthis === promise ? newDefer.promise() : this,\n\t\t\t\t\t\t\t\t\t\tfn ? [ returned ] : arguments\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t} );\n\t\t\t\t\t\tfns = null;\n\t\t\t\t\t} ).promise();\n\t\t\t\t},\n\n\t\t\t\t// Get a promise for this deferred\n\t\t\t\t// If obj is provided, the promise aspect is added to the object\n\t\t\t\tpromise: function( obj ) {\n\t\t\t\t\treturn obj != null ? jQuery.extend( obj, promise ) : promise;\n\t\t\t\t}\n\t\t\t},\n\t\t\tdeferred = {};\n\n\t\t// Keep pipe for back-compat\n\t\tpromise.pipe = promise.then;\n\n\t\t// Add list-specific methods\n\t\tjQuery.each( tuples, function( i, tuple ) {\n\t\t\tvar list = tuple[ 2 ],\n\t\t\t\tstateString = tuple[ 3 ];\n\n\t\t\t// promise[ done | fail | progress ] = list.add\n\t\t\tpromise[ tuple[ 1 ] ] = list.add;\n\n\t\t\t// Handle state\n\t\t\tif ( stateString ) {\n\t\t\t\tlist.add( function() {\n\n\t\t\t\t\t// state = [ resolved | rejected ]\n\t\t\t\t\tstate = stateString;\n\n\t\t\t\t// [ reject_list | resolve_list ].disable; progress_list.lock\n\t\t\t\t}, tuples[ i ^ 1 ][ 2 ].disable, tuples[ 2 ][ 2 ].lock );\n\t\t\t}\n\n\t\t\t// deferred[ resolve | reject | notify ]\n\t\t\tdeferred[ tuple[ 0 ] ] = function() {\n\t\t\t\tdeferred[ tuple[ 0 ] + \"With\" ]( this === deferred ? promise : this, arguments );\n\t\t\t\treturn this;\n\t\t\t};\n\t\t\tdeferred[ tuple[ 0 ] + \"With\" ] = list.fireWith;\n\t\t} );\n\n\t\t// Make the deferred a promise\n\t\tpromise.promise( deferred );\n\n\t\t// Call given func if any\n\t\tif ( func ) {\n\t\t\tfunc.call( deferred, deferred );\n\t\t}\n\n\t\t// All done!\n\t\treturn deferred;\n\t},\n\n\t// Deferred helper\n\twhen: function( subordinate /* , ..., subordinateN */ ) {\n\t\tvar i = 0,\n\t\t\tresolveValues = slice.call( arguments ),\n\t\t\tlength = resolveValues.length,\n\n\t\t\t// the count of uncompleted subordinates\n\t\t\tremaining = length !== 1 ||\n\t\t\t\t( subordinate && jQuery.isFunction( subordinate.promise ) ) ? length : 0,\n\n\t\t\t// the master Deferred.\n\t\t\t// If resolveValues consist of only a single Deferred, just use that.\n\t\t\tdeferred = remaining === 1 ? subordinate : jQuery.Deferred(),\n\n\t\t\t// Update function for both resolve and progress values\n\t\t\tupdateFunc = function( i, contexts, values ) {\n\t\t\t\treturn function( value ) {\n\t\t\t\t\tcontexts[ i ] = this;\n\t\t\t\t\tvalues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value;\n\t\t\t\t\tif ( values === progressValues ) {\n\t\t\t\t\t\tdeferred.notifyWith( contexts, values );\n\t\t\t\t\t} else if ( !( --remaining ) ) {\n\t\t\t\t\t\tdeferred.resolveWith( contexts, values );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t},\n\n\t\t\tprogressValues, progressContexts, resolveContexts;\n\n\t\t// Add listeners to Deferred subordinates; treat others as resolved\n\t\tif ( length > 1 ) {\n\t\t\tprogressValues = new Array( length );\n\t\t\tprogressContexts = new Array( length );\n\t\t\tresolveContexts = new Array( length );\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tif ( resolveValues[ i ] && jQuery.isFunction( resolveValues[ i ].promise ) ) {\n\t\t\t\t\tresolveValues[ i ].promise()\n\t\t\t\t\t\t.progress( updateFunc( i, progressContexts, progressValues ) )\n\t\t\t\t\t\t.done( updateFunc( i, resolveContexts, resolveValues ) )\n\t\t\t\t\t\t.fail( deferred.reject );\n\t\t\t\t} else {\n\t\t\t\t\t--remaining;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// If we're not waiting on anything, resolve the master\n\t\tif ( !remaining ) {\n\t\t\tdeferred.resolveWith( resolveContexts, resolveValues );\n\t\t}\n\n\t\treturn deferred.promise();\n\t}\n} );\n\n\n// The deferred used on DOM ready\nvar readyList;\n\njQuery.fn.ready = function( fn ) {\n\n\t// Add the callback\n\tjQuery.ready.promise().done( fn );\n\n\treturn this;\n};\n\njQuery.extend( {\n\n\t// Is the DOM ready to be used? Set to true once it occurs.\n\tisReady: false,\n\n\t// A counter to track how many items to wait for before\n\t// the ready event fires. See #6781\n\treadyWait: 1,\n\n\t// Hold (or release) the ready event\n\tholdReady: function( hold ) {\n\t\tif ( hold ) {\n\t\t\tjQuery.readyWait++;\n\t\t} else {\n\t\t\tjQuery.ready( true );\n\t\t}\n\t},\n\n\t// Handle when the DOM is ready\n\tready: function( wait ) {\n\n\t\t// Abort if there are pending holds or we're already ready\n\t\tif ( wait === true ? --jQuery.readyWait : jQuery.isReady ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Remember that the DOM is ready\n\t\tjQuery.isReady = true;\n\n\t\t// If a normal DOM Ready event fired, decrement, and wait if need be\n\t\tif ( wait !== true && --jQuery.readyWait > 0 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// If there are functions bound, to execute\n\t\treadyList.resolveWith( document, [ jQuery ] );\n\n\t\t// Trigger any bound ready events\n\t\tif ( jQuery.fn.triggerHandler ) {\n\t\t\tjQuery( document ).triggerHandler( \"ready\" );\n\t\t\tjQuery( document ).off( \"ready\" );\n\t\t}\n\t}\n} );\n\n/**\n * The ready event handler and self cleanup method\n */\nfunction completed() {\n\tdocument.removeEventListener( \"DOMContentLoaded\", completed );\n\twindow.removeEventListener( \"load\", completed );\n\tjQuery.ready();\n}\n\njQuery.ready.promise = function( obj ) {\n\tif ( !readyList ) {\n\n\t\treadyList = jQuery.Deferred();\n\n\t\t// Catch cases where $(document).ready() is called\n\t\t// after the browser event has already occurred.\n\t\t// Support: IE9-10 only\n\t\t// Older IE sometimes signals \"interactive\" too soon\n\t\tif ( document.readyState === \"complete\" ||\n\t\t\t( document.readyState !== \"loading\" && !document.documentElement.doScroll ) ) {\n\n\t\t\t// Handle it asynchronously to allow scripts the opportunity to delay ready\n\t\t\twindow.setTimeout( jQuery.ready );\n\n\t\t} else {\n\n\t\t\t// Use the handy event callback\n\t\t\tdocument.addEventListener( \"DOMContentLoaded\", completed );\n\n\t\t\t// A fallback to window.onload, that will always work\n\t\t\twindow.addEventListener( \"load\", completed );\n\t\t}\n\t}\n\treturn readyList.promise( obj );\n};\n\n// Kick off the DOM ready check even if the user does not\njQuery.ready.promise();\n\n\n\n\n// Multifunctional method to get and set values of a collection\n// The value/s can optionally be executed if it's a function\nvar access = function( elems, fn, key, value, chainable, emptyGet, raw ) {\n\tvar i = 0,\n\t\tlen = elems.length,\n\t\tbulk = key == null;\n\n\t// Sets many values\n\tif ( jQuery.type( key ) === \"object\" ) {\n\t\tchainable = true;\n\t\tfor ( i in key ) {\n\t\t\taccess( elems, fn, i, key[ i ], true, emptyGet, raw );\n\t\t}\n\n\t// Sets one value\n\t} else if ( value !== undefined ) {\n\t\tchainable = true;\n\n\t\tif ( !jQuery.isFunction( value ) ) {\n\t\t\traw = true;\n\t\t}\n\n\t\tif ( bulk ) {\n\n\t\t\t// Bulk operations run against the entire set\n\t\t\tif ( raw ) {\n\t\t\t\tfn.call( elems, value );\n\t\t\t\tfn = null;\n\n\t\t\t// ...except when executing function values\n\t\t\t} else {\n\t\t\t\tbulk = fn;\n\t\t\t\tfn = function( elem, key, value ) {\n\t\t\t\t\treturn bulk.call( jQuery( elem ), value );\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\n\t\tif ( fn ) {\n\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\tfn(\n\t\t\t\t\telems[ i ], key, raw ?\n\t\t\t\t\tvalue :\n\t\t\t\t\tvalue.call( elems[ i ], i, fn( elems[ i ], key ) )\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n\n\treturn chainable ?\n\t\telems :\n\n\t\t// Gets\n\t\tbulk ?\n\t\t\tfn.call( elems ) :\n\t\t\tlen ? fn( elems[ 0 ], key ) : emptyGet;\n};\nvar acceptData = function( owner ) {\n\n\t// Accepts only:\n\t//  - Node\n\t//    - Node.ELEMENT_NODE\n\t//    - Node.DOCUMENT_NODE\n\t//  - Object\n\t//    - Any\n\t/* jshint -W018 */\n\treturn owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType );\n};\n\n\n\n\nfunction Data() {\n\tthis.expando = jQuery.expando + Data.uid++;\n}\n\nData.uid = 1;\n\nData.prototype = {\n\n\tregister: function( owner, initial ) {\n\t\tvar value = initial || {};\n\n\t\t// If it is a node unlikely to be stringify-ed or looped over\n\t\t// use plain assignment\n\t\tif ( owner.nodeType ) {\n\t\t\towner[ this.expando ] = value;\n\n\t\t// Otherwise secure it in a non-enumerable, non-writable property\n\t\t// configurability must be true to allow the property to be\n\t\t// deleted with the delete operator\n\t\t} else {\n\t\t\tObject.defineProperty( owner, this.expando, {\n\t\t\t\tvalue: value,\n\t\t\t\twritable: true,\n\t\t\t\tconfigurable: true\n\t\t\t} );\n\t\t}\n\t\treturn owner[ this.expando ];\n\t},\n\tcache: function( owner ) {\n\n\t\t// We can accept data for non-element nodes in modern browsers,\n\t\t// but we should not, see #8335.\n\t\t// Always return an empty object.\n\t\tif ( !acceptData( owner ) ) {\n\t\t\treturn {};\n\t\t}\n\n\t\t// Check if the owner object already has a cache\n\t\tvar value = owner[ this.expando ];\n\n\t\t// If not, create one\n\t\tif ( !value ) {\n\t\t\tvalue = {};\n\n\t\t\t// We can accept data for non-element nodes in modern browsers,\n\t\t\t// but we should not, see #8335.\n\t\t\t// Always return an empty object.\n\t\t\tif ( acceptData( owner ) ) {\n\n\t\t\t\t// If it is a node unlikely to be stringify-ed or looped over\n\t\t\t\t// use plain assignment\n\t\t\t\tif ( owner.nodeType ) {\n\t\t\t\t\towner[ this.expando ] = value;\n\n\t\t\t\t// Otherwise secure it in a non-enumerable property\n\t\t\t\t// configurable must be true to allow the property to be\n\t\t\t\t// deleted when data is removed\n\t\t\t\t} else {\n\t\t\t\t\tObject.defineProperty( owner, this.expando, {\n\t\t\t\t\t\tvalue: value,\n\t\t\t\t\t\tconfigurable: true\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn value;\n\t},\n\tset: function( owner, data, value ) {\n\t\tvar prop,\n\t\t\tcache = this.cache( owner );\n\n\t\t// Handle: [ owner, key, value ] args\n\t\tif ( typeof data === \"string\" ) {\n\t\t\tcache[ data ] = value;\n\n\t\t// Handle: [ owner, { properties } ] args\n\t\t} else {\n\n\t\t\t// Copy the properties one-by-one to the cache object\n\t\t\tfor ( prop in data ) {\n\t\t\t\tcache[ prop ] = data[ prop ];\n\t\t\t}\n\t\t}\n\t\treturn cache;\n\t},\n\tget: function( owner, key ) {\n\t\treturn key === undefined ?\n\t\t\tthis.cache( owner ) :\n\t\t\towner[ this.expando ] && owner[ this.expando ][ key ];\n\t},\n\taccess: function( owner, key, value ) {\n\t\tvar stored;\n\n\t\t// In cases where either:\n\t\t//\n\t\t//   1. No key was specified\n\t\t//   2. A string key was specified, but no value provided\n\t\t//\n\t\t// Take the \"read\" path and allow the get method to determine\n\t\t// which value to return, respectively either:\n\t\t//\n\t\t//   1. The entire cache object\n\t\t//   2. The data stored at the key\n\t\t//\n\t\tif ( key === undefined ||\n\t\t\t\t( ( key && typeof key === \"string\" ) && value === undefined ) ) {\n\n\t\t\tstored = this.get( owner, key );\n\n\t\t\treturn stored !== undefined ?\n\t\t\t\tstored : this.get( owner, jQuery.camelCase( key ) );\n\t\t}\n\n\t\t// When the key is not a string, or both a key and value\n\t\t// are specified, set or extend (existing objects) with either:\n\t\t//\n\t\t//   1. An object of properties\n\t\t//   2. A key and value\n\t\t//\n\t\tthis.set( owner, key, value );\n\n\t\t// Since the \"set\" path can have two possible entry points\n\t\t// return the expected data based on which path was taken[*]\n\t\treturn value !== undefined ? value : key;\n\t},\n\tremove: function( owner, key ) {\n\t\tvar i, name, camel,\n\t\t\tcache = owner[ this.expando ];\n\n\t\tif ( cache === undefined ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( key === undefined ) {\n\t\t\tthis.register( owner );\n\n\t\t} else {\n\n\t\t\t// Support array or space separated string of keys\n\t\t\tif ( jQuery.isArray( key ) ) {\n\n\t\t\t\t// If \"name\" is an array of keys...\n\t\t\t\t// When data is initially created, via (\"key\", \"val\") signature,\n\t\t\t\t// keys will be converted to camelCase.\n\t\t\t\t// Since there is no way to tell _how_ a key was added, remove\n\t\t\t\t// both plain key and camelCase key. #12786\n\t\t\t\t// This will only penalize the array argument path.\n\t\t\t\tname = key.concat( key.map( jQuery.camelCase ) );\n\t\t\t} else {\n\t\t\t\tcamel = jQuery.camelCase( key );\n\n\t\t\t\t// Try the string as a key before any manipulation\n\t\t\t\tif ( key in cache ) {\n\t\t\t\t\tname = [ key, camel ];\n\t\t\t\t} else {\n\n\t\t\t\t\t// If a key with the spaces exists, use it.\n\t\t\t\t\t// Otherwise, create an array by matching non-whitespace\n\t\t\t\t\tname = camel;\n\t\t\t\t\tname = name in cache ?\n\t\t\t\t\t\t[ name ] : ( name.match( rnotwhite ) || [] );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\ti = name.length;\n\n\t\t\twhile ( i-- ) {\n\t\t\t\tdelete cache[ name[ i ] ];\n\t\t\t}\n\t\t}\n\n\t\t// Remove the expando if there's no more data\n\t\tif ( key === undefined || jQuery.isEmptyObject( cache ) ) {\n\n\t\t\t// Support: Chrome <= 35-45+\n\t\t\t// Webkit & Blink performance suffers when deleting properties\n\t\t\t// from DOM nodes, so set to undefined instead\n\t\t\t// https://code.google.com/p/chromium/issues/detail?id=378607\n\t\t\tif ( owner.nodeType ) {\n\t\t\t\towner[ this.expando ] = undefined;\n\t\t\t} else {\n\t\t\t\tdelete owner[ this.expando ];\n\t\t\t}\n\t\t}\n\t},\n\thasData: function( owner ) {\n\t\tvar cache = owner[ this.expando ];\n\t\treturn cache !== undefined && !jQuery.isEmptyObject( cache );\n\t}\n};\nvar dataPriv = new Data();\n\nvar dataUser = new Data();\n\n\n\n//\tImplementation Summary\n//\n//\t1. Enforce API surface and semantic compatibility with 1.9.x branch\n//\t2. Improve the module's maintainability by reducing the storage\n//\t\tpaths to a single mechanism.\n//\t3. Use the same single mechanism to support \"private\" and \"user\" data.\n//\t4. _Never_ expose \"private\" data to user code (TODO: Drop _data, _removeData)\n//\t5. Avoid exposing implementation details on user objects (eg. expando properties)\n//\t6. Provide a clear path for implementation upgrade to WeakMap in 2014\n\nvar rbrace = /^(?:\\{[\\w\\W]*\\}|\\[[\\w\\W]*\\])$/,\n\trmultiDash = /[A-Z]/g;\n\nfunction dataAttr( elem, key, data ) {\n\tvar name;\n\n\t// If nothing was found internally, try to fetch any\n\t// data from the HTML5 data-* attribute\n\tif ( data === undefined && elem.nodeType === 1 ) {\n\t\tname = \"data-\" + key.replace( rmultiDash, \"-$&\" ).toLowerCase();\n\t\tdata = elem.getAttribute( name );\n\n\t\tif ( typeof data === \"string\" ) {\n\t\t\ttry {\n\t\t\t\tdata = data === \"true\" ? true :\n\t\t\t\t\tdata === \"false\" ? false :\n\t\t\t\t\tdata === \"null\" ? null :\n\n\t\t\t\t\t// Only convert to a number if it doesn't change the string\n\t\t\t\t\t+data + \"\" === data ? +data :\n\t\t\t\t\trbrace.test( data ) ? jQuery.parseJSON( data ) :\n\t\t\t\t\tdata;\n\t\t\t} catch ( e ) {}\n\n\t\t\t// Make sure we set the data so it isn't changed later\n\t\t\tdataUser.set( elem, key, data );\n\t\t} else {\n\t\t\tdata = undefined;\n\t\t}\n\t}\n\treturn data;\n}\n\njQuery.extend( {\n\thasData: function( elem ) {\n\t\treturn dataUser.hasData( elem ) || dataPriv.hasData( elem );\n\t},\n\n\tdata: function( elem, name, data ) {\n\t\treturn dataUser.access( elem, name, data );\n\t},\n\n\tremoveData: function( elem, name ) {\n\t\tdataUser.remove( elem, name );\n\t},\n\n\t// TODO: Now that all calls to _data and _removeData have been replaced\n\t// with direct calls to dataPriv methods, these can be deprecated.\n\t_data: function( elem, name, data ) {\n\t\treturn dataPriv.access( elem, name, data );\n\t},\n\n\t_removeData: function( elem, name ) {\n\t\tdataPriv.remove( elem, name );\n\t}\n} );\n\njQuery.fn.extend( {\n\tdata: function( key, value ) {\n\t\tvar i, name, data,\n\t\t\telem = this[ 0 ],\n\t\t\tattrs = elem && elem.attributes;\n\n\t\t// Gets all values\n\t\tif ( key === undefined ) {\n\t\t\tif ( this.length ) {\n\t\t\t\tdata = dataUser.get( elem );\n\n\t\t\t\tif ( elem.nodeType === 1 && !dataPriv.get( elem, \"hasDataAttrs\" ) ) {\n\t\t\t\t\ti = attrs.length;\n\t\t\t\t\twhile ( i-- ) {\n\n\t\t\t\t\t\t// Support: IE11+\n\t\t\t\t\t\t// The attrs elements can be null (#14894)\n\t\t\t\t\t\tif ( attrs[ i ] ) {\n\t\t\t\t\t\t\tname = attrs[ i ].name;\n\t\t\t\t\t\t\tif ( name.indexOf( \"data-\" ) === 0 ) {\n\t\t\t\t\t\t\t\tname = jQuery.camelCase( name.slice( 5 ) );\n\t\t\t\t\t\t\t\tdataAttr( elem, name, data[ name ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tdataPriv.set( elem, \"hasDataAttrs\", true );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn data;\n\t\t}\n\n\t\t// Sets multiple values\n\t\tif ( typeof key === \"object\" ) {\n\t\t\treturn this.each( function() {\n\t\t\t\tdataUser.set( this, key );\n\t\t\t} );\n\t\t}\n\n\t\treturn access( this, function( value ) {\n\t\t\tvar data, camelKey;\n\n\t\t\t// The calling jQuery object (element matches) is not empty\n\t\t\t// (and therefore has an element appears at this[ 0 ]) and the\n\t\t\t// `value` parameter was not undefined. An empty jQuery object\n\t\t\t// will result in `undefined` for elem = this[ 0 ] which will\n\t\t\t// throw an exception if an attempt to read a data cache is made.\n\t\t\tif ( elem && value === undefined ) {\n\n\t\t\t\t// Attempt to get data from the cache\n\t\t\t\t// with the key as-is\n\t\t\t\tdata = dataUser.get( elem, key ) ||\n\n\t\t\t\t\t// Try to find dashed key if it exists (gh-2779)\n\t\t\t\t\t// This is for 2.2.x only\n\t\t\t\t\tdataUser.get( elem, key.replace( rmultiDash, \"-$&\" ).toLowerCase() );\n\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\tcamelKey = jQuery.camelCase( key );\n\n\t\t\t\t// Attempt to get data from the cache\n\t\t\t\t// with the key camelized\n\t\t\t\tdata = dataUser.get( elem, camelKey );\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\t// Attempt to \"discover\" the data in\n\t\t\t\t// HTML5 custom data-* attrs\n\t\t\t\tdata = dataAttr( elem, camelKey, undefined );\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\t// We tried really hard, but the data doesn't exist.\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Set the data...\n\t\t\tcamelKey = jQuery.camelCase( key );\n\t\t\tthis.each( function() {\n\n\t\t\t\t// First, attempt to store a copy or reference of any\n\t\t\t\t// data that might've been store with a camelCased key.\n\t\t\t\tvar data = dataUser.get( this, camelKey );\n\n\t\t\t\t// For HTML5 data-* attribute interop, we have to\n\t\t\t\t// store property names with dashes in a camelCase form.\n\t\t\t\t// This might not apply to all properties...*\n\t\t\t\tdataUser.set( this, camelKey, value );\n\n\t\t\t\t// *... In the case of properties that might _actually_\n\t\t\t\t// have dashes, we need to also store a copy of that\n\t\t\t\t// unchanged property.\n\t\t\t\tif ( key.indexOf( \"-\" ) > -1 && data !== undefined ) {\n\t\t\t\t\tdataUser.set( this, key, value );\n\t\t\t\t}\n\t\t\t} );\n\t\t}, null, value, arguments.length > 1, null, true );\n\t},\n\n\tremoveData: function( key ) {\n\t\treturn this.each( function() {\n\t\t\tdataUser.remove( this, key );\n\t\t} );\n\t}\n} );\n\n\njQuery.extend( {\n\tqueue: function( elem, type, data ) {\n\t\tvar queue;\n\n\t\tif ( elem ) {\n\t\t\ttype = ( type || \"fx\" ) + \"queue\";\n\t\t\tqueue = dataPriv.get( elem, type );\n\n\t\t\t// Speed up dequeue by getting out quickly if this is just a lookup\n\t\t\tif ( data ) {\n\t\t\t\tif ( !queue || jQuery.isArray( data ) ) {\n\t\t\t\t\tqueue = dataPriv.access( elem, type, jQuery.makeArray( data ) );\n\t\t\t\t} else {\n\t\t\t\t\tqueue.push( data );\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn queue || [];\n\t\t}\n\t},\n\n\tdequeue: function( elem, type ) {\n\t\ttype = type || \"fx\";\n\n\t\tvar queue = jQuery.queue( elem, type ),\n\t\t\tstartLength = queue.length,\n\t\t\tfn = queue.shift(),\n\t\t\thooks = jQuery._queueHooks( elem, type ),\n\t\t\tnext = function() {\n\t\t\t\tjQuery.dequeue( elem, type );\n\t\t\t};\n\n\t\t// If the fx queue is dequeued, always remove the progress sentinel\n\t\tif ( fn === \"inprogress\" ) {\n\t\t\tfn = queue.shift();\n\t\t\tstartLength--;\n\t\t}\n\n\t\tif ( fn ) {\n\n\t\t\t// Add a progress sentinel to prevent the fx queue from being\n\t\t\t// automatically dequeued\n\t\t\tif ( type === \"fx\" ) {\n\t\t\t\tqueue.unshift( \"inprogress\" );\n\t\t\t}\n\n\t\t\t// Clear up the last queue stop function\n\t\t\tdelete hooks.stop;\n\t\t\tfn.call( elem, next, hooks );\n\t\t}\n\n\t\tif ( !startLength && hooks ) {\n\t\t\thooks.empty.fire();\n\t\t}\n\t},\n\n\t// Not public - generate a queueHooks object, or return the current one\n\t_queueHooks: function( elem, type ) {\n\t\tvar key = type + \"queueHooks\";\n\t\treturn dataPriv.get( elem, key ) || dataPriv.access( elem, key, {\n\t\t\tempty: jQuery.Callbacks( \"once memory\" ).add( function() {\n\t\t\t\tdataPriv.remove( elem, [ type + \"queue\", key ] );\n\t\t\t} )\n\t\t} );\n\t}\n} );\n\njQuery.fn.extend( {\n\tqueue: function( type, data ) {\n\t\tvar setter = 2;\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tdata = type;\n\t\t\ttype = \"fx\";\n\t\t\tsetter--;\n\t\t}\n\n\t\tif ( arguments.length < setter ) {\n\t\t\treturn jQuery.queue( this[ 0 ], type );\n\t\t}\n\n\t\treturn data === undefined ?\n\t\t\tthis :\n\t\t\tthis.each( function() {\n\t\t\t\tvar queue = jQuery.queue( this, type, data );\n\n\t\t\t\t// Ensure a hooks for this queue\n\t\t\t\tjQuery._queueHooks( this, type );\n\n\t\t\t\tif ( type === \"fx\" && queue[ 0 ] !== \"inprogress\" ) {\n\t\t\t\t\tjQuery.dequeue( this, type );\n\t\t\t\t}\n\t\t\t} );\n\t},\n\tdequeue: function( type ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.dequeue( this, type );\n\t\t} );\n\t},\n\tclearQueue: function( type ) {\n\t\treturn this.queue( type || \"fx\", [] );\n\t},\n\n\t// Get a promise resolved when queues of a certain type\n\t// are emptied (fx is the type by default)\n\tpromise: function( type, obj ) {\n\t\tvar tmp,\n\t\t\tcount = 1,\n\t\t\tdefer = jQuery.Deferred(),\n\t\t\telements = this,\n\t\t\ti = this.length,\n\t\t\tresolve = function() {\n\t\t\t\tif ( !( --count ) ) {\n\t\t\t\t\tdefer.resolveWith( elements, [ elements ] );\n\t\t\t\t}\n\t\t\t};\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tobj = type;\n\t\t\ttype = undefined;\n\t\t}\n\t\ttype = type || \"fx\";\n\n\t\twhile ( i-- ) {\n\t\t\ttmp = dataPriv.get( elements[ i ], type + \"queueHooks\" );\n\t\t\tif ( tmp && tmp.empty ) {\n\t\t\t\tcount++;\n\t\t\t\ttmp.empty.add( resolve );\n\t\t\t}\n\t\t}\n\t\tresolve();\n\t\treturn defer.promise( obj );\n\t}\n} );\nvar pnum = ( /[+-]?(?:\\d*\\.|)\\d+(?:[eE][+-]?\\d+|)/ ).source;\n\nvar rcssNum = new RegExp( \"^(?:([+-])=|)(\" + pnum + \")([a-z%]*)$\", \"i\" );\n\n\nvar cssExpand = [ \"Top\", \"Right\", \"Bottom\", \"Left\" ];\n\nvar isHidden = function( elem, el ) {\n\n\t\t// isHidden might be called from jQuery#filter function;\n\t\t// in that case, element will be second argument\n\t\telem = el || elem;\n\t\treturn jQuery.css( elem, \"display\" ) === \"none\" ||\n\t\t\t!jQuery.contains( elem.ownerDocument, elem );\n\t};\n\n\n\nfunction adjustCSS( elem, prop, valueParts, tween ) {\n\tvar adjusted,\n\t\tscale = 1,\n\t\tmaxIterations = 20,\n\t\tcurrentValue = tween ?\n\t\t\tfunction() { return tween.cur(); } :\n\t\t\tfunction() { return jQuery.css( elem, prop, \"\" ); },\n\t\tinitial = currentValue(),\n\t\tunit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? \"\" : \"px\" ),\n\n\t\t// Starting value computation is required for potential unit mismatches\n\t\tinitialInUnit = ( jQuery.cssNumber[ prop ] || unit !== \"px\" && +initial ) &&\n\t\t\trcssNum.exec( jQuery.css( elem, prop ) );\n\n\tif ( initialInUnit && initialInUnit[ 3 ] !== unit ) {\n\n\t\t// Trust units reported by jQuery.css\n\t\tunit = unit || initialInUnit[ 3 ];\n\n\t\t// Make sure we update the tween properties later on\n\t\tvalueParts = valueParts || [];\n\n\t\t// Iteratively approximate from a nonzero starting point\n\t\tinitialInUnit = +initial || 1;\n\n\t\tdo {\n\n\t\t\t// If previous iteration zeroed out, double until we get *something*.\n\t\t\t// Use string for doubling so we don't accidentally see scale as unchanged below\n\t\t\tscale = scale || \".5\";\n\n\t\t\t// Adjust and apply\n\t\t\tinitialInUnit = initialInUnit / scale;\n\t\t\tjQuery.style( elem, prop, initialInUnit + unit );\n\n\t\t// Update scale, tolerating zero or NaN from tween.cur()\n\t\t// Break the loop if scale is unchanged or perfect, or if we've just had enough.\n\t\t} while (\n\t\t\tscale !== ( scale = currentValue() / initial ) && scale !== 1 && --maxIterations\n\t\t);\n\t}\n\n\tif ( valueParts ) {\n\t\tinitialInUnit = +initialInUnit || +initial || 0;\n\n\t\t// Apply relative offset (+=/-=) if specified\n\t\tadjusted = valueParts[ 1 ] ?\n\t\t\tinitialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] :\n\t\t\t+valueParts[ 2 ];\n\t\tif ( tween ) {\n\t\t\ttween.unit = unit;\n\t\t\ttween.start = initialInUnit;\n\t\t\ttween.end = adjusted;\n\t\t}\n\t}\n\treturn adjusted;\n}\nvar rcheckableType = ( /^(?:checkbox|radio)$/i );\n\nvar rtagName = ( /<([\\w:-]+)/ );\n\nvar rscriptType = ( /^$|\\/(?:java|ecma)script/i );\n\n\n\n// We have to close these tags to support XHTML (#13200)\nvar wrapMap = {\n\n\t// Support: IE9\n\toption: [ 1, \"<select multiple='multiple'>\", \"</select>\" ],\n\n\t// XHTML parsers do not magically insert elements in the\n\t// same way that tag soup parsers do. So we cannot shorten\n\t// this by omitting <tbody> or other required elements.\n\tthead: [ 1, \"<table>\", \"</table>\" ],\n\tcol: [ 2, \"<table><colgroup>\", \"</colgroup></table>\" ],\n\ttr: [ 2, \"<table><tbody>\", \"</tbody></table>\" ],\n\ttd: [ 3, \"<table><tbody><tr>\", \"</tr></tbody></table>\" ],\n\n\t_default: [ 0, \"\", \"\" ]\n};\n\n// Support: IE9\nwrapMap.optgroup = wrapMap.option;\n\nwrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;\nwrapMap.th = wrapMap.td;\n\n\nfunction getAll( context, tag ) {\n\n\t// Support: IE9-11+\n\t// Use typeof to avoid zero-argument method invocation on host objects (#15151)\n\tvar ret = typeof context.getElementsByTagName !== \"undefined\" ?\n\t\t\tcontext.getElementsByTagName( tag || \"*\" ) :\n\t\t\ttypeof context.querySelectorAll !== \"undefined\" ?\n\t\t\t\tcontext.querySelectorAll( tag || \"*\" ) :\n\t\t\t[];\n\n\treturn tag === undefined || tag && jQuery.nodeName( context, tag ) ?\n\t\tjQuery.merge( [ context ], ret ) :\n\t\tret;\n}\n\n\n// Mark scripts as having already been evaluated\nfunction setGlobalEval( elems, refElements ) {\n\tvar i = 0,\n\t\tl = elems.length;\n\n\tfor ( ; i < l; i++ ) {\n\t\tdataPriv.set(\n\t\t\telems[ i ],\n\t\t\t\"globalEval\",\n\t\t\t!refElements || dataPriv.get( refElements[ i ], \"globalEval\" )\n\t\t);\n\t}\n}\n\n\nvar rhtml = /<|&#?\\w+;/;\n\nfunction buildFragment( elems, context, scripts, selection, ignored ) {\n\tvar elem, tmp, tag, wrap, contains, j,\n\t\tfragment = context.createDocumentFragment(),\n\t\tnodes = [],\n\t\ti = 0,\n\t\tl = elems.length;\n\n\tfor ( ; i < l; i++ ) {\n\t\telem = elems[ i ];\n\n\t\tif ( elem || elem === 0 ) {\n\n\t\t\t// Add nodes directly\n\t\t\tif ( jQuery.type( elem ) === \"object\" ) {\n\n\t\t\t\t// Support: Android<4.1, PhantomJS<2\n\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\tjQuery.merge( nodes, elem.nodeType ? [ elem ] : elem );\n\n\t\t\t// Convert non-html into a text node\n\t\t\t} else if ( !rhtml.test( elem ) ) {\n\t\t\t\tnodes.push( context.createTextNode( elem ) );\n\n\t\t\t// Convert html into DOM nodes\n\t\t\t} else {\n\t\t\t\ttmp = tmp || fragment.appendChild( context.createElement( \"div\" ) );\n\n\t\t\t\t// Deserialize a standard representation\n\t\t\t\ttag = ( rtagName.exec( elem ) || [ \"\", \"\" ] )[ 1 ].toLowerCase();\n\t\t\t\twrap = wrapMap[ tag ] || wrapMap._default;\n\t\t\t\ttmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ];\n\n\t\t\t\t// Descend through wrappers to the right content\n\t\t\t\tj = wrap[ 0 ];\n\t\t\t\twhile ( j-- ) {\n\t\t\t\t\ttmp = tmp.lastChild;\n\t\t\t\t}\n\n\t\t\t\t// Support: Android<4.1, PhantomJS<2\n\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\tjQuery.merge( nodes, tmp.childNodes );\n\n\t\t\t\t// Remember the top-level container\n\t\t\t\ttmp = fragment.firstChild;\n\n\t\t\t\t// Ensure the created nodes are orphaned (#12392)\n\t\t\t\ttmp.textContent = \"\";\n\t\t\t}\n\t\t}\n\t}\n\n\t// Remove wrapper from fragment\n\tfragment.textContent = \"\";\n\n\ti = 0;\n\twhile ( ( elem = nodes[ i++ ] ) ) {\n\n\t\t// Skip elements already in the context collection (trac-4087)\n\t\tif ( selection && jQuery.inArray( elem, selection ) > -1 ) {\n\t\t\tif ( ignored ) {\n\t\t\t\tignored.push( elem );\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\n\t\tcontains = jQuery.contains( elem.ownerDocument, elem );\n\n\t\t// Append to fragment\n\t\ttmp = getAll( fragment.appendChild( elem ), \"script\" );\n\n\t\t// Preserve script evaluation history\n\t\tif ( contains ) {\n\t\t\tsetGlobalEval( tmp );\n\t\t}\n\n\t\t// Capture executables\n\t\tif ( scripts ) {\n\t\t\tj = 0;\n\t\t\twhile ( ( elem = tmp[ j++ ] ) ) {\n\t\t\t\tif ( rscriptType.test( elem.type || \"\" ) ) {\n\t\t\t\t\tscripts.push( elem );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn fragment;\n}\n\n\n( function() {\n\tvar fragment = document.createDocumentFragment(),\n\t\tdiv = fragment.appendChild( document.createElement( \"div\" ) ),\n\t\tinput = document.createElement( \"input\" );\n\n\t// Support: Android 4.0-4.3, Safari<=5.1\n\t// Check state lost if the name is set (#11217)\n\t// Support: Windows Web Apps (WWA)\n\t// `name` and `type` must use .setAttribute for WWA (#14901)\n\tinput.setAttribute( \"type\", \"radio\" );\n\tinput.setAttribute( \"checked\", \"checked\" );\n\tinput.setAttribute( \"name\", \"t\" );\n\n\tdiv.appendChild( input );\n\n\t// Support: Safari<=5.1, Android<4.2\n\t// Older WebKit doesn't clone checked state correctly in fragments\n\tsupport.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked;\n\n\t// Support: IE<=11+\n\t// Make sure textarea (and checkbox) defaultValue is properly cloned\n\tdiv.innerHTML = \"<textarea>x</textarea>\";\n\tsupport.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue;\n} )();\n\n\nvar\n\trkeyEvent = /^key/,\n\trmouseEvent = /^(?:mouse|pointer|contextmenu|drag|drop)|click/,\n\trtypenamespace = /^([^.]*)(?:\\.(.+)|)/;\n\nfunction returnTrue() {\n\treturn true;\n}\n\nfunction returnFalse() {\n\treturn false;\n}\n\n// Support: IE9\n// See #13393 for more info\nfunction safeActiveElement() {\n\ttry {\n\t\treturn document.activeElement;\n\t} catch ( err ) { }\n}\n\nfunction on( elem, types, selector, data, fn, one ) {\n\tvar origFn, type;\n\n\t// Types can be a map of types/handlers\n\tif ( typeof types === \"object\" ) {\n\n\t\t// ( types-Object, selector, data )\n\t\tif ( typeof selector !== \"string\" ) {\n\n\t\t\t// ( types-Object, data )\n\t\t\tdata = data || selector;\n\t\t\tselector = undefined;\n\t\t}\n\t\tfor ( type in types ) {\n\t\t\ton( elem, type, selector, data, types[ type ], one );\n\t\t}\n\t\treturn elem;\n\t}\n\n\tif ( data == null && fn == null ) {\n\n\t\t// ( types, fn )\n\t\tfn = selector;\n\t\tdata = selector = undefined;\n\t} else if ( fn == null ) {\n\t\tif ( typeof selector === \"string\" ) {\n\n\t\t\t// ( types, selector, fn )\n\t\t\tfn = data;\n\t\t\tdata = undefined;\n\t\t} else {\n\n\t\t\t// ( types, data, fn )\n\t\t\tfn = data;\n\t\t\tdata = selector;\n\t\t\tselector = undefined;\n\t\t}\n\t}\n\tif ( fn === false ) {\n\t\tfn = returnFalse;\n\t} else if ( !fn ) {\n\t\treturn elem;\n\t}\n\n\tif ( one === 1 ) {\n\t\torigFn = fn;\n\t\tfn = function( event ) {\n\n\t\t\t// Can use an empty set, since event contains the info\n\t\t\tjQuery().off( event );\n\t\t\treturn origFn.apply( this, arguments );\n\t\t};\n\n\t\t// Use same guid so caller can remove using origFn\n\t\tfn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );\n\t}\n\treturn elem.each( function() {\n\t\tjQuery.event.add( this, types, fn, data, selector );\n\t} );\n}\n\n/*\n * Helper functions for managing events -- not part of the public interface.\n * Props to Dean Edwards' addEvent library for many of the ideas.\n */\njQuery.event = {\n\n\tglobal: {},\n\n\tadd: function( elem, types, handler, data, selector ) {\n\n\t\tvar handleObjIn, eventHandle, tmp,\n\t\t\tevents, t, handleObj,\n\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\telemData = dataPriv.get( elem );\n\n\t\t// Don't attach events to noData or text/comment nodes (but allow plain objects)\n\t\tif ( !elemData ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Caller can pass in an object of custom data in lieu of the handler\n\t\tif ( handler.handler ) {\n\t\t\thandleObjIn = handler;\n\t\t\thandler = handleObjIn.handler;\n\t\t\tselector = handleObjIn.selector;\n\t\t}\n\n\t\t// Make sure that the handler has a unique ID, used to find/remove it later\n\t\tif ( !handler.guid ) {\n\t\t\thandler.guid = jQuery.guid++;\n\t\t}\n\n\t\t// Init the element's event structure and main handler, if this is the first\n\t\tif ( !( events = elemData.events ) ) {\n\t\t\tevents = elemData.events = {};\n\t\t}\n\t\tif ( !( eventHandle = elemData.handle ) ) {\n\t\t\teventHandle = elemData.handle = function( e ) {\n\n\t\t\t\t// Discard the second event of a jQuery.event.trigger() and\n\t\t\t\t// when an event is called after a page has unloaded\n\t\t\t\treturn typeof jQuery !== \"undefined\" && jQuery.event.triggered !== e.type ?\n\t\t\t\t\tjQuery.event.dispatch.apply( elem, arguments ) : undefined;\n\t\t\t};\n\t\t}\n\n\t\t// Handle multiple events separated by a space\n\t\ttypes = ( types || \"\" ).match( rnotwhite ) || [ \"\" ];\n\t\tt = types.length;\n\t\twhile ( t-- ) {\n\t\t\ttmp = rtypenamespace.exec( types[ t ] ) || [];\n\t\t\ttype = origType = tmp[ 1 ];\n\t\t\tnamespaces = ( tmp[ 2 ] || \"\" ).split( \".\" ).sort();\n\n\t\t\t// There *must* be a type, no attaching namespace-only handlers\n\t\t\tif ( !type ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// If event changes its type, use the special event handlers for the changed type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// If selector defined, determine special event api type, otherwise given type\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n\n\t\t\t// Update special based on newly reset type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// handleObj is passed to all event handlers\n\t\t\thandleObj = jQuery.extend( {\n\t\t\t\ttype: type,\n\t\t\t\torigType: origType,\n\t\t\t\tdata: data,\n\t\t\t\thandler: handler,\n\t\t\t\tguid: handler.guid,\n\t\t\t\tselector: selector,\n\t\t\t\tneedsContext: selector && jQuery.expr.match.needsContext.test( selector ),\n\t\t\t\tnamespace: namespaces.join( \".\" )\n\t\t\t}, handleObjIn );\n\n\t\t\t// Init the event handler queue if we're the first\n\t\t\tif ( !( handlers = events[ type ] ) ) {\n\t\t\t\thandlers = events[ type ] = [];\n\t\t\t\thandlers.delegateCount = 0;\n\n\t\t\t\t// Only use addEventListener if the special events handler returns false\n\t\t\t\tif ( !special.setup ||\n\t\t\t\t\tspecial.setup.call( elem, data, namespaces, eventHandle ) === false ) {\n\n\t\t\t\t\tif ( elem.addEventListener ) {\n\t\t\t\t\t\telem.addEventListener( type, eventHandle );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( special.add ) {\n\t\t\t\tspecial.add.call( elem, handleObj );\n\n\t\t\t\tif ( !handleObj.handler.guid ) {\n\t\t\t\t\thandleObj.handler.guid = handler.guid;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Add to the element's handler list, delegates in front\n\t\t\tif ( selector ) {\n\t\t\t\thandlers.splice( handlers.delegateCount++, 0, handleObj );\n\t\t\t} else {\n\t\t\t\thandlers.push( handleObj );\n\t\t\t}\n\n\t\t\t// Keep track of which events have ever been used, for event optimization\n\t\t\tjQuery.event.global[ type ] = true;\n\t\t}\n\n\t},\n\n\t// Detach an event or set of events from an element\n\tremove: function( elem, types, handler, selector, mappedTypes ) {\n\n\t\tvar j, origCount, tmp,\n\t\t\tevents, t, handleObj,\n\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\telemData = dataPriv.hasData( elem ) && dataPriv.get( elem );\n\n\t\tif ( !elemData || !( events = elemData.events ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Once for each type.namespace in types; type may be omitted\n\t\ttypes = ( types || \"\" ).match( rnotwhite ) || [ \"\" ];\n\t\tt = types.length;\n\t\twhile ( t-- ) {\n\t\t\ttmp = rtypenamespace.exec( types[ t ] ) || [];\n\t\t\ttype = origType = tmp[ 1 ];\n\t\t\tnamespaces = ( tmp[ 2 ] || \"\" ).split( \".\" ).sort();\n\n\t\t\t// Unbind all events (on this namespace, if provided) for the element\n\t\t\tif ( !type ) {\n\t\t\t\tfor ( type in events ) {\n\t\t\t\t\tjQuery.event.remove( elem, type + types[ t ], handler, selector, true );\n\t\t\t\t}\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n\t\t\thandlers = events[ type ] || [];\n\t\t\ttmp = tmp[ 2 ] &&\n\t\t\t\tnew RegExp( \"(^|\\\\.)\" + namespaces.join( \"\\\\.(?:.*\\\\.|)\" ) + \"(\\\\.|$)\" );\n\n\t\t\t// Remove matching events\n\t\t\torigCount = j = handlers.length;\n\t\t\twhile ( j-- ) {\n\t\t\t\thandleObj = handlers[ j ];\n\n\t\t\t\tif ( ( mappedTypes || origType === handleObj.origType ) &&\n\t\t\t\t\t( !handler || handler.guid === handleObj.guid ) &&\n\t\t\t\t\t( !tmp || tmp.test( handleObj.namespace ) ) &&\n\t\t\t\t\t( !selector || selector === handleObj.selector ||\n\t\t\t\t\t\tselector === \"**\" && handleObj.selector ) ) {\n\t\t\t\t\thandlers.splice( j, 1 );\n\n\t\t\t\t\tif ( handleObj.selector ) {\n\t\t\t\t\t\thandlers.delegateCount--;\n\t\t\t\t\t}\n\t\t\t\t\tif ( special.remove ) {\n\t\t\t\t\t\tspecial.remove.call( elem, handleObj );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Remove generic event handler if we removed something and no more handlers exist\n\t\t\t// (avoids potential for endless recursion during removal of special event handlers)\n\t\t\tif ( origCount && !handlers.length ) {\n\t\t\t\tif ( !special.teardown ||\n\t\t\t\t\tspecial.teardown.call( elem, namespaces, elemData.handle ) === false ) {\n\n\t\t\t\t\tjQuery.removeEvent( elem, type, elemData.handle );\n\t\t\t\t}\n\n\t\t\t\tdelete events[ type ];\n\t\t\t}\n\t\t}\n\n\t\t// Remove data and the expando if it's no longer used\n\t\tif ( jQuery.isEmptyObject( events ) ) {\n\t\t\tdataPriv.remove( elem, \"handle events\" );\n\t\t}\n\t},\n\n\tdispatch: function( event ) {\n\n\t\t// Make a writable jQuery.Event from the native event object\n\t\tevent = jQuery.event.fix( event );\n\n\t\tvar i, j, ret, matched, handleObj,\n\t\t\thandlerQueue = [],\n\t\t\targs = slice.call( arguments ),\n\t\t\thandlers = ( dataPriv.get( this, \"events\" ) || {} )[ event.type ] || [],\n\t\t\tspecial = jQuery.event.special[ event.type ] || {};\n\n\t\t// Use the fix-ed jQuery.Event rather than the (read-only) native event\n\t\targs[ 0 ] = event;\n\t\tevent.delegateTarget = this;\n\n\t\t// Call the preDispatch hook for the mapped type, and let it bail if desired\n\t\tif ( special.preDispatch && special.preDispatch.call( this, event ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Determine handlers\n\t\thandlerQueue = jQuery.event.handlers.call( this, event, handlers );\n\n\t\t// Run delegates first; they may want to stop propagation beneath us\n\t\ti = 0;\n\t\twhile ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) {\n\t\t\tevent.currentTarget = matched.elem;\n\n\t\t\tj = 0;\n\t\t\twhile ( ( handleObj = matched.handlers[ j++ ] ) &&\n\t\t\t\t!event.isImmediatePropagationStopped() ) {\n\n\t\t\t\t// Triggered event must either 1) have no namespace, or 2) have namespace(s)\n\t\t\t\t// a subset or equal to those in the bound event (both can have no namespace).\n\t\t\t\tif ( !event.rnamespace || event.rnamespace.test( handleObj.namespace ) ) {\n\n\t\t\t\t\tevent.handleObj = handleObj;\n\t\t\t\t\tevent.data = handleObj.data;\n\n\t\t\t\t\tret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle ||\n\t\t\t\t\t\thandleObj.handler ).apply( matched.elem, args );\n\n\t\t\t\t\tif ( ret !== undefined ) {\n\t\t\t\t\t\tif ( ( event.result = ret ) === false ) {\n\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Call the postDispatch hook for the mapped type\n\t\tif ( special.postDispatch ) {\n\t\t\tspecial.postDispatch.call( this, event );\n\t\t}\n\n\t\treturn event.result;\n\t},\n\n\thandlers: function( event, handlers ) {\n\t\tvar i, matches, sel, handleObj,\n\t\t\thandlerQueue = [],\n\t\t\tdelegateCount = handlers.delegateCount,\n\t\t\tcur = event.target;\n\n\t\t// Support (at least): Chrome, IE9\n\t\t// Find delegate handlers\n\t\t// Black-hole SVG <use> instance trees (#13180)\n\t\t//\n\t\t// Support: Firefox<=42+\n\t\t// Avoid non-left-click in FF but don't block IE radio events (#3861, gh-2343)\n\t\tif ( delegateCount && cur.nodeType &&\n\t\t\t( event.type !== \"click\" || isNaN( event.button ) || event.button < 1 ) ) {\n\n\t\t\tfor ( ; cur !== this; cur = cur.parentNode || this ) {\n\n\t\t\t\t// Don't check non-elements (#13208)\n\t\t\t\t// Don't process clicks on disabled elements (#6911, #8165, #11382, #11764)\n\t\t\t\tif ( cur.nodeType === 1 && ( cur.disabled !== true || event.type !== \"click\" ) ) {\n\t\t\t\t\tmatches = [];\n\t\t\t\t\tfor ( i = 0; i < delegateCount; i++ ) {\n\t\t\t\t\t\thandleObj = handlers[ i ];\n\n\t\t\t\t\t\t// Don't conflict with Object.prototype properties (#13203)\n\t\t\t\t\t\tsel = handleObj.selector + \" \";\n\n\t\t\t\t\t\tif ( matches[ sel ] === undefined ) {\n\t\t\t\t\t\t\tmatches[ sel ] = handleObj.needsContext ?\n\t\t\t\t\t\t\t\tjQuery( sel, this ).index( cur ) > -1 :\n\t\t\t\t\t\t\t\tjQuery.find( sel, this, null, [ cur ] ).length;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif ( matches[ sel ] ) {\n\t\t\t\t\t\t\tmatches.push( handleObj );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( matches.length ) {\n\t\t\t\t\t\thandlerQueue.push( { elem: cur, handlers: matches } );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Add the remaining (directly-bound) handlers\n\t\tif ( delegateCount < handlers.length ) {\n\t\t\thandlerQueue.push( { elem: this, handlers: handlers.slice( delegateCount ) } );\n\t\t}\n\n\t\treturn handlerQueue;\n\t},\n\n\t// Includes some event props shared by KeyEvent and MouseEvent\n\tprops: ( \"altKey bubbles cancelable ctrlKey currentTarget detail eventPhase \" +\n\t\t\"metaKey relatedTarget shiftKey target timeStamp view which\" ).split( \" \" ),\n\n\tfixHooks: {},\n\n\tkeyHooks: {\n\t\tprops: \"char charCode key keyCode\".split( \" \" ),\n\t\tfilter: function( event, original ) {\n\n\t\t\t// Add which for key events\n\t\t\tif ( event.which == null ) {\n\t\t\t\tevent.which = original.charCode != null ? original.charCode : original.keyCode;\n\t\t\t}\n\n\t\t\treturn event;\n\t\t}\n\t},\n\n\tmouseHooks: {\n\t\tprops: ( \"button buttons clientX clientY offsetX offsetY pageX pageY \" +\n\t\t\t\"screenX screenY toElement\" ).split( \" \" ),\n\t\tfilter: function( event, original ) {\n\t\t\tvar eventDoc, doc, body,\n\t\t\t\tbutton = original.button;\n\n\t\t\t// Calculate pageX/Y if missing and clientX/Y available\n\t\t\tif ( event.pageX == null && original.clientX != null ) {\n\t\t\t\teventDoc = event.target.ownerDocument || document;\n\t\t\t\tdoc = eventDoc.documentElement;\n\t\t\t\tbody = eventDoc.body;\n\n\t\t\t\tevent.pageX = original.clientX +\n\t\t\t\t\t( doc && doc.scrollLeft || body && body.scrollLeft || 0 ) -\n\t\t\t\t\t( doc && doc.clientLeft || body && body.clientLeft || 0 );\n\t\t\t\tevent.pageY = original.clientY +\n\t\t\t\t\t( doc && doc.scrollTop  || body && body.scrollTop  || 0 ) -\n\t\t\t\t\t( doc && doc.clientTop  || body && body.clientTop  || 0 );\n\t\t\t}\n\n\t\t\t// Add which for click: 1 === left; 2 === middle; 3 === right\n\t\t\t// Note: button is not normalized, so don't use it\n\t\t\tif ( !event.which && button !== undefined ) {\n\t\t\t\tevent.which = ( button & 1 ? 1 : ( button & 2 ? 3 : ( button & 4 ? 2 : 0 ) ) );\n\t\t\t}\n\n\t\t\treturn event;\n\t\t}\n\t},\n\n\tfix: function( event ) {\n\t\tif ( event[ jQuery.expando ] ) {\n\t\t\treturn event;\n\t\t}\n\n\t\t// Create a writable copy of the event object and normalize some properties\n\t\tvar i, prop, copy,\n\t\t\ttype = event.type,\n\t\t\toriginalEvent = event,\n\t\t\tfixHook = this.fixHooks[ type ];\n\n\t\tif ( !fixHook ) {\n\t\t\tthis.fixHooks[ type ] = fixHook =\n\t\t\t\trmouseEvent.test( type ) ? this.mouseHooks :\n\t\t\t\trkeyEvent.test( type ) ? this.keyHooks :\n\t\t\t\t{};\n\t\t}\n\t\tcopy = fixHook.props ? this.props.concat( fixHook.props ) : this.props;\n\n\t\tevent = new jQuery.Event( originalEvent );\n\n\t\ti = copy.length;\n\t\twhile ( i-- ) {\n\t\t\tprop = copy[ i ];\n\t\t\tevent[ prop ] = originalEvent[ prop ];\n\t\t}\n\n\t\t// Support: Cordova 2.5 (WebKit) (#13255)\n\t\t// All events should have a target; Cordova deviceready doesn't\n\t\tif ( !event.target ) {\n\t\t\tevent.target = document;\n\t\t}\n\n\t\t// Support: Safari 6.0+, Chrome<28\n\t\t// Target should not be a text node (#504, #13143)\n\t\tif ( event.target.nodeType === 3 ) {\n\t\t\tevent.target = event.target.parentNode;\n\t\t}\n\n\t\treturn fixHook.filter ? fixHook.filter( event, originalEvent ) : event;\n\t},\n\n\tspecial: {\n\t\tload: {\n\n\t\t\t// Prevent triggered image.load events from bubbling to window.load\n\t\t\tnoBubble: true\n\t\t},\n\t\tfocus: {\n\n\t\t\t// Fire native event if possible so blur/focus sequence is correct\n\t\t\ttrigger: function() {\n\t\t\t\tif ( this !== safeActiveElement() && this.focus ) {\n\t\t\t\t\tthis.focus();\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t},\n\t\t\tdelegateType: \"focusin\"\n\t\t},\n\t\tblur: {\n\t\t\ttrigger: function() {\n\t\t\t\tif ( this === safeActiveElement() && this.blur ) {\n\t\t\t\t\tthis.blur();\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t},\n\t\t\tdelegateType: \"focusout\"\n\t\t},\n\t\tclick: {\n\n\t\t\t// For checkbox, fire native event so checked state will be right\n\t\t\ttrigger: function() {\n\t\t\t\tif ( this.type === \"checkbox\" && this.click && jQuery.nodeName( this, \"input\" ) ) {\n\t\t\t\t\tthis.click();\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t// For cross-browser consistency, don't fire native .click() on links\n\t\t\t_default: function( event ) {\n\t\t\t\treturn jQuery.nodeName( event.target, \"a\" );\n\t\t\t}\n\t\t},\n\n\t\tbeforeunload: {\n\t\t\tpostDispatch: function( event ) {\n\n\t\t\t\t// Support: Firefox 20+\n\t\t\t\t// Firefox doesn't alert if the returnValue field is not set.\n\t\t\t\tif ( event.result !== undefined && event.originalEvent ) {\n\t\t\t\t\tevent.originalEvent.returnValue = event.result;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n};\n\njQuery.removeEvent = function( elem, type, handle ) {\n\n\t// This \"if\" is needed for plain objects\n\tif ( elem.removeEventListener ) {\n\t\telem.removeEventListener( type, handle );\n\t}\n};\n\njQuery.Event = function( src, props ) {\n\n\t// Allow instantiation without the 'new' keyword\n\tif ( !( this instanceof jQuery.Event ) ) {\n\t\treturn new jQuery.Event( src, props );\n\t}\n\n\t// Event object\n\tif ( src && src.type ) {\n\t\tthis.originalEvent = src;\n\t\tthis.type = src.type;\n\n\t\t// Events bubbling up the document may have been marked as prevented\n\t\t// by a handler lower down the tree; reflect the correct value.\n\t\tthis.isDefaultPrevented = src.defaultPrevented ||\n\t\t\t\tsrc.defaultPrevented === undefined &&\n\n\t\t\t\t// Support: Android<4.0\n\t\t\t\tsrc.returnValue === false ?\n\t\t\treturnTrue :\n\t\t\treturnFalse;\n\n\t// Event type\n\t} else {\n\t\tthis.type = src;\n\t}\n\n\t// Put explicitly provided properties onto the event object\n\tif ( props ) {\n\t\tjQuery.extend( this, props );\n\t}\n\n\t// Create a timestamp if incoming event doesn't have one\n\tthis.timeStamp = src && src.timeStamp || jQuery.now();\n\n\t// Mark it as fixed\n\tthis[ jQuery.expando ] = true;\n};\n\n// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding\n// http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html\njQuery.Event.prototype = {\n\tconstructor: jQuery.Event,\n\tisDefaultPrevented: returnFalse,\n\tisPropagationStopped: returnFalse,\n\tisImmediatePropagationStopped: returnFalse,\n\n\tpreventDefault: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isDefaultPrevented = returnTrue;\n\n\t\tif ( e ) {\n\t\t\te.preventDefault();\n\t\t}\n\t},\n\tstopPropagation: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isPropagationStopped = returnTrue;\n\n\t\tif ( e ) {\n\t\t\te.stopPropagation();\n\t\t}\n\t},\n\tstopImmediatePropagation: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isImmediatePropagationStopped = returnTrue;\n\n\t\tif ( e ) {\n\t\t\te.stopImmediatePropagation();\n\t\t}\n\n\t\tthis.stopPropagation();\n\t}\n};\n\n// Create mouseenter/leave events using mouseover/out and event-time checks\n// so that event delegation works in jQuery.\n// Do the same for pointerenter/pointerleave and pointerover/pointerout\n//\n// Support: Safari 7 only\n// Safari sends mouseenter too often; see:\n// https://code.google.com/p/chromium/issues/detail?id=470258\n// for the description of the bug (it existed in older Chrome versions as well).\njQuery.each( {\n\tmouseenter: \"mouseover\",\n\tmouseleave: \"mouseout\",\n\tpointerenter: \"pointerover\",\n\tpointerleave: \"pointerout\"\n}, function( orig, fix ) {\n\tjQuery.event.special[ orig ] = {\n\t\tdelegateType: fix,\n\t\tbindType: fix,\n\n\t\thandle: function( event ) {\n\t\t\tvar ret,\n\t\t\t\ttarget = this,\n\t\t\t\trelated = event.relatedTarget,\n\t\t\t\thandleObj = event.handleObj;\n\n\t\t\t// For mouseenter/leave call the handler if related is outside the target.\n\t\t\t// NB: No relatedTarget if the mouse left/entered the browser window\n\t\t\tif ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) {\n\t\t\t\tevent.type = handleObj.origType;\n\t\t\t\tret = handleObj.handler.apply( this, arguments );\n\t\t\t\tevent.type = fix;\n\t\t\t}\n\t\t\treturn ret;\n\t\t}\n\t};\n} );\n\njQuery.fn.extend( {\n\ton: function( types, selector, data, fn ) {\n\t\treturn on( this, types, selector, data, fn );\n\t},\n\tone: function( types, selector, data, fn ) {\n\t\treturn on( this, types, selector, data, fn, 1 );\n\t},\n\toff: function( types, selector, fn ) {\n\t\tvar handleObj, type;\n\t\tif ( types && types.preventDefault && types.handleObj ) {\n\n\t\t\t// ( event )  dispatched jQuery.Event\n\t\t\thandleObj = types.handleObj;\n\t\t\tjQuery( types.delegateTarget ).off(\n\t\t\t\thandleObj.namespace ?\n\t\t\t\t\thandleObj.origType + \".\" + handleObj.namespace :\n\t\t\t\t\thandleObj.origType,\n\t\t\t\thandleObj.selector,\n\t\t\t\thandleObj.handler\n\t\t\t);\n\t\t\treturn this;\n\t\t}\n\t\tif ( typeof types === \"object\" ) {\n\n\t\t\t// ( types-object [, selector] )\n\t\t\tfor ( type in types ) {\n\t\t\t\tthis.off( type, selector, types[ type ] );\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\tif ( selector === false || typeof selector === \"function\" ) {\n\n\t\t\t// ( types [, fn] )\n\t\t\tfn = selector;\n\t\t\tselector = undefined;\n\t\t}\n\t\tif ( fn === false ) {\n\t\t\tfn = returnFalse;\n\t\t}\n\t\treturn this.each( function() {\n\t\t\tjQuery.event.remove( this, types, fn, selector );\n\t\t} );\n\t}\n} );\n\n\nvar\n\trxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\\w:-]+)[^>]*)\\/>/gi,\n\n\t// Support: IE 10-11, Edge 10240+\n\t// In IE/Edge using regex groups here causes severe slowdowns.\n\t// See https://connect.microsoft.com/IE/feedback/details/1736512/\n\trnoInnerhtml = /<script|<style|<link/i,\n\n\t// checked=\"checked\" or checked\n\trchecked = /checked\\s*(?:[^=]|=\\s*.checked.)/i,\n\trscriptTypeMasked = /^true\\/(.*)/,\n\trcleanScript = /^\\s*<!(?:\\[CDATA\\[|--)|(?:\\]\\]|--)>\\s*$/g;\n\n// Manipulating tables requires a tbody\nfunction manipulationTarget( elem, content ) {\n\treturn jQuery.nodeName( elem, \"table\" ) &&\n\t\tjQuery.nodeName( content.nodeType !== 11 ? content : content.firstChild, \"tr\" ) ?\n\n\t\telem.getElementsByTagName( \"tbody\" )[ 0 ] ||\n\t\t\telem.appendChild( elem.ownerDocument.createElement( \"tbody\" ) ) :\n\t\telem;\n}\n\n// Replace/restore the type attribute of script elements for safe DOM manipulation\nfunction disableScript( elem ) {\n\telem.type = ( elem.getAttribute( \"type\" ) !== null ) + \"/\" + elem.type;\n\treturn elem;\n}\nfunction restoreScript( elem ) {\n\tvar match = rscriptTypeMasked.exec( elem.type );\n\n\tif ( match ) {\n\t\telem.type = match[ 1 ];\n\t} else {\n\t\telem.removeAttribute( \"type\" );\n\t}\n\n\treturn elem;\n}\n\nfunction cloneCopyEvent( src, dest ) {\n\tvar i, l, type, pdataOld, pdataCur, udataOld, udataCur, events;\n\n\tif ( dest.nodeType !== 1 ) {\n\t\treturn;\n\t}\n\n\t// 1. Copy private data: events, handlers, etc.\n\tif ( dataPriv.hasData( src ) ) {\n\t\tpdataOld = dataPriv.access( src );\n\t\tpdataCur = dataPriv.set( dest, pdataOld );\n\t\tevents = pdataOld.events;\n\n\t\tif ( events ) {\n\t\t\tdelete pdataCur.handle;\n\t\t\tpdataCur.events = {};\n\n\t\t\tfor ( type in events ) {\n\t\t\t\tfor ( i = 0, l = events[ type ].length; i < l; i++ ) {\n\t\t\t\t\tjQuery.event.add( dest, type, events[ type ][ i ] );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// 2. Copy user data\n\tif ( dataUser.hasData( src ) ) {\n\t\tudataOld = dataUser.access( src );\n\t\tudataCur = jQuery.extend( {}, udataOld );\n\n\t\tdataUser.set( dest, udataCur );\n\t}\n}\n\n// Fix IE bugs, see support tests\nfunction fixInput( src, dest ) {\n\tvar nodeName = dest.nodeName.toLowerCase();\n\n\t// Fails to persist the checked state of a cloned checkbox or radio button.\n\tif ( nodeName === \"input\" && rcheckableType.test( src.type ) ) {\n\t\tdest.checked = src.checked;\n\n\t// Fails to return the selected option to the default selected state when cloning options\n\t} else if ( nodeName === \"input\" || nodeName === \"textarea\" ) {\n\t\tdest.defaultValue = src.defaultValue;\n\t}\n}\n\nfunction domManip( collection, args, callback, ignored ) {\n\n\t// Flatten any nested arrays\n\targs = concat.apply( [], args );\n\n\tvar fragment, first, scripts, hasScripts, node, doc,\n\t\ti = 0,\n\t\tl = collection.length,\n\t\tiNoClone = l - 1,\n\t\tvalue = args[ 0 ],\n\t\tisFunction = jQuery.isFunction( value );\n\n\t// We can't cloneNode fragments that contain checked, in WebKit\n\tif ( isFunction ||\n\t\t\t( l > 1 && typeof value === \"string\" &&\n\t\t\t\t!support.checkClone && rchecked.test( value ) ) ) {\n\t\treturn collection.each( function( index ) {\n\t\t\tvar self = collection.eq( index );\n\t\t\tif ( isFunction ) {\n\t\t\t\targs[ 0 ] = value.call( this, index, self.html() );\n\t\t\t}\n\t\t\tdomManip( self, args, callback, ignored );\n\t\t} );\n\t}\n\n\tif ( l ) {\n\t\tfragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored );\n\t\tfirst = fragment.firstChild;\n\n\t\tif ( fragment.childNodes.length === 1 ) {\n\t\t\tfragment = first;\n\t\t}\n\n\t\t// Require either new content or an interest in ignored elements to invoke the callback\n\t\tif ( first || ignored ) {\n\t\t\tscripts = jQuery.map( getAll( fragment, \"script\" ), disableScript );\n\t\t\thasScripts = scripts.length;\n\n\t\t\t// Use the original fragment for the last item\n\t\t\t// instead of the first because it can end up\n\t\t\t// being emptied incorrectly in certain situations (#8070).\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tnode = fragment;\n\n\t\t\t\tif ( i !== iNoClone ) {\n\t\t\t\t\tnode = jQuery.clone( node, true, true );\n\n\t\t\t\t\t// Keep references to cloned scripts for later restoration\n\t\t\t\t\tif ( hasScripts ) {\n\n\t\t\t\t\t\t// Support: Android<4.1, PhantomJS<2\n\t\t\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\t\t\tjQuery.merge( scripts, getAll( node, \"script\" ) );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tcallback.call( collection[ i ], node, i );\n\t\t\t}\n\n\t\t\tif ( hasScripts ) {\n\t\t\t\tdoc = scripts[ scripts.length - 1 ].ownerDocument;\n\n\t\t\t\t// Reenable scripts\n\t\t\t\tjQuery.map( scripts, restoreScript );\n\n\t\t\t\t// Evaluate executable scripts on first document insertion\n\t\t\t\tfor ( i = 0; i < hasScripts; i++ ) {\n\t\t\t\t\tnode = scripts[ i ];\n\t\t\t\t\tif ( rscriptType.test( node.type || \"\" ) &&\n\t\t\t\t\t\t!dataPriv.access( node, \"globalEval\" ) &&\n\t\t\t\t\t\tjQuery.contains( doc, node ) ) {\n\n\t\t\t\t\t\tif ( node.src ) {\n\n\t\t\t\t\t\t\t// Optional AJAX dependency, but won't run scripts if not present\n\t\t\t\t\t\t\tif ( jQuery._evalUrl ) {\n\t\t\t\t\t\t\t\tjQuery._evalUrl( node.src );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tjQuery.globalEval( node.textContent.replace( rcleanScript, \"\" ) );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn collection;\n}\n\nfunction remove( elem, selector, keepData ) {\n\tvar node,\n\t\tnodes = selector ? jQuery.filter( selector, elem ) : elem,\n\t\ti = 0;\n\n\tfor ( ; ( node = nodes[ i ] ) != null; i++ ) {\n\t\tif ( !keepData && node.nodeType === 1 ) {\n\t\t\tjQuery.cleanData( getAll( node ) );\n\t\t}\n\n\t\tif ( node.parentNode ) {\n\t\t\tif ( keepData && jQuery.contains( node.ownerDocument, node ) ) {\n\t\t\t\tsetGlobalEval( getAll( node, \"script\" ) );\n\t\t\t}\n\t\t\tnode.parentNode.removeChild( node );\n\t\t}\n\t}\n\n\treturn elem;\n}\n\njQuery.extend( {\n\thtmlPrefilter: function( html ) {\n\t\treturn html.replace( rxhtmlTag, \"<$1></$2>\" );\n\t},\n\n\tclone: function( elem, dataAndEvents, deepDataAndEvents ) {\n\t\tvar i, l, srcElements, destElements,\n\t\t\tclone = elem.cloneNode( true ),\n\t\t\tinPage = jQuery.contains( elem.ownerDocument, elem );\n\n\t\t// Fix IE cloning issues\n\t\tif ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) &&\n\t\t\t\t!jQuery.isXMLDoc( elem ) ) {\n\n\t\t\t// We eschew Sizzle here for performance reasons: http://jsperf.com/getall-vs-sizzle/2\n\t\t\tdestElements = getAll( clone );\n\t\t\tsrcElements = getAll( elem );\n\n\t\t\tfor ( i = 0, l = srcElements.length; i < l; i++ ) {\n\t\t\t\tfixInput( srcElements[ i ], destElements[ i ] );\n\t\t\t}\n\t\t}\n\n\t\t// Copy the events from the original to the clone\n\t\tif ( dataAndEvents ) {\n\t\t\tif ( deepDataAndEvents ) {\n\t\t\t\tsrcElements = srcElements || getAll( elem );\n\t\t\t\tdestElements = destElements || getAll( clone );\n\n\t\t\t\tfor ( i = 0, l = srcElements.length; i < l; i++ ) {\n\t\t\t\t\tcloneCopyEvent( srcElements[ i ], destElements[ i ] );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tcloneCopyEvent( elem, clone );\n\t\t\t}\n\t\t}\n\n\t\t// Preserve script evaluation history\n\t\tdestElements = getAll( clone, \"script\" );\n\t\tif ( destElements.length > 0 ) {\n\t\t\tsetGlobalEval( destElements, !inPage && getAll( elem, \"script\" ) );\n\t\t}\n\n\t\t// Return the cloned set\n\t\treturn clone;\n\t},\n\n\tcleanData: function( elems ) {\n\t\tvar data, elem, type,\n\t\t\tspecial = jQuery.event.special,\n\t\t\ti = 0;\n\n\t\tfor ( ; ( elem = elems[ i ] ) !== undefined; i++ ) {\n\t\t\tif ( acceptData( elem ) ) {\n\t\t\t\tif ( ( data = elem[ dataPriv.expando ] ) ) {\n\t\t\t\t\tif ( data.events ) {\n\t\t\t\t\t\tfor ( type in data.events ) {\n\t\t\t\t\t\t\tif ( special[ type ] ) {\n\t\t\t\t\t\t\t\tjQuery.event.remove( elem, type );\n\n\t\t\t\t\t\t\t// This is a shortcut to avoid jQuery.event.remove's overhead\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tjQuery.removeEvent( elem, type, data.handle );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Support: Chrome <= 35-45+\n\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\telem[ dataPriv.expando ] = undefined;\n\t\t\t\t}\n\t\t\t\tif ( elem[ dataUser.expando ] ) {\n\n\t\t\t\t\t// Support: Chrome <= 35-45+\n\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\telem[ dataUser.expando ] = undefined;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n} );\n\njQuery.fn.extend( {\n\n\t// Keep domManip exposed until 3.0 (gh-2225)\n\tdomManip: domManip,\n\n\tdetach: function( selector ) {\n\t\treturn remove( this, selector, true );\n\t},\n\n\tremove: function( selector ) {\n\t\treturn remove( this, selector );\n\t},\n\n\ttext: function( value ) {\n\t\treturn access( this, function( value ) {\n\t\t\treturn value === undefined ?\n\t\t\t\tjQuery.text( this ) :\n\t\t\t\tthis.empty().each( function() {\n\t\t\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\t\t\tthis.textContent = value;\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t}, null, value, arguments.length );\n\t},\n\n\tappend: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\tvar target = manipulationTarget( this, elem );\n\t\t\t\ttarget.appendChild( elem );\n\t\t\t}\n\t\t} );\n\t},\n\n\tprepend: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\tvar target = manipulationTarget( this, elem );\n\t\t\t\ttarget.insertBefore( elem, target.firstChild );\n\t\t\t}\n\t\t} );\n\t},\n\n\tbefore: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.parentNode ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this );\n\t\t\t}\n\t\t} );\n\t},\n\n\tafter: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.parentNode ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this.nextSibling );\n\t\t\t}\n\t\t} );\n\t},\n\n\tempty: function() {\n\t\tvar elem,\n\t\t\ti = 0;\n\n\t\tfor ( ; ( elem = this[ i ] ) != null; i++ ) {\n\t\t\tif ( elem.nodeType === 1 ) {\n\n\t\t\t\t// Prevent memory leaks\n\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\n\t\t\t\t// Remove any remaining nodes\n\t\t\t\telem.textContent = \"\";\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tclone: function( dataAndEvents, deepDataAndEvents ) {\n\t\tdataAndEvents = dataAndEvents == null ? false : dataAndEvents;\n\t\tdeepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;\n\n\t\treturn this.map( function() {\n\t\t\treturn jQuery.clone( this, dataAndEvents, deepDataAndEvents );\n\t\t} );\n\t},\n\n\thtml: function( value ) {\n\t\treturn access( this, function( value ) {\n\t\t\tvar elem = this[ 0 ] || {},\n\t\t\t\ti = 0,\n\t\t\t\tl = this.length;\n\n\t\t\tif ( value === undefined && elem.nodeType === 1 ) {\n\t\t\t\treturn elem.innerHTML;\n\t\t\t}\n\n\t\t\t// See if we can take a shortcut and just use innerHTML\n\t\t\tif ( typeof value === \"string\" && !rnoInnerhtml.test( value ) &&\n\t\t\t\t!wrapMap[ ( rtagName.exec( value ) || [ \"\", \"\" ] )[ 1 ].toLowerCase() ] ) {\n\n\t\t\t\tvalue = jQuery.htmlPrefilter( value );\n\n\t\t\t\ttry {\n\t\t\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\t\t\telem = this[ i ] || {};\n\n\t\t\t\t\t\t// Remove element nodes and prevent memory leaks\n\t\t\t\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\t\t\t\t\t\t\telem.innerHTML = value;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\telem = 0;\n\n\t\t\t\t// If using innerHTML throws an exception, use the fallback method\n\t\t\t\t} catch ( e ) {}\n\t\t\t}\n\n\t\t\tif ( elem ) {\n\t\t\t\tthis.empty().append( value );\n\t\t\t}\n\t\t}, null, value, arguments.length );\n\t},\n\n\treplaceWith: function() {\n\t\tvar ignored = [];\n\n\t\t// Make the changes, replacing each non-ignored context element with the new content\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tvar parent = this.parentNode;\n\n\t\t\tif ( jQuery.inArray( this, ignored ) < 0 ) {\n\t\t\t\tjQuery.cleanData( getAll( this ) );\n\t\t\t\tif ( parent ) {\n\t\t\t\t\tparent.replaceChild( elem, this );\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Force callback invocation\n\t\t}, ignored );\n\t}\n} );\n\njQuery.each( {\n\tappendTo: \"append\",\n\tprependTo: \"prepend\",\n\tinsertBefore: \"before\",\n\tinsertAfter: \"after\",\n\treplaceAll: \"replaceWith\"\n}, function( name, original ) {\n\tjQuery.fn[ name ] = function( selector ) {\n\t\tvar elems,\n\t\t\tret = [],\n\t\t\tinsert = jQuery( selector ),\n\t\t\tlast = insert.length - 1,\n\t\t\ti = 0;\n\n\t\tfor ( ; i <= last; i++ ) {\n\t\t\telems = i === last ? this : this.clone( true );\n\t\t\tjQuery( insert[ i ] )[ original ]( elems );\n\n\t\t\t// Support: QtWebKit\n\t\t\t// .get() because push.apply(_, arraylike) throws\n\t\t\tpush.apply( ret, elems.get() );\n\t\t}\n\n\t\treturn this.pushStack( ret );\n\t};\n} );\n\n\nvar iframe,\n\telemdisplay = {\n\n\t\t// Support: Firefox\n\t\t// We have to pre-define these values for FF (#10227)\n\t\tHTML: \"block\",\n\t\tBODY: \"block\"\n\t};\n\n/**\n * Retrieve the actual display of a element\n * @param {String} name nodeName of the element\n * @param {Object} doc Document object\n */\n\n// Called only from within defaultDisplay\nfunction actualDisplay( name, doc ) {\n\tvar elem = jQuery( doc.createElement( name ) ).appendTo( doc.body ),\n\n\t\tdisplay = jQuery.css( elem[ 0 ], \"display\" );\n\n\t// We don't have any data stored on the element,\n\t// so use \"detach\" method as fast way to get rid of the element\n\telem.detach();\n\n\treturn display;\n}\n\n/**\n * Try to determine the default display value of an element\n * @param {String} nodeName\n */\nfunction defaultDisplay( nodeName ) {\n\tvar doc = document,\n\t\tdisplay = elemdisplay[ nodeName ];\n\n\tif ( !display ) {\n\t\tdisplay = actualDisplay( nodeName, doc );\n\n\t\t// If the simple way fails, read from inside an iframe\n\t\tif ( display === \"none\" || !display ) {\n\n\t\t\t// Use the already-created iframe if possible\n\t\t\tiframe = ( iframe || jQuery( \"<iframe frameborder='0' width='0' height='0'/>\" ) )\n\t\t\t\t.appendTo( doc.documentElement );\n\n\t\t\t// Always write a new HTML skeleton so Webkit and Firefox don't choke on reuse\n\t\t\tdoc = iframe[ 0 ].contentDocument;\n\n\t\t\t// Support: IE\n\t\t\tdoc.write();\n\t\t\tdoc.close();\n\n\t\t\tdisplay = actualDisplay( nodeName, doc );\n\t\t\tiframe.detach();\n\t\t}\n\n\t\t// Store the correct default display\n\t\telemdisplay[ nodeName ] = display;\n\t}\n\n\treturn display;\n}\nvar rmargin = ( /^margin/ );\n\nvar rnumnonpx = new RegExp( \"^(\" + pnum + \")(?!px)[a-z%]+$\", \"i\" );\n\nvar getStyles = function( elem ) {\n\n\t\t// Support: IE<=11+, Firefox<=30+ (#15098, #14150)\n\t\t// IE throws on elements created in popups\n\t\t// FF meanwhile throws on frame elements through \"defaultView.getComputedStyle\"\n\t\tvar view = elem.ownerDocument.defaultView;\n\n\t\tif ( !view || !view.opener ) {\n\t\t\tview = window;\n\t\t}\n\n\t\treturn view.getComputedStyle( elem );\n\t};\n\nvar swap = function( elem, options, callback, args ) {\n\tvar ret, name,\n\t\told = {};\n\n\t// Remember the old values, and insert the new ones\n\tfor ( name in options ) {\n\t\told[ name ] = elem.style[ name ];\n\t\telem.style[ name ] = options[ name ];\n\t}\n\n\tret = callback.apply( elem, args || [] );\n\n\t// Revert the old values\n\tfor ( name in options ) {\n\t\telem.style[ name ] = old[ name ];\n\t}\n\n\treturn ret;\n};\n\n\nvar documentElement = document.documentElement;\n\n\n\n( function() {\n\tvar pixelPositionVal, boxSizingReliableVal, pixelMarginRightVal, reliableMarginLeftVal,\n\t\tcontainer = document.createElement( \"div\" ),\n\t\tdiv = document.createElement( \"div\" );\n\n\t// Finish early in limited (non-browser) environments\n\tif ( !div.style ) {\n\t\treturn;\n\t}\n\n\t// Support: IE9-11+\n\t// Style of cloned element affects source element cloned (#8908)\n\tdiv.style.backgroundClip = \"content-box\";\n\tdiv.cloneNode( true ).style.backgroundClip = \"\";\n\tsupport.clearCloneStyle = div.style.backgroundClip === \"content-box\";\n\n\tcontainer.style.cssText = \"border:0;width:8px;height:0;top:0;left:-9999px;\" +\n\t\t\"padding:0;margin-top:1px;position:absolute\";\n\tcontainer.appendChild( div );\n\n\t// Executing both pixelPosition & boxSizingReliable tests require only one layout\n\t// so they're executed at the same time to save the second computation.\n\tfunction computeStyleTests() {\n\t\tdiv.style.cssText =\n\n\t\t\t// Support: Firefox<29, Android 2.3\n\t\t\t// Vendor-prefix box-sizing\n\t\t\t\"-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;\" +\n\t\t\t\"position:relative;display:block;\" +\n\t\t\t\"margin:auto;border:1px;padding:1px;\" +\n\t\t\t\"top:1%;width:50%\";\n\t\tdiv.innerHTML = \"\";\n\t\tdocumentElement.appendChild( container );\n\n\t\tvar divStyle = window.getComputedStyle( div );\n\t\tpixelPositionVal = divStyle.top !== \"1%\";\n\t\treliableMarginLeftVal = divStyle.marginLeft === \"2px\";\n\t\tboxSizingReliableVal = divStyle.width === \"4px\";\n\n\t\t// Support: Android 4.0 - 4.3 only\n\t\t// Some styles come back with percentage values, even though they shouldn't\n\t\tdiv.style.marginRight = \"50%\";\n\t\tpixelMarginRightVal = divStyle.marginRight === \"4px\";\n\n\t\tdocumentElement.removeChild( container );\n\t}\n\n\tjQuery.extend( support, {\n\t\tpixelPosition: function() {\n\n\t\t\t// This test is executed only once but we still do memoizing\n\t\t\t// since we can use the boxSizingReliable pre-computing.\n\t\t\t// No need to check if the test was already performed, though.\n\t\t\tcomputeStyleTests();\n\t\t\treturn pixelPositionVal;\n\t\t},\n\t\tboxSizingReliable: function() {\n\t\t\tif ( boxSizingReliableVal == null ) {\n\t\t\t\tcomputeStyleTests();\n\t\t\t}\n\t\t\treturn boxSizingReliableVal;\n\t\t},\n\t\tpixelMarginRight: function() {\n\n\t\t\t// Support: Android 4.0-4.3\n\t\t\t// We're checking for boxSizingReliableVal here instead of pixelMarginRightVal\n\t\t\t// since that compresses better and they're computed together anyway.\n\t\t\tif ( boxSizingReliableVal == null ) {\n\t\t\t\tcomputeStyleTests();\n\t\t\t}\n\t\t\treturn pixelMarginRightVal;\n\t\t},\n\t\treliableMarginLeft: function() {\n\n\t\t\t// Support: IE <=8 only, Android 4.0 - 4.3 only, Firefox <=3 - 37\n\t\t\tif ( boxSizingReliableVal == null ) {\n\t\t\t\tcomputeStyleTests();\n\t\t\t}\n\t\t\treturn reliableMarginLeftVal;\n\t\t},\n\t\treliableMarginRight: function() {\n\n\t\t\t// Support: Android 2.3\n\t\t\t// Check if div with explicit width and no margin-right incorrectly\n\t\t\t// gets computed margin-right based on width of container. (#3333)\n\t\t\t// WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right\n\t\t\t// This support function is only executed once so no memoizing is needed.\n\t\t\tvar ret,\n\t\t\t\tmarginDiv = div.appendChild( document.createElement( \"div\" ) );\n\n\t\t\t// Reset CSS: box-sizing; display; margin; border; padding\n\t\t\tmarginDiv.style.cssText = div.style.cssText =\n\n\t\t\t\t// Support: Android 2.3\n\t\t\t\t// Vendor-prefix box-sizing\n\t\t\t\t\"-webkit-box-sizing:content-box;box-sizing:content-box;\" +\n\t\t\t\t\"display:block;margin:0;border:0;padding:0\";\n\t\t\tmarginDiv.style.marginRight = marginDiv.style.width = \"0\";\n\t\t\tdiv.style.width = \"1px\";\n\t\t\tdocumentElement.appendChild( container );\n\n\t\t\tret = !parseFloat( window.getComputedStyle( marginDiv ).marginRight );\n\n\t\t\tdocumentElement.removeChild( container );\n\t\t\tdiv.removeChild( marginDiv );\n\n\t\t\treturn ret;\n\t\t}\n\t} );\n} )();\n\n\nfunction curCSS( elem, name, computed ) {\n\tvar width, minWidth, maxWidth, ret,\n\t\tstyle = elem.style;\n\n\tcomputed = computed || getStyles( elem );\n\tret = computed ? computed.getPropertyValue( name ) || computed[ name ] : undefined;\n\n\t// Support: Opera 12.1x only\n\t// Fall back to style even without computed\n\t// computed is undefined for elems on document fragments\n\tif ( ( ret === \"\" || ret === undefined ) && !jQuery.contains( elem.ownerDocument, elem ) ) {\n\t\tret = jQuery.style( elem, name );\n\t}\n\n\t// Support: IE9\n\t// getPropertyValue is only needed for .css('filter') (#12537)\n\tif ( computed ) {\n\n\t\t// A tribute to the \"awesome hack by Dean Edwards\"\n\t\t// Android Browser returns percentage for some values,\n\t\t// but width seems to be reliably pixels.\n\t\t// This is against the CSSOM draft spec:\n\t\t// http://dev.w3.org/csswg/cssom/#resolved-values\n\t\tif ( !support.pixelMarginRight() && rnumnonpx.test( ret ) && rmargin.test( name ) ) {\n\n\t\t\t// Remember the original values\n\t\t\twidth = style.width;\n\t\t\tminWidth = style.minWidth;\n\t\t\tmaxWidth = style.maxWidth;\n\n\t\t\t// Put in the new values to get a computed value out\n\t\t\tstyle.minWidth = style.maxWidth = style.width = ret;\n\t\t\tret = computed.width;\n\n\t\t\t// Revert the changed values\n\t\t\tstyle.width = width;\n\t\t\tstyle.minWidth = minWidth;\n\t\t\tstyle.maxWidth = maxWidth;\n\t\t}\n\t}\n\n\treturn ret !== undefined ?\n\n\t\t// Support: IE9-11+\n\t\t// IE returns zIndex value as an integer.\n\t\tret + \"\" :\n\t\tret;\n}\n\n\nfunction addGetHookIf( conditionFn, hookFn ) {\n\n\t// Define the hook, we'll check on the first run if it's really needed.\n\treturn {\n\t\tget: function() {\n\t\t\tif ( conditionFn() ) {\n\n\t\t\t\t// Hook not needed (or it's not possible to use it due\n\t\t\t\t// to missing dependency), remove it.\n\t\t\t\tdelete this.get;\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Hook needed; redefine it so that the support test is not executed again.\n\t\t\treturn ( this.get = hookFn ).apply( this, arguments );\n\t\t}\n\t};\n}\n\n\nvar\n\n\t// Swappable if display is none or starts with table\n\t// except \"table\", \"table-cell\", or \"table-caption\"\n\t// See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display\n\trdisplayswap = /^(none|table(?!-c[ea]).+)/,\n\n\tcssShow = { position: \"absolute\", visibility: \"hidden\", display: \"block\" },\n\tcssNormalTransform = {\n\t\tletterSpacing: \"0\",\n\t\tfontWeight: \"400\"\n\t},\n\n\tcssPrefixes = [ \"Webkit\", \"O\", \"Moz\", \"ms\" ],\n\temptyStyle = document.createElement( \"div\" ).style;\n\n// Return a css property mapped to a potentially vendor prefixed property\nfunction vendorPropName( name ) {\n\n\t// Shortcut for names that are not vendor prefixed\n\tif ( name in emptyStyle ) {\n\t\treturn name;\n\t}\n\n\t// Check for vendor prefixed names\n\tvar capName = name[ 0 ].toUpperCase() + name.slice( 1 ),\n\t\ti = cssPrefixes.length;\n\n\twhile ( i-- ) {\n\t\tname = cssPrefixes[ i ] + capName;\n\t\tif ( name in emptyStyle ) {\n\t\t\treturn name;\n\t\t}\n\t}\n}\n\nfunction setPositiveNumber( elem, value, subtract ) {\n\n\t// Any relative (+/-) values have already been\n\t// normalized at this point\n\tvar matches = rcssNum.exec( value );\n\treturn matches ?\n\n\t\t// Guard against undefined \"subtract\", e.g., when used as in cssHooks\n\t\tMath.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || \"px\" ) :\n\t\tvalue;\n}\n\nfunction augmentWidthOrHeight( elem, name, extra, isBorderBox, styles ) {\n\tvar i = extra === ( isBorderBox ? \"border\" : \"content\" ) ?\n\n\t\t// If we already have the right measurement, avoid augmentation\n\t\t4 :\n\n\t\t// Otherwise initialize for horizontal or vertical properties\n\t\tname === \"width\" ? 1 : 0,\n\n\t\tval = 0;\n\n\tfor ( ; i < 4; i += 2 ) {\n\n\t\t// Both box models exclude margin, so add it if we want it\n\t\tif ( extra === \"margin\" ) {\n\t\t\tval += jQuery.css( elem, extra + cssExpand[ i ], true, styles );\n\t\t}\n\n\t\tif ( isBorderBox ) {\n\n\t\t\t// border-box includes padding, so remove it if we want content\n\t\t\tif ( extra === \"content\" ) {\n\t\t\t\tval -= jQuery.css( elem, \"padding\" + cssExpand[ i ], true, styles );\n\t\t\t}\n\n\t\t\t// At this point, extra isn't border nor margin, so remove border\n\t\t\tif ( extra !== \"margin\" ) {\n\t\t\t\tval -= jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\t\t\t}\n\t\t} else {\n\n\t\t\t// At this point, extra isn't content, so add padding\n\t\t\tval += jQuery.css( elem, \"padding\" + cssExpand[ i ], true, styles );\n\n\t\t\t// At this point, extra isn't content nor padding, so add border\n\t\t\tif ( extra !== \"padding\" ) {\n\t\t\t\tval += jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\t\t\t}\n\t\t}\n\t}\n\n\treturn val;\n}\n\nfunction getWidthOrHeight( elem, name, extra ) {\n\n\t// Start with offset property, which is equivalent to the border-box value\n\tvar valueIsBorderBox = true,\n\t\tval = name === \"width\" ? elem.offsetWidth : elem.offsetHeight,\n\t\tstyles = getStyles( elem ),\n\t\tisBorderBox = jQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\";\n\n\t// Support: IE11 only\n\t// In IE 11 fullscreen elements inside of an iframe have\n\t// 100x too small dimensions (gh-1764).\n\tif ( document.msFullscreenElement && window.top !== window ) {\n\n\t\t// Support: IE11 only\n\t\t// Running getBoundingClientRect on a disconnected node\n\t\t// in IE throws an error.\n\t\tif ( elem.getClientRects().length ) {\n\t\t\tval = Math.round( elem.getBoundingClientRect()[ name ] * 100 );\n\t\t}\n\t}\n\n\t// Some non-html elements return undefined for offsetWidth, so check for null/undefined\n\t// svg - https://bugzilla.mozilla.org/show_bug.cgi?id=649285\n\t// MathML - https://bugzilla.mozilla.org/show_bug.cgi?id=491668\n\tif ( val <= 0 || val == null ) {\n\n\t\t// Fall back to computed then uncomputed css if necessary\n\t\tval = curCSS( elem, name, styles );\n\t\tif ( val < 0 || val == null ) {\n\t\t\tval = elem.style[ name ];\n\t\t}\n\n\t\t// Computed unit is not pixels. Stop here and return.\n\t\tif ( rnumnonpx.test( val ) ) {\n\t\t\treturn val;\n\t\t}\n\n\t\t// Check for style in case a browser which returns unreliable values\n\t\t// for getComputedStyle silently falls back to the reliable elem.style\n\t\tvalueIsBorderBox = isBorderBox &&\n\t\t\t( support.boxSizingReliable() || val === elem.style[ name ] );\n\n\t\t// Normalize \"\", auto, and prepare for extra\n\t\tval = parseFloat( val ) || 0;\n\t}\n\n\t// Use the active box-sizing model to add/subtract irrelevant styles\n\treturn ( val +\n\t\taugmentWidthOrHeight(\n\t\t\telem,\n\t\t\tname,\n\t\t\textra || ( isBorderBox ? \"border\" : \"content\" ),\n\t\t\tvalueIsBorderBox,\n\t\t\tstyles\n\t\t)\n\t) + \"px\";\n}\n\nfunction showHide( elements, show ) {\n\tvar display, elem, hidden,\n\t\tvalues = [],\n\t\tindex = 0,\n\t\tlength = elements.length;\n\n\tfor ( ; index < length; index++ ) {\n\t\telem = elements[ index ];\n\t\tif ( !elem.style ) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tvalues[ index ] = dataPriv.get( elem, \"olddisplay\" );\n\t\tdisplay = elem.style.display;\n\t\tif ( show ) {\n\n\t\t\t// Reset the inline display of this element to learn if it is\n\t\t\t// being hidden by cascaded rules or not\n\t\t\tif ( !values[ index ] && display === \"none\" ) {\n\t\t\t\telem.style.display = \"\";\n\t\t\t}\n\n\t\t\t// Set elements which have been overridden with display: none\n\t\t\t// in a stylesheet to whatever the default browser style is\n\t\t\t// for such an element\n\t\t\tif ( elem.style.display === \"\" && isHidden( elem ) ) {\n\t\t\t\tvalues[ index ] = dataPriv.access(\n\t\t\t\t\telem,\n\t\t\t\t\t\"olddisplay\",\n\t\t\t\t\tdefaultDisplay( elem.nodeName )\n\t\t\t\t);\n\t\t\t}\n\t\t} else {\n\t\t\thidden = isHidden( elem );\n\n\t\t\tif ( display !== \"none\" || !hidden ) {\n\t\t\t\tdataPriv.set(\n\t\t\t\t\telem,\n\t\t\t\t\t\"olddisplay\",\n\t\t\t\t\thidden ? display : jQuery.css( elem, \"display\" )\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n\n\t// Set the display of most of the elements in a second loop\n\t// to avoid the constant reflow\n\tfor ( index = 0; index < length; index++ ) {\n\t\telem = elements[ index ];\n\t\tif ( !elem.style ) {\n\t\t\tcontinue;\n\t\t}\n\t\tif ( !show || elem.style.display === \"none\" || elem.style.display === \"\" ) {\n\t\t\telem.style.display = show ? values[ index ] || \"\" : \"none\";\n\t\t}\n\t}\n\n\treturn elements;\n}\n\njQuery.extend( {\n\n\t// Add in style property hooks for overriding the default\n\t// behavior of getting and setting a style property\n\tcssHooks: {\n\t\topacity: {\n\t\t\tget: function( elem, computed ) {\n\t\t\t\tif ( computed ) {\n\n\t\t\t\t\t// We should always get a number back from opacity\n\t\t\t\t\tvar ret = curCSS( elem, \"opacity\" );\n\t\t\t\t\treturn ret === \"\" ? \"1\" : ret;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\t// Don't automatically add \"px\" to these possibly-unitless properties\n\tcssNumber: {\n\t\t\"animationIterationCount\": true,\n\t\t\"columnCount\": true,\n\t\t\"fillOpacity\": true,\n\t\t\"flexGrow\": true,\n\t\t\"flexShrink\": true,\n\t\t\"fontWeight\": true,\n\t\t\"lineHeight\": true,\n\t\t\"opacity\": true,\n\t\t\"order\": true,\n\t\t\"orphans\": true,\n\t\t\"widows\": true,\n\t\t\"zIndex\": true,\n\t\t\"zoom\": true\n\t},\n\n\t// Add in properties whose names you wish to fix before\n\t// setting or getting the value\n\tcssProps: {\n\t\t\"float\": \"cssFloat\"\n\t},\n\n\t// Get and set the style property on a DOM Node\n\tstyle: function( elem, name, value, extra ) {\n\n\t\t// Don't set styles on text and comment nodes\n\t\tif ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Make sure that we're working with the right name\n\t\tvar ret, type, hooks,\n\t\t\torigName = jQuery.camelCase( name ),\n\t\t\tstyle = elem.style;\n\n\t\tname = jQuery.cssProps[ origName ] ||\n\t\t\t( jQuery.cssProps[ origName ] = vendorPropName( origName ) || origName );\n\n\t\t// Gets hook for the prefixed version, then unprefixed version\n\t\thooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\n\n\t\t// Check if we're setting a value\n\t\tif ( value !== undefined ) {\n\t\t\ttype = typeof value;\n\n\t\t\t// Convert \"+=\" or \"-=\" to relative numbers (#7345)\n\t\t\tif ( type === \"string\" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) {\n\t\t\t\tvalue = adjustCSS( elem, name, ret );\n\n\t\t\t\t// Fixes bug #9237\n\t\t\t\ttype = \"number\";\n\t\t\t}\n\n\t\t\t// Make sure that null and NaN values aren't set (#7116)\n\t\t\tif ( value == null || value !== value ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// If a number was passed in, add the unit (except for certain CSS properties)\n\t\t\tif ( type === \"number\" ) {\n\t\t\t\tvalue += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? \"\" : \"px\" );\n\t\t\t}\n\n\t\t\t// Support: IE9-11+\n\t\t\t// background-* props affect original clone's values\n\t\t\tif ( !support.clearCloneStyle && value === \"\" && name.indexOf( \"background\" ) === 0 ) {\n\t\t\t\tstyle[ name ] = \"inherit\";\n\t\t\t}\n\n\t\t\t// If a hook was provided, use that value, otherwise just set the specified value\n\t\t\tif ( !hooks || !( \"set\" in hooks ) ||\n\t\t\t\t( value = hooks.set( elem, value, extra ) ) !== undefined ) {\n\n\t\t\t\tstyle[ name ] = value;\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t// If a hook was provided get the non-computed value from there\n\t\t\tif ( hooks && \"get\" in hooks &&\n\t\t\t\t( ret = hooks.get( elem, false, extra ) ) !== undefined ) {\n\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\t// Otherwise just get the value from the style object\n\t\t\treturn style[ name ];\n\t\t}\n\t},\n\n\tcss: function( elem, name, extra, styles ) {\n\t\tvar val, num, hooks,\n\t\t\torigName = jQuery.camelCase( name );\n\n\t\t// Make sure that we're working with the right name\n\t\tname = jQuery.cssProps[ origName ] ||\n\t\t\t( jQuery.cssProps[ origName ] = vendorPropName( origName ) || origName );\n\n\t\t// Try prefixed name followed by the unprefixed name\n\t\thooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\n\n\t\t// If a hook was provided get the computed value from there\n\t\tif ( hooks && \"get\" in hooks ) {\n\t\t\tval = hooks.get( elem, true, extra );\n\t\t}\n\n\t\t// Otherwise, if a way to get the computed value exists, use that\n\t\tif ( val === undefined ) {\n\t\t\tval = curCSS( elem, name, styles );\n\t\t}\n\n\t\t// Convert \"normal\" to computed value\n\t\tif ( val === \"normal\" && name in cssNormalTransform ) {\n\t\t\tval = cssNormalTransform[ name ];\n\t\t}\n\n\t\t// Make numeric if forced or a qualifier was provided and val looks numeric\n\t\tif ( extra === \"\" || extra ) {\n\t\t\tnum = parseFloat( val );\n\t\t\treturn extra === true || isFinite( num ) ? num || 0 : val;\n\t\t}\n\t\treturn val;\n\t}\n} );\n\njQuery.each( [ \"height\", \"width\" ], function( i, name ) {\n\tjQuery.cssHooks[ name ] = {\n\t\tget: function( elem, computed, extra ) {\n\t\t\tif ( computed ) {\n\n\t\t\t\t// Certain elements can have dimension info if we invisibly show them\n\t\t\t\t// but it must have a current display style that would benefit\n\t\t\t\treturn rdisplayswap.test( jQuery.css( elem, \"display\" ) ) &&\n\t\t\t\t\telem.offsetWidth === 0 ?\n\t\t\t\t\t\tswap( elem, cssShow, function() {\n\t\t\t\t\t\t\treturn getWidthOrHeight( elem, name, extra );\n\t\t\t\t\t\t} ) :\n\t\t\t\t\t\tgetWidthOrHeight( elem, name, extra );\n\t\t\t}\n\t\t},\n\n\t\tset: function( elem, value, extra ) {\n\t\t\tvar matches,\n\t\t\t\tstyles = extra && getStyles( elem ),\n\t\t\t\tsubtract = extra && augmentWidthOrHeight(\n\t\t\t\t\telem,\n\t\t\t\t\tname,\n\t\t\t\t\textra,\n\t\t\t\t\tjQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\",\n\t\t\t\t\tstyles\n\t\t\t\t);\n\n\t\t\t// Convert to pixels if value adjustment is needed\n\t\t\tif ( subtract && ( matches = rcssNum.exec( value ) ) &&\n\t\t\t\t( matches[ 3 ] || \"px\" ) !== \"px\" ) {\n\n\t\t\t\telem.style[ name ] = value;\n\t\t\t\tvalue = jQuery.css( elem, name );\n\t\t\t}\n\n\t\t\treturn setPositiveNumber( elem, value, subtract );\n\t\t}\n\t};\n} );\n\njQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft,\n\tfunction( elem, computed ) {\n\t\tif ( computed ) {\n\t\t\treturn ( parseFloat( curCSS( elem, \"marginLeft\" ) ) ||\n\t\t\t\telem.getBoundingClientRect().left -\n\t\t\t\t\tswap( elem, { marginLeft: 0 }, function() {\n\t\t\t\t\t\treturn elem.getBoundingClientRect().left;\n\t\t\t\t\t} )\n\t\t\t\t) + \"px\";\n\t\t}\n\t}\n);\n\n// Support: Android 2.3\njQuery.cssHooks.marginRight = addGetHookIf( support.reliableMarginRight,\n\tfunction( elem, computed ) {\n\t\tif ( computed ) {\n\t\t\treturn swap( elem, { \"display\": \"inline-block\" },\n\t\t\t\tcurCSS, [ elem, \"marginRight\" ] );\n\t\t}\n\t}\n);\n\n// These hooks are used by animate to expand properties\njQuery.each( {\n\tmargin: \"\",\n\tpadding: \"\",\n\tborder: \"Width\"\n}, function( prefix, suffix ) {\n\tjQuery.cssHooks[ prefix + suffix ] = {\n\t\texpand: function( value ) {\n\t\t\tvar i = 0,\n\t\t\t\texpanded = {},\n\n\t\t\t\t// Assumes a single number if not a string\n\t\t\t\tparts = typeof value === \"string\" ? value.split( \" \" ) : [ value ];\n\n\t\t\tfor ( ; i < 4; i++ ) {\n\t\t\t\texpanded[ prefix + cssExpand[ i ] + suffix ] =\n\t\t\t\t\tparts[ i ] || parts[ i - 2 ] || parts[ 0 ];\n\t\t\t}\n\n\t\t\treturn expanded;\n\t\t}\n\t};\n\n\tif ( !rmargin.test( prefix ) ) {\n\t\tjQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber;\n\t}\n} );\n\njQuery.fn.extend( {\n\tcss: function( name, value ) {\n\t\treturn access( this, function( elem, name, value ) {\n\t\t\tvar styles, len,\n\t\t\t\tmap = {},\n\t\t\t\ti = 0;\n\n\t\t\tif ( jQuery.isArray( name ) ) {\n\t\t\t\tstyles = getStyles( elem );\n\t\t\t\tlen = name.length;\n\n\t\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\t\tmap[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles );\n\t\t\t\t}\n\n\t\t\t\treturn map;\n\t\t\t}\n\n\t\t\treturn value !== undefined ?\n\t\t\t\tjQuery.style( elem, name, value ) :\n\t\t\t\tjQuery.css( elem, name );\n\t\t}, name, value, arguments.length > 1 );\n\t},\n\tshow: function() {\n\t\treturn showHide( this, true );\n\t},\n\thide: function() {\n\t\treturn showHide( this );\n\t},\n\ttoggle: function( state ) {\n\t\tif ( typeof state === \"boolean\" ) {\n\t\t\treturn state ? this.show() : this.hide();\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tif ( isHidden( this ) ) {\n\t\t\t\tjQuery( this ).show();\n\t\t\t} else {\n\t\t\t\tjQuery( this ).hide();\n\t\t\t}\n\t\t} );\n\t}\n} );\n\n\nfunction Tween( elem, options, prop, end, easing ) {\n\treturn new Tween.prototype.init( elem, options, prop, end, easing );\n}\njQuery.Tween = Tween;\n\nTween.prototype = {\n\tconstructor: Tween,\n\tinit: function( elem, options, prop, end, easing, unit ) {\n\t\tthis.elem = elem;\n\t\tthis.prop = prop;\n\t\tthis.easing = easing || jQuery.easing._default;\n\t\tthis.options = options;\n\t\tthis.start = this.now = this.cur();\n\t\tthis.end = end;\n\t\tthis.unit = unit || ( jQuery.cssNumber[ prop ] ? \"\" : \"px\" );\n\t},\n\tcur: function() {\n\t\tvar hooks = Tween.propHooks[ this.prop ];\n\n\t\treturn hooks && hooks.get ?\n\t\t\thooks.get( this ) :\n\t\t\tTween.propHooks._default.get( this );\n\t},\n\trun: function( percent ) {\n\t\tvar eased,\n\t\t\thooks = Tween.propHooks[ this.prop ];\n\n\t\tif ( this.options.duration ) {\n\t\t\tthis.pos = eased = jQuery.easing[ this.easing ](\n\t\t\t\tpercent, this.options.duration * percent, 0, 1, this.options.duration\n\t\t\t);\n\t\t} else {\n\t\t\tthis.pos = eased = percent;\n\t\t}\n\t\tthis.now = ( this.end - this.start ) * eased + this.start;\n\n\t\tif ( this.options.step ) {\n\t\t\tthis.options.step.call( this.elem, this.now, this );\n\t\t}\n\n\t\tif ( hooks && hooks.set ) {\n\t\t\thooks.set( this );\n\t\t} else {\n\t\t\tTween.propHooks._default.set( this );\n\t\t}\n\t\treturn this;\n\t}\n};\n\nTween.prototype.init.prototype = Tween.prototype;\n\nTween.propHooks = {\n\t_default: {\n\t\tget: function( tween ) {\n\t\t\tvar result;\n\n\t\t\t// Use a property on the element directly when it is not a DOM element,\n\t\t\t// or when there is no matching style property that exists.\n\t\t\tif ( tween.elem.nodeType !== 1 ||\n\t\t\t\ttween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) {\n\t\t\t\treturn tween.elem[ tween.prop ];\n\t\t\t}\n\n\t\t\t// Passing an empty string as a 3rd parameter to .css will automatically\n\t\t\t// attempt a parseFloat and fallback to a string if the parse fails.\n\t\t\t// Simple values such as \"10px\" are parsed to Float;\n\t\t\t// complex values such as \"rotate(1rad)\" are returned as-is.\n\t\t\tresult = jQuery.css( tween.elem, tween.prop, \"\" );\n\n\t\t\t// Empty strings, null, undefined and \"auto\" are converted to 0.\n\t\t\treturn !result || result === \"auto\" ? 0 : result;\n\t\t},\n\t\tset: function( tween ) {\n\n\t\t\t// Use step hook for back compat.\n\t\t\t// Use cssHook if its there.\n\t\t\t// Use .style if available and use plain properties where available.\n\t\t\tif ( jQuery.fx.step[ tween.prop ] ) {\n\t\t\t\tjQuery.fx.step[ tween.prop ]( tween );\n\t\t\t} else if ( tween.elem.nodeType === 1 &&\n\t\t\t\t( tween.elem.style[ jQuery.cssProps[ tween.prop ] ] != null ||\n\t\t\t\t\tjQuery.cssHooks[ tween.prop ] ) ) {\n\t\t\t\tjQuery.style( tween.elem, tween.prop, tween.now + tween.unit );\n\t\t\t} else {\n\t\t\t\ttween.elem[ tween.prop ] = tween.now;\n\t\t\t}\n\t\t}\n\t}\n};\n\n// Support: IE9\n// Panic based approach to setting things on disconnected nodes\nTween.propHooks.scrollTop = Tween.propHooks.scrollLeft = {\n\tset: function( tween ) {\n\t\tif ( tween.elem.nodeType && tween.elem.parentNode ) {\n\t\t\ttween.elem[ tween.prop ] = tween.now;\n\t\t}\n\t}\n};\n\njQuery.easing = {\n\tlinear: function( p ) {\n\t\treturn p;\n\t},\n\tswing: function( p ) {\n\t\treturn 0.5 - Math.cos( p * Math.PI ) / 2;\n\t},\n\t_default: \"swing\"\n};\n\njQuery.fx = Tween.prototype.init;\n\n// Back Compat <1.8 extension point\njQuery.fx.step = {};\n\n\n\n\nvar\n\tfxNow, timerId,\n\trfxtypes = /^(?:toggle|show|hide)$/,\n\trrun = /queueHooks$/;\n\n// Animations created synchronously will run synchronously\nfunction createFxNow() {\n\twindow.setTimeout( function() {\n\t\tfxNow = undefined;\n\t} );\n\treturn ( fxNow = jQuery.now() );\n}\n\n// Generate parameters to create a standard animation\nfunction genFx( type, includeWidth ) {\n\tvar which,\n\t\ti = 0,\n\t\tattrs = { height: type };\n\n\t// If we include width, step value is 1 to do all cssExpand values,\n\t// otherwise step value is 2 to skip over Left and Right\n\tincludeWidth = includeWidth ? 1 : 0;\n\tfor ( ; i < 4 ; i += 2 - includeWidth ) {\n\t\twhich = cssExpand[ i ];\n\t\tattrs[ \"margin\" + which ] = attrs[ \"padding\" + which ] = type;\n\t}\n\n\tif ( includeWidth ) {\n\t\tattrs.opacity = attrs.width = type;\n\t}\n\n\treturn attrs;\n}\n\nfunction createTween( value, prop, animation ) {\n\tvar tween,\n\t\tcollection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ \"*\" ] ),\n\t\tindex = 0,\n\t\tlength = collection.length;\n\tfor ( ; index < length; index++ ) {\n\t\tif ( ( tween = collection[ index ].call( animation, prop, value ) ) ) {\n\n\t\t\t// We're done with this property\n\t\t\treturn tween;\n\t\t}\n\t}\n}\n\nfunction defaultPrefilter( elem, props, opts ) {\n\t/* jshint validthis: true */\n\tvar prop, value, toggle, tween, hooks, oldfire, display, checkDisplay,\n\t\tanim = this,\n\t\torig = {},\n\t\tstyle = elem.style,\n\t\thidden = elem.nodeType && isHidden( elem ),\n\t\tdataShow = dataPriv.get( elem, \"fxshow\" );\n\n\t// Handle queue: false promises\n\tif ( !opts.queue ) {\n\t\thooks = jQuery._queueHooks( elem, \"fx\" );\n\t\tif ( hooks.unqueued == null ) {\n\t\t\thooks.unqueued = 0;\n\t\t\toldfire = hooks.empty.fire;\n\t\t\thooks.empty.fire = function() {\n\t\t\t\tif ( !hooks.unqueued ) {\n\t\t\t\t\toldfire();\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t\thooks.unqueued++;\n\n\t\tanim.always( function() {\n\n\t\t\t// Ensure the complete handler is called before this completes\n\t\t\tanim.always( function() {\n\t\t\t\thooks.unqueued--;\n\t\t\t\tif ( !jQuery.queue( elem, \"fx\" ).length ) {\n\t\t\t\t\thooks.empty.fire();\n\t\t\t\t}\n\t\t\t} );\n\t\t} );\n\t}\n\n\t// Height/width overflow pass\n\tif ( elem.nodeType === 1 && ( \"height\" in props || \"width\" in props ) ) {\n\n\t\t// Make sure that nothing sneaks out\n\t\t// Record all 3 overflow attributes because IE9-10 do not\n\t\t// change the overflow attribute when overflowX and\n\t\t// overflowY are set to the same value\n\t\topts.overflow = [ style.overflow, style.overflowX, style.overflowY ];\n\n\t\t// Set display property to inline-block for height/width\n\t\t// animations on inline elements that are having width/height animated\n\t\tdisplay = jQuery.css( elem, \"display\" );\n\n\t\t// Test default display if display is currently \"none\"\n\t\tcheckDisplay = display === \"none\" ?\n\t\t\tdataPriv.get( elem, \"olddisplay\" ) || defaultDisplay( elem.nodeName ) : display;\n\n\t\tif ( checkDisplay === \"inline\" && jQuery.css( elem, \"float\" ) === \"none\" ) {\n\t\t\tstyle.display = \"inline-block\";\n\t\t}\n\t}\n\n\tif ( opts.overflow ) {\n\t\tstyle.overflow = \"hidden\";\n\t\tanim.always( function() {\n\t\t\tstyle.overflow = opts.overflow[ 0 ];\n\t\t\tstyle.overflowX = opts.overflow[ 1 ];\n\t\t\tstyle.overflowY = opts.overflow[ 2 ];\n\t\t} );\n\t}\n\n\t// show/hide pass\n\tfor ( prop in props ) {\n\t\tvalue = props[ prop ];\n\t\tif ( rfxtypes.exec( value ) ) {\n\t\t\tdelete props[ prop ];\n\t\t\ttoggle = toggle || value === \"toggle\";\n\t\t\tif ( value === ( hidden ? \"hide\" : \"show\" ) ) {\n\n\t\t\t\t// If there is dataShow left over from a stopped hide or show\n\t\t\t\t// and we are going to proceed with show, we should pretend to be hidden\n\t\t\t\tif ( value === \"show\" && dataShow && dataShow[ prop ] !== undefined ) {\n\t\t\t\t\thidden = true;\n\t\t\t\t} else {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t}\n\t\t\torig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop );\n\n\t\t// Any non-fx value stops us from restoring the original display value\n\t\t} else {\n\t\t\tdisplay = undefined;\n\t\t}\n\t}\n\n\tif ( !jQuery.isEmptyObject( orig ) ) {\n\t\tif ( dataShow ) {\n\t\t\tif ( \"hidden\" in dataShow ) {\n\t\t\t\thidden = dataShow.hidden;\n\t\t\t}\n\t\t} else {\n\t\t\tdataShow = dataPriv.access( elem, \"fxshow\", {} );\n\t\t}\n\n\t\t// Store state if its toggle - enables .stop().toggle() to \"reverse\"\n\t\tif ( toggle ) {\n\t\t\tdataShow.hidden = !hidden;\n\t\t}\n\t\tif ( hidden ) {\n\t\t\tjQuery( elem ).show();\n\t\t} else {\n\t\t\tanim.done( function() {\n\t\t\t\tjQuery( elem ).hide();\n\t\t\t} );\n\t\t}\n\t\tanim.done( function() {\n\t\t\tvar prop;\n\n\t\t\tdataPriv.remove( elem, \"fxshow\" );\n\t\t\tfor ( prop in orig ) {\n\t\t\t\tjQuery.style( elem, prop, orig[ prop ] );\n\t\t\t}\n\t\t} );\n\t\tfor ( prop in orig ) {\n\t\t\ttween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim );\n\n\t\t\tif ( !( prop in dataShow ) ) {\n\t\t\t\tdataShow[ prop ] = tween.start;\n\t\t\t\tif ( hidden ) {\n\t\t\t\t\ttween.end = tween.start;\n\t\t\t\t\ttween.start = prop === \"width\" || prop === \"height\" ? 1 : 0;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t// If this is a noop like .hide().hide(), restore an overwritten display value\n\t} else if ( ( display === \"none\" ? defaultDisplay( elem.nodeName ) : display ) === \"inline\" ) {\n\t\tstyle.display = display;\n\t}\n}\n\nfunction propFilter( props, specialEasing ) {\n\tvar index, name, easing, value, hooks;\n\n\t// camelCase, specialEasing and expand cssHook pass\n\tfor ( index in props ) {\n\t\tname = jQuery.camelCase( index );\n\t\teasing = specialEasing[ name ];\n\t\tvalue = props[ index ];\n\t\tif ( jQuery.isArray( value ) ) {\n\t\t\teasing = value[ 1 ];\n\t\t\tvalue = props[ index ] = value[ 0 ];\n\t\t}\n\n\t\tif ( index !== name ) {\n\t\t\tprops[ name ] = value;\n\t\t\tdelete props[ index ];\n\t\t}\n\n\t\thooks = jQuery.cssHooks[ name ];\n\t\tif ( hooks && \"expand\" in hooks ) {\n\t\t\tvalue = hooks.expand( value );\n\t\t\tdelete props[ name ];\n\n\t\t\t// Not quite $.extend, this won't overwrite existing keys.\n\t\t\t// Reusing 'index' because we have the correct \"name\"\n\t\t\tfor ( index in value ) {\n\t\t\t\tif ( !( index in props ) ) {\n\t\t\t\t\tprops[ index ] = value[ index ];\n\t\t\t\t\tspecialEasing[ index ] = easing;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tspecialEasing[ name ] = easing;\n\t\t}\n\t}\n}\n\nfunction Animation( elem, properties, options ) {\n\tvar result,\n\t\tstopped,\n\t\tindex = 0,\n\t\tlength = Animation.prefilters.length,\n\t\tdeferred = jQuery.Deferred().always( function() {\n\n\t\t\t// Don't match elem in the :animated selector\n\t\t\tdelete tick.elem;\n\t\t} ),\n\t\ttick = function() {\n\t\t\tif ( stopped ) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tvar currentTime = fxNow || createFxNow(),\n\t\t\t\tremaining = Math.max( 0, animation.startTime + animation.duration - currentTime ),\n\n\t\t\t\t// Support: Android 2.3\n\t\t\t\t// Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (#12497)\n\t\t\t\ttemp = remaining / animation.duration || 0,\n\t\t\t\tpercent = 1 - temp,\n\t\t\t\tindex = 0,\n\t\t\t\tlength = animation.tweens.length;\n\n\t\t\tfor ( ; index < length ; index++ ) {\n\t\t\t\tanimation.tweens[ index ].run( percent );\n\t\t\t}\n\n\t\t\tdeferred.notifyWith( elem, [ animation, percent, remaining ] );\n\n\t\t\tif ( percent < 1 && length ) {\n\t\t\t\treturn remaining;\n\t\t\t} else {\n\t\t\t\tdeferred.resolveWith( elem, [ animation ] );\n\t\t\t\treturn false;\n\t\t\t}\n\t\t},\n\t\tanimation = deferred.promise( {\n\t\t\telem: elem,\n\t\t\tprops: jQuery.extend( {}, properties ),\n\t\t\topts: jQuery.extend( true, {\n\t\t\t\tspecialEasing: {},\n\t\t\t\teasing: jQuery.easing._default\n\t\t\t}, options ),\n\t\t\toriginalProperties: properties,\n\t\t\toriginalOptions: options,\n\t\t\tstartTime: fxNow || createFxNow(),\n\t\t\tduration: options.duration,\n\t\t\ttweens: [],\n\t\t\tcreateTween: function( prop, end ) {\n\t\t\t\tvar tween = jQuery.Tween( elem, animation.opts, prop, end,\n\t\t\t\t\t\tanimation.opts.specialEasing[ prop ] || animation.opts.easing );\n\t\t\t\tanimation.tweens.push( tween );\n\t\t\t\treturn tween;\n\t\t\t},\n\t\t\tstop: function( gotoEnd ) {\n\t\t\t\tvar index = 0,\n\n\t\t\t\t\t// If we are going to the end, we want to run all the tweens\n\t\t\t\t\t// otherwise we skip this part\n\t\t\t\t\tlength = gotoEnd ? animation.tweens.length : 0;\n\t\t\t\tif ( stopped ) {\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t\tstopped = true;\n\t\t\t\tfor ( ; index < length ; index++ ) {\n\t\t\t\t\tanimation.tweens[ index ].run( 1 );\n\t\t\t\t}\n\n\t\t\t\t// Resolve when we played the last frame; otherwise, reject\n\t\t\t\tif ( gotoEnd ) {\n\t\t\t\t\tdeferred.notifyWith( elem, [ animation, 1, 0 ] );\n\t\t\t\t\tdeferred.resolveWith( elem, [ animation, gotoEnd ] );\n\t\t\t\t} else {\n\t\t\t\t\tdeferred.rejectWith( elem, [ animation, gotoEnd ] );\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} ),\n\t\tprops = animation.props;\n\n\tpropFilter( props, animation.opts.specialEasing );\n\n\tfor ( ; index < length ; index++ ) {\n\t\tresult = Animation.prefilters[ index ].call( animation, elem, props, animation.opts );\n\t\tif ( result ) {\n\t\t\tif ( jQuery.isFunction( result.stop ) ) {\n\t\t\t\tjQuery._queueHooks( animation.elem, animation.opts.queue ).stop =\n\t\t\t\t\tjQuery.proxy( result.stop, result );\n\t\t\t}\n\t\t\treturn result;\n\t\t}\n\t}\n\n\tjQuery.map( props, createTween, animation );\n\n\tif ( jQuery.isFunction( animation.opts.start ) ) {\n\t\tanimation.opts.start.call( elem, animation );\n\t}\n\n\tjQuery.fx.timer(\n\t\tjQuery.extend( tick, {\n\t\t\telem: elem,\n\t\t\tanim: animation,\n\t\t\tqueue: animation.opts.queue\n\t\t} )\n\t);\n\n\t// attach callbacks from options\n\treturn animation.progress( animation.opts.progress )\n\t\t.done( animation.opts.done, animation.opts.complete )\n\t\t.fail( animation.opts.fail )\n\t\t.always( animation.opts.always );\n}\n\njQuery.Animation = jQuery.extend( Animation, {\n\ttweeners: {\n\t\t\"*\": [ function( prop, value ) {\n\t\t\tvar tween = this.createTween( prop, value );\n\t\t\tadjustCSS( tween.elem, prop, rcssNum.exec( value ), tween );\n\t\t\treturn tween;\n\t\t} ]\n\t},\n\n\ttweener: function( props, callback ) {\n\t\tif ( jQuery.isFunction( props ) ) {\n\t\t\tcallback = props;\n\t\t\tprops = [ \"*\" ];\n\t\t} else {\n\t\t\tprops = props.match( rnotwhite );\n\t\t}\n\n\t\tvar prop,\n\t\t\tindex = 0,\n\t\t\tlength = props.length;\n\n\t\tfor ( ; index < length ; index++ ) {\n\t\t\tprop = props[ index ];\n\t\t\tAnimation.tweeners[ prop ] = Animation.tweeners[ prop ] || [];\n\t\t\tAnimation.tweeners[ prop ].unshift( callback );\n\t\t}\n\t},\n\n\tprefilters: [ defaultPrefilter ],\n\n\tprefilter: function( callback, prepend ) {\n\t\tif ( prepend ) {\n\t\t\tAnimation.prefilters.unshift( callback );\n\t\t} else {\n\t\t\tAnimation.prefilters.push( callback );\n\t\t}\n\t}\n} );\n\njQuery.speed = function( speed, easing, fn ) {\n\tvar opt = speed && typeof speed === \"object\" ? jQuery.extend( {}, speed ) : {\n\t\tcomplete: fn || !fn && easing ||\n\t\t\tjQuery.isFunction( speed ) && speed,\n\t\tduration: speed,\n\t\teasing: fn && easing || easing && !jQuery.isFunction( easing ) && easing\n\t};\n\n\topt.duration = jQuery.fx.off ? 0 : typeof opt.duration === \"number\" ?\n\t\topt.duration : opt.duration in jQuery.fx.speeds ?\n\t\t\tjQuery.fx.speeds[ opt.duration ] : jQuery.fx.speeds._default;\n\n\t// Normalize opt.queue - true/undefined/null -> \"fx\"\n\tif ( opt.queue == null || opt.queue === true ) {\n\t\topt.queue = \"fx\";\n\t}\n\n\t// Queueing\n\topt.old = opt.complete;\n\n\topt.complete = function() {\n\t\tif ( jQuery.isFunction( opt.old ) ) {\n\t\t\topt.old.call( this );\n\t\t}\n\n\t\tif ( opt.queue ) {\n\t\t\tjQuery.dequeue( this, opt.queue );\n\t\t}\n\t};\n\n\treturn opt;\n};\n\njQuery.fn.extend( {\n\tfadeTo: function( speed, to, easing, callback ) {\n\n\t\t// Show any hidden elements after setting opacity to 0\n\t\treturn this.filter( isHidden ).css( \"opacity\", 0 ).show()\n\n\t\t\t// Animate to the value specified\n\t\t\t.end().animate( { opacity: to }, speed, easing, callback );\n\t},\n\tanimate: function( prop, speed, easing, callback ) {\n\t\tvar empty = jQuery.isEmptyObject( prop ),\n\t\t\toptall = jQuery.speed( speed, easing, callback ),\n\t\t\tdoAnimation = function() {\n\n\t\t\t\t// Operate on a copy of prop so per-property easing won't be lost\n\t\t\t\tvar anim = Animation( this, jQuery.extend( {}, prop ), optall );\n\n\t\t\t\t// Empty animations, or finishing resolves immediately\n\t\t\t\tif ( empty || dataPriv.get( this, \"finish\" ) ) {\n\t\t\t\t\tanim.stop( true );\n\t\t\t\t}\n\t\t\t};\n\t\t\tdoAnimation.finish = doAnimation;\n\n\t\treturn empty || optall.queue === false ?\n\t\t\tthis.each( doAnimation ) :\n\t\t\tthis.queue( optall.queue, doAnimation );\n\t},\n\tstop: function( type, clearQueue, gotoEnd ) {\n\t\tvar stopQueue = function( hooks ) {\n\t\t\tvar stop = hooks.stop;\n\t\t\tdelete hooks.stop;\n\t\t\tstop( gotoEnd );\n\t\t};\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tgotoEnd = clearQueue;\n\t\t\tclearQueue = type;\n\t\t\ttype = undefined;\n\t\t}\n\t\tif ( clearQueue && type !== false ) {\n\t\t\tthis.queue( type || \"fx\", [] );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar dequeue = true,\n\t\t\t\tindex = type != null && type + \"queueHooks\",\n\t\t\t\ttimers = jQuery.timers,\n\t\t\t\tdata = dataPriv.get( this );\n\n\t\t\tif ( index ) {\n\t\t\t\tif ( data[ index ] && data[ index ].stop ) {\n\t\t\t\t\tstopQueue( data[ index ] );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfor ( index in data ) {\n\t\t\t\t\tif ( data[ index ] && data[ index ].stop && rrun.test( index ) ) {\n\t\t\t\t\t\tstopQueue( data[ index ] );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfor ( index = timers.length; index--; ) {\n\t\t\t\tif ( timers[ index ].elem === this &&\n\t\t\t\t\t( type == null || timers[ index ].queue === type ) ) {\n\n\t\t\t\t\ttimers[ index ].anim.stop( gotoEnd );\n\t\t\t\t\tdequeue = false;\n\t\t\t\t\ttimers.splice( index, 1 );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Start the next in the queue if the last step wasn't forced.\n\t\t\t// Timers currently will call their complete callbacks, which\n\t\t\t// will dequeue but only if they were gotoEnd.\n\t\t\tif ( dequeue || !gotoEnd ) {\n\t\t\t\tjQuery.dequeue( this, type );\n\t\t\t}\n\t\t} );\n\t},\n\tfinish: function( type ) {\n\t\tif ( type !== false ) {\n\t\t\ttype = type || \"fx\";\n\t\t}\n\t\treturn this.each( function() {\n\t\t\tvar index,\n\t\t\t\tdata = dataPriv.get( this ),\n\t\t\t\tqueue = data[ type + \"queue\" ],\n\t\t\t\thooks = data[ type + \"queueHooks\" ],\n\t\t\t\ttimers = jQuery.timers,\n\t\t\t\tlength = queue ? queue.length : 0;\n\n\t\t\t// Enable finishing flag on private data\n\t\t\tdata.finish = true;\n\n\t\t\t// Empty the queue first\n\t\t\tjQuery.queue( this, type, [] );\n\n\t\t\tif ( hooks && hooks.stop ) {\n\t\t\t\thooks.stop.call( this, true );\n\t\t\t}\n\n\t\t\t// Look for any active animations, and finish them\n\t\t\tfor ( index = timers.length; index--; ) {\n\t\t\t\tif ( timers[ index ].elem === this && timers[ index ].queue === type ) {\n\t\t\t\t\ttimers[ index ].anim.stop( true );\n\t\t\t\t\ttimers.splice( index, 1 );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Look for any animations in the old queue and finish them\n\t\t\tfor ( index = 0; index < length; index++ ) {\n\t\t\t\tif ( queue[ index ] && queue[ index ].finish ) {\n\t\t\t\t\tqueue[ index ].finish.call( this );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Turn off finishing flag\n\t\t\tdelete data.finish;\n\t\t} );\n\t}\n} );\n\njQuery.each( [ \"toggle\", \"show\", \"hide\" ], function( i, name ) {\n\tvar cssFn = jQuery.fn[ name ];\n\tjQuery.fn[ name ] = function( speed, easing, callback ) {\n\t\treturn speed == null || typeof speed === \"boolean\" ?\n\t\t\tcssFn.apply( this, arguments ) :\n\t\t\tthis.animate( genFx( name, true ), speed, easing, callback );\n\t};\n} );\n\n// Generate shortcuts for custom animations\njQuery.each( {\n\tslideDown: genFx( \"show\" ),\n\tslideUp: genFx( \"hide\" ),\n\tslideToggle: genFx( \"toggle\" ),\n\tfadeIn: { opacity: \"show\" },\n\tfadeOut: { opacity: \"hide\" },\n\tfadeToggle: { opacity: \"toggle\" }\n}, function( name, props ) {\n\tjQuery.fn[ name ] = function( speed, easing, callback ) {\n\t\treturn this.animate( props, speed, easing, callback );\n\t};\n} );\n\njQuery.timers = [];\njQuery.fx.tick = function() {\n\tvar timer,\n\t\ti = 0,\n\t\ttimers = jQuery.timers;\n\n\tfxNow = jQuery.now();\n\n\tfor ( ; i < timers.length; i++ ) {\n\t\ttimer = timers[ i ];\n\n\t\t// Checks the timer has not already been removed\n\t\tif ( !timer() && timers[ i ] === timer ) {\n\t\t\ttimers.splice( i--, 1 );\n\t\t}\n\t}\n\n\tif ( !timers.length ) {\n\t\tjQuery.fx.stop();\n\t}\n\tfxNow = undefined;\n};\n\njQuery.fx.timer = function( timer ) {\n\tjQuery.timers.push( timer );\n\tif ( timer() ) {\n\t\tjQuery.fx.start();\n\t} else {\n\t\tjQuery.timers.pop();\n\t}\n};\n\njQuery.fx.interval = 13;\njQuery.fx.start = function() {\n\tif ( !timerId ) {\n\t\ttimerId = window.setInterval( jQuery.fx.tick, jQuery.fx.interval );\n\t}\n};\n\njQuery.fx.stop = function() {\n\twindow.clearInterval( timerId );\n\n\ttimerId = null;\n};\n\njQuery.fx.speeds = {\n\tslow: 600,\n\tfast: 200,\n\n\t// Default speed\n\t_default: 400\n};\n\n\n// Based off of the plugin by Clint Helfers, with permission.\n// http://web.archive.org/web/20100324014747/http://blindsignals.com/index.php/2009/07/jquery-delay/\njQuery.fn.delay = function( time, type ) {\n\ttime = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;\n\ttype = type || \"fx\";\n\n\treturn this.queue( type, function( next, hooks ) {\n\t\tvar timeout = window.setTimeout( next, time );\n\t\thooks.stop = function() {\n\t\t\twindow.clearTimeout( timeout );\n\t\t};\n\t} );\n};\n\n\n( function() {\n\tvar input = document.createElement( \"input\" ),\n\t\tselect = document.createElement( \"select\" ),\n\t\topt = select.appendChild( document.createElement( \"option\" ) );\n\n\tinput.type = \"checkbox\";\n\n\t// Support: iOS<=5.1, Android<=4.2+\n\t// Default value for a checkbox should be \"on\"\n\tsupport.checkOn = input.value !== \"\";\n\n\t// Support: IE<=11+\n\t// Must access selectedIndex to make default options select\n\tsupport.optSelected = opt.selected;\n\n\t// Support: Android<=2.3\n\t// Options inside disabled selects are incorrectly marked as disabled\n\tselect.disabled = true;\n\tsupport.optDisabled = !opt.disabled;\n\n\t// Support: IE<=11+\n\t// An input loses its value after becoming a radio\n\tinput = document.createElement( \"input\" );\n\tinput.value = \"t\";\n\tinput.type = \"radio\";\n\tsupport.radioValue = input.value === \"t\";\n} )();\n\n\nvar boolHook,\n\tattrHandle = jQuery.expr.attrHandle;\n\njQuery.fn.extend( {\n\tattr: function( name, value ) {\n\t\treturn access( this, jQuery.attr, name, value, arguments.length > 1 );\n\t},\n\n\tremoveAttr: function( name ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.removeAttr( this, name );\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tattr: function( elem, name, value ) {\n\t\tvar ret, hooks,\n\t\t\tnType = elem.nodeType;\n\n\t\t// Don't get/set attributes on text, comment and attribute nodes\n\t\tif ( nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Fallback to prop when attributes are not supported\n\t\tif ( typeof elem.getAttribute === \"undefined\" ) {\n\t\t\treturn jQuery.prop( elem, name, value );\n\t\t}\n\n\t\t// All attributes are lowercase\n\t\t// Grab necessary hook if one is defined\n\t\tif ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {\n\t\t\tname = name.toLowerCase();\n\t\t\thooks = jQuery.attrHooks[ name ] ||\n\t\t\t\t( jQuery.expr.match.bool.test( name ) ? boolHook : undefined );\n\t\t}\n\n\t\tif ( value !== undefined ) {\n\t\t\tif ( value === null ) {\n\t\t\t\tjQuery.removeAttr( elem, name );\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( hooks && \"set\" in hooks &&\n\t\t\t\t( ret = hooks.set( elem, value, name ) ) !== undefined ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\telem.setAttribute( name, value + \"\" );\n\t\t\treturn value;\n\t\t}\n\n\t\tif ( hooks && \"get\" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {\n\t\t\treturn ret;\n\t\t}\n\n\t\tret = jQuery.find.attr( elem, name );\n\n\t\t// Non-existent attributes return null, we normalize to undefined\n\t\treturn ret == null ? undefined : ret;\n\t},\n\n\tattrHooks: {\n\t\ttype: {\n\t\t\tset: function( elem, value ) {\n\t\t\t\tif ( !support.radioValue && value === \"radio\" &&\n\t\t\t\t\tjQuery.nodeName( elem, \"input\" ) ) {\n\t\t\t\t\tvar val = elem.value;\n\t\t\t\t\telem.setAttribute( \"type\", value );\n\t\t\t\t\tif ( val ) {\n\t\t\t\t\t\telem.value = val;\n\t\t\t\t\t}\n\t\t\t\t\treturn value;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\tremoveAttr: function( elem, value ) {\n\t\tvar name, propName,\n\t\t\ti = 0,\n\t\t\tattrNames = value && value.match( rnotwhite );\n\n\t\tif ( attrNames && elem.nodeType === 1 ) {\n\t\t\twhile ( ( name = attrNames[ i++ ] ) ) {\n\t\t\t\tpropName = jQuery.propFix[ name ] || name;\n\n\t\t\t\t// Boolean attributes get special treatment (#10870)\n\t\t\t\tif ( jQuery.expr.match.bool.test( name ) ) {\n\n\t\t\t\t\t// Set corresponding property to false\n\t\t\t\t\telem[ propName ] = false;\n\t\t\t\t}\n\n\t\t\t\telem.removeAttribute( name );\n\t\t\t}\n\t\t}\n\t}\n} );\n\n// Hooks for boolean attributes\nboolHook = {\n\tset: function( elem, value, name ) {\n\t\tif ( value === false ) {\n\n\t\t\t// Remove boolean attributes when set to false\n\t\t\tjQuery.removeAttr( elem, name );\n\t\t} else {\n\t\t\telem.setAttribute( name, name );\n\t\t}\n\t\treturn name;\n\t}\n};\njQuery.each( jQuery.expr.match.bool.source.match( /\\w+/g ), function( i, name ) {\n\tvar getter = attrHandle[ name ] || jQuery.find.attr;\n\n\tattrHandle[ name ] = function( elem, name, isXML ) {\n\t\tvar ret, handle;\n\t\tif ( !isXML ) {\n\n\t\t\t// Avoid an infinite loop by temporarily removing this function from the getter\n\t\t\thandle = attrHandle[ name ];\n\t\t\tattrHandle[ name ] = ret;\n\t\t\tret = getter( elem, name, isXML ) != null ?\n\t\t\t\tname.toLowerCase() :\n\t\t\t\tnull;\n\t\t\tattrHandle[ name ] = handle;\n\t\t}\n\t\treturn ret;\n\t};\n} );\n\n\n\n\nvar rfocusable = /^(?:input|select|textarea|button)$/i,\n\trclickable = /^(?:a|area)$/i;\n\njQuery.fn.extend( {\n\tprop: function( name, value ) {\n\t\treturn access( this, jQuery.prop, name, value, arguments.length > 1 );\n\t},\n\n\tremoveProp: function( name ) {\n\t\treturn this.each( function() {\n\t\t\tdelete this[ jQuery.propFix[ name ] || name ];\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tprop: function( elem, name, value ) {\n\t\tvar ret, hooks,\n\t\t\tnType = elem.nodeType;\n\n\t\t// Don't get/set properties on text, comment and attribute nodes\n\t\tif ( nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {\n\n\t\t\t// Fix name and attach hooks\n\t\t\tname = jQuery.propFix[ name ] || name;\n\t\t\thooks = jQuery.propHooks[ name ];\n\t\t}\n\n\t\tif ( value !== undefined ) {\n\t\t\tif ( hooks && \"set\" in hooks &&\n\t\t\t\t( ret = hooks.set( elem, value, name ) ) !== undefined ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\treturn ( elem[ name ] = value );\n\t\t}\n\n\t\tif ( hooks && \"get\" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {\n\t\t\treturn ret;\n\t\t}\n\n\t\treturn elem[ name ];\n\t},\n\n\tpropHooks: {\n\t\ttabIndex: {\n\t\t\tget: function( elem ) {\n\n\t\t\t\t// elem.tabIndex doesn't always return the\n\t\t\t\t// correct value when it hasn't been explicitly set\n\t\t\t\t// http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/\n\t\t\t\t// Use proper attribute retrieval(#12072)\n\t\t\t\tvar tabindex = jQuery.find.attr( elem, \"tabindex\" );\n\n\t\t\t\treturn tabindex ?\n\t\t\t\t\tparseInt( tabindex, 10 ) :\n\t\t\t\t\trfocusable.test( elem.nodeName ) ||\n\t\t\t\t\t\trclickable.test( elem.nodeName ) && elem.href ?\n\t\t\t\t\t\t\t0 :\n\t\t\t\t\t\t\t-1;\n\t\t\t}\n\t\t}\n\t},\n\n\tpropFix: {\n\t\t\"for\": \"htmlFor\",\n\t\t\"class\": \"className\"\n\t}\n} );\n\n// Support: IE <=11 only\n// Accessing the selectedIndex property\n// forces the browser to respect setting selected\n// on the option\n// The getter ensures a default option is selected\n// when in an optgroup\nif ( !support.optSelected ) {\n\tjQuery.propHooks.selected = {\n\t\tget: function( elem ) {\n\t\t\tvar parent = elem.parentNode;\n\t\t\tif ( parent && parent.parentNode ) {\n\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t}\n\t\t\treturn null;\n\t\t},\n\t\tset: function( elem ) {\n\t\t\tvar parent = elem.parentNode;\n\t\t\tif ( parent ) {\n\t\t\t\tparent.selectedIndex;\n\n\t\t\t\tif ( parent.parentNode ) {\n\t\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n}\n\njQuery.each( [\n\t\"tabIndex\",\n\t\"readOnly\",\n\t\"maxLength\",\n\t\"cellSpacing\",\n\t\"cellPadding\",\n\t\"rowSpan\",\n\t\"colSpan\",\n\t\"useMap\",\n\t\"frameBorder\",\n\t\"contentEditable\"\n], function() {\n\tjQuery.propFix[ this.toLowerCase() ] = this;\n} );\n\n\n\n\nvar rclass = /[\\t\\r\\n\\f]/g;\n\nfunction getClass( elem ) {\n\treturn elem.getAttribute && elem.getAttribute( \"class\" ) || \"\";\n}\n\njQuery.fn.extend( {\n\taddClass: function( value ) {\n\t\tvar classes, elem, cur, curValue, clazz, j, finalValue,\n\t\t\ti = 0;\n\n\t\tif ( jQuery.isFunction( value ) ) {\n\t\t\treturn this.each( function( j ) {\n\t\t\t\tjQuery( this ).addClass( value.call( this, j, getClass( this ) ) );\n\t\t\t} );\n\t\t}\n\n\t\tif ( typeof value === \"string\" && value ) {\n\t\t\tclasses = value.match( rnotwhite ) || [];\n\n\t\t\twhile ( ( elem = this[ i++ ] ) ) {\n\t\t\t\tcurValue = getClass( elem );\n\t\t\t\tcur = elem.nodeType === 1 &&\n\t\t\t\t\t( \" \" + curValue + \" \" ).replace( rclass, \" \" );\n\n\t\t\t\tif ( cur ) {\n\t\t\t\t\tj = 0;\n\t\t\t\t\twhile ( ( clazz = classes[ j++ ] ) ) {\n\t\t\t\t\t\tif ( cur.indexOf( \" \" + clazz + \" \" ) < 0 ) {\n\t\t\t\t\t\t\tcur += clazz + \" \";\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Only assign if different to avoid unneeded rendering.\n\t\t\t\t\tfinalValue = jQuery.trim( cur );\n\t\t\t\t\tif ( curValue !== finalValue ) {\n\t\t\t\t\t\telem.setAttribute( \"class\", finalValue );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tremoveClass: function( value ) {\n\t\tvar classes, elem, cur, curValue, clazz, j, finalValue,\n\t\t\ti = 0;\n\n\t\tif ( jQuery.isFunction( value ) ) {\n\t\t\treturn this.each( function( j ) {\n\t\t\t\tjQuery( this ).removeClass( value.call( this, j, getClass( this ) ) );\n\t\t\t} );\n\t\t}\n\n\t\tif ( !arguments.length ) {\n\t\t\treturn this.attr( \"class\", \"\" );\n\t\t}\n\n\t\tif ( typeof value === \"string\" && value ) {\n\t\t\tclasses = value.match( rnotwhite ) || [];\n\n\t\t\twhile ( ( elem = this[ i++ ] ) ) {\n\t\t\t\tcurValue = getClass( elem );\n\n\t\t\t\t// This expression is here for better compressibility (see addClass)\n\t\t\t\tcur = elem.nodeType === 1 &&\n\t\t\t\t\t( \" \" + curValue + \" \" ).replace( rclass, \" \" );\n\n\t\t\t\tif ( cur ) {\n\t\t\t\t\tj = 0;\n\t\t\t\t\twhile ( ( clazz = classes[ j++ ] ) ) {\n\n\t\t\t\t\t\t// Remove *all* instances\n\t\t\t\t\t\twhile ( cur.indexOf( \" \" + clazz + \" \" ) > -1 ) {\n\t\t\t\t\t\t\tcur = cur.replace( \" \" + clazz + \" \", \" \" );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Only assign if different to avoid unneeded rendering.\n\t\t\t\t\tfinalValue = jQuery.trim( cur );\n\t\t\t\t\tif ( curValue !== finalValue ) {\n\t\t\t\t\t\telem.setAttribute( \"class\", finalValue );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\ttoggleClass: function( value, stateVal ) {\n\t\tvar type = typeof value;\n\n\t\tif ( typeof stateVal === \"boolean\" && type === \"string\" ) {\n\t\t\treturn stateVal ? this.addClass( value ) : this.removeClass( value );\n\t\t}\n\n\t\tif ( jQuery.isFunction( value ) ) {\n\t\t\treturn this.each( function( i ) {\n\t\t\t\tjQuery( this ).toggleClass(\n\t\t\t\t\tvalue.call( this, i, getClass( this ), stateVal ),\n\t\t\t\t\tstateVal\n\t\t\t\t);\n\t\t\t} );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar className, i, self, classNames;\n\n\t\t\tif ( type === \"string\" ) {\n\n\t\t\t\t// Toggle individual class names\n\t\t\t\ti = 0;\n\t\t\t\tself = jQuery( this );\n\t\t\t\tclassNames = value.match( rnotwhite ) || [];\n\n\t\t\t\twhile ( ( className = classNames[ i++ ] ) ) {\n\n\t\t\t\t\t// Check each className given, space separated list\n\t\t\t\t\tif ( self.hasClass( className ) ) {\n\t\t\t\t\t\tself.removeClass( className );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tself.addClass( className );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t// Toggle whole class name\n\t\t\t} else if ( value === undefined || type === \"boolean\" ) {\n\t\t\t\tclassName = getClass( this );\n\t\t\t\tif ( className ) {\n\n\t\t\t\t\t// Store className if set\n\t\t\t\t\tdataPriv.set( this, \"__className__\", className );\n\t\t\t\t}\n\n\t\t\t\t// If the element has a class name or if we're passed `false`,\n\t\t\t\t// then remove the whole classname (if there was one, the above saved it).\n\t\t\t\t// Otherwise bring back whatever was previously saved (if anything),\n\t\t\t\t// falling back to the empty string if nothing was stored.\n\t\t\t\tif ( this.setAttribute ) {\n\t\t\t\t\tthis.setAttribute( \"class\",\n\t\t\t\t\t\tclassName || value === false ?\n\t\t\t\t\t\t\"\" :\n\t\t\t\t\t\tdataPriv.get( this, \"__className__\" ) || \"\"\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t},\n\n\thasClass: function( selector ) {\n\t\tvar className, elem,\n\t\t\ti = 0;\n\n\t\tclassName = \" \" + selector + \" \";\n\t\twhile ( ( elem = this[ i++ ] ) ) {\n\t\t\tif ( elem.nodeType === 1 &&\n\t\t\t\t( \" \" + getClass( elem ) + \" \" ).replace( rclass, \" \" )\n\t\t\t\t\t.indexOf( className ) > -1\n\t\t\t) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n} );\n\n\n\n\nvar rreturn = /\\r/g,\n\trspaces = /[\\x20\\t\\r\\n\\f]+/g;\n\njQuery.fn.extend( {\n\tval: function( value ) {\n\t\tvar hooks, ret, isFunction,\n\t\t\telem = this[ 0 ];\n\n\t\tif ( !arguments.length ) {\n\t\t\tif ( elem ) {\n\t\t\t\thooks = jQuery.valHooks[ elem.type ] ||\n\t\t\t\t\tjQuery.valHooks[ elem.nodeName.toLowerCase() ];\n\n\t\t\t\tif ( hooks &&\n\t\t\t\t\t\"get\" in hooks &&\n\t\t\t\t\t( ret = hooks.get( elem, \"value\" ) ) !== undefined\n\t\t\t\t) {\n\t\t\t\t\treturn ret;\n\t\t\t\t}\n\n\t\t\t\tret = elem.value;\n\n\t\t\t\treturn typeof ret === \"string\" ?\n\n\t\t\t\t\t// Handle most common string cases\n\t\t\t\t\tret.replace( rreturn, \"\" ) :\n\n\t\t\t\t\t// Handle cases where value is null/undef or number\n\t\t\t\t\tret == null ? \"\" : ret;\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\t\tisFunction = jQuery.isFunction( value );\n\n\t\treturn this.each( function( i ) {\n\t\t\tvar val;\n\n\t\t\tif ( this.nodeType !== 1 ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( isFunction ) {\n\t\t\t\tval = value.call( this, i, jQuery( this ).val() );\n\t\t\t} else {\n\t\t\t\tval = value;\n\t\t\t}\n\n\t\t\t// Treat null/undefined as \"\"; convert numbers to string\n\t\t\tif ( val == null ) {\n\t\t\t\tval = \"\";\n\n\t\t\t} else if ( typeof val === \"number\" ) {\n\t\t\t\tval += \"\";\n\n\t\t\t} else if ( jQuery.isArray( val ) ) {\n\t\t\t\tval = jQuery.map( val, function( value ) {\n\t\t\t\t\treturn value == null ? \"\" : value + \"\";\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\thooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ];\n\n\t\t\t// If set returns undefined, fall back to normal setting\n\t\t\tif ( !hooks || !( \"set\" in hooks ) || hooks.set( this, val, \"value\" ) === undefined ) {\n\t\t\t\tthis.value = val;\n\t\t\t}\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tvalHooks: {\n\t\toption: {\n\t\t\tget: function( elem ) {\n\n\t\t\t\tvar val = jQuery.find.attr( elem, \"value\" );\n\t\t\t\treturn val != null ?\n\t\t\t\t\tval :\n\n\t\t\t\t\t// Support: IE10-11+\n\t\t\t\t\t// option.text throws exceptions (#14686, #14858)\n\t\t\t\t\t// Strip and collapse whitespace\n\t\t\t\t\t// https://html.spec.whatwg.org/#strip-and-collapse-whitespace\n\t\t\t\t\tjQuery.trim( jQuery.text( elem ) ).replace( rspaces, \" \" );\n\t\t\t}\n\t\t},\n\t\tselect: {\n\t\t\tget: function( elem ) {\n\t\t\t\tvar value, option,\n\t\t\t\t\toptions = elem.options,\n\t\t\t\t\tindex = elem.selectedIndex,\n\t\t\t\t\tone = elem.type === \"select-one\" || index < 0,\n\t\t\t\t\tvalues = one ? null : [],\n\t\t\t\t\tmax = one ? index + 1 : options.length,\n\t\t\t\t\ti = index < 0 ?\n\t\t\t\t\t\tmax :\n\t\t\t\t\t\tone ? index : 0;\n\n\t\t\t\t// Loop through all the selected options\n\t\t\t\tfor ( ; i < max; i++ ) {\n\t\t\t\t\toption = options[ i ];\n\n\t\t\t\t\t// IE8-9 doesn't update selected after form reset (#2551)\n\t\t\t\t\tif ( ( option.selected || i === index ) &&\n\n\t\t\t\t\t\t\t// Don't return options that are disabled or in a disabled optgroup\n\t\t\t\t\t\t\t( support.optDisabled ?\n\t\t\t\t\t\t\t\t!option.disabled : option.getAttribute( \"disabled\" ) === null ) &&\n\t\t\t\t\t\t\t( !option.parentNode.disabled ||\n\t\t\t\t\t\t\t\t!jQuery.nodeName( option.parentNode, \"optgroup\" ) ) ) {\n\n\t\t\t\t\t\t// Get the specific value for the option\n\t\t\t\t\t\tvalue = jQuery( option ).val();\n\n\t\t\t\t\t\t// We don't need an array for one selects\n\t\t\t\t\t\tif ( one ) {\n\t\t\t\t\t\t\treturn value;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Multi-Selects return an array\n\t\t\t\t\t\tvalues.push( value );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn values;\n\t\t\t},\n\n\t\t\tset: function( elem, value ) {\n\t\t\t\tvar optionSet, option,\n\t\t\t\t\toptions = elem.options,\n\t\t\t\t\tvalues = jQuery.makeArray( value ),\n\t\t\t\t\ti = options.length;\n\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\toption = options[ i ];\n\t\t\t\t\tif ( option.selected =\n\t\t\t\t\t\tjQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1\n\t\t\t\t\t) {\n\t\t\t\t\t\toptionSet = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Force browsers to behave consistently when non-matching value is set\n\t\t\t\tif ( !optionSet ) {\n\t\t\t\t\telem.selectedIndex = -1;\n\t\t\t\t}\n\t\t\t\treturn values;\n\t\t\t}\n\t\t}\n\t}\n} );\n\n// Radios and checkboxes getter/setter\njQuery.each( [ \"radio\", \"checkbox\" ], function() {\n\tjQuery.valHooks[ this ] = {\n\t\tset: function( elem, value ) {\n\t\t\tif ( jQuery.isArray( value ) ) {\n\t\t\t\treturn ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 );\n\t\t\t}\n\t\t}\n\t};\n\tif ( !support.checkOn ) {\n\t\tjQuery.valHooks[ this ].get = function( elem ) {\n\t\t\treturn elem.getAttribute( \"value\" ) === null ? \"on\" : elem.value;\n\t\t};\n\t}\n} );\n\n\n\n\n// Return jQuery for attributes-only inclusion\n\n\nvar rfocusMorph = /^(?:focusinfocus|focusoutblur)$/;\n\njQuery.extend( jQuery.event, {\n\n\ttrigger: function( event, data, elem, onlyHandlers ) {\n\n\t\tvar i, cur, tmp, bubbleType, ontype, handle, special,\n\t\t\teventPath = [ elem || document ],\n\t\t\ttype = hasOwn.call( event, \"type\" ) ? event.type : event,\n\t\t\tnamespaces = hasOwn.call( event, \"namespace\" ) ? event.namespace.split( \".\" ) : [];\n\n\t\tcur = tmp = elem = elem || document;\n\n\t\t// Don't do events on text and comment nodes\n\t\tif ( elem.nodeType === 3 || elem.nodeType === 8 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// focus/blur morphs to focusin/out; ensure we're not firing them right now\n\t\tif ( rfocusMorph.test( type + jQuery.event.triggered ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( type.indexOf( \".\" ) > -1 ) {\n\n\t\t\t// Namespaced trigger; create a regexp to match event type in handle()\n\t\t\tnamespaces = type.split( \".\" );\n\t\t\ttype = namespaces.shift();\n\t\t\tnamespaces.sort();\n\t\t}\n\t\tontype = type.indexOf( \":\" ) < 0 && \"on\" + type;\n\n\t\t// Caller can pass in a jQuery.Event object, Object, or just an event type string\n\t\tevent = event[ jQuery.expando ] ?\n\t\t\tevent :\n\t\t\tnew jQuery.Event( type, typeof event === \"object\" && event );\n\n\t\t// Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true)\n\t\tevent.isTrigger = onlyHandlers ? 2 : 3;\n\t\tevent.namespace = namespaces.join( \".\" );\n\t\tevent.rnamespace = event.namespace ?\n\t\t\tnew RegExp( \"(^|\\\\.)\" + namespaces.join( \"\\\\.(?:.*\\\\.|)\" ) + \"(\\\\.|$)\" ) :\n\t\t\tnull;\n\n\t\t// Clean up the event in case it is being reused\n\t\tevent.result = undefined;\n\t\tif ( !event.target ) {\n\t\t\tevent.target = elem;\n\t\t}\n\n\t\t// Clone any incoming data and prepend the event, creating the handler arg list\n\t\tdata = data == null ?\n\t\t\t[ event ] :\n\t\t\tjQuery.makeArray( data, [ event ] );\n\n\t\t// Allow special events to draw outside the lines\n\t\tspecial = jQuery.event.special[ type ] || {};\n\t\tif ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Determine event propagation path in advance, per W3C events spec (#9951)\n\t\t// Bubble up to document, then to window; watch for a global ownerDocument var (#9724)\n\t\tif ( !onlyHandlers && !special.noBubble && !jQuery.isWindow( elem ) ) {\n\n\t\t\tbubbleType = special.delegateType || type;\n\t\t\tif ( !rfocusMorph.test( bubbleType + type ) ) {\n\t\t\t\tcur = cur.parentNode;\n\t\t\t}\n\t\t\tfor ( ; cur; cur = cur.parentNode ) {\n\t\t\t\teventPath.push( cur );\n\t\t\t\ttmp = cur;\n\t\t\t}\n\n\t\t\t// Only add window if we got to document (e.g., not plain obj or detached DOM)\n\t\t\tif ( tmp === ( elem.ownerDocument || document ) ) {\n\t\t\t\teventPath.push( tmp.defaultView || tmp.parentWindow || window );\n\t\t\t}\n\t\t}\n\n\t\t// Fire handlers on the event path\n\t\ti = 0;\n\t\twhile ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) {\n\n\t\t\tevent.type = i > 1 ?\n\t\t\t\tbubbleType :\n\t\t\t\tspecial.bindType || type;\n\n\t\t\t// jQuery handler\n\t\t\thandle = ( dataPriv.get( cur, \"events\" ) || {} )[ event.type ] &&\n\t\t\t\tdataPriv.get( cur, \"handle\" );\n\t\t\tif ( handle ) {\n\t\t\t\thandle.apply( cur, data );\n\t\t\t}\n\n\t\t\t// Native handler\n\t\t\thandle = ontype && cur[ ontype ];\n\t\t\tif ( handle && handle.apply && acceptData( cur ) ) {\n\t\t\t\tevent.result = handle.apply( cur, data );\n\t\t\t\tif ( event.result === false ) {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tevent.type = type;\n\n\t\t// If nobody prevented the default action, do it now\n\t\tif ( !onlyHandlers && !event.isDefaultPrevented() ) {\n\n\t\t\tif ( ( !special._default ||\n\t\t\t\tspecial._default.apply( eventPath.pop(), data ) === false ) &&\n\t\t\t\tacceptData( elem ) ) {\n\n\t\t\t\t// Call a native DOM method on the target with the same name name as the event.\n\t\t\t\t// Don't do default actions on window, that's where global variables be (#6170)\n\t\t\t\tif ( ontype && jQuery.isFunction( elem[ type ] ) && !jQuery.isWindow( elem ) ) {\n\n\t\t\t\t\t// Don't re-trigger an onFOO event when we call its FOO() method\n\t\t\t\t\ttmp = elem[ ontype ];\n\n\t\t\t\t\tif ( tmp ) {\n\t\t\t\t\t\telem[ ontype ] = null;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Prevent re-triggering of the same event, since we already bubbled it above\n\t\t\t\t\tjQuery.event.triggered = type;\n\t\t\t\t\telem[ type ]();\n\t\t\t\t\tjQuery.event.triggered = undefined;\n\n\t\t\t\t\tif ( tmp ) {\n\t\t\t\t\t\telem[ ontype ] = tmp;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn event.result;\n\t},\n\n\t// Piggyback on a donor event to simulate a different one\n\tsimulate: function( type, elem, event ) {\n\t\tvar e = jQuery.extend(\n\t\t\tnew jQuery.Event(),\n\t\t\tevent,\n\t\t\t{\n\t\t\t\ttype: type,\n\t\t\t\tisSimulated: true\n\n\t\t\t\t// Previously, `originalEvent: {}` was set here, so stopPropagation call\n\t\t\t\t// would not be triggered on donor event, since in our own\n\t\t\t\t// jQuery.event.stopPropagation function we had a check for existence of\n\t\t\t\t// originalEvent.stopPropagation method, so, consequently it would be a noop.\n\t\t\t\t//\n\t\t\t\t// But now, this \"simulate\" function is used only for events\n\t\t\t\t// for which stopPropagation() is noop, so there is no need for that anymore.\n\t\t\t\t//\n\t\t\t\t// For the 1.x branch though, guard for \"click\" and \"submit\"\n\t\t\t\t// events is still used, but was moved to jQuery.event.stopPropagation function\n\t\t\t\t// because `originalEvent` should point to the original event for the constancy\n\t\t\t\t// with other events and for more focused logic\n\t\t\t}\n\t\t);\n\n\t\tjQuery.event.trigger( e, null, elem );\n\n\t\tif ( e.isDefaultPrevented() ) {\n\t\t\tevent.preventDefault();\n\t\t}\n\t}\n\n} );\n\njQuery.fn.extend( {\n\n\ttrigger: function( type, data ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.event.trigger( type, data, this );\n\t\t} );\n\t},\n\ttriggerHandler: function( type, data ) {\n\t\tvar elem = this[ 0 ];\n\t\tif ( elem ) {\n\t\t\treturn jQuery.event.trigger( type, data, elem, true );\n\t\t}\n\t}\n} );\n\n\njQuery.each( ( \"blur focus focusin focusout load resize scroll unload click dblclick \" +\n\t\"mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave \" +\n\t\"change select submit keydown keypress keyup error contextmenu\" ).split( \" \" ),\n\tfunction( i, name ) {\n\n\t// Handle event binding\n\tjQuery.fn[ name ] = function( data, fn ) {\n\t\treturn arguments.length > 0 ?\n\t\t\tthis.on( name, null, data, fn ) :\n\t\t\tthis.trigger( name );\n\t};\n} );\n\njQuery.fn.extend( {\n\thover: function( fnOver, fnOut ) {\n\t\treturn this.mouseenter( fnOver ).mouseleave( fnOut || fnOver );\n\t}\n} );\n\n\n\n\nsupport.focusin = \"onfocusin\" in window;\n\n\n// Support: Firefox\n// Firefox doesn't have focus(in | out) events\n// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787\n//\n// Support: Chrome, Safari\n// focus(in | out) events fire after focus & blur events,\n// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order\n// Related ticket - https://code.google.com/p/chromium/issues/detail?id=449857\nif ( !support.focusin ) {\n\tjQuery.each( { focus: \"focusin\", blur: \"focusout\" }, function( orig, fix ) {\n\n\t\t// Attach a single capturing handler on the document while someone wants focusin/focusout\n\t\tvar handler = function( event ) {\n\t\t\tjQuery.event.simulate( fix, event.target, jQuery.event.fix( event ) );\n\t\t};\n\n\t\tjQuery.event.special[ fix ] = {\n\t\t\tsetup: function() {\n\t\t\t\tvar doc = this.ownerDocument || this,\n\t\t\t\t\tattaches = dataPriv.access( doc, fix );\n\n\t\t\t\tif ( !attaches ) {\n\t\t\t\t\tdoc.addEventListener( orig, handler, true );\n\t\t\t\t}\n\t\t\t\tdataPriv.access( doc, fix, ( attaches || 0 ) + 1 );\n\t\t\t},\n\t\t\tteardown: function() {\n\t\t\t\tvar doc = this.ownerDocument || this,\n\t\t\t\t\tattaches = dataPriv.access( doc, fix ) - 1;\n\n\t\t\t\tif ( !attaches ) {\n\t\t\t\t\tdoc.removeEventListener( orig, handler, true );\n\t\t\t\t\tdataPriv.remove( doc, fix );\n\n\t\t\t\t} else {\n\t\t\t\t\tdataPriv.access( doc, fix, attaches );\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t} );\n}\nvar location = window.location;\n\nvar nonce = jQuery.now();\n\nvar rquery = ( /\\?/ );\n\n\n\n// Support: Android 2.3\n// Workaround failure to string-cast null input\njQuery.parseJSON = function( data ) {\n\treturn JSON.parse( data + \"\" );\n};\n\n\n// Cross-browser xml parsing\njQuery.parseXML = function( data ) {\n\tvar xml;\n\tif ( !data || typeof data !== \"string\" ) {\n\t\treturn null;\n\t}\n\n\t// Support: IE9\n\ttry {\n\t\txml = ( new window.DOMParser() ).parseFromString( data, \"text/xml\" );\n\t} catch ( e ) {\n\t\txml = undefined;\n\t}\n\n\tif ( !xml || xml.getElementsByTagName( \"parsererror\" ).length ) {\n\t\tjQuery.error( \"Invalid XML: \" + data );\n\t}\n\treturn xml;\n};\n\n\nvar\n\trhash = /#.*$/,\n\trts = /([?&])_=[^&]*/,\n\trheaders = /^(.*?):[ \\t]*([^\\r\\n]*)$/mg,\n\n\t// #7653, #8125, #8152: local protocol detection\n\trlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,\n\trnoContent = /^(?:GET|HEAD)$/,\n\trprotocol = /^\\/\\//,\n\n\t/* Prefilters\n\t * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)\n\t * 2) These are called:\n\t *    - BEFORE asking for a transport\n\t *    - AFTER param serialization (s.data is a string if s.processData is true)\n\t * 3) key is the dataType\n\t * 4) the catchall symbol \"*\" can be used\n\t * 5) execution will start with transport dataType and THEN continue down to \"*\" if needed\n\t */\n\tprefilters = {},\n\n\t/* Transports bindings\n\t * 1) key is the dataType\n\t * 2) the catchall symbol \"*\" can be used\n\t * 3) selection will start with transport dataType and THEN go to \"*\" if needed\n\t */\n\ttransports = {},\n\n\t// Avoid comment-prolog char sequence (#10098); must appease lint and evade compression\n\tallTypes = \"*/\".concat( \"*\" ),\n\n\t// Anchor tag for parsing the document origin\n\toriginAnchor = document.createElement( \"a\" );\n\toriginAnchor.href = location.href;\n\n// Base \"constructor\" for jQuery.ajaxPrefilter and jQuery.ajaxTransport\nfunction addToPrefiltersOrTransports( structure ) {\n\n\t// dataTypeExpression is optional and defaults to \"*\"\n\treturn function( dataTypeExpression, func ) {\n\n\t\tif ( typeof dataTypeExpression !== \"string\" ) {\n\t\t\tfunc = dataTypeExpression;\n\t\t\tdataTypeExpression = \"*\";\n\t\t}\n\n\t\tvar dataType,\n\t\t\ti = 0,\n\t\t\tdataTypes = dataTypeExpression.toLowerCase().match( rnotwhite ) || [];\n\n\t\tif ( jQuery.isFunction( func ) ) {\n\n\t\t\t// For each dataType in the dataTypeExpression\n\t\t\twhile ( ( dataType = dataTypes[ i++ ] ) ) {\n\n\t\t\t\t// Prepend if requested\n\t\t\t\tif ( dataType[ 0 ] === \"+\" ) {\n\t\t\t\t\tdataType = dataType.slice( 1 ) || \"*\";\n\t\t\t\t\t( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func );\n\n\t\t\t\t// Otherwise append\n\t\t\t\t} else {\n\t\t\t\t\t( structure[ dataType ] = structure[ dataType ] || [] ).push( func );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n}\n\n// Base inspection function for prefilters and transports\nfunction inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) {\n\n\tvar inspected = {},\n\t\tseekingTransport = ( structure === transports );\n\n\tfunction inspect( dataType ) {\n\t\tvar selected;\n\t\tinspected[ dataType ] = true;\n\t\tjQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) {\n\t\t\tvar dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR );\n\t\t\tif ( typeof dataTypeOrTransport === \"string\" &&\n\t\t\t\t!seekingTransport && !inspected[ dataTypeOrTransport ] ) {\n\n\t\t\t\toptions.dataTypes.unshift( dataTypeOrTransport );\n\t\t\t\tinspect( dataTypeOrTransport );\n\t\t\t\treturn false;\n\t\t\t} else if ( seekingTransport ) {\n\t\t\t\treturn !( selected = dataTypeOrTransport );\n\t\t\t}\n\t\t} );\n\t\treturn selected;\n\t}\n\n\treturn inspect( options.dataTypes[ 0 ] ) || !inspected[ \"*\" ] && inspect( \"*\" );\n}\n\n// A special extend for ajax options\n// that takes \"flat\" options (not to be deep extended)\n// Fixes #9887\nfunction ajaxExtend( target, src ) {\n\tvar key, deep,\n\t\tflatOptions = jQuery.ajaxSettings.flatOptions || {};\n\n\tfor ( key in src ) {\n\t\tif ( src[ key ] !== undefined ) {\n\t\t\t( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ];\n\t\t}\n\t}\n\tif ( deep ) {\n\t\tjQuery.extend( true, target, deep );\n\t}\n\n\treturn target;\n}\n\n/* Handles responses to an ajax request:\n * - finds the right dataType (mediates between content-type and expected dataType)\n * - returns the corresponding response\n */\nfunction ajaxHandleResponses( s, jqXHR, responses ) {\n\n\tvar ct, type, finalDataType, firstDataType,\n\t\tcontents = s.contents,\n\t\tdataTypes = s.dataTypes;\n\n\t// Remove auto dataType and get content-type in the process\n\twhile ( dataTypes[ 0 ] === \"*\" ) {\n\t\tdataTypes.shift();\n\t\tif ( ct === undefined ) {\n\t\t\tct = s.mimeType || jqXHR.getResponseHeader( \"Content-Type\" );\n\t\t}\n\t}\n\n\t// Check if we're dealing with a known content-type\n\tif ( ct ) {\n\t\tfor ( type in contents ) {\n\t\t\tif ( contents[ type ] && contents[ type ].test( ct ) ) {\n\t\t\t\tdataTypes.unshift( type );\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Check to see if we have a response for the expected dataType\n\tif ( dataTypes[ 0 ] in responses ) {\n\t\tfinalDataType = dataTypes[ 0 ];\n\t} else {\n\n\t\t// Try convertible dataTypes\n\t\tfor ( type in responses ) {\n\t\t\tif ( !dataTypes[ 0 ] || s.converters[ type + \" \" + dataTypes[ 0 ] ] ) {\n\t\t\t\tfinalDataType = type;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif ( !firstDataType ) {\n\t\t\t\tfirstDataType = type;\n\t\t\t}\n\t\t}\n\n\t\t// Or just use first one\n\t\tfinalDataType = finalDataType || firstDataType;\n\t}\n\n\t// If we found a dataType\n\t// We add the dataType to the list if needed\n\t// and return the corresponding response\n\tif ( finalDataType ) {\n\t\tif ( finalDataType !== dataTypes[ 0 ] ) {\n\t\t\tdataTypes.unshift( finalDataType );\n\t\t}\n\t\treturn responses[ finalDataType ];\n\t}\n}\n\n/* Chain conversions given the request and the original response\n * Also sets the responseXXX fields on the jqXHR instance\n */\nfunction ajaxConvert( s, response, jqXHR, isSuccess ) {\n\tvar conv2, current, conv, tmp, prev,\n\t\tconverters = {},\n\n\t\t// Work with a copy of dataTypes in case we need to modify it for conversion\n\t\tdataTypes = s.dataTypes.slice();\n\n\t// Create converters map with lowercased keys\n\tif ( dataTypes[ 1 ] ) {\n\t\tfor ( conv in s.converters ) {\n\t\t\tconverters[ conv.toLowerCase() ] = s.converters[ conv ];\n\t\t}\n\t}\n\n\tcurrent = dataTypes.shift();\n\n\t// Convert to each sequential dataType\n\twhile ( current ) {\n\n\t\tif ( s.responseFields[ current ] ) {\n\t\t\tjqXHR[ s.responseFields[ current ] ] = response;\n\t\t}\n\n\t\t// Apply the dataFilter if provided\n\t\tif ( !prev && isSuccess && s.dataFilter ) {\n\t\t\tresponse = s.dataFilter( response, s.dataType );\n\t\t}\n\n\t\tprev = current;\n\t\tcurrent = dataTypes.shift();\n\n\t\tif ( current ) {\n\n\t\t// There's only work to do if current dataType is non-auto\n\t\t\tif ( current === \"*\" ) {\n\n\t\t\t\tcurrent = prev;\n\n\t\t\t// Convert response if prev dataType is non-auto and differs from current\n\t\t\t} else if ( prev !== \"*\" && prev !== current ) {\n\n\t\t\t\t// Seek a direct converter\n\t\t\t\tconv = converters[ prev + \" \" + current ] || converters[ \"* \" + current ];\n\n\t\t\t\t// If none found, seek a pair\n\t\t\t\tif ( !conv ) {\n\t\t\t\t\tfor ( conv2 in converters ) {\n\n\t\t\t\t\t\t// If conv2 outputs current\n\t\t\t\t\t\ttmp = conv2.split( \" \" );\n\t\t\t\t\t\tif ( tmp[ 1 ] === current ) {\n\n\t\t\t\t\t\t\t// If prev can be converted to accepted input\n\t\t\t\t\t\t\tconv = converters[ prev + \" \" + tmp[ 0 ] ] ||\n\t\t\t\t\t\t\t\tconverters[ \"* \" + tmp[ 0 ] ];\n\t\t\t\t\t\t\tif ( conv ) {\n\n\t\t\t\t\t\t\t\t// Condense equivalence converters\n\t\t\t\t\t\t\t\tif ( conv === true ) {\n\t\t\t\t\t\t\t\t\tconv = converters[ conv2 ];\n\n\t\t\t\t\t\t\t\t// Otherwise, insert the intermediate dataType\n\t\t\t\t\t\t\t\t} else if ( converters[ conv2 ] !== true ) {\n\t\t\t\t\t\t\t\t\tcurrent = tmp[ 0 ];\n\t\t\t\t\t\t\t\t\tdataTypes.unshift( tmp[ 1 ] );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Apply converter (if not an equivalence)\n\t\t\t\tif ( conv !== true ) {\n\n\t\t\t\t\t// Unless errors are allowed to bubble, catch and return them\n\t\t\t\t\tif ( conv && s.throws ) {\n\t\t\t\t\t\tresponse = conv( response );\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tresponse = conv( response );\n\t\t\t\t\t\t} catch ( e ) {\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\tstate: \"parsererror\",\n\t\t\t\t\t\t\t\terror: conv ? e : \"No conversion from \" + prev + \" to \" + current\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn { state: \"success\", data: response };\n}\n\njQuery.extend( {\n\n\t// Counter for holding the number of active queries\n\tactive: 0,\n\n\t// Last-Modified header cache for next request\n\tlastModified: {},\n\tetag: {},\n\n\tajaxSettings: {\n\t\turl: location.href,\n\t\ttype: \"GET\",\n\t\tisLocal: rlocalProtocol.test( location.protocol ),\n\t\tglobal: true,\n\t\tprocessData: true,\n\t\tasync: true,\n\t\tcontentType: \"application/x-www-form-urlencoded; charset=UTF-8\",\n\t\t/*\n\t\ttimeout: 0,\n\t\tdata: null,\n\t\tdataType: null,\n\t\tusername: null,\n\t\tpassword: null,\n\t\tcache: null,\n\t\tthrows: false,\n\t\ttraditional: false,\n\t\theaders: {},\n\t\t*/\n\n\t\taccepts: {\n\t\t\t\"*\": allTypes,\n\t\t\ttext: \"text/plain\",\n\t\t\thtml: \"text/html\",\n\t\t\txml: \"application/xml, text/xml\",\n\t\t\tjson: \"application/json, text/javascript\"\n\t\t},\n\n\t\tcontents: {\n\t\t\txml: /\\bxml\\b/,\n\t\t\thtml: /\\bhtml/,\n\t\t\tjson: /\\bjson\\b/\n\t\t},\n\n\t\tresponseFields: {\n\t\t\txml: \"responseXML\",\n\t\t\ttext: \"responseText\",\n\t\t\tjson: \"responseJSON\"\n\t\t},\n\n\t\t// Data converters\n\t\t// Keys separate source (or catchall \"*\") and destination types with a single space\n\t\tconverters: {\n\n\t\t\t// Convert anything to text\n\t\t\t\"* text\": String,\n\n\t\t\t// Text to html (true = no transformation)\n\t\t\t\"text html\": true,\n\n\t\t\t// Evaluate text as a json expression\n\t\t\t\"text json\": jQuery.parseJSON,\n\n\t\t\t// Parse text as xml\n\t\t\t\"text xml\": jQuery.parseXML\n\t\t},\n\n\t\t// For options that shouldn't be deep extended:\n\t\t// you can add your own custom options here if\n\t\t// and when you create one that shouldn't be\n\t\t// deep extended (see ajaxExtend)\n\t\tflatOptions: {\n\t\t\turl: true,\n\t\t\tcontext: true\n\t\t}\n\t},\n\n\t// Creates a full fledged settings object into target\n\t// with both ajaxSettings and settings fields.\n\t// If target is omitted, writes into ajaxSettings.\n\tajaxSetup: function( target, settings ) {\n\t\treturn settings ?\n\n\t\t\t// Building a settings object\n\t\t\tajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) :\n\n\t\t\t// Extending ajaxSettings\n\t\t\tajaxExtend( jQuery.ajaxSettings, target );\n\t},\n\n\tajaxPrefilter: addToPrefiltersOrTransports( prefilters ),\n\tajaxTransport: addToPrefiltersOrTransports( transports ),\n\n\t// Main method\n\tajax: function( url, options ) {\n\n\t\t// If url is an object, simulate pre-1.5 signature\n\t\tif ( typeof url === \"object\" ) {\n\t\t\toptions = url;\n\t\t\turl = undefined;\n\t\t}\n\n\t\t// Force options to be an object\n\t\toptions = options || {};\n\n\t\tvar transport,\n\n\t\t\t// URL without anti-cache param\n\t\t\tcacheURL,\n\n\t\t\t// Response headers\n\t\t\tresponseHeadersString,\n\t\t\tresponseHeaders,\n\n\t\t\t// timeout handle\n\t\t\ttimeoutTimer,\n\n\t\t\t// Url cleanup var\n\t\t\turlAnchor,\n\n\t\t\t// To know if global events are to be dispatched\n\t\t\tfireGlobals,\n\n\t\t\t// Loop variable\n\t\t\ti,\n\n\t\t\t// Create the final options object\n\t\t\ts = jQuery.ajaxSetup( {}, options ),\n\n\t\t\t// Callbacks context\n\t\t\tcallbackContext = s.context || s,\n\n\t\t\t// Context for global events is callbackContext if it is a DOM node or jQuery collection\n\t\t\tglobalEventContext = s.context &&\n\t\t\t\t( callbackContext.nodeType || callbackContext.jquery ) ?\n\t\t\t\t\tjQuery( callbackContext ) :\n\t\t\t\t\tjQuery.event,\n\n\t\t\t// Deferreds\n\t\t\tdeferred = jQuery.Deferred(),\n\t\t\tcompleteDeferred = jQuery.Callbacks( \"once memory\" ),\n\n\t\t\t// Status-dependent callbacks\n\t\t\tstatusCode = s.statusCode || {},\n\n\t\t\t// Headers (they are sent all at once)\n\t\t\trequestHeaders = {},\n\t\t\trequestHeadersNames = {},\n\n\t\t\t// The jqXHR state\n\t\t\tstate = 0,\n\n\t\t\t// Default abort message\n\t\t\tstrAbort = \"canceled\",\n\n\t\t\t// Fake xhr\n\t\t\tjqXHR = {\n\t\t\t\treadyState: 0,\n\n\t\t\t\t// Builds headers hashtable if needed\n\t\t\t\tgetResponseHeader: function( key ) {\n\t\t\t\t\tvar match;\n\t\t\t\t\tif ( state === 2 ) {\n\t\t\t\t\t\tif ( !responseHeaders ) {\n\t\t\t\t\t\t\tresponseHeaders = {};\n\t\t\t\t\t\t\twhile ( ( match = rheaders.exec( responseHeadersString ) ) ) {\n\t\t\t\t\t\t\t\tresponseHeaders[ match[ 1 ].toLowerCase() ] = match[ 2 ];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tmatch = responseHeaders[ key.toLowerCase() ];\n\t\t\t\t\t}\n\t\t\t\t\treturn match == null ? null : match;\n\t\t\t\t},\n\n\t\t\t\t// Raw string\n\t\t\t\tgetAllResponseHeaders: function() {\n\t\t\t\t\treturn state === 2 ? responseHeadersString : null;\n\t\t\t\t},\n\n\t\t\t\t// Caches the header\n\t\t\t\tsetRequestHeader: function( name, value ) {\n\t\t\t\t\tvar lname = name.toLowerCase();\n\t\t\t\t\tif ( !state ) {\n\t\t\t\t\t\tname = requestHeadersNames[ lname ] = requestHeadersNames[ lname ] || name;\n\t\t\t\t\t\trequestHeaders[ name ] = value;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Overrides response content-type header\n\t\t\t\toverrideMimeType: function( type ) {\n\t\t\t\t\tif ( !state ) {\n\t\t\t\t\t\ts.mimeType = type;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Status-dependent callbacks\n\t\t\t\tstatusCode: function( map ) {\n\t\t\t\t\tvar code;\n\t\t\t\t\tif ( map ) {\n\t\t\t\t\t\tif ( state < 2 ) {\n\t\t\t\t\t\t\tfor ( code in map ) {\n\n\t\t\t\t\t\t\t\t// Lazy-add the new callback in a way that preserves old ones\n\t\t\t\t\t\t\t\tstatusCode[ code ] = [ statusCode[ code ], map[ code ] ];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// Execute the appropriate callbacks\n\t\t\t\t\t\t\tjqXHR.always( map[ jqXHR.status ] );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Cancel the request\n\t\t\t\tabort: function( statusText ) {\n\t\t\t\t\tvar finalText = statusText || strAbort;\n\t\t\t\t\tif ( transport ) {\n\t\t\t\t\t\ttransport.abort( finalText );\n\t\t\t\t\t}\n\t\t\t\t\tdone( 0, finalText );\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t};\n\n\t\t// Attach deferreds\n\t\tdeferred.promise( jqXHR ).complete = completeDeferred.add;\n\t\tjqXHR.success = jqXHR.done;\n\t\tjqXHR.error = jqXHR.fail;\n\n\t\t// Remove hash character (#7531: and string promotion)\n\t\t// Add protocol if not provided (prefilters might expect it)\n\t\t// Handle falsy url in the settings object (#10093: consistency with old signature)\n\t\t// We also use the url parameter if available\n\t\ts.url = ( ( url || s.url || location.href ) + \"\" ).replace( rhash, \"\" )\n\t\t\t.replace( rprotocol, location.protocol + \"//\" );\n\n\t\t// Alias method option to type as per ticket #12004\n\t\ts.type = options.method || options.type || s.method || s.type;\n\n\t\t// Extract dataTypes list\n\t\ts.dataTypes = jQuery.trim( s.dataType || \"*\" ).toLowerCase().match( rnotwhite ) || [ \"\" ];\n\n\t\t// A cross-domain request is in order when the origin doesn't match the current origin.\n\t\tif ( s.crossDomain == null ) {\n\t\t\turlAnchor = document.createElement( \"a\" );\n\n\t\t\t// Support: IE8-11+\n\t\t\t// IE throws exception if url is malformed, e.g. http://example.com:80x/\n\t\t\ttry {\n\t\t\t\turlAnchor.href = s.url;\n\n\t\t\t\t// Support: IE8-11+\n\t\t\t\t// Anchor's host property isn't correctly set when s.url is relative\n\t\t\t\turlAnchor.href = urlAnchor.href;\n\t\t\t\ts.crossDomain = originAnchor.protocol + \"//\" + originAnchor.host !==\n\t\t\t\t\turlAnchor.protocol + \"//\" + urlAnchor.host;\n\t\t\t} catch ( e ) {\n\n\t\t\t\t// If there is an error parsing the URL, assume it is crossDomain,\n\t\t\t\t// it can be rejected by the transport if it is invalid\n\t\t\t\ts.crossDomain = true;\n\t\t\t}\n\t\t}\n\n\t\t// Convert data if not already a string\n\t\tif ( s.data && s.processData && typeof s.data !== \"string\" ) {\n\t\t\ts.data = jQuery.param( s.data, s.traditional );\n\t\t}\n\n\t\t// Apply prefilters\n\t\tinspectPrefiltersOrTransports( prefilters, s, options, jqXHR );\n\n\t\t// If request was aborted inside a prefilter, stop there\n\t\tif ( state === 2 ) {\n\t\t\treturn jqXHR;\n\t\t}\n\n\t\t// We can fire global events as of now if asked to\n\t\t// Don't fire events if jQuery.event is undefined in an AMD-usage scenario (#15118)\n\t\tfireGlobals = jQuery.event && s.global;\n\n\t\t// Watch for a new set of requests\n\t\tif ( fireGlobals && jQuery.active++ === 0 ) {\n\t\t\tjQuery.event.trigger( \"ajaxStart\" );\n\t\t}\n\n\t\t// Uppercase the type\n\t\ts.type = s.type.toUpperCase();\n\n\t\t// Determine if request has content\n\t\ts.hasContent = !rnoContent.test( s.type );\n\n\t\t// Save the URL in case we're toying with the If-Modified-Since\n\t\t// and/or If-None-Match header later on\n\t\tcacheURL = s.url;\n\n\t\t// More options handling for requests with no content\n\t\tif ( !s.hasContent ) {\n\n\t\t\t// If data is available, append data to url\n\t\t\tif ( s.data ) {\n\t\t\t\tcacheURL = ( s.url += ( rquery.test( cacheURL ) ? \"&\" : \"?\" ) + s.data );\n\n\t\t\t\t// #9682: remove data so that it's not used in an eventual retry\n\t\t\t\tdelete s.data;\n\t\t\t}\n\n\t\t\t// Add anti-cache in url if needed\n\t\t\tif ( s.cache === false ) {\n\t\t\t\ts.url = rts.test( cacheURL ) ?\n\n\t\t\t\t\t// If there is already a '_' parameter, set its value\n\t\t\t\t\tcacheURL.replace( rts, \"$1_=\" + nonce++ ) :\n\n\t\t\t\t\t// Otherwise add one to the end\n\t\t\t\t\tcacheURL + ( rquery.test( cacheURL ) ? \"&\" : \"?\" ) + \"_=\" + nonce++;\n\t\t\t}\n\t\t}\n\n\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\tif ( s.ifModified ) {\n\t\t\tif ( jQuery.lastModified[ cacheURL ] ) {\n\t\t\t\tjqXHR.setRequestHeader( \"If-Modified-Since\", jQuery.lastModified[ cacheURL ] );\n\t\t\t}\n\t\t\tif ( jQuery.etag[ cacheURL ] ) {\n\t\t\t\tjqXHR.setRequestHeader( \"If-None-Match\", jQuery.etag[ cacheURL ] );\n\t\t\t}\n\t\t}\n\n\t\t// Set the correct header, if data is being sent\n\t\tif ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {\n\t\t\tjqXHR.setRequestHeader( \"Content-Type\", s.contentType );\n\t\t}\n\n\t\t// Set the Accepts header for the server, depending on the dataType\n\t\tjqXHR.setRequestHeader(\n\t\t\t\"Accept\",\n\t\t\ts.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ?\n\t\t\t\ts.accepts[ s.dataTypes[ 0 ] ] +\n\t\t\t\t\t( s.dataTypes[ 0 ] !== \"*\" ? \", \" + allTypes + \"; q=0.01\" : \"\" ) :\n\t\t\t\ts.accepts[ \"*\" ]\n\t\t);\n\n\t\t// Check for headers option\n\t\tfor ( i in s.headers ) {\n\t\t\tjqXHR.setRequestHeader( i, s.headers[ i ] );\n\t\t}\n\n\t\t// Allow custom headers/mimetypes and early abort\n\t\tif ( s.beforeSend &&\n\t\t\t( s.beforeSend.call( callbackContext, jqXHR, s ) === false || state === 2 ) ) {\n\n\t\t\t// Abort if not done already and return\n\t\t\treturn jqXHR.abort();\n\t\t}\n\n\t\t// Aborting is no longer a cancellation\n\t\tstrAbort = \"abort\";\n\n\t\t// Install callbacks on deferreds\n\t\tfor ( i in { success: 1, error: 1, complete: 1 } ) {\n\t\t\tjqXHR[ i ]( s[ i ] );\n\t\t}\n\n\t\t// Get transport\n\t\ttransport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );\n\n\t\t// If no transport, we auto-abort\n\t\tif ( !transport ) {\n\t\t\tdone( -1, \"No Transport\" );\n\t\t} else {\n\t\t\tjqXHR.readyState = 1;\n\n\t\t\t// Send global event\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( \"ajaxSend\", [ jqXHR, s ] );\n\t\t\t}\n\n\t\t\t// If request was aborted inside ajaxSend, stop there\n\t\t\tif ( state === 2 ) {\n\t\t\t\treturn jqXHR;\n\t\t\t}\n\n\t\t\t// Timeout\n\t\t\tif ( s.async && s.timeout > 0 ) {\n\t\t\t\ttimeoutTimer = window.setTimeout( function() {\n\t\t\t\t\tjqXHR.abort( \"timeout\" );\n\t\t\t\t}, s.timeout );\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tstate = 1;\n\t\t\t\ttransport.send( requestHeaders, done );\n\t\t\t} catch ( e ) {\n\n\t\t\t\t// Propagate exception as error if not done\n\t\t\t\tif ( state < 2 ) {\n\t\t\t\t\tdone( -1, e );\n\n\t\t\t\t// Simply rethrow otherwise\n\t\t\t\t} else {\n\t\t\t\t\tthrow e;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Callback for when everything is done\n\t\tfunction done( status, nativeStatusText, responses, headers ) {\n\t\t\tvar isSuccess, success, error, response, modified,\n\t\t\t\tstatusText = nativeStatusText;\n\n\t\t\t// Called once\n\t\t\tif ( state === 2 ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// State is \"done\" now\n\t\t\tstate = 2;\n\n\t\t\t// Clear timeout if it exists\n\t\t\tif ( timeoutTimer ) {\n\t\t\t\twindow.clearTimeout( timeoutTimer );\n\t\t\t}\n\n\t\t\t// Dereference transport for early garbage collection\n\t\t\t// (no matter how long the jqXHR object will be used)\n\t\t\ttransport = undefined;\n\n\t\t\t// Cache response headers\n\t\t\tresponseHeadersString = headers || \"\";\n\n\t\t\t// Set readyState\n\t\t\tjqXHR.readyState = status > 0 ? 4 : 0;\n\n\t\t\t// Determine if successful\n\t\t\tisSuccess = status >= 200 && status < 300 || status === 304;\n\n\t\t\t// Get response data\n\t\t\tif ( responses ) {\n\t\t\t\tresponse = ajaxHandleResponses( s, jqXHR, responses );\n\t\t\t}\n\n\t\t\t// Convert no matter what (that way responseXXX fields are always set)\n\t\t\tresponse = ajaxConvert( s, response, jqXHR, isSuccess );\n\n\t\t\t// If successful, handle type chaining\n\t\t\tif ( isSuccess ) {\n\n\t\t\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\t\t\tif ( s.ifModified ) {\n\t\t\t\t\tmodified = jqXHR.getResponseHeader( \"Last-Modified\" );\n\t\t\t\t\tif ( modified ) {\n\t\t\t\t\t\tjQuery.lastModified[ cacheURL ] = modified;\n\t\t\t\t\t}\n\t\t\t\t\tmodified = jqXHR.getResponseHeader( \"etag\" );\n\t\t\t\t\tif ( modified ) {\n\t\t\t\t\t\tjQuery.etag[ cacheURL ] = modified;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// if no content\n\t\t\t\tif ( status === 204 || s.type === \"HEAD\" ) {\n\t\t\t\t\tstatusText = \"nocontent\";\n\n\t\t\t\t// if not modified\n\t\t\t\t} else if ( status === 304 ) {\n\t\t\t\t\tstatusText = \"notmodified\";\n\n\t\t\t\t// If we have data, let's convert it\n\t\t\t\t} else {\n\t\t\t\t\tstatusText = response.state;\n\t\t\t\t\tsuccess = response.data;\n\t\t\t\t\terror = response.error;\n\t\t\t\t\tisSuccess = !error;\n\t\t\t\t}\n\t\t\t} else {\n\n\t\t\t\t// Extract error from statusText and normalize for non-aborts\n\t\t\t\terror = statusText;\n\t\t\t\tif ( status || !statusText ) {\n\t\t\t\t\tstatusText = \"error\";\n\t\t\t\t\tif ( status < 0 ) {\n\t\t\t\t\t\tstatus = 0;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Set data for the fake xhr object\n\t\t\tjqXHR.status = status;\n\t\t\tjqXHR.statusText = ( nativeStatusText || statusText ) + \"\";\n\n\t\t\t// Success/Error\n\t\t\tif ( isSuccess ) {\n\t\t\t\tdeferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );\n\t\t\t} else {\n\t\t\t\tdeferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );\n\t\t\t}\n\n\t\t\t// Status-dependent callbacks\n\t\t\tjqXHR.statusCode( statusCode );\n\t\t\tstatusCode = undefined;\n\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( isSuccess ? \"ajaxSuccess\" : \"ajaxError\",\n\t\t\t\t\t[ jqXHR, s, isSuccess ? success : error ] );\n\t\t\t}\n\n\t\t\t// Complete\n\t\t\tcompleteDeferred.fireWith( callbackContext, [ jqXHR, statusText ] );\n\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( \"ajaxComplete\", [ jqXHR, s ] );\n\n\t\t\t\t// Handle the global AJAX counter\n\t\t\t\tif ( !( --jQuery.active ) ) {\n\t\t\t\t\tjQuery.event.trigger( \"ajaxStop\" );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn jqXHR;\n\t},\n\n\tgetJSON: function( url, data, callback ) {\n\t\treturn jQuery.get( url, data, callback, \"json\" );\n\t},\n\n\tgetScript: function( url, callback ) {\n\t\treturn jQuery.get( url, undefined, callback, \"script\" );\n\t}\n} );\n\njQuery.each( [ \"get\", \"post\" ], function( i, method ) {\n\tjQuery[ method ] = function( url, data, callback, type ) {\n\n\t\t// Shift arguments if data argument was omitted\n\t\tif ( jQuery.isFunction( data ) ) {\n\t\t\ttype = type || callback;\n\t\t\tcallback = data;\n\t\t\tdata = undefined;\n\t\t}\n\n\t\t// The url can be an options object (which then must have .url)\n\t\treturn jQuery.ajax( jQuery.extend( {\n\t\t\turl: url,\n\t\t\ttype: method,\n\t\t\tdataType: type,\n\t\t\tdata: data,\n\t\t\tsuccess: callback\n\t\t}, jQuery.isPlainObject( url ) && url ) );\n\t};\n} );\n\n\njQuery._evalUrl = function( url ) {\n\treturn jQuery.ajax( {\n\t\turl: url,\n\n\t\t// Make this explicit, since user can override this through ajaxSetup (#11264)\n\t\ttype: \"GET\",\n\t\tdataType: \"script\",\n\t\tasync: false,\n\t\tglobal: false,\n\t\t\"throws\": true\n\t} );\n};\n\n\njQuery.fn.extend( {\n\twrapAll: function( html ) {\n\t\tvar wrap;\n\n\t\tif ( jQuery.isFunction( html ) ) {\n\t\t\treturn this.each( function( i ) {\n\t\t\t\tjQuery( this ).wrapAll( html.call( this, i ) );\n\t\t\t} );\n\t\t}\n\n\t\tif ( this[ 0 ] ) {\n\n\t\t\t// The elements to wrap the target around\n\t\t\twrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true );\n\n\t\t\tif ( this[ 0 ].parentNode ) {\n\t\t\t\twrap.insertBefore( this[ 0 ] );\n\t\t\t}\n\n\t\t\twrap.map( function() {\n\t\t\t\tvar elem = this;\n\n\t\t\t\twhile ( elem.firstElementChild ) {\n\t\t\t\t\telem = elem.firstElementChild;\n\t\t\t\t}\n\n\t\t\t\treturn elem;\n\t\t\t} ).append( this );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\twrapInner: function( html ) {\n\t\tif ( jQuery.isFunction( html ) ) {\n\t\t\treturn this.each( function( i ) {\n\t\t\t\tjQuery( this ).wrapInner( html.call( this, i ) );\n\t\t\t} );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar self = jQuery( this ),\n\t\t\t\tcontents = self.contents();\n\n\t\t\tif ( contents.length ) {\n\t\t\t\tcontents.wrapAll( html );\n\n\t\t\t} else {\n\t\t\t\tself.append( html );\n\t\t\t}\n\t\t} );\n\t},\n\n\twrap: function( html ) {\n\t\tvar isFunction = jQuery.isFunction( html );\n\n\t\treturn this.each( function( i ) {\n\t\t\tjQuery( this ).wrapAll( isFunction ? html.call( this, i ) : html );\n\t\t} );\n\t},\n\n\tunwrap: function() {\n\t\treturn this.parent().each( function() {\n\t\t\tif ( !jQuery.nodeName( this, \"body\" ) ) {\n\t\t\t\tjQuery( this ).replaceWith( this.childNodes );\n\t\t\t}\n\t\t} ).end();\n\t}\n} );\n\n\njQuery.expr.filters.hidden = function( elem ) {\n\treturn !jQuery.expr.filters.visible( elem );\n};\njQuery.expr.filters.visible = function( elem ) {\n\n\t// Support: Opera <= 12.12\n\t// Opera reports offsetWidths and offsetHeights less than zero on some elements\n\t// Use OR instead of AND as the element is not visible if either is true\n\t// See tickets #10406 and #13132\n\treturn elem.offsetWidth > 0 || elem.offsetHeight > 0 || elem.getClientRects().length > 0;\n};\n\n\n\n\nvar r20 = /%20/g,\n\trbracket = /\\[\\]$/,\n\trCRLF = /\\r?\\n/g,\n\trsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,\n\trsubmittable = /^(?:input|select|textarea|keygen)/i;\n\nfunction buildParams( prefix, obj, traditional, add ) {\n\tvar name;\n\n\tif ( jQuery.isArray( obj ) ) {\n\n\t\t// Serialize array item.\n\t\tjQuery.each( obj, function( i, v ) {\n\t\t\tif ( traditional || rbracket.test( prefix ) ) {\n\n\t\t\t\t// Treat each array item as a scalar.\n\t\t\t\tadd( prefix, v );\n\n\t\t\t} else {\n\n\t\t\t\t// Item is non-scalar (array or object), encode its numeric index.\n\t\t\t\tbuildParams(\n\t\t\t\t\tprefix + \"[\" + ( typeof v === \"object\" && v != null ? i : \"\" ) + \"]\",\n\t\t\t\t\tv,\n\t\t\t\t\ttraditional,\n\t\t\t\t\tadd\n\t\t\t\t);\n\t\t\t}\n\t\t} );\n\n\t} else if ( !traditional && jQuery.type( obj ) === \"object\" ) {\n\n\t\t// Serialize object item.\n\t\tfor ( name in obj ) {\n\t\t\tbuildParams( prefix + \"[\" + name + \"]\", obj[ name ], traditional, add );\n\t\t}\n\n\t} else {\n\n\t\t// Serialize scalar item.\n\t\tadd( prefix, obj );\n\t}\n}\n\n// Serialize an array of form elements or a set of\n// key/values into a query string\njQuery.param = function( a, traditional ) {\n\tvar prefix,\n\t\ts = [],\n\t\tadd = function( key, value ) {\n\n\t\t\t// If value is a function, invoke it and return its value\n\t\t\tvalue = jQuery.isFunction( value ) ? value() : ( value == null ? \"\" : value );\n\t\t\ts[ s.length ] = encodeURIComponent( key ) + \"=\" + encodeURIComponent( value );\n\t\t};\n\n\t// Set traditional to true for jQuery <= 1.3.2 behavior.\n\tif ( traditional === undefined ) {\n\t\ttraditional = jQuery.ajaxSettings && jQuery.ajaxSettings.traditional;\n\t}\n\n\t// If an array was passed in, assume that it is an array of form elements.\n\tif ( jQuery.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {\n\n\t\t// Serialize the form elements\n\t\tjQuery.each( a, function() {\n\t\t\tadd( this.name, this.value );\n\t\t} );\n\n\t} else {\n\n\t\t// If traditional, encode the \"old\" way (the way 1.3.2 or older\n\t\t// did it), otherwise encode params recursively.\n\t\tfor ( prefix in a ) {\n\t\t\tbuildParams( prefix, a[ prefix ], traditional, add );\n\t\t}\n\t}\n\n\t// Return the resulting serialization\n\treturn s.join( \"&\" ).replace( r20, \"+\" );\n};\n\njQuery.fn.extend( {\n\tserialize: function() {\n\t\treturn jQuery.param( this.serializeArray() );\n\t},\n\tserializeArray: function() {\n\t\treturn this.map( function() {\n\n\t\t\t// Can add propHook for \"elements\" to filter or add form elements\n\t\t\tvar elements = jQuery.prop( this, \"elements\" );\n\t\t\treturn elements ? jQuery.makeArray( elements ) : this;\n\t\t} )\n\t\t.filter( function() {\n\t\t\tvar type = this.type;\n\n\t\t\t// Use .is( \":disabled\" ) so that fieldset[disabled] works\n\t\t\treturn this.name && !jQuery( this ).is( \":disabled\" ) &&\n\t\t\t\trsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) &&\n\t\t\t\t( this.checked || !rcheckableType.test( type ) );\n\t\t} )\n\t\t.map( function( i, elem ) {\n\t\t\tvar val = jQuery( this ).val();\n\n\t\t\treturn val == null ?\n\t\t\t\tnull :\n\t\t\t\tjQuery.isArray( val ) ?\n\t\t\t\t\tjQuery.map( val, function( val ) {\n\t\t\t\t\t\treturn { name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\n\t\t\t\t\t} ) :\n\t\t\t\t\t{ name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\n\t\t} ).get();\n\t}\n} );\n\n\njQuery.ajaxSettings.xhr = function() {\n\ttry {\n\t\treturn new window.XMLHttpRequest();\n\t} catch ( e ) {}\n};\n\nvar xhrSuccessStatus = {\n\n\t\t// File protocol always yields status code 0, assume 200\n\t\t0: 200,\n\n\t\t// Support: IE9\n\t\t// #1450: sometimes IE returns 1223 when it should be 204\n\t\t1223: 204\n\t},\n\txhrSupported = jQuery.ajaxSettings.xhr();\n\nsupport.cors = !!xhrSupported && ( \"withCredentials\" in xhrSupported );\nsupport.ajax = xhrSupported = !!xhrSupported;\n\njQuery.ajaxTransport( function( options ) {\n\tvar callback, errorCallback;\n\n\t// Cross domain only allowed if supported through XMLHttpRequest\n\tif ( support.cors || xhrSupported && !options.crossDomain ) {\n\t\treturn {\n\t\t\tsend: function( headers, complete ) {\n\t\t\t\tvar i,\n\t\t\t\t\txhr = options.xhr();\n\n\t\t\t\txhr.open(\n\t\t\t\t\toptions.type,\n\t\t\t\t\toptions.url,\n\t\t\t\t\toptions.async,\n\t\t\t\t\toptions.username,\n\t\t\t\t\toptions.password\n\t\t\t\t);\n\n\t\t\t\t// Apply custom fields if provided\n\t\t\t\tif ( options.xhrFields ) {\n\t\t\t\t\tfor ( i in options.xhrFields ) {\n\t\t\t\t\t\txhr[ i ] = options.xhrFields[ i ];\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Override mime type if needed\n\t\t\t\tif ( options.mimeType && xhr.overrideMimeType ) {\n\t\t\t\t\txhr.overrideMimeType( options.mimeType );\n\t\t\t\t}\n\n\t\t\t\t// X-Requested-With header\n\t\t\t\t// For cross-domain requests, seeing as conditions for a preflight are\n\t\t\t\t// akin to a jigsaw puzzle, we simply never set it to be sure.\n\t\t\t\t// (it can always be set on a per-request basis or even using ajaxSetup)\n\t\t\t\t// For same-domain requests, won't change header if already provided.\n\t\t\t\tif ( !options.crossDomain && !headers[ \"X-Requested-With\" ] ) {\n\t\t\t\t\theaders[ \"X-Requested-With\" ] = \"XMLHttpRequest\";\n\t\t\t\t}\n\n\t\t\t\t// Set headers\n\t\t\t\tfor ( i in headers ) {\n\t\t\t\t\txhr.setRequestHeader( i, headers[ i ] );\n\t\t\t\t}\n\n\t\t\t\t// Callback\n\t\t\t\tcallback = function( type ) {\n\t\t\t\t\treturn function() {\n\t\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\t\tcallback = errorCallback = xhr.onload =\n\t\t\t\t\t\t\t\txhr.onerror = xhr.onabort = xhr.onreadystatechange = null;\n\n\t\t\t\t\t\t\tif ( type === \"abort\" ) {\n\t\t\t\t\t\t\t\txhr.abort();\n\t\t\t\t\t\t\t} else if ( type === \"error\" ) {\n\n\t\t\t\t\t\t\t\t// Support: IE9\n\t\t\t\t\t\t\t\t// On a manual native abort, IE9 throws\n\t\t\t\t\t\t\t\t// errors on any property access that is not readyState\n\t\t\t\t\t\t\t\tif ( typeof xhr.status !== \"number\" ) {\n\t\t\t\t\t\t\t\t\tcomplete( 0, \"error\" );\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tcomplete(\n\n\t\t\t\t\t\t\t\t\t\t// File: protocol always yields status 0; see #8605, #14207\n\t\t\t\t\t\t\t\t\t\txhr.status,\n\t\t\t\t\t\t\t\t\t\txhr.statusText\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tcomplete(\n\t\t\t\t\t\t\t\t\txhrSuccessStatus[ xhr.status ] || xhr.status,\n\t\t\t\t\t\t\t\t\txhr.statusText,\n\n\t\t\t\t\t\t\t\t\t// Support: IE9 only\n\t\t\t\t\t\t\t\t\t// IE9 has no XHR2 but throws on binary (trac-11426)\n\t\t\t\t\t\t\t\t\t// For XHR2 non-text, let the caller handle it (gh-2498)\n\t\t\t\t\t\t\t\t\t( xhr.responseType || \"text\" ) !== \"text\"  ||\n\t\t\t\t\t\t\t\t\ttypeof xhr.responseText !== \"string\" ?\n\t\t\t\t\t\t\t\t\t\t{ binary: xhr.response } :\n\t\t\t\t\t\t\t\t\t\t{ text: xhr.responseText },\n\t\t\t\t\t\t\t\t\txhr.getAllResponseHeaders()\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t};\n\n\t\t\t\t// Listen to events\n\t\t\t\txhr.onload = callback();\n\t\t\t\terrorCallback = xhr.onerror = callback( \"error\" );\n\n\t\t\t\t// Support: IE9\n\t\t\t\t// Use onreadystatechange to replace onabort\n\t\t\t\t// to handle uncaught aborts\n\t\t\t\tif ( xhr.onabort !== undefined ) {\n\t\t\t\t\txhr.onabort = errorCallback;\n\t\t\t\t} else {\n\t\t\t\t\txhr.onreadystatechange = function() {\n\n\t\t\t\t\t\t// Check readyState before timeout as it changes\n\t\t\t\t\t\tif ( xhr.readyState === 4 ) {\n\n\t\t\t\t\t\t\t// Allow onerror to be called first,\n\t\t\t\t\t\t\t// but that will not handle a native abort\n\t\t\t\t\t\t\t// Also, save errorCallback to a variable\n\t\t\t\t\t\t\t// as xhr.onerror cannot be accessed\n\t\t\t\t\t\t\twindow.setTimeout( function() {\n\t\t\t\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\t\t\t\terrorCallback();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\t// Create the abort callback\n\t\t\t\tcallback = callback( \"abort\" );\n\n\t\t\t\ttry {\n\n\t\t\t\t\t// Do send the request (this may raise an exception)\n\t\t\t\t\txhr.send( options.hasContent && options.data || null );\n\t\t\t\t} catch ( e ) {\n\n\t\t\t\t\t// #14683: Only rethrow if this hasn't been notified as an error yet\n\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\tthrow e;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tabort: function() {\n\t\t\t\tif ( callback ) {\n\t\t\t\t\tcallback();\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n} );\n\n\n\n\n// Install script dataType\njQuery.ajaxSetup( {\n\taccepts: {\n\t\tscript: \"text/javascript, application/javascript, \" +\n\t\t\t\"application/ecmascript, application/x-ecmascript\"\n\t},\n\tcontents: {\n\t\tscript: /\\b(?:java|ecma)script\\b/\n\t},\n\tconverters: {\n\t\t\"text script\": function( text ) {\n\t\t\tjQuery.globalEval( text );\n\t\t\treturn text;\n\t\t}\n\t}\n} );\n\n// Handle cache's special case and crossDomain\njQuery.ajaxPrefilter( \"script\", function( s ) {\n\tif ( s.cache === undefined ) {\n\t\ts.cache = false;\n\t}\n\tif ( s.crossDomain ) {\n\t\ts.type = \"GET\";\n\t}\n} );\n\n// Bind script tag hack transport\njQuery.ajaxTransport( \"script\", function( s ) {\n\n\t// This transport only deals with cross domain requests\n\tif ( s.crossDomain ) {\n\t\tvar script, callback;\n\t\treturn {\n\t\t\tsend: function( _, complete ) {\n\t\t\t\tscript = jQuery( \"<script>\" ).prop( {\n\t\t\t\t\tcharset: s.scriptCharset,\n\t\t\t\t\tsrc: s.url\n\t\t\t\t} ).on(\n\t\t\t\t\t\"load error\",\n\t\t\t\t\tcallback = function( evt ) {\n\t\t\t\t\t\tscript.remove();\n\t\t\t\t\t\tcallback = null;\n\t\t\t\t\t\tif ( evt ) {\n\t\t\t\t\t\t\tcomplete( evt.type === \"error\" ? 404 : 200, evt.type );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t);\n\n\t\t\t\t// Use native DOM manipulation to avoid our domManip AJAX trickery\n\t\t\t\tdocument.head.appendChild( script[ 0 ] );\n\t\t\t},\n\t\t\tabort: function() {\n\t\t\t\tif ( callback ) {\n\t\t\t\t\tcallback();\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n} );\n\n\n\n\nvar oldCallbacks = [],\n\trjsonp = /(=)\\?(?=&|$)|\\?\\?/;\n\n// Default jsonp settings\njQuery.ajaxSetup( {\n\tjsonp: \"callback\",\n\tjsonpCallback: function() {\n\t\tvar callback = oldCallbacks.pop() || ( jQuery.expando + \"_\" + ( nonce++ ) );\n\t\tthis[ callback ] = true;\n\t\treturn callback;\n\t}\n} );\n\n// Detect, normalize options and install callbacks for jsonp requests\njQuery.ajaxPrefilter( \"json jsonp\", function( s, originalSettings, jqXHR ) {\n\n\tvar callbackName, overwritten, responseContainer,\n\t\tjsonProp = s.jsonp !== false && ( rjsonp.test( s.url ) ?\n\t\t\t\"url\" :\n\t\t\ttypeof s.data === \"string\" &&\n\t\t\t\t( s.contentType || \"\" )\n\t\t\t\t\t.indexOf( \"application/x-www-form-urlencoded\" ) === 0 &&\n\t\t\t\trjsonp.test( s.data ) && \"data\"\n\t\t);\n\n\t// Handle iff the expected data type is \"jsonp\" or we have a parameter to set\n\tif ( jsonProp || s.dataTypes[ 0 ] === \"jsonp\" ) {\n\n\t\t// Get callback name, remembering preexisting value associated with it\n\t\tcallbackName = s.jsonpCallback = jQuery.isFunction( s.jsonpCallback ) ?\n\t\t\ts.jsonpCallback() :\n\t\t\ts.jsonpCallback;\n\n\t\t// Insert callback into url or form data\n\t\tif ( jsonProp ) {\n\t\t\ts[ jsonProp ] = s[ jsonProp ].replace( rjsonp, \"$1\" + callbackName );\n\t\t} else if ( s.jsonp !== false ) {\n\t\t\ts.url += ( rquery.test( s.url ) ? \"&\" : \"?\" ) + s.jsonp + \"=\" + callbackName;\n\t\t}\n\n\t\t// Use data converter to retrieve json after script execution\n\t\ts.converters[ \"script json\" ] = function() {\n\t\t\tif ( !responseContainer ) {\n\t\t\t\tjQuery.error( callbackName + \" was not called\" );\n\t\t\t}\n\t\t\treturn responseContainer[ 0 ];\n\t\t};\n\n\t\t// Force json dataType\n\t\ts.dataTypes[ 0 ] = \"json\";\n\n\t\t// Install callback\n\t\toverwritten = window[ callbackName ];\n\t\twindow[ callbackName ] = function() {\n\t\t\tresponseContainer = arguments;\n\t\t};\n\n\t\t// Clean-up function (fires after converters)\n\t\tjqXHR.always( function() {\n\n\t\t\t// If previous value didn't exist - remove it\n\t\t\tif ( overwritten === undefined ) {\n\t\t\t\tjQuery( window ).removeProp( callbackName );\n\n\t\t\t// Otherwise restore preexisting value\n\t\t\t} else {\n\t\t\t\twindow[ callbackName ] = overwritten;\n\t\t\t}\n\n\t\t\t// Save back as free\n\t\t\tif ( s[ callbackName ] ) {\n\n\t\t\t\t// Make sure that re-using the options doesn't screw things around\n\t\t\t\ts.jsonpCallback = originalSettings.jsonpCallback;\n\n\t\t\t\t// Save the callback name for future use\n\t\t\t\toldCallbacks.push( callbackName );\n\t\t\t}\n\n\t\t\t// Call if it was a function and we have a response\n\t\t\tif ( responseContainer && jQuery.isFunction( overwritten ) ) {\n\t\t\t\toverwritten( responseContainer[ 0 ] );\n\t\t\t}\n\n\t\t\tresponseContainer = overwritten = undefined;\n\t\t} );\n\n\t\t// Delegate to script\n\t\treturn \"script\";\n\t}\n} );\n\n\n\n\n// Argument \"data\" should be string of html\n// context (optional): If specified, the fragment will be created in this context,\n// defaults to document\n// keepScripts (optional): If true, will include scripts passed in the html string\njQuery.parseHTML = function( data, context, keepScripts ) {\n\tif ( !data || typeof data !== \"string\" ) {\n\t\treturn null;\n\t}\n\tif ( typeof context === \"boolean\" ) {\n\t\tkeepScripts = context;\n\t\tcontext = false;\n\t}\n\tcontext = context || document;\n\n\tvar parsed = rsingleTag.exec( data ),\n\t\tscripts = !keepScripts && [];\n\n\t// Single tag\n\tif ( parsed ) {\n\t\treturn [ context.createElement( parsed[ 1 ] ) ];\n\t}\n\n\tparsed = buildFragment( [ data ], context, scripts );\n\n\tif ( scripts && scripts.length ) {\n\t\tjQuery( scripts ).remove();\n\t}\n\n\treturn jQuery.merge( [], parsed.childNodes );\n};\n\n\n// Keep a copy of the old load method\nvar _load = jQuery.fn.load;\n\n/**\n * Load a url into a page\n */\njQuery.fn.load = function( url, params, callback ) {\n\tif ( typeof url !== \"string\" && _load ) {\n\t\treturn _load.apply( this, arguments );\n\t}\n\n\tvar selector, type, response,\n\t\tself = this,\n\t\toff = url.indexOf( \" \" );\n\n\tif ( off > -1 ) {\n\t\tselector = jQuery.trim( url.slice( off ) );\n\t\turl = url.slice( 0, off );\n\t}\n\n\t// If it's a function\n\tif ( jQuery.isFunction( params ) ) {\n\n\t\t// We assume that it's the callback\n\t\tcallback = params;\n\t\tparams = undefined;\n\n\t// Otherwise, build a param string\n\t} else if ( params && typeof params === \"object\" ) {\n\t\ttype = \"POST\";\n\t}\n\n\t// If we have elements to modify, make the request\n\tif ( self.length > 0 ) {\n\t\tjQuery.ajax( {\n\t\t\turl: url,\n\n\t\t\t// If \"type\" variable is undefined, then \"GET\" method will be used.\n\t\t\t// Make value of this field explicit since\n\t\t\t// user can override it through ajaxSetup method\n\t\t\ttype: type || \"GET\",\n\t\t\tdataType: \"html\",\n\t\t\tdata: params\n\t\t} ).done( function( responseText ) {\n\n\t\t\t// Save response for use in complete callback\n\t\t\tresponse = arguments;\n\n\t\t\tself.html( selector ?\n\n\t\t\t\t// If a selector was specified, locate the right elements in a dummy div\n\t\t\t\t// Exclude scripts to avoid IE 'Permission Denied' errors\n\t\t\t\tjQuery( \"<div>\" ).append( jQuery.parseHTML( responseText ) ).find( selector ) :\n\n\t\t\t\t// Otherwise use the full result\n\t\t\t\tresponseText );\n\n\t\t// If the request succeeds, this function gets \"data\", \"status\", \"jqXHR\"\n\t\t// but they are ignored because response was set above.\n\t\t// If it fails, this function gets \"jqXHR\", \"status\", \"error\"\n\t\t} ).always( callback && function( jqXHR, status ) {\n\t\t\tself.each( function() {\n\t\t\t\tcallback.apply( this, response || [ jqXHR.responseText, status, jqXHR ] );\n\t\t\t} );\n\t\t} );\n\t}\n\n\treturn this;\n};\n\n\n\n\n// Attach a bunch of functions for handling common AJAX events\njQuery.each( [\n\t\"ajaxStart\",\n\t\"ajaxStop\",\n\t\"ajaxComplete\",\n\t\"ajaxError\",\n\t\"ajaxSuccess\",\n\t\"ajaxSend\"\n], function( i, type ) {\n\tjQuery.fn[ type ] = function( fn ) {\n\t\treturn this.on( type, fn );\n\t};\n} );\n\n\n\n\njQuery.expr.filters.animated = function( elem ) {\n\treturn jQuery.grep( jQuery.timers, function( fn ) {\n\t\treturn elem === fn.elem;\n\t} ).length;\n};\n\n\n\n\n/**\n * Gets a window from an element\n */\nfunction getWindow( elem ) {\n\treturn jQuery.isWindow( elem ) ? elem : elem.nodeType === 9 && elem.defaultView;\n}\n\njQuery.offset = {\n\tsetOffset: function( elem, options, i ) {\n\t\tvar curPosition, curLeft, curCSSTop, curTop, curOffset, curCSSLeft, calculatePosition,\n\t\t\tposition = jQuery.css( elem, \"position\" ),\n\t\t\tcurElem = jQuery( elem ),\n\t\t\tprops = {};\n\n\t\t// Set position first, in-case top/left are set even on static elem\n\t\tif ( position === \"static\" ) {\n\t\t\telem.style.position = \"relative\";\n\t\t}\n\n\t\tcurOffset = curElem.offset();\n\t\tcurCSSTop = jQuery.css( elem, \"top\" );\n\t\tcurCSSLeft = jQuery.css( elem, \"left\" );\n\t\tcalculatePosition = ( position === \"absolute\" || position === \"fixed\" ) &&\n\t\t\t( curCSSTop + curCSSLeft ).indexOf( \"auto\" ) > -1;\n\n\t\t// Need to be able to calculate position if either\n\t\t// top or left is auto and position is either absolute or fixed\n\t\tif ( calculatePosition ) {\n\t\t\tcurPosition = curElem.position();\n\t\t\tcurTop = curPosition.top;\n\t\t\tcurLeft = curPosition.left;\n\n\t\t} else {\n\t\t\tcurTop = parseFloat( curCSSTop ) || 0;\n\t\t\tcurLeft = parseFloat( curCSSLeft ) || 0;\n\t\t}\n\n\t\tif ( jQuery.isFunction( options ) ) {\n\n\t\t\t// Use jQuery.extend here to allow modification of coordinates argument (gh-1848)\n\t\t\toptions = options.call( elem, i, jQuery.extend( {}, curOffset ) );\n\t\t}\n\n\t\tif ( options.top != null ) {\n\t\t\tprops.top = ( options.top - curOffset.top ) + curTop;\n\t\t}\n\t\tif ( options.left != null ) {\n\t\t\tprops.left = ( options.left - curOffset.left ) + curLeft;\n\t\t}\n\n\t\tif ( \"using\" in options ) {\n\t\t\toptions.using.call( elem, props );\n\n\t\t} else {\n\t\t\tcurElem.css( props );\n\t\t}\n\t}\n};\n\njQuery.fn.extend( {\n\toffset: function( options ) {\n\t\tif ( arguments.length ) {\n\t\t\treturn options === undefined ?\n\t\t\t\tthis :\n\t\t\t\tthis.each( function( i ) {\n\t\t\t\t\tjQuery.offset.setOffset( this, options, i );\n\t\t\t\t} );\n\t\t}\n\n\t\tvar docElem, win,\n\t\t\telem = this[ 0 ],\n\t\t\tbox = { top: 0, left: 0 },\n\t\t\tdoc = elem && elem.ownerDocument;\n\n\t\tif ( !doc ) {\n\t\t\treturn;\n\t\t}\n\n\t\tdocElem = doc.documentElement;\n\n\t\t// Make sure it's not a disconnected DOM node\n\t\tif ( !jQuery.contains( docElem, elem ) ) {\n\t\t\treturn box;\n\t\t}\n\n\t\tbox = elem.getBoundingClientRect();\n\t\twin = getWindow( doc );\n\t\treturn {\n\t\t\ttop: box.top + win.pageYOffset - docElem.clientTop,\n\t\t\tleft: box.left + win.pageXOffset - docElem.clientLeft\n\t\t};\n\t},\n\n\tposition: function() {\n\t\tif ( !this[ 0 ] ) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar offsetParent, offset,\n\t\t\telem = this[ 0 ],\n\t\t\tparentOffset = { top: 0, left: 0 };\n\n\t\t// Fixed elements are offset from window (parentOffset = {top:0, left: 0},\n\t\t// because it is its only offset parent\n\t\tif ( jQuery.css( elem, \"position\" ) === \"fixed\" ) {\n\n\t\t\t// Assume getBoundingClientRect is there when computed position is fixed\n\t\t\toffset = elem.getBoundingClientRect();\n\n\t\t} else {\n\n\t\t\t// Get *real* offsetParent\n\t\t\toffsetParent = this.offsetParent();\n\n\t\t\t// Get correct offsets\n\t\t\toffset = this.offset();\n\t\t\tif ( !jQuery.nodeName( offsetParent[ 0 ], \"html\" ) ) {\n\t\t\t\tparentOffset = offsetParent.offset();\n\t\t\t}\n\n\t\t\t// Add offsetParent borders\n\t\t\tparentOffset.top += jQuery.css( offsetParent[ 0 ], \"borderTopWidth\", true );\n\t\t\tparentOffset.left += jQuery.css( offsetParent[ 0 ], \"borderLeftWidth\", true );\n\t\t}\n\n\t\t// Subtract parent offsets and element margins\n\t\treturn {\n\t\t\ttop: offset.top - parentOffset.top - jQuery.css( elem, \"marginTop\", true ),\n\t\t\tleft: offset.left - parentOffset.left - jQuery.css( elem, \"marginLeft\", true )\n\t\t};\n\t},\n\n\t// This method will return documentElement in the following cases:\n\t// 1) For the element inside the iframe without offsetParent, this method will return\n\t//    documentElement of the parent window\n\t// 2) For the hidden or detached element\n\t// 3) For body or html element, i.e. in case of the html node - it will return itself\n\t//\n\t// but those exceptions were never presented as a real life use-cases\n\t// and might be considered as more preferable results.\n\t//\n\t// This logic, however, is not guaranteed and can change at any point in the future\n\toffsetParent: function() {\n\t\treturn this.map( function() {\n\t\t\tvar offsetParent = this.offsetParent;\n\n\t\t\twhile ( offsetParent && jQuery.css( offsetParent, \"position\" ) === \"static\" ) {\n\t\t\t\toffsetParent = offsetParent.offsetParent;\n\t\t\t}\n\n\t\t\treturn offsetParent || documentElement;\n\t\t} );\n\t}\n} );\n\n// Create scrollLeft and scrollTop methods\njQuery.each( { scrollLeft: \"pageXOffset\", scrollTop: \"pageYOffset\" }, function( method, prop ) {\n\tvar top = \"pageYOffset\" === prop;\n\n\tjQuery.fn[ method ] = function( val ) {\n\t\treturn access( this, function( elem, method, val ) {\n\t\t\tvar win = getWindow( elem );\n\n\t\t\tif ( val === undefined ) {\n\t\t\t\treturn win ? win[ prop ] : elem[ method ];\n\t\t\t}\n\n\t\t\tif ( win ) {\n\t\t\t\twin.scrollTo(\n\t\t\t\t\t!top ? val : win.pageXOffset,\n\t\t\t\t\ttop ? val : win.pageYOffset\n\t\t\t\t);\n\n\t\t\t} else {\n\t\t\t\telem[ method ] = val;\n\t\t\t}\n\t\t}, method, val, arguments.length );\n\t};\n} );\n\n// Support: Safari<7-8+, Chrome<37-44+\n// Add the top/left cssHooks using jQuery.fn.position\n// Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084\n// Blink bug: https://code.google.com/p/chromium/issues/detail?id=229280\n// getComputedStyle returns percent when specified for top/left/bottom/right;\n// rather than make the css module depend on the offset module, just check for it here\njQuery.each( [ \"top\", \"left\" ], function( i, prop ) {\n\tjQuery.cssHooks[ prop ] = addGetHookIf( support.pixelPosition,\n\t\tfunction( elem, computed ) {\n\t\t\tif ( computed ) {\n\t\t\t\tcomputed = curCSS( elem, prop );\n\n\t\t\t\t// If curCSS returns percentage, fallback to offset\n\t\t\t\treturn rnumnonpx.test( computed ) ?\n\t\t\t\t\tjQuery( elem ).position()[ prop ] + \"px\" :\n\t\t\t\t\tcomputed;\n\t\t\t}\n\t\t}\n\t);\n} );\n\n\n// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods\njQuery.each( { Height: \"height\", Width: \"width\" }, function( name, type ) {\n\tjQuery.each( { padding: \"inner\" + name, content: type, \"\": \"outer\" + name },\n\t\tfunction( defaultExtra, funcName ) {\n\n\t\t// Margin is only for outerHeight, outerWidth\n\t\tjQuery.fn[ funcName ] = function( margin, value ) {\n\t\t\tvar chainable = arguments.length && ( defaultExtra || typeof margin !== \"boolean\" ),\n\t\t\t\textra = defaultExtra || ( margin === true || value === true ? \"margin\" : \"border\" );\n\n\t\t\treturn access( this, function( elem, type, value ) {\n\t\t\t\tvar doc;\n\n\t\t\t\tif ( jQuery.isWindow( elem ) ) {\n\n\t\t\t\t\t// As of 5/8/2012 this will yield incorrect results for Mobile Safari, but there\n\t\t\t\t\t// isn't a whole lot we can do. See pull request at this URL for discussion:\n\t\t\t\t\t// https://github.com/jquery/jquery/pull/764\n\t\t\t\t\treturn elem.document.documentElement[ \"client\" + name ];\n\t\t\t\t}\n\n\t\t\t\t// Get document width or height\n\t\t\t\tif ( elem.nodeType === 9 ) {\n\t\t\t\t\tdoc = elem.documentElement;\n\n\t\t\t\t\t// Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height],\n\t\t\t\t\t// whichever is greatest\n\t\t\t\t\treturn Math.max(\n\t\t\t\t\t\telem.body[ \"scroll\" + name ], doc[ \"scroll\" + name ],\n\t\t\t\t\t\telem.body[ \"offset\" + name ], doc[ \"offset\" + name ],\n\t\t\t\t\t\tdoc[ \"client\" + name ]\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\treturn value === undefined ?\n\n\t\t\t\t\t// Get width or height on the element, requesting but not forcing parseFloat\n\t\t\t\t\tjQuery.css( elem, type, extra ) :\n\n\t\t\t\t\t// Set width or height on the element\n\t\t\t\t\tjQuery.style( elem, type, value, extra );\n\t\t\t}, type, chainable ? margin : undefined, chainable, null );\n\t\t};\n\t} );\n} );\n\n\njQuery.fn.extend( {\n\n\tbind: function( types, data, fn ) {\n\t\treturn this.on( types, null, data, fn );\n\t},\n\tunbind: function( types, fn ) {\n\t\treturn this.off( types, null, fn );\n\t},\n\n\tdelegate: function( selector, types, data, fn ) {\n\t\treturn this.on( types, selector, data, fn );\n\t},\n\tundelegate: function( selector, types, fn ) {\n\n\t\t// ( namespace ) or ( selector, types [, fn] )\n\t\treturn arguments.length === 1 ?\n\t\t\tthis.off( selector, \"**\" ) :\n\t\t\tthis.off( types, selector || \"**\", fn );\n\t},\n\tsize: function() {\n\t\treturn this.length;\n\t}\n} );\n\njQuery.fn.andSelf = jQuery.fn.addBack;\n\n\n\n\n// Register as a named AMD module, since jQuery can be concatenated with other\n// files that may use define, but not via a proper concatenation script that\n// understands anonymous AMD modules. A named AMD is safest and most robust\n// way to register. Lowercase jquery is used because AMD module names are\n// derived from file names, and jQuery is normally delivered in a lowercase\n// file name. Do this after creating the global so that if an AMD module wants\n// to call noConflict to hide this version of jQuery, it will work.\n\n// Note that for maximum portability, libraries that are not jQuery should\n// declare themselves as anonymous modules, and avoid setting a global if an\n// AMD loader is present. jQuery is a special case. For more information, see\n// https://github.com/jrburke/requirejs/wiki/Updating-existing-libraries#wiki-anon\n\nif ( typeof define === \"function\" && define.amd ) {\n\tdefine( \"jquery\", [], function() {\n\t\treturn jQuery;\n\t} );\n}\n\n\n\nvar\n\n\t// Map over jQuery in case of overwrite\n\t_jQuery = window.jQuery,\n\n\t// Map over the $ in case of overwrite\n\t_$ = window.$;\n\njQuery.noConflict = function( deep ) {\n\tif ( window.$ === jQuery ) {\n\t\twindow.$ = _$;\n\t}\n\n\tif ( deep && window.jQuery === jQuery ) {\n\t\twindow.jQuery = _jQuery;\n\t}\n\n\treturn jQuery;\n};\n\n// Expose jQuery and $ identifiers, even in AMD\n// (#7102#comment:10, https://github.com/jquery/jquery/pull/557)\n// and CommonJS for browser emulators (#13566)\nif ( !noGlobal ) {\n\twindow.jQuery = window.$ = jQuery;\n}\n\nreturn jQuery;\n}));\n","/**\r\n * Created by gavorhes on 12/14/2015.\r\n */\r\n\r\nimport LayerItsInventory from '../layers/LayerItsInventory';\r\nimport * as colors from '../util/colors';\r\nimport provide from '../util/provide';\r\nlet nm = provide('collections');\r\n\r\n\r\nlet itsConfig = [\r\n    {name: 'Camera', itsType: 'cctv', minZoom: 11, itsIcon: 'cctv.png'},\r\n    {\r\n        name: 'Message Signs',\r\n        itsType: 'DMS',\r\n        minZoom: 11,\r\n        itsIconConfig: {\r\n            prop: 'dmsType',\r\n            defaultName: 'DMS',\r\n            defaultIcon: 'dms.png',\r\n            iconArray: [\r\n                ['pcms', 'PCMS', 'pcms.png']\r\n            ]\r\n        }\r\n    },\r\n    {name: 'Lighting', itsType: 'light', minZoom: 16, itsIcon: 'streetlight.png', visible: false, onDemand: true},\r\n    {name: 'Bluetooth', itsType: 'blue', minZoom: 10, itsIcon: 'bluetooth.png', visible: false},\r\n    {name: 'Cabinets', itsType: 'cabinet', minZoom: 10, itsIcon: 'cabinet.png', visible: false},\r\n    {name: 'Hut', itsType: 'hut', minZoom: 10, itsIcon: 'hut.png', visible: false},\r\n    {name: 'Vault', itsType: 'vault', minZoom: 13, itsIcon: 'vault.png', visible: false},\r\n    {name: 'Advisory Radio', itsType: 'har', minZoom: 10, itsIcon: 'har.png', visible: false},\r\n    {\r\n        name: 'Loop Detectors',\r\n        itsType: 'loop',\r\n        legendCollapse: true,\r\n        minZoom: 14,\r\n        visible: false,\r\n        itsIconConfig: {\r\n            prop: 'dtctrType',\r\n            defaultName: 'Other',\r\n            defaultIcon: 'loopdetectorother.png',\r\n            iconArray: [\r\n                ['detector', 'Detector', 'loopdetector.png'],\r\n                ['long', 'Long', 'loopdetectorlong.png'],\r\n                ['zone', 'Zone', 'loopdetectorzone.png']\r\n            ]\r\n        },\r\n        onDemand: true\r\n    },\r\n    {name: 'Microwave', itsType: 'microwave', minZoom: 14, itsIcon: 'microwave.png', visible: false},\r\n    {name: 'Pull Box', itsType: 'pull', minZoom: 14, itsIcon: 'pullbox.png', visible: false, onDemand: true},\r\n    {name: 'RWIS', itsType: 'rwis', minZoom: 7, itsIcon: 'rwis.png', visible: false},\r\n    {name: 'Ramp Gates', itsType: 'gate', minZoom: 10, itsIcon: 'rampgate.png', visible: false},\r\n    {name: 'Ramp Meter', itsType: 'meter', minZoom: 10, itsIcon: 'rampmeter.png', visible: false},\r\n    {name: 'Signal', itsType: 'signal', minZoom: 13, itsIcon: 'signal.png', visible: false, onDemand: true},\r\n    {name: 'Tower', itsType: 'tower', minZoom: 10, itsIcon: 'tower.png', visible: false},\r\n    {\r\n        name: 'Trench',\r\n        itsType: 'trench',\r\n        onDemand: true,\r\n        visible: false,\r\n        onDemandDelay: 500,\r\n        minZoom: 15,\r\n        legendCollapse: true,\r\n        itsLineConfig: {\r\n            prop: 'owner',\r\n            //defaultName: 'Other',\r\n            //defaultWidth: 7,\r\n            defaultColor: colors.hexAlphaToRgbOrRgba('#747474', 0.8),\r\n            lineArray: [\r\n                ['WisDOT', 'WisDOT', colors.hexAlphaToRgbOrRgba('#FF032F', 0.7)],\r\n                ['WIN', 'WIN', colors.hexAlphaToRgbOrRgba('#FFC632', 0.7)],\r\n                ['USXchange', 'USXchange', colors.hexAlphaToRgbOrRgba('#2DFF46', 0.7)],\r\n                ['AT&T', 'AT&T', colors.hexAlphaToRgbOrRgba('#ff2be5', 0.7)],\r\n                ['Touch America', 'Touch America', colors.hexAlphaToRgbOrRgba('#52f3ff', 0.7)],\r\n                ['Qwest', 'Qwest', colors.hexAlphaToRgbOrRgba('#9278ff', 0.7)],\r\n                ['McLeodUSA', 'McLeodUSA', colors.hexAlphaToRgbOrRgba('#2926FF', 0.7)],\r\n                ['CINC', 'CINC', colors.hexAlphaToRgbOrRgba('#CB00FF', 0.7)],\r\n                ['City of Madison', 'Madison', colors.hexAlphaToRgbOrRgba('#000380', 0.7)]\r\n            ]\r\n        }\r\n    }\r\n\r\n\r\n];\r\n\r\n\r\nclass ItsLayerCollection {\r\n\r\n    /**\r\n     * Create a collection of all ITS layers\r\n     * @param {ol.Map} theMap the openlayers map\r\n     * @param {Array} [exclude=[]] array of Its layer identifiers to exclude\r\n     *\r\n     * BLUE Bluetooth Detector - Bluetooth Detector\r\n     * CABINET Cabinets - The cabinets\r\n     * CCTV Camera - Traffic Cameras\r\n     * HUT Communication Hut - Communication Hut\r\n     * VAULT Communication Vault - The communication vaults\r\n     * HAR Highway Advisory Radio - Advisory Radios\r\n     * LIGHT Lighting - Lighting\r\n     * LOOP Loop Detectors - Loop Detectors\r\n     * DMS Message Board - Message Boards and Signs\r\n     * MICROWAVE Microwave Detector - Microwave Detectors\r\n     * PULL Pull Box - A pull box\r\n     * RWIS RWIS - Road weather information system\r\n     * GATE Ramp Gate - The ramp Gates\r\n     * METER Ramp Meter - The ramp meters\r\n     * SIGNAL Signal - Traffic Signal\r\n     * TOWER Tower - The towers\r\n     * TRENCH\r\n     */\r\n    constructor(theMap, exclude) {\r\n\r\n        this.map = theMap;\r\n        this._layers = [];\r\n\r\n        exclude = typeof exclude == 'object' ? exclude : [];\r\n\r\n        for (let i = 0; i < itsConfig.length; i++) {\r\n            let lyrConfig = itsConfig[i];\r\n            let addLayer = true;\r\n\r\n            for (let j = 0; j < exclude.length; j++) {\r\n                if (exclude[j] == lyrConfig.itsType) {\r\n                    addLayer = false;\r\n                    break;\r\n                }\r\n            }\r\n\r\n            if (addLayer) {\r\n                let inventLyr = new LayerItsInventory(lyrConfig);\r\n                this['map'].addLayer(inventLyr.olLayer);\r\n                this._layers.push(inventLyr);\r\n\r\n            }\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Return the array of layers in this collection\r\n     * @returns {Array<LayerItsInventory>} an array of layers\r\n     */\r\n    get layers() {\r\n        return this._layers;\r\n    }\r\n}\r\n\r\nnm.ItsLayerCollection = ItsLayerCollection;\r\nexport default ItsLayerCollection;\r\n","/**\r\n * Created by gavorhes on 12/16/2015.\r\n */\r\nimport $ from '../jquery';\r\nimport provide from '../util/provide';\r\nimport makeGuid from '../util/makeGuid';\r\nimport mapMove from '../olHelpers/mapMove';\r\nlet nm = provide('collections');\r\n\r\nclass LayerGroup {\r\n\r\n    /**\r\n     *\r\n     * @param {object} [groupConfig={}] - group configuration object\r\n     * @param {string} groupConfig.groupName - the group name\r\n     * @param {boolean} [groupConfig.collapse=false] - if the group should be collapsed initially\r\n     * @param {boolean} [groupConfig.addCheck=true] - if the group should have a checkbox controlling visibility of all layers\r\n     * @param {LayerGroup} [parent=undefined] - the parent group\r\n     */\r\n    constructor(groupConfig, parent) {\r\n        this.groupLayers = [];\r\n        this.groupLayersLookup = {};\r\n        this.groupGroups = [];\r\n        this.groupGroupsLookup = {};\r\n        this.itemIdArray = [];\r\n\r\n        if (typeof groupConfig == 'undefined') {\r\n            this.parent = null;\r\n            this.groupId = 'root';\r\n            this.groupName = 'root';\r\n            this.allGroupLookup = {root: this};\r\n            this.allGroupArray = [this];\r\n            this.allLayerArray = [];\r\n            this.allLayerLookup = {};\r\n            this.layerParentLookup = {};\r\n            this.collapse = false;\r\n            this.addCheck = false;\r\n        } else {\r\n            this.groupId = makeGuid();\r\n            this.parent = parent;\r\n            this.groupName = groupConfig.groupName;\r\n            this.collapse = typeof  groupConfig.collapse == 'boolean' ? groupConfig.collapse : false;\r\n            this.addCheck = typeof  groupConfig.addCheck == 'boolean' ? groupConfig.addCheck : true;\r\n        }\r\n    }\r\n\r\n    /**\r\n     *\r\n     * @param {object} groupConfig - configuration object\r\n     * @param {string} groupConfig.groupName - the group name\r\n     * @param {boolean} groupConfig.collapse if the group should be collapsed initially\r\n     * @param {boolean} groupConfig.addCheck if the group should have a checkbox controlling visibility of all layers\r\n     * @param {Array<LayerGroup>} parents parent groups\r\n     * @returns {LayerGroup} the layer group just added\r\n     */\r\n    addGroup(groupConfig, parents) {\r\n        let parent;\r\n        if (parents.length > 0) {\r\n            parent = parents[parents.length - 1];\r\n        } else {\r\n            parent = 'root';\r\n        }\r\n\r\n\r\n        /**\r\n         * @type {LayerGroup}\r\n         */\r\n        let parentGroup = this.allGroupLookup[parent];\r\n        let newGroup = new LayerGroup(groupConfig, parentGroup);\r\n        this.allGroupLookup[newGroup.groupId] = newGroup;\r\n        this.allGroupArray.push(newGroup);\r\n\r\n        parentGroup.groupGroups.push(newGroup);\r\n        parentGroup.groupGroupsLookup[newGroup.groupId] = newGroup;\r\n\r\n        if (parentGroup.itemIdArray.indexOf(newGroup.groupId) > 0) {\r\n            console.log(newGroup.groupId);\r\n            throw 'layer and group ids must be unique';\r\n        }\r\n        parentGroup.itemIdArray.push(newGroup.groupId);\r\n\r\n        return newGroup;\r\n    }\r\n\r\n    /**\r\n     *\r\n     * @param {LayerBase} newLayer the layer to be added\r\n     * @param {Array} parents array\r\n     */\r\n    addLegendLayer(newLayer, parents) {\r\n        let parent;\r\n        if (parents.length > 0) {\r\n            parent = parents[parents.length - 1];\r\n        } else {\r\n            parent = 'root';\r\n        }\r\n\r\n        this.allLayerLookup[newLayer.id] = newLayer;\r\n        this.allLayerArray.push(newLayer);\r\n\r\n        /**\r\n         * @type {LayerGroup}\r\n         */\r\n        let parentGroup = this.allGroupLookup[parent];\r\n\r\n        parentGroup.groupLayers.push(newLayer);\r\n        parentGroup.groupLayersLookup[newLayer.id] = newLayer;\r\n        if (parentGroup.itemIdArray.indexOf(newLayer.id) > 0) {\r\n            console.log(newLayer.id);\r\n            throw 'layer and group ids must be unique';\r\n        }\r\n        parentGroup.itemIdArray.push(newLayer.id);\r\n\r\n        this.layerParentLookup[newLayer.id] = parentGroup;\r\n\r\n    }\r\n\r\n    getLegendHtml(legendId, options) {\r\n\r\n\r\n        let legendHtml = `<ul id=\"${legendId}\" class=\"legend-container\">`;\r\n\r\n        legendHtml += `<li>${options.legendTitle}<input type=\"checkbox\" checked id=\"suppress-by-extent-${legendId}\" class=\"suppress-by-extent\">` +\r\n            `<label title=\"Suppress layers not visible at this zoom level\" for=\"suppress-by-extent-${legendId}\">` +\r\n            `<span></span>` +\r\n            `</label></li>`;\r\n\r\n        legendHtml += this._buildLegend(this.itemIdArray, this, options.layerDivClasses) + '</ul>';\r\n\r\n        return legendHtml;\r\n    }\r\n\r\n    /**\r\n     * @param {Array} itemIds the items to process\r\n     * @param {LayerGroup} theGroup new group\r\n     * @param {Array} [layerDivClasses=[]] optional classes to apply to the layer divs\r\n     * @static\r\n     * @returns {string} html string\r\n     */\r\n    _buildLegend(itemIds, theGroup, layerDivClasses) {\r\n\r\n        if (itemIds.length == 0) {\r\n            return '';\r\n        }\r\n\r\n        let theHml = '';\r\n\r\n        let itemId = itemIds[0];\r\n\r\n        if (theGroup.groupLayersLookup[itemId]) {\r\n\r\n            /**\r\n             * @type {LayerBase}\r\n             */\r\n            let lyr = theGroup.groupLayersLookup[itemId];\r\n            theHml += `<li id=\"${lyr.id}-layer-li\" class=\"legend-layer-li ${layerDivClasses.join(' ')}\">` + lyr.getLegendDiv() + '</li>';\r\n\r\n\r\n        } else if (theGroup.groupGroupsLookup[itemId]) {\r\n            /**\r\n             * type {LayerGroup}\r\n             */\r\n            let otherGroup = theGroup.groupGroupsLookup[itemId];\r\n\r\n            theHml += `<li>`;\r\n            theHml += `<div id=\"${otherGroup.groupId}-legend-layer-div\" ` +\r\n                `class=\"legend-layer-group  ${layerDivClasses.join(' ')}\">`;\r\n\r\n            if (otherGroup.addCheck) {\r\n                theHml += `<input type=\"checkbox\" checked id=\"${otherGroup.groupId}-group-chck\">` +\r\n                    `<label for=\"${otherGroup.groupId}-group-chck\" title=\"Click arrow to expand or collapse\">${otherGroup.groupName}</label>`;\r\n            } else {\r\n                theHml += `<label title=\"Click arrow to expand or collapse\">${otherGroup.groupName}</label>`;\r\n            }\r\n\r\n            theHml += `<span title=\"Expand/Collapse\" class=\"layer-group-expander`;\r\n            theHml += `${otherGroup.collapse ? ' legend-layer-group-initial-collapse' : ''}\">`;\r\n            theHml += otherGroup.collapse ? '&#9654;' : '&#9660;';\r\n            theHml += '</span>';\r\n\r\n            //parents.push(groupId);\r\n            theHml += '<ul>' + this._buildLegend(otherGroup.itemIdArray, otherGroup, layerDivClasses) + '</ul>';\r\n            theHml += '</div>';\r\n            theHml += '</li>';\r\n        }\r\n\r\n        return theHml + this._buildLegend(itemIds.slice(1), theGroup, layerDivClasses);\r\n    }\r\n}\r\n\r\n/**\r\n * a wrapper to make a legend\r\n */\r\nclass LayerLegend {\r\n\r\n    /**\r\n     *\r\n     * @param {Array} legendItems array of layers or objects with {groupName:  {string}, collapse: {boolean}, addCheck: {boolean}, items: {Array}}\r\n     * @param {string} divId the div where the legend should be added\r\n     * @param {object} options for legend\r\n     * @param {Array} [options.layerDivClasses=[]] optional array of classes to be applied to the layer legend divs for custom styling\r\n     * @param {string} [options.legendTitle=Legend] the legend title\r\n     * @param {bool} [options.scaleDependent=true] if legend display is scale dependent\r\n     */\r\n    constructor(legendItems, divId, options) {\r\n        for (let i of legendItems) {\r\n            if (typeof i == 'undefined') {\r\n                throw 'undefined item passed in array to legend constructor';\r\n            }\r\n        }\r\n\r\n        options = options || {};\r\n\r\n        options.legendTitle = typeof options.legendTitle == 'string' ? options.legendTitle : 'Legend';\r\n        options.scaleDependent = typeof options.scaleDependent == 'boolean' ? options.scaleDependent : true;\r\n        options.layerDivClasses = options.layerDivClasses || [];\r\n\r\n        // if legend display is scale dependent, make sure the mapMove object is initialized first\r\n        if (options.scaleDependent) {\r\n            mapMove.checkInit();\r\n        }\r\n\r\n        this.$divElement = $('#' + divId);\r\n\r\n        this._legendItems = legendItems;\r\n\r\n        this.layerGroup = new LayerGroup();\r\n\r\n        this._buildTree(legendItems);\r\n\r\n        this.legendId = makeGuid();\r\n\r\n        this.$divElement.append(this.layerGroup.getLegendHtml(this.legendId, options));\r\n\r\n        for (let l of this.layerGroup.allLayerArray){\r\n            l.applyCollapse();\r\n        }\r\n\r\n        let _this = this;\r\n\r\n        //// if legend display is scale dependent, make sure the mapMove object is initialized first\r\n        if (options.scaleDependent) {\r\n            mapMove.checkInit();\r\n\r\n            mapMove.addCallback(function (ext, zoom, evt) {\r\n                if (typeof evt == 'undefined' || evt == 'change:resolution') {\r\n                    for (let lyr of this.layerGroup.allLayerArray) {\r\n                        let $lyrLi = $('#' + lyr.id + '-layer-li');\r\n                        if (zoom > lyr.maxZoom || zoom < lyr.minZoom) {\r\n                            $lyrLi.addClass('layer-not-visible');\r\n                        } else {\r\n                            $lyrLi.removeClass('layer-not-visible');\r\n                        }\r\n                    }\r\n                }\r\n            }, this, 100, true, 'legend1');\r\n        }\r\n\r\n        // <editor-fold desc=\"add event listeners\">\r\n\r\n        this.$divElement.find(\".suppress-by-extent\").change(function () {\r\n            let legendLayerLis = $('.legend-layer-li');\r\n            if (this.checked) {\r\n                legendLayerLis.removeClass('layer-force-show');\r\n            } else {\r\n                legendLayerLis.addClass('layer-force-show');\r\n            }\r\n        });\r\n\r\n\r\n        this.$divElement.find('.legend-check').change(function () {\r\n            let lyrId = this.id.replace('-legend-layer-check', '');\r\n            _this.layerGroup.allLayerLookup[lyrId].visible = this.checked;\r\n        });\r\n\r\n        this.$divElement.find('.legend-layer-group > input[type=checkbox]').change(function () {\r\n            $(this).siblings('ul').find('input[type=checkbox]').prop('checked', this.checked).trigger('change');\r\n        });\r\n\r\n        this.$divElement.find('.layer-group-expander').click(function () {\r\n            let $this = $(this);\r\n            $this.removeClass('legend-layer-group-initial-collapse');\r\n\r\n            $this.siblings('ul').slideToggle();\r\n\r\n            if ($this.hasClass('legend-layer-group-collapsed')){\r\n                $this.removeClass('legend-layer-group-collapsed');\r\n                $this.html('&#9660;');\r\n            } else {\r\n                $this.addClass('legend-layer-group-collapsed');\r\n                $this.html('&#9654;');\r\n            }\r\n        });\r\n\r\n        this.$divElement.find('.legend-layer-group-initial-collapse').trigger('click');\r\n        // </editor-fold>\r\n    }\r\n\r\n    /**\r\n     * @param {Array} [legendItems=this._layerConfig] the legend items\r\n     * @param {Array} [parents=[]] the ordered list of groups in which this item is a member\r\n     * @private\r\n     */\r\n    _buildTree(legendItems, parents) {\r\n\r\n        if (legendItems.length == 0) {\r\n            return;\r\n        }\r\n\r\n        let oneItem = legendItems[0];\r\n\r\n        //reset the parent if the item is in the base array\r\n        if (this._legendItems.indexOf(oneItem) > -1 || typeof parents == 'undefined') {\r\n            parents = [];\r\n        }\r\n\r\n        if (typeof oneItem['groupName'] !== 'undefined') {\r\n            let groupItem = legendItems[0];\r\n            let newGroup = this.layerGroup.addGroup(groupItem, parents);\r\n            parents.push(newGroup.groupId);\r\n            this._buildTree(groupItem.items, parents);\r\n        } else {\r\n            /**\r\n             * @type {LayerBase}\r\n             */\r\n            let layerItem = legendItems[0];\r\n\r\n            this.layerGroup.addLegendLayer(layerItem, parents);\r\n        }\r\n\r\n        this._buildTree(legendItems.slice(1), parents);\r\n    }\r\n\r\n    set showAll(val) {\r\n\r\n    }\r\n}\r\n\r\nnm.LayerLegend = LayerLegend;\r\nexport default LayerLegend;\r\n","/**\r\n * Created by gavorhes on 5/3/2016.\r\n */\r\nglobal.jQuery = require('jquery');\r\n\r\nexport default global.jQuery;","import $ from '../jquery';\r\nimport makeGuid from '../util/makeGuid';\r\nimport * as zoomResolutionConvert from '../olHelpers/zoomResolutionConvert';\r\nimport provide from '../util/provide';\r\nconst nm = provide('layers');\r\n\r\n/**\r\n * The base layer class\r\n * @abstract\r\n */\r\nclass LayerBase {\r\n    /**\r\n     * The base layer for all others\r\n     * @param {string} url - url for source\r\n     * @param {object} options - config\r\n     * @param {string} [options.id=makeGuid()] - layer id\r\n     * @param {string} [options.name=Unnamed Layer] - layer name\r\n     * @param {number} [options.opacity=1] - opacity\r\n     * @param {boolean} [options.visible=true] - default visible\r\n     * @param {number} [options.minZoom=undefined] - min zoom level, 0 - 28\r\n     * @param {number} [options.maxZoom=undefined] - max zoom level, 0 - 28\r\n     * @param {object} [options.params={}] - the get parameters to include to retrieve the layer\r\n     * @param {number} [options.zIndex=0] - the z index for the layer\r\n     * @param {function} [options.loadCallback] - function to call on load, context this is the layer object\r\n     * @param {boolean} [options.legendCollapse=false] - if the legend item should be initially collapsed\r\n     * @param {boolean} [options.legendCheckbox=true] - if the legend item should have a checkbox for visibility\r\n     * @param {boolean} [options.legendContent=undefined] - additional content to add to the legend\r\n     */\r\n    constructor(url, options) {\r\n        options = options || {};\r\n\r\n        if (typeof url !== 'string') {\r\n            throw 'Invalid URL';\r\n        }\r\n        this._url = url;\r\n        \r\n        \r\n        \r\n        this._params = typeof options.params == 'object' ? options.params : {};\r\n        this._legendCollapse = typeof options.legendCollapse == 'boolean' ? options.legendCollapse : false;\r\n        this._legendCheckbox = typeof options.legendCheckbox == 'boolean' ? options.legendCheckbox : true;\r\n\r\n        this.id = options.id || makeGuid();\r\n        this._name = options.name || 'Unnamed Layer';\r\n        this.animate = false;\r\n        this._opacity = typeof options.opacity == 'number' ? options.opacity : 1;\r\n\r\n        if (this._opacity > 1) {\r\n            this._opacity = 1;\r\n        } else if (this._opacity < 0) {\r\n            this._opacity = 0;\r\n        }\r\n\r\n        this._visible = typeof options.visible === 'boolean' ? options.visible : true;\r\n        \r\n        this._source = undefined;\r\n        this.olLayer = undefined;\r\n        this._loaded = false;\r\n\r\n        this._maxResolution = zoomResolutionConvert.zoomToResolution(options.minZoom);\r\n        if (typeof this._maxResolution !== 'undefined') {\r\n            this._maxResolution += 0.00001;\r\n        }\r\n        this._minResolution = zoomResolutionConvert.zoomToResolution(options.maxZoom);\r\n\r\n        this._minZoom = typeof options.minZoom == 'number' ? options.minZoom : undefined;\r\n        this._maxZoom = typeof options.maxZoom == 'number' ? options.maxZoom : undefined;\r\n        this._zIndex = typeof options.zIndex == 'number' ? options.zIndex : 0;\r\n\r\n        this.loadCallback = typeof options.loadCallback == 'function' ? options.loadCallback : function () {\r\n        };\r\n\r\n\r\n        this._legendContent = '';\r\n\r\n        if (this._legendCheckbox) {\r\n            this._legendContent += `<input type=\"checkbox\" ${this.visible ? 'checked' : ''} ` +\r\n                `class=\"legend-check\" id=\"${this.id}-legend-layer-check\"><span></span>`;\r\n            this._legendContent += `<label for=\"${this.id}-legend-layer-check\" class=\"legend-layer-name\">${this.name}</label>`;\r\n        } else {\r\n            this._legendContent += `<label class=\"legend-layer-name\">${this.name}</label>`;\r\n        }\r\n\r\n        this._$legendDiv = null;\r\n        this._applyCollapseCalled = false;\r\n        this._addLegendContent(typeof options.legendContent === 'string' ? options.legendContent : undefined);\r\n    }\r\n\r\n    /**\r\n     * base load function, sets _loaded = true if it is not already\r\n     * @protected\r\n     * @returns {boolean} if already loaded\r\n     */\r\n    _load() {\r\n        if (this.loaded == true) {\r\n            return true;\r\n        } else {\r\n            this._loaded = true;\r\n\r\n            return false;\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Get the legend html, be sure to only add to the DOM once\r\n     * @returns {string} html for layer wrapped in a div\r\n     */\r\n    getLegendDiv() {\r\n        return `<div class=\"legend-layer-div\" id=\"${this.id}-legend-layer-div\">${this._legendContent}</div>`;\r\n    }\r\n\r\n    /**\r\n     *\r\n     * @param {string|undefined} additionalContent - additional content to add to legend\r\n     * @private\r\n     */\r\n    _addLegendContent(additionalContent) {\r\n        additionalContent = typeof additionalContent == 'string' ? additionalContent : '';\r\n\r\n        let addCollapse = additionalContent.indexOf('<ul>') > -1;\r\n\r\n        if (addCollapse) {\r\n            additionalContent = '<span class=\"legend-items-expander\" title=\"Expand/Collapse\">&#9660;</span>' + additionalContent;\r\n        }\r\n\r\n        this._legendContent += additionalContent;\r\n\r\n        this._$legendDiv = $(`#${this.id}-legend-layer-div`);\r\n\r\n        if (this._$legendDiv.length > 0) {\r\n            this._$legendDiv.append(additionalContent);\r\n            this.applyCollapse();\r\n        }\r\n    }\r\n\r\n    /**\r\n     * add additional content to the legend\r\n     * @param {string} [additionalContent=] - additonal content to add\r\n     */\r\n    addLegendContent(additionalContent) {\r\n        this._addLegendContent(additionalContent);\r\n    }\r\n\r\n    applyCollapse() {\r\n        if (this._applyCollapseCalled) {\r\n            console.log('collapse already applied');\r\n\r\n            return undefined;\r\n        }\r\n\r\n        this._$legendDiv = $(`#${this.id}-legend-layer-div`);\r\n\r\n        if (this._$legendDiv.length > 0) {\r\n\r\n            let $expander = this._$legendDiv.find('.legend-items-expander');\r\n\r\n            if ($expander.length > 0) {\r\n                this._applyCollapseCalled = true;\r\n\r\n                $expander.click(function () {\r\n                    let $this = $(this);\r\n\r\n                    $this.siblings('ul').slideToggle();\r\n\r\n                    if ($this.hasClass('legend-layer-group-collapsed')) {\r\n                        $this.removeClass('legend-layer-group-collapsed');\r\n                        $this.html('&#9660;');\r\n                    } else {\r\n                        $this.addClass('legend-layer-group-collapsed');\r\n                        $this.html('&#9654;');\r\n                    }\r\n                });\r\n\r\n                if (this._legendCollapse) {\r\n                    $expander.trigger('click');\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    /**\r\n     * trick to refresh the layer\r\n     */\r\n    refresh(){\r\n        if (this.source){\r\n            this.source.refresh();\r\n            //let src = this.source;\r\n            //this.olLayer.setSource(undefined);\r\n            //this.olLayer.setSource(src);\r\n        }\r\n    }\r\n\r\n\r\n    /**\r\n     * get the legend content\r\n     * @type {string}\r\n     */\r\n    get legendContent() {\r\n        return this._legendContent;\r\n    }\r\n\r\n    /**\r\n     * set the legend content directly\r\n     * @param {string} newVal - new content\r\n     * @protected\r\n     */\r\n    set legendContent(newVal) {\r\n        this._legendContent = newVal;\r\n    }\r\n\r\n    /**\r\n     * get the map get params\r\n     * @type {object}\r\n     */\r\n    get params() {\r\n        return this._params;\r\n    }\r\n\r\n    /**\r\n     * set the map get params\r\n     * @param {object} newParams - new get params\r\n     * @protected\r\n     */\r\n    set params(newParams){\r\n        this._params = newParams;\r\n    }\r\n\r\n    /**\r\n     * get the minimum resolution\r\n     * @type {number|*}\r\n     */\r\n    get minResolution() {\r\n        return this._minResolution;\r\n    }\r\n\r\n    /**\r\n     * get the maximum resolution\r\n     * @type {number|*}\r\n     */\r\n    get maxResolution() {\r\n        return this._maxResolution;\r\n    }\r\n\r\n    /**\r\n     * get min zoom\r\n     * @type {number|*}\r\n     */\r\n    get minZoom() {\r\n        return this._minZoom;\r\n    }\r\n\r\n    /**\r\n     * get max zoom\r\n     * @type {number|*}\r\n     */\r\n    get maxZoom() {\r\n        return this._maxZoom;\r\n    }\r\n\r\n    /**\r\n     * get the url\r\n     * @type {string}\r\n     */\r\n    get url() {\r\n        return this._url;\r\n    }\r\n\r\n    /**\r\n     * Get the layer visibility\r\n     * @type {boolean}\r\n     */\r\n    get visible() {\r\n        return this._visible;\r\n    }\r\n\r\n    /**\r\n     * Set the layer visibility\r\n     * @param {boolean} visibility - layer visibility\r\n     */\r\n    set visible(visibility) {\r\n        this._visible = visibility;\r\n        if (this.olLayer) {\r\n            this.olLayer.setVisible(this._visible);\r\n            if (visibility && !this._loaded) {\r\n                this._load();\r\n            }\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Get the layer opacity\r\n     * @type {number}\r\n     */\r\n    get opacity() {\r\n        return this._opacity;\r\n    }\r\n\r\n    /**\r\n     * Set the layer opacity\r\n     * @param {number} opacity - layer opacity\r\n     */\r\n    set opacity(opacity) {\r\n        this._opacity = opacity;\r\n        if (this.olLayer) {\r\n            this.olLayer.setOpacity(this._opacity);\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Get the layer name\r\n     * @type {string}\r\n     */\r\n    get name() {\r\n        return this._name;\r\n    }\r\n\r\n    /**\r\n     * set the layer name\r\n     * @param {string} newName - the new name\r\n     */\r\n    set name(newName) {\r\n        this._name = newName;\r\n    }\r\n\r\n    /**\r\n     * Check if the layer is loaded\r\n     * @type {boolean}\r\n     */\r\n    get loaded() {\r\n        return this._loaded;\r\n    }\r\n\r\n    /**\r\n     * get the layer source\r\n     * @type {*}\r\n     */\r\n    get source() {\r\n        return this._source;\r\n    }\r\n\r\n    /**\r\n     * get the z index\r\n     * @type {number}\r\n     */\r\n    get zIndex(){\r\n        return this._zIndex;\r\n    }\r\n\r\n    /**\r\n     * set the z index\r\n     * @param {number} newZ - new Z index\r\n     */\r\n    set zIndex(newZ){\r\n        this._zIndex = newZ;\r\n        this.olLayer.setZIndex(this.zIndex);\r\n    }\r\n}\r\n\r\nnm.LayerBase = LayerBase;\r\nexport default LayerBase;\r\n","import $ from '../jquery';\r\nimport LayerBase from './LayerBase';\r\nimport mapMove from '../olHelpers/mapMove';\r\nimport provide from '../util/provide';\r\nimport ol from '../ol/ol';\r\nconst nm = provide('layers');\r\n\r\n/**\r\n * The make mapMoveGetParams function takes the extent and the zoom level\r\n * context is 'this' object, probably want to do something with this.mapMoveParams\r\n * @callback mapMoveMakeGetParams\r\n * @param {LayerBaseVector} lyr\r\n * @param {object} extent\r\n * @param {number} extent.minX\r\n * @param {number} extent.minY\r\n * @param {number} extent.maxX\r\n * @param {number} extent.maxY\r\n * @param {number} zoomLevel\r\n */\r\n\r\n\r\n/**\r\n * The Vector layer base\r\n * @augments LayerBase\r\n * @abstract\r\n */\r\nclass LayerBaseVector extends LayerBase {\r\n\r\n    /**\r\n     * The base vector layer\r\n     * @param {string} url - pass an empty string to prevent default load and add from a json source\r\n     * @param {object} options - config\r\n     * @param {string} [options.id] - layer id\r\n     * @param {string} [options.name=Unnamed Layer] - layer name\r\n     * @param {number} [options.opacity=1] - opacity\r\n     * @param {boolean} [options.visible=true] - default visible\r\n     * @param {number} [options.minZoom=undefined] - min zoom level, 0 - 28\r\n     * @param {number} [options.maxZoom=undefined] - max zoom level, 0 - 28\r\n     * @param {object} [options.params={}] the get parameters to include to retrieve the layer\r\n     * @param {number} [options.zIndex=0] the z index for the layer\r\n     * @param {function} [options.loadCallback] function to call on load, context this is the layer object\r\n     * @param {boolean} [options.legendCollapse=false] if the legend item should be initially collapsed\r\n     * @param {boolean} [options.legendCheckbox=true] if the legend item should have a checkbox for visibility\r\n     * @param {boolean} [options.legendContent] additional content to add to the legend\r\n     *\r\n     * @param {boolean} [options.autoLoad=false] if the layer should auto load if not visible\r\n     * @param {object} [options.style=undefined] the layer style, use openlayers default style if not defined\r\n     * @param {boolean} [options.onDemand=false] if the layer should be loaded by extent on map move\r\n     * @param {number} [options.onDemandDelay=300] delay before the map move callback should be called\r\n     * @param {mapMoveMakeGetParams} [options.mapMoveMakeGetParams=function(lyr, extent, zoomLevel){}] function to create additional map move params\r\n     * @param {MapMoveCls} [options.mapMoveObj=mapMove] alternate map move object for use with multi map pages\r\n     *\r\n     */\r\n    constructor(url, options) {\r\n        super(url, options);\r\n\r\n        //prevent regular load if no url has been provided\r\n        if (this.url.trim() == '') {\r\n            this._loaded = true;\r\n        }\r\n\r\n        this._style = typeof options.style == 'undefined' ? undefined : options.style;\r\n\r\n        if (this.visible) {\r\n            this._autoLoad = true;\r\n        } else {\r\n            this._autoLoad = (typeof options['autoLoad'] == 'boolean' ? options['autoLoad'] : false);\r\n        }\r\n\r\n        this._onDemand = typeof options.onDemand == 'boolean' ? options.onDemand : false;\r\n        this._onDemandDelay = typeof options.onDemandDelay == 'number' ? options.onDemandDelay : 300;\r\n\r\n        if (options.mapMoveObj){\r\n            this._mapMove = options.mapMoveObj;\r\n        } else {\r\n            this._mapMove = this._onDemand ? mapMove : undefined;\r\n        }\r\n\r\n        this._mapMoveMakeGetParams = typeof options.mapMoveMakeGetParams == 'function' ? options.mapMoveMakeGetParams :\r\n            function(lyr, extent, zoomLevel){\r\n                return {};\r\n            };\r\n\r\n        if (this._onDemand) {\r\n            this._loaded = true;\r\n            this._mapMoveParams = {};\r\n            this._mapMove.checkInit();\r\n            this._mapMove.addVectorLayer(this);\r\n        }\r\n\r\n        this._source = new ol.source.Vector();\r\n\r\n        /**\r\n         *\r\n         * @type {ol.layer.Vector|ol.layer.Base}\r\n         */\r\n        this.olLayer = new ol.layer.Vector(\r\n            {\r\n                source: this._source,\r\n                visible: this.visible,\r\n                style: this.style,\r\n                minResolution: this._minResolution,\r\n                maxResolution: this._maxResolution,\r\n                zIndex: this._zIndex\r\n            }\r\n        );\r\n    }\r\n\r\n    /**\r\n     * dummy to be overridden\r\n     * @param {object} featureCollection - geojson or esrijson object\r\n     */\r\n    addFeatures(featureCollection) {\r\n        console.log('Layer vector base addFeatures is a placeholder and does nothing');\r\n    }\r\n\r\n    /**\r\n     * Before call to map move callback, can prevent call by returning false\r\n     * @param {number} zoom - zoom level\r\n     * @param {string} [evtType=undefined] undefined for initial load, otherwise one of 'change:center', 'change:resolution'\r\n     * @returns {boolean} if the call should proceed\r\n     */\r\n    mapMoveBefore(zoom, evtType) {\r\n        if (this.minZoom !== undefined) {\r\n            if (zoom < this.minZoom) {\r\n                return false;\r\n            }\r\n        }\r\n\r\n        if (this.maxZoom !== undefined) {\r\n            if (zoom > this.maxZoom) {\r\n                return false;\r\n            }\r\n        }\r\n\r\n        return this.visible;\r\n    }\r\n\r\n    /**\r\n     * callback to generate the parameters passed in the get request\r\n     * @param {object} extent - extent object\r\n     * @param {number} extent.minX - minX\r\n     * @param {number} extent.minY - minY\r\n     * @param {number} extent.maxX - maxX\r\n     * @param {number} extent.maxY - maxY\r\n     * @param {number} zoomLevel - zoom level\r\n     */\r\n    mapMoveMakeGetParams(extent, zoomLevel) {\r\n        this._mapMoveParams = {};\r\n        $.extend(this._mapMoveParams, this.params);\r\n        $.extend(this._mapMoveParams, this._mapMoveMakeGetParams(this, extent, zoomLevel));\r\n    }\r\n\r\n    /**\r\n     * callback function on map move\r\n     * @param {object} d - the json response\r\n     */\r\n    mapMoveCallback(d) {\r\n        if (this.source) {\r\n            this._source.clear();\r\n        }\r\n    }\r\n\r\n    /**\r\n     * clear features in the layer\r\n     */\r\n    clear() {\r\n        if (this._source) {\r\n            this._source.clear();\r\n        }\r\n    }\r\n\r\n    /**\r\n     * get on demand delay in miliseconds\r\n     * @type {number|*}\r\n     */\r\n    get onDemandDelay() {\r\n        return this._onDemandDelay;\r\n    }\r\n\r\n    /**\r\n     * get if the layer is autoloaded\r\n     * @type {boolean}\r\n     */\r\n    get autoLoad() {\r\n        return this._autoLoad;\r\n    }\r\n\r\n    /**\r\n     * get the style definition\r\n     * @type {ol.Style|styleFunc}\r\n     */\r\n    get style() {\r\n        return this._style;\r\n    }\r\n\r\n    /**\r\n     * set the style\r\n     * @param {ol.Style|styleFunc} style - the style or function\r\n     */\r\n    set style(style) {\r\n        this._style = style;\r\n        this.olLayer.setStyle(this._style);\r\n    }\r\n\r\n    /**\r\n     * get the map CRS if it is defined by the map move object\r\n     * @type {string|*}\r\n     */\r\n    get mapCrs() {\r\n        if (this._mapMove) {\r\n            return this._mapMove.map.getView().getProjection().getCode();\r\n        } else {\r\n            return undefined;\r\n        }\r\n    }\r\n\r\n    /**\r\n     * get the map move object\r\n     * @type {MapMoveCls|*}\r\n     */\r\n    get mapMove() {\r\n        return this._mapMove;\r\n    }\r\n\r\n    /**\r\n     * map move params\r\n     * @type {object}\r\n     */\r\n    get mapMoveParams() {\r\n        return this._mapMoveParams;\r\n    }\r\n\r\n        /**\r\n     * Get the layer visibility\r\n     * @type {boolean}\r\n     */\r\n    get visible() {\r\n        return super.visible;\r\n    }\r\n\r\n    /**\r\n     * Set the layer visibility\r\n     * @type {boolean}\r\n     * @override\r\n     */\r\n    set visible(visibility) {\r\n        super.visible = visibility;\r\n\r\n        if (this._onDemand) {\r\n            this.mapMove.triggerLyrLoad(this);\r\n        }\r\n    }\r\n\r\n    /**\r\n     * get the layer vector source\r\n     * @override\r\n     * @type {ol.source.Vector}\r\n     */\r\n    get source(){\r\n        return super.source;\r\n    }\r\n\r\n    /**\r\n     * array of ol features\r\n     * @type {Array.<ol.Feature>}\r\n     */\r\n    get features(){\r\n        return this.source.getFeatures();\r\n    }\r\n}\r\n\r\nnm.LayerBaseVector = LayerBaseVector;\r\nexport default LayerBaseVector;\r\n","/**\r\n * Created by gavorhes on 11/2/2015.\r\n */\r\n\r\nimport $ from '../jquery';\r\nimport LayerBaseVector from './LayerBaseVector';\r\nimport provide from '../util/provide';\r\nimport ol from '../ol/ol';\r\nlet nm = provide('layers');\r\n\r\n/**\r\n * The Vector GeoJson Layer\r\n * @augments LayerBaseVector\r\n */\r\nclass LayerBaseVectorGeoJson extends LayerBaseVector {\r\n\r\n    /**\r\n     * @param {string|undefined|null} url - resource url, set to '' to make blank layer\r\n     * @param {object} options - config\r\n     * @param {string} [options.id] - layer id\r\n     * @param {string} [options.name=Unnamed Layer] - layer name\r\n     * @param {number} [options.opacity=1] - opacity\r\n     * @param {boolean} [options.visible=true] - default visible\r\n     * @param {number} [options.minZoom=undefined] - min zoom level, 0 - 28\r\n     * @param {number} [options.maxZoom=undefined] - max zoom level, 0 - 28\r\n     * @param {object} [options.params={}] the get parameters to include to retrieve the layer\r\n     * @param {number} [options.zIndex=0] the z index for the layer\r\n     * @param {function} [options.loadCallback] function to call on load, context this is the layer object\r\n     * @param {boolean} [options.legendCollapse=false] if the legend item should be initially collapsed\r\n     * @param {boolean} [options.legendCheckbox=true] if the legend item should have a checkbox for visibility\r\n     * @param {boolean} [options.legendContent] additional content to add to the legend\r\n     *\r\n     * @param {boolean} [options.autoLoad=false] if the layer should auto load if not visible\r\n     * @param {object} [options.style=undefined] the layer style, use openlayers default style if not defined\r\n     * @param {boolean} [options.onDemand=false] if the layer should be loaded by extent on map move\r\n     * @param {number} [options.onDemandDelay=300] delay before the map move callback should be called\r\n     *\r\n     * @param {object} [options.transform={}] SR transform, set as false for no transform\r\n     * @param {string} options.transform.dataProjection=EPSG:4326 the data CRS\r\n     * @param {string} options.transform.featureProjection=EPSG:3857 the feature/map CRS\r\n     * @param {mapMoveMakeGetParams} [options.mapMoveMakeGetParams=function(lyr, extent, zoomLevel){}] function to create additional map move params\r\n     * @param {MapMoveCls} [options.mapMoveObj=mapMove] alternate map move object for use with multi map pages\r\n     */\r\n    constructor(url, options) {\r\n        url = typeof url == 'string' ? url : '';\r\n        super(url, options);\r\n\r\n        this._geoJsonFormat = new ol.format.GeoJSON();\r\n\r\n        this._transform = options.transform || {};\r\n        this._transform.dataProjection = this._transform.dataProjection || \"EPSG:4326\";\r\n        this._transform.featureProjection = this._transform.featureProjection || \"EPSG:3857\";\r\n\r\n        if (this.autoLoad || this.visible) {\r\n            this._load();\r\n        }\r\n    }\r\n\r\n    /**\r\n     * add feature collection\r\n     * @param {object} featureCollection - as geojson object\r\n     */\r\n    addFeatures(featureCollection) {\r\n        if (this._transform.dataProjection == 'EPSG:3857' && this._transform.featureProjection == 'EPSG:3857') {\r\n            this._source.addFeatures(this._geoJsonFormat.readFeatures(featureCollection));\r\n        } else {\r\n            this._source.addFeatures(this._geoJsonFormat.readFeatures(featureCollection, this._transform));\r\n        }\r\n    }\r\n\r\n    /**\r\n     * trigger load features\r\n     * @protected\r\n     * @returns {boolean} if already loaded\r\n     */\r\n    _load() {\r\n\r\n        if (super._load()) {\r\n            return true;\r\n        }\r\n\r\n        $.get(this._url,\r\n            this._params,\r\n            (d) => {\r\n                this.addFeatures(d);\r\n                this.loadCallback(this);\r\n            }, 'json').fail(\r\n            function () {\r\n                this._loaded = false;\r\n            }\r\n        );\r\n\r\n        return false;\r\n    }\r\n\r\n    /**\r\n     * callback function on map move\r\n     * @param {object} d the json response\r\n     * @override\r\n     */\r\n    mapMoveCallback(d) {\r\n        super.mapMoveCallback(d);\r\n        this._source.addFeatures(this._geoJsonFormat.readFeatures(d, this._transform));\r\n    }\r\n}\r\n\r\nnm.LayerBaseVectorGeoJson = LayerBaseVectorGeoJson;\r\nexport default LayerBaseVectorGeoJson;\r\n","/**\r\n * Created by gavorhes on 12/7/2015.\r\n */\r\nimport $ from '../jquery';\r\nimport LayerBase from './LayerBase';\r\nimport * as esriToOl from '../olHelpers/esriToOlStyle';\r\nimport mapPopup from '../olHelpers/mapPopup';\r\nimport provide from '../util/provide';\r\nimport ol from '../ol/ol';\r\nconst nm = provide('layers');\r\n\r\n/**\r\n * esri mapserver layer\r\n * @augments LayerBase\r\n */\r\nclass LayerEsriMapServer extends LayerBase {\r\n    /**\r\n     * The base layer for all others\r\n     * @param {string} url - resource url\r\n     * @param {object} options - config\r\n     * @param {string} [options.id] - layer id\r\n     * @param {string} [options.name=Unnamed Layer] - layer name\r\n     * @param {number} [options.opacity=1] - opacity\r\n     * @param {boolean} [options.visible=true] - default visible\r\n     * @param {number} [options.minZoom=undefined] - min zoom level, 0 - 28\r\n     * @param {number} [options.maxZoom=undefined] - max zoom level, 0 - 28\r\n     * @param {object} [options.params={}] the get parameters to include to retrieve the layer\r\n     * @param {number} [options.zIndex=0] the z index for the layer\r\n     * @param {function} [options.loadCallback] function to call on load, context this is the layer object\r\n     * @param {boolean} [options.legendCollapse=false] if the legend item should be initially collapsed\r\n     * @param {boolean} [options.legendCheckbox=true] if the legend item should have a checkbox for visibility\r\n     * @param {boolean} [options.legendContent] additional content to add to the legend\r\n     * @param {boolean} [options.addPopup=false] if a popup should be added\r\n     */\r\n    constructor(url, options) {\r\n        super(url, options);\r\n        this._source = new ol.source.TileArcGISRest({url: this.url == '' ? undefined : this.url});\r\n\r\n        this.olLayer = new ol.layer.Tile({\r\n            source: this._source,\r\n            visible: this.visible,\r\n            opacity: this.opacity,\r\n            minResolution: this._minResolution,\r\n            maxResolution: this._maxResolution,\r\n            zIndex: this._zIndex\r\n        });\r\n\r\n        options.addPopup = typeof options.addPopup == 'boolean' ? options.addPopup : false;\r\n\r\n        this._esriFormat = new ol.format.EsriJSON();\r\n        this._popupRequest = null;\r\n\r\n        this.addLegendContent();\r\n\r\n        if (options.addPopup) {\r\n            mapPopup.addMapServicePopup(this);\r\n        }\r\n    }\r\n\r\n    /**\r\n     * add additional content to the legend\r\n     * @param {string} [additionalContent=''] additional content for legend\r\n     */\r\n    addLegendContent(additionalContent) {\r\n        let urlCopy = this.url;\r\n\r\n        if (urlCopy[urlCopy.length - 1] !== '/') {\r\n            urlCopy += '/';\r\n        }\r\n\r\n        urlCopy += 'legend?f=pjson&callback=?';\r\n\r\n        let _this = this;\r\n        let superAddLegend = super.addLegendContent;\r\n\r\n        $.get(urlCopy, {}, function (d) {\r\n            let newHtml = esriToOl.makeMapServiceLegend(d);\r\n            superAddLegend.call(_this, newHtml);\r\n        }, 'json');\r\n    }\r\n\r\n\r\n    getPopupInfo(queryParams) {\r\n        if (!this.visible) {\r\n            return;\r\n        }\r\n\r\n        let urlCopy = this.url;\r\n\r\n        if (urlCopy[urlCopy.length - 1] != '/') {\r\n            urlCopy += '/';\r\n        }\r\n\r\n        urlCopy += 'identify?callback=?';\r\n\r\n        let _this = this;\r\n\r\n        if (this._popupRequest != null) {\r\n            this._popupRequest.abort();\r\n        }\r\n\r\n        this._popupRequest = $.get(urlCopy, queryParams, function (d) {\r\n            for (let r of d['results']) {\r\n\r\n                let popupHtml = '<table class=\"esri-popup-table\">';\r\n\r\n                for (let a in r['attributes']) {\r\n                    if (r['attributes'].hasOwnProperty(a)) {\r\n                        let attrVal = r['attributes'][a];\r\n\r\n                        if (attrVal == null || attrVal.toString().toLowerCase() == 'null') {\r\n                            continue;\r\n                        }\r\n\r\n                        let attr = a;\r\n                        if (attr.length > 14) {\r\n                            attr = attr.slice(0, 11) + '...';\r\n                        }\r\n\r\n                        popupHtml += `<tr><td>${attr}</td><td>${attrVal}</td></tr>`;\r\n                    }\r\n                }\r\n\r\n                popupHtml += '</table>';\r\n\r\n                mapPopup.addMapServicePopupContent(_this._esriFormat.readFeature(r), _this, popupHtml, r['layerName']);\r\n            }\r\n        }, 'json').always(function () {\r\n            _this._popupRequest = null;\r\n        });\r\n    }\r\n\r\n    /**\r\n     * overwrite the base load\r\n     * @protected\r\n     */\r\n    _load() {\r\n    }\r\n\r\n    /**\r\n     *\r\n     * @returns {ol.source.TileArcGISRest} the vector source\r\n     */\r\n    get source() {\r\n        return super.source;\r\n    }\r\n}\r\nnm.LayerEsriMapServer = LayerEsriMapServer;\r\nexport default LayerEsriMapServer;\r\n","/**\r\n * Created by gavorhes on 12/8/2015.\r\n */\r\n\r\nimport $ from '../jquery';\r\nimport LayerBaseVectorGeoJson from './LayerBaseVectorGeoJson';\r\nimport mapMove from '../olHelpers/mapMove';\r\nimport mapPopup from '../olHelpers/mapPopup';\r\nimport provide from '../util/provide';\r\nimport ol from '../ol/ol';\r\nlet nm = provide('layers');\r\n\r\n\r\nfunction checkStyleNumber(itsIcon, itsLineStyle, itsIconConfig, itsLineConfig) {\r\n    \"use strict\";\r\n\r\n    //make sure one and only one configuration is defined;\r\n    let configCount = 0;\r\n    if (typeof itsIcon == 'string') {\r\n        configCount++;\r\n    }\r\n\r\n    if (typeof itsLineStyle == 'object') {\r\n        itsLineStyle.width = typeof itsLineStyle.width == 'number' ? itsLineStyle.width : 5;\r\n        itsLineStyle.color = typeof itsLineStyle.color == 'string' ? itsLineStyle.color : 'red';\r\n        configCount++;\r\n    }\r\n\r\n    if (typeof itsIconConfig == 'object') {\r\n        itsIconConfig.defaultName = itsIconConfig.defaultName || 'Other';\r\n\r\n        if (typeof itsIconConfig.iconArray == 'undefined') {\r\n            itsIconConfig.iconArray = [];\r\n        }\r\n\r\n        configCount++;\r\n    }\r\n\r\n    if (typeof itsLineConfig == 'object') {\r\n        itsLineConfig.defaultName = itsLineConfig.defaultName || 'Other';\r\n        itsLineConfig.defaultWidth = itsLineConfig.defaultWidth || 5;\r\n        itsLineConfig.defaultColor = itsLineConfig.defaultColor || 'red';\r\n\r\n\r\n        if (typeof itsLineConfig.lineArray == 'undefined') {\r\n            itsLineConfig.lineArray = [];\r\n        }\r\n\r\n        // set the width if not defined\r\n        for (let i = 0; i < itsLineConfig.lineArray.length; i++) {\r\n            if (itsLineConfig.lineArray[i].length == 3) {\r\n                itsLineConfig.lineArray[i].push(5);\r\n            }\r\n        }\r\n\r\n        configCount++;\r\n    }\r\n\r\n    if (configCount > 1) {\r\n        throw 'Only one style config can be defined';\r\n    }\r\n}\r\n\r\n/**\r\n *\r\n * @param {string} [itsIcon=undefined] the ITS device type icon image see http://transportal.cee.wisc.edu/its/inventory/icons/\r\n *\r\n * @param {object} [itsLineStyle=undefined] A single line style\r\n * @param {string} itsLineStyle.color the line color as rgb or hex\r\n * @param {number} [itsLineStyle.width=5] the line width\r\n *\r\n * @param {object} [itsIconConfig=undefined] The icon subtype configuration\r\n * @param {string} itsIconConfig.prop The property used to define icon attribute symbolization\r\n * @param {string} itsIconConfig.defaultName The default name to be used if no other match is found\r\n * @param {string} itsIconConfig.defaultIcon The default icon to be used for no other matches\r\n * @param {object} [itsIconConfig.iconArray=[]] an array, items with format [property, name, img]\r\n *\r\n * @param {object} [itsLineConfig=undefined] The property used to define icon attribute symbolization\r\n * @param {string} itsLineConfig.prop The property used to define icon attribute symbolization\r\n * @param {string} [itsLineConfig.defaultName=Other] The default name to be used if no other match is found\r\n * @param {string} [itsLineConfig.defaultColor=red] The default line color to be used for no other matches\r\n * @param {number} [itsLineConfig.defaultWidth=5] The default line width to be used for no other matches\r\n * @param {object} [itsLineConfig.lineArray=[]] an array, items with format [property, name, color, optional width]\r\n * @returns {*} undefined, style, or style function\r\n */\r\nfunction defineStyle(itsIcon, itsLineStyle, itsIconConfig, itsLineConfig) {\r\n    \"use strict\";\r\n    checkStyleNumber(itsIcon, itsLineStyle, itsIconConfig, itsLineConfig);\r\n\r\n    let _iconUrlRoot = 'http://transportal.cee.wisc.edu/its/inventory/icons/';\r\n\r\n    if (itsIcon) {\r\n        return new ol.style.Style({\r\n            image: new ol.style.Icon({src: _iconUrlRoot + itsIcon})\r\n        });\r\n    } else if (itsLineStyle) {\r\n        return new ol.style.Style({\r\n            stroke: new ol.style.Stroke({\r\n                color: itsLineStyle.color,\r\n                width: itsLineStyle.width\r\n            })\r\n        });\r\n    } else if (itsIconConfig) {\r\n        return function (feature) {\r\n            let symbolProp = feature.getProperties()[itsIconConfig.prop];\r\n            let iconUrl = _iconUrlRoot + itsIconConfig.defaultIcon;\r\n\r\n            for (let i = 0; i < itsIconConfig.iconArray.length; i++) {\r\n                let thisProp = itsIconConfig.iconArray[i];\r\n\r\n                if (symbolProp.trim().toLocaleLowerCase() == thisProp[0].trim().toLocaleLowerCase()) {\r\n                    iconUrl = _iconUrlRoot + thisProp[2];\r\n                    break;\r\n                }\r\n            }\r\n\r\n            return [new ol.style.Style({\r\n                image: new ol.style.Icon({src: iconUrl})\r\n            })];\r\n        };\r\n    } else if (itsLineConfig) {\r\n        return function (feature) {\r\n            let symbolProp = feature.getProperties()[itsLineConfig.prop];\r\n            let colr = itsLineConfig.defaultColor || 'red';\r\n            let width = itsLineConfig.defaultWidth || 5;\r\n\r\n            for (let i = 0; i < itsLineConfig.lineArray.length; i++) {\r\n                let thisProp = itsLineConfig.lineArray[i];\r\n\r\n                if (symbolProp.trim().toLocaleLowerCase() == thisProp[0].trim().toLocaleLowerCase()) {\r\n                    colr = thisProp[2];\r\n                    width = thisProp[3];\r\n                    break;\r\n                }\r\n            }\r\n\r\n            return [new ol.style.Style({\r\n                stroke: new ol.style.Stroke({\r\n                    color: colr,\r\n                    width: width\r\n                })\r\n            })];\r\n        };\r\n    } else {\r\n        return undefined;\r\n    }\r\n}\r\n\r\n/**\r\n *\r\n * @param {string} [itsIcon=undefined] the ITS device type icon image see http://transportal.cee.wisc.edu/its/inventory/icons/\r\n *\r\n * @param {object} [itsLineStyle=undefined] A single line style\r\n * @param {string} itsLineStyle.color the line color as rgb or hex\r\n * @param {number} [itsLineStyle.width=5] the line width\r\n *\r\n * @param {object} [itsIconConfig=undefined] The icon subtype configuration\r\n * @param {string} itsIconConfig.prop The property used to define icon attribute symbolization\r\n * @param {string} itsIconConfig.defaultName The default name to be used if no other match is found\r\n * @param {string} itsIconConfig.defaultIcon The default icon to be used for no other matches\r\n * @param {object} [itsIconConfig.iconArray=[]] an array, items with format [property, name, img]\r\n *\r\n * @param {object} [itsLineConfig=undefined] The property used to define icon attribute symbolization\r\n * @param {string} itsLineConfig.prop The property used to define icon attribute symbolization\r\n * @param {string} [itsLineConfig.defaultName=Other] The default name to be used if no other match is found\r\n * @param {string} [itsLineConfig.defaultColor=red] The default line color to be used for no other matches\r\n * @param {number} [itsLineConfig.defaultWidth=5] The default line width to be used for no other matches\r\n * @param {object} [itsLineConfig.lineArray=[]] an array, items with format [property, name, color, optional width]\r\n * @returns {string} html to be added to the legend\r\n */\r\nfunction defineLegend(itsIcon, itsLineStyle, itsIconConfig, itsLineConfig) {\r\n    \"use strict\";\r\n\r\n    let iconHeight = 17;\r\n\r\n    checkStyleNumber(itsIcon, itsLineStyle, itsIconConfig, itsLineConfig);\r\n\r\n    let _iconUrlRoot = 'http://transportal.cee.wisc.edu/its/inventory/icons/';\r\n\r\n    if (itsIcon) {\r\n        return `<img src=\"${_iconUrlRoot + itsIcon}\" class=\"legend-layer-icon\" height=\"${iconHeight}\">`;\r\n    } else if (itsLineStyle) {\r\n        return `<hr style=\"height: ${itsLineStyle.width}px; background-color: ${itsLineStyle.color}\">`;\r\n    } else if (itsIconConfig) {\r\n        let outHtml = '';\r\n        outHtml += '<ul>';\r\n\r\n        for (let a of itsIconConfig.iconArray) {\r\n            outHtml += `<li><span class=\"legend-layer-subitem\">${a[1]}</span><img src=\"${_iconUrlRoot + a[2]}\" class=\"legend-layer-icon\" height=\"${iconHeight}\">`;\r\n        }\r\n        outHtml += `<li><span class=\"legend-layer-subitem\">${itsIconConfig.defaultName}</span>` +\r\n            `<img src=\"${_iconUrlRoot + itsIconConfig.defaultIcon}\" class=\"legend-layer-icon\" height=\"${iconHeight}\"></li>`;\r\n        outHtml += '</ul>';\r\n\r\n        return outHtml;\r\n    } else if (itsLineConfig) {\r\n        let outHtml = '';\r\n        outHtml += '<ul>';\r\n        for (let ls of itsLineConfig.lineArray) {\r\n            outHtml += `<li><span class=\"legend-layer-subitem\">${ls[1]}</span>` +\r\n                `<hr style=\"height: ${ls[3]}px; background-color: ${ls[2]}\">`;\r\n        }\r\n        outHtml += `<li><span class=\"legend-layer-subitem\">${itsLineConfig.defaultName}</span>` +\r\n            `<hr style=\"height: ${itsLineConfig.defaultWidth}px; background-color: ${itsLineConfig.defaultColor}\"></li>`;\r\n        outHtml += '</ul>';\r\n\r\n        return outHtml;\r\n    } else {\r\n        return '';\r\n    }\r\n}\r\n\r\n/**\r\n * Its Layer class\r\n * @augments LayerBaseVectorGeoJson\r\n */\r\nclass LayerItsInventory extends LayerBaseVectorGeoJson {\r\n\r\n    /**\r\n     * ITS device layer, types available at http://transportal.cee.wisc.edu/its/inventory/\r\n     * @param {object} options - config\r\n     * @param {string} [options.id] - layer id\r\n     * @param {string} [options.name=Unnamed Layer] - layer name\r\n     * @param {number} [options.opacity=1] - opacity\r\n     * @param {boolean} [options.visible=true] - default visible\r\n     * @param {number} [options.minZoom=undefined] - min zoom level, 0 - 28\r\n     * @param {number} [options.maxZoom=undefined] - max zoom level, 0 - 28\r\n     * @param {object} [options.params={}] the get parameters to include to retrieve the layer\r\n     * @param {number} [options.zIndex=0] the z index for the layer\r\n     * @param {function} [options.loadCallback] function to call on load, context this is the layer object\r\n     * @param {boolean} [options.legendCollapse=false] if the legend item should be initially collapsed\r\n     * @param {boolean} [options.legendCheckbox=true] if the legend item should have a checkbox for visibility\r\n     * @param {boolean} [options.legendContent] additional content to add to the legend\r\n     *\r\n     * @param {boolean} [options.autoLoad=false] if the layer should auto load if not visible\r\n     * @param {object|*} [options.style=undefined] the layer style, use openlayers default style if not defined\r\n     * @param {boolean} [options.onDemand=false] if the layer should be loaded by extent on map move\r\n     * @param {number} [options.onDemandDelay=300] delay before the map move callback should be called\r\n     * @param {MapMoveCls} [options.mapMoveObj=mapMove] alternate map move object for use with multi map pages\r\n     *\r\n     * @param {string} options.itsType the ITS device type, use the url flag at http://transportal.cee.wisc.edu/its/inventory/\r\n     * @param {boolean} [options.addPopup=true] if the popup should be added automatically\r\n     *\r\n     * @param {string} [options.itsIcon=undefined] the ITS device type icon image see http://transportal.cee.wisc.edu/its/inventory/icons/\r\n     *\r\n     * @param {object} [options.itsLineStyle=undefined] A single line style\r\n     * @param {string} options.itsLineStyle.color the line color as rgb or hex\r\n     * @param {number} [options.itsLineStyle.width=5] the line width\r\n     *\r\n     * @param {object} [options.itsIconConfig=undefined] The icon subtype configuration\r\n     * @param {string} options.itsIconConfig.prop The property used to define icon attribute symbolization\r\n     * @param {string} options.itsIconConfig.defaultName The default name to be used if no other match is found\r\n     * @param {string} options.itsIconConfig.defaultIcon The default icon to be used for no other matches\r\n     * @param {object} [options.itsIconConfig.iconArray=[]] an array, items with format [property, name, img]\r\n     *\r\n     * @param {object} [options.itsLineConfig=undefined] The property used to define icon attribute symbolization\r\n     * @param {string} options.itsLineConfig.prop The property used to define icon attribute symbolization\r\n     * @param {string} [options.itsLineConfig.defaultName=Other] The default name to be used if no other match is found\r\n     * @param {string} [options.itsLineConfig.defaultColor=red] The default line color to be used for no other matches\r\n     * @param {number} [options.itsLineConfig.defaultWidth] The default line width to be used for no other matches\r\n     * @param {object} [options.itsLineConfig.lineArray=[]] an array, items with format [property, name, color, optional width = 5]\r\n     */\r\n    constructor(options) {\r\n        if (typeof options.itsType !== 'string') {\r\n            throw 'its type must be defined';\r\n        }\r\n\r\n        let addToLegend = '';\r\n\r\n        // define a style with the helper function if it is not explicitly defined\r\n        if (typeof options.style == 'undefined') {\r\n            options.style = defineStyle(\r\n                options.itsIcon, options.itsLineStyle, options.itsIconConfig, options.itsLineConfig\r\n            );\r\n            addToLegend = defineLegend(\r\n                options.itsIcon, options.itsLineStyle, options.itsIconConfig, options.itsLineConfig\r\n            );\r\n        }\r\n\r\n        options.params = typeof options.params == 'object' ? options.params : {};\r\n        $.extend(options.params, {format: 'JSON', resource: options.itsType});\r\n\r\n        super('http://transportal.cee.wisc.edu/its/inventory/', options);\r\n        \r\n        //add any additional content to the legend\r\n        this.addLegendContent(addToLegend);\r\n\r\n        options.addPopup = typeof options.addPopup == 'boolean' ? options.addPopup : true;\r\n\r\n        if (options.addPopup) {\r\n            mapPopup.addVectorPopup(this, function (props) {\r\n                return `<iframe src=\"http://transportal.cee.wisc.edu/its/inventory/?feature=${props['featureGuid']}\" ` +\r\n                    `height=\"250\" width=\"350\"></iframe>`;\r\n            });\r\n        }\r\n    }\r\n\r\n    /**\r\n     * callback to generate the parameters passed in the get request\r\n     * @callback makeGetParams\r\n     * @param {object} extent - extent object\r\n     * @param {number} extent.minX - minX\r\n     * @param {number} extent.minY - minY\r\n     * @param {number} extent.maxX - maxX\r\n     * @param {number} extent.maxY - maxY\r\n     * @param {number} zoomLevel - zoom level\r\n     */\r\n    mapMoveMakeGetParams(extent, zoomLevel) {\r\n        super.mapMoveMakeGetParams(extent, zoomLevel);\r\n        let lowerLeft = new ol.geom.Point([extent.minX, extent.minY]);\r\n        lowerLeft.transform(this.mapCrs, \"EPSG:4326\");\r\n        let lowerLeftCoordinates = lowerLeft.getCoordinates();\r\n        let upperRight = new ol.geom.Point([extent.maxX, extent.maxY]);\r\n        upperRight.transform(this.mapCrs, \"EPSG:4326\");\r\n        let upperRightCoordinates = upperRight.getCoordinates();\r\n\r\n        $.extend(this.mapMoveParams,\r\n            {\r\n                L: lowerLeftCoordinates[0],\r\n                R: upperRightCoordinates[0],\r\n                B: lowerLeftCoordinates[1],\r\n                T: upperRightCoordinates[1]\r\n            });\r\n    }\r\n}\r\n\r\nnm.LayerItsInventory = LayerItsInventory;\r\nexport default LayerItsInventory;\r\n","/**\r\n * Created by gavorhes on 1/4/2016.\r\n */\r\nimport provide from '../util/provide';\r\nimport ol from '../ol/ol';\r\nconst nm = provide('olHelpers.esriToOlStyle');\r\n\r\n/**\r\n * This callback is displayed as part of the Requester class.\r\n * @callback styleFunc\r\n * @param {ol.Feature} feat - openlayers feature\r\n * @param {number} resolution - map resolution\r\n */\r\n\r\n/**\r\n *\r\n * @param {Array<number>} colorArray - input color array\r\n * @param {number} opacity - the opacity 0 to 1\r\n * @returns {string} rgba string\r\n * @private\r\n */\r\nfunction _colorArrayToRgba(colorArray, opacity) {\r\n    \"use strict\";\r\n\r\n    return `rgba(${colorArray[0]},${colorArray[1]},${colorArray[2]},${opacity})`;\r\n}\r\n\r\n/**\r\n * escape html charcters\r\n * @param {string} str - input string\r\n * @returns {string} escaped string\r\n */\r\nfunction htmlEscape(str) {\r\n    return String(str)\r\n        .replace(/&/g, '&amp;')\r\n        .replace(/\"/g, '&quot;')\r\n        .replace(/'/g, '&#39;')\r\n        .replace(/</g, '&lt;')\r\n        .replace(/>/g, '&gt;');\r\n}\r\n\r\nnm.htmlEscape = htmlEscape;\r\n\r\n\r\nclass CommonSymbol {\r\n\r\n    /**\r\n     * \r\n     * @param symbolObj\r\n     * @param {number} opacity\r\n     */\r\n    constructor(symbolObj, opacity) {\r\n        this.symbolObj = symbolObj;\r\n        this.opacity = opacity;\r\n        this.olStyle = undefined;\r\n        this.legendHtml = '';\r\n    }\r\n}\r\n\r\nclass PointSymbol extends CommonSymbol {\r\n    constructor(symbolObj, opacity) {\r\n        super(symbolObj, opacity);\r\n        switch (this.symbolObj['type']) {\r\n            case 'esriSMS':\r\n                let innerColor = _colorArrayToRgba(this.symbolObj.color, this.opacity);\r\n                let outerColor = _colorArrayToRgba(this.symbolObj.outline.color, this.opacity);\r\n                let outlineWidth = this.symbolObj.outline.width;\r\n                let radius = this.symbolObj.size;\r\n\r\n\r\n                this.olStyle = new ol.style.Style({\r\n                    image: new ol.style.Circle({\r\n                        radius: radius,\r\n                        fill: new ol.style.Fill({\r\n                            color: innerColor\r\n                        }),\r\n                        stroke: new ol.style.Stroke({color: outerColor, width: outlineWidth})\r\n                    })\r\n                });\r\n                this.legendHtml = `<span class=\"legend-layer-icon\" style=\"color: ${innerColor}\">&#9679;</span>`;\r\n                break;\r\n            case 'esriPMS':\r\n                this.olStyle = new ol.style.Style({\r\n                    image: new ol.style.Icon({src: `data:image/png;base64,${this.symbolObj['imageData']}`})\r\n                });\r\n                this.legendHtml = `<img class=\"legend-layer-icon\" height=\"17\" src=\"data:image/png;base64,${this.symbolObj['imageData']}\">`;\r\n                break;\r\n            default:\r\n                console.log(this.symbolObj);\r\n                alert('Point symbol does not handle symbol type: ' + this.symbolObj['type']);\r\n        }\r\n    }\r\n}\r\n\r\nclass LineSymbol extends CommonSymbol {\r\n    constructor(symbolObj, opacity) {\r\n        super(symbolObj, opacity);\r\n        switch (this.symbolObj['type']) {\r\n            case 'esriSLS':\r\n                let innerColor = _colorArrayToRgba(this.symbolObj.color, this.opacity);\r\n                let lineWidth = this.symbolObj.width;\r\n\r\n                this.olStyle = new ol.style.Style({\r\n                    stroke: new ol.style.Stroke({\r\n                        color: innerColor,\r\n                        //lineDash: [4],\r\n                        width: lineWidth\r\n                    })\r\n                });\r\n\r\n                this.legendHtml = `<span class=\"legend-layer-icon\" `;\r\n                this.legendHtml += `style=\"`;\r\n                this.legendHtml += `background-color: ${innerColor};`;\r\n                this.legendHtml += `width: 40px;`;\r\n                this.legendHtml += `height: 4px;`;\r\n                this.legendHtml += `position: relative;`;\r\n                this.legendHtml += `display: inline-block;`;\r\n                this.legendHtml += `top: -1px;`;\r\n                this.legendHtml += `\"></span>`;\r\n                break;\r\n            default:\r\n                console.log(this.symbolObj);\r\n                alert('Line symbol does not handle symbol type: ' + this.symbolObj['type']);\r\n        }\r\n    }\r\n}\r\n\r\nclass PolygonSymbol extends CommonSymbol {\r\n    constructor(symbolObj, opacity) {\r\n        super(symbolObj, opacity);\r\n        switch (this.symbolObj['type']) {\r\n            case 'esriSFS':\r\n                let innerColor = _colorArrayToRgba(this.symbolObj.color, this.opacity);\r\n                let outerColor = _colorArrayToRgba(this.symbolObj.outline.color, this.opacity);\r\n                let outlineWidth = this.symbolObj.outline.width;\r\n\r\n                this.olStyle = new ol.style.Style({\r\n                    stroke: new ol.style.Stroke({\r\n                        color: outerColor,\r\n                        //lineDash: [4],\r\n                        width: outlineWidth\r\n                    }),\r\n                    fill: new ol.style.Fill({\r\n                        color: innerColor\r\n                    })\r\n                });\r\n\r\n                this.legendHtml = `<span class=\"legend-layer-icon\" `;\r\n                this.legendHtml += `style=\"`;\r\n                this.legendHtml += `background-color: ${innerColor};`;\r\n                this.legendHtml += `border: solid ${outerColor} 1px;`;\r\n                this.legendHtml += `width: 40px;`;\r\n                this.legendHtml += `height: 9px;`;\r\n                this.legendHtml += `position: relative;`;\r\n                this.legendHtml += `display: inline-block;`;\r\n                this.legendHtml += `top: 2px;`;\r\n                this.legendHtml += `\"></span>`;\r\n                break;\r\n\r\n            default:\r\n                console.log(this.symbolObj);\r\n                alert('Polygon symbol does handle symbol type: ' + this.symbolObj['type']);\r\n        }\r\n    }\r\n}\r\n\r\nclass SymbolGenerator {\r\n    constructor(esriResponse) {\r\n        this.opacity = (100 - (esriResponse['drawingInfo']['transparency'] || 0)) / 100;\r\n        this.renderer = esriResponse['drawingInfo']['renderer'];\r\n        this.olStyle = undefined;\r\n        this.legendHtml = '';\r\n    }\r\n}\r\n\r\nclass SingleSymbol extends SymbolGenerator {\r\n    /**\r\n     *\r\n     * @param {object} esriResponse - layer info\r\n     * @param {Constructor|*} SymbolClass - the symbol class to use\r\n     */\r\n    constructor(esriResponse, SymbolClass) {\r\n        super(esriResponse);\r\n        this.symbol = this.renderer['symbol'];\r\n        let symbolObj = new SymbolClass(this.symbol, this.opacity);\r\n        this.olStyle = symbolObj.olStyle;\r\n        this.legendHtml = symbolObj.legendHtml;\r\n    }\r\n}\r\n\r\nclass UniqueValueSymbol extends SymbolGenerator {\r\n    /**\r\n     *\r\n     * @param {object} esriResponse - layer info\r\n     * @param {Constructor|*} SymbolClass - the Symbol class definition\r\n     */\r\n    constructor(esriResponse, SymbolClass) {\r\n        super(esriResponse);\r\n        this.uniqueValueInfos = this.renderer['uniqueValueInfos'];\r\n        this.propertyName = this.renderer['field1'];\r\n        this.defaultSymbol = this.renderer['defaultSymbol'];\r\n\r\n\r\n        if (this.defaultSymbol) {\r\n            let symbolObj = new SymbolClass(this.defaultSymbol, this.opacity);\r\n            this.defaultStyle = symbolObj.olStyle;\r\n            this.defaultLabelHtml = `<span class=\"legend-layer-subitem\">${htmlEscape(this.renderer['defaultLabel'])}</span>` + symbolObj.legendHtml;\r\n        } else {\r\n            this.defaultStyle = undefined;\r\n            this.defaultLabelHtml = 'other';\r\n        }\r\n\r\n        this.valueArray = [];\r\n        this.labelArray = [];\r\n        this.legendArray = [];\r\n        this.propertyStyleLookup = {};\r\n\r\n        for (let uniqueVal of this.uniqueValueInfos) {\r\n            this.labelArray.push(uniqueVal['label']);\r\n            this.valueArray.push(uniqueVal['value']);\r\n            let uniqueSym = new SymbolClass(uniqueVal.symbol, this.opacity);\r\n            this.legendArray.push(`<span class=\"legend-layer-subitem\">${htmlEscape(uniqueVal['label'])}</span>` + uniqueSym.legendHtml);\r\n            this.propertyStyleLookup[uniqueVal['value']] = uniqueSym.olStyle;\r\n        }\r\n\r\n        let _this = this;\r\n\r\n        this.olStyle = function (feature, resolution) {\r\n            let checkProperties = feature.getProperties();\r\n            let checkProperty = checkProperties[_this.propertyName];\r\n\r\n            let returnValue;\r\n            if (_this.propertyStyleLookup[checkProperty] !== undefined) {\r\n                returnValue = [_this.propertyStyleLookup[checkProperty]];\r\n            } else {\r\n               returnValue = [_this.defaultStyle];\r\n            }\r\n\r\n            return returnValue;\r\n        };\r\n\r\n        if (this.defaultLabelHtml !== null) {\r\n            this.legendArray.push(this.defaultLabelHtml);\r\n        }\r\n\r\n        this.legendHtml = '<ul>';\r\n        for (let h of this.legendArray) {\r\n            this.legendHtml += `<li>${h}</li>`;\r\n        }\r\n        this.legendHtml += '</ul>';\r\n    }\r\n}\r\n\r\n\r\n\r\n\r\n\r\n/**\r\n * style and legend object\r\n * @typedef {object} styleAndLegend\r\n * @property {styleFunc} style - style function\r\n * @property {string} legend - legend content\r\n */\r\n\r\n/**\r\n *\r\n * @param {object} esriResponse - layer info\r\n * @returns {styleAndLegend} style and legend object\r\n */\r\nexport function makeFeatureServiceLegendAndSymbol(esriResponse) {\r\n    \"use strict\";\r\n    let renderer = esriResponse['drawingInfo']['renderer'];\r\n    let symbolLegendOut = null;\r\n\r\n    switch (renderer['type']) {\r\n        case 'simple':\r\n            switch (esriResponse['geometryType']) {\r\n                case 'esriGeometryPoint':\r\n                    symbolLegendOut = new SingleSymbol(esriResponse, PointSymbol);\r\n                    break;\r\n                case 'esriGeometryPolyline':\r\n                    symbolLegendOut = new SingleSymbol(esriResponse, LineSymbol);\r\n                    break;\r\n                case 'esriGeometryPolygon':\r\n                    symbolLegendOut = new SingleSymbol(esriResponse, PolygonSymbol);\r\n                    break;\r\n                default:\r\n                    console.log(esriResponse);\r\n                    alert(esriResponse['geometryType'] + ' not handled');\r\n            }\r\n            break;\r\n        case 'uniqueValue':\r\n            switch (esriResponse['geometryType']) {\r\n                case 'esriGeometryPoint':\r\n                    symbolLegendOut = new UniqueValueSymbol(esriResponse, PointSymbol);\r\n                    break;\r\n                case 'esriGeometryPolyline':\r\n                    symbolLegendOut = new UniqueValueSymbol(esriResponse, LineSymbol);\r\n                    break;\r\n                case 'esriGeometryPolygon':\r\n                    symbolLegendOut = new UniqueValueSymbol(esriResponse, PolygonSymbol);\r\n                    break;\r\n                default:\r\n                    console.log(esriResponse);\r\n                    alert(esriResponse['geometryType'] + ' not handled');\r\n            }\r\n            break;\r\n        default:\r\n            alert('not handled renderer type: ' + renderer['type']);\r\n    }\r\n\r\n    if (symbolLegendOut == null) {\r\n        return {style: undefined, legend: ''};\r\n    } else {\r\n        return {style: symbolLegendOut.olStyle, legend: symbolLegendOut.legendHtml};\r\n    }\r\n}\r\n\r\nnm.makeFeatureServiceLegendAndSymbol = makeFeatureServiceLegendAndSymbol;\r\n\r\n/**\r\n *\r\n * @param {object} lyrObject - the layer as defined in the response\r\n * @param {boolean} [iconsOnly=false] use only icons\r\n * @returns {string} legend html\r\n */\r\nfunction mapServiceLegendItem(lyrObject, iconsOnly) {\r\n\r\n\r\n    iconsOnly = typeof iconsOnly == 'boolean' ? iconsOnly : false;\r\n    let layerName = lyrObject['layerName'];\r\n    let legendItems = lyrObject['legend'];\r\n    let legendHtml = '';\r\n\r\n    if (legendItems.length == 1) {\r\n        legendHtml = `<img class=\"legend-layer-icon\" height=\"17\" src=\"data:image/png;base64,${legendItems[0]['imageData']}\">`;\r\n    } else {\r\n        legendHtml += '<span class=\"legend-items-expander\" title=\"Expand/Collapse\">&#9660;</span><ul>';\r\n        for (let i = 0; i < legendItems.length; i++) {\r\n            legendHtml += `<li>`;\r\n            legendHtml += `<span class=\"legend-layer-subitem\">${htmlEscape(legendItems[i]['label'])}</span>`;\r\n            legendHtml += `<img class=\"legend-layer-icon\" height=\"17\" src=\"data:image/png;base64,${legendItems[i]['imageData']}\">`;\r\n            legendHtml += `</li>`;\r\n        }\r\n        legendHtml += '</ul>';\r\n    }\r\n\r\n    if (!iconsOnly) {\r\n        legendHtml = `<span class=\"legend-layer-subitem\">${layerName}</span>` + legendHtml;\r\n    }\r\n\r\n    return legendHtml;\r\n}\r\n\r\n/**\r\n * make map service legent\r\n * @param {object} esriResponse - layer info\r\n * @returns {string} legend content\r\n */\r\nexport function makeMapServiceLegend(esriResponse) {\r\n    \"use strict\";\r\n\r\n    let newLegendHtml = '';\r\n\r\n    let layers = esriResponse['layers'];\r\n\r\n    if (layers.length == 1) {\r\n        newLegendHtml += mapServiceLegendItem(layers[0], true);\r\n    } else {\r\n        newLegendHtml += '<ul>';\r\n        for (let i = 0; i < layers.length; i++) {\r\n            newLegendHtml += '<li>' + mapServiceLegendItem(layers[i]) + '</li>';\r\n        }\r\n        newLegendHtml += '</ul>';\r\n    }\r\n\r\n    return newLegendHtml;\r\n}\r\n\r\nnm.makeMapServiceLegend = makeMapServiceLegend;\r\n","/**\r\n * Created by gavorhes on 12/8/2015.\r\n */\r\nimport provide from '../util/provide';\r\nconst nm = provide('olHelpers');\r\n\r\n\r\n/**\r\n * base interaction\r\n */\r\nclass MapInteractionBase {\r\n\r\n    /**\r\n     * map interaction base\r\n     * @param {string} subtype - the interaction subtype\r\n     */\r\n    constructor(subtype) {\r\n        this._map = undefined;\r\n        this._initialized = false;\r\n        this._subtype = subtype;\r\n    }\r\n\r\n    /**\r\n     * base initializer, returns true for already initialized\r\n     * @param {ol.Map} theMap - the ol Map\r\n     * @returns {boolean} true for already initialized\r\n     */\r\n    init(theMap) {\r\n        if (!this._initialized) {\r\n            this._map = theMap;\r\n            this._initialized = true;\r\n\r\n            return false;\r\n        }\r\n\r\n        return true;\r\n    }\r\n\r\n    /**\r\n     * get reference to the ol map object\r\n     * @returns {ol.Map} the map object\r\n     */\r\n    get map() {\r\n        return this._map;\r\n    }\r\n\r\n    /**\r\n     * get if is initialized\r\n     * @returns {boolean} is initialized\r\n     */\r\n    get initialized() {\r\n        return this._initialized;\r\n    }\r\n\r\n    /**\r\n     * Check the initialization status and throw exception if not valid yet\r\n     * @protected\r\n     */\r\n    _checkInit() {\r\n        if (!this.initialized) {\r\n            let msg = `${this._subtype} object not initialized`;\r\n            alert(msg);\r\n            console.log(msg);\r\n            throw msg;\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Check the initialization status and throw exception if not valid yet\r\n     */\r\n    checkInit(){\r\n        this._checkInit();\r\n    }\r\n}\r\nnm.MapInteractionBase = MapInteractionBase;\r\nexport default MapInteractionBase;\r\n","/**\r\n * Created by gavorhes on 11/3/2015.\r\n */\r\n\r\nimport MapMoveCls from './mapMoveCls';\r\n\r\n/**\r\n * The single map move object catch is that it is common to multimap pages\r\n * @type {MapMoveCls}\r\n */\r\nexport default new MapMoveCls();\r\n","/**\r\n * Created by gavorhes on 11/3/2015.\r\n */\r\n\r\n\r\nimport $ from '../jquery';\r\nimport MapInteractionBase from './mapInteractionBase';\r\nimport * as checkDefined from '../util/checkDefined';\r\nimport provide from '../util/provide';\r\nimport makeGuid from '../util/makeGuid';\r\nconst nm = provide('olHelpers');\r\n\r\n/**\r\n * assists with map move interactions, trigger callback functions\r\n * @augments MapInteractionBase\r\n */\r\nclass MapMoveCls extends MapInteractionBase {\r\n\r\n    /**\r\n     * constructor called implicitly\r\n     */\r\n    constructor() {\r\n        super('map move');\r\n        this._arrLyrRequest = [];\r\n        this._arrLyrTimeout = [];\r\n        this._arrLayer = [];\r\n        this._lookupLayer = {};\r\n\r\n        this._mapMoveCallbacks = [];\r\n        this._mapMoveCallbacksLookup = {};\r\n        this._mapMoveCallbackDelays = [];\r\n        this._mapMoveCallbackContext = [];\r\n        this._mapMoveCallbackTimeout = [];\r\n\r\n        this._mapExtent = undefined;\r\n        this._zoomLevel = undefined;\r\n    }\r\n\r\n    /**\r\n     * initialize the map move object\r\n     * @param {ol.Map} theMap - the ol map\r\n     */\r\n    init(theMap) {\r\n        if (super.init(theMap)) {\r\n            return;\r\n        }\r\n\r\n        let _this = this;\r\n\r\n        this.map.getView().on(['change:center', 'change:resolution'], function (e) {\r\n\r\n            _this._updateMapExtent();\r\n\r\n            // trigger the layer updates\r\n            for (let i = 0; i < _this._arrLayer.length; i++) {\r\n                _this.triggerLyrLoad(_this._arrLayer[i], i, e.type);\r\n            }\r\n\r\n            // trigger the map callbacks\r\n            for (let i = 0; i < _this._mapMoveCallbacks.length; i++) {\r\n                _this.triggerMoveCallback(i, e.type);\r\n            }\r\n        });\r\n    }\r\n\r\n    _updateMapExtent() {\r\n        let theView = this.map.getView();\r\n        this._zoomLevel = theView.getZoom();\r\n\r\n        let extentArray = theView.calculateExtent(this.map.getSize());\r\n\r\n        this._mapExtent = {\r\n            minX: extentArray[0],\r\n            minY: extentArray[1],\r\n            maxX: extentArray[2],\r\n            maxY: extentArray[3]\r\n        };\r\n    }\r\n\r\n    /**\r\n     * return the map extent\r\n     */\r\n    get mapExtent() {\r\n        if (!this._mapExtent) {\r\n            this._updateMapExtent();\r\n        }\r\n\r\n        return this._mapExtent;\r\n    }\r\n\r\n    /**\r\n     * Trigger the layer load\r\n     * @param {LayerBaseVector|*} lyr - the layer being acted on\r\n     * @param {number} [index=undefined] - index of the layer\r\n     * @param {string|*} [eventType=undefined] the event triggering the load, as 'change:center' or 'change:resolution'\r\n     */\r\n    triggerLyrLoad(lyr, index, eventType) {\r\n\r\n        if (checkDefined.undefinedOrNull(lyr) && checkDefined.undefinedOrNull(index)) {\r\n            throw 'need to define lyr or index';\r\n        } else if (checkDefined.definedAndNotNull(lyr) && checkDefined.undefinedOrNull(index)) {\r\n            index = this._arrLayer.indexOf(lyr);\r\n        } else if (checkDefined.undefinedOrNull(lyr) && checkDefined.definedAndNotNull(index)) {\r\n            lyr = this._arrLayer[index];\r\n        }\r\n\r\n        // clear the timeout\r\n        if (this._arrLyrTimeout[index] != null) {\r\n            clearTimeout(this._arrLyrTimeout[index]);\r\n            this._arrLyrTimeout[index] = null;\r\n        }\r\n\r\n        // abort if necessary and clear the request\r\n        if (this._arrLyrRequest[index] != null && this._arrLyrRequest[index] != 4) {\r\n            this._arrLyrRequest[index].abort();\r\n            this._arrLyrRequest[index] = null;\r\n        }\r\n\r\n        // dummy callback used if before load returns false\r\n        let callbackFunc = function () {};\r\n\r\n        if (lyr.mapMoveBefore(this._zoomLevel, eventType)) {\r\n            lyr.mapMoveMakeGetParams(this._mapExtent, this._zoomLevel);\r\n\r\n            let _this = this;\r\n\r\n            callbackFunc = function () {\r\n                function innerFunction(theLayer, theIndex) {\r\n                    let _innerThis = this;\r\n                    this._arrLyrRequest[theIndex] = $.get(\r\n                        theLayer.url,\r\n                        theLayer.mapMoveParams,\r\n                        function (d) {\r\n                            /**\r\n                             * @type {LayerBaseVector}\r\n                             */\r\n                            theLayer.mapMoveCallback(d);\r\n                            theLayer.loadCallback();\r\n                        }, 'json').fail(\r\n                        function (jqXHR) {\r\n                            if (jqXHR.statusText != 'abort') {\r\n                                console.log('failed');\r\n                                console.log(theLayer.url);\r\n                                console.log(theLayer.mapMoveParams);\r\n                            }\r\n                        }).always(\r\n                        function () {\r\n                            _innerThis._arrLyrTimeout[theIndex] = null;\r\n                            _innerThis._arrLyrRequest[theIndex] = null;\r\n                        });\r\n                }\r\n                innerFunction.call(_this, lyr, index);\r\n            };\r\n        } else {\r\n            lyr.clear();\r\n        }\r\n        this._arrLyrTimeout[index] = setTimeout(callbackFunc, lyr.onDemandDelay);\r\n    }\r\n\r\n    /**\r\n     * trigger the map move call back at the given index\r\n     * @param {number} ind - the index of the layer\r\n     * @param {string|*} [eventType=undefined] the event triggering the load as 'change:center' or 'change:resolution'\r\n     * @param {string} [functionId=undefined] the function id used to reference the added callback function\r\n     */\r\n    triggerMoveCallback(ind, eventType, functionId) {\r\n\r\n        if (typeof ind == 'undefined' && typeof functionId == 'undefined'){\r\n            throw 'either the function index or the id must be defined';\r\n        }\r\n\r\n        if (typeof ind !== 'number'){\r\n            ind = this._mapMoveCallbacks.indexOf(this._mapMoveCallbacksLookup[functionId]);\r\n        }\r\n\r\n        if (ind < 0){\r\n            console.log('function not found');\r\n\r\n            return;\r\n        }\r\n\r\n        // clear the timeout\r\n        if (this._mapMoveCallbackTimeout[ind] != null) {\r\n            clearTimeout(this._mapMoveCallbackTimeout[ind]);\r\n            this._mapMoveCallbackTimeout[ind] = null;\r\n        }\r\n\r\n        let ctx = this._mapMoveCallbackContext[ind];\r\n        let theFunc = this._mapMoveCallbacks[ind];\r\n\r\n        let _this = this;\r\n\r\n        let f = function () {\r\n            if (ctx !== null) {\r\n                theFunc.call(ctx, _this._mapExtent, _this._zoomLevel, eventType);\r\n            } else {\r\n                theFunc(_this._mapExtent, _this._zoomLevel, eventType);\r\n            }\r\n        };\r\n\r\n        this._mapMoveCallbackTimeout[ind] = setTimeout(f, this._mapMoveCallbackDelays[ind]);\r\n    }\r\n\r\n    /**\r\n     * Add a layer to the interaction\r\n     * @param {LayerBaseVector|*} lyr - layer to add\r\n     * @param {boolean} [triggerOnAdd=true] - if the layer should be loaded on add\r\n     */\r\n    addVectorLayer(lyr, triggerOnAdd) {\r\n        if (this._arrLayer.indexOf(lyr) > -1) {\r\n            console.log('already added ' + lyr.name + ' to map move');\r\n\r\n            return;\r\n        }\r\n        this._checkInit();\r\n\r\n        this._arrLyrRequest.push(null);\r\n        this._arrLyrTimeout.push(null);\r\n        this._arrLayer.push(lyr);\r\n        this._lookupLayer[lyr.id] = lyr;\r\n\r\n        triggerOnAdd = typeof triggerOnAdd == 'boolean' ? triggerOnAdd : true;\r\n\r\n        if (triggerOnAdd) {\r\n            if (this._mapExtent === undefined) {\r\n                this._updateMapExtent();\r\n            }\r\n            this.triggerLyrLoad(lyr, this._arrLayer.length - 1);\r\n        }\r\n    }\r\n\r\n    /**\r\n     * This callback is displayed as a global member.\r\n     * @callback mapMoveCallbackFunction\r\n     * @param {object} extent - extent object\r\n     * @param {number} extent.minX - minX\r\n     * @param {number} extent.minY - minY\r\n     * @param {number} extent.maxX - maxX\r\n     * @param {number} extent.maxY - maxY\r\n     * @param {number} zoomLevel - zoom level\r\n     * @param {string} [evtType=undefined] undefined for initial load, otherwise one of 'change:center', 'change:resolution'\r\n     */\r\n\r\n    /**\r\n     * add a callback to the map move event\r\n     * @param {mapMoveCallbackFunction} func - callback function\r\n     * @param {*} context - the context to use for this function\r\n     * @param {number} [delay=50] the delay before call load\r\n     * @param {boolean} [triggerOnAdd=true] if the layer should be loaded on add to mapMove\r\n     * @param {string} [functionId=undefined] optional id to reference the function later for outside triggering\r\n     */\r\n    addCallback(func, context, delay, triggerOnAdd, functionId) {\r\n\r\n        if (this._mapMoveCallbacks.indexOf(func) > -1) {\r\n            console.log('this function already added to map move');\r\n\r\n            return;\r\n        }\r\n        this._checkInit();\r\n        if (!functionId){\r\n            functionId = makeGuid();\r\n        }\r\n\r\n        this._mapMoveCallbacks.push(func);\r\n        this._mapMoveCallbacksLookup[functionId] = func;\r\n        this._mapMoveCallbackDelays.push(typeof delay == 'number' ? delay : 50);\r\n        this._mapMoveCallbackContext.push(checkDefined.definedAndNotNull(context) ? context : null);\r\n        this._mapMoveCallbackTimeout.push(null);\r\n\r\n        triggerOnAdd = typeof triggerOnAdd == 'boolean' ? triggerOnAdd : true;\r\n\r\n        if (triggerOnAdd) {\r\n            if (this._mapExtent === undefined) {\r\n                this._updateMapExtent();\r\n            }\r\n            this.triggerMoveCallback(this._mapMoveCallbacks.length - 1);\r\n        }\r\n    }\r\n}\r\n\r\nnm.MapMoveCls = MapMoveCls;\r\nexport default MapMoveCls;\r\n","/**\r\n * Created by gavorhes on 11/3/2015.\r\n */\r\n\r\nimport MapPopupCls from './mapPopupCls';\r\n\r\n/**\r\n * The single popup object catch is that it is common to multimap pages\r\n * @type {MapPopupCls}\r\n */\r\nexport default new MapPopupCls();\r\n","/**\r\n * Created by gavorhes on 11/3/2015.\r\n */\r\n\r\nimport $ from '../jquery';\r\nimport MapInteractionBase from './mapInteractionBase';\r\nimport propertiesZoomStyle from '../olHelpers/propertiesZoomStyle';\r\nimport provide from '../util/provide';\r\nimport ol from '../ol/ol';\r\n\r\n\r\nconst nm = provide('olHelpers');\r\n\r\n\r\nclass _FeatureLayerProperties {\r\n\r\n    /**\r\n     *\r\n     * @param {ol.Feature} feature the feature\r\n     * @param {LayerBaseVector|*} layer - the layer in the popup\r\n     * @param {number} layerIndex - index of the layer\r\n     * @param {ol.layer.Vector} selectionLayer - the ol selection layer\r\n     * @param {string} [esriLayerName=undefined] - esri layer name\r\n     */\r\n    constructor(feature, layer, layerIndex, selectionLayer, esriLayerName) {\r\n        this.feature = feature;\r\n        this.layer = layer;\r\n        this.layerIndex = layerIndex;\r\n        this.selectionLayer = selectionLayer;\r\n        this.popupContent = '';\r\n        this.esriLayerName = typeof esriLayerName == 'string' ? esriLayerName : undefined;\r\n    }\r\n\r\n    get layerName() {\r\n        if (typeof this.esriLayerName == 'string') {\r\n            return this.esriLayerName;\r\n        } else {\r\n            return this.layer.name;\r\n        }\r\n    }\r\n}\r\n\r\n/**\r\n * map popup class\r\n * @augments MapInteractionBase\r\n */\r\nclass MapPopupCls extends MapInteractionBase {\r\n\r\n    /**\r\n     * Definition for openlayers style function\r\n     * @callback olStyleFunction\r\n     * &param feature the openlayers vector feature\r\n     * $param\r\n     */\r\n\r\n    /**\r\n     * Definition for popup changed callback functions\r\n     * @callback popupChangedFunction\r\n     * @param $popContent jquery reference to the popup content\r\n     */\r\n\r\n    /**\r\n     * map popup constructor\r\n     */\r\n    constructor() {\r\n        super('map popup');\r\n        this._arrPopupLayerIds = [];\r\n        this._arrPopupLayerNames = [];\r\n        /**\r\n         *\r\n         * @type {Array<LayerBaseVector>}\r\n         * @private\r\n         */\r\n        this._arrPopupLayers = [];\r\n        this._arrPopupOlLayers = [];\r\n        this._arrPopupContentFunction = [];\r\n        this._$popupContainer = undefined;\r\n        this._$popupContent = undefined;\r\n        this._$popupCloser = undefined;\r\n        this._popupOverlay = undefined;\r\n        this._selectionLayers = [];\r\n        this._selectionLayerLookup = {};\r\n        this._mapClickFunctions = [];\r\n\r\n        //let a = function($jqueryContent){console.log($jqueryContent)};\r\n        //this._popupChangedLookup = {'a': a};\r\n        this._popupChangedFunctions = [];\r\n        /**\r\n         *\r\n         * @type {Array<LayerEsriMapServer>}\r\n         * @private\r\n         */\r\n        this._esriMapServiceLayers = [];\r\n\r\n        this._popupOpen = false;\r\n        this._popupCoordinate = null;\r\n\r\n        /**\r\n         *\r\n         * @type {Array.<_FeatureLayerProperties>}\r\n         */\r\n        this._passThroughLayerFeatureArray = [];\r\n\r\n        this._currentPopupIndex = -1;\r\n        this._popupContentLength = 0;\r\n\r\n    }\r\n\r\n    /**\r\n     * map popup initialization\r\n     * @param {ol.Map} theMap - the ol map\r\n     */\r\n    init(theMap) {\r\n        if (super.init(theMap)) {\r\n            return;\r\n        }\r\n        let $map = $('#' + this.map.getTarget());\r\n\r\n        $map.append(\r\n            '<div class=\"ol-popup\">' +\r\n            '<a href=\"#\" class=\"ol-popup-closer\"></a>' +\r\n            '<div class=\"popup-content\"></div>' +\r\n            '</div>'\r\n        );\r\n\r\n        this._$popupContainer = $map.find('.ol-popup');\r\n        this._$popupContent = $map.find('.popup-content');\r\n        this._$popupCloser = $map.find('.ol-popup-closer');\r\n\r\n        this._popupOverlay = new ol.Overlay({\r\n            element: this._$popupContainer[0],\r\n            autoPan: true,\r\n            autoPanAnimation: {\r\n                duration: 250\r\n            }\r\n        });\r\n\r\n        this._map.addOverlay(this._popupOverlay);\r\n\r\n        this._$popupCloser.click(() => {\r\n            this.closePopup();\r\n        });\r\n\r\n        // display popup on click\r\n        this._map.on('singleclick', (evt) => {\r\n            this.closePopup();\r\n            this._popupCoordinate = evt.coordinate;\r\n\r\n            if (this._esriMapServiceLayers.length > 0) {\r\n                let queryParams = {\r\n                    geometry: evt.coordinate.join(','),\r\n                    geometryType: 'esriGeometryPoint',\r\n                    layers: 'all',\r\n                    sr: this._map.getView().getProjection().getCode().split(':')[1],\r\n                    mapExtent: this._map.getView().calculateExtent(this._map.getSize()).join(','),\r\n                    imageDisplay: this._map.getSize().join(',') + ',96',\r\n                    returnGeometry: true,\r\n                    tolerance: 15,\r\n                    f: 'pjson'\r\n                };\r\n\r\n                for (let l of this._esriMapServiceLayers) {\r\n                    l.getPopupInfo(queryParams, this._selectionLayerLookup[l.id]);\r\n                }\r\n            }\r\n\r\n            let layerFeatureObjectArray = this._featuresAtPixel(evt.pixel);\r\n\r\n            /**\r\n             *\r\n             * @type {Array.<_FeatureLayerProperties>}\r\n             */\r\n            this._passThroughLayerFeatureArray = [];\r\n            this._currentPopupIndex = -1;\r\n\r\n            for (let i = 0; i < layerFeatureObjectArray.length; i++) {\r\n                let featObj = layerFeatureObjectArray[i];\r\n\r\n                let props = featObj.feature.getProperties();\r\n\r\n                let popupContentResponse = this._arrPopupContentFunction[featObj.layerIndex](props, this._$popupContent);\r\n\r\n                //skip if return was false\r\n                if (popupContentResponse === false) {\r\n                    //continue;\r\n                } else if (typeof popupContentResponse == 'string') {\r\n                    featObj.popupContent = popupContentResponse;\r\n                    this._passThroughLayerFeatureArray.push(featObj);\r\n                } else {\r\n                    featObj.selectionLayer.getSource().addFeature(featObj.feature);\r\n                }\r\n            }\r\n\r\n            this._popupContentLength = this._passThroughLayerFeatureArray.length;\r\n\r\n            this._currentPopupIndex = -1;\r\n\r\n            let popupHtml = '<div class=\"ol-popup-nav\">';\r\n            popupHtml += '<span class=\"previous-popup ol-popup-nav-arrow\">&#9664;</span>';\r\n            popupHtml += '<span class=\"next-popup ol-popup-nav-arrow\">&#9654;</span>';\r\n            popupHtml += `<span class=\"current-popup-item-number\" style=\"font-weight: bold;\"></span>`;\r\n            popupHtml += `<span>&nbsp;of&nbsp;</span>`;\r\n            popupHtml += `<span class=\"popup-content-length\" style=\"font-weight: bold;\">${this._popupContentLength}</span>`;\r\n            popupHtml += `<span>&nbsp;&nbsp;-&nbsp;&nbsp;</span>`;\r\n            popupHtml += `<span class=\"current-popup-layer-name\"></span>`;\r\n            popupHtml += '</div>';\r\n            popupHtml += '<div class=\"ol-popup-inner\">';\r\n\r\n            popupHtml += '</div>';\r\n\r\n            this._$popupContent.html(popupHtml);\r\n\r\n            this._$popupContent.find('.previous-popup').click(() => {\r\n                if (this._popupContentLength == 1) {\r\n                    return;\r\n                }\r\n\r\n                if (this._currentPopupIndex == 0) {\r\n                    this._currentPopupIndex = this._popupContentLength - 1;\r\n                } else {\r\n                    this._currentPopupIndex--;\r\n                }\r\n                this._triggerFeatSelect();\r\n            });\r\n\r\n            let nextPopup = this._$popupContent.find('.next-popup');\r\n\r\n            nextPopup.click(() => {\r\n                if (this._popupContentLength == 1 && this._currentPopupIndex > -1) {\r\n                    return;\r\n                }\r\n\r\n                if (this._currentPopupIndex == this._popupContentLength - 1) {\r\n                    this._currentPopupIndex = 0;\r\n                } else {\r\n                    this._currentPopupIndex++;\r\n                }\r\n                this._triggerFeatSelect();\r\n            });\r\n\r\n\r\n            if (this._popupContentLength > 0) {\r\n                nextPopup.trigger('click');\r\n                this._popupOverlay.setPosition(this._popupCoordinate);\r\n                this._$popupContent.scrollTop(0);\r\n                this._popupOpen = true;\r\n            }\r\n        });\r\n\r\n        //change mouse cursor when over marker\r\n        this._map.on('pointermove', (e) => {\r\n            if (e.dragging) {\r\n                return;\r\n            }\r\n            let pixel = this.map.getEventPixel(e.originalEvent);\r\n            let hit = this.map.hasFeatureAtPixel(pixel, (lyrCandidate) => {\r\n                for (let olLayer of this._arrPopupOlLayers) {\r\n                    if (lyrCandidate == olLayer) {\r\n                        return true;\r\n                    }\r\n                }\r\n\r\n                return false;\r\n            });\r\n            this.map.getTargetElement().style.cursor = hit ? 'pointer' : '';\r\n        });\r\n    }\r\n\r\n    /**\r\n     * helper to select features\r\n     * @private\r\n     */\r\n    _triggerFeatSelect() {\r\n        let $currentPopupItemNumber = this._$popupContent.find('.current-popup-item-number');\r\n        let $innerPopup = this._$popupContent.find('.ol-popup-inner');\r\n        let $layerNameSpan = this._$popupContent.find('.current-popup-layer-name');\r\n        this.clearSelection();\r\n        let lyrFeatObj = this._passThroughLayerFeatureArray[this._currentPopupIndex];\r\n        $currentPopupItemNumber.html((this._currentPopupIndex + 1).toFixed());\r\n        $layerNameSpan.html(lyrFeatObj.layerName);\r\n        $innerPopup.html(lyrFeatObj.popupContent);\r\n        lyrFeatObj.selectionLayer.getSource().addFeature(lyrFeatObj.feature);\r\n        for (let f of this._popupChangedFunctions) {\r\n            f(this._$popupContent);\r\n        }\r\n    }\r\n\r\n\r\n    /**\r\n     *\r\n     * @param {ol.Feature} feature - the ol feature\r\n     * @param {LayerEsriMapServer} lyr - the map server layer\r\n     * @param {string} popupContent - popup content\r\n     * @param {string} esriName - esri layer name\r\n     */\r\n    addMapServicePopupContent(feature, lyr, popupContent, esriName) {\r\n\r\n        let featLayerObject = new _FeatureLayerProperties(\r\n            feature, lyr, this._popupContentLength, this._selectionLayerLookup[lyr.id], esriName\r\n        );\r\n        featLayerObject.popupContent = popupContent;\r\n\r\n        this._passThroughLayerFeatureArray.push(featLayerObject);\r\n        this._popupContentLength++;\r\n\r\n        $('.popup-content-length').html(this._popupContentLength.toFixed());\r\n\r\n        if (!this._popupOpen) {\r\n            this._$popupContent.find('.next-popup').trigger('click');\r\n\r\n            this._popupOverlay.setPosition(this._popupCoordinate);\r\n            this._$popupContent.scrollTop(0);\r\n            this._popupOpen = true;\r\n        }\r\n    }\r\n\r\n    /**\r\n     *\r\n     * @param {ol.Pixel} pixel - the ol pixel\r\n     * @returns {Array.<_FeatureLayerProperties>} - feature layer properties\r\n     * @private\r\n     */\r\n    _featuresAtPixel(pixel) {\r\n        let layerFeatureObjectArray = [];\r\n        this.map.forEachFeatureAtPixel(pixel, (feature, layer) => {\r\n            let lyrIndex = this._arrPopupOlLayers.indexOf(layer);\r\n\r\n            if (lyrIndex > -1) {\r\n                layerFeatureObjectArray.push(new _FeatureLayerProperties(\r\n                    feature, this._arrPopupLayers[lyrIndex], lyrIndex, this._selectionLayers[lyrIndex]));\r\n            }\r\n        });\r\n\r\n        return layerFeatureObjectArray;\r\n    }\r\n\r\n    closePopup() {\r\n        this._checkInit();\r\n        this._popupOpen = false;\r\n        this._popupOverlay.setPosition(undefined);\r\n        this._$popupCloser[0].blur();\r\n        this.clearSelection();\r\n        this._$popupContent.html('');\r\n\r\n        return false;\r\n    };\r\n\r\n    /**\r\n     *\r\n     * @param {popupChangedFunction} chgFunction - popup change function\r\n     */\r\n    addPopupChangedFunction(chgFunction) {\r\n        this._popupChangedFunctions.push(chgFunction);\r\n    }\r\n\r\n    /**\r\n     *\r\n     * @param {LayerBase|*} lyr - the layer being acted on\r\n     * @param {object} [selectionStyle={}] the selection style configuration\r\n     * @param {string} [selectionStyle.color=rgba(255,170,0,0.5)] the selection color\r\n     * @param {number} [selectionStyle.width=10] the selection width for linear features\r\n     * @param {object|function} [selectionStyle.olStyle=undefined] an openlayers style object or function\r\n     * @returns {ol.layer.Vector} the new selection layer\r\n     * @private\r\n     */\r\n    _addPopupLayer(lyr, selectionStyle) {\r\n        this._checkInit();\r\n\r\n        selectionStyle = selectionStyle || {};\r\n        selectionStyle.color = selectionStyle.color || 'rgba(255,170,0,0.5)';\r\n        selectionStyle.width = selectionStyle.width || 10;\r\n\r\n        let theStyle;\r\n\r\n        if (selectionStyle.olStyle) {\r\n            theStyle = selectionStyle.olStyle;\r\n        } else {\r\n            theStyle = new ol.style.Style({\r\n                stroke: new ol.style.Stroke({\r\n                    color: selectionStyle.color,\r\n                    width: selectionStyle.width\r\n                }),\r\n                image: new ol.style.Circle({\r\n                    radius: 7,\r\n                    fill: new ol.style.Fill({color: selectionStyle.color}),\r\n                    stroke: new ol.style.Stroke({color: selectionStyle.color, width: 1})\r\n                }),\r\n                fill: new ol.style.Fill({\r\n                    color: selectionStyle.color\r\n                })\r\n            });\r\n        }\r\n\r\n        let selectionLayer = new ol.layer.Vector(\r\n            {\r\n                source: new ol.source.Vector(),\r\n                style: theStyle,\r\n                zIndex: 100\r\n            }\r\n        );\r\n\r\n        this._selectionLayers.push(selectionLayer);\r\n        this._selectionLayerLookup[lyr.id] = selectionLayer;\r\n        this.map.addLayer(selectionLayer);\r\n\r\n        return selectionLayer;\r\n    }\r\n\r\n    /**\r\n     * The popup callback function\r\n     * @callback popupCallback\r\n     * @param {object} featureProperties - the feature properties\r\n     * @param {jQuery} jqRef reference to the div content to do some async stuff inside the div\r\n     * @returns {string} the html content to be added to the popup\r\n     */\r\n\r\n    /**\r\n     * Add popup to the map\r\n     * @param {LayerBase|*} lyr The layer that the popup with act on\r\n     * @param {popupCallback} popupContentFunction - popup content function that makes popup info\r\n     * @param {object} [selectionStyle={}] the selection style configuration\r\n     * @param {string} [selectionStyle.color=rgba(255,170,0,0.5)] the selection color\r\n     * @param {number} [selectionStyle.width=10] the selection width for linear features\r\n     * @param {object|function} [selectionStyle.olStyle=undefined] an openlayers style object or function\r\n     * @returns {object} a reference to the ol selection layer\r\n     */\r\n    addVectorPopup(lyr, popupContentFunction, selectionStyle) {\r\n        let selectionLayer = this._addPopupLayer(lyr, selectionStyle);\r\n        this._arrPopupLayerIds.push(lyr.id);\r\n        this._arrPopupLayerNames.push(lyr.name);\r\n        this._arrPopupLayers.push(lyr);\r\n        this._arrPopupOlLayers.push(lyr.olLayer);\r\n        this._arrPopupContentFunction.push(popupContentFunction);\r\n\r\n        return selectionLayer;\r\n    };\r\n\r\n    /**\r\n     *\r\n     * @param {LayerBase} lyr - layer\r\n     */\r\n    removeVectorPopup(lyr) {\r\n        let idx = this._arrPopupLayerIds.indexOf(lyr.id);\r\n\r\n        if (idx > -1) {\r\n            this._arrPopupLayerIds.splice(idx, 1);\r\n            this._arrPopupLayerNames.splice(idx, 1);\r\n            this._arrPopupLayers.splice(idx, 1);\r\n            this._arrPopupOlLayers.splice(idx, 1);\r\n            this._arrPopupContentFunction.splice(idx, 1);\r\n            this._selectionLayers.splice(idx, 1);\r\n            delete this._selectionLayerLookup[lyr.id];\r\n        }\r\n    }\r\n\r\n    /**\r\n     *\r\n     * @param {LayerEsriMapServer} lyr - map server layer\r\n     * @param {object} [selectionStyle={}] the selection style configuration\r\n     * @param {string} [selectionStyle.color=rgba(255,170,0,0.5)] the selection color\r\n     * @param {number} [selectionStyle.width=10] the selection width for linear features\r\n     * @param {object|function} [selectionStyle.olStyle=undefined] an openlayers style object or function\r\n     * @returns {object} a reference to the ol selection layer\r\n     */\r\n    addMapServicePopup(lyr, selectionStyle) {\r\n        let selectionLayer = this._addPopupLayer(lyr, selectionStyle);\r\n        this._esriMapServiceLayers.push(lyr);\r\n\r\n        return selectionLayer;\r\n    }\r\n\r\n    clearSelection() {\r\n        this._checkInit();\r\n        for (let i = 0; i < this._selectionLayers.length; i++) {\r\n            this._selectionLayers[i].getSource().clear();\r\n        }\r\n        for (let f of this._mapClickFunctions) {\r\n            f();\r\n        }\r\n    };\r\n\r\n    /**\r\n     * Add a function to be called when the map is clicked but before any popups are implemented\r\n     * @param {function} func - the map click function\r\n     */\r\n    addMapClickFunction(func) {\r\n        this._mapClickFunctions.push(func);\r\n    }\r\n}\r\nnm.MapPopupCls = MapPopupCls;\r\nexport default MapPopupCls;\r\n","/**\r\n * Created by gavorhes on 12/14/2015.\r\n */\r\n\r\nimport provide from '../util/provide';\r\nimport * as zoomResolutionConvert from './zoomResolutionConvert';\r\nconst nm = provide('olHelpers');\r\n\r\n/**\r\n * A style function based on properties and zoom level, wraps normal feature, resolution function\r\n * @callback propertiesZoomStyle\r\n * @param {object} properties the feature properties\r\n * @param {number} zoom level\r\n *\r\n */\r\n\r\n/**\r\n * wrapper to define a style function by properties and zoom level\r\n * @param {propertiesZoomStyle|*} styleFunc - style function\r\n * @returns {function|*} new function\r\n */\r\nfunction propertiesZoomStyle(styleFunc) {\r\n    if (styleFunc == undefined){\r\n        return undefined;\r\n    }\r\n\r\n    return function (feature, resolution) {\r\n        styleFunc(feature.getProperties(), zoomResolutionConvert.resolutionToZoom(resolution));\r\n    };\r\n}\r\n\r\nnm.propertiesZoomStyle = propertiesZoomStyle;\r\nexport default propertiesZoomStyle;\r\n","/**\r\n * Created by gavorhes on 12/15/2015.\r\n */\r\n\r\nimport quickMapBase from './quickMapBase';\r\nimport provide from '../util/provide';\r\nimport mapMove from './mapMove';\r\nimport mapPopup from './mapPopup';\r\nlet nm = provide('olHelpers');\r\n\r\n/**\r\n * Sets up a map with some default parameters and initializes\r\n * mapMove and mapPopup\r\n *\r\n * @param {object} [options={}] config options\r\n * @param {string} [options.divId=map] map div id\r\n * @param {object} [options.center={}] center config object\r\n * @param {number} [options.center.x=-10018378] center x, web mercator x or lon\r\n * @param {number} [options.center.y=5574910] center y, web mercator y or lat\r\n * @param {number} [options.zoom=7] zoom level\r\n * @param {number} [options.minZoom=undefined] min zoom\r\n * @param {number} [options.maxZoom=undefined] max zoom\r\n * @param {boolean} [options.baseSwitcher=true] if add base map switcher\r\n * @param {boolean} [options.fullScreen=false] if add base map switcher\r\n * @returns {ol.Map} the ol map\r\n */\r\nfunction quickMap(options) {\r\n    let m = quickMapBase(options);\r\n    mapMove.init(m);\r\n    mapPopup.init(m);\r\n\r\n    return m;\r\n}\r\n\r\n\r\nnm.quickMap = quickMap;\r\nexport default quickMap;\r\n","/**\r\n * Created by gavorhes on 3/25/2016.\r\n */\r\n\r\n/**\r\n * Created by gavorhes on 12/15/2015.\r\n */\r\n\r\nimport $ from '../jquery';\r\nimport provide from '../util/provide';\r\nimport ol from '../ol/ol';\r\nconst nm = provide('olHelpers');\r\n\r\n/**\r\n * Sets up a map with some default parameters and initializes\r\n * mapMove and mapPopup\r\n *\r\n * @param {object} [options={}] config options\r\n * @param {string} [options.divId=map] map div id\r\n * @param {object} [options.center={}] center config object\r\n * @param {number} [options.center.x=-10018378] center x, web mercator x or lon\r\n * @param {number} [options.center.y=5574910] center y, web mercator y or lat\r\n * @param {number} [options.zoom=7] zoom level\r\n * @param {number} [options.minZoom=undefined] min zoom\r\n * @param {number} [options.maxZoom=undefined] max zoom\r\n * @param {boolean} [options.baseSwitcher=true] if add base map switcher\r\n * @param {boolean} [options.fullScreen=false] if add base map switcher\r\n * @returns {ol.Map} the ol map\r\n */\r\nfunction quickMapBase(options) {\r\n    options = options || {};\r\n    options.divId = options.divId || 'map';\r\n    options.center = options.center || {};\r\n    options.center.x = typeof options.center.x == 'number' ? options.center.x : -10018378;\r\n    options.center.y = typeof options.center.y == 'number' ? options.center.y : 5574910;\r\n    options.zoom = typeof options.zoom == 'number' ? options.zoom : 7;\r\n    options.baseSwitcher = typeof options.baseSwitcher == 'boolean' ? options.baseSwitcher : true;\r\n    options.fullScreen = typeof options.fullScreen == 'boolean' ? options.fullScreen : false;\r\n\r\n\r\n    let $mapDiv = $('#' + options.divId);\r\n    $mapDiv.css('position', 'relative');\r\n\r\n    let osmLayer = new ol.layer.Tile({source: new ol.source.OSM()});\r\n    let satLayer = new ol.layer.Tile({visible: false, source: new ol.source.MapQuest({layer: 'sat'})});\r\n\r\n    let osmCss = \"url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAMAAABg3Am1AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAMAUExURQAAADQ1NDk5OURFREtLS1FHSFlZWGJRVGJiYWdmZWxsbHRmaXBpanN0c3V0dHp5eX5+fIVzd4F3eeV0jud5juZ8k4aHhomHhoyGh5eGj5OVlJiVlZiYl5qZmJydnKOTlaKZmqKdnaOioaqqqKuzsbOvrrSysLa3tbW4uLm6ub27ub+/vbGXwbCZwbCgxLKlxrOqyLStybO3yrSxyrWzzbW2y7a1zbK4y7W6zbW8y760yrTAzbTFzrPKzrLOzrTJzrTOzr7CwbXC0LXK0LTO0L3I0bPQz7TQz7PS0bXQ0LnR0brW1bzT0r7U077V1Lzc2dqNqteUsdyXscaquuOHneaGmueHnOeJnuiBleiKn+eNoOiOoOWUpOiRo+iSpeiUpeqYpumaqOmdrPSynemgruSqtOmisOmlsuuqtequuOW1vOuxu+uxvOq1ve+xvPK0pvW3o/W5pfO5qvS7qfCwvMOuwc2/wNenxNyyzNe/0Nq31Nq51dy72Oy3wOu4wOu+xey4wO+6xO2+xfTAr/TCsvfFtPHLvvTJuMPDwMfHxcXKyc3DxMvFyMvLyM3PzcDV08DV1MTX1cbY1s7X1sjZ1sra2Mnd3M7b2c7c2tfH1tnB1t7F2d7M29fX1tLY1tDd2tHe3NTf3NnS19rZ1tva2Nnf3t3d28rh3tXg3Nnh3tzj393k39ni4N7k4N7n5uXDyOfLz+zAxu3CyOzEyezKzeDJ3eLM3uvP0u3P0ePf2+7R0u7Q1u/U0+7U1ezc0+7a2e/d2+3f3vbFzvLOwfHN0PPQw/TUx/LWyvLYzPDQ1fPe0ubc4vve4uHh3+nh3+/h2u/h3vHj2vHl3uHm4eTn4uDp5ebo4+Xo5ODq6ebq6OTv6+nl4+/j4O7l4e7n5ujp4+np5Ozq5e7s5urt6O7t6Orw6u7x6u3x7vPj5PDl4fDo4vDq5fDt5vDu6PDv7PTv6fDx6vHx7fH17fXw6fXy7fb07/bz8fT18vn38vr39fr48/r59Pr6+P3++//+/gAAALNTSk0AAAEAdFJOU////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wBT9wclAAAACXBIWXMAAA7DAAAOwwHHb6hkAAAAGHRFWHRTb2Z0d2FyZQBwYWludC5uZXQgNC4wLjlsM35OAAAFNElEQVRIS1VVCZxVUxi/9l0UIUT2bMnY43bVI2c0Y01kSWIaS0j2JEtkN41piomZrPPKQ2aQ7JKImOZlnm2493TJzDufuU1Zi+v/fee+mZ//793vnPOd7zvfes5zDBEZkBBjAcIjb+Iiotqgdhat8AMK0vl7/R9N7GiWtshqIr+EZ5gYKibyUsXY1l/mfFpssvUlWQ0FkU3gy4+RB/+kwYcO8pRSnldcOU/r2lAHARSwk2ORgEmOdC1EsuRiYSqMPwwroMIraZk5V2fYJQjCKfZrRmh3gSAZi2i4b7wSylWu8EqZwS59JkFUaW96JbNSc+CEUmt4rorwuZmWdDaoc+uZETuQlTCU5xYzR7muUnVUVo+BcRhre/VwUpasgJwhH7JkYIYA0sNxhmCwUK+lw6vCKBZehw01dEiyw4Q4aE0Z4ahDhKaFQsGnJ2BgqKoTBsNjFy0SlW6whRAZTdm8DBJmkBZhDi1j4xJQBk6ywrWUTymaCxac8lROcdauRGzQSNtA7EHUYhXyEwhhgjFUqRuO+rauhF1awFpzCsmwUbjIFBR0u1bKtyGpulW/H/cVVzkyGaIWTIR9pFAV6GK2gPMXMX8gPk9zzxXgI1kimcAltEYr+cjio1imlKpEa9rOipLm+p+CZ6Bw//qd1/f/O+GwMxbSLpyoZEcwkyh2jIks+3hmdd2jWUw4scxNysnHxU7nSspTRcJjCZGL3IsjsYJMMg5mwgx7gaIOLBFCogAgBBoNa9w+DE6I+Bs7FTgwwrJbHjWDgpYo2KwtBTcYEDuloC9geQw+k2RGnPGpTaOlq7AS+YICUz4DZVaX2TiNDhuYfTtY4geLi0IoCm3XccwM9hx4kU28StQEljDs3ZEpFGA+8dKzLmV9ymIwF5FOGn2GdJM8KLHDJbXyiYVMG9MRTLiXGGg2QKaxM3khPSRrwM9zEIardxU2w/EiA0gOeYKHzDR0V7/QGV3lKIA9ktrDArxO3gdA+k6SKoBiVwcm7NjZb9+Hnztg282TuHVZ9LOISFNt9MgyCetZVczSxnyDbl17Penq6mqpg1IhRaEO2aVLUO4/r17H8tTv6f13h71dduvZI3Y+uMdWksNSauLovJw5hsqiPIUvt0ku7/iBeUR3sksmomYWtRbAjbiLfv2lX9/V7LVG4uYnUZXhQ7f2OPCZEx9wrYWTcePEQqPEML8pl4mMdr/jlXlvHiRiJ2+MSTFY4TTSYStuvz2R/JXh+PPeGXm055J+3/YDWuNu3R3DArPutyg0ZgykMVDU9Ndm22+wYalr2rse48CnsTIFcMn73vfhNrktx1EUcZnPv6ah3Yy5cDTRdBEoGoBeah71dqFyjZDJLkWk3N3v4uuktssjWpzciMPxQeHj8nMKzcGuB0tAyzFhdCKOYWv4HwOQVwIxLG99a6uvH3sJCyO3h+k4EZ+G7+xj5f4XXksoaGrdMRzSc8ARA8+cdOuk2x6fffNNt5x+Ro1omPlrT/CQDlcNlpx4NBIWXhkx7Y3Zp3ofNR7Uv89Om/beW0TLIynHv3vs1VsOFpSWSXvfuPUf9BrRFyxgXdHoKJnQFegPOovvzz59ntrzye240ig8UQ3lDI2VqwagrKIQcLXNFL3wglN2OHdBQ6/vI3kENDVBwRb3k1XtczFbjWn4EzMYi7CF3129+JTYuRSdrGuS92g5dpqn6qXoJQs5xmL8p+Wt4hLbt0mx2OLNZR2bbPy8zJNQGFM/f/CfXZekRYFjGCWjIJpM+WiCzGBPWHhoyaAsjRT/B2Gy5yzYJkwUAAAAAElFTkSuQmCC')\";\r\n    let aerialCss = \"url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAMAAABg3Am1AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAMAUExURQALBgIMDQgOBwQOEQcTBwUSCwoVDAwdBw8ZDgUREwYUGAYZFQYZGgkTFQoVGQsZFAwZHBMeDhIbFBEbHAwWIA4bIREcIQ4hCQwjFw4lHBgkDB8sDxUiExIiGhAoGxohFRshGRorHQcrKQsiIQwmKgooJA0pKQ81Jw8yLRMiIxImKxUrJREuKhslJB0rIhooKRUuMBMyLhkwJhozKh48LxUzMRM9MBwzMiUvFCMtGiMwEiwzFCgzHDI+GSIsISkvJSQxIiM2LiY5Jic+Lyk0JSo0Ky49JSs9KSU1NSM7NCs2NS8+NDM1JzU9Ljg7IDJCHS1DLSNAMitCMSxIOjREITZLIDZJKDlFIjpFKztKJT1LKzJBMzpHMD1JMjpKPD1RKjlQNC1DQj5QQEA8MEJGJkBKJUJNK0lLLEJMMkVMPEpONENSLUdZL0pTLkpaLkRUMkRSPEVZMktUM0pVOklZMklZNEpcNU1ZMk1ZNUxfMk5dNkxcOVFUM1RUOFJbNVFZOVNYPVFdOVJdPFVaOVVaPVVdOlVdPVpaNlpdO0phN01hOlBiN1NhPFNoP1piPWFbPmRjPENOQEtPSURTQkJVS0xVQk1VSkxbQkxcS0heUVFXRFRcQlJfTFxeQlpeS05lQk1kSFRjQVRjSlZpQ1tkQlxlSlxpRF1rSVVnUVtlU1llXF9tU1xoXlxwSl9ramRfQmJlQ2FhSWFlSWFlTmVlSWRmTGFoQWFpRWFsRmVpRWVtRmNsSmtlRGpqRmpsS2BmWGRsUmFrW2ptUmZyR2RxTGpxTWVyU2RyW2d5V2tzUmt0WW15VG15WXFuTHNtVnFxTXF4T3h0TnJzUnJ1XHJ4VXN6Wnp0VHx1W315VXp8XGR0YGx0YHVzZXJ0aHR9ZXV+aHl9YHOCXXqBXXeCYHyCY3iEaHyIYn+JaXqKcYB5WIN6Y4SCXoCDZIGEaYCIZoOLa4iCaImJbIOOdYuMco6OeIuVcpOKbZKPc5aQb5eXe5ufg6KjhAAAAAAAAAAAAAAAAOGCeQgAAAEAdFJOU////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wBT9wclAAAACXBIWXMAAA7DAAAOwwHHb6hkAAAAGHRFWHRTb2Z0d2FyZQBwYWludC5uZXQgNC4wLjlsM35OAAAH80lEQVRISy1WbXQUVxm+6wqnk3Zmpxl2FG2EGg92C8GDlWptVTwa+uF3xcKmDfFzCUzDsJNsunXipglJXJbrtJWmwZNSnHD3jojRgUIm2UumIZ0JZ7JByrALbMWW0IBW8aRa4+cf76TeX3Nm3uc+z/s+7/vugl4r/aMTrT4e1pPTqnnmJNn5AyUzRnrRle/qE33dsvrBtAQVoxtpZNK3zSzYjUjviWO2Ag+R77dl7W36n/1Ep9KBPG/S+Py0PkjU/gPKQGqwTHryiWYFAXSvMairsio7SjyNsnCzh0qKImV9/7mhfHQZx2yN1O+7rXUm33MUPaboOkAJHaoIdXfJj2xWeyD8jMFEXkvIu5qzpU988gWB5zl+GS+sFe55trEVPdWZB2miq8bBVkNFO2R0qnrfkiXhcJhtDNXE6tbW97/s9O9/7ZfVhx86/CwrROpfvvxboMqeLsuqPr1j44qEwDNMOBximUiYoU8sw7BC/a7T72uEnyJDlGxZ9KcglZRyuqqrv/tSZErgOI4NgRBTIw9EmHAoFGZZnp6aGaJ2GTxfxYs8kKVUQh7WB5hQeC3LsUxoxVKW14l3BX2WcoUYPiZyLLe8teZ+iuT4GGhvV5KpKWkpyzxEr2MZgQ1xdRjfRBoH+2k6lIHjKTHPPBo8CSJISqqq4wGGOcWylIGlgvgNX1Gd8vF5f+IUIwb30ng+Gg2QfBRIMvy0jG8SVkYo4N0zvUXVRztbJ/L6xL7lUZEXBEHkuZqlS6gEAUgKJurnhFtfpACOYd8b/hVbJPqwi44a6KA0sPVjIi/SIyxb3u8KlAJ0S8jRVgrlW+nVHPdrhiXCxu42d86ByksDc80P3MkJFBFQ8Ho1lQegpWJRWFGsDsRwwv7pIyvuQW0ZkrX6NDVFbqcvaQI8vbyqzt5AARrsbKx5yhQEGs+wPO56bOK+0rcwMrOKkpUbZWYxV04UeZZv/cBKFhRL6Qdv9y4LfEDA7/thg7tTmv1a5/GnO0wl0dQg80wglZaHUmxRvjwAHOfyN0mxrpqLUpcjsK3NHYMo4R1o6eho2ZyIb2FoeOC3ILK8kZ2HQMOuWywGXUkJBCeTbYFS0+ym1h2/6UgmvnrvKYZZtIEXGf75C2cIAp5LHNd71x7uPoTjakrWH9e3KFpaatjUvJUysFw0KrLMYMW2lTg4PeUQx6kJEALvxXEmCdVyPLHtCSjBhc01XCjIgafxou+PE6KC1dhxSCwoBCc+N4P3btM84pmdSSjJnjO/nvY4LQfVyz5/I+v6IwjUOMjy+MVCxIbKupTJaEktp7cTKU42Pvjh2m/8cSpC6aPsaX/MHSuUQLVVsIa4RUTs/r/BVAexNdjdnsNG7j/rV93xheLMzKnFrPeTEQchCyCcKb25aAIn7lrAertrZwyNXM8N6zfWrFo3d2SmOEcF83x/r+OOFgrAHYWF7cELjhV7UQo/6WAIUVl9JFl8a//HZ66VpbY3I9QKZqPru77lA+iOWAIr0hKxHCmmr0othSyeIl5y3qt4xT8gSNrKEZozs8Els67rgsLOZ+ygzwMfbtNhobfgzpEyGnz7htPtzUi6PuOoj7K0WF/MXiUFxwGajRD1hjYXHXI9p406qOyinp5/tiWcDHY0jIu4n64Qfq7kliB2gemag9QbOia0PbbDMbd43SHuvxFxrAocxins7MX5Kqbe1QixKBxoV4//PfAgGCu+Rlm4SvZizyDH+0reDHp92iO0BuX3bCfItl0PEwvYLqpwXG2MHlGsQ4S8pMJZv1JGmHiEoHQDdOjwmVlEP/nE9ADKjI8xLI0OOGITfy0SbeG/C2jKUDGSlDhM9I3IpK9iup6XnbRNC7yqueNsJCCIiXzdQhnaGN+46umnEdy5U5UbUJ48LFM9GkJo8BdDOiAZ7ZIQbKhYLMqvhU2wmNxjEAsS2AI7y4nWF64duePbk7YV3zvAVLEMD9AxJRNa3KDUibV7DjnkuprMEYjScFNcaR2ceP2u9R/5k1052Ryme5phAFRswlHjAudiP4dOy7CaxLgdJh9vUlU1702/+LPa1U9fvPi9qlA4XEUBJc3dFlpsR457IDl1iPqLp7o81NQgyV19iYU38uTiv975Pd3SiwQcsGjx+v4/6fl5T7EOOMTCtpbKxfemsQq/3olQZcminADAAI0cuGLHaHOFxbuGvRk/Z9u7CULqoVR6NE0yx1avj30oRhc/jWUoIALGxkz0dg1Dl9iaI7LqOOXKsXJFwjiuEAi70Jra2nW1PL08zLBhZsMABpW5csI7TPfew9ipFKcn5k1i+1KyCWKjC3W/8dF1d666+RaabBVTFTHacjoojBNDh0NDxk+IPTlwfqJkWpbnpFHXIbLbmpxEQ3ff/Z0g/mauXsoln9wDRjy/NHsQFw3P6vWuTJ43/+FZrk2cvAFRipCKdfD9y2+pjRj78s0KdCUDKJvdV91ChngV38T20TM+gghjpJaPlpFr2xbEz5g4A/NGt5rNwdwmYGeeeMXBSLHHUIc+6RsojRH9VTUm3/mLf/64b470XvoxoTKhlMBQ2jMEzo2PjxdGMppmn1RM24bWFJqaQv4BcuJa2Sam7Zokq1ldCsz06NCBHrhwqVQYpfFj42NZexz1EW9SR/kT58nEeQKJb2fPXjjp0u/YUkwHEgLeOnf2nOuf1TRTM02CLKLTPy60/x1CCztqn7Ev+BdsC3m+30decQvW/wBNTwU+CfUQAQAAAABJRU5ErkJggg==')\";\r\n\r\n    if (options.baseSwitcher) {\r\n        let switcherContent = '<div class=\"base-map-switcher\" title=\"Toggle Base Layer\" style=\"';\r\n        switcherContent += 'position: absolute; top: 70px; left: 4px; border: solid black 1px; ';\r\n        switcherContent += `height: 50px; width: 50px; z-index: 10; border-radius: 4px; background: ${aerialCss};`;\r\n        switcherContent += '\"></div>';\r\n        $mapDiv.append(switcherContent);\r\n\r\n       $mapDiv.find('.base-map-switcher').click(function() {\r\n            \"use strict\";\r\n            osmLayer.setVisible(!osmLayer.getVisible());\r\n            satLayer.setVisible(!satLayer.getVisible());\r\n\r\n            if (osmLayer.getVisible()){\r\n                $(this).css('background', aerialCss);\r\n            } else {\r\n                $(this).css('background', osmCss);\r\n            }\r\n        });\r\n    }\r\n\r\n    if (options.zoom < 0 || options.zoom > 28) {\r\n        throw 'zoom out of range';\r\n    }\r\n\r\n    if (options.center.x >= -180 && options.center.x <= 180 && options.center.y >= -90 && options.center.y <= 90) {\r\n        let p = new ol.geom.Point([options.center.x, options.center.y]);\r\n        p.transform(\"EPSG:4326\", \"EPSG:3857\");\r\n        let coordinates = p.getCoordinates();\r\n        options.center.x = coordinates[0];\r\n        options.center.y = coordinates[1];\r\n    }\r\n\r\n    let map = new ol.Map({\r\n        layers: [osmLayer, satLayer],\r\n        target: options.divId,\r\n        controls: ol.control.defaults({\r\n            attributionOptions: {collapsible: false}\r\n        }),\r\n        view: new ol.View({\r\n            center: [options.center.x, options.center.y],\r\n            zoom: options.zoom,\r\n            minZoom: options.minZoom,\r\n            maxZoom: options.maxZoom\r\n        })\r\n    });\r\n    \r\n    if (options.fullScreen){\r\n        map.addControl(new ol.control.FullScreen());\r\n    }\r\n\r\n    return map;\r\n}\r\n\r\nnm.quickMapBase = quickMapBase;\r\nexport default quickMapBase;\r\n\r\n","/**\r\n * Created by gavorhes on 12/14/2015.\r\n */\r\n\r\nimport provide from '../util/provide';\r\nconst nm = provide('olHelpers.zoomResolutionConvert');\r\n\r\nlet _zoomResLookup = [\r\n    156543.03392804097, //0\r\n    78271.51696402048, //1\r\n    39135.75848201024, //2\r\n    19567.87924100512, //3\r\n    9783.93962050256, //4\r\n    4891.96981025128, //5\r\n    2445.98490512564, //6\r\n    1222.99245256282, //7\r\n    611.49622628141, //8\r\n    305.748113140705, //9\r\n    152.8740565703525, //10\r\n    76.43702828517625, //11\r\n    38.21851414258813, //12\r\n    19.109257071294063, //13\r\n    9.554628535647032, //14\r\n    4.777314267823516, //15\r\n    2.388657133911758, //16\r\n    1.194328566955879, //17\r\n    0.5971642834779395, //18\r\n    0.29858214173896974, //19\r\n    0.14929107086948487, //20\r\n    0.07464553543474244, //21\r\n    0.03732276771737122, //22\r\n    0.01866138385868561, //23\r\n    0.009330691929342804, //24\r\n    0.004665345964671402, //25\r\n    0.002332672982335701, //26\r\n    0.0011663364911678506, //27\r\n    0.0005831682455839253 //28\r\n];\r\n\r\n/**\r\n * Get the resolution given the zoom level\r\n * @param {number} zoomLevel - the zoom level\r\n * @returns {number|*} the map resolution\r\n */\r\nexport function zoomToResolution(zoomLevel) {\r\n    \"use strict\";\r\n\r\n    if (typeof zoomLevel == 'number') {\r\n        if (zoomLevel % 1 === 0 && zoomLevel >= 0 && zoomLevel <= 28) {\r\n            return _zoomResLookup[zoomLevel];\r\n        } else {\r\n            console.log(`invalid zoom level provided: ${zoomLevel}`);\r\n\r\n            return undefined;\r\n        }\r\n    } else {\r\n        return undefined;\r\n    }\r\n}\r\nnm.zoomToResolution = zoomToResolution;\r\n\r\n\r\n/**\r\n * Get resolution from the zoom level\r\n * @param {number} resolution - the resolution\r\n * @returns {number|*} the zoom level\r\n */\r\nexport function resolutionToZoom(resolution){\r\n    for (let i = 0; i < _zoomResLookup.length; i++){\r\n        if (resolution >= _zoomResLookup[i] ){\r\n            return i;\r\n        }\r\n    }\r\n\r\n    return 0;\r\n}\r\n\r\nnm.resolutionToZoom = resolutionToZoom;\r\n","// OpenLayers 3. See http://openlayers.org/\n// License: https://raw.githubusercontent.com/openlayers/ol3/master/LICENSE.md\n(function (root, factory) {\n  if (typeof exports === \"object\") {\n    module.exports = factory();\n  } else if (typeof define === \"function\" && define.amd) {\n    define([], factory);\n  } else {\n    root.ol = factory();\n  }\n}(this, function () {\n  var OPENLAYERS = {};\n  var p,x=this;function F(b,c,d){b=b.split(\".\");d=d||x;b[0]in d||!d.execScript||d.execScript(\"var \"+b[0]);for(var e;b.length&&(e=b.shift());)b.length||void 0===c?d[e]?d=d[e]:d=d[e]={}:d[e]=c}function aa(b){b.ua=function(){return b.Ac?b.Ac:b.Ac=new b}}\nfunction ba(b){var c=typeof b;if(\"object\"==c)if(b){if(b instanceof Array)return\"array\";if(b instanceof Object)return c;var d=Object.prototype.toString.call(b);if(\"[object Window]\"==d)return\"object\";if(\"[object Array]\"==d||\"number\"==typeof b.length&&\"undefined\"!=typeof b.splice&&\"undefined\"!=typeof b.propertyIsEnumerable&&!b.propertyIsEnumerable(\"splice\"))return\"array\";if(\"[object Function]\"==d||\"undefined\"!=typeof b.call&&\"undefined\"!=typeof b.propertyIsEnumerable&&!b.propertyIsEnumerable(\"call\"))return\"function\"}else return\"null\";\nelse if(\"function\"==c&&\"undefined\"==typeof b.call)return\"object\";return c}function ca(b){var c=ba(b);return\"array\"==c||\"object\"==c&&\"number\"==typeof b.length}function da(b){return\"string\"==typeof b}function ea(b){return\"number\"==typeof b}function ga(b){return\"function\"==ba(b)}function ha(b){var c=typeof b;return\"object\"==c&&null!=b||\"function\"==c}function I(b){return b[ia]||(b[ia]=++ja)}var ia=\"closure_uid_\"+(1E9*Math.random()>>>0),ja=0;function ka(b,c,d){return b.call.apply(b.bind,arguments)}\nfunction la(b,c,d){if(!b)throw Error();if(2<arguments.length){var e=Array.prototype.slice.call(arguments,2);return function(){var d=Array.prototype.slice.call(arguments);Array.prototype.unshift.apply(d,e);return b.apply(c,d)}}return function(){return b.apply(c,arguments)}}function ma(b,c,d){ma=Function.prototype.bind&&-1!=Function.prototype.bind.toString().indexOf(\"native code\")?ka:la;return ma.apply(null,arguments)}\nfunction na(b,c){var d=Array.prototype.slice.call(arguments,1);return function(){var c=d.slice();c.push.apply(c,arguments);return b.apply(this,c)}}function M(b,c){function d(){}d.prototype=c.prototype;b.X=c.prototype;b.prototype=new d;b.prototype.constructor=b;b.We=function(b,d,g){for(var h=Array(arguments.length-2),k=2;k<arguments.length;k++)h[k-2]=arguments[k];return c.prototype[d].apply(b,h)}};var oa;function pa(){};var qa;var sa=String.prototype.trim?function(b){return b.trim()}:function(b){return b.replace(/^[\\s\\xa0]+|[\\s\\xa0]+$/g,\"\")};function ta(b){if(!ua.test(b))return b;-1!=b.indexOf(\"&\")&&(b=b.replace(va,\"&amp;\"));-1!=b.indexOf(\"<\")&&(b=b.replace(wa,\"&lt;\"));-1!=b.indexOf(\">\")&&(b=b.replace(xa,\"&gt;\"));-1!=b.indexOf('\"')&&(b=b.replace(ya,\"&quot;\"));-1!=b.indexOf(\"'\")&&(b=b.replace(za,\"&#39;\"));-1!=b.indexOf(\"\\x00\")&&(b=b.replace(Aa,\"&#0;\"));return b}var va=/&/g,wa=/</g,xa=/>/g,ya=/\"/g,za=/'/g,Aa=/\\x00/g,ua=/[\\x00&<>\"']/;\nfunction Ba(b,c){return b<c?-1:b>c?1:0};function Ca(b,c,d){return Math.min(Math.max(b,c),d)}var Da=function(){var b;\"cosh\"in Math?b=Math.cosh:b=function(b){b=Math.exp(b);return(b+1/b)/2};return b}();function Ea(b,c){var d=b%c;return 0>d*c?d+c:d};function Fa(b){return function(c){if(c)return[Ca(c[0],b[0],b[2]),Ca(c[1],b[1],b[3])]}}function Ga(b){return b};function Ha(b,c){return b>c?1:b<c?-1:0}function Ia(b,c,d){var e=b.length;if(b[0]<=c)return 0;if(!(c<=b[e-1]))if(0<d)for(d=1;d<e;++d){if(b[d]<c)return d-1}else if(0>d)for(d=1;d<e;++d){if(b[d]<=c)return d}else for(d=1;d<e;++d){if(b[d]==c)return d;if(b[d]<c)return b[d-1]-c<c-b[d]?d-1:d}return e-1}function Ja(b){return b.reduce(function(b,d){return Array.isArray(d)?b.concat(Ja(d)):b.concat(d)},[])}function Ka(b,c){var d,e=ca(c)?c:[c],f=e.length;for(d=0;d<f;d++)b[b.length]=e[d]}\nfunction La(b,c){var d=b.indexOf(c),e=-1<d;e&&b.splice(d,1);return e}function Ma(b,c){var d=b.length;if(d!==c.length)return!1;for(var e=0;e<d;e++)if(b[e]!==c[e])return!1;return!0}function Na(b){var c=Oa,d=b.length,e=Array(b.length),f;for(f=0;f<d;f++)e[f]={index:f,value:b[f]};e.sort(function(b,d){return c(b.value,d.value)||b.index-d.index});for(f=0;f<b.length;f++)b[f]=e[f].value};function Pa(b){return function(c,d,e){if(void 0!==c)return c=Ia(b,c,e),c=Ca(c+d,0,b.length-1),b[c]}}function Qa(b,c,d){return function(e,f,g){if(void 0!==e)return e=Math.max(Math.floor(Math.log(c/e)/Math.log(b)+(0<g?0:0>g?1:.5))+f,0),void 0!==d&&(e=Math.min(e,d)),c/Math.pow(b,e)}};function Ra(b){if(void 0!==b)return 0}function Sa(b,c){if(void 0!==b)return b+c}function Ta(b){var c=2*Math.PI/b;return function(b,e){if(void 0!==b)return b=Math.floor((b+e)/c+.5)*c}}function Ua(){var b=5*Math.PI/180;return function(c,d){if(void 0!==c)return Math.abs(c+d)<=b?0:c+d}};function Va(b,c,d){this.center=b;this.resolution=c;this.rotation=d};var Wa=\"function\"===typeof Object.assign?Object.assign:function(b,c){if(void 0===b||null===b)throw new TypeError(\"Cannot convert undefined or null to object\");for(var d=Object(b),e=1,f=arguments.length;e<f;++e){var g=arguments[e];if(void 0!==g&&null!==g)for(var h in g)g.hasOwnProperty(h)&&(d[h]=g[h])}return d};function Ya(b){for(var c in b)delete b[c]}function Za(b){var c=[],d;for(d in b)c.push(b[d]);return c}function $a(b){for(var c in b)return!1;return!c};var ab=\"olm_\"+(1E4*Math.random()|0);function bb(b){function c(c){var e=b.listener,f=b.hc||b.target;b.kc&&N(b);return e.call(f,c)}return b.ic=c}function cb(b,c,d,e){for(var f,g=0,h=b.length;g<h;++g)if(f=b[g],f.listener===c&&f.hc===d)return e&&(f.deleteIndex=g),f}function db(b,c){var d=b[ab];return d?d[c]:void 0}function eb(b){var c=b[ab];c||(c=b[ab]={});return c}\nfunction fb(b,c){var d=db(b,c);if(d){for(var e=0,f=d.length;e<f;++e)b.removeEventListener(c,d[e].ic),Ya(d[e]);d.length=0;if(d=b[ab])delete d[c],0===Object.keys(d).length&&delete b[ab]}}function Q(b,c,d,e,f){var g=eb(b),h=g[c];h||(h=g[c]=[]);(g=cb(h,d,e,!1))?f||(g.kc=!1):(g={hc:e,kc:!!f,listener:d,target:b,type:c},b.addEventListener(c,bb(g)),h.push(g));return g}function gb(b,c,d,e){(b=db(b,c))&&(d=cb(b,d,e,!0))&&N(d)}\nfunction N(b){if(b&&b.target){b.target.removeEventListener(b.type,b.ic);var c=db(b.target,b.type);if(c){var d=\"deleteIndex\"in b?b.deleteIndex:c.indexOf(b);-1!==d&&c.splice(d,1);0===c.length&&fb(b.target,b.type)}Ya(b)}}function hb(b){var c=eb(b),d;for(d in c)fb(b,d)};function ib(){}ib.prototype.ja=!1;function jb(b){b.ja||(b.ja=!0,b.J())}ib.prototype.J=pa;function R(b,c){this.type=b;this.target=c||null}R.prototype.preventDefault=R.prototype.stopPropagation=function(){this.xe=!0};function kb(b){b.stopPropagation()}function lb(b){b.preventDefault()};function mb(){this.H={};this.A={}}M(mb,ib);mb.prototype.addEventListener=function(b,c){var d=this.A[b];d||(d=this.A[b]=[]);-1===d.indexOf(c)&&d.push(c)};function S(b,c){var d=\"string\"===typeof c?new R(c):c,e=d.type;d.target=b;var f=b.A[e],g;if(f){e in b.H||(b.H[e]=0);for(var h=0,k=f.length;h<k;++h)if(!1===f[h].call(b,d)||d.xe){g=!1;break}d=b.H[e];for(delete b.H[e];d--;)b.removeEventListener(e,pa);return g}}mb.prototype.J=function(){hb(this)};\nfunction nb(b,c){return c?c in b.A:0<Object.keys(b.A).length}mb.prototype.removeEventListener=function(b,c){var d=this.A[b];if(d){var e=d.indexOf(c);b in this.H?(d[e]=pa,++this.H[b]):(d.splice(e,1),0===d.length&&delete this.A[b])}};function ob(){mb.call(this);this.f=0}M(ob,mb);ob.prototype.v=function(){++this.f;S(this,\"change\")};ob.prototype.ba=function(b,c,d){if(Array.isArray(b)){for(var e=b.length,f=Array(e),g=0;g<e;++g)f[g]=Q(this,b[g],c,d);return f}return Q(this,b,c,d)};function pb(b,c,d){R.call(this,b);this.key=c;this.oldValue=d}M(pb,R);function T(b){ob.call(this);I(this);this.K={};void 0!==b&&this.l(b)}M(T,ob);var qb={};function rb(b){return qb.hasOwnProperty(b)?qb[b]:qb[b]=\"change:\"+b}T.prototype.get=function(b){var c;this.K.hasOwnProperty(b)&&(c=this.K[b]);return c};T.prototype.za=function(){return Wa({},this.K)};T.prototype.set=function(b,c,d){d?this.K[b]=c:(d=this.K[b],this.K[b]=c,d!==c&&(c=rb(b),S(this,new pb(c,b,d)),S(this,new pb(\"propertychange\",b,d))))};\nT.prototype.l=function(b,c){for(var d in b)this.set(d,b[d],c)};function sb(b,c,d){void 0===d&&(d=[0,0]);d[0]=b[0]*c+.5|0;d[1]=b[1]*c+.5|0;return d}function tb(b,c){if(Array.isArray(b))return b;void 0===c?c=[b,b]:(c[0]=b,c[1]=b);return c};function ub(b,c){b[0]+=c[0];b[1]+=c[1]}function vb(b,c){var d=Math.cos(c),e=Math.sin(c),f=b[1]*d+b[0]*e;b[0]=b[0]*d-b[1]*e;b[1]=f};function wb(b){this.length=b.length||b;for(var c=0;c<this.length;c++)this[c]=b[c]||0}wb.prototype.BYTES_PER_ELEMENT=4;wb.prototype.set=function(b,c){c=c||0;for(var d=0;d<b.length&&c+d<this.length;d++)this[c+d]=b[d]};wb.prototype.toString=Array.prototype.join;\"undefined\"==typeof Float32Array&&(wb.BYTES_PER_ELEMENT=4,wb.prototype.BYTES_PER_ELEMENT=wb.prototype.BYTES_PER_ELEMENT,wb.prototype.set=wb.prototype.set,wb.prototype.toString=wb.prototype.toString,F(\"Float32Array\",wb,void 0));function xb(b){this.length=b.length||b;for(var c=0;c<this.length;c++)this[c]=b[c]||0}xb.prototype.BYTES_PER_ELEMENT=8;xb.prototype.set=function(b,c){c=c||0;for(var d=0;d<b.length&&c+d<this.length;d++)this[c+d]=b[d]};xb.prototype.toString=Array.prototype.join;if(\"undefined\"==typeof Float64Array){try{xb.BYTES_PER_ELEMENT=8}catch(b){}xb.prototype.BYTES_PER_ELEMENT=xb.prototype.BYTES_PER_ELEMENT;xb.prototype.set=xb.prototype.set;xb.prototype.toString=xb.prototype.toString;F(\"Float64Array\",xb,void 0)};function yb(b,c,d,e,f){b[0]=c;b[1]=d;b[2]=e;b[3]=f};function zb(){var b=Array(16);Ab(b,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);return b}function Bb(){var b=Array(16);Ab(b,1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1);return b}function Ab(b,c,d,e,f,g,h,k,l,m,n,q,r,u,w,y,z){b[0]=c;b[1]=d;b[2]=e;b[3]=f;b[4]=g;b[5]=h;b[6]=k;b[7]=l;b[8]=m;b[9]=n;b[10]=q;b[11]=r;b[12]=u;b[13]=w;b[14]=y;b[15]=z}\nfunction Cb(b,c){b[0]=c[0];b[1]=c[1];b[2]=c[2];b[3]=c[3];b[4]=c[4];b[5]=c[5];b[6]=c[6];b[7]=c[7];b[8]=c[8];b[9]=c[9];b[10]=c[10];b[11]=c[11];b[12]=c[12];b[13]=c[13];b[14]=c[14];b[15]=c[15]}function Db(b){b[0]=1;b[1]=0;b[2]=0;b[3]=0;b[4]=0;b[5]=1;b[6]=0;b[7]=0;b[8]=0;b[9]=0;b[10]=1;b[11]=0;b[12]=0;b[13]=0;b[14]=0;b[15]=1}\nfunction Eb(b,c){var d=b[0],e=b[1],f=b[2],g=b[3],h=b[4],k=b[5],l=b[6],m=b[7],n=b[8],q=b[9],r=b[10],u=b[11],w=b[12],y=b[13],z=b[14],D=b[15],t=d*k-e*h,v=d*l-f*h,B=d*m-g*h,E=e*l-f*k,C=e*m-g*k,G=f*m-g*l,J=n*y-q*w,A=n*z-r*w,H=n*D-u*w,O=q*z-r*y,P=q*D-u*y,L=r*D-u*z,K=t*L-v*P+B*O+E*H-C*A+G*J;0!=K&&(K=1/K,c[0]=(k*L-l*P+m*O)*K,c[1]=(-e*L+f*P-g*O)*K,c[2]=(y*G-z*C+D*E)*K,c[3]=(-q*G+r*C-u*E)*K,c[4]=(-h*L+l*H-m*A)*K,c[5]=(d*L-f*H+g*A)*K,c[6]=(-w*G+z*B-D*v)*K,c[7]=(n*G-r*B+u*v)*K,c[8]=(h*P-k*H+m*J)*K,c[9]=(-d*P+\ne*H-g*J)*K,c[10]=(w*C-y*B+D*t)*K,c[11]=(-n*C+q*B-u*t)*K,c[12]=(-h*O+k*A-l*J)*K,c[13]=(d*O-e*A+f*J)*K,c[14]=(-w*E+y*v-z*t)*K,c[15]=(n*E-q*v+r*t)*K)}function Fb(b,c,d){var e=b[1]*c+b[5]*d+0*b[9]+b[13],f=b[2]*c+b[6]*d+0*b[10]+b[14],g=b[3]*c+b[7]*d+0*b[11]+b[15];b[12]=b[0]*c+b[4]*d+0*b[8]+b[12];b[13]=e;b[14]=f;b[15]=g}function Gb(b,c,d){Ab(b,b[0]*c,b[1]*c,b[2]*c,b[3]*c,b[4]*d,b[5]*d,b[6]*d,b[7]*d,1*b[8],1*b[9],1*b[10],1*b[11],b[12],b[13],b[14],b[15])}\nfunction Hb(b,c){var d=b[0],e=b[1],f=b[2],g=b[3],h=b[4],k=b[5],l=b[6],m=b[7],n=Math.cos(c),q=Math.sin(c);b[0]=d*n+h*q;b[1]=e*n+k*q;b[2]=f*n+l*q;b[3]=g*n+m*q;b[4]=d*-q+h*n;b[5]=e*-q+k*n;b[6]=f*-q+l*n;b[7]=g*-q+m*n}new Float64Array(3);new Float64Array(3);new Float64Array(4);new Float64Array(4);new Float64Array(4);new Float64Array(16);function Ib(b){for(var c=Jb(),d=0,e=b.length;d<e;++d)Kb(c,b[d]);return c}function Lb(b,c,d){return d?(d[0]=b[0]-c,d[1]=b[1]-c,d[2]=b[2]+c,d[3]=b[3]+c,d):[b[0]-c,b[1]-c,b[2]+c,b[3]+c]}function Mb(b,c){return c?(c[0]=b[0],c[1]=b[1],c[2]=b[2],c[3]=b[3],c):b.slice()}function Nb(b,c){return b[0]<=c[0]&&c[2]<=b[2]&&b[1]<=c[1]&&c[3]<=b[3]}function Jb(){return[Infinity,Infinity,-Infinity,-Infinity]}function Ob(b,c,d,e,f){return f?(f[0]=b,f[1]=c,f[2]=d,f[3]=e,f):[b,c,d,e]}\nfunction Pb(b){return Ob(Infinity,Infinity,-Infinity,-Infinity,b)}function Qb(b,c){var d=b[0],e=b[1];return Ob(d,e,d,e,c)}function Rb(b,c){return b[0]==c[0]&&b[2]==c[2]&&b[1]==c[1]&&b[3]==c[3]}function Sb(b,c){c[0]<b[0]&&(b[0]=c[0]);c[2]>b[2]&&(b[2]=c[2]);c[1]<b[1]&&(b[1]=c[1]);c[3]>b[3]&&(b[3]=c[3])}function Kb(b,c){c[0]<b[0]&&(b[0]=c[0]);c[0]>b[2]&&(b[2]=c[0]);c[1]<b[1]&&(b[1]=c[1]);c[1]>b[3]&&(b[3]=c[1])}\nfunction Tb(b,c,d,e,f){for(;d<e;d+=f){var g=b,h=c[d],k=c[d+1];g[0]=Math.min(g[0],h);g[1]=Math.min(g[1],k);g[2]=Math.max(g[2],h);g[3]=Math.max(g[3],k)}return b}function Ub(b){var c=0;b[2]<b[0]||b[3]<b[1]||(c=Vb(b)*Wb(b));return c}function Xb(b){return[b[0],b[1]]}function Yb(b){return[(b[0]+b[2])/2,(b[1]+b[3])/2]}\nfunction Zb(b,c,d,e){var f=c*e[0]/2;e=c*e[1]/2;c=Math.cos(d);var g=Math.sin(d);d=f*c;f*=g;c*=e;var h=e*g,k=b[0],l=b[1];b=k-d+h;e=k-d-h;g=k+d-h;d=k+d+h;var h=l-f-c,k=l-f+c,m=l+f+c,f=l+f-c;return Ob(Math.min(b,e,g,d),Math.min(h,k,m,f),Math.max(b,e,g,d),Math.max(h,k,m,f),void 0)}function Wb(b){return b[3]-b[1]}function $b(b,c){var d=Jb();ac(b,c)&&(d[0]=b[0]>c[0]?b[0]:c[0],d[1]=b[1]>c[1]?b[1]:c[1],d[2]=b[2]<c[2]?b[2]:c[2],d[3]=b[3]<c[3]?b[3]:c[3]);return d}function bc(b){return[b[0],b[3]]}\nfunction Vb(b){return b[2]-b[0]}function ac(b,c){return b[0]<=c[2]&&b[2]>=c[0]&&b[1]<=c[3]&&b[3]>=c[1]};function cc(){return!0}function dc(){return!1};/*\n\n Latitude/longitude spherical geodesy formulae taken from\n http://www.movable-type.co.uk/scripts/latlong.html\n Licensed under CC-BY-3.0.\n*/\nfunction ec(b){this.radius=b}function fc(b,c){var d=b[1]*Math.PI/180,e=c[1]*Math.PI/180,f=(e-d)/2,g=(c[0]-b[0])*Math.PI/180/2,d=Math.sin(f)*Math.sin(f)+Math.sin(g)*Math.sin(g)*Math.cos(d)*Math.cos(e);return 2*gc.radius*Math.atan2(Math.sqrt(d),Math.sqrt(1-d))}\nec.prototype.offset=function(b,c,d){var e=b[1]*Math.PI/180;c/=this.radius;var f=Math.asin(Math.sin(e)*Math.cos(c)+Math.cos(e)*Math.sin(c)*Math.cos(d));return[180*(b[0]*Math.PI/180+Math.atan2(Math.sin(d)*Math.sin(c)*Math.cos(e),Math.cos(c)-Math.sin(e)*Math.sin(f)))/Math.PI,180*f/Math.PI]};var gc=new ec(6370997);var hc={};hc.degrees=2*Math.PI*gc.radius/360;hc.ft=.3048;hc.m=1;hc[\"us-ft\"]=1200/3937;\nfunction ic(b){this.qa=b.code;this.b=b.units;this.h=void 0!==b.extent?b.extent:null;this.f=void 0!==b.global?b.global:!1;this.a=!(!this.f||!this.h);this.i=void 0!==b.getPointResolution?b.getPointResolution:this.j;this.c=null;this.g=b.metersPerUnit;var c=jc,d=b.code,e=kc||x.proj4;if(\"function\"==typeof e&&void 0===c[d]){var f=e.defs(d);if(void 0!==f){void 0===b.metersPerUnit&&(this.g=f.to_meter);void 0===b.units&&(this.b=f.units);var g,h;for(g in c)if(b=e.defs(g),void 0!==b)if(c=lc(g),b===f)mc([c,this]);\nelse{h=e(g,d);b=h.forward;h=h.inverse;var c=lc(c),k=lc(this);nc(c,k,oc(b));nc(k,c,oc(h))}}}}ic.prototype.l=function(){return this.qa};ic.prototype.C=function(){return this.h};function pc(b){return b.g||hc[b.b]}ic.prototype.j=function(b,c){if(\"degrees\"==this.b)return b;var d=qc(this,lc(\"EPSG:4326\")),e=[c[0]-b/2,c[1],c[0]+b/2,c[1],c[0],c[1]-b/2,c[0],c[1]+b/2],e=d(e,e,2),d=(fc(e.slice(0,2),e.slice(2,4))+fc(e.slice(4,6),e.slice(6,8)))/2,e=pc(this);void 0!==e&&(d/=e);return d};\nic.prototype.getPointResolution=function(b,c){return this.i(b,c)};var jc={},rc={},kc=null;function mc(b){sc(b);b.forEach(function(c){b.forEach(function(b){c!==b&&nc(c,b,tc)})})}function uc(b){jc[b.qa]=b;nc(b,b,tc)}function sc(b){var c=[];b.forEach(function(b){c.push(uc(b))})}function vc(b){return b?\"string\"===typeof b?lc(b):b:lc(\"EPSG:3857\")}function nc(b,c,d){b=b.qa;c=c.qa;b in rc||(rc[b]={});rc[b][c]=d}\nfunction oc(b){return function(c,d,e){var f=c.length;e=void 0!==e?e:2;d=void 0!==d?d:Array(f);var g,h;for(h=0;h<f;h+=e)for(g=b([c[h],c[h+1]]),d[h]=g[0],d[h+1]=g[1],g=e-1;2<=g;--g)d[h+g]=c[h+g];return d}}function lc(b){var c;if(b instanceof ic)c=b;else if(\"string\"===typeof b){c=jc[b];var d=kc||x.proj4;void 0===c&&\"function\"==typeof d&&void 0!==d.defs(b)&&(c=new ic({code:b}),uc(c))}else c=null;return c}function wc(b,c){if(b===c)return!0;var d=b.b===c.b;return b.qa===c.qa?d:qc(b,c)===tc&&d}\nfunction xc(b,c){var d=lc(b),e=lc(c);return qc(d,e)}function qc(b,c){var d=b.qa,e=c.qa,f;d in rc&&e in rc[d]&&(f=rc[d][e]);void 0===f&&(f=yc);return f}function yc(b,c){if(void 0!==c&&b!==c){for(var d=0,e=b.length;d<e;++d)c[d]=b[d];b=c}return b}function tc(b,c){var d;if(void 0!==c){d=0;for(var e=b.length;d<e;++d)c[d]=b[d];d=c}else d=b.slice();return d};function zc(){T.call(this);this.u=Jb();this.w=-1;this.h={};this.s=this.i=0}M(zc,T);zc.prototype.C=function(b){this.w!=this.f&&(this.u=this.ib(this.u),this.w=this.f);var c=this.u;b?(b[0]=c[0],b[1]=c[1],b[2]=c[2],b[3]=c[3]):b=c;return b};zc.prototype.o=function(b,c){this.Eb(xc(b,c));return this};function Ac(b,c,d,e,f,g){var h=f[0],k=f[1],l=f[4],m=f[5],n=f[12];f=f[13];for(var q=g?g:[],r=0;c<d;c+=e){var u=b[c],w=b[c+1];q[r++]=h*u+l*w+n;q[r++]=k*u+m*w+f}g&&q.length!=r&&(q.length=r);return q};function Bc(){zc.call(this);this.g=\"XY\";this.b=2;this.a=null}M(Bc,zc);function Cc(b){if(\"XY\"==b)return 2;if(\"XYZ\"==b||\"XYM\"==b)return 3;if(\"XYZM\"==b)return 4}p=Bc.prototype;p.ib=function(b){var c=this.a,d=this.a.length,e=this.b;b=Pb(b);return Tb(b,c,0,d,e)};\np.Ob=function(b){this.s!=this.f&&(Ya(this.h),this.i=0,this.s=this.f);if(0>b||0!==this.i&&b<=this.i)return this;var c=b.toString();if(this.h.hasOwnProperty(c))return this.h[c];var d=this.Ma(b);if(d.a.length<this.a.length)return this.h[c]=d;this.i=b;return this};p.Ma=function(){return this};function U(b,c,d){b.b=Cc(c);b.g=c;b.a=d}function Dc(b,c,d,e){if(c)d=Cc(c);else{for(c=0;c<e;++c){if(0===d.length){b.g=\"XY\";b.b=2;return}d=d[0]}d=d.length;c=2==d?\"XY\":3==d?\"XYZ\":4==d?\"XYZM\":void 0}b.g=c;b.b=d}\np.Eb=function(b){this.a&&(b(this.a,this.a,this.b),this.v())};p.rotate=function(b,c){var d=this.a;if(d){for(var e=d.length,f=this.b,g=d?d:[],h=Math.cos(b),k=Math.sin(b),l=c[0],m=c[1],n=0,q=0;q<e;q+=f){var r=d[q]-l,u=d[q+1]-m;g[n++]=l+r*h-u*k;g[n++]=m+r*k+u*h;for(r=q+2;r<q+f;++r)g[n++]=d[r]}d&&g.length!=n&&(g.length=n);this.v()}};function Ec(b,c){var d=0,e,f;e=0;for(f=c.length;e<f;++e)b[d++]=c[e];return d}function Fc(b,c,d,e){var f,g;f=0;for(g=d.length;f<g;++f){var h=d[f],k;for(k=0;k<e;++k)b[c++]=h[k]}return c}function Gc(b,c,d,e,f){f=f?f:[];var g=0,h,k;h=0;for(k=d.length;h<k;++h)c=Fc(b,c,d[h],e),f[g++]=c;f.length=g;return f};function Hc(b,c,d,e,f){f=void 0!==f?f:[];for(var g=0;c<d;c+=e)f[g++]=b.slice(c,c+e);f.length=g;return f}function Ic(b,c,d,e,f){f=void 0!==f?f:[];var g=0,h,k;h=0;for(k=d.length;h<k;++h){var l=d[h];f[g++]=Hc(b,c,l,e,f[g]);c=l}f.length=g;return f};function Jc(b,c,d,e,f,g,h){var k=(d-c)/e;if(3>k){for(;c<d;c+=e)g[h++]=b[c],g[h++]=b[c+1];return h}var l=Array(k);l[0]=1;l[k-1]=1;d=[c,d-e];for(var m=0,n;0<d.length;){var q=d.pop(),r=d.pop(),u=0,w=b[r],y=b[r+1],z=b[q],D=b[q+1];for(n=r+e;n<q;n+=e){var t,v=b[n];t=b[n+1];var B=w,E=y,C=z-B,G=D-E;if(0!==C||0!==G){var J=((v-B)*C+(t-E)*G)/(C*C+G*G);1<J?(B=z,E=D):0<J&&(B+=C*J,E+=G*J)}v=B-v;t=E-t;t=v*v+t*t;t>u&&(m=n,u=t)}u>f&&(l[(m-c)/e]=1,r+e<m&&d.push(r,m),m+e<q&&d.push(m,q))}for(n=0;n<k;++n)l[n]&&(g[h++]=\nb[c+n*e],g[h++]=b[c+n*e+1]);return h}\nfunction Kc(b,c,d,e,f,g,h,k){var l,m;l=0;for(m=d.length;l<m;++l){var n=d[l];a:{var q=b,r=n,u=e,w=f,y=g;if(c!=r){var z=w*Math.round(q[c]/w),D=w*Math.round(q[c+1]/w);c+=u;y[h++]=z;y[h++]=D;var t=void 0,v=void 0;do if(t=w*Math.round(q[c]/w),v=w*Math.round(q[c+1]/w),c+=u,c==r){y[h++]=t;y[h++]=v;break a}while(t==z&&v==D);for(;c<r;){var B,E;B=w*Math.round(q[c]/w);E=w*Math.round(q[c+1]/w);c+=u;if(B!=t||E!=v){var C=t-z,G=v-D,J=B-z,A=E-D;C*A==G*J&&(0>C&&J<C||C==J||0<C&&J>C)&&(0>G&&A<G||G==A||0<G&&A>G)||(y[h++]=\nt,y[h++]=v,z=t,D=v);t=B;v=E}}y[h++]=t;y[h++]=v}}k.push(h);c=n}return h};function Lc(b,c){Bc.call(this);this.W(b,c)}M(Lc,Bc);p=Lc.prototype;p.clone=function(){var b=new Lc(null);U(b,this.g,this.a.slice());b.v();return b};p.ra=function(){return Hc(this.a,0,this.a.length,this.b)};p.Ma=function(b){var c=[];c.length=Jc(this.a,0,this.a.length,this.b,b,c,0);b=new Lc(null);U(b,\"XY\",c);b.v();return b};p.U=function(){return\"LinearRing\"};p.W=function(b,c){b?(Dc(this,c,b,1),this.a||(this.a=[]),this.a.length=Fc(this.a,0,b,this.b)):U(this,\"XY\",null);this.v()};function Mc(b,c){Bc.call(this);this.W(b,c)}M(Mc,Bc);p=Mc.prototype;p.clone=function(){var b=new Mc(null);U(b,this.g,this.a.slice());b.v();return b};p.ra=function(){return this.a?this.a.slice():[]};p.ib=function(b){return Qb(this.a,b)};p.U=function(){return\"Point\"};p.W=function(b,c){b?(Dc(this,c,b,0),this.a||(this.a=[]),this.a.length=Ec(this.a,b)):U(this,\"XY\",null);this.v()};function Nc(b,c,d,e,f,g){for(var h=!1,k=b[d-e],l=b[d-e+1];c<d;c+=e){var m=b[c],n=b[c+1];l>g!=n>g&&f<(m-k)*(g-l)/(n-l)+k&&(h=!h);k=m;l=n}return h};function Oc(b,c,d,e,f,g,h){var k,l,m,n,q,r=f[g+1],u=[],w=d[0];m=b[w-e];q=b[w-e+1];for(k=c;k<w;k+=e){n=b[k];l=b[k+1];if(r<=q&&l<=r||q<=r&&r<=l)m=(r-q)/(l-q)*(n-m)+m,u.push(m);m=n;q=l}w=NaN;q=-Infinity;u.sort(Ha);m=u[0];k=1;for(l=u.length;k<l;++k){n=u[k];var y=Math.abs(n-m);if(y>q){m=(m+n)/2;var z;a:if(0!==d.length&&Nc(b,c,d[0],e,m,r)){var D=z=void 0;z=1;for(D=d.length;z<D;++z)if(Nc(b,d[z-1],d[z],e,m,r)){z=!1;break a}z=!0}else z=!1;z&&(w=m,q=y)}m=n}isNaN(w)&&(w=f[g]);return h?(h.push(w,r),h):[w,r]}\n;function Pc(b,c,d,e){for(var f=0,g=b[d-e],h=b[d-e+1];c<d;c+=e)var k=b[c],l=b[c+1],f=f+(k-g)*(l+h),g=k,h=l;return 0<f}function Qc(b,c,d,e){var f=0;e=void 0!==e?e:!1;var g,h;g=0;for(h=c.length;g<h;++g){var k=c[g],f=Pc(b,f,k,d);if(0===g){if(e&&f||!e&&!f)return!1}else if(e&&!f||!e&&f)return!1;f=k}return!0}\nfunction Rc(b,c,d,e,f){f=void 0!==f?f:!1;var g,h;g=0;for(h=d.length;g<h;++g){var k=d[g],l=Pc(b,c,k,e);if(0===g?f&&l||!f&&!l:f&&!l||!f&&l)for(var l=b,m=k,n=e;c<m-n;){var q;for(q=0;q<n;++q){var r=l[c+q];l[c+q]=l[m-n+q];l[m-n+q]=r}c+=n;m-=n}c=k}return c}function Sc(b,c,d,e){var f=0,g,h;g=0;for(h=c.length;g<h;++g)f=Rc(b,f,c[g],d,e);return f};function Tc(b,c){Bc.call(this);this.c=[];this.B=-1;this.D=null;this.G=-1;this.j=null;this.W(b,c)}M(Tc,Bc);p=Tc.prototype;p.clone=function(){var b=new Tc(null);Uc(b,this.g,this.a.slice(),this.c.slice());return b};p.ra=function(b){var c;void 0!==b?(c=Vc(this).slice(),Rc(c,0,this.c,this.b,b)):c=this.a;return Ic(c,0,this.c,this.b)};p.ab=function(){return this.c};function Wc(b){if(b.B!=b.f){var c=Yb(b.C());b.D=Oc(Vc(b),0,b.c,b.b,c,0);b.B=b.f}return b.D}\nfunction Vc(b){if(b.G!=b.f){var c=b.a;Qc(c,b.c,b.b)?b.j=c:(b.j=c.slice(),b.j.length=Rc(b.j,0,b.c,b.b));b.G=b.f}return b.j}p.Ma=function(b){var c=[],d=[];c.length=Kc(this.a,0,this.c,this.b,Math.sqrt(b),c,0,d);b=new Tc(null);Uc(b,\"XY\",c,d);return b};p.U=function(){return\"Polygon\"};p.W=function(b,c){if(b){Dc(this,c,b,2);this.a||(this.a=[]);var d=Gc(this.a,0,b,this.b,this.c);this.a.length=0===d.length?0:d[d.length-1];this.v()}else Uc(this,\"XY\",null,this.c)};function Uc(b,c,d,e){U(b,c,d);b.c=e;b.v()};function V(b){T.call(this);b=b||{};this.g=[0,0];var c={};c.center=void 0!==b.center?b.center:null;this.h=vc(b.projection);var d,e,f,g=void 0!==b.minZoom?b.minZoom:0;d=void 0!==b.maxZoom?b.maxZoom:28;var h=void 0!==b.zoomFactor?b.zoomFactor:2;if(void 0!==b.resolutions)d=b.resolutions,e=d[0],f=d[d.length-1],d=Pa(d);else{e=vc(b.projection);f=e.C();var k=(f?Math.max(Vb(f),Wb(f)):360*hc.degrees/pc(e))/256/Math.pow(2,0),l=k/Math.pow(2,28);e=b.maxResolution;void 0!==e?g=0:e=k/Math.pow(h,g);f=b.minResolution;\nvoid 0===f&&(f=void 0!==b.maxZoom?void 0!==b.maxResolution?e/Math.pow(h,d):k/Math.pow(h,d):l);d=g+Math.floor(Math.log(e/f)/Math.log(h));f=e/Math.pow(h,d-g);d=Qa(h,e,d-g)}this.b=e;this.i=f;this.c=g;g=void 0!==b.extent?Fa(b.extent):Ga;(void 0!==b.enableRotation?b.enableRotation:1)?(e=b.constrainRotation,e=void 0===e||!0===e?Ua():!1===e?Sa:ea(e)?Ta(e):Sa):e=Ra;this.a=new Va(g,d,e);void 0!==b.resolution?c.resolution=b.resolution:void 0!==b.zoom&&(c.resolution=this.constrainResolution(this.b,b.zoom-this.c));\nc.rotation=void 0!==b.rotation?b.rotation:0;this.l(c)}M(V,T);p=V.prototype;p.constrainResolution=function(b,c,d){return this.a.resolution(b,c||0,d||0)};p.constrainRotation=function(b,c){return this.a.rotation(b,c||0)};p.ia=function(){return this.get(\"center\")};p.jc=function(b){var c=this.ia(),d=this.I(),e=this.Z();return Zb(c,d,e,b)};p.le=function(){return this.h};p.I=function(){return this.get(\"resolution\")};function Xc(b,c){return Math.max(Vb(b)/c[0],Wb(b)/c[1])}p.Z=function(){return this.get(\"rotation\")};\np.N=function(){var b=this.ia(),c=this.h,d=this.I(),e=this.Z();return{center:[Math.round(b[0]/d)*d,Math.round(b[1]/d)*d],projection:void 0!==c?c:null,resolution:d,rotation:e}};p.wd=function(){var b,c=this.I();if(void 0!==c){var d,e=0;do{d=this.constrainResolution(this.b,e);if(d==c){b=e;break}++e}while(d>this.i)}return void 0!==b?this.c+b:b};\np.nd=function(b,c,d){if(!(b instanceof Bc)){var e=b[0],f=b[1],g=b[2],h=b[3],e=[e,f,e,h,g,h,g,f,e,f],f=new Tc(null);Uc(f,\"XY\",e,[e.length]);b=f}e=d||{};d=void 0!==e.padding?e.padding:[0,0,0,0];var h=void 0!==e.constrainResolution?e.constrainResolution:!0,f=void 0!==e.nearest?e.nearest:!1,k;void 0!==e.minResolution?k=e.minResolution:void 0!==e.maxZoom?k=this.constrainResolution(this.b,e.maxZoom-this.c,0):k=0;var l=b.a,g=this.Z(),e=Math.cos(-g),g=Math.sin(-g),m=Infinity,n=Infinity,q=-Infinity,r=-Infinity;\nb=b.b;for(var u=0,w=l.length;u<w;u+=b)var y=l[u]*e-l[u+1]*g,z=l[u]*g+l[u+1]*e,m=Math.min(m,y),n=Math.min(n,z),q=Math.max(q,y),r=Math.max(r,z);c=Xc([m,n,q,r],[c[0]-d[1]-d[3],c[1]-d[0]-d[2]]);c=isNaN(c)?k:Math.max(c,k);h&&(k=this.constrainResolution(c,0,0),!f&&k<c&&(k=this.constrainResolution(k,-1,0)),c=k);Yc(this,c);g=-g;k=(m+q)/2+(d[1]-d[3])/2*c;c=(n+r)/2+(d[0]-d[2])/2*c;this.oa([k*e-c*g,c*e+k*g])};\np.rotate=function(b,c){if(void 0!==c){var d,e=this.ia();void 0!==e&&(d=[e[0]-c[0],e[1]-c[1]],vb(d,b-this.Z()),ub(d,c));this.oa(d)}this.set(\"rotation\",b)};p.oa=function(b){this.set(\"center\",b)};function Zc(b,c){b.g[1]+=c}function Yc(b,c){b.set(\"resolution\",c)}p.Ee=function(b){b=this.constrainResolution(this.b,b-this.c,0);Yc(this,b)};function $c(b){return 1-Math.pow(1-b,3)}function ad(b){return 3*b*b-2*b*b*b}function bd(b){return b};function cd(b){var c=b.source,d=b.start?b.start:Date.now(),e=c[0],f=c[1],g=void 0!==b.duration?b.duration:1E3,h=b.easing?b.easing:ad;return function(b,c){if(c.time<d)return c.animate=!0,c.viewHints[0]+=1,!0;if(c.time<d+g){var m=1-h((c.time-d)/g),n=e-c.viewState.center[0],q=f-c.viewState.center[1];c.animate=!0;c.viewState.center[0]+=m*n;c.viewState.center[1]+=m*q;c.viewHints[0]+=1;return!0}return!1}}\nfunction dd(b){var c=b.rotation?b.rotation:0,d=b.start?b.start:Date.now(),e=void 0!==b.duration?b.duration:1E3,f=b.easing?b.easing:ad,g=b.anchor?b.anchor:null;return function(b,k){if(k.time<d)return k.animate=!0,k.viewHints[0]+=1,!0;if(k.time<d+e){var l=1-f((k.time-d)/e),l=(c-k.viewState.rotation)*l;k.animate=!0;k.viewState.rotation+=l;if(g){var m=k.viewState.center;m[0]-=g[0];m[1]-=g[1];vb(m,l);ub(m,g)}k.viewHints[0]+=1;return!0}return!1}}\nfunction ed(b){var c=b.resolution,d=b.start?b.start:Date.now(),e=void 0!==b.duration?b.duration:1E3,f=b.easing?b.easing:ad;return function(b,h){if(h.time<d)return h.animate=!0,h.viewHints[0]+=1,!0;if(h.time<d+e){var k=1-f((h.time-d)/e),l=c-h.viewState.resolution;h.animate=!0;h.viewState.resolution+=k*l;h.viewHints[0]+=1;return!0}return!1}};function fd(b,c,d,e){this.a=b;this.f=c;this.b=d;this.c=e}function gd(b,c,d){return b.a<=c&&c<=b.f&&b.b<=d&&d<=b.c}function hd(b,c){return b.a==c.a&&b.b==c.b&&b.f==c.f&&b.c==c.c}fd.prototype.ha=function(){return this.f-this.a+1};function id(b,c){return b.a<=c.f&&b.f>=c.a&&b.b<=c.c&&b.c>=c.b};function jd(b){this.b=b.html;this.a=b.tileRanges?b.tileRanges:null};function kd(b,c,d){R.call(this,b,d);this.element=c}M(kd,R);function ld(b){T.call(this);this.a=b?b:[];md(this)}M(ld,T);p=ld.prototype;p.clear=function(){for(;0<this.get(\"length\");)this.pop()};function nd(b,c,d){b.a.forEach(c,d)}p.item=function(b){return this.a[b]};p.pop=function(){return od(this,this.get(\"length\")-1)};p.push=function(b){var c=this.a.length;this.a.splice(c,0,b);md(this);S(this,new kd(\"add\",b,this));return c};\np.remove=function(b){var c=this.a,d,e;d=0;for(e=c.length;d<e;++d)if(c[d]===b)return od(this,d)};function od(b,c){var d=b.a[c];b.a.splice(c,1);md(b);S(b,new kd(\"remove\",d,b));return d}function md(b){b.set(\"length\",b.a.length)};function pd(b,c){Array.prototype.forEach.call(b,c,void 0)}function qd(b){var c=b.length;if(0<c){for(var d=Array(c),e=0;e<c;e++)d[e]=b[e];return d}return[]}function rd(b,c,d){return 2>=arguments.length?Array.prototype.slice.call(b,c):Array.prototype.slice.call(b,c,d)};var sd=/^#(?:[0-9a-f]{3}){1,2}$/i,td=/^(?:rgb)?\\((0|[1-9]\\d{0,2}),\\s?(0|[1-9]\\d{0,2}),\\s?(0|[1-9]\\d{0,2})\\)$/i,ud=/^(?:rgba)?\\((0|[1-9]\\d{0,2}),\\s?(0|[1-9]\\d{0,2}),\\s?(0|[1-9]\\d{0,2}),\\s?(0|1|0\\.\\d{0,10})\\)$/i;function vd(b){if(\"string\"!==typeof b){var c=b[0];c!=(c|0)&&(c=c+.5|0);var d=b[1];d!=(d|0)&&(d=d+.5|0);var e=b[2];e!=(e|0)&&(e=e+.5|0);b=\"rgba(\"+c+\",\"+d+\",\"+e+\",\"+(void 0===b[3]?1:b[3])+\")\"}return b}\nvar xd=function(){var b={},c=0;return function(d){var e;if(b.hasOwnProperty(d))e=b[d];else{if(1024<=c){e=0;for(var f in b)0===(e++&3)&&(delete b[f],--c)}var g,h;sd.exec(d)?(h=3==d.length-1?1:2,e=parseInt(d.substr(1+0*h,h),16),f=parseInt(d.substr(1+1*h,h),16),g=parseInt(d.substr(1+2*h,h),16),1==h&&(e=(e<<4)+e,f=(f<<4)+f,g=(g<<4)+g),e=[e,f,g,1]):(h=ud.exec(d))?(e=Number(h[1]),f=Number(h[2]),g=Number(h[3]),h=Number(h[4]),e=[e,f,g,h],e=wd(e,e)):(h=td.exec(d))?(e=Number(h[1]),f=Number(h[2]),g=Number(h[3]),\ne=[e,f,g,1],e=wd(e,e)):e=void 0;b[d]=e;++c}return e}}();function wd(b,c){var d=c||[];d[0]=Ca(b[0]+.5|0,0,255);d[1]=Ca(b[1]+.5|0,0,255);d[2]=Ca(b[2]+.5|0,0,255);d[3]=Ca(b[3],0,1);return d};function yd(b){return\"string\"===typeof b||b instanceof CanvasPattern||b instanceof CanvasGradient?b:vd(b)};var zd;a:{var Ad=x.navigator;if(Ad){var Bd=Ad.userAgent;if(Bd){zd=Bd;break a}}zd=\"\"}function W(b){return-1!=zd.indexOf(b)};function Cd(b,c){for(var d in b)c.call(void 0,b[d],d,b)}var Dd=\"constructor hasOwnProperty isPrototypeOf propertyIsEnumerable toLocaleString toString valueOf\".split(\" \");function Ed(b,c){for(var d,e,f=1;f<arguments.length;f++){e=arguments[f];for(d in e)b[d]=e[d];for(var g=0;g<Dd.length;g++)d=Dd[g],Object.prototype.hasOwnProperty.call(e,d)&&(b[d]=e[d])}};var Fd=W(\"Opera\")||W(\"OPR\"),Gd=W(\"Trident\")||W(\"MSIE\"),Hd=W(\"Edge\"),Id=W(\"Gecko\")&&!(-1!=zd.toLowerCase().indexOf(\"webkit\")&&!W(\"Edge\"))&&!(W(\"Trident\")||W(\"MSIE\"))&&!W(\"Edge\"),Jd=-1!=zd.toLowerCase().indexOf(\"webkit\")&&!W(\"Edge\");function Kd(){var b=x.document;return b?b.documentMode:void 0}var Ld;\na:{var Md=\"\",Nd=function(){var b=zd;if(Id)return/rv\\:([^\\);]+)(\\)|;)/.exec(b);if(Hd)return/Edge\\/([\\d\\.]+)/.exec(b);if(Gd)return/\\b(?:MSIE|rv)[: ]([^\\);]+)(\\)|;)/.exec(b);if(Jd)return/WebKit\\/(\\S+)/.exec(b);if(Fd)return/(?:Version)[ \\/]?(\\S+)/.exec(b)}();Nd&&(Md=Nd?Nd[1]:\"\");if(Gd){var Od=Kd();if(null!=Od&&Od>parseFloat(Md)){Ld=String(Od);break a}}Ld=Md}var Pd={};\nfunction Qd(b){var c;if(!(c=Pd[b])){c=0;for(var d=sa(String(Ld)).split(\".\"),e=sa(String(b)).split(\".\"),f=Math.max(d.length,e.length),g=0;0==c&&g<f;g++){var h=d[g]||\"\",k=e[g]||\"\",l=RegExp(\"(\\\\d*)(\\\\D*)\",\"g\"),m=RegExp(\"(\\\\d*)(\\\\D*)\",\"g\");do{var n=l.exec(h)||[\"\",\"\",\"\"],q=m.exec(k)||[\"\",\"\",\"\"];if(0==n[0].length&&0==q[0].length)break;c=Ba(0==n[1].length?0:parseInt(n[1],10),0==q[1].length?0:parseInt(q[1],10))||Ba(0==n[2].length,0==q[2].length)||Ba(n[2],q[2])}while(0==c)}c=Pd[b]=0<=c}return c}\nvar Rd=x.document,Sd=Rd&&Gd?Kd()||(\"CSS1Compat\"==Rd.compatMode?parseInt(Ld,10):5):void 0;var Td=!Gd||9<=Number(Sd);!Id&&!Gd||Gd&&9<=Number(Sd)||Id&&Qd(\"1.9.1\");Gd&&Qd(\"9\");function Ud(b,c){this.x=void 0!==b?b:0;this.y=void 0!==c?c:0}p=Ud.prototype;p.clone=function(){return new Ud(this.x,this.y)};p.ceil=function(){this.x=Math.ceil(this.x);this.y=Math.ceil(this.y);return this};p.floor=function(){this.x=Math.floor(this.x);this.y=Math.floor(this.y);return this};p.round=function(){this.x=Math.round(this.x);this.y=Math.round(this.y);return this};p.scale=function(b,c){var d=ea(c)?c:b;this.x*=b;this.y*=d;return this};function Vd(b,c){this.width=b;this.height=c}p=Vd.prototype;p.clone=function(){return new Vd(this.width,this.height)};p.ceil=function(){this.width=Math.ceil(this.width);this.height=Math.ceil(this.height);return this};p.floor=function(){this.width=Math.floor(this.width);this.height=Math.floor(this.height);return this};p.round=function(){this.width=Math.round(this.width);this.height=Math.round(this.height);return this};p.scale=function(b,c){var d=ea(c)?c:b;this.width*=b;this.height*=d;return this};function Wd(b){return b?new Xd(Yd(b)):qa||(qa=new Xd)}function Zd(b){var c=document;return da(b)?c.getElementById(b):b}function $d(b,c){Cd(c,function(c,e){\"style\"==e?b.style.cssText=c:\"class\"==e?b.className=c:\"for\"==e?b.htmlFor=c:ae.hasOwnProperty(e)?b.setAttribute(ae[e],c):0==e.lastIndexOf(\"aria-\",0)||0==e.lastIndexOf(\"data-\",0)?b.setAttribute(e,c):b[e]=c})}\nvar ae={cellpadding:\"cellPadding\",cellspacing:\"cellSpacing\",colspan:\"colSpan\",frameborder:\"frameBorder\",height:\"height\",maxlength:\"maxLength\",nonce:\"nonce\",role:\"role\",rowspan:\"rowSpan\",type:\"type\",usemap:\"useMap\",valign:\"vAlign\",width:\"width\"};\nfunction be(b,c,d){var e=arguments,f=document,g=e[0],h=e[1];if(!Td&&h&&(h.name||h.type)){g=[\"<\",g];h.name&&g.push(' name=\"',ta(h.name),'\"');if(h.type){g.push(' type=\"',ta(h.type),'\"');var k={};Ed(k,h);delete k.type;h=k}g.push(\">\");g=g.join(\"\")}g=f.createElement(g);h&&(da(h)?g.className=h:\"array\"==ba(h)?g.className=h.join(\" \"):$d(g,h));2<e.length&&ce(f,g,e);return g}\nfunction ce(b,c,d){function e(d){d&&c.appendChild(da(d)?b.createTextNode(d):d)}for(var f=2;f<d.length;f++){var g=d[f];!ca(g)||ha(g)&&0<g.nodeType?e(g):pd(de(g)?qd(g):g,e)}}function ee(b){for(var c;c=b.firstChild;)b.removeChild(c)}function fe(b,c,d){b.insertBefore(c,b.childNodes[d]||null)}function ge(b){b&&b.parentNode&&b.parentNode.removeChild(b)}function he(b,c){var d=c.parentNode;d&&d.replaceChild(b,c)}\nfunction ie(b,c){if(!b||!c)return!1;if(b.contains&&1==c.nodeType)return b==c||b.contains(c);if(\"undefined\"!=typeof b.compareDocumentPosition)return b==c||!!(b.compareDocumentPosition(c)&16);for(;c&&b!=c;)c=c.parentNode;return c==b}function Yd(b){return 9==b.nodeType?b:b.ownerDocument||b.document}function de(b){if(b&&\"number\"==typeof b.length){if(ha(b))return\"function\"==typeof b.item||\"string\"==typeof b.item;if(ga(b))return\"function\"==typeof b.item}return!1}\nfunction Xd(b){this.a=b||x.document||document}Xd.prototype.appendChild=function(b,c){b.appendChild(c)};function je(b,c,d,e){this.top=b;this.right=c;this.bottom=d;this.left=e}p=je.prototype;p.ha=function(){return this.right-this.left};p.clone=function(){return new je(this.top,this.right,this.bottom,this.left)};p.ceil=function(){this.top=Math.ceil(this.top);this.right=Math.ceil(this.right);this.bottom=Math.ceil(this.bottom);this.left=Math.ceil(this.left);return this};\np.floor=function(){this.top=Math.floor(this.top);this.right=Math.floor(this.right);this.bottom=Math.floor(this.bottom);this.left=Math.floor(this.left);return this};p.round=function(){this.top=Math.round(this.top);this.right=Math.round(this.right);this.bottom=Math.round(this.bottom);this.left=Math.round(this.left);return this};p.scale=function(b,c){var d=ea(c)?c:b;this.left*=b;this.right*=b;this.top*=d;this.bottom*=d;return this};function ke(b,c){var d=Yd(b);return d.defaultView&&d.defaultView.getComputedStyle&&(d=d.defaultView.getComputedStyle(b,null))?d[c]||d.getPropertyValue(c)||\"\":\"\"}function le(b){var c;try{c=b.getBoundingClientRect()}catch(d){return{left:0,top:0,right:0,bottom:0}}Gd&&b.ownerDocument.body&&(b=b.ownerDocument,c.left-=b.documentElement.clientLeft+b.body.clientLeft,c.top-=b.documentElement.clientTop+b.body.clientTop);return c}\nfunction me(b){var c=ne;if(\"none\"!=(ke(b,\"display\")||(b.currentStyle?b.currentStyle.display:null)||b.style&&b.style.display))return c(b);var d=b.style,e=d.display,f=d.visibility,g=d.position;d.visibility=\"hidden\";d.position=\"absolute\";d.display=\"inline\";b=c(b);d.display=e;d.position=g;d.visibility=f;return b}function ne(b){var c=b.offsetWidth,d=b.offsetHeight,e=Jd&&!c&&!d;return(void 0===c||e)&&b.getBoundingClientRect?(b=le(b),new Vd(b.right-b.left,b.bottom-b.top)):new Vd(c,d)}\nfunction oe(b,c){b.style.display=c?\"\":\"none\"}function pe(b,c,d,e){if(/^\\d+px?$/.test(c))return parseInt(c,10);var f=b.style[d],g=b.runtimeStyle[d];b.runtimeStyle[d]=b.currentStyle[d];b.style[d]=c;c=b.style[e];b.style[d]=f;b.runtimeStyle[d]=g;return c}function qe(b,c){var d=b.currentStyle?b.currentStyle[c]:null;return d?pe(b,d,\"left\",\"pixelLeft\"):0}var re={thin:2,medium:4,thick:6};\nfunction se(b,c){if(\"none\"==(b.currentStyle?b.currentStyle[c+\"Style\"]:null))return 0;var d=b.currentStyle?b.currentStyle[c+\"Width\"]:null;return d in re?re[d]:pe(b,d,\"left\",\"pixelLeft\")};function te(b,c,d){R.call(this,b);this.map=c;this.frameState=void 0!==d?d:null}M(te,R);function ue(b){T.call(this);this.element=b.element?b.element:null;this.c=this.B=null;this.h=[];this.render=b.render?b.render:pa;b.target&&(this.B=Zd(b.target))}M(ue,T);ue.prototype.J=function(){ge(this.element);ue.X.J.call(this)};ue.prototype.setMap=function(b){this.c&&ge(this.element);for(var c=0,d=this.h.length;c<d;++c)N(this.h[c]);this.h.length=0;if(this.c=b)(this.B?this.B:b.j).appendChild(this.element),this.render!==pa&&this.h.push(Q(b,\"postrender\",this.render,this)),b.render()};function ve(){this.f=0;this.c={};this.b=this.a=null}p=ve.prototype;p.clear=function(){this.f=0;this.c={};this.b=this.a=null};function we(b,c){return b.c.hasOwnProperty(c)}function xe(b,c){for(var d=b.a;d;)c.call(void 0,d.Ia,d.Rb,b),d=d.ma}p.get=function(b){b=this.c[b];if(b===this.b)return b.Ia;b===this.a?(this.a=this.a.ma,this.a.Ra=null):(b.ma.Ra=b.Ra,b.Ra.ma=b.ma);b.ma=null;b.Ra=this.b;this.b=this.b.ma=b;return b.Ia};\np.pop=function(){var b=this.a;delete this.c[b.Rb];b.ma&&(b.ma.Ra=null);this.a=b.ma;this.a||(this.b=null);--this.f;return b.Ia};p.replace=function(b,c){this.get(b);this.c[b].Ia=c};p.set=function(b,c){var d={Rb:b,ma:null,Ra:this.b,Ia:c};this.b?this.b.ma=d:this.a=d;this.b=d;this.c[b]=d;++this.f};function ye(b){ve.call(this);this.g=void 0!==b?b:2048}M(ye,ve);function ze(b){return b.f>b.g}function Ae(b,c){for(var d,e;ze(b);){d=b.a.Ia;e=d.L[0].toString();var f;if(f=e in c)d=d.L,f=gd(c[e],d[1],d[2]);if(f)break;else jb(b.pop())}};function Be(b,c){mb.call(this);this.L=b;this.state=c;this.a=null;this.key=\"\"}M(Be,mb);function Ce(b){S(b,\"change\")}Be.prototype.getKey=function(){return I(this).toString()};Be.prototype.N=function(){return this.state};function De(b){T.call(this);this.c=lc(b.projection);this.i=Ee(b.attributions);this.w=b.logo;this.B=void 0!==b.state?b.state:\"ready\";this.j=void 0!==b.wrapX?b.wrapX:!1}M(De,T);function Ee(b){if(\"string\"===typeof b)return[new jd({html:b})];if(b instanceof jd)return[b];if(Array.isArray(b)){for(var c=b.length,d=Array(c),e=0;e<c;e++){var f=b[e];d[e]=\"string\"===typeof f?new jd({html:f}):f}return d}return null}De.prototype.N=function(){return this.B};De.prototype.wa=function(){this.v()};function Fe(b){this.minZoom=void 0!==b.minZoom?b.minZoom:0;this.b=b.resolutions;this.maxZoom=this.b.length-1;this.f=void 0!==b.origin?b.origin:null;this.g=null;void 0!==b.origins&&(this.g=b.origins);var c=b.extent;void 0===c||this.f||this.g||(this.f=bc(c));this.h=null;void 0!==b.tileSizes&&(this.h=b.tileSizes);this.l=void 0!==b.tileSize?b.tileSize:this.h?null:256;this.i=void 0!==c?c:null;this.a=null;void 0!==b.sizes?this.a=b.sizes.map(function(b){return new fd(Math.min(0,b[0]),Math.max(b[0]-1,-1),\nMath.min(0,b[1]),Math.max(b[1]-1,-1))},this):c&&Ge(this,c);this.c=[0,0]}var He=[0,0,0];function Ie(b,c,d,e,f){f=Je(b,c,f);for(c=c[0]-1;c>=b.minZoom;){if(d.call(null,c,Ke(b,f,c,e)))return!0;--c}return!1}Fe.prototype.C=function(){return this.i};Fe.prototype.ka=function(b){return this.f?this.f:this.g[b]};Fe.prototype.I=function(b){return this.b[b]};Fe.prototype.Nb=function(){return this.b};function Le(b,c,d,e){return c[0]<b.maxZoom?(e=Je(b,c,e),Ke(b,e,c[0]+1,d)):null}\nfunction Me(b,c,d,e){Ne(b,c[0],c[1],d,!1,He);var f=He[1],g=He[2];Ne(b,c[2],c[3],d,!0,He);b=He[1];c=He[2];void 0!==e?(e.a=f,e.f=b,e.b=g,e.c=c):e=new fd(f,b,g,c);return e}function Ke(b,c,d,e){d=b.I(d);return Me(b,c,d,e)}function Oe(b,c){var d=b.ka(c[0]),e=b.I(c[0]),f=tb(Pe(b,c[0]),b.c);return[d[0]+(c[1]+.5)*f[0]*e,d[1]+(c[2]+.5)*f[1]*e]}function Je(b,c,d){var e=b.ka(c[0]),f=b.I(c[0]);b=tb(Pe(b,c[0]),b.c);var g=e[0]+c[1]*b[0]*f;c=e[1]+c[2]*b[1]*f;return Ob(g,c,g+b[0]*f,c+b[1]*f,d)}\nfunction Ne(b,c,d,e,f,g){var h=Qe(b,e),k=e/b.I(h),l=b.ka(h);b=tb(Pe(b,h),b.c);c=k*Math.floor((c-l[0])/e+(f?.5:0))/b[0];d=k*Math.floor((d-l[1])/e+(f?0:.5))/b[1];f?(c=Math.ceil(c)-1,d=Math.ceil(d)-1):(c=Math.floor(c),d=Math.floor(d));f=c;void 0!==g?(g[0]=h,g[1]=f,g[2]=d):g=[h,f,d];return g}function Re(b,c,d){d=b.I(d);return Ne(b,c[0],c[1],d,!1,void 0)}function Pe(b,c){return b.l?b.l:b.h[c]}function Qe(b,c){var d=Ia(b.b,c,0);return Ca(d,b.minZoom,b.maxZoom)}\nfunction Ge(b,c){for(var d=b.b.length,e=Array(d),f=b.minZoom;f<d;++f)e[f]=Ke(b,c,f);b.a=e}function Se(b){var c=b.c;if(!c){var c=Te(b),d=Ue(c,void 0,void 0),c=new Fe({extent:c,origin:bc(c),resolutions:d,tileSize:void 0});b.c=c}return c}function Ue(b,c,d){c=void 0!==c?c:42;var e=Wb(b);b=Vb(b);d=tb(void 0!==d?d:256);d=Math.max(b/d[0],e/d[1]);c+=1;e=Array(c);for(b=0;b<c;++b)e[b]=d/Math.pow(2,b);return e}function Te(b){b=lc(b);var c=b.C();c||(b=180*hc.degrees/pc(b),c=Ob(-b,-b,b,b));return c};function Ve(b){De.call(this,{attributions:b.attributions,extent:b.extent,logo:b.logo,projection:b.projection,state:b.state,wrapX:b.wrapX});this.G=void 0!==b.opaque?b.opaque:!1;this.Y=void 0!==b.tilePixelRatio?b.tilePixelRatio:1;this.tileGrid=void 0!==b.tileGrid?b.tileGrid:null;this.a=new ye(b.cacheSize);this.h=[0,0]}M(Ve,De);p=Ve.prototype;p.Qc=function(){return ze(this.a)};p.Rc=function(b,c){var d=this.bb(b);d&&Ae(d,c)};\nfunction We(b,c,d,e,f){c=b.bb(c);if(!c)return!1;for(var g=!0,h,k,l=e.a;l<=e.f;++l)for(var m=e.b;m<=e.c;++m)h=b.lb(d,l,m),k=!1,we(c,h)&&(h=c.get(h),(k=2===h.N())&&(k=!1!==f(h))),k||(g=!1);return g}p.kb=function(){return 0};p.lb=function(b,c,d){return b+\"/\"+c+\"/\"+d};p.Mb=function(){return this.G};p.Nb=function(){return this.tileGrid.Nb()};p.la=function(b){return this.tileGrid?this.tileGrid:Se(b)};p.bb=function(b){var c=this.c;return c&&!wc(c,b)?null:this.a};p.mb=function(){return this.Y};\nfunction Xe(b,c,d,e){e=b.la(e);d=b.mb(d);c=tb(Pe(e,c),b.h);return 1==d?c:sb(c,d,b.h)}function Ye(b,c,d){var e=void 0!==d?d:b.c;d=b.la(e);if(b.j&&e.f){var f=c;c=f[0];b=Oe(d,f);var e=Te(e),g=b[0],h=b[1];e[0]<=g&&g<=e[2]&&e[1]<=h&&h<=e[3]?c=f:(f=Vb(e),b[0]+=f*Math.ceil((e[0]-b[0])/f),c=Re(d,b,c))}e=c[0];b=c[1];f=c[2];d=d.minZoom>e||e>d.maxZoom?!1:(d=(g=d.C())?Ke(d,g,e):d.a?d.a[e]:null)?gd(d,b,f):!0;return d?c:null}p.wa=function(){this.a.clear();this.v()};p.Yc=pa;\nfunction Ze(b,c){R.call(this,b);this.tile=c}M(Ze,R);function $e(b){b=b?b:{};this.s=document.createElement(\"UL\");this.j=document.createElement(\"LI\");this.s.appendChild(this.j);oe(this.j,!1);this.g=void 0!==b.collapsed?b.collapsed:!0;this.i=void 0!==b.collapsible?b.collapsible:!0;this.i||(this.g=!1);var c=void 0!==b.className?b.className:\"ol-attribution\",d=void 0!==b.tipLabel?b.tipLabel:\"Attributions\",e=void 0!==b.collapseLabel?b.collapseLabel:\"\\u00bb\";this.u=\"string\"===typeof e?be(\"SPAN\",{},e):e;e=void 0!==b.label?b.label:\"i\";this.w=\"string\"===typeof e?\nbe(\"SPAN\",{},e):e;d=be(\"BUTTON\",{type:\"button\",title:d},this.i&&!this.g?this.u:this.w);Q(d,\"click\",this.G,this);c=be(\"DIV\",c+\" ol-unselectable ol-control\"+(this.g&&this.i?\" ol-collapsed\":\"\")+(this.i?\"\":\" ol-uncollapsible\"),this.s,d);ue.call(this,{element:c,render:b.render?b.render:af,target:b.target});this.o=!0;this.b={};this.a={};this.D={}}M($e,ue);\nfunction af(b){if(b=b.frameState){var c,d,e,f,g,h,k,l,m,n,q,r=b.layerStatesArray,u=Wa({},b.attributions),w={},y=b.viewState.projection;d=0;for(c=r.length;d<c;d++)if(h=r[d].layer.V())if(n=I(h).toString(),m=h.i)for(e=0,f=m.length;e<f;e++)if(k=m[e],l=I(k).toString(),!(l in u)){if(g=b.usedTiles[n]){var z=h.la(y);a:{q=k;var D=y;if(q.a){var t=void 0,v=void 0,B=void 0,E=void 0;for(E in g)if(E in q.a)for(var B=g[E],C,t=0,v=q.a[E].length;t<v;++t){C=q.a[E][t];if(id(C,B)){q=!0;break a}var G=Ke(z,Te(D),parseInt(E,\n10)),J=G.ha();if(B.a<G.a||B.f>G.f)if(id(C,new fd(Ea(B.a,J),Ea(B.f,J),B.b,B.c))||B.ha()>J&&id(C,G)){q=!0;break a}}q=!1}else q=!0}}else q=!1;q?(l in w&&delete w[l],u[l]=k):w[l]=k}c=[u,w];d=c[0];c=c[1];for(var A in this.b)A in d?(this.a[A]||(oe(this.b[A],!0),this.a[A]=!0),delete d[A]):A in c?(this.a[A]&&(oe(this.b[A],!1),delete this.a[A]),delete c[A]):(ge(this.b[A]),delete this.b[A],delete this.a[A]);for(A in d)e=document.createElement(\"LI\"),e.innerHTML=d[A].b,this.s.appendChild(e),this.b[A]=e,this.a[A]=\n!0;for(A in c)e=document.createElement(\"LI\"),e.innerHTML=c[A].b,oe(e,!1),this.s.appendChild(e),this.b[A]=e;A=!$a(this.a)||!$a(b.logos);this.o!=A&&(oe(this.element,A),this.o=A);A&&$a(this.a)?this.element.classList.add(\"ol-logo-only\"):this.element.classList.remove(\"ol-logo-only\");var H;b=b.logos;A=this.D;for(H in A)H in b||(ge(A[H]),delete A[H]);for(var O in b)O in A||(H=new Image,H.src=O,d=b[O],\"\"===d?d=H:(d=be(\"A\",{href:d}),d.appendChild(H)),this.j.appendChild(d),A[O]=d);oe(this.j,!$a(b))}else this.o&&\n(oe(this.element,!1),this.o=!1)}$e.prototype.G=function(b){b.preventDefault();this.element.classList.toggle(\"ol-collapsed\");this.g?he(this.u,this.w):he(this.w,this.u);this.g=!this.g};function bf(b){b=b?b:{};var c=void 0!==b.className?b.className:\"ol-rotate\",d=void 0!==b.label?b.label:\"\\u21e7\";this.a=null;\"string\"===typeof d?this.a=be(\"SPAN\",\"ol-compass\",d):(this.a=d,this.a.classList.add(this.a,\"ol-compass\"));d=be(\"BUTTON\",{\"class\":c+\"-reset\",type:\"button\",title:b.tipLabel?b.tipLabel:\"Reset rotation\"},this.a);Q(d,\"click\",bf.prototype.o,this);c=be(\"DIV\",c+\" ol-unselectable ol-control\",d);d=b.render?b.render:cf;this.g=b.resetNorth?b.resetNorth:void 0;ue.call(this,{element:c,render:d,\ntarget:b.target});this.i=void 0!==b.duration?b.duration:250;this.b=void 0!==b.autoHide?b.autoHide:!0;this.j=void 0;this.b&&this.element.classList.add(\"ol-hidden\")}M(bf,ue);bf.prototype.o=function(b){b.preventDefault();if(void 0!==this.g)this.g();else{b=this.c;var c=b.O();if(c){var d=c.Z();void 0!==d&&(0<this.i&&(d%=2*Math.PI,d<-Math.PI&&(d+=2*Math.PI),d>Math.PI&&(d-=2*Math.PI),b.fa(dd({rotation:d,duration:this.i,easing:$c}))),c.set(\"rotation\",0))}}};\nfunction cf(b){if(b=b.frameState){b=b.viewState.rotation;if(b!=this.j){var c=\"rotate(\"+b+\"rad)\";if(this.b){var d=this.element.classList.contains(\"ol-hidden\");d||0!==b?d&&0!==b&&this.element.classList.remove(\"ol-hidden\"):this.element.classList.add(\"ol-hidden\")}this.a.style.msTransform=c;this.a.style.webkitTransform=c;this.a.style.transform=c}this.j=b}};function df(b){b=b?b:{};var c=void 0!==b.className?b.className:\"ol-zoom\",d=void 0!==b.delta?b.delta:1,e=void 0!==b.zoomOutLabel?b.zoomOutLabel:\"\\u2212\",f=void 0!==b.zoomOutTipLabel?b.zoomOutTipLabel:\"Zoom out\",g=be(\"BUTTON\",{\"class\":c+\"-in\",type:\"button\",title:void 0!==b.zoomInTipLabel?b.zoomInTipLabel:\"Zoom in\"},void 0!==b.zoomInLabel?b.zoomInLabel:\"+\");Q(g,\"click\",na(df.prototype.b,d),this);e=be(\"BUTTON\",{\"class\":c+\"-out\",type:\"button\",title:f},e);Q(e,\"click\",na(df.prototype.b,-d),this);c=be(\"DIV\",\nc+\" ol-unselectable ol-control\",g,e);ue.call(this,{element:c,target:b.target});this.a=void 0!==b.duration?b.duration:250}M(df,ue);df.prototype.b=function(b,c){c.preventDefault();var d=this.c,e=d.O();if(e){var f=e.I();f&&(0<this.a&&d.fa(ed({resolution:f,duration:this.a,easing:$c})),d=e.constrainResolution(f,b),Yc(e,d))}};function ef(b){b=b?b:{};var c=new ld;(void 0!==b.zoom?b.zoom:1)&&c.push(new df(b.zoomOptions));(void 0!==b.rotate?b.rotate:1)&&c.push(new bf(b.rotateOptions));(void 0!==b.attribution?b.attribution:1)&&c.push(new $e(b.attributionOptions));return c};var ff=Jd?\"webkitfullscreenchange\":Id?\"mozfullscreenchange\":Gd?\"MSFullscreenChange\":\"fullscreenchange\";function gf(){var b=Wd().a,c=b.body;return!!(c.webkitRequestFullscreen||c.mozRequestFullScreen&&b.mozFullScreenEnabled||c.msRequestFullscreen&&b.msFullscreenEnabled||c.requestFullscreen&&b.fullscreenEnabled)}\nfunction hf(b){b.webkitRequestFullscreen?b.webkitRequestFullscreen():b.mozRequestFullScreen?b.mozRequestFullScreen():b.msRequestFullscreen?b.msRequestFullscreen():b.requestFullscreen&&b.requestFullscreen()}function jf(){var b=Wd().a;return!!(b.webkitIsFullScreen||b.mozFullScreen||b.msFullscreenElement||b.fullscreenElement)};function kf(b){b=b?b:{};this.a=void 0!==b.className?b.className:\"ol-full-screen\";var c=void 0!==b.label?b.label:\"\\u2922\";this.b=\"string\"===typeof c?document.createTextNode(c):c;c=void 0!==b.labelActive?b.labelActive:\"\\u00d7\";this.g=\"string\"===typeof c?document.createTextNode(c):c;c=b.tipLabel?b.tipLabel:\"Toggle full-screen\";c=be(\"BUTTON\",{\"class\":this.a+\"-\"+jf(),type:\"button\",title:c},this.b);Q(c,\"click\",this.s,this);var d=this.a+\" ol-unselectable ol-control \"+(gf()?\"\":\"ol-unsupported\"),c=be(\"DIV\",\nd,c);ue.call(this,{element:c,target:b.target});this.o=void 0!==b.keys?b.keys:!1;this.i=b.source}M(kf,ue);\nkf.prototype.s=function(b){b.preventDefault();gf()&&(b=this.c)&&(jf()?(b=Wd().a,b.webkitCancelFullScreen?b.webkitCancelFullScreen():b.mozCancelFullScreen?b.mozCancelFullScreen():b.msExitFullscreen?b.msExitFullscreen():b.exitFullscreen&&b.exitFullscreen()):(b=this.i?Zd(this.i):b.Na(),this.o?b.mozRequestFullScreenWithKeys?b.mozRequestFullScreenWithKeys():b.webkitRequestFullscreen?b.webkitRequestFullscreen():hf(b):hf(b)))};\nkf.prototype.j=function(){var b=this.element.firstElementChild,c=this.c;jf()?(b.className=this.a+\"-true\",he(this.g,this.b)):(b.className=this.a+\"-false\",he(this.b,this.g));c&&c.vb()};kf.prototype.setMap=function(b){kf.X.setMap.call(this,b);b&&this.h.push(Q(x.document,ff,this.j,this))};var lf;\nfunction mf(){var b=x.MessageChannel;\"undefined\"===typeof b&&\"undefined\"!==typeof window&&window.postMessage&&window.addEventListener&&!W(\"Presto\")&&(b=function(){var b=document.createElement(\"IFRAME\");b.style.display=\"none\";b.src=\"\";document.documentElement.appendChild(b);var c=b.contentWindow,b=c.document;b.open();b.write(\"\");b.close();var d=\"callImmediate\"+Math.random(),e=\"file:\"==c.location.protocol?\"*\":c.location.protocol+\"//\"+c.location.host,b=ma(function(b){if((\"*\"==e||b.origin==e)&&b.data==\nd)this.port1.onmessage()},this);c.addEventListener(\"message\",b,!1);this.port1={};this.port2={postMessage:function(){c.postMessage(d,e)}}});if(\"undefined\"!==typeof b&&!W(\"Trident\")&&!W(\"MSIE\")){var c=new b,d={},e=d;c.port1.onmessage=function(){if(void 0!==d.next){d=d.next;var b=d.lc;d.lc=null;b()}};return function(b){e.next={lc:b};e=e.next;c.port2.postMessage(0)}}return\"undefined\"!==typeof document&&\"onreadystatechange\"in document.createElement(\"SCRIPT\")?function(b){var c=document.createElement(\"SCRIPT\");\nc.onreadystatechange=function(){c.onreadystatechange=null;c.parentNode.removeChild(c);c=null;b();b=null};document.documentElement.appendChild(c)}:function(b){x.setTimeout(b,0)}};function nf(b,c,d){R.call(this,b);this.a=c;b=d?d:{};this.buttons=of(b);this.pressure=pf(b,this.buttons);this.bubbles=\"bubbles\"in b?b.bubbles:!1;this.cancelable=\"cancelable\"in b?b.cancelable:!1;this.view=\"view\"in b?b.view:null;this.detail=\"detail\"in b?b.detail:null;this.screenX=\"screenX\"in b?b.screenX:0;this.screenY=\"screenY\"in b?b.screenY:0;this.clientX=\"clientX\"in b?b.clientX:0;this.clientY=\"clientY\"in b?b.clientY:0;this.button=\"button\"in b?b.button:0;this.relatedTarget=\"relatedTarget\"in b?b.relatedTarget:\nnull;this.pointerId=\"pointerId\"in b?b.pointerId:0;this.width=\"width\"in b?b.width:0;this.height=\"height\"in b?b.height:0;this.pointerType=\"pointerType\"in b?b.pointerType:\"\";this.isPrimary=\"isPrimary\"in b?b.isPrimary:!1;c.preventDefault&&(this.preventDefault=function(){c.preventDefault()})}M(nf,R);function of(b){if(b.buttons||qf)b=b.buttons;else switch(b.which){case 1:b=1;break;case 2:b=4;break;case 3:b=2;break;default:b=0}return b}function pf(b,c){var d=0;b.pressure?d=b.pressure:d=c?.5:0;return d}\nvar qf=!1;try{qf=1===(new MouseEvent(\"click\",{buttons:1})).buttons}catch(b){};function rf(b,c){var d=document.createElement(\"CANVAS\");b&&(d.width=b);c&&(d.height=c);return d.getContext(\"2d\")}\nvar sf=function(){var b;return function(){if(void 0===b){var c=document.createElement(\"P\"),d,e={webkitTransform:\"-webkit-transform\",OTransform:\"-o-transform\",msTransform:\"-ms-transform\",MozTransform:\"-moz-transform\",transform:\"transform\"};document.body.appendChild(c);for(var f in e)f in c.style&&(c.style[f]=\"translate(1px,1px)\",d=x.getComputedStyle(c).getPropertyValue(e[f]));document.body.removeChild(c);b=d&&\"none\"!==d}return b}}(),tf=function(){var b;return function(){if(void 0===b){var c=document.createElement(\"P\"),\nd,e={webkitTransform:\"-webkit-transform\",OTransform:\"-o-transform\",msTransform:\"-ms-transform\",MozTransform:\"-moz-transform\",transform:\"transform\"};document.body.appendChild(c);for(var f in e)f in c.style&&(c.style[f]=\"translate3d(1px,1px,1px)\",d=x.getComputedStyle(c).getPropertyValue(e[f]));document.body.removeChild(c);b=d&&\"none\"!==d}return b}}();\nfunction uf(b,c){var d=b.style;d.WebkitTransform=c;d.MozTransform=c;d.a=c;d.msTransform=c;d.transform=c;Gd&&Qd(\"9.0\")&&(b.style.transformOrigin=\"0 0\")}function vf(b,c){var d;if(tf()){var e=Array(16);for(d=0;16>d;++d)e[d]=c[d].toFixed(6);uf(b,\"matrix3d(\"+e.join(\",\")+\")\")}else if(sf()){var e=[c[0],c[1],c[4],c[5],c[12],c[13]],f=Array(6);for(d=0;6>d;++d)f[d]=e[d].toFixed(6);uf(b,\"matrix(\"+f.join(\",\")+\")\")}else b.style.left=Math.round(c[12])+\"px\",b.style.top=Math.round(c[13])+\"px\"};var wf=[\"experimental-webgl\",\"webgl\",\"webkit-3d\",\"moz-webgl\"];function xf(b,c){var d,e,f=wf.length;for(e=0;e<f;++e)try{if(d=b.getContext(wf[e],c))return d}catch(g){}return null};var yf,zf=\"undefined\"!==typeof navigator?navigator.userAgent.toLowerCase():\"\",Af=-1!==zf.indexOf(\"firefox\"),Bf=-1!==zf.indexOf(\"safari\")&&-1===zf.indexOf(\"chrom\"),Cf=-1!==zf.indexOf(\"macintosh\"),Df=x.devicePixelRatio||1,Ef=!1,Ff=function(){if(!(\"HTMLCanvasElement\"in x))return!1;try{var b=rf();return b?(void 0!==b.setLineDash&&(Ef=!0),!0):!1}catch(c){return!1}}(),Gf=\"ontouchstart\"in x,Hf=\"PointerEvent\"in x,If=!!x.navigator.msPointerEnabled,Jf=!1,Kf=[];\nif(\"WebGLRenderingContext\"in x)try{var Lf=xf(document.createElement(\"CANVAS\"),{failIfMajorPerformanceCaveat:!0});Lf&&(Jf=!0,Kf=Lf.getSupportedExtensions())}catch(b){}yf=Jf;oa=Kf;function Mf(b,c){this.a=b;this.g=c};function Nf(b){Mf.call(this,b,{mousedown:this.Vd,mousemove:this.Wd,mouseup:this.Zd,mouseover:this.Yd,mouseout:this.Xd});this.b=b.b;this.f=[]}M(Nf,Mf);function Of(b,c){for(var d=b.f,e=c.clientX,f=c.clientY,g=0,h=d.length,k;g<h&&(k=d[g]);g++){var l=Math.abs(f-k[1]);if(25>=Math.abs(e-k[0])&&25>=l)return!0}return!1}function Pf(b){var c=Qf(b,b),d=c.preventDefault;c.preventDefault=function(){b.preventDefault();d()};c.pointerId=1;c.isPrimary=!0;c.pointerType=\"mouse\";return c}p=Nf.prototype;\np.Vd=function(b){if(!Of(this,b)){if((1).toString()in this.b){var c=Pf(b);Rf(this.a,Sf,c,b);delete this.b[(1).toString()]}c=Pf(b);this.b[(1).toString()]=b;Rf(this.a,Tf,c,b)}};p.Wd=function(b){if(!Of(this,b)){var c=Pf(b);Rf(this.a,Uf,c,b)}};p.Zd=function(b){if(!Of(this,b)){var c=this.b[(1).toString()];c&&c.button===b.button&&(c=Pf(b),Rf(this.a,Vf,c,b),delete this.b[(1).toString()])}};p.Yd=function(b){if(!Of(this,b)){var c=Pf(b);Wf(this.a,c,b)}};\np.Xd=function(b){if(!Of(this,b)){var c=Pf(b);Xf(this.a,c,b)}};function Yf(b){Mf.call(this,b,{MSPointerDown:this.de,MSPointerMove:this.ee,MSPointerUp:this.he,MSPointerOut:this.fe,MSPointerOver:this.ge,MSPointerCancel:this.ce,MSGotPointerCapture:this.ae,MSLostPointerCapture:this.be});this.b=b.b;this.f=[\"\",\"unavailable\",\"touch\",\"pen\",\"mouse\"]}M(Yf,Mf);function Zf(b,c){var d=c;ea(c.pointerType)&&(d=Qf(c,c),d.pointerType=b.f[c.pointerType]);return d}p=Yf.prototype;p.de=function(b){this.b[b.pointerId.toString()]=b;var c=Zf(this,b);Rf(this.a,Tf,c,b)};\np.ee=function(b){var c=Zf(this,b);Rf(this.a,Uf,c,b)};p.he=function(b){var c=Zf(this,b);Rf(this.a,Vf,c,b);delete this.b[b.pointerId.toString()]};p.fe=function(b){var c=Zf(this,b);Xf(this.a,c,b)};p.ge=function(b){var c=Zf(this,b);Wf(this.a,c,b)};p.ce=function(b){var c=Zf(this,b);Rf(this.a,Sf,c,b);delete this.b[b.pointerId.toString()]};p.be=function(b){S(this.a,new nf(\"lostpointercapture\",b,b))};p.ae=function(b){S(this.a,new nf(\"gotpointercapture\",b,b))};function $f(b){Mf.call(this,b,{pointerdown:this.se,pointermove:this.te,pointerup:this.we,pointerout:this.ue,pointerover:this.ve,pointercancel:this.re,gotpointercapture:this.xd,lostpointercapture:this.Ud})}M($f,Mf);p=$f.prototype;p.se=function(b){ag(this.a,b)};p.te=function(b){ag(this.a,b)};p.we=function(b){ag(this.a,b)};p.ue=function(b){ag(this.a,b)};p.ve=function(b){ag(this.a,b)};p.re=function(b){ag(this.a,b)};p.Ud=function(b){ag(this.a,b)};p.xd=function(b){ag(this.a,b)};function bg(b,c){Mf.call(this,b,{touchstart:this.Ie,touchmove:this.He,touchend:this.Ge,touchcancel:this.Fe});this.b=b.b;this.l=c;this.f=void 0;this.h=0;this.c=void 0}M(bg,Mf);p=bg.prototype;p.Vc=function(){this.h=0;this.c=void 0};\nfunction cg(b,c,d){c=Qf(c,d);c.pointerId=d.identifier+2;c.bubbles=!0;c.cancelable=!0;c.detail=b.h;c.button=0;c.buttons=1;c.width=d.webkitRadiusX||d.radiusX||0;c.height=d.webkitRadiusY||d.radiusY||0;c.pressure=d.webkitForce||d.force||.5;c.isPrimary=b.f===d.identifier;c.pointerType=\"touch\";c.clientX=d.clientX;c.clientY=d.clientY;c.screenX=d.screenX;c.screenY=d.screenY;return c}\nfunction dg(b,c,d){function e(){c.preventDefault()}var f=Array.prototype.slice.call(c.changedTouches),g=f.length,h,k;for(h=0;h<g;++h)k=cg(b,c,f[h]),k.preventDefault=e,d.call(b,c,k)}\np.Ie=function(b){var c=b.touches,d=Object.keys(this.b),e=d.length;if(e>=c.length){var f=[],g,h,k;for(g=0;g<e;++g){h=d[g];k=this.b[h];var l;if(!(l=1==h))a:{l=c.length;for(var m=void 0,n=0;n<l;n++)if(m=c[n],m.identifier===h-2){l=!0;break a}l=!1}l||f.push(k.out)}for(g=0;g<f.length;++g)this.Fb(b,f[g])}c=b.changedTouches[0];d=Object.keys(this.b).length;if(0===d||1===d&&(1).toString()in this.b)this.f=c.identifier,void 0!==this.c&&x.clearTimeout(this.c);eg(this,b);this.h++;dg(this,b,this.qe)};\np.qe=function(b,c){this.b[c.pointerId]={target:c.target,out:c,Sc:c.target};var d=this.a;c.bubbles=!0;Rf(d,fg,c,b);d=this.a;c.bubbles=!1;Rf(d,gg,c,b);Rf(this.a,Tf,c,b)};p.He=function(b){b.preventDefault();dg(this,b,this.$d)};p.$d=function(b,c){var d=this.b[c.pointerId];if(d){var e=d.out,f=d.Sc;Rf(this.a,Uf,c,b);e&&f!==c.target&&(e.relatedTarget=c.target,c.relatedTarget=f,e.target=f,c.target?(Xf(this.a,e,b),Wf(this.a,c,b)):(c.target=f,c.relatedTarget=null,this.Fb(b,c)));d.out=c;d.Sc=c.target}};\np.Ge=function(b){eg(this,b);dg(this,b,this.Je)};p.Je=function(b,c){Rf(this.a,Vf,c,b);this.a.out(c,b);var d=this.a;c.bubbles=!1;Rf(d,hg,c,b);delete this.b[c.pointerId];c.isPrimary&&(this.f=void 0,this.c=x.setTimeout(this.Vc.bind(this),200))};p.Fe=function(b){dg(this,b,this.Fb)};p.Fb=function(b,c){Rf(this.a,Sf,c,b);this.a.out(c,b);var d=this.a;c.bubbles=!1;Rf(d,hg,c,b);delete this.b[c.pointerId];c.isPrimary&&(this.f=void 0,this.c=x.setTimeout(this.Vc.bind(this),200))};\nfunction eg(b,c){var d=b.l.f,e=c.changedTouches[0];if(b.f===e.identifier){var f=[e.clientX,e.clientY];d.push(f);x.setTimeout(function(){La(d,f)},2500)}};function ig(b){mb.call(this);this.g=b;this.b={};this.c={};this.a=[];Hf?jg(this,new $f(this)):If?jg(this,new Yf(this)):(b=new Nf(this),jg(this,b),Gf&&jg(this,new bg(this,b)));b=this.a.length;for(var c,d=0;d<b;d++)c=this.a[d],kg(this,Object.keys(c.g))}M(ig,mb);function jg(b,c){var d=Object.keys(c.g);d&&(d.forEach(function(b){var d=c.g[b];d&&(this.c[b]=d.bind(c))},b),b.a.push(c))}ig.prototype.f=function(b){var c=this.c[b.type];c&&c(b)};\nfunction kg(b,c){c.forEach(function(b){Q(this.g,b,this.f,this)},b)}function lg(b,c){c.forEach(function(b){gb(this.g,b,this.f,this)},b)}function Qf(b,c){for(var d={},e,f=0,g=mg.length;f<g;f++)e=mg[f][0],d[e]=b[e]||c[e]||mg[f][1];return d}ig.prototype.out=function(b,c){b.bubbles=!0;Rf(this,ng,b,c)};function Xf(b,c,d){b.out(c,d);var e=c.relatedTarget;e&&ie(c.target,e)||(c.bubbles=!1,Rf(b,hg,c,d))}\nfunction Wf(b,c,d){c.bubbles=!0;Rf(b,fg,c,d);var e=c.relatedTarget;e&&ie(c.target,e)||(c.bubbles=!1,Rf(b,gg,c,d))}function Rf(b,c,d,e){S(b,new nf(c,e,d))}function ag(b,c){S(b,new nf(c.type,c,c))}ig.prototype.J=function(){for(var b=this.a.length,c,d=0;d<b;d++)c=this.a[d],lg(this,Object.keys(c.g));ig.X.J.call(this)};\nvar Uf=\"pointermove\",Tf=\"pointerdown\",Vf=\"pointerup\",fg=\"pointerover\",ng=\"pointerout\",gg=\"pointerenter\",hg=\"pointerleave\",Sf=\"pointercancel\",mg=[[\"bubbles\",!1],[\"cancelable\",!1],[\"view\",null],[\"detail\",null],[\"screenX\",0],[\"screenY\",0],[\"clientX\",0],[\"clientY\",0],[\"ctrlKey\",!1],[\"altKey\",!1],[\"shiftKey\",!1],[\"metaKey\",!1],[\"button\",0],[\"relatedTarget\",null],[\"buttons\",0],[\"pointerId\",0],[\"width\",0],[\"height\",0],[\"pressure\",0],[\"tiltX\",0],[\"tiltY\",0],[\"pointerType\",\"\"],[\"hwTimestamp\",0],[\"isPrimary\",\n!1],[\"type\",\"\"],[\"target\",null],[\"currentTarget\",null],[\"which\",0]];function og(b,c,d,e,f){te.call(this,b,c,f);this.originalEvent=d;this.pixel=c.vc(d);this.coordinate=c.ta(this.pixel);this.dragging=void 0!==e?e:!1}M(og,te);og.prototype.preventDefault=function(){og.X.preventDefault.call(this);this.originalEvent.preventDefault()};og.prototype.stopPropagation=function(){og.X.stopPropagation.call(this);this.originalEvent.stopPropagation()};function pg(b,c,d,e,f){og.call(this,b,c,d.a,e,f);this.a=d}M(pg,og);\nfunction qg(b){mb.call(this);this.f=b;this.h=0;this.l=!1;this.c=[];this.b=null;b=this.f.a;this.s=0;this.o={};this.g=new ig(b);this.a=null;this.i=Q(this.g,Tf,this.Jd,this);this.j=Q(this.g,Uf,this.ye,this)}M(qg,mb);function rg(b,c){var d;d=new pg(sg,b.f,c);S(b,d);0!==b.h?(x.clearTimeout(b.h),b.h=0,d=new pg(tg,b.f,c),S(b,d)):b.h=x.setTimeout(function(){this.h=0;var b=new pg(ug,this.f,c);S(this,b)}.bind(b),250)}\nfunction vg(b,c){c.type==wg||c.type==xg?delete b.o[c.pointerId]:c.type==yg&&(b.o[c.pointerId]=!0);b.s=Object.keys(b.o).length}p=qg.prototype;p.zc=function(b){vg(this,b);var c=new pg(wg,this.f,b);S(this,c);!this.l&&0===b.button&&rg(this,this.b);0===this.s&&(this.c.forEach(N),this.c.length=0,this.l=!1,this.b=null,jb(this.a),this.a=null)};\np.Jd=function(b){vg(this,b);var c=new pg(yg,this.f,b);S(this,c);this.b=b;0===this.c.length&&(this.a=new ig(document),this.c.push(Q(this.a,zg,this.ke,this),Q(this.a,wg,this.zc,this),Q(this.g,xg,this.zc,this)))};p.ke=function(b){if(b.clientX!=this.b.clientX||b.clientY!=this.b.clientY){this.l=!0;var c=new pg(Ag,this.f,b,this.l);S(this,c)}b.preventDefault()};p.ye=function(b){S(this,new pg(b.type,this.f,b,!(!this.b||b.clientX==this.b.clientX&&b.clientY==this.b.clientY)))};\np.J=function(){this.j&&(N(this.j),this.j=null);this.i&&(N(this.i),this.i=null);this.c.forEach(N);this.c.length=0;this.a&&(jb(this.a),this.a=null);this.g&&(jb(this.g),this.g=null);qg.X.J.call(this)};var ug=\"singleclick\",sg=\"click\",tg=\"dblclick\",Ag=\"pointerdrag\",zg=\"pointermove\",yg=\"pointerdown\",wg=\"pointerup\",xg=\"pointercancel\",Bg={Ve:ug,Ke:sg,Le:tg,Oe:Ag,Re:zg,Ne:yg,Ue:wg,Te:\"pointerover\",Se:\"pointerout\",Pe:\"pointerenter\",Qe:\"pointerleave\",Me:xg};function Cg(b){T.call(this);var c=Wa({},b);c.opacity=void 0!==b.opacity?b.opacity:1;c.visible=void 0!==b.visible?b.visible:!0;c.zIndex=void 0!==b.zIndex?b.zIndex:0;c.maxResolution=void 0!==b.maxResolution?b.maxResolution:Infinity;c.minResolution=void 0!==b.minResolution?b.minResolution:0;this.l(c)}M(Cg,T);\nfunction Dg(b){var c=b.Ub(),d=b.Pb(),e=b.cb(),f=b.C(),g=b.Vb(),h=b.get(\"maxResolution\"),k=b.get(\"minResolution\");return{layer:b,opacity:Ca(c,0,1),$b:d,visible:e,eb:!0,extent:f,zIndex:g,maxResolution:h,minResolution:Math.max(k,0)}}p=Cg.prototype;p.C=function(){return this.get(\"extent\")};p.Ub=function(){return this.get(\"opacity\")};p.cb=function(){return this.get(\"visible\")};p.Vb=function(){return this.get(\"zIndex\")};p.Fc=function(b){this.set(\"opacity\",b)};p.Gc=function(b){this.set(\"visible\",b)};\np.Hc=function(b){this.set(\"zIndex\",b)};function Eg(){};function Fg(b,c,d,e,f,g){R.call(this,b,c);this.vectorContext=d;this.frameState=e;this.context=f;this.glContext=g}M(Fg,R);function Gg(b){var c=Wa({},b);delete c.source;Cg.call(this,c);this.h=this.c=this.b=null;b.map&&this.setMap(b.map);Q(this,rb(\"source\"),this.Od,this);this.Zb(b.source?b.source:null)}M(Gg,Cg);function Hg(b,c){return b.visible&&c>=b.minResolution&&c<b.maxResolution}p=Gg.prototype;p.Lb=function(b){b=b?b:[];b.push(Dg(this));return b};p.V=function(){return this.get(\"source\")||null};p.Pb=function(){var b=this.V();return b?b.N():\"undefined\"};p.me=function(){this.v()};\np.Od=function(){this.h&&(N(this.h),this.h=null);var b=this.V();b&&(this.h=Q(b,\"change\",this.me,this));this.v()};p.setMap=function(b){this.b&&(N(this.b),this.b=null);b||this.v();this.c&&(N(this.c),this.c=null);b&&(this.b=Q(b,\"precompose\",function(b){var d=Dg(this);d.eb=!1;d.zIndex=Infinity;b.frameState.layerStatesArray.push(d);b.frameState.layerStates[I(this)]=d},this),this.c=Q(this,\"change\",b.render,b),this.v())};p.Zb=function(b){this.set(\"source\",b)};function Ig(b,c,d,e,f,g,h,k){Db(b);0===c&&0===d||Fb(b,c,d);1==e&&1==f||Gb(b,e,f);0!==g&&Hb(b,g);0===h&&0===k||Fb(b,h,k);return b}function Jg(b,c){return b[0]==c[0]&&b[1]==c[1]&&b[4]==c[4]&&b[5]==c[5]&&b[12]==c[12]&&b[13]==c[13]}function Kg(b,c,d){var e=b[1],f=b[5],g=b[13],h=c[0];c=c[1];d[0]=b[0]*h+b[4]*c+b[12];d[1]=e*h+f*c+g;return d};function Lg(b){ob.call(this);this.a=b}M(Lg,ob);Lg.prototype.fb=pa;Lg.prototype.Ic=dc;Lg.prototype.l=function(b,c,d){return function(e,f){return We(b,c,e,f,function(b){d[e]||(d[e]={});d[e][b.L.toString()]=b})}};function Mg(b){var c=b.a;c.cb()&&\"ready\"==c.Pb()&&b.v()}function Ng(b,c){c.Qc()&&b.postRenderFunctions.push(na(function(b,c,f){c=I(b).toString();b.Rc(f.viewState.projection,f.usedTiles[c])},c))}function Og(b,c){if(c){var d,e,f;e=0;for(f=c.length;e<f;++e)d=c[e],b[I(d).toString()]=d}}\nfunction Pg(b,c){var d=c.w;void 0!==d&&(\"string\"===typeof d?b.logos[d]=\"\":ha(d)&&(b.logos[d.src]=d.href))}function Qg(b,c,d,e){c=I(c).toString();d=d.toString();c in b?d in b[c]?(b=b[c][d],e.a<b.a&&(b.a=e.a),e.f>b.f&&(b.f=e.f),e.b<b.b&&(b.b=e.b),e.c>b.c&&(b.c=e.c)):b[c][d]=e:(b[c]={},b[c][d]=e)}function Rg(b,c,d){return[c*(Math.round(b[0]/c)+d[0]%2/2),c*(Math.round(b[1]/c)+d[1]%2/2)]}\nfunction Sg(b,c,d,e,f,g,h,k,l,m){var n=I(c).toString();n in b.wantedTiles||(b.wantedTiles[n]={});var q=b.wantedTiles[n];b=b.tileQueue;var r=d.minZoom,u,w,y,z,D,t;for(t=h;t>=r;--t)for(w=Ke(d,g,t,w),y=d.I(t),z=w.a;z<=w.f;++z)for(D=w.b;D<=w.c;++D)h-t<=k?(u=Tg(c,t,z,D,e,f),0==u.N()&&(q[u.L.toString()]=!0,u.getKey()in b.f||b.c([u,n,Oe(d,u.L),y])),void 0!==l&&l.call(m,u)):c.Yc(t,z,D,f)};function Ug(b){this.l=b.opacity;this.i=b.rotateWithView;this.H=b.rotation;this.gb=b.scale;this.u=b.snapToPixel}Ug.prototype.Z=function(){return this.H};function Vg(b){b=b||{};this.g=void 0!==b.anchor?b.anchor:[.5,.5];this.c=null;this.b=void 0!==b.anchorOrigin?b.anchorOrigin:\"top-left\";this.j=void 0!==b.anchorXUnits?b.anchorXUnits:\"fraction\";this.A=void 0!==b.anchorYUnits?b.anchorYUnits:\"fraction\";var c=void 0!==b.crossOrigin?b.crossOrigin:null,d=void 0!==b.img?b.img:null,e=void 0!==b.imgSize?b.imgSize:null,f=b.src;void 0!==f&&0!==f.length||!d||(f=d.src||I(d).toString());var g=void 0!==b.src?0:2,h;void 0!==b.color?(h=b.color,h=Array.isArray(h)?h:\nxd(h)):h=null;var k=Wg.ua(),l=k.get(f,c,h);l||(l=new Xg(d,f,e,c,g,h),k.set(f,c,h,l));this.a=l;this.s=void 0!==b.offset?b.offset:[0,0];this.f=void 0!==b.offsetOrigin?b.offsetOrigin:\"top-left\";this.h=null;this.o=void 0!==b.size?b.size:null;Ug.call(this,{opacity:void 0!==b.opacity?b.opacity:1,rotation:void 0!==b.rotation?b.rotation:0,scale:void 0!==b.scale?b.scale:1,snapToPixel:void 0!==b.snapToPixel?b.snapToPixel:!0,rotateWithView:void 0!==b.rotateWithView?b.rotateWithView:!1})}M(Vg,Ug);p=Vg.prototype;\np.jb=function(){if(this.c)return this.c;var b=this.g,c=this.Qa();if(\"fraction\"==this.j||\"fraction\"==this.A){if(!c)return null;b=this.g.slice();\"fraction\"==this.j&&(b[0]*=c[0]);\"fraction\"==this.A&&(b[1]*=c[1])}if(\"top-left\"!=this.b){if(!c)return null;b===this.g&&(b=this.g.slice());if(\"top-right\"==this.b||\"bottom-right\"==this.b)b[0]=-b[0]+c[0];if(\"bottom-left\"==this.b||\"bottom-right\"==this.b)b[1]=-b[1]+c[1]}return this.c=b};p.T=function(b){return this.a.T(b)};p.wc=function(){return this.a.b};p.rb=function(){return this.a.f};\np.Xb=function(){var b=this.a;if(!b.l)if(b.i){var c=b.b[0],d=b.b[1],e=rf(c,d);e.fillRect(0,0,c,d);b.l=e.canvas}else b.l=b.a;return b.l};p.ka=function(){if(this.h)return this.h;var b=this.s;if(\"top-left\"!=this.f){var c=this.Qa(),d=this.a.b;if(!c||!d)return null;b=b.slice();if(\"top-right\"==this.f||\"bottom-right\"==this.f)b[0]=d[0]-c[0]-b[0];if(\"bottom-left\"==this.f||\"bottom-right\"==this.f)b[1]=d[1]-c[1]-b[1]}return this.h=b};p.Qa=function(){return this.o?this.o:this.a.b};\np.Bc=function(b,c){return Q(this.a,\"change\",b,c)};p.load=function(){this.a.load()};p.Xc=function(b,c){gb(this.a,\"change\",b,c)};function Xg(b,c,d,e,f,g){mb.call(this);this.l=null;this.a=b?b:new Image;null!==e&&(this.a.crossOrigin=e);this.c=g?document.createElement(\"CANVAS\"):null;this.h=g;this.g=null;this.f=f;this.b=d;this.o=c;this.i=!1;2==this.f&&Yg(this)}M(Xg,mb);function Yg(b){var c=rf(1,1);try{c.drawImage(b.a,0,0),c.getImageData(0,0,1,1)}catch(d){b.i=!0}}\nXg.prototype.j=function(){this.f=3;this.g.forEach(N);this.g=null;S(this,\"change\")};\nXg.prototype.s=function(){this.f=2;this.b&&(this.a.width=this.b[0],this.a.height=this.b[1]);this.b=[this.a.width,this.a.height];this.g.forEach(N);this.g=null;Yg(this);if(!this.i&&null!==this.h){this.c.width=this.a.width;this.c.height=this.a.height;var b=this.c.getContext(\"2d\");b.drawImage(this.a,0,0);for(var c=b.getImageData(0,0,this.a.width,this.a.height),d=c.data,e=this.h[0]/255,f=this.h[1]/255,g=this.h[2]/255,h=0,k=d.length;h<k;h+=4)d[h]*=e,d[h+1]*=f,d[h+2]*=g;b.putImageData(c,0,0)}S(this,\"change\")};\nXg.prototype.T=function(){return this.c?this.c:this.a};Xg.prototype.load=function(){if(0==this.f){this.f=1;this.g=[Q(this.a,\"error\",this.j,this,!0),Q(this.a,\"load\",this.s,this,!0)];try{this.a.src=this.o}catch(b){this.j()}}};function Wg(){this.a={};this.b=0}aa(Wg);Wg.prototype.clear=function(){this.a={};this.b=0};Wg.prototype.get=function(b,c,d){b=c+\":\"+b+\":\"+(d?vd(d):\"null\");return b in this.a?this.a[b]:null};Wg.prototype.set=function(b,c,d,e){this.a[c+\":\"+b+\":\"+(d?vd(d):\"null\")]=e;++this.b};function Zg(b,c){this.h=c;this.f={};this.A={}}M(Zg,ib);function $g(b){var c=b.viewState,d=b.coordinateToPixelMatrix;Ig(d,b.size[0]/2,b.size[1]/2,1/c.resolution,-1/c.resolution,-c.rotation,-c.center[0],-c.center[1]);Eb(d,b.pixelToCoordinateMatrix)}p=Zg.prototype;p.J=function(){for(var b in this.f)jb(this.f[b])};function ah(){var b=Wg.ua();if(32<b.b){var c=0,d,e;for(d in b.a)e=b.a[d],0!==(c++&3)||nb(e)||(delete b.a[d],--b.b)}}\np.Wb=function(b,c,d,e,f,g){function h(b,f){var g=I(b).toString(),h=c.layerStates[I(f)].eb;if(!(g in c.skippedFeatureUids)||h)return d.call(e,b,h?f:null)}var k,l=c.viewState,m=l.resolution,n=l.projection,l=b;if(n.a){var n=n.C(),q=Vb(n),r=b[0];if(r<n[0]||r>n[2])l=[r+q*Math.ceil((n[0]-r)/q),b[1]]}n=c.layerStatesArray;for(q=n.length-1;0<=q;--q){var u=n[q],r=u.layer;if(Hg(u,m)&&f.call(g,r)&&(u=bh(this,r),r.V()&&(k=u.fb(r.V().j?l:b,c,h,e)),k))return k}};\np.Jc=function(b,c,d,e){return void 0!==this.Wb(b,c,cc,this,d,e)};function bh(b,c){var d=I(c).toString();if(d in b.f)return b.f[d];var e=b.Jb(c);b.f[d]=e;b.A[d]=Q(e,\"change\",b.Dd,b);return e}p.Dd=function(){this.h.render()};p.sb=pa;p.Be=function(b,c){for(var d in this.f)if(!(c&&d in c.layerStates)){var e=d,f=this.f[e];delete this.f[e];N(this.A[e]);delete this.A[e];jb(f)}};function ch(b,c){for(var d in b.f)if(!(d in c.layerStates)){c.postRenderFunctions.push(b.Be.bind(b));break}}\nfunction Oa(b,c){return b.zIndex-c.zIndex};function dh(b,c){this.j=b;this.l=c;this.a=[];this.b=[];this.f={}}dh.prototype.clear=function(){this.a.length=0;this.b.length=0;Ya(this.f)};function eh(b){var c=b.a,d=b.b,e=c[0];1==c.length?(c.length=0,d.length=0):(c[0]=c.pop(),d[0]=d.pop(),fh(b,0));c=b.l(e);delete b.f[c];return e}dh.prototype.c=function(b){var c=this.j(b);return Infinity!=c?(this.a.push(b),this.b.push(c),this.f[this.l(b)]=!0,gh(this,0,this.a.length-1),!0):!1};\nfunction fh(b,c){for(var d=b.a,e=b.b,f=d.length,g=d[c],h=e[c],k=c;c<f>>1;){var l=2*c+1,m=2*c+2,l=m<f&&e[m]<e[l]?m:l;d[c]=d[l];e[c]=e[l];c=l}d[c]=g;e[c]=h;gh(b,k,c)}function gh(b,c,d){var e=b.a;b=b.b;for(var f=e[d],g=b[d];d>c;){var h=d-1>>1;if(b[h]>g)e[d]=e[h],b[d]=b[h],d=h;else break}e[d]=f;b[d]=g}function hh(b){var c=b.j,d=b.a,e=b.b,f=0,g=d.length,h,k,l;for(k=0;k<g;++k)h=d[k],l=c(h),Infinity==l?delete b.f[b.l(h)]:(e[f]=l,d[f++]=h);d.length=f;e.length=f;for(c=(b.a.length>>1)-1;0<=c;c--)fh(b,c)};function ih(b,c){dh.call(this,function(c){return b.apply(null,c)},function(b){return b[0].getKey()});this.A=c;this.h=0;this.g={}}M(ih,dh);ih.prototype.c=function(b){var c=ih.X.c.call(this,b);c&&Q(b[0],\"change\",this.i,this);return c};ih.prototype.i=function(b){b=b.target;var c=b.N();if(2===c||3===c||4===c||5===c)gb(b,\"change\",this.i,this),b=b.getKey(),b in this.g&&(delete this.g[b],--this.h),this.A()};function jh(){this.a=[];this.b=this.f=0}function kh(b,c){var d=b.b,e=.05-d,f=Math.log(.05/b.b)/-.005;return cd({source:c,duration:f,easing:function(b){return d*(Math.exp(-.005*b*f)-1)/e}})};function lh(b){T.call(this);this.S=null;this.set(\"active\",!0);this.handleEvent=b.handleEvent}M(lh,T);lh.prototype.setMap=function(b){this.S=b};function mh(b,c,d,e,f){if(void 0!==d){var g=c.Z(),h=c.ia();void 0!==g&&h&&f&&0<f&&(b.fa(dd({rotation:g,duration:f,easing:$c})),e&&b.fa(cd({source:h,duration:f,easing:$c})));c.rotate(d,e)}}function nh(b,c,d,e,f){var g=c.I();d=c.constrainResolution(g,d,0);oh(b,c,d,e,f)}\nfunction oh(b,c,d,e,f){if(d){var g=c.I(),h=c.ia();void 0!==g&&h&&d!==g&&f&&0<f&&(b.fa(ed({resolution:g,duration:f,easing:$c})),e&&b.fa(cd({source:h,duration:f,easing:$c})));if(e){var k;b=c.ia();f=c.I();void 0!==b&&void 0!==f&&(k=[e[0]-d*(e[0]-b[0])/f,e[1]-d*(e[1]-b[1])/f]);c.oa(k)}Yc(c,d)}};function ph(b){b=b?b:{};this.a=b.delta?b.delta:1;lh.call(this,{handleEvent:qh});this.b=void 0!==b.duration?b.duration:250}M(ph,lh);function qh(b){var c=!1,d=b.originalEvent;if(b.type==tg){var c=b.map,e=b.coordinate,d=d.shiftKey?-this.a:this.a,f=c.O();nh(c,f,d,e,this.b);b.preventDefault();c=!0}return!c};function rh(b){b=b.originalEvent;return b.altKey&&!(b.metaKey||b.ctrlKey)&&b.shiftKey}function sh(b){b=b.originalEvent;return 0==b.button&&!(Jd&&Cf&&b.ctrlKey)}function th(b){b=b.originalEvent;return!b.altKey&&!(b.metaKey||b.ctrlKey)&&!b.shiftKey}function uh(b){b=b.originalEvent;return!b.altKey&&!(b.metaKey||b.ctrlKey)&&b.shiftKey}function vh(b){b=b.originalEvent.target.tagName;return\"INPUT\"!==b&&\"SELECT\"!==b&&\"TEXTAREA\"!==b}function wh(b){return\"mouse\"==b.a.pointerType};function xh(b){b=b?b:{};lh.call(this,{handleEvent:b.handleEvent?b.handleEvent:yh});this.wb=b.handleDownEvent?b.handleDownEvent:dc;this.xb=b.handleDragEvent?b.handleDragEvent:pa;this.yb=b.handleMoveEvent?b.handleMoveEvent:pa;this.zb=b.handleUpEvent?b.handleUpEvent:dc;this.s=!1;this.G={};this.c=[]}M(xh,lh);function zh(b){for(var c=b.length,d=0,e=0,f=0;f<c;f++)d+=b[f].clientX,e+=b[f].clientY;return[d/c,e/c]}\nfunction yh(b){if(!(b instanceof pg))return!0;var c=!1,d=b.type;if(d===yg||d===Ag||d===wg)d=b.a,b.type==wg?delete this.G[d.pointerId]:b.type==yg?this.G[d.pointerId]=d:d.pointerId in this.G&&(this.G[d.pointerId]=d),this.c=Za(this.G);this.s&&(b.type==Ag?this.xb(b):b.type==wg&&(this.s=this.zb(b)));b.type==yg?(this.s=b=this.wb(b),c=this.w(b)):b.type==zg&&this.yb(b);return!c}xh.prototype.w=function(b){return b};function Ah(b){xh.call(this,{handleDownEvent:Bh,handleDragEvent:Ch,handleUpEvent:Dh});b=b?b:{};this.a=b.kinetic;this.b=this.g=null;this.i=b.condition?b.condition:th;this.h=!1}M(Ah,xh);function Ch(b){var c=zh(this.c);this.a&&this.a.a.push(c[0],c[1],Date.now());if(this.b){var d=this.b[0]-c[0],e=c[1]-this.b[1];b=b.map;var f=b.O(),g=f.N(),e=d=[d,e],h=g.resolution;e[0]*=h;e[1]*=h;vb(d,g.rotation);ub(d,g.center);d=f.a.center(d);b.render();f.oa(d)}this.b=c}\nfunction Dh(b){b=b.map;var c=b.O();if(0===this.c.length){var d;if(d=!this.h&&this.a)if(d=this.a,6>d.a.length)d=!1;else{var e=Date.now()-100,f=d.a.length-3;if(d.a[f+2]<e)d=!1;else{for(var g=f-3;0<g&&d.a[g+2]>e;)g-=3;var e=d.a[f+2]-d.a[g+2],h=d.a[f]-d.a[g],f=d.a[f+1]-d.a[g+1];d.f=Math.atan2(f,h);d.b=Math.sqrt(h*h+f*f)/e;d=.05<d.b}}d&&(d=(.05-this.a.b)/-.005,f=this.a.f,g=c.ia(),this.g=kh(this.a,g),b.fa(this.g),g=Eh(b,g),d=b.ta([g[0]-d*Math.cos(f),g[1]-d*Math.sin(f)]),d=c.a.center(d),c.oa(d));Zc(c,-1);\nb.render();return!1}this.b=null;return!0}function Bh(b){if(0<this.c.length&&this.i(b)){var c=b.map,d=c.O();this.b=null;this.s||Zc(d,1);c.render();this.g&&La(c.B,this.g)&&(d.oa(b.frameState.viewState.center),this.g=null);this.a&&(b=this.a,b.a.length=0,b.f=0,b.b=0);this.h=1<this.c.length;return!0}return!1}Ah.prototype.w=dc;function Fh(b){b=b?b:{};xh.call(this,{handleDownEvent:Gh,handleDragEvent:Hh,handleUpEvent:Ih});this.b=b.condition?b.condition:rh;this.a=void 0;this.g=void 0!==b.duration?b.duration:250}M(Fh,xh);function Hh(b){if(wh(b)){var c=b.map,d=c.Pa();b=b.pixel;d=Math.atan2(d[1]/2-b[1],b[0]-d[0]/2);if(void 0!==this.a){b=d-this.a;var e=c.O(),f=e.Z();c.render();mh(c,e,f-b)}this.a=d}}\nfunction Ih(b){if(!wh(b))return!0;b=b.map;var c=b.O();Zc(c,-1);var d=c.Z(),e=this.g,d=c.constrainRotation(d,0);mh(b,c,d,void 0,e);return!1}function Gh(b){return wh(b)&&sh(b)&&this.b(b)?(b=b.map,Zc(b.O(),1),b.render(),this.a=void 0,!0):!1}Fh.prototype.w=dc;function Jh(b){this.c=null;this.b=document.createElement(\"div\");this.b.style.position=\"absolute\";this.b.className=\"ol-box \"+b;this.f=this.g=this.a=null}M(Jh,ib);Jh.prototype.J=function(){this.setMap(null)};function Kh(b){var c=b.g,d=b.f;b=b.b.style;b.left=Math.min(c[0],d[0])+\"px\";b.top=Math.min(c[1],d[1])+\"px\";b.width=Math.abs(d[0]-c[0])+\"px\";b.height=Math.abs(d[1]-c[1])+\"px\"}\nJh.prototype.setMap=function(b){if(this.a){this.a.o.removeChild(this.b);var c=this.b.style;c.left=c.top=c.width=c.height=\"inherit\"}(this.a=b)&&this.a.o.appendChild(this.b)};function Lh(b){var c=b.g,d=b.f,c=[c,[c[0],d[1]],d,[d[0],c[1]]].map(b.a.ta,b.a);c[4]=c[0].slice();b.c?b.c.W([c]):b.c=new Tc([c])}Jh.prototype.M=function(){return this.c};function Mh(b,c,d){R.call(this,b);this.coordinate=c;this.mapBrowserEvent=d}M(Mh,R);function Nh(b){xh.call(this,{handleDownEvent:Oh,handleDragEvent:Ph,handleUpEvent:Qh});b=b?b:{};this.a=new Jh(b.className||\"ol-dragbox\");this.b=null;this.j=b.condition?b.condition:cc;this.i=b.boxEndCondition?b.boxEndCondition:Rh}M(Nh,xh);function Rh(b,c,d){b=d[0]-c[0];c=d[1]-c[1];return 64<=b*b+c*c}\nfunction Ph(b){if(wh(b)){var c=this.a,d=b.pixel;c.g=this.b;c.f=d;Lh(c);Kh(c);S(this,new Mh(\"boxdrag\",b.coordinate,b))}}Nh.prototype.M=function(){return this.a.M()};Nh.prototype.h=pa;function Qh(b){if(!wh(b))return!0;this.a.setMap(null);this.i(b,this.b,b.pixel)&&(this.h(b),S(this,new Mh(\"boxend\",b.coordinate,b)));return!1}\nfunction Oh(b){if(wh(b)&&sh(b)&&this.j(b)){this.b=b.pixel;this.a.setMap(b.map);var c=this.a,d=this.b;c.g=this.b;c.f=d;Lh(c);Kh(c);S(this,new Mh(\"boxstart\",b.coordinate,b));return!0}return!1};function Sh(b){b=b?b:{};var c=b.condition?b.condition:uh;this.g=void 0!==b.duration?b.duration:200;this.o=void 0!==b.out?b.out:!1;Nh.call(this,{condition:c,className:b.className||\"ol-dragzoom\"})}M(Sh,Nh);\nSh.prototype.h=function(){var b=this.S,c=b.O(),d=b.Pa(),e=this.M().C();if(this.o){var f=c.jc(d),e=[Eh(b,Xb(e)),Eh(b,[e[2],e[3]])],g=Pb(void 0),h,k;h=0;for(k=e.length;h<k;++h)Kb(g,e[h]);g=1/Xc(g,d);e=(f[2]-f[0])/2*(g-1);g=(f[3]-f[1])/2*(g-1);f[0]-=e;f[2]+=e;f[1]-=g;f[3]+=g;e=f}d=c.constrainResolution(Xc(e,d));f=c.I();g=c.ia();b.fa(ed({resolution:f,duration:this.g,easing:$c}));b.fa(cd({source:g,duration:this.g,easing:$c}));c.oa(Yb(e));Yc(c,d)};function Th(b){lh.call(this,{handleEvent:Uh});b=b||{};this.a=function(b){return th.call(this,b)&&vh.call(this,b)};this.b=void 0!==b.condition?b.condition:this.a;this.c=void 0!==b.duration?b.duration:100;this.g=void 0!==b.pixelDelta?b.pixelDelta:128}M(Th,lh);\nfunction Uh(b){var c=!1;if(\"keydown\"==b.type){var d=b.originalEvent.keyCode;if(this.b(b)&&(40==d||37==d||39==d||38==d)){var e=b.map,c=e.O(),f=c.I()*this.g,g=0,h=0;40==d?h=-f:37==d?g=-f:39==d?g=f:h=f;d=[g,h];vb(d,c.Z());f=this.c;if(g=c.ia())f&&0<f&&e.fa(cd({source:g,duration:f,easing:bd})),e=c.a.center([g[0]+d[0],g[1]+d[1]]),c.oa(e);b.preventDefault();c=!0}}return!c};function Vh(b){lh.call(this,{handleEvent:Wh});b=b?b:{};this.b=b.condition?b.condition:vh;this.a=b.delta?b.delta:1;this.c=void 0!==b.duration?b.duration:100}M(Vh,lh);function Wh(b){var c=!1;if(\"keydown\"==b.type||\"keypress\"==b.type){var d=b.originalEvent.charCode;if(this.b(b)&&(43==d||45==d)){c=b.map;d=43==d?this.a:-this.a;c.render();var e=c.O();nh(c,e,d,void 0,this.c);b.preventDefault();c=!0}}return!c};function Xh(b){lh.call(this,{handleEvent:Yh});b=b||{};this.a=0;this.i=void 0!==b.duration?b.duration:250;this.j=void 0!==b.useAnchor?b.useAnchor:!0;this.c=null;this.g=this.b=void 0}M(Xh,lh);\nfunction Yh(b){var c=!1;if(\"wheel\"==b.type||\"mousewheel\"==b.type){var c=b.map,d=b.originalEvent;this.j&&(this.c=b.coordinate);var e;\"wheel\"==b.type?(e=d.deltaY,Af&&d.deltaMode===x.WheelEvent.DOM_DELTA_PIXEL&&(e/=Df),d.deltaMode===x.WheelEvent.DOM_DELTA_LINE&&(e*=40)):\"mousewheel\"==b.type&&(e=-d.wheelDeltaY,Bf&&(e/=3));this.a+=e;void 0===this.b&&(this.b=Date.now());e=Math.max(80-(Date.now()-this.b),0);x.clearTimeout(this.g);this.g=x.setTimeout(this.h.bind(this,c),e);b.preventDefault();c=!0}return!c}\nXh.prototype.h=function(b){var c=Ca(this.a,-1,1),d=b.O();b.render();nh(b,d,-c,this.c,this.i);this.a=0;this.c=null;this.g=this.b=void 0};function Zh(b){xh.call(this,{handleDownEvent:$h,handleDragEvent:ai,handleUpEvent:bi});b=b||{};this.b=null;this.g=void 0;this.a=!1;this.h=0;this.j=void 0!==b.threshold?b.threshold:.3;this.i=void 0!==b.duration?b.duration:250}M(Zh,xh);\nfunction ai(b){var c=0,d=this.c[0],e=this.c[1],d=Math.atan2(e.clientY-d.clientY,e.clientX-d.clientX);void 0!==this.g&&(c=d-this.g,this.h+=c,!this.a&&Math.abs(this.h)>this.j&&(this.a=!0));this.g=d;b=b.map;d=b.a.getBoundingClientRect();e=zh(this.c);e[0]-=d.left;e[1]-=d.top;this.b=b.ta(e);this.a&&(d=b.O(),e=d.Z(),b.render(),mh(b,d,e+c,this.b))}\nfunction bi(b){if(2>this.c.length){b=b.map;var c=b.O();Zc(c,-1);if(this.a){var d=c.Z(),e=this.b,f=this.i,d=c.constrainRotation(d,0);mh(b,c,d,e,f)}return!1}return!0}function $h(b){return 2<=this.c.length?(b=b.map,this.b=null,this.g=void 0,this.a=!1,this.h=0,this.s||Zc(b.O(),1),b.render(),!0):!1}Zh.prototype.w=dc;function ci(b){xh.call(this,{handleDownEvent:di,handleDragEvent:ei,handleUpEvent:fi});b=b?b:{};this.b=null;this.h=void 0!==b.duration?b.duration:400;this.a=void 0;this.g=1}M(ci,xh);function ei(b){var c=1,d=this.c[0],e=this.c[1],f=d.clientX-e.clientX,d=d.clientY-e.clientY,f=Math.sqrt(f*f+d*d);void 0!==this.a&&(c=this.a/f);this.a=f;1!=c&&(this.g=c);b=b.map;var f=b.O(),d=f.I(),e=b.a.getBoundingClientRect(),g=zh(this.c);g[0]-=e.left;g[1]-=e.top;this.b=b.ta(g);b.render();oh(b,f,d*c,this.b)}\nfunction fi(b){if(2>this.c.length){b=b.map;var c=b.O();Zc(c,-1);var d=c.I(),e=this.b,f=this.h,d=c.constrainResolution(d,0,this.g-1);oh(b,c,d,e,f);return!1}return!0}function di(b){return 2<=this.c.length?(b=b.map,this.b=null,this.a=void 0,this.g=1,this.s||Zc(b.O(),1),b.render(),!0):!1}ci.prototype.w=dc;function gi(b){var c=b||{};b=Wa({},c);delete b.layers;c=c.layers;Cg.call(this,b);this.b=[];this.a={};Q(this,rb(\"layers\"),this.Fd,this);c?Array.isArray(c)&&(c=new ld(c.slice())):c=new ld;this.set(\"layers\",c)}M(gi,Cg);p=gi.prototype;p.ob=function(){this.cb()&&this.v()};\np.Fd=function(){this.b.forEach(N);this.b.length=0;var b=this.get(\"layers\");this.b.push(Q(b,\"add\",this.Ed,this),Q(b,\"remove\",this.Gd,this));for(var c in this.a)this.a[c].forEach(N);Ya(this.a);var b=b.a,d,e;c=0;for(d=b.length;c<d;c++)e=b[c],this.a[I(e).toString()]=[Q(e,\"propertychange\",this.ob,this),Q(e,\"change\",this.ob,this)];this.v()};p.Ed=function(b){b=b.element;var c=I(b).toString();this.a[c]=[Q(b,\"propertychange\",this.ob,this),Q(b,\"change\",this.ob,this)];this.v()};\np.Gd=function(b){b=I(b.element).toString();this.a[b].forEach(N);delete this.a[b];this.v()};p.Lb=function(b){var c=void 0!==b?b:[],d=c.length;nd(this.get(\"layers\"),function(b){b.Lb(c)});b=Dg(this);var e,f;for(e=c.length;d<e;d++)f=c[d],f.opacity*=b.opacity,f.visible=f.visible&&b.visible,f.maxResolution=Math.min(f.maxResolution,b.maxResolution),f.minResolution=Math.max(f.minResolution,b.minResolution),void 0!==b.extent&&(f.extent=void 0!==f.extent?$b(f.extent,b.extent):b.extent);return c};p.Pb=function(){return\"ready\"};function hi(b){ic.call(this,{code:b,units:\"m\",extent:ii,global:!0,worldExtent:ji})}M(hi,ic);hi.prototype.getPointResolution=function(b,c){return b/Da(c[1]/6378137)};var ki=6378137*Math.PI,ii=[-ki,-ki,ki,ki],ji=[-180,-85,180,85],li=\"EPSG:3857 EPSG:102100 EPSG:102113 EPSG:900913 urn:ogc:def:crs:EPSG:6.18:3:3857 urn:ogc:def:crs:EPSG::3857 http://www.opengis.net/gml/srs/epsg.xml#3857\".split(\" \").map(function(b){return new hi(b)});\nfunction mi(b,c,d){var e=b.length;d=1<d?d:2;void 0===c&&(2<d?c=b.slice():c=Array(e));for(var f=0;f<e;f+=d)c[f]=6378137*Math.PI*b[f]/180,c[f+1]=6378137*Math.log(Math.tan(Math.PI*(b[f+1]+90)/360));return c}function ni(b,c,d){var e=b.length;d=1<d?d:2;void 0===c&&(2<d?c=b.slice():c=Array(e));for(var f=0;f<e;f+=d)c[f]=180*b[f]/(6378137*Math.PI),c[f+1]=360*Math.atan(Math.exp(b[f+1]/6378137))/Math.PI-90;return c};var oi=new ec(6378137);function pi(b,c){ic.call(this,{code:b,units:\"degrees\",extent:qi,axisOrientation:c,global:!0,metersPerUnit:ri,worldExtent:qi})}M(pi,ic);pi.prototype.getPointResolution=function(b){return b};\nvar qi=[-180,-90,180,90],ri=Math.PI*oi.radius/180,si=[new pi(\"CRS:84\"),new pi(\"EPSG:4326\",\"neu\"),new pi(\"urn:ogc:def:crs:EPSG::4326\",\"neu\"),new pi(\"urn:ogc:def:crs:EPSG:6.6:4326\",\"neu\"),new pi(\"urn:ogc:def:crs:OGC:1.3:CRS84\"),new pi(\"urn:ogc:def:crs:OGC:2:84\"),new pi(\"http://www.opengis.net/gml/srs/epsg.xml#4326\",\"neu\"),new pi(\"urn:x-ogc:def:crs:EPSG:4326\",\"neu\")];function X(b){b=b?b:{};var c=Wa({},b);delete c.preload;delete c.useInterimTilesOnError;Gg.call(this,c);this.set(\"preload\",void 0!==b.preload?b.preload:0);this.set(\"useInterimTilesOnError\",void 0!==b.useInterimTilesOnError?b.useInterimTilesOnError:!0)}M(X,Gg);function ti(b){return b.get(\"useInterimTilesOnError\")};var ui=[0,0,0,1],vi=[],wi=[0,0,0,1];function xi(b,c,d,e){0!==c&&(b.translate(d,e),b.rotate(c),b.translate(-d,-e))};function yi(b){b=b||{};this.a=void 0!==b.color?b.color:null;this.b=void 0}yi.prototype.ga=function(){return this.a};function zi(){this.b=-1};function Ai(){this.b=-1;this.b=64;this.a=Array(4);this.g=Array(this.b);this.c=this.f=0;this.a[0]=1732584193;this.a[1]=4023233417;this.a[2]=2562383102;this.a[3]=271733878;this.c=this.f=0}M(Ai,zi);\nfunction Bi(b,c,d){d||(d=0);var e=Array(16);if(da(c))for(var f=0;16>f;++f)e[f]=c.charCodeAt(d++)|c.charCodeAt(d++)<<8|c.charCodeAt(d++)<<16|c.charCodeAt(d++)<<24;else for(f=0;16>f;++f)e[f]=c[d++]|c[d++]<<8|c[d++]<<16|c[d++]<<24;c=b.a[0];d=b.a[1];var f=b.a[2],g=b.a[3],h=0,h=c+(g^d&(f^g))+e[0]+3614090360&4294967295;c=d+(h<<7&4294967295|h>>>25);h=g+(f^c&(d^f))+e[1]+3905402710&4294967295;g=c+(h<<12&4294967295|h>>>20);h=f+(d^g&(c^d))+e[2]+606105819&4294967295;f=g+(h<<17&4294967295|h>>>15);h=d+(c^f&(g^\nc))+e[3]+3250441966&4294967295;d=f+(h<<22&4294967295|h>>>10);h=c+(g^d&(f^g))+e[4]+4118548399&4294967295;c=d+(h<<7&4294967295|h>>>25);h=g+(f^c&(d^f))+e[5]+1200080426&4294967295;g=c+(h<<12&4294967295|h>>>20);h=f+(d^g&(c^d))+e[6]+2821735955&4294967295;f=g+(h<<17&4294967295|h>>>15);h=d+(c^f&(g^c))+e[7]+4249261313&4294967295;d=f+(h<<22&4294967295|h>>>10);h=c+(g^d&(f^g))+e[8]+1770035416&4294967295;c=d+(h<<7&4294967295|h>>>25);h=g+(f^c&(d^f))+e[9]+2336552879&4294967295;g=c+(h<<12&4294967295|h>>>20);h=f+\n(d^g&(c^d))+e[10]+4294925233&4294967295;f=g+(h<<17&4294967295|h>>>15);h=d+(c^f&(g^c))+e[11]+2304563134&4294967295;d=f+(h<<22&4294967295|h>>>10);h=c+(g^d&(f^g))+e[12]+1804603682&4294967295;c=d+(h<<7&4294967295|h>>>25);h=g+(f^c&(d^f))+e[13]+4254626195&4294967295;g=c+(h<<12&4294967295|h>>>20);h=f+(d^g&(c^d))+e[14]+2792965006&4294967295;f=g+(h<<17&4294967295|h>>>15);h=d+(c^f&(g^c))+e[15]+1236535329&4294967295;d=f+(h<<22&4294967295|h>>>10);h=c+(f^g&(d^f))+e[1]+4129170786&4294967295;c=d+(h<<5&4294967295|\nh>>>27);h=g+(d^f&(c^d))+e[6]+3225465664&4294967295;g=c+(h<<9&4294967295|h>>>23);h=f+(c^d&(g^c))+e[11]+643717713&4294967295;f=g+(h<<14&4294967295|h>>>18);h=d+(g^c&(f^g))+e[0]+3921069994&4294967295;d=f+(h<<20&4294967295|h>>>12);h=c+(f^g&(d^f))+e[5]+3593408605&4294967295;c=d+(h<<5&4294967295|h>>>27);h=g+(d^f&(c^d))+e[10]+38016083&4294967295;g=c+(h<<9&4294967295|h>>>23);h=f+(c^d&(g^c))+e[15]+3634488961&4294967295;f=g+(h<<14&4294967295|h>>>18);h=d+(g^c&(f^g))+e[4]+3889429448&4294967295;d=f+(h<<20&4294967295|\nh>>>12);h=c+(f^g&(d^f))+e[9]+568446438&4294967295;c=d+(h<<5&4294967295|h>>>27);h=g+(d^f&(c^d))+e[14]+3275163606&4294967295;g=c+(h<<9&4294967295|h>>>23);h=f+(c^d&(g^c))+e[3]+4107603335&4294967295;f=g+(h<<14&4294967295|h>>>18);h=d+(g^c&(f^g))+e[8]+1163531501&4294967295;d=f+(h<<20&4294967295|h>>>12);h=c+(f^g&(d^f))+e[13]+2850285829&4294967295;c=d+(h<<5&4294967295|h>>>27);h=g+(d^f&(c^d))+e[2]+4243563512&4294967295;g=c+(h<<9&4294967295|h>>>23);h=f+(c^d&(g^c))+e[7]+1735328473&4294967295;f=g+(h<<14&4294967295|\nh>>>18);h=d+(g^c&(f^g))+e[12]+2368359562&4294967295;d=f+(h<<20&4294967295|h>>>12);h=c+(d^f^g)+e[5]+4294588738&4294967295;c=d+(h<<4&4294967295|h>>>28);h=g+(c^d^f)+e[8]+2272392833&4294967295;g=c+(h<<11&4294967295|h>>>21);h=f+(g^c^d)+e[11]+1839030562&4294967295;f=g+(h<<16&4294967295|h>>>16);h=d+(f^g^c)+e[14]+4259657740&4294967295;d=f+(h<<23&4294967295|h>>>9);h=c+(d^f^g)+e[1]+2763975236&4294967295;c=d+(h<<4&4294967295|h>>>28);h=g+(c^d^f)+e[4]+1272893353&4294967295;g=c+(h<<11&4294967295|h>>>21);h=f+(g^\nc^d)+e[7]+4139469664&4294967295;f=g+(h<<16&4294967295|h>>>16);h=d+(f^g^c)+e[10]+3200236656&4294967295;d=f+(h<<23&4294967295|h>>>9);h=c+(d^f^g)+e[13]+681279174&4294967295;c=d+(h<<4&4294967295|h>>>28);h=g+(c^d^f)+e[0]+3936430074&4294967295;g=c+(h<<11&4294967295|h>>>21);h=f+(g^c^d)+e[3]+3572445317&4294967295;f=g+(h<<16&4294967295|h>>>16);h=d+(f^g^c)+e[6]+76029189&4294967295;d=f+(h<<23&4294967295|h>>>9);h=c+(d^f^g)+e[9]+3654602809&4294967295;c=d+(h<<4&4294967295|h>>>28);h=g+(c^d^f)+e[12]+3873151461&4294967295;\ng=c+(h<<11&4294967295|h>>>21);h=f+(g^c^d)+e[15]+530742520&4294967295;f=g+(h<<16&4294967295|h>>>16);h=d+(f^g^c)+e[2]+3299628645&4294967295;d=f+(h<<23&4294967295|h>>>9);h=c+(f^(d|~g))+e[0]+4096336452&4294967295;c=d+(h<<6&4294967295|h>>>26);h=g+(d^(c|~f))+e[7]+1126891415&4294967295;g=c+(h<<10&4294967295|h>>>22);h=f+(c^(g|~d))+e[14]+2878612391&4294967295;f=g+(h<<15&4294967295|h>>>17);h=d+(g^(f|~c))+e[5]+4237533241&4294967295;d=f+(h<<21&4294967295|h>>>11);h=c+(f^(d|~g))+e[12]+1700485571&4294967295;c=d+\n(h<<6&4294967295|h>>>26);h=g+(d^(c|~f))+e[3]+2399980690&4294967295;g=c+(h<<10&4294967295|h>>>22);h=f+(c^(g|~d))+e[10]+4293915773&4294967295;f=g+(h<<15&4294967295|h>>>17);h=d+(g^(f|~c))+e[1]+2240044497&4294967295;d=f+(h<<21&4294967295|h>>>11);h=c+(f^(d|~g))+e[8]+1873313359&4294967295;c=d+(h<<6&4294967295|h>>>26);h=g+(d^(c|~f))+e[15]+4264355552&4294967295;g=c+(h<<10&4294967295|h>>>22);h=f+(c^(g|~d))+e[6]+2734768916&4294967295;f=g+(h<<15&4294967295|h>>>17);h=d+(g^(f|~c))+e[13]+1309151649&4294967295;\nd=f+(h<<21&4294967295|h>>>11);h=c+(f^(d|~g))+e[4]+4149444226&4294967295;c=d+(h<<6&4294967295|h>>>26);h=g+(d^(c|~f))+e[11]+3174756917&4294967295;g=c+(h<<10&4294967295|h>>>22);h=f+(c^(g|~d))+e[2]+718787259&4294967295;f=g+(h<<15&4294967295|h>>>17);h=d+(g^(f|~c))+e[9]+3951481745&4294967295;b.a[0]=b.a[0]+c&4294967295;b.a[1]=b.a[1]+(f+(h<<21&4294967295|h>>>11))&4294967295;b.a[2]=b.a[2]+f&4294967295;b.a[3]=b.a[3]+g&4294967295}\nfunction Ci(b,c){var d;void 0===d&&(d=c.length);for(var e=d-b.b,f=b.g,g=b.f,h=0;h<d;){if(0==g)for(;h<=e;)Bi(b,c,h),h+=b.b;if(da(c))for(;h<d;){if(f[g++]=c.charCodeAt(h++),g==b.b){Bi(b,f);g=0;break}}else for(;h<d;)if(f[g++]=c[h++],g==b.b){Bi(b,f);g=0;break}}b.f=g;b.c+=d};function Di(b){b=b||{};this.f=void 0!==b.color?b.color:null;this.Da=b.lineCap;this.a=void 0!==b.lineDash?b.lineDash:null;this.Ea=b.lineJoin;this.Fa=b.miterLimit;this.c=b.width;this.b=void 0}Di.prototype.ga=function(){return this.f};Di.prototype.getLineDash=function(){return this.a};Di.prototype.ha=function(){return this.c};function Ei(b){b=b||{};this.h=this.a=this.g=null;this.f=void 0!==b.fill?b.fill:null;this.b=void 0!==b.stroke?b.stroke:null;this.c=b.radius;this.o=[0,0];this.j=this.s=this.A=null;var c=b.atlasManager,d,e=null,f,g=0;this.b&&(f=vd(this.b.ga()),g=this.b.ha(),void 0===g&&(g=1),e=this.b.getLineDash(),Ef||(e=null));var h=2*(this.c+g)+1;f={strokeStyle:f,Wc:g,size:h,lineDash:e};if(void 0===c)this.a=document.createElement(\"CANVAS\"),this.a.height=h,this.a.width=h,d=h=this.a.width,c=this.a.getContext(\"2d\"),this.tc(f,\nc,0,0),this.f?this.h=this.a:(c=this.h=document.createElement(\"CANVAS\"),c.height=f.size,c.width=f.size,c=c.getContext(\"2d\"),this.oc(f,c,0,0));else{h=Math.round(h);(e=!this.f)&&(d=this.oc.bind(this,f));if(this.b){g=this.b;if(void 0===g.b){var k=\"s\"+(g.f?vd(g.f):\"-\")+\",\"+(void 0!==g.Da?g.Da.toString():\"-\")+\",\"+(g.a?g.a.toString():\"-\")+\",\"+(void 0!==g.Ea?g.Ea:\"-\")+\",\"+(void 0!==g.Fa?g.Fa.toString():\"-\")+\",\"+(void 0!==g.c?g.c.toString():\"-\"),l=new Ai;Ci(l,k);var m=Array((56>l.f?l.b:2*l.b)-l.f);m[0]=128;\nfor(k=1;k<m.length-8;++k)m[k]=0;for(var n=8*l.c,k=m.length-8;k<m.length;++k)m[k]=n&255,n/=256;Ci(l,m);m=Array(16);for(k=n=0;4>k;++k)for(var q=0;32>q;q+=8)m[n++]=l.a[k]>>>q&255;if(8192>=m.length)l=String.fromCharCode.apply(null,m);else for(l=\"\",k=0;k<m.length;k+=8192)l+=String.fromCharCode.apply(null,rd(m,k,k+8192));g.b=l}g=g.b}else g=\"-\";this.f?(l=this.f,void 0===l.b&&(l.b=l.a instanceof CanvasPattern||l.a instanceof CanvasGradient?I(l.a).toString():\"f\"+(l.a?vd(l.a):\"-\")),l=l.b):l=\"-\";this.g&&g==\nthis.g[1]&&l==this.g[2]&&this.c==this.g[3]||(this.g=[\"c\"+g+l+(void 0!==this.c?this.c.toString():\"-\"),g,l,this.c]);f=c.add(this.g[0],h,h,this.tc.bind(this,f),d);this.a=f.image;this.o=[f.offsetX,f.offsetY];d=f.image.width;e?this.h=f.Ye:this.h=this.a}this.A=[h/2,h/2];this.s=[h,h];this.j=[d,d];Ug.call(this,{opacity:1,rotateWithView:!1,rotation:0,scale:1,snapToPixel:void 0!==b.snapToPixel?b.snapToPixel:!0})}M(Ei,Ug);p=Ei.prototype;p.jb=function(){return this.A};p.Ka=function(){return this.f};p.Xb=function(){return this.h};\np.T=function(){return this.a};p.rb=function(){return 2};p.wc=function(){return this.j};p.ka=function(){return this.o};p.Qa=function(){return this.s};p.va=function(){return this.b};p.Bc=pa;p.load=pa;p.Xc=pa;p.tc=function(b,c,d,e){c.setTransform(1,0,0,1,0,0);c.translate(d,e);c.beginPath();c.arc(b.size/2,b.size/2,this.c,0,2*Math.PI,!0);this.f&&(c.fillStyle=yd(this.f.ga()),c.fill());this.b&&(c.strokeStyle=b.strokeStyle,c.lineWidth=b.Wc,b.lineDash&&c.setLineDash(b.lineDash),c.stroke());c.closePath()};\np.oc=function(b,c,d,e){c.setTransform(1,0,0,1,0,0);c.translate(d,e);c.beginPath();c.arc(b.size/2,b.size/2,this.c,0,2*Math.PI,!0);c.fillStyle=vd(ui);c.fill();this.b&&(c.strokeStyle=b.strokeStyle,c.lineWidth=b.Wc,b.lineDash&&c.setLineDash(b.lineDash),c.stroke());c.closePath()};function Fi(b){b=b||{};this.f=null;this.b=Gi;void 0!==b.geometry&&Hi(this,b.geometry);this.c=void 0!==b.fill?b.fill:null;this.g=void 0!==b.image?b.image:null;this.h=void 0!==b.stroke?b.stroke:null;this.sa=void 0!==b.text?b.text:null;this.a=b.zIndex}Fi.prototype.M=function(){return this.f};Fi.prototype.Ka=function(){return this.c};Fi.prototype.T=function(){return this.g};Fi.prototype.va=function(){return this.h};\nfunction Hi(b,c){ga(c)?b.b=c:\"string\"===typeof c?b.b=function(b){return b.get(c)}:c?void 0!==c&&(b.b=function(){return c}):b.b=Gi;b.f=c}function Ii(b){if(!ga(b)){var c;c=Array.isArray(b)?b:[b];b=function(){return c}}return b}var Ji=null;function Ki(){if(!Ji){var b=new yi({color:\"rgba(255,255,255,0.4)\"}),c=new Di({color:\"#3399CC\",width:1.25});Ji=[new Fi({image:new Ei({fill:b,stroke:c,radius:5}),fill:b,stroke:c})]}return Ji}\nfunction Li(){var b={},c=[255,255,255,1],d=[0,153,255,1];b.Polygon=[new Fi({fill:new yi({color:[255,255,255,.5]})})];b.MultiPolygon=b.Polygon;b.LineString=[new Fi({stroke:new Di({color:c,width:5})}),new Fi({stroke:new Di({color:d,width:3})})];b.MultiLineString=b.LineString;b.Circle=b.Polygon.concat(b.LineString);b.Point=[new Fi({image:new Ei({radius:6,fill:new yi({color:d}),stroke:new Di({color:c,width:1.5})}),zIndex:Infinity})];b.MultiPoint=b.Point;b.GeometryCollection=b.Polygon.concat(b.LineString,\nb.Point);return b}function Gi(b){return b.M()};function Y(b){b=b?b:{};var c=Wa({},b);delete c.style;delete c.renderBuffer;delete c.updateWhileAnimating;delete c.updateWhileInteracting;Gg.call(this,c);this.a=void 0!==b.renderBuffer?b.renderBuffer:100;this.o=null;this.g=void 0;this.s(b.style);this.i=void 0!==b.updateWhileAnimating?b.updateWhileAnimating:!1;this.j=void 0!==b.updateWhileInteracting?b.updateWhileInteracting:!1}M(Y,Gg);Y.prototype.s=function(b){this.o=void 0!==b?b:Ki;this.g=null===b?void 0:Ii(this.o);this.v()};function Mi(b,c,d,e,f){this.c=b;this.u=c;this.l=d;this.w=e;this.Ja=f;this.g=this.a=this.b=this.Y=this.ba=this.S=null;this.aa=this.ja=this.o=this.D=this.K=this.B=0;this.ea=!1;this.h=this.na=0;this.za=!1;this.G=0;this.f=\"\";this.j=this.H=this.Aa=this.pa=0;this.P=this.A=this.i=null;this.s=[];this.Ba=zb()}M(Mi,Eg);\nfunction Ni(b,c,d){if(b.g){c=Ac(c,0,d,2,b.w,b.s);d=b.c;var e=b.Ba,f=d.globalAlpha;1!=b.o&&(d.globalAlpha=f*b.o);var g=b.na;b.ea&&(g+=b.Ja);var h,k;h=0;for(k=c.length;h<k;h+=2){var l=c[h]-b.B,m=c[h+1]-b.K;b.za&&(l=Math.round(l),m=Math.round(m));if(0!==g||1!=b.h){var n=l+b.B,q=m+b.K;Ig(e,n,q,b.h,b.h,g,-n,-q);d.setTransform(e[0],e[1],e[4],e[5],e[12],e[13])}d.drawImage(b.g,b.ja,b.aa,b.G,b.D,l,m,b.G,b.D)}0===g&&1==b.h||d.setTransform(1,0,0,1,0,0);1!=b.o&&(d.globalAlpha=f)}}\nfunction Oi(b,c,d,e){var f=0;if(b.P&&\"\"!==b.f){b.i&&Pi(b,b.i);b.A&&Qi(b,b.A);var g=b.P,h=b.c,k=b.Y;k?(k.font!=g.font&&(k.font=h.font=g.font),k.textAlign!=g.textAlign&&(k.textAlign=h.textAlign=g.textAlign),k.textBaseline!=g.textBaseline&&(k.textBaseline=h.textBaseline=g.textBaseline)):(h.font=g.font,h.textAlign=g.textAlign,h.textBaseline=g.textBaseline,b.Y={font:g.font,textAlign:g.textAlign,textBaseline:g.textBaseline});c=Ac(c,f,d,e,b.w,b.s);for(g=b.c;f<d;f+=e){h=c[f]+b.pa;k=c[f+1]+b.Aa;if(0!==b.H||\n1!=b.j){var l=Ig(b.Ba,h,k,b.j,b.j,b.H,-h,-k);g.setTransform(l[0],l[1],l[4],l[5],l[12],l[13])}b.A&&g.strokeText(b.f,h,k);b.i&&g.fillText(b.f,h,k)}0===b.H&&1==b.j||g.setTransform(1,0,0,1,0,0)}}function Ri(b,c,d,e,f,g){var h=b.c;b=Ac(c,d,e,f,b.w,b.s);h.moveTo(b[0],b[1]);c=b.length;g&&(c-=2);for(d=2;d<c;d+=2)h.lineTo(b[d],b[d+1]);g&&h.closePath();return e}function Si(b,c,d,e,f){var g,h;g=0;for(h=e.length;g<h;++g)d=Ri(b,c,d,e[g],f,!0);return d}p=Mi.prototype;\np.nc=function(b){if(ac(this.l,b.C())){if(this.b||this.a){this.b&&Pi(this,this.b);this.a&&Qi(this,this.a);var c;c=this.w;var d=this.s,e=b.a;c=e?Ac(e,0,e.length,b.b,c,d):null;d=c[2]-c[0];e=c[3]-c[1];d=Math.sqrt(d*d+e*e);e=this.c;e.beginPath();e.arc(c[0],c[1],d,0,2*Math.PI);this.b&&e.fill();this.a&&e.stroke()}\"\"!==this.f&&Oi(this,b.a.slice(0,b.b),2,2)}};p.$a=function(b){var c=b.a;b=b.b;this.g&&Ni(this,c,c.length);\"\"!==this.f&&Oi(this,c,c.length,b)};\np.Za=function(b){var c=b.a;b=b.b;this.g&&Ni(this,c,c.length);\"\"!==this.f&&Oi(this,c,c.length,b)};p.pc=function(b){if(ac(this.l,b.C())){if(this.a){Qi(this,this.a);var c=this.c,d=b.a;c.beginPath();Ri(this,d,0,d.length,b.b,!1);c.stroke()}\"\"!==this.f&&(b=Ti(b),Oi(this,b,2,2))}};\np.qc=function(b){var c=b.C();if(ac(this.l,c)){if(this.a){Qi(this,this.a);var c=this.c,d=b.a,e=0,f=b.ab(),g=b.b;c.beginPath();var h,k;h=0;for(k=f.length;h<k;++h)e=Ri(this,d,e,f[h],g,!1);c.stroke()}\"\"!==this.f&&(b=Ui(b),Oi(this,b,b.length,2))}};p.sc=function(b){if(ac(this.l,b.C())){if(this.a||this.b){this.b&&Pi(this,this.b);this.a&&Qi(this,this.a);var c=this.c;c.beginPath();Si(this,Vc(b),0,b.ab(),b.b);this.b&&c.fill();this.a&&c.stroke()}\"\"!==this.f&&(b=Wc(b),Oi(this,b,2,2))}};\np.rc=function(b){if(ac(this.l,b.C())){if(this.a||this.b){this.b&&Pi(this,this.b);this.a&&Qi(this,this.a);var c=this.c,d=Vi(b),e=0,f=b.c,g=b.b,h,k;h=0;for(k=f.length;h<k;++h){var l=f[h];c.beginPath();e=Si(this,d,e,l,g);this.b&&c.fill();this.a&&c.stroke()}}\"\"!==this.f&&(b=Wi(b),Oi(this,b,b.length,2))}};function Pi(b,c){var d=b.c,e=b.S;e?e.fillStyle!=c.fillStyle&&(e.fillStyle=d.fillStyle=c.fillStyle):(d.fillStyle=c.fillStyle,b.S={fillStyle:c.fillStyle})}\nfunction Qi(b,c){var d=b.c,e=b.ba;e?(e.lineCap!=c.lineCap&&(e.lineCap=d.lineCap=c.lineCap),Ef&&!Ma(e.lineDash,c.lineDash)&&d.setLineDash(e.lineDash=c.lineDash),e.lineJoin!=c.lineJoin&&(e.lineJoin=d.lineJoin=c.lineJoin),e.lineWidth!=c.lineWidth&&(e.lineWidth=d.lineWidth=c.lineWidth),e.miterLimit!=c.miterLimit&&(e.miterLimit=d.miterLimit=c.miterLimit),e.strokeStyle!=c.strokeStyle&&(e.strokeStyle=d.strokeStyle=c.strokeStyle)):(d.lineCap=c.lineCap,Ef&&d.setLineDash(c.lineDash),d.lineJoin=c.lineJoin,d.lineWidth=\nc.lineWidth,d.miterLimit=c.miterLimit,d.strokeStyle=c.strokeStyle,b.ba={lineCap:c.lineCap,lineDash:c.lineDash,lineJoin:c.lineJoin,lineWidth:c.lineWidth,miterLimit:c.miterLimit,strokeStyle:c.strokeStyle})}\np.Ga=function(b,c){if(b){var d=b.ga();this.b={fillStyle:yd(d?d:ui)}}else this.b=null;if(c){var d=c.ga(),e=c.Da,f=c.getLineDash(),g=c.Ea,h=c.ha(),k=c.Fa;this.a={lineCap:void 0!==e?e:\"round\",lineDash:f?f:vi,lineJoin:void 0!==g?g:\"round\",lineWidth:this.u*(void 0!==h?h:1),miterLimit:void 0!==k?k:10,strokeStyle:vd(d?d:wi)}}else this.a=null};\np.Ha=function(b){if(b){var c=b.jb(),d=b.T(1),e=b.ka(),f=b.Qa();this.B=c[0];this.K=c[1];this.D=f[1];this.g=d;this.o=b.l;this.ja=e[0];this.aa=e[1];this.ea=b.i;this.na=b.Z();this.h=b.gb;this.za=b.u;this.G=f[0]}else this.g=null};\np.xa=function(b){if(b){var c=b.Ka();c?(c=c.ga(),this.i={fillStyle:yd(c?c:ui)}):this.i=null;var d=b.va();if(d){var c=d.ga(),e=d.Da,f=d.getLineDash(),g=d.Ea,h=d.ha(),d=d.Fa;this.A={lineCap:void 0!==e?e:\"round\",lineDash:f?f:vi,lineJoin:void 0!==g?g:\"round\",lineWidth:void 0!==h?h:1,miterLimit:void 0!==d?d:10,strokeStyle:vd(c?c:wi)}}else this.A=null;var c=b.qd(),e=b.rd(),f=b.sd(),g=b.Z(),h=b.gb,d=b.sa,k=b.td();b=b.ud();this.P={font:void 0!==c?c:\"10px sans-serif\",textAlign:void 0!==k?k:\"center\",textBaseline:void 0!==\nb?b:\"middle\"};this.f=void 0!==d?d:\"\";this.pa=void 0!==e?this.u*e:0;this.Aa=void 0!==f?this.u*f:0;this.H=void 0!==g?g:0;this.j=this.u*(void 0!==h?h:1)}else this.f=\"\"};function Xi(b){Lg.call(this,b);this.K=zb()}M(Xi,Lg);\nXi.prototype.g=function(b,c,d){Yi(this,\"precompose\",d,b,void 0);var e=this.T();if(e){var f=c.extent,g=void 0!==f;if(g){var h=b.pixelRatio,k=b.size[0]*h,l=b.size[1]*h,m=b.viewState.rotation,n=bc(f),q=[f[2],f[3]],r=[f[2],f[1]],f=Xb(f);Kg(b.coordinateToPixelMatrix,n,n);Kg(b.coordinateToPixelMatrix,q,q);Kg(b.coordinateToPixelMatrix,r,r);Kg(b.coordinateToPixelMatrix,f,f);d.save();xi(d,-m,k/2,l/2);d.beginPath();d.moveTo(n[0]*h,n[1]*h);d.lineTo(q[0]*h,q[1]*h);d.lineTo(r[0]*h,r[1]*h);d.lineTo(f[0]*h,f[1]*\nh);d.clip();xi(d,m,k/2,l/2)}h=this.D;k=d.globalAlpha;d.globalAlpha=c.opacity;d.drawImage(e,0,0,+e.width,+e.height,Math.round(h[12]),Math.round(h[13]),Math.round(e.width*h[0]),Math.round(e.height*h[5]));d.globalAlpha=k;g&&d.restore()}Yi(this,\"postcompose\",d,b,void 0)};\nfunction Yi(b,c,d,e,f){var g=b.a;if(nb(g,c)){var h=e.size[0]*e.pixelRatio,k=e.size[1]*e.pixelRatio,l=e.viewState.rotation;xi(d,-l,h/2,k/2);b=void 0!==f?f:Zi(b,e,0);b=new Mi(d,e.pixelRatio,e.extent,b,e.viewState.rotation);S(g,new Fg(c,g,b,e,d,null));xi(d,l,h/2,k/2)}}function Zi(b,c,d){var e=c.viewState,f=c.pixelRatio;return Ig(b.K,f*c.size[0]/2,f*c.size[1]/2,f/e.resolution,-f/e.resolution,-e.rotation,-e.center[0]+d,-e.center[1])};var $i=[\"Polygon\",\"LineString\",\"Image\",\"Text\"];function aj(b,c,d){this.aa=b;this.P=c;this.c=null;this.g=0;this.resolution=d;this.D=this.K=null;this.b=[];this.coordinates=[];this.ba=zb();this.a=[];this.S=[];this.Y=zb();this.ja=zb()}M(aj,Eg);\nfunction bj(b,c,d,e,f,g){var h=b.coordinates.length,k=b.Kb(),l=[c[d],c[d+1]],m=[NaN,NaN],n=!0,q,r,u;for(q=d+f;q<e;q+=f){m[0]=c[q];m[1]=c[q+1];u=k[1];var w=k[2],y=k[3],z=m[0],D=m[1],t=0;z<k[0]?t=t|16:z>w&&(t=t|4);D<u?t|=8:D>y&&(t|=2);0===t&&(t=1);u=t;u!==r?(n&&(b.coordinates[h++]=l[0],b.coordinates[h++]=l[1]),b.coordinates[h++]=m[0],b.coordinates[h++]=m[1],n=!1):1===u?(b.coordinates[h++]=m[0],b.coordinates[h++]=m[1],n=!1):n=!0;l[0]=m[0];l[1]=m[1];r=u}q===d+f&&(b.coordinates[h++]=l[0],b.coordinates[h++]=\nl[1]);g&&(b.coordinates[h++]=c[d],b.coordinates[h++]=c[d+1]);return h}function cj(b,c){b.K=[0,c,0];b.b.push(b.K);b.D=[0,c,0];b.a.push(b.D)}\nfunction dj(b,c,d,e,f,g,h,k,l){var m;Jg(e,b.ba)?m=b.S:(m=Ac(b.coordinates,0,b.coordinates.length,2,e,b.S),Cb(b.ba,e));e=!$a(g);var n=0,q=h.length,r=0,u,w=b.Y;b=b.ja;for(var y,z,D,t;n<q;){var v=h[n],B,E,C,G;switch(v[0]){case 0:r=v[1];e&&g[I(r).toString()]||!r.M()?n=v[2]:void 0===l||ac(l,r.M().C())?++n:n=v[2];break;case 1:c.beginPath();++n;break;case 2:r=v[1];u=m[r];v=m[r+1];D=m[r+2]-u;r=m[r+3]-v;c.arc(u,v,Math.sqrt(D*D+r*r),0,2*Math.PI,!0);++n;break;case 3:c.closePath();++n;break;case 4:r=v[1];u=v[2];\nB=v[3];C=v[4]*d;var J=v[5]*d,A=v[6];E=v[7];var H=v[8],O=v[9];D=v[11];t=v[12];var P=v[13],L=v[14];for(v[10]&&(D+=f);r<u;r+=2){v=m[r]-C;G=m[r+1]-J;P&&(v=Math.round(v),G=Math.round(G));if(1!=t||0!==D){var K=v+C,fa=G+J;Ig(w,K,fa,t,t,D,-K,-fa);c.transform(w[0],w[1],w[4],w[5],w[12],w[13])}K=c.globalAlpha;1!=E&&(c.globalAlpha=K*E);var fa=L+H>B.width?B.width-H:L,ra=A+O>B.height?B.height-O:A;c.drawImage(B,H,O,fa,ra,v,G,fa*d,ra*d);1!=E&&(c.globalAlpha=K);if(1!=t||0!==D)Eb(w,b),c.transform(b[0],b[1],b[4],b[5],\nb[12],b[13])}++n;break;case 5:r=v[1];u=v[2];C=v[3];J=v[4]*d;A=v[5]*d;D=v[6];t=v[7]*d;B=v[8];for(E=v[9];r<u;r+=2){v=m[r]+J;G=m[r+1]+A;if(1!=t||0!==D)Ig(w,v,G,t,t,D,-v,-G),c.transform(w[0],w[1],w[4],w[5],w[12],w[13]);H=C.split(\"\\n\");O=H.length;1<O?(P=Math.round(1.5*c.measureText(\"M\").width),G-=(O-1)/2*P):P=0;for(L=0;L<O;L++)K=H[L],E&&c.strokeText(K,v,G),B&&c.fillText(K,v,G),G+=P;if(1!=t||0!==D)Eb(w,b),c.transform(b[0],b[1],b[4],b[5],b[12],b[13])}++n;break;case 6:if(void 0!==k&&(r=v[1],r=k(r)))return r;\n++n;break;case 7:c.fill();++n;break;case 8:r=v[1];u=v[2];v=m[r];G=m[r+1];D=v+.5|0;t=G+.5|0;if(D!==y||t!==z)c.moveTo(v,G),y=D,z=t;for(r+=2;r<u;r+=2)if(v=m[r],G=m[r+1],D=v+.5|0,t=G+.5|0,D!==y||t!==z)c.lineTo(v,G),y=D,z=t;++n;break;case 9:c.fillStyle=v[1];++n;break;case 10:y=void 0!==v[7]?v[7]:!0;z=v[2];c.strokeStyle=v[1];c.lineWidth=y?z*d:z;c.lineCap=v[3];c.lineJoin=v[4];c.miterLimit=v[5];Ef&&c.setLineDash(v[6]);z=y=NaN;++n;break;case 11:c.font=v[1];c.textAlign=v[2];c.textBaseline=v[3];++n;break;case 12:c.stroke();\n++n;break;default:++n}}}function ej(b){var c=b.a;c.reverse();var d,e=c.length,f,g,h=-1;for(d=0;d<e;++d)if(f=c[d],g=f[0],6==g)h=d;else if(0==g){f[2]=d;f=b.a;for(g=d;h<g;){var k=f[h];f[h]=f[g];f[g]=k;++h;--g}h=-1}}function fj(b,c){b.K[2]=b.b.length;b.K=null;b.D[2]=b.a.length;b.D=null;var d=[6,c];b.b.push(d);b.a.push(d)}aj.prototype.qb=pa;aj.prototype.Kb=function(){return this.P};\nfunction gj(b,c,d){aj.call(this,b,c,d);this.i=this.G=null;this.B=this.w=this.H=this.u=this.s=this.o=this.A=this.j=this.l=this.h=this.f=void 0}M(gj,aj);gj.prototype.$a=function(b,c){if(this.i){cj(this,c);var d=b.a,e=this.coordinates.length,d=bj(this,d,0,d.length,b.b,!1);this.b.push([4,e,d,this.i,this.f,this.h,this.l,this.j,this.A,this.o,this.s,this.u,this.H,this.w,this.B]);this.a.push([4,e,d,this.G,this.f,this.h,this.l,this.j,this.A,this.o,this.s,this.u,this.H,this.w,this.B]);fj(this,c)}};\ngj.prototype.Za=function(b,c){if(this.i){cj(this,c);var d=b.a,e=this.coordinates.length,d=bj(this,d,0,d.length,b.b,!1);this.b.push([4,e,d,this.i,this.f,this.h,this.l,this.j,this.A,this.o,this.s,this.u,this.H,this.w,this.B]);this.a.push([4,e,d,this.G,this.f,this.h,this.l,this.j,this.A,this.o,this.s,this.u,this.H,this.w,this.B]);fj(this,c)}};gj.prototype.qb=function(){ej(this);this.h=this.f=void 0;this.i=this.G=null;this.B=this.w=this.u=this.s=this.o=this.A=this.j=this.H=this.l=void 0};\ngj.prototype.Ha=function(b){var c=b.jb(),d=b.Qa(),e=b.Xb(1),f=b.T(1),g=b.ka();this.f=c[0];this.h=c[1];this.G=e;this.i=f;this.l=d[1];this.j=b.l;this.A=g[0];this.o=g[1];this.s=b.i;this.u=b.Z();this.H=b.gb;this.w=b.u;this.B=d[0]};function hj(b,c,d){aj.call(this,b,c,d);this.f={Ya:void 0,Ta:void 0,Ua:null,Va:void 0,Wa:void 0,Xa:void 0,Sb:0,strokeStyle:void 0,lineCap:void 0,lineDash:null,lineJoin:void 0,lineWidth:void 0,miterLimit:void 0}}M(hj,aj);\nfunction ij(b,c,d,e,f){var g=b.coordinates.length;c=bj(b,c,d,e,f,!1);g=[8,g,c];b.b.push(g);b.a.push(g);return e}p=hj.prototype;p.Kb=function(){this.c||(this.c=Mb(this.P),0<this.g&&Lb(this.c,this.resolution*(this.g+1)/2,this.c));return this.c};\nfunction jj(b){var c=b.f,d=c.strokeStyle,e=c.lineCap,f=c.lineDash,g=c.lineJoin,h=c.lineWidth,k=c.miterLimit;c.Ya==d&&c.Ta==e&&Ma(c.Ua,f)&&c.Va==g&&c.Wa==h&&c.Xa==k||(c.Sb!=b.coordinates.length&&(b.b.push([12]),c.Sb=b.coordinates.length),b.b.push([10,d,h,e,g,k,f],[1]),c.Ya=d,c.Ta=e,c.Ua=f,c.Va=g,c.Wa=h,c.Xa=k)}\np.pc=function(b,c){var d=this.f,e=d.lineWidth;void 0!==d.strokeStyle&&void 0!==e&&(jj(this),cj(this,c),this.a.push([10,d.strokeStyle,d.lineWidth,d.lineCap,d.lineJoin,d.miterLimit,d.lineDash],[1]),d=b.a,ij(this,d,0,d.length,b.b),this.a.push([12]),fj(this,c))};\np.qc=function(b,c){var d=this.f,e=d.lineWidth;if(void 0!==d.strokeStyle&&void 0!==e){jj(this);cj(this,c);this.a.push([10,d.strokeStyle,d.lineWidth,d.lineCap,d.lineJoin,d.miterLimit,d.lineDash],[1]);var d=b.ab(),e=b.a,f=b.b,g=0,h,k;h=0;for(k=d.length;h<k;++h)g=ij(this,e,g,d[h],f);this.a.push([12]);fj(this,c)}};p.qb=function(){this.f.Sb!=this.coordinates.length&&this.b.push([12]);ej(this);this.f=null};\np.Ga=function(b,c){var d=c.ga();this.f.strokeStyle=vd(d?d:wi);d=c.Da;this.f.lineCap=void 0!==d?d:\"round\";d=c.getLineDash();this.f.lineDash=d?d:vi;d=c.Ea;this.f.lineJoin=void 0!==d?d:\"round\";d=c.ha();this.f.lineWidth=void 0!==d?d:1;d=c.Fa;this.f.miterLimit=void 0!==d?d:10;this.f.lineWidth>this.g&&(this.g=this.f.lineWidth,this.c=null)};\nfunction kj(b,c,d){aj.call(this,b,c,d);this.f={mc:void 0,Ya:void 0,Ta:void 0,Ua:null,Va:void 0,Wa:void 0,Xa:void 0,fillStyle:void 0,strokeStyle:void 0,lineCap:void 0,lineDash:null,lineJoin:void 0,lineWidth:void 0,miterLimit:void 0}}M(kj,aj);\nfunction lj(b,c,d,e,f){var g=b.f,h=[1];b.b.push(h);b.a.push(h);var k,h=0;for(k=e.length;h<k;++h){var l=e[h],m=b.coordinates.length;d=bj(b,c,d,l,f,!0);d=[8,m,d];m=[3];b.b.push(d,m);b.a.push(d,m);d=l}c=[7];b.a.push(c);void 0!==g.fillStyle&&b.b.push(c);void 0!==g.strokeStyle&&(g=[12],b.b.push(g),b.a.push(g));return d}p=kj.prototype;\np.nc=function(b,c){var d=this.f,e=d.strokeStyle;if(void 0!==d.fillStyle||void 0!==e){mj(this);cj(this,c);this.a.push([9,vd(ui)]);void 0!==d.strokeStyle&&this.a.push([10,d.strokeStyle,d.lineWidth,d.lineCap,d.lineJoin,d.miterLimit,d.lineDash]);var f=b.a,e=this.coordinates.length;bj(this,f,0,f.length,b.b,!1);f=[1];e=[2,e];this.b.push(f,e);this.a.push(f,e);e=[7];this.a.push(e);void 0!==d.fillStyle&&this.b.push(e);void 0!==d.strokeStyle&&(d=[12],this.b.push(d),this.a.push(d));fj(this,c)}};\np.sc=function(b,c){var d=this.f,e=d.strokeStyle;if(void 0!==d.fillStyle||void 0!==e)mj(this),cj(this,c),this.a.push([9,vd(ui)]),void 0!==d.strokeStyle&&this.a.push([10,d.strokeStyle,d.lineWidth,d.lineCap,d.lineJoin,d.miterLimit,d.lineDash]),d=b.ab(),e=Vc(b),lj(this,e,0,d,b.b),fj(this,c)};\np.rc=function(b,c){var d=this.f,e=d.strokeStyle;if(void 0!==d.fillStyle||void 0!==e){mj(this);cj(this,c);this.a.push([9,vd(ui)]);void 0!==d.strokeStyle&&this.a.push([10,d.strokeStyle,d.lineWidth,d.lineCap,d.lineJoin,d.miterLimit,d.lineDash]);var d=b.c,e=Vi(b),f=b.b,g=0,h,k;h=0;for(k=d.length;h<k;++h)g=lj(this,e,g,d[h],f);fj(this,c)}};p.qb=function(){ej(this);this.f=null;var b=this.aa;if(0!==b){var c=this.coordinates,d,e;d=0;for(e=c.length;d<e;++d)c[d]=b*Math.round(c[d]/b)}};\np.Kb=function(){this.c||(this.c=Mb(this.P),0<this.g&&Lb(this.c,this.resolution*(this.g+1)/2,this.c));return this.c};\np.Ga=function(b,c){var d=this.f;if(b){var e=b.ga();d.fillStyle=yd(e?e:ui)}else d.fillStyle=void 0;c?(e=c.ga(),d.strokeStyle=vd(e?e:wi),e=c.Da,d.lineCap=void 0!==e?e:\"round\",e=c.getLineDash(),d.lineDash=e?e.slice():vi,e=c.Ea,d.lineJoin=void 0!==e?e:\"round\",e=c.ha(),d.lineWidth=void 0!==e?e:1,e=c.Fa,d.miterLimit=void 0!==e?e:10,d.lineWidth>this.g&&(this.g=d.lineWidth,this.c=null)):(d.strokeStyle=void 0,d.lineCap=void 0,d.lineDash=null,d.lineJoin=void 0,d.lineWidth=void 0,d.miterLimit=void 0)};\nfunction mj(b){var c=b.f,d=c.fillStyle,e=c.strokeStyle,f=c.lineCap,g=c.lineDash,h=c.lineJoin,k=c.lineWidth,l=c.miterLimit;void 0!==d&&c.mc!=d&&(b.b.push([9,d]),c.mc=c.fillStyle);void 0===e||c.Ya==e&&c.Ta==f&&c.Ua==g&&c.Va==h&&c.Wa==k&&c.Xa==l||(b.b.push([10,e,k,f,h,l,g]),c.Ya=e,c.Ta=f,c.Ua=g,c.Va=h,c.Wa=k,c.Xa=l)}function nj(b,c,d){aj.call(this,b,c,d);this.w=this.H=this.u=null;this.i=\"\";this.s=this.o=this.A=this.j=0;this.l=this.h=this.f=null}M(nj,aj);\nfunction oj(b,c,d,e,f){if(\"\"!==b.i&&b.l&&(b.f||b.h)){if(b.f){var g=b.f,h=b.u;if(!h||h.fillStyle!=g.fillStyle){var k=[9,g.fillStyle];b.b.push(k);b.a.push(k);h?h.fillStyle=g.fillStyle:b.u={fillStyle:g.fillStyle}}}b.h&&(g=b.h,h=b.H,h&&h.lineCap==g.lineCap&&h.lineDash==g.lineDash&&h.lineJoin==g.lineJoin&&h.lineWidth==g.lineWidth&&h.miterLimit==g.miterLimit&&h.strokeStyle==g.strokeStyle||(k=[10,g.strokeStyle,g.lineWidth,g.lineCap,g.lineJoin,g.miterLimit,g.lineDash,!1],b.b.push(k),b.a.push(k),h?(h.lineCap=\ng.lineCap,h.lineDash=g.lineDash,h.lineJoin=g.lineJoin,h.lineWidth=g.lineWidth,h.miterLimit=g.miterLimit,h.strokeStyle=g.strokeStyle):b.H={lineCap:g.lineCap,lineDash:g.lineDash,lineJoin:g.lineJoin,lineWidth:g.lineWidth,miterLimit:g.miterLimit,strokeStyle:g.strokeStyle}));g=b.l;h=b.w;h&&h.font==g.font&&h.textAlign==g.textAlign&&h.textBaseline==g.textBaseline||(k=[11,g.font,g.textAlign,g.textBaseline],b.b.push(k),b.a.push(k),h?(h.font=g.font,h.textAlign=g.textAlign,h.textBaseline=g.textBaseline):b.w=\n{font:g.font,textAlign:g.textAlign,textBaseline:g.textBaseline});cj(b,f);g=b.coordinates.length;c=bj(b,c,0,d,e,!1);c=[5,g,c,b.i,b.j,b.A,b.o,b.s,!!b.f,!!b.h];b.b.push(c);b.a.push(c);fj(b,f)}}\nnj.prototype.xa=function(b){if(b){var c=b.Ka();c?(c=c.ga(),c=yd(c?c:ui),this.f?this.f.fillStyle=c:this.f={fillStyle:c}):this.f=null;var d=b.va();if(d){var c=d.ga(),e=d.Da,f=d.getLineDash(),g=d.Ea,h=d.ha(),d=d.Fa,e=void 0!==e?e:\"round\",f=f?f.slice():vi,g=void 0!==g?g:\"round\",h=void 0!==h?h:1,d=void 0!==d?d:10,c=vd(c?c:wi);if(this.h){var k=this.h;k.lineCap=e;k.lineDash=f;k.lineJoin=g;k.lineWidth=h;k.miterLimit=d;k.strokeStyle=c}else this.h={lineCap:e,lineDash:f,lineJoin:g,lineWidth:h,miterLimit:d,strokeStyle:c}}else this.h=\nnull;var l=b.qd(),c=b.rd(),e=b.sd(),f=b.Z(),h=b.gb,d=b.sa,g=b.td(),k=b.ud();b=void 0!==l?l:\"10px sans-serif\";g=void 0!==g?g:\"center\";k=void 0!==k?k:\"middle\";this.l?(l=this.l,l.font=b,l.textAlign=g,l.textBaseline=k):this.l={font:b,textAlign:g,textBaseline:k};this.i=void 0!==d?d:\"\";this.j=void 0!==c?c:0;this.A=void 0!==e?e:0;this.o=void 0!==f?f:0;this.s=void 0!==h?h:1}else this.i=\"\"};function pj(b,c,d,e){this.o=b;this.h=c;this.A=d;this.l=e;this.b={};this.i=rf(1,1);this.j=zb()}\nfunction qj(b){for(var c in b.b){var d=b.b[c],e;for(e in d)d[e].qb()}}pj.prototype.g=function(b,c,d,e,f){var g=this.j;Ig(g,.5,.5,1/c,-1/c,-d,-b[0],-b[1]);var h=this.i;h.clearRect(0,0,1,1);var k;void 0!==this.l&&(k=Jb(),Kb(k,b),Lb(k,c*this.l,k));return rj(this,h,g,d,e,function(b){if(0<h.getImageData(0,0,1,1).data[3]){if(b=f(b))return b;h.clearRect(0,0,1,1)}},k)};\npj.prototype.a=function(b,c){var d=void 0!==b?b.toString():\"0\",e=this.b[d];void 0===e&&(e={},this.b[d]=e);d=e[c];void 0===d&&(d=new sj[c](this.o,this.h,this.A),e[c]=d);return d};pj.prototype.c=function(){return $a(this.b)};\npj.prototype.f=function(b,c,d,e,f,g){var h=Object.keys(this.b).map(Number);h.sort(Ha);if(!1!==g){var k=this.h;g=k[0];var l=k[1],m=k[2],k=k[3];g=[g,l,g,k,m,k,m,l];Ac(g,0,8,2,d,g);b.save();b.beginPath();b.moveTo(g[0],g[1]);b.lineTo(g[2],g[3]);b.lineTo(g[4],g[5]);b.lineTo(g[6],g[7]);b.closePath();b.clip()}var n,q;g=0;for(l=h.length;g<l;++g)for(n=this.b[h[g].toString()],m=0,k=$i.length;m<k;++m)q=n[$i[m]],void 0!==q&&dj(q,b,c,d,e,f,q.b,void 0);b.restore()};\nfunction rj(b,c,d,e,f,g,h){var k=Object.keys(b.b).map(Number);k.sort(function(b,c){return c-b});var l,m,n,q,r;l=0;for(m=k.length;l<m;++l)for(q=b.b[k[l].toString()],n=$i.length-1;0<=n;--n)if(r=q[$i[n]],void 0!==r&&(r=dj(r,c,1,d,e,f,r.a,g,h)))return r}var sj={Image:gj,LineString:hj,Polygon:kj,Text:nj};function tj(b,c){return I(b)-I(c)}function uj(b,c){var d=.5*b/c;return d*d}function vj(b,c,d,e,f,g){var h=!1,k,l;if(k=d.T())l=k.rb(),2==l||3==l?k.Xc(f,g):(0==l&&k.load(),k.Bc(f,g),h=!0);if(f=(0,d.b)(c))e=f.Ob(e),(0,wj[e.U()])(b,e,d,c);return h}\nvar wj={Point:function(b,c,d,e){var f=d.T();if(f){if(2!=f.rb())return;var g=b.a(d.a,\"Image\");g.Ha(f);g.$a(c,e)}if(f=d.sa)b=b.a(d.a,\"Text\"),b.xa(f),oj(b,c.a,2,2,e)},LineString:function(b,c,d,e){var f=d.va();if(f){var g=b.a(d.a,\"LineString\");g.Ga(null,f);g.pc(c,e)}if(f=d.sa)b=b.a(d.a,\"Text\"),b.xa(f),oj(b,Ti(c),2,2,e)},Polygon:function(b,c,d,e){var f=d.Ka(),g=d.va();if(f||g){var h=b.a(d.a,\"Polygon\");h.Ga(f,g);h.sc(c,e)}if(f=d.sa)b=b.a(d.a,\"Text\"),b.xa(f),oj(b,Wc(c),2,2,e)},MultiPoint:function(b,c,d,\ne){var f=d.T();if(f){if(2!=f.rb())return;var g=b.a(d.a,\"Image\");g.Ha(f);g.Za(c,e)}if(f=d.sa)b=b.a(d.a,\"Text\"),b.xa(f),d=c.a,oj(b,d,d.length,c.b,e)},MultiLineString:function(b,c,d,e){var f=d.va();if(f){var g=b.a(d.a,\"LineString\");g.Ga(null,f);g.qc(c,e)}if(f=d.sa)b=b.a(d.a,\"Text\"),b.xa(f),c=Ui(c),oj(b,c,c.length,2,e)},MultiPolygon:function(b,c,d,e){var f=d.Ka(),g=d.va();if(g||f){var h=b.a(d.a,\"Polygon\");h.Ga(f,g);h.rc(c,e)}if(f=d.sa)b=b.a(d.a,\"Text\"),b.xa(f),c=Wi(c),oj(b,c,c.length,2,e)},GeometryCollection:function(b,\nc,d,e){c=c.a;var f,g;f=0;for(g=c.length;f<g;++f)(0,wj[c[f].U()])(b,c[f],d,e)},Circle:function(b,c,d,e){var f=d.Ka(),g=d.va();if(f||g){var h=b.a(d.a,\"Polygon\");h.Ga(f,g);h.nc(c,e)}if(f=d.sa)b=b.a(d.a,\"Text\"),b.xa(f),oj(b,c.a.slice(0,c.b),2,2,e)}};var xj=!((W(\"Chrome\")||W(\"CriOS\"))&&!W(\"Opera\")&&!W(\"OPR\")&&!W(\"Edge\"))||W(\"iPhone\")&&!W(\"iPod\")&&!W(\"iPad\")||W(\"iPad\")||W(\"iPod\");function yj(b,c,d,e){b=d-b;c=e-c;var f=Math.sqrt(b*b+c*c);return[Math.round(d+b/f),Math.round(e+c/f)]}\nfunction zj(b,c,d,e,f,g,h,k,l,m,n){var q=rf(Math.round(d*b),Math.round(d*c));if(0===l.length)return q.canvas;q.scale(d,d);var r=Jb();l.forEach(function(b){Sb(r,b.extent)});var u=rf(Math.round(d*Vb(r)/e),Math.round(d*Wb(r)/e)),w=d/e;l.forEach(function(b){u.drawImage(b.image,m,m,b.image.width-2*m,b.image.height-2*m,(b.extent[0]-r[0])*w,-(b.extent[3]-r[3])*w,Vb(b.extent)*w,Wb(b.extent)*w)});var y=bc(h);k.c.forEach(function(b){var c=b.source,f=b.target,h=c[1][0],k=c[1][1],l=c[2][0],m=c[2][1];b=(f[0][0]-\ny[0])/g;var w=-(f[0][1]-y[1])/g,n=(f[1][0]-y[0])/g,A=-(f[1][1]-y[1])/g,H=(f[2][0]-y[0])/g,O=-(f[2][1]-y[1])/g,f=c[0][0],c=c[0][1],h=h-f,k=k-c,l=l-f,m=m-c;a:{h=[[h,k,0,0,n-b],[l,m,0,0,H-b],[0,0,h,k,A-w],[0,0,l,m,O-w]];k=h.length;for(l=0;l<k;l++){for(var m=l,P=Math.abs(h[l][l]),L=l+1;L<k;L++){var K=Math.abs(h[L][l]);K>P&&(P=K,m=L)}if(0===P){h=null;break a}P=h[m];h[m]=h[l];h[l]=P;for(m=l+1;m<k;m++)for(P=-h[m][l]/h[l][l],L=l;L<k+1;L++)h[m][L]=l==L?0:h[m][L]+P*h[l][L]}l=Array(k);for(m=k-1;0<=m;m--)for(l[m]=\nh[m][k]/h[m][m],P=m-1;0<=P;P--)h[P][k]-=h[P][m]*l[m];h=l}h&&(q.save(),q.beginPath(),xj?(l=(b+n+H)/3,m=(w+A+O)/3,k=yj(l,m,b,w),n=yj(l,m,n,A),H=yj(l,m,H,O),q.moveTo(k[0],k[1]),q.lineTo(n[0],n[1]),q.lineTo(H[0],H[1])):(q.moveTo(b,w),q.lineTo(n,A),q.lineTo(H,O)),q.closePath(),q.clip(),q.transform(h[0],h[2],h[1],h[3],b,w),q.translate(r[0]-f,r[3]-c),q.scale(e/d,-e/d),q.drawImage(u.canvas,0,0),q.restore())});n&&(q.save(),q.strokeStyle=\"black\",q.lineWidth=1,k.c.forEach(function(b){var c=b.target;b=(c[0][0]-\ny[0])/g;var d=-(c[0][1]-y[1])/g,e=(c[1][0]-y[0])/g,f=-(c[1][1]-y[1])/g,h=(c[2][0]-y[0])/g,c=-(c[2][1]-y[1])/g;q.beginPath();q.moveTo(b,d);q.lineTo(e,f);q.lineTo(h,c);q.closePath();q.stroke()}),q.restore());return q.canvas};function Aj(b,c,d,e,f){this.f=b;this.g=c;var g={},h=xc(this.g,this.f);this.b=function(b){var c=b[0]+\"/\"+b[1];g[c]||(g[c]=h(b));return g[c]};this.h=e;this.A=f*f;this.c=[];this.i=!1;this.j=this.f.a&&!!e&&!!this.f.C()&&Vb(e)==Vb(this.f.C());this.a=this.f.C()?Vb(this.f.C()):null;this.l=this.g.C()?Vb(this.g.C()):null;b=bc(d);c=[d[2],d[3]];e=[d[2],d[1]];d=Xb(d);f=this.b(b);var k=this.b(c),l=this.b(e),m=this.b(d);Bj(this,b,c,e,d,f,k,l,m,10);if(this.i){var n=Infinity;this.c.forEach(function(b){n=Math.min(n,\nb.source[0][0],b.source[1][0],b.source[2][0])});this.c.forEach(function(b){if(Math.max(b.source[0][0],b.source[1][0],b.source[2][0])-n>this.a/2){var c=[[b.source[0][0],b.source[0][1]],[b.source[1][0],b.source[1][1]],[b.source[2][0],b.source[2][1]]];c[0][0]-n>this.a/2&&(c[0][0]-=this.a);c[1][0]-n>this.a/2&&(c[1][0]-=this.a);c[2][0]-n>this.a/2&&(c[2][0]-=this.a);Math.max(c[0][0],c[1][0],c[2][0])-Math.min(c[0][0],c[1][0],c[2][0])<this.a/2&&(b.source=c)}},this)}g={}}\nfunction Bj(b,c,d,e,f,g,h,k,l,m){var n=Ib([g,h,k,l]),q=b.a?Vb(n)/b.a:null,r=b.f.a&&.5<q&&1>q,u=!1;if(0<m){if(b.g.f&&b.l)var w=Ib([c,d,e,f]),u=u|.25<Vb(w)/b.l;!r&&b.f.f&&q&&(u|=.25<q)}if(u||!b.h||ac(n,b.h)){if(!(u||isFinite(g[0])&&isFinite(g[1])&&isFinite(h[0])&&isFinite(h[1])&&isFinite(k[0])&&isFinite(k[1])&&isFinite(l[0])&&isFinite(l[1])))if(0<m)u=!0;else return;if(0<m&&(u||(q=b.b([(c[0]+e[0])/2,(c[1]+e[1])/2]),n=r?(Ea(g[0],b.a)+Ea(k[0],b.a))/2-Ea(q[0],b.a):(g[0]+k[0])/2-q[0],q=(g[1]+k[1])/2-q[1],\nu=n*n+q*q>b.A),u)){Math.abs(c[0]-e[0])<=Math.abs(c[1]-e[1])?(r=[(d[0]+e[0])/2,(d[1]+e[1])/2],n=b.b(r),q=[(f[0]+c[0])/2,(f[1]+c[1])/2],u=b.b(q),Bj(b,c,d,r,q,g,h,n,u,m-1),Bj(b,q,r,e,f,u,n,k,l,m-1)):(r=[(c[0]+d[0])/2,(c[1]+d[1])/2],n=b.b(r),q=[(e[0]+f[0])/2,(e[1]+f[1])/2],u=b.b(q),Bj(b,c,r,q,f,g,n,u,l,m-1),Bj(b,r,d,e,q,n,h,k,u,m-1));return}if(r){if(!b.j)return;b.i=!0}b.c.push({source:[g,k,l],target:[c,e,f]});b.c.push({source:[g,h,k],target:[c,d,e]})}}\nfunction Cj(b){var c=Jb();b.c.forEach(function(b){b=b.source;Kb(c,b[0]);Kb(c,b[1]);Kb(c,b[2])});return c};function Dj(b){T.call(this);this.g=void 0;this.a=\"geometry\";this.h=null;this.c=void 0;this.b=null;Q(this,rb(this.a),this.nb,this);void 0!==b&&(b instanceof zc||!b?Ej(this,b):this.l(b))}M(Dj,T);p=Dj.prototype;p.clone=function(){var b=new Dj(this.za());Fj(b,this.a);var c=this.M();c&&Ej(b,c.clone());if(c=this.h)b.h=c,b.c=c?Gj(c):void 0,b.v();return b};p.M=function(){return this.get(this.a)};p.La=function(){return this.g};p.zd=function(){this.v()};\np.nb=function(){this.b&&(N(this.b),this.b=null);var b=this.M();b&&(this.b=Q(b,\"change\",this.zd,this));this.v()};function Ej(b,c){b.set(b.a,c)}function Fj(b,c){gb(b,rb(b.a),b.nb,b);b.a=c;Q(b,rb(b.a),b.nb,b);b.nb()}function Gj(b){if(!ga(b)){var c;c=Array.isArray(b)?b:[b];b=function(){return c}}return b};function Hj(b,c,d){return function(e,f,g){var h=new XMLHttpRequest;h.open(\"GET\",ga(b)?b(e,f,g):b,!0);\"arraybuffer\"==c.U()&&(h.responseType=\"arraybuffer\");h.onload=function(){if(200<=h.status&&300>h.status){var b=c.U(),e;\"json\"==b||\"text\"==b?e=h.responseText:\"xml\"==b?(e=h.responseXML,e||(b=h.responseText,e=(new DOMParser).parseFromString(b,\"application/xml\"))):\"arraybuffer\"==b&&(e=h.response);e&&d.call(this,c.b(e,{featureProjection:g}),c.f(Ij(e)))}}.bind(this);h.send()}}\nfunction Jj(b,c){return Hj(b,c,function(b){this.Db(b)})};function Kj(){return[[-Infinity,-Infinity,Infinity,Infinity]]};var Lj;\n(function(){var b={uc:{}};(function(){function c(b,d){if(!(this instanceof c))return new c(b,d);this.Bb=Math.max(4,b||9);this.ec=Math.max(2,Math.ceil(.4*this.Bb));d&&this.ed(d);this.clear()}function d(b,c){b.bbox=e(b,0,b.children.length,c)}function e(b,c,d,e){for(var g=[Infinity,Infinity,-Infinity,-Infinity],h;c<d;c++)h=b.children[c],f(g,b.$?e(h):h.bbox);return g}function f(b,c){b[0]=Math.min(b[0],c[0]);b[1]=Math.min(b[1],c[1]);b[2]=Math.max(b[2],c[2]);b[3]=Math.max(b[3],c[3])}function g(b,c){return b.bbox[0]-\nc.bbox[0]}function h(b,c){return b.bbox[1]-c.bbox[1]}function k(b){return(b[2]-b[0])*(b[3]-b[1])}function l(b){return b[2]-b[0]+(b[3]-b[1])}function m(b,c){return b[0]<=c[0]&&b[1]<=c[1]&&c[2]<=b[2]&&c[3]<=b[3]}function n(b,c){return c[0]<=b[2]&&c[1]<=b[3]&&c[2]>=b[0]&&c[3]>=b[1]}function q(b,c,d,e,f){for(var g=[c,d],h;g.length;)d=g.pop(),c=g.pop(),d-c<=e||(h=c+Math.ceil((d-c)/e/2)*e,r(b,c,d,h,f),g.push(c,h,h,d))}function r(b,c,d,e,f){for(var g,h,k,l,m;d>c;){600<d-c&&(g=d-c+1,h=e-c+1,k=Math.log(g),\nl=.5*Math.exp(2*k/3),m=.5*Math.sqrt(k*l*(g-l)/g)*(0>h-g/2?-1:1),k=Math.max(c,Math.floor(e-h*l/g+m)),h=Math.min(d,Math.floor(e+(g-h)*l/g+m)),r(b,k,h,e,f));g=b[e];h=c;l=d;u(b,c,e);for(0<f(b[d],g)&&u(b,c,d);h<l;){u(b,h,l);h++;for(l--;0>f(b[h],g);)h++;for(;0<f(b[l],g);)l--}0===f(b[c],g)?u(b,c,l):(l++,u(b,l,d));l<=e&&(c=l+1);e<=l&&(d=l-1)}}function u(b,c,d){var e=b[c];b[c]=b[d];b[d]=e}c.prototype={all:function(){return this.ac(this.data,[])},search:function(b){var c=this.data,d=[],e=this.da;if(!n(b,c.bbox))return d;\nfor(var f=[],g,h,k,l;c;){g=0;for(h=c.children.length;g<h;g++)k=c.children[g],l=c.$?e(k):k.bbox,n(b,l)&&(c.$?d.push(k):m(b,l)?this.ac(k,d):f.push(k));c=f.pop()}return d},load:function(b){if(!b||!b.length)return this;if(b.length<this.ec){for(var c=0,d=b.length;c<d;c++)this.Ca(b[c]);return this}b=this.cc(b.slice(),0,b.length-1,0);this.data.children.length?this.data.height===b.height?this.fc(this.data,b):(this.data.height<b.height&&(c=this.data,this.data=b,b=c),this.dc(b,this.data.height-b.height-1,!0)):\nthis.data=b;return this},Ca:function(b){b&&this.dc(b,this.data.height-1);return this},clear:function(){this.data={children:[],height:1,bbox:[Infinity,Infinity,-Infinity,-Infinity],$:!0};return this},remove:function(b){if(!b)return this;for(var c=this.data,d=this.da(b),e=[],f=[],g,h,k,l;c||e.length;){c||(c=e.pop(),h=e[e.length-1],g=f.pop(),l=!0);if(c.$&&(k=c.children.indexOf(b),-1!==k)){c.children.splice(k,1);e.push(c);this.dd(e);break}l||c.$||!m(c.bbox,d)?h?(g++,c=h.children[g],l=!1):c=null:(e.push(c),\nf.push(g),g=0,h=c,c=c.children[0])}return this},da:function(b){return b},Hb:function(b,c){return b[0]-c[0]},Ib:function(b,c){return b[1]-c[1]},toJSON:function(){return this.data},ac:function(b,c){for(var d=[];b;)b.$?c.push.apply(c,b.children):d.push.apply(d,b.children),b=d.pop();return c},cc:function(b,c,e,f){var g=e-c+1,h=this.Bb,k;if(g<=h)return k={children:b.slice(c,e+1),height:1,bbox:null,$:!0},d(k,this.da),k;f||(f=Math.ceil(Math.log(g)/Math.log(h)),h=Math.ceil(g/Math.pow(h,f-1)));k={children:[],\nheight:f,bbox:null,$:!1};var g=Math.ceil(g/h),h=g*Math.ceil(Math.sqrt(h)),l,m,n;for(q(b,c,e,h,this.Hb);c<=e;c+=h)for(m=Math.min(c+h-1,e),q(b,c,m,g,this.Ib),l=c;l<=m;l+=g)n=Math.min(l+g-1,m),k.children.push(this.cc(b,l,n,f-1));d(k,this.da);return k},cd:function(b,c,d,e){for(var f,g,h,l,m,n,q,r;;){e.push(c);if(c.$||e.length-1===d)break;q=r=Infinity;f=0;for(g=c.children.length;f<g;f++)h=c.children[f],m=k(h.bbox),n=h.bbox,n=(Math.max(n[2],b[2])-Math.min(n[0],b[0]))*(Math.max(n[3],b[3])-Math.min(n[1],\nb[1]))-m,n<r?(r=n,q=m<q?m:q,l=h):n===r&&m<q&&(q=m,l=h);c=l}return c},dc:function(b,c,d){var e=this.da;d=d?b.bbox:e(b);var e=[],g=this.cd(d,this.data,c,e);g.children.push(b);for(f(g.bbox,d);0<=c;)if(e[c].children.length>this.Bb)this.fd(e,c),c--;else break;this.$c(d,e,c)},fd:function(b,c){var e=b[c],f=e.children.length,g=this.ec;this.ad(e,g,f);f=this.bd(e,g,f);f={children:e.children.splice(f,e.children.length-f),height:e.height,bbox:null,$:!1};e.$&&(f.$=!0);d(e,this.da);d(f,this.da);c?b[c-1].children.push(f):\nthis.fc(e,f)},fc:function(b,c){this.data={children:[b,c],height:b.height+1,bbox:null,$:!1};d(this.data,this.da)},bd:function(b,c,d){var f,g,h,l,m,n,q;m=n=Infinity;for(f=c;f<=d-c;f++)g=e(b,0,f,this.da),h=e(b,f,d,this.da),l=Math.max(0,Math.min(g[2],h[2])-Math.max(g[0],h[0]))*Math.max(0,Math.min(g[3],h[3])-Math.max(g[1],h[1])),g=k(g)+k(h),l<m?(m=l,q=f,n=g<n?g:n):l===m&&g<n&&(n=g,q=f);return q},ad:function(b,c,d){var e=b.$?this.Hb:g,f=b.$?this.Ib:h,k=this.bc(b,c,d,e);c=this.bc(b,c,d,f);k<c&&b.children.sort(e)},\nbc:function(b,c,d,g){b.children.sort(g);g=this.da;var h=e(b,0,c,g),k=e(b,d-c,d,g),m=l(h)+l(k),n,q;for(n=c;n<d-c;n++)q=b.children[n],f(h,b.$?g(q):q.bbox),m+=l(h);for(n=d-c-1;n>=c;n--)q=b.children[n],f(k,b.$?g(q):q.bbox),m+=l(k);return m},$c:function(b,c,d){for(;0<=d;d--)f(c[d].bbox,b)},dd:function(b){for(var c=b.length-1,e;0<=c;c--)0===b[c].children.length?0<c?(e=b[c-1].children,e.splice(e.indexOf(b[c]),1)):this.clear():d(b[c],this.da)},ed:function(b){var c=[\"return a\",\" - b\",\";\"];this.Hb=new Function(\"a\",\n\"b\",c.join(b[0]));this.Ib=new Function(\"a\",\"b\",c.join(b[1]));this.da=new Function(\"a\",\"return [a\"+b.join(\", a\")+\"];\")}};\"undefined\"!==typeof b?b.uc=c:\"undefined\"!==typeof self?self.a=c:window.a=c})();Lj=b.uc})();function Mj(b){this.a=Lj(b);this.b={}}p=Mj.prototype;p.Ca=function(b,c){var d=[b[0],b[1],b[2],b[3],c];this.a.Ca(d);this.b[I(c)]=d};p.load=function(b,c){for(var d=Array(c.length),e=0,f=c.length;e<f;e++){var g=b[e],h=c[e],g=[g[0],g[1],g[2],g[3],h];d[e]=g;this.b[I(h)]=g}this.a.load(d)};p.remove=function(b){b=I(b);var c=this.b[b];delete this.b[b];return null!==this.a.remove(c)};function Nj(b){return b.a.all().map(function(b){return b[4]})}\nfunction Oj(b,c){return b.a.search(c).map(function(b){return b[4]})}function Pj(b,c,d,e){return Qj(Oj(b,c),d,e)}function Qj(b,c,d){for(var e,f=0,g=b.length;f<g&&!(e=c.call(d,b[f]));f++);return e}p.clear=function(){this.a.clear();this.b={}};p.C=function(){return this.a.data.bbox};function Rj(b){b=b||{};De.call(this,{attributions:b.attributions,logo:b.logo,projection:void 0,state:\"ready\",wrapX:void 0!==b.wrapX?b.wrapX:!0});this.o=pa;this.D=b.format;this.u=b.url;void 0!==b.loader?this.o=b.loader:void 0!==this.u&&(this.o=Jj(this.u,this.D));this.G=void 0!==b.strategy?b.strategy:Kj;var c=void 0!==b.useSpatialIndex?b.useSpatialIndex:!0;this.R=c?new Mj:null;this.s=new Mj;this.ca={};this.b={};this.g={};this.h={};this.a=null;var d,e;b.features instanceof ld?(d=b.features,e=d.a):Array.isArray(b.features)&&\n(e=b.features);c||void 0!==d||(d=new ld(e));void 0!==e&&Sj(this,e);void 0!==d&&Tj(this,d)}M(Rj,De);p=Rj.prototype;p.Cb=function(b){var c=I(b).toString();if(Uj(this,c,b)){Vj(this,c,b);var d=b.M();d?(c=d.C(),this.R&&this.R.Ca(c,b)):this.ca[c]=b;S(this,new Wj(\"addfeature\",b))}this.v()};function Vj(b,c,d){b.h[c]=[Q(d,\"change\",b.xc,b),Q(d,\"propertychange\",b.xc,b)]}function Uj(b,c,d){var e=!0,f=d.La();void 0!==f?f.toString()in b.b?e=!1:b.b[f.toString()]=d:b.g[c]=d;return e}p.Db=function(b){Sj(this,b);this.v()};\nfunction Sj(b,c){var d,e,f,g,h=[],k=[],l=[];e=0;for(f=c.length;e<f;e++)g=c[e],d=I(g).toString(),Uj(b,d,g)&&k.push(g);e=0;for(f=k.length;e<f;e++){g=k[e];d=I(g).toString();Vj(b,d,g);var m=g.M();m?(d=m.C(),h.push(d),l.push(g)):b.ca[d]=g}b.R&&b.R.load(h,l);e=0;for(f=k.length;e<f;e++)S(b,new Wj(\"addfeature\",k[e]))}\nfunction Tj(b,c){var d=!1;Q(b,\"addfeature\",function(b){d||(d=!0,c.push(b.feature),d=!1)});Q(b,\"removefeature\",function(b){d||(d=!0,c.remove(b.feature),d=!1)});Q(c,\"add\",function(b){d||(b=b.element,d=!0,this.Cb(b),d=!1)},b);Q(c,\"remove\",function(b){if(!d){b=b.element;d=!0;var c=I(b).toString();c in this.ca?delete this.ca[c]:this.R&&this.R.remove(b);this.Yb(b);this.v();d=!1}},b);b.a=c}\np.clear=function(b){if(b){for(var c in this.h)this.h[c].forEach(N);this.a||(this.h={},this.b={},this.g={})}else if(this.R){b=this.Yb;Qj(Nj(this.R),b,this);for(var d in this.ca)this.Yb(this.ca[d])}this.a&&this.a.clear();this.R&&this.R.clear();this.s.clear();this.ca={};S(this,new Wj(\"clear\"));this.v()};p.od=function(b,c){if(this.R)return Qj(Nj(this.R),b,c);if(this.a)return nd(this.a,b,c)};function Xj(b,c,d,e){b.R?Pj(b.R,c,d,e):b.a&&nd(b.a,d,e)}\np.pe=function(){var b;this.a?b=this.a.a:this.R&&(b=Nj(this.R),$a(this.ca)||Ka(b,Za(this.ca)));return b};p.C=function(){return this.R.C()};\np.xc=function(b){b=b.target;var c=I(b).toString(),d=b.M();if(d)if(d=d.C(),c in this.ca)delete this.ca[c],this.R&&this.R.Ca(d,b);else{if(this.R){var e=this.R,f=I(b);Rb(e.b[f].slice(0,4),d)||(e.remove(b),e.Ca(d,b))}}else c in this.ca||(this.R&&this.R.remove(b),this.ca[c]=b);d=b.La();void 0!==d?(d=d.toString(),c in this.g?(delete this.g[c],this.b[d]=b):this.b[d]!==b&&(Yj(this,b),this.b[d]=b)):c in this.g||(Yj(this,b),this.g[c]=b);this.v();S(this,new Wj(\"changefeature\",b))};\nfunction Zj(b,c,d,e){var f=b.s;c=b.G(c,d);var g,h;g=0;for(h=c.length;g<h;++g){var k=c[g];Pj(f,k,function(b){return Nb(b.extent,k)})||(b.o.call(b,k,d,e),f.Ca(k,{extent:k.slice()}))}}p.Yb=function(b){var c=I(b).toString();this.h[c].forEach(N);delete this.h[c];var d=b.La();void 0!==d?delete this.b[d.toString()]:delete this.g[c];S(this,new Wj(\"removefeature\",b))};function Yj(b,c){for(var d in b.b)if(b.b[d]===c){delete b.b[d];break}}function Wj(b,c){R.call(this,b);this.feature=c}M(Wj,R);function ak(b){Xi.call(this,b);this.c=rf();this.b=null;this.j=Jb();this.h=zb()}M(ak,Xi);\nak.prototype.g=function(b,c,d){var e=b.pixelRatio,f=b.viewState,g=f.center,h=f.projection,k=f.rotation,l=b.size,m=Math.round(e*l[0]/2),n=Math.round(e*l[1]/2),q=e/f.resolution,r=this.a,u=r.V(),w=u.kb(h),f=Zi(this,b,0);Yi(this,\"precompose\",d,b,f);var l=d,r=nb(r,\"render\"),y,z,D,t;if(k||r){l=this.c;y=l.canvas;D=u.mb(e)/e;var v=d.canvas.width*D;z=d.canvas.height*D;t=Math.round(Math.sqrt(v*v+z*z));y.width!=t?y.width=y.height=t:l.clearRect(0,0,t,t);y=(t-v)/2/D;z=(t-z)/2/D;q*=D;m=Math.round(D*(m+y));n=Math.round(D*\n(n+z))}v=l.globalAlpha;l.globalAlpha=c.opacity;var B=u.la(h),E=this.b,C;c=u.Mb(h)&&1==c.opacity;c||(E.reverse(),C=[]);for(var G=0,J=E.length;G<J;++G){var A=E[G],H=A.L,O=Je(B,H,this.j),P=H[0],L=Xb(Je(B,Re(B,g,P))),H=Math.round(Vb(O)*q),K=Math.round(Wb(O)*q),fa=Math.round((O[0]-L[0])*q/H)*H+m+Math.round((L[0]-g[0])*q),O=Math.round((L[1]-O[3])*q/K)*K+n+Math.round((g[1]-L[1])*q);if(!c){L=[fa,O,fa+H,O+K];l.save();for(var ra=0,Wl=C.length;ra<Wl;++ra){var Xa=C[ra];ac(L,Xa)&&(l.beginPath(),l.moveTo(L[0],\nL[1]),l.lineTo(L[0],L[3]),l.lineTo(L[2],L[3]),l.lineTo(L[2],L[1]),l.moveTo(Xa[0],Xa[1]),l.lineTo(Xa[2],Xa[1]),l.lineTo(Xa[2],Xa[3]),l.lineTo(Xa[0],Xa[3]),l.closePath(),l.clip())}C.push(L)}P=Xe(u,P,e,h);l.drawImage(A.T(),w,w,P[0],P[1],fa,O,H,K);c||l.restore()}r&&(e=y-m/D+m,h=z-n/D+n,g=Ig(this.h,t/2-e,t/2-h,q,-q,-k,-g[0]+e/q,-g[1]-h/q),Yi(this,\"render\",l,b,g));(k||r)&&d.drawImage(l.canvas,-Math.round(y),-Math.round(z),t/D,t/D);l.globalAlpha=v;Yi(this,\"postcompose\",d,b,f)};\nak.prototype.i=function(b,c){function d(b){b=b.N();return 2==b||4==b||3==b&&!u}var e=b.pixelRatio,f=b.viewState,g=f.projection,h=this.a,k=h.V(),l=k.la(g),m=Qe(l,f.resolution),n=l.I(m),q=f.center;n==f.resolution?(q=Rg(q,n,b.size),f=Zb(q,n,f.rotation,b.size)):f=b.extent;void 0!==c.extent&&(f=$b(f,c.extent));if(f[2]<f[0]||f[3]<f[1])return!1;n=Me(l,f,n);q={};q[m]={};var r=this.l(k,g,q),u=ti(h),w=Jb(),y=new fd(0,0,0,0),z,D,t,v;for(t=n.a;t<=n.f;++t)for(v=n.b;v<=n.c;++v)z=Tg(k,m,t,v,e,g),!d(z)&&z.a&&(z=\nz.a),d(z)?q[m][z.L.toString()]=z:(D=Ie(l,z.L,r,y,w),D||(z=Le(l,z.L,y,w))&&r(m+1,z));r=Object.keys(q).map(Number);r.sort(Ha);var w=[],B,y=0;for(t=r.length;y<t;++y)for(B in z=r[y],v=q[z],v)z=v[B],2==z.N()&&w.push(z);this.b=w;Qg(b.usedTiles,k,m,n);Sg(b,k,l,e,g,f,m,h.get(\"preload\"));Ng(b,k);Pg(b,k);return!0};function bk(b){Xi.call(this,b);this.b=!1;this.w=-1;this.u=NaN;this.j=Jb();this.c=this.o=null;this.h=rf()}M(bk,Xi);\nbk.prototype.g=function(b,c,d){var e=b.extent,f=b.pixelRatio,g=c.eb?b.skippedFeatureUids:{},h=b.viewState,k=h.projection,h=h.rotation,l=k.C(),m=this.a.V(),n=Zi(this,b,0);Yi(this,\"precompose\",d,b,n);var q=this.c;if(q&&!q.c()){var r;nb(this.a,\"render\")?(this.h.canvas.width=d.canvas.width,this.h.canvas.height=d.canvas.height,r=this.h):r=d;var u=r.globalAlpha;r.globalAlpha=c.opacity;c=b.size[0]*f;var w=b.size[1]*f;xi(r,-h,c/2,w/2);q.f(r,f,n,h,g);if(m.j&&k.a&&!Nb(l,e)){for(var k=e[0],m=Vb(l),y=0;k<l[0];)--y,\nn=m*y,n=Zi(this,b,n),q.f(r,f,n,h,g),k+=m;y=0;for(k=e[2];k>l[2];)++y,n=m*y,n=Zi(this,b,n),q.f(r,f,n,h,g),k-=m;n=Zi(this,b,0)}xi(r,h,c/2,w/2);r!=d&&(Yi(this,\"render\",r,b,n),d.drawImage(r.canvas,0,0));r.globalAlpha=u}Yi(this,\"postcompose\",d,b,n)};bk.prototype.fb=function(b,c,d,e){if(this.c){var f=this.a,g={};return this.c.g(b,c.viewState.resolution,c.viewState.rotation,{},function(b){var c=I(b).toString();if(!(c in g))return g[c]=!0,d.call(e,b,f)})}};bk.prototype.B=function(){Mg(this)};\nbk.prototype.i=function(b){function c(b){var c,e=b.c;e?c=e.call(b,m):(e=d.g)&&(c=e(b,m));if(c){if(c){e=!1;if(Array.isArray(c))for(var f=0,g=c.length;f<g;++f)e=vj(r,b,c[f],uj(m,n),this.B,this)||e;else e=vj(r,b,c,uj(m,n),this.B,this)||e;b=e}else b=!1;this.b=this.b||b}}var d=this.a,e=d.V();Og(b.attributions,e.i);Pg(b,e);var f=b.viewHints[0],g=b.viewHints[1],h=d.i,k=d.j;if(!this.b&&!h&&f||!k&&g)return!0;var l=b.extent,k=b.viewState,f=k.projection,m=k.resolution,n=b.pixelRatio,g=d.f,q=d.a,h=d.get(\"renderOrder\");\nvoid 0===h&&(h=tj);l=Lb(l,q*m);q=k.projection.C();e.j&&k.projection.a&&!Nb(q,b.extent)&&(b=Math.max(Vb(l)/2,Vb(q)),l[0]=q[0]-b,l[2]=q[2]+b);if(!this.b&&this.u==m&&this.w==g&&this.o==h&&Nb(this.j,l))return!0;this.c=null;this.b=!1;var r=new pj(.5*m/n,l,m,d.a);Zj(e,l,m,f);if(h){var u=[];Xj(e,l,function(b){u.push(b)},this);u.sort(h);u.forEach(c,this)}else Xj(e,l,c,this);qj(r);this.u=m;this.w=g;this.o=h;this.j=l;this.c=r;return!0};function ck(b,c){var d=/\\{z\\}/g,e=/\\{x\\}/g,f=/\\{y\\}/g,g=/\\{-y\\}/g;return function(h){if(h)return b.replace(d,h[0].toString()).replace(e,h[1].toString()).replace(f,function(){return(-h[2]-1).toString()}).replace(g,function(){var b=c.a?c.a[h[0]]:null;return(b.c-b.b+1+h[2]).toString()})}}function dk(b,c){for(var d=b.length,e=Array(d),f=0;f<d;++f)e[f]=ck(b[f],c);return ek(e)}function ek(b){return 1===b.length?b[0]:function(c,d,e){if(c)return b[Ea((c[1]<<c[0])+c[2],b.length)](c,d,e)}}function fk(){};function gk(b){Ve.call(this,{attributions:b.attributions,cacheSize:b.cacheSize,extent:b.extent,logo:b.logo,opaque:b.opaque,projection:b.projection,state:b.state,tileGrid:b.tileGrid,tilePixelRatio:b.tilePixelRatio,wrapX:b.wrapX});this.tileLoadFunction=b.tileLoadFunction;this.tileUrlFunction=this.g?this.g.bind(this):fk;this.urls=null;if(b.urls){var c=b.urls;this.urls=c;hk(this,this.g?this.g.bind(this):dk(c,this.tileGrid))}else b.url&&this.s(b.url);b.tileUrlFunction&&hk(this,b.tileUrlFunction)}\nM(gk,Ve);gk.prototype.D=function(b){b=b.target;switch(b.N()){case 1:S(this,new Ze(\"tileloadstart\",b));break;case 2:S(this,new Ze(\"tileloadend\",b));break;case 3:S(this,new Ze(\"tileloaderror\",b))}};function hk(b,c){b.a.clear();b.tileUrlFunction=c;b.v()}\ngk.prototype.s=function(b){var c=[],d=/\\{(\\d)-(\\d)\\}/.exec(b)||/\\{([a-z])-([a-z])\\}/.exec(b);if(d){var e=d[2].charCodeAt(0),f;for(f=d[1].charCodeAt(0);f<=e;++f)c.push(b.replace(d[0],String.fromCharCode(f)))}else c.push(b);b=this.urls=c;hk(this,this.g?this.g.bind(this):dk(b,this.tileGrid))};gk.prototype.Yc=function(b,c,d){b=this.lb(b,c,d);we(this.a,b)&&this.a.get(b)};function ik(b,c){Zg.call(this,0,c);this.c=rf();rf();this.a=this.c.canvas;this.a.style.width=\"100%\";this.a.style.height=\"100%\";this.a.className=\"ol-unselectable\";fe(b,this.a,0);this.b=!0;this.g=zb()}M(ik,Zg);ik.prototype.Jb=function(b){return b instanceof X?new ak(b):b instanceof Y?new bk(b):null};\nfunction jk(b,c,d){var e=b.h,f=b.c;if(nb(e,c)){var g=d.extent,h=d.pixelRatio,k=d.viewState.rotation,l=d.pixelRatio,m=d.viewState,n=m.resolution;b=Ig(b.g,b.a.width/2,b.a.height/2,l/n,-l/n,-m.rotation,-m.center[0],-m.center[1]);g=new Mi(f,h,g,b,k);S(e,new Fg(c,e,g,d,f,null))}}ik.prototype.U=function(){return\"canvas\"};\nik.prototype.sb=function(b){if(b){var c=this.c,d=b.pixelRatio,e=Math.round(b.size[0]*d),d=Math.round(b.size[1]*d);this.a.width!=e||this.a.height!=d?(this.a.width=e,this.a.height=d):c.clearRect(0,0,e,d);var f=b.viewState.rotation;$g(b);jk(this,\"precompose\",b);var g=b.layerStatesArray;Na(g);xi(c,f,e/2,d/2);var h=b.viewState.resolution,k,l,m,n;k=0;for(l=g.length;k<l;++k)n=g[k],m=n.layer,m=bh(this,m),Hg(n,h)&&\"ready\"==n.$b&&m.i(b,n)&&m.g(b,n,c);xi(c,-f,e/2,d/2);jk(this,\"postcompose\",b);this.b||(oe(this.a,\n!0),this.b=!0);ch(this,b);b.postRenderFunctions.push(ah)}else this.b&&(oe(this.a,!1),this.b=!1)};function kk(b,c){Lg.call(this,b);this.target=c}M(kk,Lg);kk.prototype.Gb=pa;kk.prototype.Kc=pa;function lk(b){var c=document.createElement(\"DIV\");c.style.position=\"absolute\";kk.call(this,b,c);this.c=!0;this.h=1;this.g=0;this.b={}}M(lk,kk);lk.prototype.Gb=function(){ee(this.target);this.g=0};\nlk.prototype.Lc=function(b,c){if(!c.visible)return this.c&&(oe(this.target,!1),this.c=!1),!0;var d=b.pixelRatio,e=b.viewState,f=e.projection,g=this.a,h=g.V(),k=h.la(f),l=h.kb(f),m=Qe(k,e.resolution),n=k.I(m),q=e.center,r;n==e.resolution?(q=Rg(q,n,b.size),r=Zb(q,n,e.rotation,b.size)):r=b.extent;void 0!==c.extent&&(r=$b(r,c.extent));var n=Me(k,r,n),u={};u[m]={};var w=this.l(h,f,u),y=ti(g),z=Jb(),D=new fd(0,0,0,0),t,v,B,E;for(B=n.a;B<=n.f;++B)for(E=n.b;E<=n.c;++E)t=Tg(h,m,B,E,d,f),v=t.N(),v=2==v||4==\nv||3==v&&!y,!v&&t.a&&(t=t.a),v=t.N(),2==v?u[m][t.L.toString()]=t:4==v||3==v&&!y||(v=Ie(k,t.L,w,D,z),v||(t=Le(k,t.L,D,z))&&w(m+1,t));var C;if(this.g!=h.f){for(C in this.b)y=this.b[+C],ge(y.target);this.b={};this.g=h.f}z=Object.keys(u).map(Number);z.sort(Ha);var w={},G;B=0;for(E=z.length;B<E;++B){C=z[B];C in this.b?y=this.b[C]:(y=Re(k,q,C),y=new mk(k,y),w[C]=!0,this.b[C]=y);C=u[C];for(G in C){t=y;v=C[G];var J=l,A=v.L,H=A[0],O=A[1],P=A[2],A=A.toString();if(!(A in t.b)){var H=tb(Pe(t.g,H),t.i),L=v.T(t),\nK=L.style;K.maxWidth=\"none\";var fa=void 0,ra=void 0;0<J?(fa=document.createElement(\"DIV\"),ra=fa.style,ra.overflow=\"hidden\",ra.width=H[0]+\"px\",ra.height=H[1]+\"px\",K.position=\"absolute\",K.left=-J+\"px\",K.top=-J+\"px\",K.width=H[0]+2*J+\"px\",K.height=H[1]+2*J+\"px\",fa.appendChild(L)):(K.width=H[0]+\"px\",K.height=H[1]+\"px\",fa=L,ra=K);ra.position=\"absolute\";ra.left=(O-t.f[1])*H[0]+\"px\";ra.top=(t.f[2]-P)*H[1]+\"px\";t.a||(t.a=document.createDocumentFragment());t.a.appendChild(fa);t.b[A]=v}}y.a&&(y.target.appendChild(y.a),\ny.a=null)}l=Object.keys(this.b).map(Number);l.sort(Ha);B=zb();G=0;for(z=l.length;G<z;++G)if(C=l[G],y=this.b[C],C in u)if(t=y.I(),E=y.ka(),Ig(B,b.size[0]/2,b.size[1]/2,t/e.resolution,t/e.resolution,e.rotation,(E[0]-q[0])/t,(q[1]-E[1])/t),y.setTransform(B),C in w){for(--C;0<=C;--C)if(C in this.b){E=this.b[C].target;E.parentNode&&E.parentNode.insertBefore(y.target,E.nextSibling);break}0>C&&fe(this.target,y.target,0)}else{if(!b.viewHints[0]&&!b.viewHints[1]){v=Ke(y.g,r,y.f[0],D);C=[];t=E=void 0;for(t in y.b)E=\ny.b[t],J=E.L,gd(v,J[1],J[2])||C.push(E);J=v=void 0;v=0;for(J=C.length;v<J;++v)E=C[v],t=E.L.toString(),ge(E.T(y)),delete y.b[t]}}else ge(y.target),delete this.b[C];c.opacity!=this.h&&(this.h=this.target.style.opacity=c.opacity);c.visible&&!this.c&&(oe(this.target,!0),this.c=!0);Qg(b.usedTiles,h,m,n);Sg(b,h,k,d,f,r,m,g.get(\"preload\"));Ng(b,h);Pg(b,h);return!0};\nfunction mk(b,c){this.target=document.createElement(\"DIV\");this.target.style.position=\"absolute\";this.target.style.width=\"100%\";this.target.style.height=\"100%\";this.g=b;this.f=c;this.h=bc(Je(b,c));this.l=b.I(c[0]);this.b={};this.a=null;this.c=Bb();this.i=[0,0]}mk.prototype.ka=function(){return this.h};mk.prototype.I=function(){return this.l};mk.prototype.setTransform=function(b){Jg(b,this.c)||(vf(this.target,b),Cb(this.c,b))};function nk(b){this.g=rf();var c=this.g.canvas;c.style.maxWidth=\"none\";c.style.position=\"absolute\";kk.call(this,b,c);this.b=!1;this.h=-1;this.o=NaN;this.i=Jb();this.c=this.j=null;this.w=zb();this.u=zb()}M(nk,kk);p=nk.prototype;p.Gb=function(){var b=this.g.canvas;b.width=b.width;this.h=0};\np.Kc=function(b,c){var d=b.viewState,e=d.center,f=d.rotation,g=d.resolution,d=b.pixelRatio,h=b.size[0],k=b.size[1],l=h*d,m=k*d,e=Ig(this.w,d*h/2,d*k/2,d/g,-d/g,-f,-e[0],-e[1]),g=this.g;g.canvas.width=l;g.canvas.height=m;h=Ig(this.u,0,0,1/d,1/d,0,-(l-h)/2*d,-(m-k)/2*d);vf(g.canvas,h);ok(this,\"precompose\",b,e);(h=this.c)&&!h.c()&&(g.globalAlpha=c.opacity,h.f(g,d,e,f,c.eb?b.skippedFeatureUids:{}),ok(this,\"render\",b,e));ok(this,\"postcompose\",b,e)};\nfunction ok(b,c,d,e){var f=b.g;b=b.a;nb(b,c)&&(e=new Mi(f,d.pixelRatio,d.extent,e,d.viewState.rotation),S(b,new Fg(c,b,e,d,f,null)))}p.fb=function(b,c,d,e){if(this.c){var f=this.a,g={};return this.c.g(b,c.viewState.resolution,c.viewState.rotation,{},function(b){var c=I(b).toString();if(!(c in g))return g[c]=!0,d.call(e,b,f)})}};p.Mc=function(){Mg(this)};\np.Lc=function(b){function c(b){var c,e=b.c;e?c=e.call(b,l):(e=d.g)&&(c=e(b,l));if(c){if(c){e=!1;if(Array.isArray(c))for(var f=0,g=c.length;f<g;++f)e=vj(n,b,c[f],uj(l,m),this.Mc,this)||e;else e=vj(n,b,c,uj(l,m),this.Mc,this)||e;b=e}else b=!1;this.b=this.b||b}}var d=this.a,e=d.V();Og(b.attributions,e.i);Pg(b,e);var f=b.viewHints[0],g=b.viewHints[1],h=d.i,k=d.j;if(!this.b&&!h&&f||!k&&g)return!0;var g=b.extent,h=b.viewState,f=h.projection,l=h.resolution,m=b.pixelRatio;b=d.f;k=d.a;h=d.get(\"renderOrder\");\nvoid 0===h&&(h=tj);g=Lb(g,k*l);if(!this.b&&this.o==l&&this.h==b&&this.j==h&&Nb(this.i,g))return!0;this.c=null;this.b=!1;var n=new pj(.5*l/m,g,l,d.a);Zj(e,g,l,f);if(h){var q=[];Xj(e,g,function(b){q.push(b)},this);q.sort(h);q.forEach(c,this)}else Xj(e,g,c,this);qj(n);this.o=l;this.h=b;this.j=h;this.i=g;this.c=n;return!0};function pk(b,c){Zg.call(this,0,c);this.c=rf();var d=this.c.canvas;d.style.position=\"absolute\";d.style.width=\"100%\";d.style.height=\"100%\";d.className=\"ol-unselectable\";fe(b,d,0);this.g=zb();this.a=document.createElement(\"DIV\");this.a.className=\"ol-unselectable\";d=this.a.style;d.position=\"absolute\";d.width=\"100%\";d.height=\"100%\";Q(this.a,\"touchstart\",lb);fe(b,this.a,0);this.b=!0}M(pk,Zg);pk.prototype.J=function(){ge(this.a);pk.X.J.call(this)};\npk.prototype.Jb=function(b){if(b instanceof X)b=new lk(b);else if(b instanceof Y)b=new nk(b);else return null;return b};function qk(b,c,d){var e=b.h;if(nb(e,c)){var f=d.extent,g=d.pixelRatio,h=d.viewState,k=h.rotation,l=b.c,m=l.canvas;Ig(b.g,m.width/2,m.height/2,g/h.resolution,-g/h.resolution,-h.rotation,-h.center[0],-h.center[1]);b=new Mi(l,g,f,b.g,k);S(e,new Fg(c,e,b,d,l,null))}}pk.prototype.U=function(){return\"dom\"};\npk.prototype.sb=function(b){if(b){var c=this.h;if(nb(c,\"precompose\")||nb(c,\"postcompose\")){var c=this.c.canvas,d=b.pixelRatio;c.width=b.size[0]*d;c.height=b.size[1]*d}qk(this,\"precompose\",b);c=b.layerStatesArray;Na(c);var d=b.viewState.resolution,e,f,g,h;e=0;for(f=c.length;e<f;++e)h=c[e],g=h.layer,g=bh(this,g),fe(this.a,g.target,e),Hg(h,d)&&\"ready\"==h.$b?g.Lc(b,h)&&g.Kc(b,h):g.Gb();var c=b.layerStates,k;for(k in this.f)k in c||(g=this.f[k],ge(g.target));this.b||(oe(this.a,!0),this.b=!0);$g(b);ch(this,\nb);b.postRenderFunctions.push(ah);qk(this,\"postcompose\",b)}else this.b&&(oe(this.a,!1),this.b=!1)};function rk(b){this.a=b}function sk(b){this.a=b}M(sk,rk);sk.prototype.U=function(){return 35632};function tk(b){this.a=b}M(tk,rk);tk.prototype.U=function(){return 35633};function uk(){this.a=\"precision mediump float;varying vec2 a;varying float b;uniform float k;uniform sampler2D l;void main(void){vec4 texColor=texture2D(l,a);gl_FragColor.rgb=texColor.rgb;float alpha=texColor.a*b*k;if(alpha==0.0){discard;}gl_FragColor.a=alpha;}\"}M(uk,sk);aa(uk);\nfunction vk(){this.a=\"varying vec2 a;varying float b;attribute vec2 c;attribute vec2 d;attribute vec2 e;attribute float f;attribute float g;uniform mat4 h;uniform mat4 i;uniform mat4 j;void main(void){mat4 offsetMatrix=i;if(g==1.0){offsetMatrix=i*j;}vec4 offsets=offsetMatrix*vec4(e,0.,0.);gl_Position=h*vec4(c,0.,1.)+offsets;a=d;b=f;}\"}M(vk,tk);aa(vk);\nfunction wk(b,c){this.i=b.getUniformLocation(c,\"j\");this.j=b.getUniformLocation(c,\"i\");this.h=b.getUniformLocation(c,\"k\");this.l=b.getUniformLocation(c,\"h\");this.a=b.getAttribLocation(c,\"e\");this.b=b.getAttribLocation(c,\"f\");this.c=b.getAttribLocation(c,\"c\");this.f=b.getAttribLocation(c,\"g\");this.g=b.getAttribLocation(c,\"d\")};function xk(b){this.a=void 0!==b?b:[]};function yk(b,c){this.A=b;this.a=c;this.b={};this.g={};this.c={};this.i=this.j=this.h=this.l=null;(this.f=0<=oa.indexOf(\"OES_element_index_uint\"))&&c.getExtension(\"OES_element_index_uint\");Q(this.A,\"webglcontextlost\",this.o,this);Q(this.A,\"webglcontextrestored\",this.s,this)}M(yk,ib);\nfunction zk(b,c,d){var e=b.a,f=d.a,g=String(I(d));if(g in b.b)e.bindBuffer(c,b.b[g].buffer);else{var h=e.createBuffer();e.bindBuffer(c,h);var k;34962==c?k=new Float32Array(f):34963==c&&(k=b.f?new Uint32Array(f):new Uint16Array(f));e.bufferData(c,k,35044);b.b[g]={Xe:d,buffer:h}}}function Ak(b,c){var d=b.a,e=String(I(c)),f=b.b[e];d.isContextLost()||d.deleteBuffer(f.buffer);delete b.b[e]}\nyk.prototype.J=function(){hb(this.A);var b=this.a;if(!b.isContextLost()){for(var c in this.b)b.deleteBuffer(this.b[c].buffer);for(c in this.c)b.deleteProgram(this.c[c]);for(c in this.g)b.deleteShader(this.g[c]);b.deleteFramebuffer(this.h);b.deleteRenderbuffer(this.i);b.deleteTexture(this.j)}};\nfunction Bk(b){if(!b.h){var c=b.a,d=c.createFramebuffer();c.bindFramebuffer(c.FRAMEBUFFER,d);var e=Ck(c,1,1),f=c.createRenderbuffer();c.bindRenderbuffer(c.RENDERBUFFER,f);c.renderbufferStorage(c.RENDERBUFFER,c.DEPTH_COMPONENT16,1,1);c.framebufferTexture2D(c.FRAMEBUFFER,c.COLOR_ATTACHMENT0,c.TEXTURE_2D,e,0);c.framebufferRenderbuffer(c.FRAMEBUFFER,c.DEPTH_ATTACHMENT,c.RENDERBUFFER,f);c.bindTexture(c.TEXTURE_2D,null);c.bindRenderbuffer(c.RENDERBUFFER,null);c.bindFramebuffer(c.FRAMEBUFFER,null);b.h=d;\nb.j=e;b.i=f}return b.h}function Dk(b,c){var d=String(I(c));if(d in b.g)return b.g[d];var e=b.a,f=e.createShader(c.U());e.shaderSource(f,c.a);e.compileShader(f);return b.g[d]=f}function Ek(b,c,d){var e=I(c)+\"/\"+I(d);if(e in b.c)return b.c[e];var f=b.a,g=f.createProgram();f.attachShader(g,Dk(b,c));f.attachShader(g,Dk(b,d));f.linkProgram(g);return b.c[e]=g}yk.prototype.o=function(){Ya(this.b);Ya(this.g);Ya(this.c);this.i=this.j=this.h=this.l=null};yk.prototype.s=function(){};\nfunction Fk(b,c){if(c==b.l)return!1;b.a.useProgram(c);b.l=c;return!0}function Gk(b,c,d){var e=b.createTexture();b.bindTexture(b.TEXTURE_2D,e);b.texParameteri(b.TEXTURE_2D,b.TEXTURE_MAG_FILTER,b.LINEAR);b.texParameteri(b.TEXTURE_2D,b.TEXTURE_MIN_FILTER,b.LINEAR);void 0!==c&&b.texParameteri(3553,10242,c);void 0!==d&&b.texParameteri(3553,10243,d);return e}function Ck(b,c,d){var e=Gk(b,void 0,void 0);b.texImage2D(b.TEXTURE_2D,0,b.RGBA,c,d,0,b.RGBA,b.UNSIGNED_BYTE,null);return e};function Hk(b,c){this.H=this.u=void 0;this.j=Yb(c);this.s=[];this.h=[];this.B=void 0;this.g=[];this.c=[];this.D=this.K=void 0;this.b=[];this.w=this.i=null;this.G=void 0;this.na=Bb();this.za=Bb();this.S=this.P=void 0;this.pa=Bb();this.ja=this.Y=this.ba=void 0;this.ea=[];this.l=[];this.a=[];this.o=null;this.f=[];this.A=[];this.aa=void 0}M(Hk,Eg);\nfunction Ik(b,c){var d=b.o,e=b.i,f=b.ea,g=b.l,h=c.a;return function(){if(!h.isContextLost()){var b,l;b=0;for(l=f.length;b<l;++b)h.deleteTexture(f[b]);b=0;for(l=g.length;b<l;++b)h.deleteTexture(g[b])}Ak(c,d);Ak(c,e)}}\nfunction Jk(b,c,d,e){var f=b.u,g=b.H,h=b.B,k=b.K,l=b.D,m=b.G,n=b.P,q=b.S,r=b.ba?1:0,u=b.Y,w=b.ja,y=b.aa,z=Math.cos(u),u=Math.sin(u),D=b.b.length,t=b.a.length,v,B,E,C,G,J;for(v=0;v<d;v+=e)G=c[v]-b.j[0],J=c[v+1]-b.j[1],B=t/8,E=-w*f,C=-w*(h-g),b.a[t++]=G,b.a[t++]=J,b.a[t++]=E*z-C*u,b.a[t++]=E*u+C*z,b.a[t++]=n/l,b.a[t++]=(q+h)/k,b.a[t++]=m,b.a[t++]=r,E=w*(y-f),C=-w*(h-g),b.a[t++]=G,b.a[t++]=J,b.a[t++]=E*z-C*u,b.a[t++]=E*u+C*z,b.a[t++]=(n+y)/l,b.a[t++]=(q+h)/k,b.a[t++]=m,b.a[t++]=r,E=w*(y-f),C=w*g,b.a[t++]=\nG,b.a[t++]=J,b.a[t++]=E*z-C*u,b.a[t++]=E*u+C*z,b.a[t++]=(n+y)/l,b.a[t++]=q/k,b.a[t++]=m,b.a[t++]=r,E=-w*f,C=w*g,b.a[t++]=G,b.a[t++]=J,b.a[t++]=E*z-C*u,b.a[t++]=E*u+C*z,b.a[t++]=n/l,b.a[t++]=q/k,b.a[t++]=m,b.a[t++]=r,b.b[D++]=B,b.b[D++]=B+1,b.b[D++]=B+2,b.b[D++]=B,b.b[D++]=B+2,b.b[D++]=B+3}Hk.prototype.Za=function(b,c){this.f.push(this.b.length);this.A.push(c);var d=b.a;Jk(this,d,d.length,b.b)};Hk.prototype.$a=function(b,c){this.f.push(this.b.length);this.A.push(c);var d=b.a;Jk(this,d,d.length,b.b)};\nfunction Kk(b,c){var d=c.a;b.s.push(b.b.length);b.h.push(b.b.length);b.o=new xk(b.a);zk(c,34962,b.o);b.i=new xk(b.b);zk(c,34963,b.i);var e={};Lk(b.ea,b.g,e,d);Lk(b.l,b.c,e,d);b.u=void 0;b.H=void 0;b.B=void 0;b.g=null;b.c=null;b.K=void 0;b.D=void 0;b.b=null;b.G=void 0;b.P=void 0;b.S=void 0;b.ba=void 0;b.Y=void 0;b.ja=void 0;b.a=null;b.aa=void 0}\nfunction Lk(b,c,d,e){var f,g,h,k,l=c.length;for(k=0;k<l;++k){g=c[k];h=I(g).toString();if(h in d)f=d[h];else{f=e;var m=Gk(f,33071,33071);f.texImage2D(f.TEXTURE_2D,0,f.RGBA,f.RGBA,f.UNSIGNED_BYTE,g);f=m;d[h]=f}b[k]=f}}\nfunction Mk(b,c,d,e,f,g,h,k,l,m,n){var q=c.a;zk(c,34962,b.o);zk(c,34963,b.i);var r=uk.ua(),u=vk.ua(),u=Ek(c,r,u);b.w?r=b.w:(r=new wk(q,u),b.w=r);Fk(c,u);q.enableVertexAttribArray(r.c);q.vertexAttribPointer(r.c,2,5126,!1,32,0);q.enableVertexAttribArray(r.a);q.vertexAttribPointer(r.a,2,5126,!1,32,8);q.enableVertexAttribArray(r.g);q.vertexAttribPointer(r.g,2,5126,!1,32,16);q.enableVertexAttribArray(r.b);q.vertexAttribPointer(r.b,1,5126,!1,32,24);q.enableVertexAttribArray(r.f);q.vertexAttribPointer(r.f,\n1,5126,!1,32,28);u=b.pa;Ig(u,0,0,2/(e*g[0]),2/(e*g[1]),-f,-(d[0]-b.j[0]),-(d[1]-b.j[1]));d=b.za;e=2/g[0];g=2/g[1];Db(d);d[0]=e;d[5]=g;d[10]=1;d[15]=1;g=b.na;Db(g);0!==f&&Hb(g,-f);q.uniformMatrix4fv(r.l,!1,u);q.uniformMatrix4fv(r.j,!1,d);q.uniformMatrix4fv(r.i,!1,g);q.uniform1f(r.h,h);var w;if(void 0===l)Nk(b,q,c,k,b.ea,b.s);else{if(m)a:{f=c.f?5125:5123;c=c.f?4:2;g=b.f.length-1;for(h=b.l.length-1;0<=h;--h)for(q.bindTexture(3553,b.l[h]),m=0<h?b.h[h-1]:0,u=b.h[h];0<=g&&b.f[g]>=m;){w=b.f[g];d=b.A[g];\ne=I(d).toString();if(void 0===k[e]&&d.M()&&(void 0===n||ac(n,d.M().C()))&&(q.clear(q.COLOR_BUFFER_BIT|q.DEPTH_BUFFER_BIT),q.drawElements(4,u-w,f,w*c),u=l(d))){b=u;break a}u=w;g--}b=void 0}else q.clear(q.COLOR_BUFFER_BIT|q.DEPTH_BUFFER_BIT),Nk(b,q,c,k,b.l,b.h),b=(b=l(null))?b:void 0;w=b}q.disableVertexAttribArray(r.c);q.disableVertexAttribArray(r.a);q.disableVertexAttribArray(r.g);q.disableVertexAttribArray(r.b);q.disableVertexAttribArray(r.f);return w}\nfunction Nk(b,c,d,e,f,g){var h=d.f?5125:5123;d=d.f?4:2;if($a(e)){var k;b=0;e=f.length;for(k=0;b<e;++b){c.bindTexture(3553,f[b]);var l=g[b];c.drawElements(4,l-k,h,k*d);k=l}}else{k=0;var m,l=0;for(m=f.length;l<m;++l){c.bindTexture(3553,f[l]);for(var n=0<l?g[l-1]:0,q=g[l],r=n;k<b.f.length&&b.f[k]<=q;){var u=I(b.A[k]).toString();void 0!==e[u]?(r!==n&&c.drawElements(4,n-r,h,r*d),n=r=k===b.f.length-1?q:b.f[k+1]):n=k===b.f.length-1?q:b.f[k+1];k++}r!==n&&c.drawElements(4,n-r,h,r*d)}}}\nHk.prototype.Ha=function(b){var c=b.jb(),d=b.T(1),e=b.wc(),f=b.Xb(1),g=b.l,h=b.ka(),k=b.i,l=b.Z(),m=b.Qa();b=b.gb;var n;0===this.g.length?this.g.push(d):(n=this.g[this.g.length-1],I(n)!=I(d)&&(this.s.push(this.b.length),this.g.push(d)));0===this.c.length?this.c.push(f):(n=this.c[this.c.length-1],I(n)!=I(f)&&(this.h.push(this.b.length),this.c.push(f)));this.u=c[0];this.H=c[1];this.B=m[1];this.K=e[1];this.D=e[0];this.G=g;this.P=h[0];this.S=h[1];this.Y=l;this.ba=k;this.ja=b;this.aa=m[0]};\nfunction Ok(b,c,d){this.l=c;this.i=b;this.h=d;this.b={}}function Pk(b,c){var d=[],e;for(e in b.b)d.push(Ik(b.b[e],c));return function(){for(var b=d.length,c,e=0;e<b;e++)c=d[e].apply(this,arguments);return c}}function Qk(b,c){for(var d in b.b)Kk(b.b[d],c)}Ok.prototype.a=function(b,c){var d=this.b[c];void 0===d&&(d=new Rk[c](this.i,this.l),this.b[c]=d);return d};Ok.prototype.c=function(){return $a(this.b)};\nOk.prototype.f=function(b,c,d,e,f,g,h,k){var l,m;g=0;for(l=$i.length;g<l;++g)m=this.b[$i[g]],void 0!==m&&Mk(m,b,c,d,e,f,h,k,void 0,!1)};function Sk(b,c,d,e,f,g,h,k,l,m){var n=Tk,q,r;for(q=$i.length-1;0<=q;--q)if(r=b.b[$i[q]],void 0!==r&&(r=Mk(r,c,d,e,f,n,g,h,k,l,m)))return r}\nOk.prototype.g=function(b,c,d,e,f,g,h,k,l,m){var n=c.a;n.bindFramebuffer(n.FRAMEBUFFER,Bk(c));var q;void 0!==this.h&&(q=Lb(Qb(b),e*this.h));return Sk(this,c,b,e,f,k,l,function(b){var c=new Uint8Array(4);n.readPixels(0,0,1,1,n.RGBA,n.UNSIGNED_BYTE,c);if(0<c[3]&&(b=m(b)))return b},!0,q)};function Uk(b,c,d,e,f,g,h){var k=d.a;k.bindFramebuffer(k.FRAMEBUFFER,Bk(d));return void 0!==Sk(b,d,c,e,f,g,h,function(){var b=new Uint8Array(4);k.readPixels(0,0,1,1,k.RGBA,k.UNSIGNED_BYTE,b);return 0<b[3]},!1)}\nvar Rk={Image:Hk},Tk=[1,1];function Vk(b,c,d,e,f,g){this.a=b;this.f=c;this.c=g;this.l=f;this.h=e;this.g=d;this.b=null}M(Vk,Eg);Vk.prototype.$a=function(b,c){var d=this.a,e=(new Ok(1,this.c)).a(0,\"Image\");e.Ha(this.b);e.$a(b,c);Kk(e,d);Mk(e,this.a,this.f,this.g,this.h,this.l,1,{},void 0,!1);Ik(e,d)()};Vk.prototype.Za=function(b,c){var d=this.a,e=(new Ok(1,this.c)).a(0,\"Image\");e.Ha(this.b);e.Za(b,c);Kk(e,d);Mk(e,this.a,this.f,this.g,this.h,this.l,1,{},void 0,!1);Ik(e,d)()};Vk.prototype.Ha=function(b){this.b=b};function Wk(){this.a=\"precision mediump float;varying vec2 a;uniform float f;uniform sampler2D g;void main(void){vec4 texColor=texture2D(g,a);gl_FragColor.rgb=texColor.rgb;gl_FragColor.a=texColor.a*f;}\"}M(Wk,sk);aa(Wk);function Xk(){this.a=\"varying vec2 a;attribute vec2 b;attribute vec2 c;uniform mat4 d;uniform mat4 e;void main(void){gl_Position=e*vec4(b,0.,1.);a=(d*vec4(c,0.,1.)).st;}\"}M(Xk,tk);aa(Xk);\nfunction Yk(b,c){this.f=b.getUniformLocation(c,\"f\");this.c=b.getUniformLocation(c,\"e\");this.h=b.getUniformLocation(c,\"d\");this.g=b.getUniformLocation(c,\"g\");this.a=b.getAttribLocation(c,\"b\");this.b=b.getAttribLocation(c,\"c\")};function Zk(b,c){Lg.call(this,c);this.c=b;this.G=new xk([-1,-1,0,0,1,-1,1,0,-1,1,0,1,1,1,1,1]);this.i=this.ya=null;this.j=void 0;this.D=zb();this.P=Bb();this.o=null}M(Zk,Lg);\nfunction $k(b,c,d){var e=b.c.c;if(void 0===b.j||b.j!=d){c.postRenderFunctions.push(na(function(b,c,d){b.isContextLost()||(b.deleteFramebuffer(c),b.deleteTexture(d))},e,b.i,b.ya));c=Ck(e,d,d);var f=e.createFramebuffer();e.bindFramebuffer(36160,f);e.framebufferTexture2D(36160,36064,3553,c,0);b.ya=c;b.i=f;b.j=d}else e.bindFramebuffer(36160,b.i)}\nZk.prototype.Nc=function(b,c,d){al(this,\"precompose\",d,b);zk(d,34962,this.G);var e=d.a,f=Wk.ua(),g=Xk.ua(),f=Ek(d,f,g);this.o?g=this.o:this.o=g=new Yk(e,f);Fk(d,f)&&(e.enableVertexAttribArray(g.a),e.vertexAttribPointer(g.a,2,5126,!1,16,0),e.enableVertexAttribArray(g.b),e.vertexAttribPointer(g.b,2,5126,!1,16,8),e.uniform1i(g.g,0));e.uniformMatrix4fv(g.h,!1,this.D);e.uniformMatrix4fv(g.c,!1,this.P);e.uniform1f(g.f,c.opacity);e.bindTexture(3553,this.ya);e.drawArrays(5,0,4);al(this,\"postcompose\",d,b)};\nfunction al(b,c,d,e){b=b.a;if(nb(b,c)){var f=e.viewState;S(b,new Fg(c,b,new Vk(d,f.center,f.resolution,f.rotation,e.size,e.extent),e,null,d))}}Zk.prototype.s=function(){this.i=this.ya=null;this.j=void 0};function bl(){this.a=\"precision mediump float;varying vec2 a;uniform sampler2D e;void main(void){gl_FragColor=texture2D(e,a);}\"}M(bl,sk);aa(bl);function cl(){this.a=\"varying vec2 a;attribute vec2 b;attribute vec2 c;uniform vec4 d;void main(void){gl_Position=vec4(b*d.xy+d.zw,0.,1.);a=c;}\"}M(cl,tk);aa(cl);function dl(b,c){this.f=b.getUniformLocation(c,\"e\");this.c=b.getUniformLocation(c,\"d\");this.a=b.getAttribLocation(c,\"b\");this.b=b.getAttribLocation(c,\"c\")};function el(b,c){Zk.call(this,b,c);this.B=bl.ua();this.S=cl.ua();this.b=null;this.w=new xk([0,0,0,1,1,0,1,1,0,1,0,0,1,1,1,0]);this.u=this.g=null;this.h=-1;this.K=[0,0]}M(el,Zk);el.prototype.J=function(){Ak(this.c.g,this.w);el.X.J.call(this)};el.prototype.l=function(b,c,d){var e=this.c;return function(f,g){return We(b,c,f,g,function(b){var c=we(e.b,b.getKey());c&&(d[f]||(d[f]={}),d[f][b.L.toString()]=b);return c})}};el.prototype.s=function(){el.X.s.call(this);this.b=null};\nel.prototype.Oc=function(b,c,d){var e=this.c,f=d.a,g=b.viewState,h=g.projection,k=this.a,l=k.V(),m=l.la(h),n=Qe(m,g.resolution),q=m.I(n),r=Xe(l,n,b.pixelRatio,h),u=r[0]/tb(Pe(m,n),this.K)[0],w=q/u,y=l.kb(h),z=g.center,D;q==g.resolution?(z=Rg(z,q,b.size),D=Zb(z,q,g.rotation,b.size)):D=b.extent;q=Me(m,D,q);if(this.g&&hd(this.g,q)&&this.h==l.f)w=this.u;else{var t=[q.ha(),q.c-q.b+1],v=Math.pow(2,Math.ceil(Math.log(Math.max(t[0]*r[0],t[1]*r[1]))/Math.LN2)),t=w*v,B=m.ka(n),E=B[0]+q.a*r[0]*w,w=B[1]+q.b*\nr[1]*w,w=[E,w,E+t,w+t];$k(this,b,v);f.viewport(0,0,v,v);f.clearColor(0,0,0,0);f.clear(16384);f.disable(3042);v=Ek(d,this.B,this.S);Fk(d,v);this.b||(this.b=new dl(f,v));zk(d,34962,this.w);f.enableVertexAttribArray(this.b.a);f.vertexAttribPointer(this.b.a,2,5126,!1,16,0);f.enableVertexAttribArray(this.b.b);f.vertexAttribPointer(this.b.b,2,5126,!1,16,8);f.uniform1i(this.b.f,0);d={};d[n]={};var C=this.l(l,h,d),G=ti(k),v=!0,E=Jb(),J=new fd(0,0,0,0),A,H,O;for(H=q.a;H<=q.f;++H)for(O=q.b;O<=q.c;++O){B=Tg(l,\nn,H,O,u,h);if(void 0!==c.extent&&(A=Je(m,B.L,E),!ac(A,c.extent)))continue;A=B.N();A=2==A||4==A||3==A&&!G;!A&&B.a&&(B=B.a);A=B.N();if(2==A){if(we(e.b,B.getKey())){d[n][B.L.toString()]=B;continue}}else if(4==A||3==A&&!G)continue;v=!1;A=Ie(m,B.L,C,J,E);A||(B=Le(m,B.L,J,E))&&C(n+1,B)}c=Object.keys(d).map(Number);c.sort(Ha);for(var C=new Float32Array(4),P,L,K,G=0,J=c.length;G<J;++G)for(P in L=d[c[G]],L)B=L[P],A=Je(m,B.L,E),H=2*(A[2]-A[0])/t,O=2*(A[3]-A[1])/t,K=2*(A[0]-w[0])/t-1,A=2*(A[1]-w[1])/t-1,yb(C,\nH,O,K,A),f.uniform4fv(this.b.c,C),fl(e,B,r,y*u),f.drawArrays(5,0,4);v?(this.g=q,this.u=w,this.h=l.f):(this.u=this.g=null,this.h=-1,b.animate=!0)}Qg(b.usedTiles,l,n,q);var fa=e.i;Sg(b,l,m,u,h,D,n,k.get(\"preload\"),function(b){var c;(c=2!=b.N()||we(e.b,b.getKey()))||(c=b.getKey()in fa.f);c||fa.c([b,Oe(m,b.L),m.I(b.L[0]),r,y*u])},this);Ng(b,l);Pg(b,l);f=this.D;Db(f);Fb(f,(z[0]-w[0])/(w[2]-w[0]),(z[1]-w[1])/(w[3]-w[1]));0!==g.rotation&&Hb(f,g.rotation);Gb(f,b.size[0]*g.resolution/(w[2]-w[0]),b.size[1]*\ng.resolution/(w[3]-w[1]));Fb(f,-.5,-.5);return!0};function gl(b,c){Zk.call(this,b,c);this.h=!1;this.K=-1;this.B=NaN;this.u=Jb();this.g=this.b=this.w=null}M(gl,Zk);p=gl.prototype;p.Nc=function(b,c,d){this.g=c;var e=b.viewState,f=this.b;f&&!f.c()&&f.f(d,e.center,e.resolution,e.rotation,b.size,b.pixelRatio,c.opacity,c.eb?b.skippedFeatureUids:{})};p.J=function(){var b=this.b;b&&(Pk(b,this.c.g)(),this.b=null);gl.X.J.call(this)};\np.fb=function(b,c,d,e){if(this.b&&this.g){var f=c.viewState,g=this.a,h={};return this.b.g(b,this.c.g,f.center,f.resolution,f.rotation,c.size,c.pixelRatio,this.g.opacity,{},function(b){var c=I(b).toString();if(!(c in h))return h[c]=!0,d.call(e,b,g)})}};p.Ic=function(b,c){if(this.b&&this.g){var d=c.viewState;return Uk(this.b,b,this.c.g,d.resolution,d.rotation,this.g.opacity,c.skippedFeatureUids)}return!1};p.Pc=function(){Mg(this)};\np.Oc=function(b,c,d){function e(b){var c,d=b.c;d?c=d.call(b,m):(d=f.g)&&(c=d(b,m));if(c){if(c){d=!1;if(Array.isArray(c))for(var e=0,g=c.length;e<g;++e)d=vj(r,b,c[e],uj(m,n),this.Pc,this)||d;else d=vj(r,b,c,uj(m,n),this.Pc,this)||d;b=d}else b=!1;this.h=this.h||b}}var f=this.a;c=f.V();Og(b.attributions,c.i);Pg(b,c);var g=b.viewHints[0],h=b.viewHints[1],k=f.i,l=f.j;if(!this.h&&!k&&g||!l&&h)return!0;var h=b.extent,k=b.viewState,g=k.projection,m=k.resolution,n=b.pixelRatio,k=f.f,q=f.a,l=f.get(\"renderOrder\");\nvoid 0===l&&(l=tj);h=Lb(h,q*m);if(!this.h&&this.B==m&&this.K==k&&this.w==l&&Nb(this.u,h))return!0;this.b&&b.postRenderFunctions.push(Pk(this.b,d));this.h=!1;var r=new Ok(.5*m/n,h,f.a);Zj(c,h,m,g);if(l){var u=[];Xj(c,h,function(b){u.push(b)},this);u.sort(l);u.forEach(e,this)}else Xj(c,h,e,this);Qk(r,d);this.B=m;this.K=k;this.w=l;this.u=h;this.b=r;return!0};function hl(b,c){Zg.call(this,0,c);this.a=document.createElement(\"CANVAS\");this.a.style.width=\"100%\";this.a.style.height=\"100%\";this.a.className=\"ol-unselectable\";fe(b,this.a,0);this.s=this.u=0;this.H=rf();this.j=!0;this.c=xf(this.a,{antialias:!0,depth:!1,failIfMajorPerformanceCaveat:!0,preserveDrawingBuffer:!1,stencil:!0});this.g=new yk(this.a,this.c);Q(this.a,\"webglcontextlost\",this.ne,this);Q(this.a,\"webglcontextrestored\",this.oe,this);this.b=new ve;this.o=null;this.i=new dh(function(b){var c=\nb[1];b=b[2];var f=c[0]-this.o[0],c=c[1]-this.o[1];return 65536*Math.log(b)+Math.sqrt(f*f+c*c)/b}.bind(this),function(b){return b[0].getKey()});this.w=function(){if(0!==this.i.a.length){hh(this.i);var b=eh(this.i);fl(this,b[0],b[3],b[4])}return!1}.bind(this);this.l=0;il(this)}M(hl,Zg);\nfunction fl(b,c,d,e){var f=b.c,g=c.getKey();if(we(b.b,g))b=b.b.get(g),f.bindTexture(3553,b.ya),9729!=b.Cc&&(f.texParameteri(3553,10240,9729),b.Cc=9729),9729!=b.Dc&&(f.texParameteri(3553,10240,9729),b.Dc=9729);else{var h=f.createTexture();f.bindTexture(3553,h);if(0<e){var k=b.H.canvas,l=b.H;b.u!==d[0]||b.s!==d[1]?(k.width=d[0],k.height=d[1],b.u=d[0],b.s=d[1]):l.clearRect(0,0,d[0],d[1]);l.drawImage(c.T(),e,e,d[0],d[1],0,0,d[0],d[1]);f.texImage2D(3553,0,6408,6408,5121,k)}else f.texImage2D(3553,0,6408,\n6408,5121,c.T());f.texParameteri(3553,10240,9729);f.texParameteri(3553,10241,9729);f.texParameteri(3553,10242,33071);f.texParameteri(3553,10243,33071);b.b.set(g,{ya:h,Cc:9729,Dc:9729})}}p=hl.prototype;p.Jb=function(b){return b instanceof X?new el(this,b):b instanceof Y?new gl(this,b):null};function jl(b,c,d){var e=b.h;if(nb(e,c)){b=b.g;var f=d.viewState;S(e,new Fg(c,e,new Vk(b,f.center,f.resolution,f.rotation,d.size,d.extent),d,null,b))}}\np.J=function(){var b=this.c;b.isContextLost()||xe(this.b,function(c){c&&b.deleteTexture(c.ya)});jb(this.g);hl.X.J.call(this)};p.md=function(b,c){for(var d=this.c,e;1024<this.b.f-this.l;){if(e=this.b.a.Ia)d.deleteTexture(e.ya);else if(+this.b.a.Rb==c.index)break;else--this.l;this.b.pop()}};p.U=function(){return\"webgl\"};p.ne=function(b){b.preventDefault();this.b.clear();this.l=0;b=this.f;for(var c in b)b[c].s()};p.oe=function(){il(this);this.h.render()};\nfunction il(b){b=b.c;b.activeTexture(33984);b.blendFuncSeparate(770,771,1,771);b.disable(2884);b.disable(2929);b.disable(3089);b.disable(2960)}\np.sb=function(b){var c=this.g,d=this.c;if(d.isContextLost())return!1;if(!b)return this.j&&(oe(this.a,!1),this.j=!1),!1;this.o=b.focus;this.b.set((-b.index).toString(),null);++this.l;jl(this,\"precompose\",b);var e=[],f=b.layerStatesArray;Na(f);var g=b.viewState.resolution,h,k,l,m;h=0;for(k=f.length;h<k;++h)m=f[h],Hg(m,g)&&\"ready\"==m.$b&&(l=bh(this,m.layer),l.Oc(b,m,c)&&e.push(m));f=b.size[0]*b.pixelRatio;g=b.size[1]*b.pixelRatio;if(this.a.width!=f||this.a.height!=g)this.a.width=f,this.a.height=g;d.bindFramebuffer(36160,\nnull);d.clearColor(0,0,0,0);d.clear(16384);d.enable(3042);d.viewport(0,0,this.a.width,this.a.height);h=0;for(k=e.length;h<k;++h)m=e[h],l=bh(this,m.layer),l.Nc(b,m,c);this.j||(oe(this.a,!0),this.j=!0);$g(b);1024<this.b.f-this.l&&b.postRenderFunctions.push(this.md.bind(this));0!==this.i.a.length&&(b.postRenderFunctions.push(this.w),b.animate=!0);jl(this,\"postcompose\",b);ch(this,b);b.postRenderFunctions.push(ah)};\np.Wb=function(b,c,d,e,f,g){var h;if(this.c.isContextLost())return!1;var k=c.viewState,l=c.layerStatesArray,m;for(m=l.length-1;0<=m;--m){h=l[m];var n=h.layer;if(Hg(h,k.resolution)&&f.call(g,n)&&(h=bh(this,n).fb(b,c,d,e)))return h}};p.Jc=function(b,c,d,e){var f=!1;if(this.c.isContextLost())return!1;var g=c.viewState,h=c.layerStatesArray,k;for(k=h.length-1;0<=k;--k){var l=h[k],m=l.layer;if(Hg(l,g.resolution)&&d.call(e,m)&&(f=bh(this,m).Ic(b,c)))return!0}return f};var kl=[\"canvas\",\"webgl\",\"dom\"];\nfunction Z(b){T.call(this);var c=ll(b);this.Ja=void 0!==b.loadTilesWhileAnimating?b.loadTilesWhileAnimating:!1;this.wb=void 0!==b.loadTilesWhileInteracting?b.loadTilesWhileInteracting:!1;this.yb=void 0!==b.pixelRatio?b.pixelRatio:Df;this.xb=c.logos;this.pa=function(){this.h=void 0;this.Ce.call(this,Date.now())}.bind(this);this.Aa=zb();this.zb=zb();this.Ba=0;this.b=null;this.ea=Jb();this.u=this.G=null;this.a=document.createElement(\"DIV\");this.a.className=\"ol-viewport\"+(Gf?\" ol-touch\":\"\");this.a.style.position=\n\"relative\";this.a.style.overflow=\"hidden\";this.a.style.width=\"100%\";this.a.style.height=\"100%\";this.a.style.msTouchAction=\"none\";this.a.style.touchAction=\"none\";this.o=document.createElement(\"DIV\");this.o.className=\"ol-overlaycontainer\";this.a.appendChild(this.o);this.j=document.createElement(\"DIV\");this.j.className=\"ol-overlaycontainer-stopevent\";b=[\"click\",\"dblclick\",\"mousedown\",\"touchstart\",\"mspointerdown\",yg,\"mousewheel\",\"wheel\"];for(var d=0,e=b.length;d<e;++d)Q(this.j,b[d],kb);this.a.appendChild(this.j);\nthis.Y=new qg(this);for(var f in Bg)Q(this.Y,Bg[f],this.yc,this);this.S=c.keyboardEventTarget;this.i=null;Q(this.a,\"wheel\",this.Oa,this);Q(this.a,\"mousewheel\",this.Oa,this);this.s=c.controls;this.g=c.interactions;this.w=c.overlays;this.Tc={};this.D=new c.De(this.a,this);this.P=null;this.B=[];this.aa=[];this.na=new ih(this.vd.bind(this),this.Qd.bind(this));this.Ab={};Q(this,rb(\"layergroup\"),this.Ad,this);Q(this,rb(\"view\"),this.Rd,this);Q(this,rb(\"size\"),this.Nd,this);Q(this,rb(\"target\"),this.Pd,this);\nthis.l(c.values);nd(this.s,function(b){b.setMap(this)},this);Q(this.s,\"add\",function(b){b.element.setMap(this)},this);Q(this.s,\"remove\",function(b){b.element.setMap(null)},this);nd(this.g,function(b){b.setMap(this)},this);Q(this.g,\"add\",function(b){b.element.setMap(this)},this);Q(this.g,\"remove\",function(b){b.element.setMap(null)},this);nd(this.w,this.gc,this);Q(this.w,\"add\",function(b){this.gc(b.element)},this);Q(this.w,\"remove\",function(b){var c=b.element.La();void 0!==c&&delete this.Tc[c.toString()];\nb.element.setMap(null)},this)}M(Z,T);p=Z.prototype;p.hd=function(b){this.s.push(b)};p.jd=function(b){this.g.push(b)};p.kd=function(b){ml(this).get(\"layers\").push(b)};p.ld=function(b){this.w.push(b)};p.gc=function(b){var c=b.La();void 0!==c&&(this.Tc[c.toString()]=b);b.setMap(this)};p.fa=function(b){this.render();Array.prototype.push.apply(this.B,arguments)};\np.J=function(){jb(this.Y);jb(this.D);gb(this.a,\"wheel\",this.Oa,this);gb(this.a,\"mousewheel\",this.Oa,this);void 0!==this.c&&(x.removeEventListener(\"resize\",this.c,!1),this.c=void 0);this.h&&(x.cancelAnimationFrame(this.h),this.h=void 0);this.set(\"target\",null);Z.X.J.call(this)};p.pd=function(b,c,d,e,f){if(this.b)return b=this.ta(b),this.D.Wb(b,this.b,c,void 0!==d?d:null,void 0!==e?e:cc,void 0!==f?f:null)};\np.Td=function(b,c,d){if(!this.b)return!1;b=this.ta(b);return this.D.Jc(b,this.b,void 0!==c?c:cc,void 0!==d?d:null)};p.vc=function(b){var c=this.a.getBoundingClientRect();b=b.changedTouches?b.changedTouches[0]:b;return[b.clientX-c.left,b.clientY-c.top]};p.Tb=function(){return this.get(\"target\")};p.Na=function(){var b=this.Tb();return void 0!==b?Zd(b):null};p.ta=function(b){var c=this.b;return c?(b=b.slice(),Kg(c.pixelToCoordinateMatrix,b,b)):null};function ml(b){return b.get(\"layergroup\")}\nfunction Eh(b,c){var d=b.b;if(d){var e=c.slice(0,2);return Kg(d.coordinateToPixelMatrix,e,e)}return null}p.Pa=function(){return this.get(\"size\")};p.O=function(){return this.get(\"view\")};p.vd=function(b,c,d,e){var f=this.b;if(!(f&&c in f.wantedTiles&&f.wantedTiles[c][b.L.toString()]))return Infinity;b=d[0]-f.focus[0];d=d[1]-f.focus[1];return 65536*Math.log(e)+Math.sqrt(b*b+d*d)/e};p.Oa=function(b,c){var d=new og(c||b.type,this,b);this.yc(d)};\np.yc=function(b){if(this.b){this.P=b.coordinate;b.frameState=this.b;var c=this.g.a,d;if(!1!==S(this,b))for(d=c.length-1;0<=d;d--){var e=c[d];if(e.get(\"active\")&&!e.handleEvent(b))break}}};\np.Md=function(){var b=this.b,c=this.na;if(0!==c.a.length){var d=16,e=d;if(b){var f=b.viewHints;f[0]&&(d=this.Ja?8:0,e=2);f[1]&&(d=this.wb?8:0,e=2)}if(c.h<d){hh(c);for(var f=0,g,h;c.h<d&&f<e&&0<c.a.length;)g=eh(c)[0],h=g.getKey(),0!==g.N()||h in c.g||(c.g[h]=!0,++c.h,++f,g.load())}}c=this.aa;d=0;for(e=c.length;d<e;++d)c[d](this,b);c.length=0};p.Nd=function(){this.render()};\np.Pd=function(){var b;this.Tb()&&(b=this.Na());if(this.i){for(var c=0,d=this.i.length;c<d;++c)N(this.i[c]);this.i=null}b?(b.appendChild(this.a),b=this.S?this.S:b,this.i=[Q(b,\"keydown\",this.Oa,this),Q(b,\"keypress\",this.Oa,this)],this.c||(this.c=this.vb.bind(this),x.addEventListener(\"resize\",this.c,!1))):(ge(this.a),void 0!==this.c&&(x.removeEventListener(\"resize\",this.c,!1),this.c=void 0));this.vb()};p.Qd=function(){this.render()};p.Sd=function(){this.render()};\np.Rd=function(){this.G&&(N(this.G),this.G=null);var b=this.O();b&&(this.G=Q(b,\"propertychange\",this.Sd,this));this.render()};p.Bd=function(){this.render()};p.Cd=function(){this.render()};p.Ad=function(){this.u&&(this.u.forEach(N),this.u=null);var b=ml(this);b&&(this.u=[Q(b,\"propertychange\",this.Cd,this),Q(b,\"change\",this.Bd,this)]);this.render()};p.render=function(){void 0===this.h&&(this.h=x.requestAnimationFrame(this.pa))};p.ze=function(b){return this.g.remove(b)};p.Ae=function(b){return ml(this).get(\"layers\").remove(b)};\np.Ce=function(b){var c,d,e,f=this.Pa(),g=this.O(),h=null;if(c=void 0!==f&&0<f[0]&&0<f[1]&&g)c=!!g.ia()&&void 0!==g.I();if(c){var h=g.g.slice(),k=ml(this).Lb(),l={};c=0;for(d=k.length;c<d;++c)l[I(k[c].layer)]=k[c];e=g.N();h={animate:!1,attributions:{},coordinateToPixelMatrix:this.Aa,extent:null,focus:this.P?this.P:e.center,index:this.Ba++,layerStates:l,layerStatesArray:k,logos:Wa({},this.xb),pixelRatio:this.yb,pixelToCoordinateMatrix:this.zb,postRenderFunctions:[],size:f,skippedFeatureUids:this.Ab,\ntileQueue:this.na,time:b,usedTiles:{},viewState:e,viewHints:h,wantedTiles:{}}}if(h){b=this.B;c=f=0;for(d=b.length;c<d;++c)g=b[c],g(this,h)&&(b[f++]=g);b.length=f;h.extent=Zb(e.center,e.resolution,e.rotation,h.size)}this.b=h;this.D.sb(h);h&&(h.animate&&this.render(),Array.prototype.push.apply(this.aa,h.postRenderFunctions),0!==this.B.length||h.viewHints[0]||h.viewHints[1]||Rb(h.extent,this.ea)||(S(this,new te(\"moveend\",this,h)),Mb(h.extent,this.ea)));S(this,new te(\"postrender\",this,h));c=e=this.Md;\nthis&&(c=ma(e,this));!ga(x.setImmediate)||x.Window&&x.Window.prototype&&!W(\"Edge\")&&x.Window.prototype.setImmediate==x.setImmediate?(lf||(lf=mf()),lf(c)):x.setImmediate(c)};\np.vb=function(){var b=this.Na();if(b){var c=Yd(b),d=Gd&&b.currentStyle,e;if(e=d)Wd(c),e=!0;if(e&&\"auto\"!=d.width&&\"auto\"!=d.height&&!d.boxSizing)c=pe(b,d.width,\"width\",\"pixelWidth\"),b=pe(b,d.height,\"height\",\"pixelHeight\"),b=new Vd(c,b);else{d=new Vd(b.offsetWidth,b.offsetHeight);if(Gd){c=qe(b,\"paddingLeft\");e=qe(b,\"paddingRight\");var f=qe(b,\"paddingTop\"),g=qe(b,\"paddingBottom\"),c=new je(f,e,g,c)}else c=ke(b,\"paddingLeft\"),e=ke(b,\"paddingRight\"),f=ke(b,\"paddingTop\"),g=ke(b,\"paddingBottom\"),c=new je(parseFloat(f),\nparseFloat(e),parseFloat(g),parseFloat(c));!Gd||9<=Number(Sd)?(e=ke(b,\"borderLeftWidth\"),f=ke(b,\"borderRightWidth\"),g=ke(b,\"borderTopWidth\"),b=ke(b,\"borderBottomWidth\"),b=new je(parseFloat(g),parseFloat(f),parseFloat(b),parseFloat(e))):(e=se(b,\"borderLeft\"),f=se(b,\"borderRight\"),g=se(b,\"borderTop\"),b=se(b,\"borderBottom\"),b=new je(g,f,b,e));b=new Vd(d.width-b.left-c.left-c.right-b.right,d.height-b.top-c.top-c.bottom-b.bottom)}this.set(\"size\",[b.width,b.height])}else this.set(\"size\",void 0)};\nfunction ll(b){var c=null;void 0!==b.keyboardEventTarget&&(c=\"string\"===typeof b.keyboardEventTarget?document.getElementById(b.keyboardEventTarget):b.keyboardEventTarget);var d={},e={};if(void 0===b.logo||\"boolean\"===typeof b.logo&&b.logo)e[\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAMAAABEpIrGAAAAA3NCSVQICAjb4U/gAAAACXBIWXMAAAHGAAABxgEXwfpGAAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAAhNQTFRF////AP//AICAgP//AFVVQECA////K1VVSbbbYL/fJ05idsTYJFtbbcjbJllmZszWWMTOIFhoHlNiZszTa9DdUcHNHlNlV8XRIVdiasrUHlZjIVZjaMnVH1RlIFRkH1RkH1ZlasvYasvXVsPQH1VkacnVa8vWIVZjIFRjVMPQa8rXIVVkXsXRsNveIFVkIFZlIVVj3eDeh6GmbMvXH1ZkIFRka8rWbMvXIFVkIFVjIFVkbMvWH1VjbMvWIFVlbcvWIFVla8vVIFVkbMvWbMvVH1VkbMvWIFVlbcvWIFVkbcvVbMvWjNPbIFVkU8LPwMzNIFVkbczWIFVkbsvWbMvXIFVkRnB8bcvW2+TkW8XRIFVkIlZlJVloJlpoKlxrLl9tMmJwOWd0Omh1RXF8TneCT3iDUHiDU8LPVMLPVcLPVcPQVsPPVsPQV8PQWMTQWsTQW8TQXMXSXsXRX4SNX8bSYMfTYcfTYsfTY8jUZcfSZsnUaIqTacrVasrVa8jTa8rWbI2VbMvWbcvWdJObdcvUdszUd8vVeJaee87Yfc3WgJyjhqGnitDYjaarldPZnrK2oNbborW5o9bbo9fbpLa6q9ndrL3ArtndscDDutzfu8fJwN7gwt7gxc/QyuHhy+HizeHi0NfX0+Pj19zb1+Tj2uXk29/e3uLg3+Lh3+bl4uXj4ufl4+fl5Ofl5ufl5ujm5+jmySDnBAAAAFp0Uk5TAAECAgMEBAYHCA0NDg4UGRogIiMmKSssLzU7PkJJT1JTVFliY2hrdHZ3foSFhYeJjY2QkpugqbG1tre5w8zQ09XY3uXn6+zx8vT09vf4+Pj5+fr6/P39/f3+gz7SsAAAAVVJREFUOMtjYKA7EBDnwCPLrObS1BRiLoJLnte6CQy8FLHLCzs2QUG4FjZ5GbcmBDDjxJBXDWxCBrb8aM4zbkIDzpLYnAcE9VXlJSWlZRU13koIeW57mGx5XjoMZEUqwxWYQaQbSzLSkYGfKFSe0QMsX5WbjgY0YS4MBplemI4BdGBW+DQ11eZiymfqQuXZIjqwyadPNoSZ4L+0FVM6e+oGI6g8a9iKNT3o8kVzNkzRg5lgl7p4wyRUL9Yt2jAxVh6mQCogae6GmflI8p0r13VFWTHBQ0rWPW7ahgWVcPm+9cuLoyy4kCJDzCm6d8PSFoh0zvQNC5OjDJhQopPPJqph1doJBUD5tnkbZiUEqaCnB3bTqLTFG1bPn71kw4b+GFdpLElKIzRxxgYgWNYc5SCENVHKeUaltHdXx0dZ8uBI1hJ2UUDgq82CM2MwKeibqAvSO7MCABq0wXEPiqWEAAAAAElFTkSuQmCC\"]=\n\"http://openlayers.org/\";else{var f=b.logo;\"string\"===typeof f?e[f]=\"\":ha(f)&&(e[f.src]=f.href)}f=b.layers instanceof gi?b.layers:new gi({layers:b.layers});d.layergroup=f;d.target=b.target;d.view=void 0!==b.view?b.view:new V;var f=Zg,g;void 0!==b.renderer?Array.isArray(b.renderer)?g=b.renderer:\"string\"===typeof b.renderer&&(g=[b.renderer]):g=kl;var h,k;h=0;for(k=g.length;h<k;++h){var l=g[h];if(\"canvas\"==l){if(Ff){f=ik;break}}else if(\"dom\"==l){f=pk;break}else if(\"webgl\"==l&&yf){f=hl;break}}var m;void 0!==\nb.controls?m=Array.isArray(b.controls)?new ld(b.controls.slice()):b.controls:m=ef();if(void 0!==b.interactions)g=Array.isArray(b.interactions)?new ld(b.interactions.slice()):b.interactions;else{g={};h=new ld;k=new jh;(void 0!==g.altShiftDragRotate?g.altShiftDragRotate:1)&&h.push(new Fh);(void 0!==g.doubleClickZoom?g.doubleClickZoom:1)&&h.push(new ph({delta:g.zoomDelta,duration:g.zoomDuration}));(void 0!==g.dragPan?g.dragPan:1)&&h.push(new Ah({kinetic:k}));(void 0!==g.pinchRotate?g.pinchRotate:1)&&\nh.push(new Zh);(void 0!==g.pinchZoom?g.pinchZoom:1)&&h.push(new ci({duration:g.zoomDuration}));if(void 0!==g.keyboard?g.keyboard:1)h.push(new Th),h.push(new Vh({delta:g.zoomDelta,duration:g.zoomDuration}));(void 0!==g.mouseWheelZoom?g.mouseWheelZoom:1)&&h.push(new Xh({duration:g.zoomDuration}));(void 0!==g.shiftDragZoom?g.shiftDragZoom:1)&&h.push(new Sh({duration:g.zoomDuration}));g=h}b=void 0!==b.overlays?Array.isArray(b.overlays)?new ld(b.overlays.slice()):b.overlays:new ld;return{controls:m,interactions:g,\nkeyboardEventTarget:c,logos:e,overlays:b,De:f,values:d}}mc(li);mc(si);si.forEach(function(b){li.forEach(function(c){nc(b,c,mi);nc(c,b,ni)})});function nl(b){T.call(this);this.j=b.id;this.i=void 0!==b.insertFirst?b.insertFirst:!0;this.o=void 0!==b.stopEvent?b.stopEvent:!0;this.b=document.createElement(\"DIV\");this.b.className=\"ol-overlay-container\";this.b.style.position=\"absolute\";this.autoPan=void 0!==b.autoPan?b.autoPan:!1;this.g=void 0!==b.autoPanAnimation?b.autoPanAnimation:{};this.h=void 0!==b.autoPanMargin?b.autoPanMargin:20;this.a={hb:\"\",pb:\"\",tb:\"\",ub:\"\",visible:!0};this.c=null;Q(this,rb(\"element\"),this.yd,this);Q(this,rb(\"map\"),\nthis.Hd,this);Q(this,rb(\"offset\"),this.Id,this);Q(this,rb(\"position\"),this.Kd,this);Q(this,rb(\"positioning\"),this.Ld,this);void 0!==b.element&&this.set(\"element\",b.element);this.set(\"offset\",void 0!==b.offset?b.offset:[0,0]);this.set(\"positioning\",void 0!==b.positioning?b.positioning:\"top-left\");void 0!==b.position&&this.Ec(b.position)}M(nl,T);p=nl.prototype;p.La=function(){return this.j};p.yd=function(){ee(this.b);var b=this.get(\"element\");b&&this.b.appendChild(b)};\np.Hd=function(){this.c&&(ge(this.b),N(this.c),this.c=null);var b=this.get(\"map\");b&&(this.c=Q(b,\"postrender\",this.render,this),pl(this),b=this.o?b.j:b.o,this.i?fe(b,this.b,0):b.appendChild(this.b))};p.render=function(){pl(this)};p.Id=function(){pl(this)};\np.Kd=function(){pl(this);if(void 0!==this.get(\"position\")&&this.autoPan){var b=this.get(\"map\");if(void 0!==b&&b.Na()){var c=ql(b.Na(),b.Pa()),d=this.get(\"element\"),e=d.offsetWidth,f=d.currentStyle||x.getComputedStyle(d),e=e+(parseInt(f.marginLeft,10)+parseInt(f.marginRight,10)),f=d.offsetHeight,g=d.currentStyle||x.getComputedStyle(d),f=f+(parseInt(g.marginTop,10)+parseInt(g.marginBottom,10)),h=ql(d,[e,f]),d=this.h;Nb(c,h)||(e=h[0]-c[0],f=c[2]-h[2],g=h[1]-c[1],h=c[3]-h[3],c=[0,0],0>e?c[0]=e-d:0>f&&\n(c[0]=Math.abs(f)+d),0>g?c[1]=g-d:0>h&&(c[1]=Math.abs(h)+d),0===c[0]&&0===c[1])||(d=b.O().ia(),e=Eh(b,d),c=[e[0]+c[0],e[1]+c[1]],this.g&&(this.g.source=d,b.fa(cd(this.g))),b.O().oa(b.ta(c)))}}};p.Ld=function(){pl(this)};p.setMap=function(b){this.set(\"map\",b)};p.Ec=function(b){this.set(\"position\",b)};\nfunction ql(b,c){var d=Yd(b),e=new Ud(0,0),f;f=d?Yd(d):document;var g;(g=!Gd||9<=Number(Sd))||(Wd(f),g=!0);b!=(g?f.documentElement:f.body)&&(f=le(b),g=Wd(d).a,d=g.scrollingElement?g.scrollingElement:Jd?g.body||g.documentElement:g.documentElement,g=g.parentWindow||g.defaultView,d=Gd&&Qd(\"10\")&&g.pageYOffset!=d.scrollTop?new Ud(d.scrollLeft,d.scrollTop):new Ud(g.pageXOffset||d.scrollLeft,g.pageYOffset||d.scrollTop),e.x=f.left+d.x,e.y=f.top+d.y);return[e.x,e.y,e.x+c[0],e.y+c[1]]}\nfunction rl(b,c){b.a.visible!==c&&(oe(b.b,c),b.a.visible=c)}\nfunction pl(b){var c=b.get(\"map\"),d=b.get(\"position\");if(void 0!==c&&c.b&&void 0!==d){var d=Eh(c,d),e=c.Pa(),c=b.b.style,f=b.get(\"offset\"),g=b.get(\"positioning\"),h=f[0],f=f[1];if(\"bottom-right\"==g||\"center-right\"==g||\"top-right\"==g)\"\"!==b.a.pb&&(b.a.pb=c.left=\"\"),h=Math.round(e[0]-d[0]-h)+\"px\",b.a.tb!=h&&(b.a.tb=c.right=h);else{\"\"!==b.a.tb&&(b.a.tb=c.right=\"\");if(\"bottom-center\"==g||\"center-center\"==g||\"top-center\"==g)h-=me(b.b).width/2;h=Math.round(d[0]+h)+\"px\";b.a.pb!=h&&(b.a.pb=c.left=h)}if(\"bottom-left\"==\ng||\"bottom-center\"==g||\"bottom-right\"==g)\"\"!==b.a.ub&&(b.a.ub=c.top=\"\"),d=Math.round(e[1]-d[1]-f)+\"px\",b.a.hb!=d&&(b.a.hb=c.bottom=d);else{\"\"!==b.a.hb&&(b.a.hb=c.bottom=\"\");if(\"center-left\"==g||\"center-center\"==g||\"center-right\"==g)f-=me(b.b).height/2;d=Math.round(d[1]+f)+\"px\";b.a.ub!=d&&(b.a.ub=c.top=d)}rl(b,!0)}else rl(b,!1)};function sl(){this.defaultDataProjection=null}function tl(b,c,d){var e;d&&(e={dataProjection:d.dataProjection?d.dataProjection:b.f(Ij(c)),featureProjection:d.featureProjection});var f;e&&(f={featureProjection:e.featureProjection,dataProjection:e.dataProjection?e.dataProjection:b.defaultDataProjection,rightHanded:e.rightHanded},e.decimals&&(f.decimals=e.decimals));return f}\nfunction ul(b,c){var d=c?lc(c.featureProjection):null,e=c?lc(c.dataProjection):null;if(d&&e&&!wc(d,e))if(b instanceof zc)d=b.o(e,d);else{e=xc(e,d);d=[b[0],b[1],b[0],b[3],b[2],b[1],b[2],b[3]];e(d,d,2);var f=[d[0],d[2],d[4],d[6]],g=[d[1],d[3],d[5],d[7]],d=Math.min.apply(null,f),e=Math.min.apply(null,g),f=Math.max.apply(null,f),g=Math.max.apply(null,g),d=Ob(d,e,f,g,void 0)}else d=b;return d};function vl(){this.defaultDataProjection=null}M(vl,sl);function Ij(b){return ha(b)?b:\"string\"===typeof b?(b=JSON.parse(b))?b:null:null}vl.prototype.U=function(){return\"json\"};vl.prototype.g=function(b,c){return this.a(Ij(b),tl(this,b,c))};vl.prototype.b=function(b,c){return this.h(Ij(b),tl(this,b,c))};function wl(b,c,d,e,f){var g=NaN,h=NaN,k=(d-c)/e;if(0!==k)if(1==k)g=b[c],h=b[c+1];else if(2==k)g=.5*b[c]+.5*b[c+e],h=.5*b[c+1]+.5*b[c+e+1];else{var h=b[c],k=b[c+1],l=0,g=[0],m;for(m=c+e;m<d;m+=e){var n=b[m],q=b[m+1],l=l+Math.sqrt((n-h)*(n-h)+(q-k)*(q-k));g.push(l);h=n;k=q}d=.5*l;l=0;m=g.length;for(n=!1;l<m;)h=l+(m-l>>1),k=+Ha(g[h],d),0>k?l=h+1:(m=h,n=!k);h=n?l:~l;0>h?(d=(d-g[-h-2])/(g[-h-1]-g[-h-2]),c+=(-h-2)*e,g=b[c],g=g+d*(b[c+e]-g),h=b[c+1],h=h+d*(b[c+e+1]-h)):(g=b[c+h*e],h=b[c+h*e+1])}return f?\n(f[0]=g,f[1]=h,f):[g,h]};function xl(b,c){Bc.call(this);this.c=null;this.j=-1;this.W(b,c)}M(xl,Bc);p=xl.prototype;p.clone=function(){var b=new xl(null);U(b,this.g,this.a.slice());b.v();return b};p.ra=function(){return Hc(this.a,0,this.a.length,this.b)};function Ti(b){if(b.j!=b.f){var c;c=wl(b.a,0,b.a.length,b.b,b.c);b.c=c;b.j=b.f}return b.c}p.Ma=function(b){var c=[];c.length=Jc(this.a,0,this.a.length,this.b,b,c,0);b=new xl(null);U(b,\"XY\",c);b.v();return b};p.U=function(){return\"LineString\"};\np.W=function(b,c){b?(Dc(this,c,b,1),this.a||(this.a=[]),this.a.length=Fc(this.a,0,b,this.b)):U(this,\"XY\",null);this.v()};function yl(b,c){Bc.call(this);this.c=[];this.W(b,c)}M(yl,Bc);p=yl.prototype;p.clone=function(){var b=new yl(null),c=this.c.slice();U(b,this.g,this.a.slice());b.c=c;b.v();return b};p.ra=function(){return Ic(this.a,0,this.c,this.b)};p.ab=function(){return this.c};function Ui(b){var c=[],d=b.a,e=0,f=b.c;b=b.b;var g,h;g=0;for(h=f.length;g<h;++g){var k=f[g],e=wl(d,e,k,b);Ka(c,e);e=k}return c}\np.Ma=function(b){var c=[],d=[],e=this.a,f=this.c,g=this.b,h=0,k=0,l,m;l=0;for(m=f.length;l<m;++l){var n=f[l],k=Jc(e,h,n,g,b,c,k);d.push(k);h=n}c.length=k;b=new yl(null);U(b,\"XY\",c);b.c=d;b.v();return b};p.U=function(){return\"MultiLineString\"};p.W=function(b,c){if(b){Dc(this,c,b,2);this.a||(this.a=[]);var d=Gc(this.a,0,b,this.b,this.c);this.a.length=0===d.length?0:d[d.length-1]}else d=this.c,U(this,\"XY\",null),this.c=d;this.v()};function zl(b,c){Bc.call(this);this.W(b,c)}M(zl,Bc);zl.prototype.clone=function(){var b=new zl(null);U(b,this.g,this.a.slice());b.v();return b};zl.prototype.ra=function(){return Hc(this.a,0,this.a.length,this.b)};zl.prototype.U=function(){return\"MultiPoint\"};zl.prototype.W=function(b,c){b?(Dc(this,c,b,1),this.a||(this.a=[]),this.a.length=Fc(this.a,0,b,this.b)):U(this,\"XY\",null);this.v()};function Al(b,c){Bc.call(this);this.c=[];this.B=-1;this.D=null;this.G=-1;this.j=null;this.W(b,c)}M(Al,Bc);p=Al.prototype;p.clone=function(){for(var b=new Al(null),c=this.c.length,d=Array(c),e=0;e<c;++e)d[e]=this.c[e].slice();U(b,this.g,this.a.slice());b.c=d;b.v();return b};p.ra=function(b){var c;void 0!==b?(c=Vi(this).slice(),Sc(c,this.c,this.b,b)):c=this.a;b=c;c=this.c;var d=this.b,e=0,f=[],g=0,h,k;h=0;for(k=c.length;h<k;++h){var l=c[h];f[g++]=Ic(b,e,l,d,f[g]);e=l[l.length-1]}f.length=g;return f};\nfunction Wi(b){if(b.B!=b.f){var c=b.a,d=b.c,e=b.b,f=0,g=[],h,k,l=Jb();h=0;for(k=d.length;h<k;++h){var m=d[h],l=c,n=m[0],q=e,r=Pb(void 0),l=Tb(r,l,f,n,q);g.push((l[0]+l[2])/2,(l[1]+l[3])/2);f=m[m.length-1]}c=Vi(b);d=b.c;e=b.b;h=0;k=[];m=0;for(l=d.length;m<l;++m)f=d[m],k=Oc(c,h,f,e,g,2*m,k),h=f[f.length-1];b.D=k;b.B=b.f}return b.D}\nfunction Vi(b){if(b.G!=b.f){var c=b.a,d;a:{d=b.c;var e,f;e=0;for(f=d.length;e<f;++e)if(!Qc(c,d[e],b.b,void 0)){d=!1;break a}d=!0}d?b.j=c:(b.j=c.slice(),b.j.length=Sc(b.j,b.c,b.b));b.G=b.f}return b.j}p.Ma=function(b){var c=[],d=[],e=this.a,f=this.c,g=this.b;b=Math.sqrt(b);var h=0,k=0,l,m;l=0;for(m=f.length;l<m;++l){var n=f[l],q=[],k=Kc(e,h,n,g,b,c,k,q);d.push(q);h=n[n.length-1]}c.length=k;e=new Al(null);U(e,\"XY\",c);e.c=d;e.v();return e};p.U=function(){return\"MultiPolygon\"};\np.W=function(b,c){if(b){Dc(this,c,b,3);this.a||(this.a=[]);var d=this.a,e=this.b,f=this.c,g=0,f=f?f:[],h=0,k,l;k=0;for(l=b.length;k<l;++k)g=Gc(d,g,b[k],e,f[h]),f[h++]=g,g=g[g.length-1];f.length=h;0===f.length?this.a.length=0:(d=f[f.length-1],this.a.length=0===d.length?0:d[d.length-1])}else d=this.c,U(this,\"XY\",null),this.c=d;this.v()};function Bl(b){b=b?b:{};this.defaultDataProjection=null;this.c=b.geometryName}M(Bl,vl);function Cl(b){var c=\"XY\";!0===b.hasZ&&!0===b.hasM?c=\"XYZM\":!0===b.hasZ?c=\"XYZ\":!0===b.hasM&&(c=\"XYM\");return c}\nvar Dl={Point:function(b){return void 0!==b.m&&void 0!==b.z?new Mc([b.x,b.y,b.z,b.m],\"XYZM\"):void 0!==b.z?new Mc([b.x,b.y,b.z],\"XYZ\"):void 0!==b.m?new Mc([b.x,b.y,b.m],\"XYM\"):new Mc([b.x,b.y])},LineString:function(b){return new xl(b.paths[0],Cl(b))},Polygon:function(b){return new Tc(b.rings,Cl(b))},MultiPoint:function(b){return new zl(b.points,Cl(b))},MultiLineString:function(b){return new yl(b.paths,Cl(b))},MultiPolygon:function(b){return new Al(b.rings,Cl(b))}};\nBl.prototype.a=function(b,c){var d;if(d=b.geometry){var e;if(ea(d.x)&&ea(d.y))e=\"Point\";else if(d.points)e=\"MultiPoint\";else if(d.paths)e=1===d.paths.length?\"LineString\":\"MultiLineString\";else if(d.rings){var f=d.rings,g=Cl(d),h=[];e=[];var k,l;k=0;for(l=f.length;k<l;++k){var m=Ja(f[k]);Pc(m,0,m.length,g.length)?h.push([f[k]]):e.push(f[k])}for(;e.length;){f=e.shift();g=!1;for(k=h.length-1;0<=k;k--)if(Nb((new Lc(h[k][0])).C(),(new Lc(f)).C())){h[k].push(f);g=!0;break}g||h.push([f.reverse()])}d=Wa({},\nd);1===h.length?(e=\"Polygon\",d.rings=h[0]):(e=\"MultiPolygon\",d.rings=h)}d=ul((0,Dl[e])(d),c)}else d=null;h=new Dj;this.c&&Fj(h,this.c);Ej(h,d);c&&c.Qb&&b.attributes[c.Qb]&&(h.g=b.attributes[c.Qb],h.v());b.attributes&&h.l(b.attributes);return h};Bl.prototype.h=function(b,c){var d=c?c:{};if(b.features){var e=[],f=b.features,g,h;d.Qb=b.objectIdFieldName;g=0;for(h=f.length;g<h;++g)e.push(this.a(f[g],d));return e}return[this.a(b,d)]};\nBl.prototype.f=function(b){return b.spatialReference&&b.spatialReference.wkid?lc(\"EPSG:\"+b.spatialReference.wkid):null};function El(b){zc.call(this);this.a=b?b:null;Fl(this)}M(El,zc);function Gl(b){var c,d;if(b.a)for(c=0,d=b.a.length;c<d;++c)gb(b.a[c],\"change\",b.v,b)}function Fl(b){var c,d;if(b.a)for(c=0,d=b.a.length;c<d;++c)Q(b.a[c],\"change\",b.v,b)}p=El.prototype;p.clone=function(){var b=new El(null),c=this.a,d=[],e,f;e=0;for(f=c.length;e<f;++e)d.push(c[e].clone());Gl(b);b.a=d;Fl(b);b.v();return b};p.ib=function(b){Pb(b);for(var c=this.a,d=0,e=c.length;d<e;++d)Sb(b,c[d].C());return b};\np.Ob=function(b){this.s!=this.f&&(Ya(this.h),this.i=0,this.s=this.f);if(0>b||0!==this.i&&b<this.i)return this;var c=b.toString();if(this.h.hasOwnProperty(c))return this.h[c];var d=[],e=this.a,f=!1,g,h;g=0;for(h=e.length;g<h;++g){var k=e[g],l=k.Ob(b);d.push(l);l!==k&&(f=!0)}if(f)return b=new El(null),Gl(b),b.a=d,Fl(b),b.v(),this.h[c]=b;this.i=b;return this};p.U=function(){return\"GeometryCollection\"};p.rotate=function(b,c){for(var d=this.a,e=0,f=d.length;e<f;++e)d[e].rotate(b,c);this.v()};\np.Eb=function(b){var c=this.a,d,e;d=0;for(e=c.length;d<e;++d)c[d].Eb(b);this.v()};p.J=function(){Gl(this);El.X.J.call(this)};function Hl(b){b=b?b:{};this.defaultDataProjection=null;this.defaultDataProjection=lc(b.defaultDataProjection?b.defaultDataProjection:\"EPSG:4326\");this.c=b.geometryName}M(Hl,vl);function Il(b,c){return b?ul((0,Jl[b.type])(b),c):null}\nvar Jl={Point:function(b){return new Mc(b.coordinates)},LineString:function(b){return new xl(b.coordinates)},Polygon:function(b){return new Tc(b.coordinates)},MultiPoint:function(b){return new zl(b.coordinates)},MultiLineString:function(b){return new yl(b.coordinates)},MultiPolygon:function(b){return new Al(b.coordinates)},GeometryCollection:function(b,c){var d=b.geometries.map(function(b){return Il(b,c)});return new El(d)}};\nHl.prototype.a=function(b,c){var d=Il(b.geometry,c),e=new Dj;this.c&&Fj(e,this.c);Ej(e,d);void 0!==b.id&&(e.g=b.id,e.v());b.properties&&e.l(b.properties);return e};Hl.prototype.h=function(b,c){if(\"Feature\"==b.type)return[this.a(b,c)];if(\"FeatureCollection\"==b.type){var d=[],e=b.features,f,g;f=0;for(g=e.length;f<g;++f)d.push(this.a(e[f],c));return d}return[]};Hl.prototype.f=function(b){return(b=b.crs)?\"name\"==b.type?lc(b.properties.name):\"EPSG\"==b.type?lc(\"EPSG:\"+b.properties.code):null:this.defaultDataProjection};function Kl(b,c,d){if(\"array\"==ba(c))for(var e=0;e<c.length;e++)Kl(b,String(c[e]),d);else null!=c&&d.push(\"&\",b,\"\"===c?\"\":\"=\",encodeURIComponent(String(c)))};function Ll(b,c,d){Bc.call(this);Ml(this,b,c?c:0,d)}M(Ll,Bc);Ll.prototype.clone=function(){var b=new Ll(null);U(b,this.g,this.a.slice());b.v();return b};Ll.prototype.ib=function(b){var c=this.a,d=c[this.b]-c[0];return Ob(c[0]-d,c[1]-d,c[0]+d,c[1]+d,b)};Ll.prototype.U=function(){return\"Circle\"};function Ml(b,c,d,e){if(c){Dc(b,e,c,0);b.a||(b.a=[]);e=b.a;c=Ec(e,c);e[c++]=e[0]+d;var f;d=1;for(f=b.b;d<f;++d)e[c++]=e[d];e.length=c}else U(b,\"XY\",null);b.v()};function Nl(b,c,d,e,f){Be.call(this,b,c);this.g=d;this.b=new Image;null!==e&&(this.b.crossOrigin=e);this.f={};this.c=null;this.h=f}M(Nl,Be);p=Nl.prototype;p.J=function(){1==this.state&&Ol(this);this.a&&jb(this.a);this.state=5;Ce(this);Nl.X.J.call(this)};p.T=function(b){if(void 0!==b){var c=I(b);if(c in this.f)return this.f[c];b=$a(this.f)?this.b:this.b.cloneNode(!1);return this.f[c]=b}return this.b};p.getKey=function(){return this.g};p.ie=function(){this.state=3;Ol(this);Ce(this)};\np.je=function(){this.state=this.b.naturalWidth&&this.b.naturalHeight?2:4;Ol(this);Ce(this)};p.load=function(){0==this.state&&(this.state=1,Ce(this),this.c=[Q(this.b,\"error\",this.ie,this,!0),Q(this.b,\"load\",this.je,this,!0)],this.h(this,this.g))};function Ol(b){b.c.forEach(N);b.c=null};function Pl(b,c){R.call(this,b);this.feature=c}M(Pl,R);\nfunction Ql(b){xh.call(this,{handleDownEvent:Rl,handleEvent:Sl,handleUpEvent:Tl});this.P=null;this.o=!1;this.Ba=b.source?b.source:null;this.pa=b.features?b.features:null;this.Zc=b.snapTolerance?b.snapTolerance:12;this.D=b.type;this.b=Ul(this.D);this.na=b.minPoints?b.minPoints:this.b===Vl?3:2;this.ea=b.maxPoints?b.maxPoints:Infinity;var c=b.geometryFunction;if(!c)if(\"Circle\"===this.D)c=function(b,c){var d=c?c:new Ll([NaN,NaN]),h=b[0],k=b[1],l=h[0]-k[0],h=h[1]-k[1];Ml(d,b[0],Math.sqrt(l*l+h*h));return d};\nelse{var d,c=this.b;c===Xl?d=Mc:c===Yl?d=xl:c===Vl&&(d=Tc);c=function(b,c){var g=c;g?g.W(b):g=new d(b);return g}}this.u=c;this.B=this.i=this.a=this.j=this.g=this.h=null;this.gd=b.clickTolerance?b.clickTolerance*b.clickTolerance:36;this.Y=new Y({source:new Rj({useSpatialIndex:!1,wrapX:b.wrapX?b.wrapX:!1}),style:b.style?b.style:Zl()});this.Aa=b.geometryName;this.Ab=b.condition?b.condition:th;this.aa=b.freehandCondition?b.freehandCondition:uh;Q(this,rb(\"active\"),this.Ja,this)}M(Ql,xh);\nfunction Zl(){var b=Li();return function(c){return b[c.M().U()]}}Ql.prototype.setMap=function(b){Ql.X.setMap.call(this,b);this.Ja()};function Sl(b){this.b!==Yl&&this.b!==Vl||!this.aa(b)||(this.o=!0);var c=!this.o;this.o&&b.type===Ag?($l(this,b),c=!1):b.type===zg?c=am(this,b):b.type===tg&&(c=!1);return yh.call(this,b)&&c}function Rl(b){return this.Ab(b)?(this.P=b.pixel,!0):this.o?(this.P=b.pixel,this.h||bm(this,b),!0):!1}\nfunction Tl(b){this.o=!1;var c=this.P,d=b.pixel,e=c[0]-d[0],c=c[1]-d[1],d=!0;e*e+c*c<=this.gd&&(am(this,b),this.h?this.b===cm?dm(this):em(this,b)?dm(this):$l(this,b):(bm(this,b),this.b===Xl&&dm(this)),d=!1);return d}\nfunction am(b,c){if(b.h){var d=c.coordinate,e=b.g.M(),f;b.b===Xl?f=b.a:b.b===Vl?(f=b.a[0],f=f[f.length-1],em(b,c)&&(d=b.h.slice())):(f=b.a,f=f[f.length-1]);f[0]=d[0];f[1]=d[1];b.u(b.a,e);b.j&&b.j.M().W(d);e instanceof Tc&&b.b!==Vl?(b.i||(b.i=new Dj(new xl(null))),0>=e.c.length?e=null:(d=new Lc(null),U(d,e.g,e.a.slice(0,e.c[0])),d.v(),e=d),d=b.i.M(),U(d,e.g,e.a),d.v()):b.B&&(d=b.i.M(),d.W(b.B));fm(b)}else e=c.coordinate.slice(),b.j?b.j.M().W(e):(b.j=new Dj(new Mc(e)),fm(b));return!0}\nfunction em(b,c){var d=!1;if(b.g){var e=!1,f=[b.h];b.b===Yl?e=b.a.length>b.na:b.b===Vl&&(e=b.a[0].length>b.na,f=[b.a[0][0],b.a[0][b.a[0].length-2]]);if(e)for(var e=c.map,g=0,h=f.length;g<h;g++){var k=f[g],l=Eh(e,k),m=c.pixel,d=m[0]-l[0],l=m[1]-l[1],m=b.o&&b.aa(c)?1:b.Zc;if(d=Math.sqrt(d*d+l*l)<=m){b.h=k;break}}}return d}\nfunction bm(b,c){var d=c.coordinate;b.h=d;b.b===Xl?b.a=d.slice():b.b===Vl?(b.a=[[d.slice(),d.slice()]],b.B=b.a[0]):(b.a=[d.slice(),d.slice()],b.b===cm&&(b.B=b.a));b.B&&(b.i=new Dj(new xl(b.B)));d=b.u(b.a);b.g=new Dj;b.Aa&&Fj(b.g,b.Aa);Ej(b.g,d);fm(b);S(b,new Pl(\"drawstart\",b.g))}\nfunction $l(b,c){var d=c.coordinate,e=b.g.M(),f,g;if(b.b===Yl)b.h=d.slice(),g=b.a,g.push(d.slice()),f=g.length>b.ea,b.u(g,e);else if(b.b===Vl){g=b.a[0];g.push(d.slice());if(f=g.length>b.ea)b.h=g[0];b.u(b.a,e)}fm(b);f&&dm(b)}\nfunction dm(b){var c=gm(b),d=b.a,e=c.M();b.b===Yl?(d.pop(),b.u(d,e)):b.b===Vl&&(d[0].pop(),d[0].push(d[0][0]),b.u(d,e));\"MultiPoint\"===b.D?Ej(c,new zl([d])):\"MultiLineString\"===b.D?Ej(c,new yl([d])):\"MultiPolygon\"===b.D&&Ej(c,new Al([d]));S(b,new Pl(\"drawend\",c));b.pa&&b.pa.push(c);b.Ba&&b.Ba.Cb(c)}function gm(b){b.h=null;var c=b.g;c&&(b.g=null,b.j=null,b.i=null,b.Y.V().clear(!0));return c}Ql.prototype.w=dc;\nfunction fm(b){var c=[];b.g&&c.push(b.g);b.i&&c.push(b.i);b.j&&c.push(b.j);b=b.Y.V();b.clear(!0);b.Db(c)}Ql.prototype.Ja=function(){var b=this.S,c=this.get(\"active\");b&&c||gm(this);this.Y.setMap(c?b:null)};function Ul(b){var c;\"Point\"===b||\"MultiPoint\"===b?c=Xl:\"LineString\"===b||\"MultiLineString\"===b?c=Yl:\"Polygon\"===b||\"MultiPolygon\"===b?c=Vl:\"Circle\"===b&&(c=cm);return c}var Xl=\"Point\",Yl=\"LineString\",Vl=\"Polygon\",cm=\"Circle\";function hm(b,c,d,e,f,g,h,k,l,m,n){Be.call(this,f,0);this.u=void 0!==n?n:!1;this.s=h;this.o=k;this.c=null;this.f={};this.g=c;this.l=e;this.i=g?g:f;this.b=[];this.Sa=null;this.h=0;g=Je(e,this.i);k=this.l.C();f=this.g.C();g=k?$b(g,k):g;if(0===Ub(g))this.state=4;else if((k=b.C())&&(f?f=$b(f,k):f=k),k=e.I(this.i[0]),n=Yb(g),e=xc(d,b)(n,void 0,n.length),k=d.getPointResolution(k,n),n=pc(d),void 0!==n&&(k*=n),n=pc(b),void 0!==n&&(k/=n),e=b.getPointResolution(k,e)/k,isFinite(e)&&0<e&&(k/=e),e=k,!isFinite(e)||\n0>=e)this.state=4;else if(this.j=new Aj(b,d,g,f,e*(void 0!==m?m:.5)),0===this.j.c.length)this.state=4;else if(this.h=Qe(c,e),d=Cj(this.j),f&&(b.a?(d[1]=Ca(d[1],f[1],f[3]),d[3]=Ca(d[3],f[1],f[3])):d=$b(d,f)),Ub(d))if(b=Ke(c,d,this.h),100>b.ha()*(b.c-b.b+1)){for(c=b.a;c<=b.f;c++)for(d=b.b;d<=b.c;d++)(m=l(this.h,c,d,h))&&this.b.push(m);0===this.b.length&&(this.state=4)}else this.state=3;else this.state=4}M(hm,Be);hm.prototype.J=function(){1==this.state&&(this.Sa.forEach(N),this.Sa=null);hm.X.J.call(this)};\nhm.prototype.T=function(b){if(void 0!==b){var c=I(b);if(c in this.f)return this.f[c];b=$a(this.f)?this.c:this.c.cloneNode(!1);return this.f[c]=b}return this.c};\nhm.prototype.Uc=function(){var b=[];this.b.forEach(function(c){c&&2==c.N()&&b.push({extent:Je(this.g,c.L),image:c.T()})},this);this.b.length=0;if(0===b.length)this.state=3;else{var c=this.i[0],d=Pe(this.l,c),e=ea(d)?d:d[0],d=ea(d)?d:d[1],c=this.l.I(c),f=this.g.I(this.h),g=Je(this.l,this.i);this.c=zj(e,d,this.s,f,this.g.C(),c,g,this.j,b,this.o,this.u);this.state=2}Ce(this)};\nhm.prototype.load=function(){if(0==this.state){this.state=1;Ce(this);var b=0;this.Sa=[];this.b.forEach(function(c){var d=c.N();if(0==d||1==d){b++;var e;e=Q(c,\"change\",function(){var d=c.N();if(2==d||3==d||4==d)N(e),b--,0===b&&(this.Sa.forEach(N),this.Sa=null,this.Uc())},this);this.Sa.push(e)}},this);this.b.forEach(function(b){0==b.N()&&b.load()});0===b&&x.setTimeout(this.Uc.bind(this),0)}};function im(b){gk.call(this,{attributions:b.attributions,cacheSize:b.cacheSize,extent:b.extent,logo:b.logo,opaque:b.opaque,projection:b.projection,state:b.state,tileGrid:b.tileGrid,tileLoadFunction:b.tileLoadFunction?b.tileLoadFunction:jm,tilePixelRatio:b.tilePixelRatio,tileUrlFunction:b.tileUrlFunction,url:b.url,urls:b.urls,wrapX:b.wrapX});this.crossOrigin=void 0!==b.crossOrigin?b.crossOrigin:null;this.tileClass=void 0!==b.tileClass?b.tileClass:Nl;this.b={};this.o={};this.S=b.reprojectionErrorThreshold}\nM(im,gk);p=im.prototype;p.Qc=function(){if(ze(this.a))return!0;for(var b in this.b)if(ze(this.b[b]))return!0;return!1};p.Rc=function(b,c){var d=this.bb(b);Ae(this.a,this.a==d?c:{});for(var e in this.b){var f=this.b[e];Ae(f,f==d?c:{})}};p.kb=function(){return 0};p.Mb=function(b){return this.c&&b&&!wc(this.c,b)?!1:im.X.Mb.call(this,b)};p.la=function(b){var c=this.c;return!this.tileGrid||c&&!wc(c,b)?(c=I(b).toString(),c in this.o||(this.o[c]=Se(b)),this.o[c]):this.tileGrid};\np.bb=function(b){var c=this.c;if(!c||wc(c,b))return this.a;b=I(b).toString();b in this.b||(this.b[b]=new ye);return this.b[b]};function km(b,c,d,e,f,g){c=[c,d,e];f=(d=Ye(b,c,g))?b.tileUrlFunction(d,f,g):void 0;f=new b.tileClass(c,void 0!==f?0:4,void 0!==f?f:\"\",b.crossOrigin,b.tileLoadFunction);f.key=\"\";Q(f,\"change\",b.D,b);return f}\nfunction Tg(b,c,d,e,f,g){if(b.c&&g&&!wc(b.c,g)){var h=b.bb(g);d=[c,d,e];c=b.lb.apply(b,d);if(we(h,c))return h.get(c);var k=b.c;e=b.la(k);var l=b.la(g),m=Ye(b,d,g);b=new hm(k,e,g,l,d,m,b.mb(f),0,function(b,c,d,e){return lm(this,b,c,d,e,k)}.bind(b),b.S,!1);h.set(c,b);return b}return lm(b,c,d,e,f,g)}\nfunction lm(b,c,d,e,f,g){var h=null,k=b.lb(c,d,e);if(we(b.a,k)){if(h=b.a.get(k),\"\"!=h.key){var l=h;h.a&&\"\"==h.a.key?(h=h.a,2==l.N()&&(h.a=l)):(h=km(b,c,d,e,f,g),2==l.N()?h.a=l:l.a&&2==l.a.N()&&(h.a=l.a,l.a=null));h.a&&(h.a.a=null);b.a.replace(k,h)}}else h=km(b,c,d,e,f,g),b.a.set(k,h);return h}function jm(b,c){b.T().src=c};function mm(b){var c=void 0!==b.projection?b.projection:\"EPSG:3857\",d;if(void 0!==b.tileGrid)d=b.tileGrid;else{d={extent:Te(c),maxZoom:b.maxZoom,minZoom:b.minZoom,tileSize:b.tileSize};var e={};Wa(e,void 0!==d?d:{});void 0===e.extent&&(e.extent=lc(\"EPSG:3857\").C());e.resolutions=Ue(e.extent,e.maxZoom,e.tileSize);delete e.maxZoom;d=new Fe(e)}im.call(this,{attributions:b.attributions,cacheSize:b.cacheSize,crossOrigin:b.crossOrigin,logo:b.logo,opaque:b.opaque,projection:c,reprojectionErrorThreshold:b.reprojectionErrorThreshold,\ntileGrid:d,tileLoadFunction:b.tileLoadFunction,tilePixelRatio:b.tilePixelRatio,tileUrlFunction:b.tileUrlFunction,url:b.url,urls:b.urls,wrapX:void 0!==b.wrapX?b.wrapX:!0})}M(mm,im);function nm(b){b=b||{};var c;void 0!==b.attributions?c=b.attributions:c=[om];mm.call(this,{attributions:c,cacheSize:b.cacheSize,crossOrigin:void 0!==b.crossOrigin?b.crossOrigin:\"anonymous\",opaque:void 0!==b.opaque?b.opaque:!0,maxZoom:void 0!==b.maxZoom?b.maxZoom:19,reprojectionErrorThreshold:b.reprojectionErrorThreshold,tileLoadFunction:b.tileLoadFunction,url:void 0!==b.url?b.url:\"https://{a-c}.tile.openstreetmap.org/{z}/{x}/{y}.png\",wrapX:b.wrapX})}M(nm,mm);var om=new jd({html:'&copy; <a href=\"http://www.openstreetmap.org/copyright\">OpenStreetMap</a> contributors.'});function pm(b){b=b||{};var c=qm[b.layer];this.u=b.layer;mm.call(this,{attributions:c.attributions,cacheSize:b.cacheSize,crossOrigin:\"anonymous\",logo:\"https://developer.mapquest.com/content/osm/mq_logo.png\",maxZoom:c.maxZoom,reprojectionErrorThreshold:b.reprojectionErrorThreshold,opaque:c.opaque,tileLoadFunction:b.tileLoadFunction,url:void 0!==b.url?b.url:\"https://otile{1-4}-s.mqcdn.com/tiles/1.0.0/\"+this.u+\"/{z}/{x}/{y}.jpg\"})}M(pm,mm);\nvar rm=new jd({html:'Tiles Courtesy of <a href=\"http://www.mapquest.com/\">MapQuest</a>'}),qm={osm:{maxZoom:19,opaque:!0,attributions:[rm,om]},sat:{maxZoom:18,opaque:!0,attributions:[rm,new jd({html:\"Portions Courtesy NASA/JPL-Caltech and U.S. Depart. of Agriculture, Farm Service Agency\"})]},hyb:{maxZoom:18,opaque:!1,attributions:[rm,om]}};function sm(b){b=b||{};im.call(this,{attributions:b.attributions,cacheSize:b.cacheSize,crossOrigin:b.crossOrigin,logo:b.logo,projection:b.projection,reprojectionErrorThreshold:b.reprojectionErrorThreshold,tileGrid:b.tileGrid,tileLoadFunction:b.tileLoadFunction,url:b.url,urls:b.urls,wrapX:void 0!==b.wrapX?b.wrapX:!0});this.P=b.params||{};this.u=Jb()}M(sm,im);sm.prototype.mb=function(b){return b};\nsm.prototype.g=function(b,c,d){var e=this.tileGrid;e||(e=this.la(d));if(!(e.Nb().length<=b[0])){var f=Je(e,b,this.u),g=tb(Pe(e,b[0]),this.h);1!=c&&(g=sb(g,c,this.h));e={F:\"image\",FORMAT:\"PNG32\",TRANSPARENT:!0};Wa(e,this.P);var h;var k=this.urls;if(k){d=d.qa.split(\":\").pop();e.SIZE=g[0]+\",\"+g[1];e.BBOX=f.join(\",\");e.BBOXSR=d;e.IMAGESR=d;e.DPI=Math.round(e.DPI?e.DPI*c:90*c);b=[(1==k.length?k[0]:k[Ea((b[1]<<b[0])+b[2],k.length)]).replace(/MapServer\\/?$/,\"MapServer/export\").replace(/ImageServer\\/?$/,\n\"ImageServer/exportImage\")];for(h in e)Kl(h,e[h],b);b[1]&&(h=b[0],c=h.indexOf(\"#\"),0<=c&&(b.push(h.substr(c)),b[0]=h=h.substr(0,c)),c=h.indexOf(\"?\"),0>c?b[1]=\"?\":c==h.length-1&&(b[1]=void 0));h=b.join(\"\")}else h=void 0;return h}};F(\"ol.format.GeoJSON\",Hl,OPENLAYERS);Hl.prototype.readFeatures=Hl.prototype.b;Hl.prototype.readFeature=Hl.prototype.g;F(\"ol.format.EsriJSON\",Bl,OPENLAYERS);Bl.prototype.readFeatures=Bl.prototype.b;Bl.prototype.readFeature=Bl.prototype.g;F(\"ol.style.Style\",Fi,OPENLAYERS);F(\"ol.style.Circle\",Ei,OPENLAYERS);F(\"ol.style.Fill\",yi,OPENLAYERS);F(\"ol.style.Stroke\",Di,OPENLAYERS);F(\"ol.style.Icon\",Vg,OPENLAYERS);F(\"ol.View\",V,OPENLAYERS);V.prototype.on=V.prototype.ba;V.prototype.getZoom=V.prototype.wd;\nV.prototype.setZoom=V.prototype.Ee;V.prototype.getCenter=V.prototype.ia;V.prototype.setCenter=V.prototype.oa;V.prototype.calculateExtent=V.prototype.jc;V.prototype.getProjection=V.prototype.le;V.prototype.fit=V.prototype.nd;F(\"ol.control.defaults\",ef,OPENLAYERS);F(\"ol.layer.Tile\",X,OPENLAYERS);X.prototype.getVisible=X.prototype.cb;X.prototype.setVisible=X.prototype.Gc;X.prototype.getZIndex=X.prototype.Vb;X.prototype.setZIndex=X.prototype.Hc;X.prototype.getOpacity=X.prototype.Ub;\nX.prototype.setOpacity=X.prototype.Fc;X.prototype.getSource=X.prototype.V;X.prototype.setSource=X.prototype.Zb;F(\"ol.layer.Vector\",Y,OPENLAYERS);Y.prototype.getVisible=Y.prototype.cb;Y.prototype.setVisible=Y.prototype.Gc;Y.prototype.getSource=Y.prototype.V;Y.prototype.setStyle=Y.prototype.s;Y.prototype.getZIndex=Y.prototype.Vb;Y.prototype.setZIndex=Y.prototype.Hc;Y.prototype.getOpacity=Y.prototype.Ub;Y.prototype.setOpacity=Y.prototype.Fc;Y.prototype.getSource=Y.prototype.V;Y.prototype.setSource=Y.prototype.Zb;\nF(\"ol.source.OSM\",nm,OPENLAYERS);nm.prototype.refresh=nm.prototype.wa;F(\"ol.source.MapQuest\",pm,OPENLAYERS);pm.prototype.refresh=pm.prototype.wa;F(\"ol.source.XYZ\",mm,OPENLAYERS);mm.prototype.refresh=mm.prototype.wa;mm.prototype.setUrl=mm.prototype.s;mm.prototype.refresh=mm.prototype.wa;F(\"ol.Map\",Z,OPENLAYERS);Z.prototype.on=Z.prototype.ba;Z.prototype.getTarget=Z.prototype.Tb;Z.prototype.getTargetElement=Z.prototype.Na;Z.prototype.getView=Z.prototype.O;Z.prototype.addOverlay=Z.prototype.ld;\nZ.prototype.addLayer=Z.prototype.kd;Z.prototype.removeLayer=Z.prototype.Ae;Z.prototype.getEventPixel=Z.prototype.vc;Z.prototype.hasFeatureAtPixel=Z.prototype.Td;Z.prototype.getSize=Z.prototype.Pa;Z.prototype.updateSize=Z.prototype.vb;Z.prototype.forEachFeatureAtPixel=Z.prototype.pd;Z.prototype.addInteraction=Z.prototype.jd;Z.prototype.removeInteraction=Z.prototype.ze;Z.prototype.beforeRender=Z.prototype.fa;Z.prototype.addControl=Z.prototype.hd;F(\"ol.source.Vector\",Rj,OPENLAYERS);\nRj.prototype.getFeatures=Rj.prototype.pe;Rj.prototype.getExtent=Rj.prototype.C;Rj.prototype.refresh=Rj.prototype.wa;Rj.prototype.addFeatures=Rj.prototype.Db;Rj.prototype.addFeature=Rj.prototype.Cb;Rj.prototype.clear=Rj.prototype.clear;Rj.prototype.forEachFeature=Rj.prototype.od;Rj.prototype.refresh=Rj.prototype.wa;F(\"ol.source.TileArcGISRest\",sm,OPENLAYERS);sm.prototype.refresh=sm.prototype.wa;F(\"ol.Overlay\",nl,OPENLAYERS);nl.prototype.setPosition=nl.prototype.Ec;F(\"ol.Feature\",Dj,OPENLAYERS);\nDj.prototype.getProperties=Dj.prototype.za;Dj.prototype.setProperties=Dj.prototype.l;Dj.prototype.getGeometry=Dj.prototype.M;F(\"ol.geom.Point\",Mc,OPENLAYERS);Mc.prototype.transform=Mc.prototype.o;Mc.prototype.getCoordinates=Mc.prototype.ra;Mc.prototype.getExtent=Mc.prototype.C;F(\"ol.geom.Polygon\",Tc,OPENLAYERS);Tc.prototype.getCoordinates=Tc.prototype.ra;Tc.prototype.getExtent=Tc.prototype.C;Tc.prototype.transform=Tc.prototype.o;F(\"ol.geom.LineString\",xl,OPENLAYERS);xl.prototype.getCoordinates=xl.prototype.ra;\nxl.prototype.getExtent=xl.prototype.C;xl.prototype.transform=xl.prototype.o;F(\"ol.proj.Projection\",ic,OPENLAYERS);ic.prototype.getCode=ic.prototype.l;F(\"ol.interaction.Draw\",Ql,OPENLAYERS);Ql.prototype.on=Ql.prototype.ba;F(\"ol.animation.pan\",cd,OPENLAYERS);F(\"ol.control.FullScreen\",kf,OPENLAYERS);\n  return OPENLAYERS.ol;\n}));\n\n","const ol = require('./ol-build');\n\nexport default ol;","/**\r\n * Created by gavorhes on 12/11/2015.\r\n */\r\nimport provide from './provide';\r\nlet nm = provide('util.checkDefined');\r\n\r\n/**\r\n * check if the input is undefined or null\r\n * @param {*} input - input pointer\r\n * @returns {boolean} true undefined or null\r\n */\r\nexport function undefinedOrNull (input){\r\n    \"use strict\";\r\n\r\n    return (typeof input === 'undefined' || input === null);\r\n}\r\n\r\nnm.undefinedOrNull = undefinedOrNull;\r\n\r\n\r\n/**\r\n * check if the input is defined and not null\r\n * @param {*} input - input pointer\r\n * @returns {boolean} true defined and not null\r\n */\r\nexport function definedAndNotNull (input){\r\n    \"use strict\";\r\n\r\n    return !(undefinedOrNull(input));\r\n}\r\n\r\nnm.definedAndNotNull = definedAndNotNull;\r\n","/**\r\n * Created by gavorhes on 11/3/2015.\r\n */\r\nimport provide from './provide';\r\nimport * as chk from './checkDefined';\r\nlet nm = provide('util.colors');\r\n\r\n\r\n/**\r\n * helper function to convert to hex\r\n * @param {number|string} x - the number to convert to hex\r\n * @returns {string} number as hex\r\n * @private\r\n */\r\nfunction _hex(x) {\r\n    let hexDigits = [\"0\", \"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\", \"8\", \"9\", \"a\", \"b\", \"c\", \"d\", \"e\", \"f\"];\r\n\r\n    return isNaN(x) ? \"00\" : hexDigits[(x - x % 16) / 16] + hexDigits[x % 16];\r\n}\r\n\r\n/**\r\n * converts an RGB string to hex\r\n * @param {string} rgb - rgb color\r\n * @returns {string} rbg as hex\r\n */\r\nexport function rgb2hex(rgb) {\r\n    let rgb1 = rgb.match(/^rgb\\((\\d+),\\s*(\\d+),\\s*(\\d+)\\)$/);\r\n\r\n    return (\"#\" + _hex(rgb1[1]) + _hex(rgb1[2]) + _hex(rgb1[3])).toUpperCase();\r\n}\r\n\r\nnm.rgb2hex = rgb2hex;\r\n\r\n\r\n/**\r\n * Convert hex string to RGB or RGBA string\r\n * @param {string} hexString - hex color string\r\n * @param {number} [alphaVal=undefined] Alpha value\r\n * @returns {string} - rgb or rgba color\r\n */\r\nexport function hexAlphaToRgbOrRgba(hexString, alphaVal) {\r\n    hexString = ((hexString.charAt(0) == \"#\") ? hexString.substring(1, 7) : hexString);\r\n    let r = parseInt(hexString.substring(0, 2), 16).toString() || '0';\r\n    let g = parseInt(hexString.substring(2, 4), 16).toString() || '0';\r\n    let b = parseInt(hexString.substring(4, 6), 16).toString() || '0';\r\n    if (alphaVal) {\r\n        return `rgba(${r},${g},${b},${alphaVal})`;\r\n    } else {\r\n        return `rgba(${r},${g},${b})`;\r\n    }\r\n}\r\n\r\nnm.hexAlphaToRgbOrRgba = hexAlphaToRgbOrRgba;\r\n\r\n\r\n/**\r\n * adds alpha value to rgb string 'rgb(r, b, g)', returns 'rgba(r, g, b, a)'\r\n * @param {string} rgb - rgb color\r\n * @param {number} alpha - alpha value 0 to 1\r\n * @returns {string} rgba color\r\n */\r\nexport function rgbToRgba(rgb, alpha) {\r\n    let pieces = rgb.split(',');\r\n    pieces[0] = pieces[0].replace('rgb', 'rgba');\r\n    pieces[2] = pieces[2].replace(')', '');\r\n    pieces.push(' ' + alpha.toFixed(1) + ')');\r\n\r\n    return pieces.join(',');\r\n}\r\n\r\nnm.rgbToRgba = rgbToRgba;\r\n\r\n\r\n/**\r\n * @typedef {function} colorLookupByNumber\r\n * @param {number} num - the number to use to retrieve the color\r\n * @returns {string} rgb color\r\n */\r\n\r\n\r\n/**\r\n * Make a blue green red gradient\r\n * @param {number} minVal - minimum value\r\n * @param {number} maxVal - maximum value\r\n * @param {boolean} flipColors - if the colors should be flipped\r\n * @returns {colorLookupByNumber} color lookup function\r\n */\r\nexport function makeBlueGreenRedGradient(minVal, maxVal, flipColors) {\r\n\r\n    if (typeof flipColors != \"boolean\") {\r\n        flipColors = false;\r\n    }\r\n\r\n    return function (theVal) {\r\n        let r, g, b;\r\n        let ratio;\r\n\r\n        if (chk.undefinedOrNull(theVal)) {\r\n            return 'rgb(100,100,100)';\r\n        }\r\n\r\n        let percent = (theVal - minVal) / (maxVal - minVal);\r\n\r\n        if (flipColors == true) {\r\n            percent = 1 - percent;\r\n        }\r\n\r\n        if (percent >= 1) {\r\n            r = 255;\r\n            g = 0;\r\n            b = 0;\r\n        } else if (percent <= 0) {\r\n            r = 0;\r\n            g = 0;\r\n            b = 255;\r\n        } else if (percent < .25) {\r\n            // green up, blue constant\r\n            r = 0;\r\n            g = Math.floor(255 * percent / 0.25);\r\n            b = 255;\r\n        } else if (percent < 0.50) {\r\n            //blue down, green constant\r\n            ratio = (percent - 0.25) / 0.25;\r\n            r = 0;\r\n            g = 255;\r\n            b = 255 - Math.floor(255 * ratio);\r\n        } else if (percent < 0.75) {\r\n            // red up, green constant\r\n            ratio = (percent - 0.5) / 0.25;\r\n            r = Math.floor(255 * ratio);\r\n            g = 255;\r\n            b = 0;\r\n        } else {\r\n            // green down, red constant\r\n            ratio = (percent - 0.75) / 0.25;\r\n            r = 255;\r\n            g = 255 - Math.floor(255 * ratio);\r\n            b = 0;\r\n        }\r\n\r\n        r = r.toFixed();\r\n        g = g.toFixed();\r\n        b = b.toFixed();\r\n\r\n        return 'rgb(' + r + ',' + g + ',' + b + ')';\r\n    };\r\n}\r\n\r\nnm.makeBlueGreenRedGradient = makeBlueGreenRedGradient;\r\n\r\n\r\n/**\r\n * Create a function that will return colors based on a gradient\r\n * @param {number} median - median value\r\n * @param {number} stdDev - standard deviation\r\n * @param {boolean} flipColors - if the colors should be flipped\r\n * @returns {colorLookupByNumber} color lookup function\r\n */\r\nexport function makeBlueGreenRedGradientZScore(median, stdDev, flipColors) {\r\n\r\n    let grd = makeBlueGreenRedGradient(-2.5, 2.5, flipColors);\r\n\r\n    return function (theVal) {\r\n\r\n        let zScore;\r\n        if (theVal == null) {\r\n            zScore = null;\r\n        } else {\r\n            zScore = (theVal - median) / stdDev;\r\n        }\r\n\r\n        return grd(zScore);\r\n    };\r\n}\r\n\r\nnm.makeBlueGreenRedGradientZScore = makeBlueGreenRedGradientZScore;\r\n","/**\r\n * Created by gavorhes on 11/3/2015.\r\n */\r\n\r\nimport provide from './provide';\r\nlet nm = provide('util');\r\n\r\n\r\n/**\r\n * guids are used to uniquely identify groups and features\r\n * @returns {string} a new guid\r\n */\r\nfunction makeGuid() {\r\n        return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'\r\n            .replace(/[xy]/g, function (c) {\r\n                let r = Math.random() * 16 | 0, v = c == 'x' ? r : r & 0x3 | 0x8;\r\n\r\n                return v.toString(16);\r\n            });\r\n\r\n}\r\nnm.makeGuid = makeGuid;\r\nexport default makeGuid;\r\n\r\n\r\n","/**\r\n * Created by gavorhes on 12/10/2015.\r\n */\r\n\r\n\r\n/**\r\n * create a namespace on the gv object\r\n * @param {string} namespace to create\r\n * @returns {object} object representing the namespace\r\n */\r\nfunction provide(namespace){\r\n    \"use strict\";\r\n    if (typeof window.gv == 'undefined'){\r\n        window.gv = {};\r\n    }\r\n\r\n    let parts = namespace.split('.');\r\n    let nameSpace = window.gv;\r\n\r\n    for (let i=0; i< parts.length; i++){\r\n        let newObject = nameSpace[parts[i]];\r\n\r\n        if (typeof newObject == 'undefined'){\r\n            nameSpace[parts[i]] = {};\r\n        }\r\n\r\n        nameSpace = nameSpace[parts[i]];\r\n    }\r\n\r\n    return nameSpace;\r\n}\r\n\r\nprovide('util');\r\nwindow.gv.util.provide = provide;\r\n\r\nexport default provide;\r\n","/**\r\n * Created by gavorhes on 5/19/2016.\r\n */\r\n\r\nimport 'babel-polyfill';\r\nimport quickMap from '../src/olHelpers/quickMap';\r\nimport ItsLayerCollection from '../src/collections/ItsLayerCollection';\r\nimport LayerLegend from '../src/collections/LayerLegend';\r\nimport LayerItsInventory from '../src/layers/LayerItsInventory';\r\nimport LayerBaseVectorGeoJson from '../src/layers/LayerBaseVectorGeoJson';\r\nimport LayerEsriMapServer from '../src/layers/LayerEsriMapServer';\r\n\r\nlet map = quickMap({fullScreen: true});\r\n\r\n//\r\n// let inventLyr = new LayerItsInventory({name: 'Camera', itsType: 'cctv', minZoom: 4, itsIcon: 'cctv.png'});\r\n// map.addLayer(inventLyr.olLayer);\r\n//\r\n// inventLyr.visible = true;\r\n//\r\n// let newLayer = new LayerBaseVectorGeoJson('', {});\r\n//\r\n//\r\n//         let metamanagerSegments = new LayerEsriMapServer(\r\n//             'http://transportal.cee.wisc.edu/applications/arcgis2/rest/services/MetaManager/MM_All_Segments/MapServer',\r\n//             {\r\n//                 minZoom: 3,\r\n//                 visible: true,\r\n//                 name: 'Metamanager Segments',\r\n//                 opacity: 0.6\r\n//             });\r\n//\r\n// // console.log(metamanagerSegments.visible);\r\n//\r\n// map.addLayer(metamanagerSegments.olLayer);\r\n\r\n\r\n\r\n\r\nlet itsLayerCollection = new ItsLayerCollection(map);\r\n\r\nfor (let l of itsLayerCollection.layers){\r\n    console.log(l.visible);\r\n    console.log(l);\r\n}\r\n\r\n\r\nlet layerArray = [\r\n    {\r\n        groupName: 'ITS Inventory Layers',\r\n        collapse: false,\r\n        addCheck: true,\r\n        items: itsLayerCollection.layers\r\n    }\r\n];\r\n\r\nlet legend = new LayerLegend(layerArray, 'legend-container', {});\r\n\r\n\r\n\r\n"]}
\ No newline at end of file
diff --git a/test-build/test-bundle.js b/test-build/test-bundle.js
new file mode 100644
index 0000000000000000000000000000000000000000..8593701aeb7773dae0bc1df2cbc79ac8a7c6d030
--- /dev/null
+++ b/test-build/test-bundle.js
@@ -0,0 +1,30156 @@
+(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){
+(function (global){
+/*istanbul ignore next*/"use strict";
+
+/*istanbul ignore next*/require("core-js/shim");
+
+/*istanbul ignore next*/require("babel-regenerator-runtime");
+
+/*istanbul ignore next*/require("core-js/fn/regexp/escape");
+
+/* eslint max-len: 0 */
+
+if (global._babelPolyfill) {
+  throw new Error("only one instance of babel-polyfill is allowed");
+}
+global._babelPolyfill = true;
+
+// Should be removed in the next major release:
+
+var DEFINE_PROPERTY = "defineProperty";
+function define(O, key, value) {
+  O[key] || Object[DEFINE_PROPERTY](O, key, {
+    writable: true,
+    configurable: true,
+    value: value
+  });
+}
+
+define(String.prototype, "padLeft", "".padStart);
+define(String.prototype, "padRight", "".padEnd);
+
+"pop,reverse,shift,keys,values,entries,indexOf,every,some,forEach,map,filter,find,findIndex,includes,join,slice,concat,push,splice,unshift,sort,lastIndexOf,reduce,reduceRight,copyWithin,fill".split(",").forEach(function (key) {
+  [][key] && define(Array, key, Function.call.bind([][key]));
+});
+}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
+
+},{"babel-regenerator-runtime":2,"core-js/fn/regexp/escape":3,"core-js/shim":297}],2:[function(require,module,exports){
+(function (process,global){
+/**
+ * Copyright (c) 2014, Facebook, Inc.
+ * All rights reserved.
+ *
+ * This source code is licensed under the BSD-style license found in the
+ * https://raw.github.com/facebook/regenerator/master/LICENSE file. An
+ * additional grant of patent rights can be found in the PATENTS file in
+ * the same directory.
+ */
+
+!(function(global) {
+  "use strict";
+
+  var hasOwn = Object.prototype.hasOwnProperty;
+  var undefined; // More compressible than void 0.
+  var iteratorSymbol =
+    typeof Symbol === "function" && Symbol.iterator || "@@iterator";
+
+  var inModule = typeof module === "object";
+  var runtime = global.regeneratorRuntime;
+  if (runtime) {
+    if (inModule) {
+      // If regeneratorRuntime is defined globally and we're in a module,
+      // make the exports object identical to regeneratorRuntime.
+      module.exports = runtime;
+    }
+    // Don't bother evaluating the rest of this file if the runtime was
+    // already defined globally.
+    return;
+  }
+
+  // Define the runtime globally (as expected by generated code) as either
+  // module.exports (if we're in a module) or a new, empty object.
+  runtime = global.regeneratorRuntime = inModule ? module.exports : {};
+
+  function wrap(innerFn, outerFn, self, tryLocsList) {
+    // If outerFn provided, then outerFn.prototype instanceof Generator.
+    var generator = Object.create((outerFn || Generator).prototype);
+    var context = new Context(tryLocsList || []);
+
+    // The ._invoke method unifies the implementations of the .next,
+    // .throw, and .return methods.
+    generator._invoke = makeInvokeMethod(innerFn, self, context);
+
+    return generator;
+  }
+  runtime.wrap = wrap;
+
+  // Try/catch helper to minimize deoptimizations. Returns a completion
+  // record like context.tryEntries[i].completion. This interface could
+  // have been (and was previously) designed to take a closure to be
+  // invoked without arguments, but in all the cases we care about we
+  // already have an existing method we want to call, so there's no need
+  // to create a new function object. We can even get away with assuming
+  // the method takes exactly one argument, since that happens to be true
+  // in every case, so we don't have to touch the arguments object. The
+  // only additional allocation required is the completion record, which
+  // has a stable shape and so hopefully should be cheap to allocate.
+  function tryCatch(fn, obj, arg) {
+    try {
+      return { type: "normal", arg: fn.call(obj, arg) };
+    } catch (err) {
+      return { type: "throw", arg: err };
+    }
+  }
+
+  var GenStateSuspendedStart = "suspendedStart";
+  var GenStateSuspendedYield = "suspendedYield";
+  var GenStateExecuting = "executing";
+  var GenStateCompleted = "completed";
+
+  // Returning this object from the innerFn has the same effect as
+  // breaking out of the dispatch switch statement.
+  var ContinueSentinel = {};
+
+  // Dummy constructor functions that we use as the .constructor and
+  // .constructor.prototype properties for functions that return Generator
+  // objects. For full spec compliance, you may wish to configure your
+  // minifier not to mangle the names of these two functions.
+  function Generator() {}
+  function GeneratorFunction() {}
+  function GeneratorFunctionPrototype() {}
+
+  var Gp = GeneratorFunctionPrototype.prototype = Generator.prototype;
+  GeneratorFunction.prototype = Gp.constructor = GeneratorFunctionPrototype;
+  GeneratorFunctionPrototype.constructor = GeneratorFunction;
+  GeneratorFunction.displayName = "GeneratorFunction";
+
+  // Helper for defining the .next, .throw, and .return methods of the
+  // Iterator interface in terms of a single ._invoke method.
+  function defineIteratorMethods(prototype) {
+    ["next", "throw", "return"].forEach(function(method) {
+      prototype[method] = function(arg) {
+        return this._invoke(method, arg);
+      };
+    });
+  }
+
+  runtime.isGeneratorFunction = function(genFun) {
+    var ctor = typeof genFun === "function" && genFun.constructor;
+    return ctor
+      ? ctor === GeneratorFunction ||
+        // For the native GeneratorFunction constructor, the best we can
+        // do is to check its .name property.
+        (ctor.displayName || ctor.name) === "GeneratorFunction"
+      : false;
+  };
+
+  runtime.mark = function(genFun) {
+    if (Object.setPrototypeOf) {
+      Object.setPrototypeOf(genFun, GeneratorFunctionPrototype);
+    } else {
+      genFun.__proto__ = GeneratorFunctionPrototype;
+    }
+    genFun.prototype = Object.create(Gp);
+    return genFun;
+  };
+
+  // Within the body of any async function, `await x` is transformed to
+  // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test
+  // `value instanceof AwaitArgument` to determine if the yielded value is
+  // meant to be awaited. Some may consider the name of this method too
+  // cutesy, but they are curmudgeons.
+  runtime.awrap = function(arg) {
+    return new AwaitArgument(arg);
+  };
+
+  function AwaitArgument(arg) {
+    this.arg = arg;
+  }
+
+  function AsyncIterator(generator) {
+    // This invoke function is written in a style that assumes some
+    // calling function (or Promise) will handle exceptions.
+    function invoke(method, arg) {
+      var result = generator[method](arg);
+      var value = result.value;
+      return value instanceof AwaitArgument
+        ? Promise.resolve(value.arg).then(invokeNext, invokeThrow)
+        : Promise.resolve(value).then(function(unwrapped) {
+            // When a yielded Promise is resolved, its final value becomes
+            // the .value of the Promise<{value,done}> result for the
+            // current iteration. If the Promise is rejected, however, the
+            // result for this iteration will be rejected with the same
+            // reason. Note that rejections of yielded Promises are not
+            // thrown back into the generator function, as is the case
+            // when an awaited Promise is rejected. This difference in
+            // behavior between yield and await is important, because it
+            // allows the consumer to decide what to do with the yielded
+            // rejection (swallow it and continue, manually .throw it back
+            // into the generator, abandon iteration, whatever). With
+            // await, by contrast, there is no opportunity to examine the
+            // rejection reason outside the generator function, so the
+            // only option is to throw it from the await expression, and
+            // let the generator function handle the exception.
+            result.value = unwrapped;
+            return result;
+          });
+    }
+
+    if (typeof process === "object" && process.domain) {
+      invoke = process.domain.bind(invoke);
+    }
+
+    var invokeNext = invoke.bind(generator, "next");
+    var invokeThrow = invoke.bind(generator, "throw");
+    var invokeReturn = invoke.bind(generator, "return");
+    var previousPromise;
+
+    function enqueue(method, arg) {
+      function callInvokeWithMethodAndArg() {
+        return invoke(method, arg);
+      }
+
+      return previousPromise =
+        // If enqueue has been called before, then we want to wait until
+        // all previous Promises have been resolved before calling invoke,
+        // so that results are always delivered in the correct order. If
+        // enqueue has not been called before, then it is important to
+        // call invoke immediately, without waiting on a callback to fire,
+        // so that the async generator function has the opportunity to do
+        // any necessary setup in a predictable way. This predictability
+        // is why the Promise constructor synchronously invokes its
+        // executor callback, and why async functions synchronously
+        // execute code before the first await. Since we implement simple
+        // async functions in terms of async generators, it is especially
+        // important to get this right, even though it requires care.
+        previousPromise ? previousPromise.then(
+          callInvokeWithMethodAndArg,
+          // Avoid propagating failures to Promises returned by later
+          // invocations of the iterator.
+          callInvokeWithMethodAndArg
+        ) : new Promise(function (resolve) {
+          resolve(callInvokeWithMethodAndArg());
+        });
+    }
+
+    // Define the unified helper method that is used to implement .next,
+    // .throw, and .return (see defineIteratorMethods).
+    this._invoke = enqueue;
+  }
+
+  defineIteratorMethods(AsyncIterator.prototype);
+
+  // Note that simple async functions are implemented on top of
+  // AsyncIterator objects; they just return a Promise for the value of
+  // the final result produced by the iterator.
+  runtime.async = function(innerFn, outerFn, self, tryLocsList) {
+    var iter = new AsyncIterator(
+      wrap(innerFn, outerFn, self, tryLocsList)
+    );
+
+    return runtime.isGeneratorFunction(outerFn)
+      ? iter // If outerFn is a generator, return the full iterator.
+      : iter.next().then(function(result) {
+          return result.done ? result.value : iter.next();
+        });
+  };
+
+  function makeInvokeMethod(innerFn, self, context) {
+    var state = GenStateSuspendedStart;
+
+    return function invoke(method, arg) {
+      if (state === GenStateExecuting) {
+        throw new Error("Generator is already running");
+      }
+
+      if (state === GenStateCompleted) {
+        if (method === "throw") {
+          throw arg;
+        }
+
+        // Be forgiving, per 25.3.3.3.3 of the spec:
+        // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume
+        return doneResult();
+      }
+
+      while (true) {
+        var delegate = context.delegate;
+        if (delegate) {
+          if (method === "return" ||
+              (method === "throw" && delegate.iterator[method] === undefined)) {
+            // A return or throw (when the delegate iterator has no throw
+            // method) always terminates the yield* loop.
+            context.delegate = null;
+
+            // If the delegate iterator has a return method, give it a
+            // chance to clean up.
+            var returnMethod = delegate.iterator["return"];
+            if (returnMethod) {
+              var record = tryCatch(returnMethod, delegate.iterator, arg);
+              if (record.type === "throw") {
+                // If the return method threw an exception, let that
+                // exception prevail over the original return or throw.
+                method = "throw";
+                arg = record.arg;
+                continue;
+              }
+            }
+
+            if (method === "return") {
+              // Continue with the outer return, now that the delegate
+              // iterator has been terminated.
+              continue;
+            }
+          }
+
+          var record = tryCatch(
+            delegate.iterator[method],
+            delegate.iterator,
+            arg
+          );
+
+          if (record.type === "throw") {
+            context.delegate = null;
+
+            // Like returning generator.throw(uncaught), but without the
+            // overhead of an extra function call.
+            method = "throw";
+            arg = record.arg;
+            continue;
+          }
+
+          // Delegate generator ran and handled its own exceptions so
+          // regardless of what the method was, we continue as if it is
+          // "next" with an undefined arg.
+          method = "next";
+          arg = undefined;
+
+          var info = record.arg;
+          if (info.done) {
+            context[delegate.resultName] = info.value;
+            context.next = delegate.nextLoc;
+          } else {
+            state = GenStateSuspendedYield;
+            return info;
+          }
+
+          context.delegate = null;
+        }
+
+        if (method === "next") {
+          context._sent = arg;
+
+          if (state === GenStateSuspendedYield) {
+            context.sent = arg;
+          } else {
+            context.sent = undefined;
+          }
+        } else if (method === "throw") {
+          if (state === GenStateSuspendedStart) {
+            state = GenStateCompleted;
+            throw arg;
+          }
+
+          if (context.dispatchException(arg)) {
+            // If the dispatched exception was caught by a catch block,
+            // then let that catch block handle the exception normally.
+            method = "next";
+            arg = undefined;
+          }
+
+        } else if (method === "return") {
+          context.abrupt("return", arg);
+        }
+
+        state = GenStateExecuting;
+
+        var record = tryCatch(innerFn, self, context);
+        if (record.type === "normal") {
+          // If an exception is thrown from innerFn, we leave state ===
+          // GenStateExecuting and loop back for another invocation.
+          state = context.done
+            ? GenStateCompleted
+            : GenStateSuspendedYield;
+
+          var info = {
+            value: record.arg,
+            done: context.done
+          };
+
+          if (record.arg === ContinueSentinel) {
+            if (context.delegate && method === "next") {
+              // Deliberately forget the last sent value so that we don't
+              // accidentally pass it on to the delegate.
+              arg = undefined;
+            }
+          } else {
+            return info;
+          }
+
+        } else if (record.type === "throw") {
+          state = GenStateCompleted;
+          // Dispatch the exception by looping back around to the
+          // context.dispatchException(arg) call above.
+          method = "throw";
+          arg = record.arg;
+        }
+      }
+    };
+  }
+
+  // Define Generator.prototype.{next,throw,return} in terms of the
+  // unified ._invoke helper method.
+  defineIteratorMethods(Gp);
+
+  Gp[iteratorSymbol] = function() {
+    return this;
+  };
+
+  Gp.toString = function() {
+    return "[object Generator]";
+  };
+
+  function pushTryEntry(locs) {
+    var entry = { tryLoc: locs[0] };
+
+    if (1 in locs) {
+      entry.catchLoc = locs[1];
+    }
+
+    if (2 in locs) {
+      entry.finallyLoc = locs[2];
+      entry.afterLoc = locs[3];
+    }
+
+    this.tryEntries.push(entry);
+  }
+
+  function resetTryEntry(entry) {
+    var record = entry.completion || {};
+    record.type = "normal";
+    delete record.arg;
+    entry.completion = record;
+  }
+
+  function Context(tryLocsList) {
+    // The root entry object (effectively a try statement without a catch
+    // or a finally block) gives us a place to store values thrown from
+    // locations where there is no enclosing try statement.
+    this.tryEntries = [{ tryLoc: "root" }];
+    tryLocsList.forEach(pushTryEntry, this);
+    this.reset(true);
+  }
+
+  runtime.keys = function(object) {
+    var keys = [];
+    for (var key in object) {
+      keys.push(key);
+    }
+    keys.reverse();
+
+    // Rather than returning an object with a next method, we keep
+    // things simple and return the next function itself.
+    return function next() {
+      while (keys.length) {
+        var key = keys.pop();
+        if (key in object) {
+          next.value = key;
+          next.done = false;
+          return next;
+        }
+      }
+
+      // To avoid creating an additional object, we just hang the .value
+      // and .done properties off the next function object itself. This
+      // also ensures that the minifier will not anonymize the function.
+      next.done = true;
+      return next;
+    };
+  };
+
+  function values(iterable) {
+    if (iterable) {
+      var iteratorMethod = iterable[iteratorSymbol];
+      if (iteratorMethod) {
+        return iteratorMethod.call(iterable);
+      }
+
+      if (typeof iterable.next === "function") {
+        return iterable;
+      }
+
+      if (!isNaN(iterable.length)) {
+        var i = -1, next = function next() {
+          while (++i < iterable.length) {
+            if (hasOwn.call(iterable, i)) {
+              next.value = iterable[i];
+              next.done = false;
+              return next;
+            }
+          }
+
+          next.value = undefined;
+          next.done = true;
+
+          return next;
+        };
+
+        return next.next = next;
+      }
+    }
+
+    // Return an iterator with no values.
+    return { next: doneResult };
+  }
+  runtime.values = values;
+
+  function doneResult() {
+    return { value: undefined, done: true };
+  }
+
+  Context.prototype = {
+    constructor: Context,
+
+    reset: function(skipTempReset) {
+      this.prev = 0;
+      this.next = 0;
+      this.sent = undefined;
+      this.done = false;
+      this.delegate = null;
+
+      this.tryEntries.forEach(resetTryEntry);
+
+      if (!skipTempReset) {
+        for (var name in this) {
+          // Not sure about the optimal order of these conditions:
+          if (name.charAt(0) === "t" &&
+              hasOwn.call(this, name) &&
+              !isNaN(+name.slice(1))) {
+            this[name] = undefined;
+          }
+        }
+      }
+    },
+
+    stop: function() {
+      this.done = true;
+
+      var rootEntry = this.tryEntries[0];
+      var rootRecord = rootEntry.completion;
+      if (rootRecord.type === "throw") {
+        throw rootRecord.arg;
+      }
+
+      return this.rval;
+    },
+
+    dispatchException: function(exception) {
+      if (this.done) {
+        throw exception;
+      }
+
+      var context = this;
+      function handle(loc, caught) {
+        record.type = "throw";
+        record.arg = exception;
+        context.next = loc;
+        return !!caught;
+      }
+
+      for (var i = this.tryEntries.length - 1; i >= 0; --i) {
+        var entry = this.tryEntries[i];
+        var record = entry.completion;
+
+        if (entry.tryLoc === "root") {
+          // Exception thrown outside of any try block that could handle
+          // it, so set the completion value of the entire function to
+          // throw the exception.
+          return handle("end");
+        }
+
+        if (entry.tryLoc <= this.prev) {
+          var hasCatch = hasOwn.call(entry, "catchLoc");
+          var hasFinally = hasOwn.call(entry, "finallyLoc");
+
+          if (hasCatch && hasFinally) {
+            if (this.prev < entry.catchLoc) {
+              return handle(entry.catchLoc, true);
+            } else if (this.prev < entry.finallyLoc) {
+              return handle(entry.finallyLoc);
+            }
+
+          } else if (hasCatch) {
+            if (this.prev < entry.catchLoc) {
+              return handle(entry.catchLoc, true);
+            }
+
+          } else if (hasFinally) {
+            if (this.prev < entry.finallyLoc) {
+              return handle(entry.finallyLoc);
+            }
+
+          } else {
+            throw new Error("try statement without catch or finally");
+          }
+        }
+      }
+    },
+
+    abrupt: function(type, arg) {
+      for (var i = this.tryEntries.length - 1; i >= 0; --i) {
+        var entry = this.tryEntries[i];
+        if (entry.tryLoc <= this.prev &&
+            hasOwn.call(entry, "finallyLoc") &&
+            this.prev < entry.finallyLoc) {
+          var finallyEntry = entry;
+          break;
+        }
+      }
+
+      if (finallyEntry &&
+          (type === "break" ||
+           type === "continue") &&
+          finallyEntry.tryLoc <= arg &&
+          arg <= finallyEntry.finallyLoc) {
+        // Ignore the finally entry if control is not jumping to a
+        // location outside the try/catch block.
+        finallyEntry = null;
+      }
+
+      var record = finallyEntry ? finallyEntry.completion : {};
+      record.type = type;
+      record.arg = arg;
+
+      if (finallyEntry) {
+        this.next = finallyEntry.finallyLoc;
+      } else {
+        this.complete(record);
+      }
+
+      return ContinueSentinel;
+    },
+
+    complete: function(record, afterLoc) {
+      if (record.type === "throw") {
+        throw record.arg;
+      }
+
+      if (record.type === "break" ||
+          record.type === "continue") {
+        this.next = record.arg;
+      } else if (record.type === "return") {
+        this.rval = record.arg;
+        this.next = "end";
+      } else if (record.type === "normal" && afterLoc) {
+        this.next = afterLoc;
+      }
+    },
+
+    finish: function(finallyLoc) {
+      for (var i = this.tryEntries.length - 1; i >= 0; --i) {
+        var entry = this.tryEntries[i];
+        if (entry.finallyLoc === finallyLoc) {
+          this.complete(entry.completion, entry.afterLoc);
+          resetTryEntry(entry);
+          return ContinueSentinel;
+        }
+      }
+    },
+
+    "catch": function(tryLoc) {
+      for (var i = this.tryEntries.length - 1; i >= 0; --i) {
+        var entry = this.tryEntries[i];
+        if (entry.tryLoc === tryLoc) {
+          var record = entry.completion;
+          if (record.type === "throw") {
+            var thrown = record.arg;
+            resetTryEntry(entry);
+          }
+          return thrown;
+        }
+      }
+
+      // The context.catch method must only be called with a location
+      // argument that corresponds to a known catch block.
+      throw new Error("illegal catch attempt");
+    },
+
+    delegateYield: function(iterable, resultName, nextLoc) {
+      this.delegate = {
+        iterator: values(iterable),
+        resultName: resultName,
+        nextLoc: nextLoc
+      };
+
+      return ContinueSentinel;
+    }
+  };
+})(
+  // Among the various tricks for obtaining a reference to the global
+  // object, this seems to be the most reliable technique that does not
+  // use indirect eval (which violates Content Security Policy).
+  typeof global === "object" ? global :
+  typeof window === "object" ? window :
+  typeof self === "object" ? self : this
+);
+
+}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
+
+},{"_process":302}],3:[function(require,module,exports){
+require('../../modules/core.regexp.escape');
+module.exports = require('../../modules/_core').RegExp.escape;
+},{"../../modules/_core":24,"../../modules/core.regexp.escape":121}],4:[function(require,module,exports){
+module.exports = function(it){
+  if(typeof it != 'function')throw TypeError(it + ' is not a function!');
+  return it;
+};
+},{}],5:[function(require,module,exports){
+var cof = require('./_cof');
+module.exports = function(it, msg){
+  if(typeof it != 'number' && cof(it) != 'Number')throw TypeError(msg);
+  return +it;
+};
+},{"./_cof":19}],6:[function(require,module,exports){
+// 22.1.3.31 Array.prototype[@@unscopables]
+var UNSCOPABLES = require('./_wks')('unscopables')
+  , ArrayProto  = Array.prototype;
+if(ArrayProto[UNSCOPABLES] == undefined)require('./_hide')(ArrayProto, UNSCOPABLES, {});
+module.exports = function(key){
+  ArrayProto[UNSCOPABLES][key] = true;
+};
+},{"./_hide":41,"./_wks":118}],7:[function(require,module,exports){
+module.exports = function(it, Constructor, name, forbiddenField){
+  if(!(it instanceof Constructor) || (forbiddenField !== undefined && forbiddenField in it)){
+    throw TypeError(name + ': incorrect invocation!');
+  } return it;
+};
+},{}],8:[function(require,module,exports){
+var isObject = require('./_is-object');
+module.exports = function(it){
+  if(!isObject(it))throw TypeError(it + ' is not an object!');
+  return it;
+};
+},{"./_is-object":50}],9:[function(require,module,exports){
+// 22.1.3.3 Array.prototype.copyWithin(target, start, end = this.length)
+'use strict';
+var toObject = require('./_to-object')
+  , toIndex  = require('./_to-index')
+  , toLength = require('./_to-length');
+
+module.exports = [].copyWithin || function copyWithin(target/*= 0*/, start/*= 0, end = @length*/){
+  var O     = toObject(this)
+    , len   = toLength(O.length)
+    , to    = toIndex(target, len)
+    , from  = toIndex(start, len)
+    , end   = arguments.length > 2 ? arguments[2] : undefined
+    , count = Math.min((end === undefined ? len : toIndex(end, len)) - from, len - to)
+    , inc   = 1;
+  if(from < to && to < from + count){
+    inc  = -1;
+    from += count - 1;
+    to   += count - 1;
+  }
+  while(count-- > 0){
+    if(from in O)O[to] = O[from];
+    else delete O[to];
+    to   += inc;
+    from += inc;
+  } return O;
+};
+},{"./_to-index":106,"./_to-length":109,"./_to-object":110}],10:[function(require,module,exports){
+// 22.1.3.6 Array.prototype.fill(value, start = 0, end = this.length)
+'use strict';
+var toObject = require('./_to-object')
+  , toIndex  = require('./_to-index')
+  , toLength = require('./_to-length');
+module.exports = function fill(value /*, start = 0, end = @length */){
+  var O      = toObject(this)
+    , length = toLength(O.length)
+    , aLen   = arguments.length
+    , index  = toIndex(aLen > 1 ? arguments[1] : undefined, length)
+    , end    = aLen > 2 ? arguments[2] : undefined
+    , endPos = end === undefined ? length : toIndex(end, length);
+  while(endPos > index)O[index++] = value;
+  return O;
+};
+},{"./_to-index":106,"./_to-length":109,"./_to-object":110}],11:[function(require,module,exports){
+var forOf = require('./_for-of');
+
+module.exports = function(iter, ITERATOR){
+  var result = [];
+  forOf(iter, false, result.push, result, ITERATOR);
+  return result;
+};
+
+},{"./_for-of":38}],12:[function(require,module,exports){
+// false -> Array#indexOf
+// true  -> Array#includes
+var toIObject = require('./_to-iobject')
+  , toLength  = require('./_to-length')
+  , toIndex   = require('./_to-index');
+module.exports = function(IS_INCLUDES){
+  return function($this, el, fromIndex){
+    var O      = toIObject($this)
+      , length = toLength(O.length)
+      , index  = toIndex(fromIndex, length)
+      , value;
+    // Array#includes uses SameValueZero equality algorithm
+    if(IS_INCLUDES && el != el)while(length > index){
+      value = O[index++];
+      if(value != value)return true;
+    // Array#toIndex ignores holes, Array#includes - not
+    } else for(;length > index; index++)if(IS_INCLUDES || index in O){
+      if(O[index] === el)return IS_INCLUDES || index || 0;
+    } return !IS_INCLUDES && -1;
+  };
+};
+},{"./_to-index":106,"./_to-iobject":108,"./_to-length":109}],13:[function(require,module,exports){
+// 0 -> Array#forEach
+// 1 -> Array#map
+// 2 -> Array#filter
+// 3 -> Array#some
+// 4 -> Array#every
+// 5 -> Array#find
+// 6 -> Array#findIndex
+var ctx      = require('./_ctx')
+  , IObject  = require('./_iobject')
+  , toObject = require('./_to-object')
+  , toLength = require('./_to-length')
+  , asc      = require('./_array-species-create');
+module.exports = function(TYPE, $create){
+  var IS_MAP        = TYPE == 1
+    , IS_FILTER     = TYPE == 2
+    , IS_SOME       = TYPE == 3
+    , IS_EVERY      = TYPE == 4
+    , IS_FIND_INDEX = TYPE == 6
+    , NO_HOLES      = TYPE == 5 || IS_FIND_INDEX
+    , create        = $create || asc;
+  return function($this, callbackfn, that){
+    var O      = toObject($this)
+      , self   = IObject(O)
+      , f      = ctx(callbackfn, that, 3)
+      , length = toLength(self.length)
+      , index  = 0
+      , result = IS_MAP ? create($this, length) : IS_FILTER ? create($this, 0) : undefined
+      , val, res;
+    for(;length > index; index++)if(NO_HOLES || index in self){
+      val = self[index];
+      res = f(val, index, O);
+      if(TYPE){
+        if(IS_MAP)result[index] = res;            // map
+        else if(res)switch(TYPE){
+          case 3: return true;                    // some
+          case 5: return val;                     // find
+          case 6: return index;                   // findIndex
+          case 2: result.push(val);               // filter
+        } else if(IS_EVERY)return false;          // every
+      }
+    }
+    return IS_FIND_INDEX ? -1 : IS_SOME || IS_EVERY ? IS_EVERY : result;
+  };
+};
+},{"./_array-species-create":16,"./_ctx":26,"./_iobject":46,"./_to-length":109,"./_to-object":110}],14:[function(require,module,exports){
+var aFunction = require('./_a-function')
+  , toObject  = require('./_to-object')
+  , IObject   = require('./_iobject')
+  , toLength  = require('./_to-length');
+
+module.exports = function(that, callbackfn, aLen, memo, isRight){
+  aFunction(callbackfn);
+  var O      = toObject(that)
+    , self   = IObject(O)
+    , length = toLength(O.length)
+    , index  = isRight ? length - 1 : 0
+    , i      = isRight ? -1 : 1;
+  if(aLen < 2)for(;;){
+    if(index in self){
+      memo = self[index];
+      index += i;
+      break;
+    }
+    index += i;
+    if(isRight ? index < 0 : length <= index){
+      throw TypeError('Reduce of empty array with no initial value');
+    }
+  }
+  for(;isRight ? index >= 0 : length > index; index += i)if(index in self){
+    memo = callbackfn(memo, self[index], index, O);
+  }
+  return memo;
+};
+},{"./_a-function":4,"./_iobject":46,"./_to-length":109,"./_to-object":110}],15:[function(require,module,exports){
+var isObject = require('./_is-object')
+  , isArray  = require('./_is-array')
+  , SPECIES  = require('./_wks')('species');
+
+module.exports = function(original){
+  var C;
+  if(isArray(original)){
+    C = original.constructor;
+    // cross-realm fallback
+    if(typeof C == 'function' && (C === Array || isArray(C.prototype)))C = undefined;
+    if(isObject(C)){
+      C = C[SPECIES];
+      if(C === null)C = undefined;
+    }
+  } return C === undefined ? Array : C;
+};
+},{"./_is-array":48,"./_is-object":50,"./_wks":118}],16:[function(require,module,exports){
+// 9.4.2.3 ArraySpeciesCreate(originalArray, length)
+var speciesConstructor = require('./_array-species-constructor');
+
+module.exports = function(original, length){
+  return new (speciesConstructor(original))(length);
+};
+},{"./_array-species-constructor":15}],17:[function(require,module,exports){
+'use strict';
+var aFunction  = require('./_a-function')
+  , isObject   = require('./_is-object')
+  , invoke     = require('./_invoke')
+  , arraySlice = [].slice
+  , factories  = {};
+
+var construct = function(F, len, args){
+  if(!(len in factories)){
+    for(var n = [], i = 0; i < len; i++)n[i] = 'a[' + i + ']';
+    factories[len] = Function('F,a', 'return new F(' + n.join(',') + ')');
+  } return factories[len](F, args);
+};
+
+module.exports = Function.bind || function bind(that /*, args... */){
+  var fn       = aFunction(this)
+    , partArgs = arraySlice.call(arguments, 1);
+  var bound = function(/* args... */){
+    var args = partArgs.concat(arraySlice.call(arguments));
+    return this instanceof bound ? construct(fn, args.length, args) : invoke(fn, args, that);
+  };
+  if(isObject(fn.prototype))bound.prototype = fn.prototype;
+  return bound;
+};
+},{"./_a-function":4,"./_invoke":45,"./_is-object":50}],18:[function(require,module,exports){
+// getting tag from 19.1.3.6 Object.prototype.toString()
+var cof = require('./_cof')
+  , TAG = require('./_wks')('toStringTag')
+  // ES3 wrong here
+  , ARG = cof(function(){ return arguments; }()) == 'Arguments';
+
+// fallback for IE11 Script Access Denied error
+var tryGet = function(it, key){
+  try {
+    return it[key];
+  } catch(e){ /* empty */ }
+};
+
+module.exports = function(it){
+  var O, T, B;
+  return it === undefined ? 'Undefined' : it === null ? 'Null'
+    // @@toStringTag case
+    : typeof (T = tryGet(O = Object(it), TAG)) == 'string' ? T
+    // builtinTag case
+    : ARG ? cof(O)
+    // ES3 arguments fallback
+    : (B = cof(O)) == 'Object' && typeof O.callee == 'function' ? 'Arguments' : B;
+};
+},{"./_cof":19,"./_wks":118}],19:[function(require,module,exports){
+var toString = {}.toString;
+
+module.exports = function(it){
+  return toString.call(it).slice(8, -1);
+};
+},{}],20:[function(require,module,exports){
+'use strict';
+var dP          = require('./_object-dp').f
+  , create      = require('./_object-create')
+  , hide        = require('./_hide')
+  , redefineAll = require('./_redefine-all')
+  , ctx         = require('./_ctx')
+  , anInstance  = require('./_an-instance')
+  , defined     = require('./_defined')
+  , forOf       = require('./_for-of')
+  , $iterDefine = require('./_iter-define')
+  , step        = require('./_iter-step')
+  , setSpecies  = require('./_set-species')
+  , DESCRIPTORS = require('./_descriptors')
+  , fastKey     = require('./_meta').fastKey
+  , SIZE        = DESCRIPTORS ? '_s' : 'size';
+
+var getEntry = function(that, key){
+  // fast case
+  var index = fastKey(key), entry;
+  if(index !== 'F')return that._i[index];
+  // frozen object case
+  for(entry = that._f; entry; entry = entry.n){
+    if(entry.k == key)return entry;
+  }
+};
+
+module.exports = {
+  getConstructor: function(wrapper, NAME, IS_MAP, ADDER){
+    var C = wrapper(function(that, iterable){
+      anInstance(that, C, NAME, '_i');
+      that._i = create(null); // index
+      that._f = undefined;    // first entry
+      that._l = undefined;    // last entry
+      that[SIZE] = 0;         // size
+      if(iterable != undefined)forOf(iterable, IS_MAP, that[ADDER], that);
+    });
+    redefineAll(C.prototype, {
+      // 23.1.3.1 Map.prototype.clear()
+      // 23.2.3.2 Set.prototype.clear()
+      clear: function clear(){
+        for(var that = this, data = that._i, entry = that._f; entry; entry = entry.n){
+          entry.r = true;
+          if(entry.p)entry.p = entry.p.n = undefined;
+          delete data[entry.i];
+        }
+        that._f = that._l = undefined;
+        that[SIZE] = 0;
+      },
+      // 23.1.3.3 Map.prototype.delete(key)
+      // 23.2.3.4 Set.prototype.delete(value)
+      'delete': function(key){
+        var that  = this
+          , entry = getEntry(that, key);
+        if(entry){
+          var next = entry.n
+            , prev = entry.p;
+          delete that._i[entry.i];
+          entry.r = true;
+          if(prev)prev.n = next;
+          if(next)next.p = prev;
+          if(that._f == entry)that._f = next;
+          if(that._l == entry)that._l = prev;
+          that[SIZE]--;
+        } return !!entry;
+      },
+      // 23.2.3.6 Set.prototype.forEach(callbackfn, thisArg = undefined)
+      // 23.1.3.5 Map.prototype.forEach(callbackfn, thisArg = undefined)
+      forEach: function forEach(callbackfn /*, that = undefined */){
+        anInstance(this, C, 'forEach');
+        var f = ctx(callbackfn, arguments.length > 1 ? arguments[1] : undefined, 3)
+          , entry;
+        while(entry = entry ? entry.n : this._f){
+          f(entry.v, entry.k, this);
+          // revert to the last existing entry
+          while(entry && entry.r)entry = entry.p;
+        }
+      },
+      // 23.1.3.7 Map.prototype.has(key)
+      // 23.2.3.7 Set.prototype.has(value)
+      has: function has(key){
+        return !!getEntry(this, key);
+      }
+    });
+    if(DESCRIPTORS)dP(C.prototype, 'size', {
+      get: function(){
+        return defined(this[SIZE]);
+      }
+    });
+    return C;
+  },
+  def: function(that, key, value){
+    var entry = getEntry(that, key)
+      , prev, index;
+    // change existing entry
+    if(entry){
+      entry.v = value;
+    // create new entry
+    } else {
+      that._l = entry = {
+        i: index = fastKey(key, true), // <- index
+        k: key,                        // <- key
+        v: value,                      // <- value
+        p: prev = that._l,             // <- previous entry
+        n: undefined,                  // <- next entry
+        r: false                       // <- removed
+      };
+      if(!that._f)that._f = entry;
+      if(prev)prev.n = entry;
+      that[SIZE]++;
+      // add to index
+      if(index !== 'F')that._i[index] = entry;
+    } return that;
+  },
+  getEntry: getEntry,
+  setStrong: function(C, NAME, IS_MAP){
+    // add .keys, .values, .entries, [@@iterator]
+    // 23.1.3.4, 23.1.3.8, 23.1.3.11, 23.1.3.12, 23.2.3.5, 23.2.3.8, 23.2.3.10, 23.2.3.11
+    $iterDefine(C, NAME, function(iterated, kind){
+      this._t = iterated;  // target
+      this._k = kind;      // kind
+      this._l = undefined; // previous
+    }, function(){
+      var that  = this
+        , kind  = that._k
+        , entry = that._l;
+      // revert to the last existing entry
+      while(entry && entry.r)entry = entry.p;
+      // get next entry
+      if(!that._t || !(that._l = entry = entry ? entry.n : that._t._f)){
+        // or finish the iteration
+        that._t = undefined;
+        return step(1);
+      }
+      // return step by kind
+      if(kind == 'keys'  )return step(0, entry.k);
+      if(kind == 'values')return step(0, entry.v);
+      return step(0, [entry.k, entry.v]);
+    }, IS_MAP ? 'entries' : 'values' , !IS_MAP, true);
+
+    // add [@@species], 23.1.2.2, 23.2.2.2
+    setSpecies(NAME);
+  }
+};
+},{"./_an-instance":7,"./_ctx":26,"./_defined":28,"./_descriptors":29,"./_for-of":38,"./_hide":41,"./_iter-define":54,"./_iter-step":56,"./_meta":63,"./_object-create":67,"./_object-dp":68,"./_redefine-all":87,"./_set-species":92}],21:[function(require,module,exports){
+// https://github.com/DavidBruant/Map-Set.prototype.toJSON
+var classof = require('./_classof')
+  , from    = require('./_array-from-iterable');
+module.exports = function(NAME){
+  return function toJSON(){
+    if(classof(this) != NAME)throw TypeError(NAME + "#toJSON isn't generic");
+    return from(this);
+  };
+};
+},{"./_array-from-iterable":11,"./_classof":18}],22:[function(require,module,exports){
+'use strict';
+var redefineAll       = require('./_redefine-all')
+  , getWeak           = require('./_meta').getWeak
+  , anObject          = require('./_an-object')
+  , isObject          = require('./_is-object')
+  , anInstance        = require('./_an-instance')
+  , forOf             = require('./_for-of')
+  , createArrayMethod = require('./_array-methods')
+  , $has              = require('./_has')
+  , arrayFind         = createArrayMethod(5)
+  , arrayFindIndex    = createArrayMethod(6)
+  , id                = 0;
+
+// fallback for uncaught frozen keys
+var uncaughtFrozenStore = function(that){
+  return that._l || (that._l = new UncaughtFrozenStore);
+};
+var UncaughtFrozenStore = function(){
+  this.a = [];
+};
+var findUncaughtFrozen = function(store, key){
+  return arrayFind(store.a, function(it){
+    return it[0] === key;
+  });
+};
+UncaughtFrozenStore.prototype = {
+  get: function(key){
+    var entry = findUncaughtFrozen(this, key);
+    if(entry)return entry[1];
+  },
+  has: function(key){
+    return !!findUncaughtFrozen(this, key);
+  },
+  set: function(key, value){
+    var entry = findUncaughtFrozen(this, key);
+    if(entry)entry[1] = value;
+    else this.a.push([key, value]);
+  },
+  'delete': function(key){
+    var index = arrayFindIndex(this.a, function(it){
+      return it[0] === key;
+    });
+    if(~index)this.a.splice(index, 1);
+    return !!~index;
+  }
+};
+
+module.exports = {
+  getConstructor: function(wrapper, NAME, IS_MAP, ADDER){
+    var C = wrapper(function(that, iterable){
+      anInstance(that, C, NAME, '_i');
+      that._i = id++;      // collection id
+      that._l = undefined; // leak store for uncaught frozen objects
+      if(iterable != undefined)forOf(iterable, IS_MAP, that[ADDER], that);
+    });
+    redefineAll(C.prototype, {
+      // 23.3.3.2 WeakMap.prototype.delete(key)
+      // 23.4.3.3 WeakSet.prototype.delete(value)
+      'delete': function(key){
+        if(!isObject(key))return false;
+        var data = getWeak(key);
+        if(data === true)return uncaughtFrozenStore(this)['delete'](key);
+        return data && $has(data, this._i) && delete data[this._i];
+      },
+      // 23.3.3.4 WeakMap.prototype.has(key)
+      // 23.4.3.4 WeakSet.prototype.has(value)
+      has: function has(key){
+        if(!isObject(key))return false;
+        var data = getWeak(key);
+        if(data === true)return uncaughtFrozenStore(this).has(key);
+        return data && $has(data, this._i);
+      }
+    });
+    return C;
+  },
+  def: function(that, key, value){
+    var data = getWeak(anObject(key), true);
+    if(data === true)uncaughtFrozenStore(that).set(key, value);
+    else data[that._i] = value;
+    return that;
+  },
+  ufstore: uncaughtFrozenStore
+};
+},{"./_an-instance":7,"./_an-object":8,"./_array-methods":13,"./_for-of":38,"./_has":40,"./_is-object":50,"./_meta":63,"./_redefine-all":87}],23:[function(require,module,exports){
+'use strict';
+var global            = require('./_global')
+  , $export           = require('./_export')
+  , redefine          = require('./_redefine')
+  , redefineAll       = require('./_redefine-all')
+  , meta              = require('./_meta')
+  , forOf             = require('./_for-of')
+  , anInstance        = require('./_an-instance')
+  , isObject          = require('./_is-object')
+  , fails             = require('./_fails')
+  , $iterDetect       = require('./_iter-detect')
+  , setToStringTag    = require('./_set-to-string-tag')
+  , inheritIfRequired = require('./_inherit-if-required');
+
+module.exports = function(NAME, wrapper, methods, common, IS_MAP, IS_WEAK){
+  var Base  = global[NAME]
+    , C     = Base
+    , ADDER = IS_MAP ? 'set' : 'add'
+    , proto = C && C.prototype
+    , O     = {};
+  var fixMethod = function(KEY){
+    var fn = proto[KEY];
+    redefine(proto, KEY,
+      KEY == 'delete' ? function(a){
+        return IS_WEAK && !isObject(a) ? false : fn.call(this, a === 0 ? 0 : a);
+      } : KEY == 'has' ? function has(a){
+        return IS_WEAK && !isObject(a) ? false : fn.call(this, a === 0 ? 0 : a);
+      } : KEY == 'get' ? function get(a){
+        return IS_WEAK && !isObject(a) ? undefined : fn.call(this, a === 0 ? 0 : a);
+      } : KEY == 'add' ? function add(a){ fn.call(this, a === 0 ? 0 : a); return this; }
+        : function set(a, b){ fn.call(this, a === 0 ? 0 : a, b); return this; }
+    );
+  };
+  if(typeof C != 'function' || !(IS_WEAK || proto.forEach && !fails(function(){
+    new C().entries().next();
+  }))){
+    // create collection constructor
+    C = common.getConstructor(wrapper, NAME, IS_MAP, ADDER);
+    redefineAll(C.prototype, methods);
+    meta.NEED = true;
+  } else {
+    var instance             = new C
+      // early implementations not supports chaining
+      , HASNT_CHAINING       = instance[ADDER](IS_WEAK ? {} : -0, 1) != instance
+      // V8 ~  Chromium 40- weak-collections throws on primitives, but should return false
+      , THROWS_ON_PRIMITIVES = fails(function(){ instance.has(1); })
+      // most early implementations doesn't supports iterables, most modern - not close it correctly
+      , ACCEPT_ITERABLES     = $iterDetect(function(iter){ new C(iter); }) // eslint-disable-line no-new
+      // for early implementations -0 and +0 not the same
+      , BUGGY_ZERO = !IS_WEAK && fails(function(){
+        // V8 ~ Chromium 42- fails only with 5+ elements
+        var $instance = new C()
+          , index     = 5;
+        while(index--)$instance[ADDER](index, index);
+        return !$instance.has(-0);
+      });
+    if(!ACCEPT_ITERABLES){ 
+      C = wrapper(function(target, iterable){
+        anInstance(target, C, NAME);
+        var that = inheritIfRequired(new Base, target, C);
+        if(iterable != undefined)forOf(iterable, IS_MAP, that[ADDER], that);
+        return that;
+      });
+      C.prototype = proto;
+      proto.constructor = C;
+    }
+    if(THROWS_ON_PRIMITIVES || BUGGY_ZERO){
+      fixMethod('delete');
+      fixMethod('has');
+      IS_MAP && fixMethod('get');
+    }
+    if(BUGGY_ZERO || HASNT_CHAINING)fixMethod(ADDER);
+    // weak collections should not contains .clear method
+    if(IS_WEAK && proto.clear)delete proto.clear;
+  }
+
+  setToStringTag(C, NAME);
+
+  O[NAME] = C;
+  $export($export.G + $export.W + $export.F * (C != Base), O);
+
+  if(!IS_WEAK)common.setStrong(C, NAME, IS_MAP);
+
+  return C;
+};
+},{"./_an-instance":7,"./_export":33,"./_fails":35,"./_for-of":38,"./_global":39,"./_inherit-if-required":44,"./_is-object":50,"./_iter-detect":55,"./_meta":63,"./_redefine":88,"./_redefine-all":87,"./_set-to-string-tag":93}],24:[function(require,module,exports){
+var core = module.exports = {version: '2.4.0'};
+if(typeof __e == 'number')__e = core; // eslint-disable-line no-undef
+},{}],25:[function(require,module,exports){
+'use strict';
+var $defineProperty = require('./_object-dp')
+  , createDesc      = require('./_property-desc');
+
+module.exports = function(object, index, value){
+  if(index in object)$defineProperty.f(object, index, createDesc(0, value));
+  else object[index] = value;
+};
+},{"./_object-dp":68,"./_property-desc":86}],26:[function(require,module,exports){
+// optional / simple context binding
+var aFunction = require('./_a-function');
+module.exports = function(fn, that, length){
+  aFunction(fn);
+  if(that === undefined)return fn;
+  switch(length){
+    case 1: return function(a){
+      return fn.call(that, a);
+    };
+    case 2: return function(a, b){
+      return fn.call(that, a, b);
+    };
+    case 3: return function(a, b, c){
+      return fn.call(that, a, b, c);
+    };
+  }
+  return function(/* ...args */){
+    return fn.apply(that, arguments);
+  };
+};
+},{"./_a-function":4}],27:[function(require,module,exports){
+'use strict';
+var anObject    = require('./_an-object')
+  , toPrimitive = require('./_to-primitive')
+  , NUMBER      = 'number';
+
+module.exports = function(hint){
+  if(hint !== 'string' && hint !== NUMBER && hint !== 'default')throw TypeError('Incorrect hint');
+  return toPrimitive(anObject(this), hint != NUMBER);
+};
+},{"./_an-object":8,"./_to-primitive":111}],28:[function(require,module,exports){
+// 7.2.1 RequireObjectCoercible(argument)
+module.exports = function(it){
+  if(it == undefined)throw TypeError("Can't call method on  " + it);
+  return it;
+};
+},{}],29:[function(require,module,exports){
+// Thank's IE8 for his funny defineProperty
+module.exports = !require('./_fails')(function(){
+  return Object.defineProperty({}, 'a', {get: function(){ return 7; }}).a != 7;
+});
+},{"./_fails":35}],30:[function(require,module,exports){
+var isObject = require('./_is-object')
+  , document = require('./_global').document
+  // in old IE typeof document.createElement is 'object'
+  , is = isObject(document) && isObject(document.createElement);
+module.exports = function(it){
+  return is ? document.createElement(it) : {};
+};
+},{"./_global":39,"./_is-object":50}],31:[function(require,module,exports){
+// IE 8- don't enum bug keys
+module.exports = (
+  'constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf'
+).split(',');
+},{}],32:[function(require,module,exports){
+// all enumerable object keys, includes symbols
+var getKeys = require('./_object-keys')
+  , gOPS    = require('./_object-gops')
+  , pIE     = require('./_object-pie');
+module.exports = function(it){
+  var result     = getKeys(it)
+    , getSymbols = gOPS.f;
+  if(getSymbols){
+    var symbols = getSymbols(it)
+      , isEnum  = pIE.f
+      , i       = 0
+      , key;
+    while(symbols.length > i)if(isEnum.call(it, key = symbols[i++]))result.push(key);
+  } return result;
+};
+},{"./_object-gops":74,"./_object-keys":77,"./_object-pie":78}],33:[function(require,module,exports){
+var global    = require('./_global')
+  , core      = require('./_core')
+  , hide      = require('./_hide')
+  , redefine  = require('./_redefine')
+  , ctx       = require('./_ctx')
+  , PROTOTYPE = 'prototype';
+
+var $export = function(type, name, source){
+  var IS_FORCED = type & $export.F
+    , IS_GLOBAL = type & $export.G
+    , IS_STATIC = type & $export.S
+    , IS_PROTO  = type & $export.P
+    , IS_BIND   = type & $export.B
+    , target    = IS_GLOBAL ? global : IS_STATIC ? global[name] || (global[name] = {}) : (global[name] || {})[PROTOTYPE]
+    , exports   = IS_GLOBAL ? core : core[name] || (core[name] = {})
+    , expProto  = exports[PROTOTYPE] || (exports[PROTOTYPE] = {})
+    , key, own, out, exp;
+  if(IS_GLOBAL)source = name;
+  for(key in source){
+    // contains in native
+    own = !IS_FORCED && target && target[key] !== undefined;
+    // export native or passed
+    out = (own ? target : source)[key];
+    // bind timers to global for call from export context
+    exp = IS_BIND && own ? ctx(out, global) : IS_PROTO && typeof out == 'function' ? ctx(Function.call, out) : out;
+    // extend global
+    if(target)redefine(target, key, out, type & $export.U);
+    // export
+    if(exports[key] != out)hide(exports, key, exp);
+    if(IS_PROTO && expProto[key] != out)expProto[key] = out;
+  }
+};
+global.core = core;
+// type bitmap
+$export.F = 1;   // forced
+$export.G = 2;   // global
+$export.S = 4;   // static
+$export.P = 8;   // proto
+$export.B = 16;  // bind
+$export.W = 32;  // wrap
+$export.U = 64;  // safe
+$export.R = 128; // real proto method for `library` 
+module.exports = $export;
+},{"./_core":24,"./_ctx":26,"./_global":39,"./_hide":41,"./_redefine":88}],34:[function(require,module,exports){
+var MATCH = require('./_wks')('match');
+module.exports = function(KEY){
+  var re = /./;
+  try {
+    '/./'[KEY](re);
+  } catch(e){
+    try {
+      re[MATCH] = false;
+      return !'/./'[KEY](re);
+    } catch(f){ /* empty */ }
+  } return true;
+};
+},{"./_wks":118}],35:[function(require,module,exports){
+module.exports = function(exec){
+  try {
+    return !!exec();
+  } catch(e){
+    return true;
+  }
+};
+},{}],36:[function(require,module,exports){
+'use strict';
+var hide     = require('./_hide')
+  , redefine = require('./_redefine')
+  , fails    = require('./_fails')
+  , defined  = require('./_defined')
+  , wks      = require('./_wks');
+
+module.exports = function(KEY, length, exec){
+  var SYMBOL   = wks(KEY)
+    , fns      = exec(defined, SYMBOL, ''[KEY])
+    , strfn    = fns[0]
+    , rxfn     = fns[1];
+  if(fails(function(){
+    var O = {};
+    O[SYMBOL] = function(){ return 7; };
+    return ''[KEY](O) != 7;
+  })){
+    redefine(String.prototype, KEY, strfn);
+    hide(RegExp.prototype, SYMBOL, length == 2
+      // 21.2.5.8 RegExp.prototype[@@replace](string, replaceValue)
+      // 21.2.5.11 RegExp.prototype[@@split](string, limit)
+      ? function(string, arg){ return rxfn.call(string, this, arg); }
+      // 21.2.5.6 RegExp.prototype[@@match](string)
+      // 21.2.5.9 RegExp.prototype[@@search](string)
+      : function(string){ return rxfn.call(string, this); }
+    );
+  }
+};
+},{"./_defined":28,"./_fails":35,"./_hide":41,"./_redefine":88,"./_wks":118}],37:[function(require,module,exports){
+'use strict';
+// 21.2.5.3 get RegExp.prototype.flags
+var anObject = require('./_an-object');
+module.exports = function(){
+  var that   = anObject(this)
+    , result = '';
+  if(that.global)     result += 'g';
+  if(that.ignoreCase) result += 'i';
+  if(that.multiline)  result += 'm';
+  if(that.unicode)    result += 'u';
+  if(that.sticky)     result += 'y';
+  return result;
+};
+},{"./_an-object":8}],38:[function(require,module,exports){
+var ctx         = require('./_ctx')
+  , call        = require('./_iter-call')
+  , isArrayIter = require('./_is-array-iter')
+  , anObject    = require('./_an-object')
+  , toLength    = require('./_to-length')
+  , getIterFn   = require('./core.get-iterator-method')
+  , BREAK       = {}
+  , RETURN      = {};
+var exports = module.exports = function(iterable, entries, fn, that, ITERATOR){
+  var iterFn = ITERATOR ? function(){ return iterable; } : getIterFn(iterable)
+    , f      = ctx(fn, that, entries ? 2 : 1)
+    , index  = 0
+    , length, step, iterator, result;
+  if(typeof iterFn != 'function')throw TypeError(iterable + ' is not iterable!');
+  // fast case for arrays with default iterator
+  if(isArrayIter(iterFn))for(length = toLength(iterable.length); length > index; index++){
+    result = entries ? f(anObject(step = iterable[index])[0], step[1]) : f(iterable[index]);
+    if(result === BREAK || result === RETURN)return result;
+  } else for(iterator = iterFn.call(iterable); !(step = iterator.next()).done; ){
+    result = call(iterator, f, step.value, entries);
+    if(result === BREAK || result === RETURN)return result;
+  }
+};
+exports.BREAK  = BREAK;
+exports.RETURN = RETURN;
+},{"./_an-object":8,"./_ctx":26,"./_is-array-iter":47,"./_iter-call":52,"./_to-length":109,"./core.get-iterator-method":119}],39:[function(require,module,exports){
+// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028
+var global = module.exports = typeof window != 'undefined' && window.Math == Math
+  ? window : typeof self != 'undefined' && self.Math == Math ? self : Function('return this')();
+if(typeof __g == 'number')__g = global; // eslint-disable-line no-undef
+},{}],40:[function(require,module,exports){
+var hasOwnProperty = {}.hasOwnProperty;
+module.exports = function(it, key){
+  return hasOwnProperty.call(it, key);
+};
+},{}],41:[function(require,module,exports){
+var dP         = require('./_object-dp')
+  , createDesc = require('./_property-desc');
+module.exports = require('./_descriptors') ? function(object, key, value){
+  return dP.f(object, key, createDesc(1, value));
+} : function(object, key, value){
+  object[key] = value;
+  return object;
+};
+},{"./_descriptors":29,"./_object-dp":68,"./_property-desc":86}],42:[function(require,module,exports){
+module.exports = require('./_global').document && document.documentElement;
+},{"./_global":39}],43:[function(require,module,exports){
+module.exports = !require('./_descriptors') && !require('./_fails')(function(){
+  return Object.defineProperty(require('./_dom-create')('div'), 'a', {get: function(){ return 7; }}).a != 7;
+});
+},{"./_descriptors":29,"./_dom-create":30,"./_fails":35}],44:[function(require,module,exports){
+var isObject       = require('./_is-object')
+  , setPrototypeOf = require('./_set-proto').set;
+module.exports = function(that, target, C){
+  var P, S = target.constructor;
+  if(S !== C && typeof S == 'function' && (P = S.prototype) !== C.prototype && isObject(P) && setPrototypeOf){
+    setPrototypeOf(that, P);
+  } return that;
+};
+},{"./_is-object":50,"./_set-proto":91}],45:[function(require,module,exports){
+// fast apply, http://jsperf.lnkit.com/fast-apply/5
+module.exports = function(fn, args, that){
+  var un = that === undefined;
+  switch(args.length){
+    case 0: return un ? fn()
+                      : fn.call(that);
+    case 1: return un ? fn(args[0])
+                      : fn.call(that, args[0]);
+    case 2: return un ? fn(args[0], args[1])
+                      : fn.call(that, args[0], args[1]);
+    case 3: return un ? fn(args[0], args[1], args[2])
+                      : fn.call(that, args[0], args[1], args[2]);
+    case 4: return un ? fn(args[0], args[1], args[2], args[3])
+                      : fn.call(that, args[0], args[1], args[2], args[3]);
+  } return              fn.apply(that, args);
+};
+},{}],46:[function(require,module,exports){
+// fallback for non-array-like ES3 and non-enumerable old V8 strings
+var cof = require('./_cof');
+module.exports = Object('z').propertyIsEnumerable(0) ? Object : function(it){
+  return cof(it) == 'String' ? it.split('') : Object(it);
+};
+},{"./_cof":19}],47:[function(require,module,exports){
+// check on default Array iterator
+var Iterators  = require('./_iterators')
+  , ITERATOR   = require('./_wks')('iterator')
+  , ArrayProto = Array.prototype;
+
+module.exports = function(it){
+  return it !== undefined && (Iterators.Array === it || ArrayProto[ITERATOR] === it);
+};
+},{"./_iterators":57,"./_wks":118}],48:[function(require,module,exports){
+// 7.2.2 IsArray(argument)
+var cof = require('./_cof');
+module.exports = Array.isArray || function isArray(arg){
+  return cof(arg) == 'Array';
+};
+},{"./_cof":19}],49:[function(require,module,exports){
+// 20.1.2.3 Number.isInteger(number)
+var isObject = require('./_is-object')
+  , floor    = Math.floor;
+module.exports = function isInteger(it){
+  return !isObject(it) && isFinite(it) && floor(it) === it;
+};
+},{"./_is-object":50}],50:[function(require,module,exports){
+module.exports = function(it){
+  return typeof it === 'object' ? it !== null : typeof it === 'function';
+};
+},{}],51:[function(require,module,exports){
+// 7.2.8 IsRegExp(argument)
+var isObject = require('./_is-object')
+  , cof      = require('./_cof')
+  , MATCH    = require('./_wks')('match');
+module.exports = function(it){
+  var isRegExp;
+  return isObject(it) && ((isRegExp = it[MATCH]) !== undefined ? !!isRegExp : cof(it) == 'RegExp');
+};
+},{"./_cof":19,"./_is-object":50,"./_wks":118}],52:[function(require,module,exports){
+// call something on iterator step with safe closing on error
+var anObject = require('./_an-object');
+module.exports = function(iterator, fn, value, entries){
+  try {
+    return entries ? fn(anObject(value)[0], value[1]) : fn(value);
+  // 7.4.6 IteratorClose(iterator, completion)
+  } catch(e){
+    var ret = iterator['return'];
+    if(ret !== undefined)anObject(ret.call(iterator));
+    throw e;
+  }
+};
+},{"./_an-object":8}],53:[function(require,module,exports){
+'use strict';
+var create         = require('./_object-create')
+  , descriptor     = require('./_property-desc')
+  , setToStringTag = require('./_set-to-string-tag')
+  , IteratorPrototype = {};
+
+// 25.1.2.1.1 %IteratorPrototype%[@@iterator]()
+require('./_hide')(IteratorPrototype, require('./_wks')('iterator'), function(){ return this; });
+
+module.exports = function(Constructor, NAME, next){
+  Constructor.prototype = create(IteratorPrototype, {next: descriptor(1, next)});
+  setToStringTag(Constructor, NAME + ' Iterator');
+};
+},{"./_hide":41,"./_object-create":67,"./_property-desc":86,"./_set-to-string-tag":93,"./_wks":118}],54:[function(require,module,exports){
+'use strict';
+var LIBRARY        = require('./_library')
+  , $export        = require('./_export')
+  , redefine       = require('./_redefine')
+  , hide           = require('./_hide')
+  , has            = require('./_has')
+  , Iterators      = require('./_iterators')
+  , $iterCreate    = require('./_iter-create')
+  , setToStringTag = require('./_set-to-string-tag')
+  , getPrototypeOf = require('./_object-gpo')
+  , ITERATOR       = require('./_wks')('iterator')
+  , BUGGY          = !([].keys && 'next' in [].keys()) // Safari has buggy iterators w/o `next`
+  , FF_ITERATOR    = '@@iterator'
+  , KEYS           = 'keys'
+  , VALUES         = 'values';
+
+var returnThis = function(){ return this; };
+
+module.exports = function(Base, NAME, Constructor, next, DEFAULT, IS_SET, FORCED){
+  $iterCreate(Constructor, NAME, next);
+  var getMethod = function(kind){
+    if(!BUGGY && kind in proto)return proto[kind];
+    switch(kind){
+      case KEYS: return function keys(){ return new Constructor(this, kind); };
+      case VALUES: return function values(){ return new Constructor(this, kind); };
+    } return function entries(){ return new Constructor(this, kind); };
+  };
+  var TAG        = NAME + ' Iterator'
+    , DEF_VALUES = DEFAULT == VALUES
+    , VALUES_BUG = false
+    , proto      = Base.prototype
+    , $native    = proto[ITERATOR] || proto[FF_ITERATOR] || DEFAULT && proto[DEFAULT]
+    , $default   = $native || getMethod(DEFAULT)
+    , $entries   = DEFAULT ? !DEF_VALUES ? $default : getMethod('entries') : undefined
+    , $anyNative = NAME == 'Array' ? proto.entries || $native : $native
+    , methods, key, IteratorPrototype;
+  // Fix native
+  if($anyNative){
+    IteratorPrototype = getPrototypeOf($anyNative.call(new Base));
+    if(IteratorPrototype !== Object.prototype){
+      // Set @@toStringTag to native iterators
+      setToStringTag(IteratorPrototype, TAG, true);
+      // fix for some old engines
+      if(!LIBRARY && !has(IteratorPrototype, ITERATOR))hide(IteratorPrototype, ITERATOR, returnThis);
+    }
+  }
+  // fix Array#{values, @@iterator}.name in V8 / FF
+  if(DEF_VALUES && $native && $native.name !== VALUES){
+    VALUES_BUG = true;
+    $default = function values(){ return $native.call(this); };
+  }
+  // Define iterator
+  if((!LIBRARY || FORCED) && (BUGGY || VALUES_BUG || !proto[ITERATOR])){
+    hide(proto, ITERATOR, $default);
+  }
+  // Plug for library
+  Iterators[NAME] = $default;
+  Iterators[TAG]  = returnThis;
+  if(DEFAULT){
+    methods = {
+      values:  DEF_VALUES ? $default : getMethod(VALUES),
+      keys:    IS_SET     ? $default : getMethod(KEYS),
+      entries: $entries
+    };
+    if(FORCED)for(key in methods){
+      if(!(key in proto))redefine(proto, key, methods[key]);
+    } else $export($export.P + $export.F * (BUGGY || VALUES_BUG), NAME, methods);
+  }
+  return methods;
+};
+},{"./_export":33,"./_has":40,"./_hide":41,"./_iter-create":53,"./_iterators":57,"./_library":59,"./_object-gpo":75,"./_redefine":88,"./_set-to-string-tag":93,"./_wks":118}],55:[function(require,module,exports){
+var ITERATOR     = require('./_wks')('iterator')
+  , SAFE_CLOSING = false;
+
+try {
+  var riter = [7][ITERATOR]();
+  riter['return'] = function(){ SAFE_CLOSING = true; };
+  Array.from(riter, function(){ throw 2; });
+} catch(e){ /* empty */ }
+
+module.exports = function(exec, skipClosing){
+  if(!skipClosing && !SAFE_CLOSING)return false;
+  var safe = false;
+  try {
+    var arr  = [7]
+      , iter = arr[ITERATOR]();
+    iter.next = function(){ return {done: safe = true}; };
+    arr[ITERATOR] = function(){ return iter; };
+    exec(arr);
+  } catch(e){ /* empty */ }
+  return safe;
+};
+},{"./_wks":118}],56:[function(require,module,exports){
+module.exports = function(done, value){
+  return {value: value, done: !!done};
+};
+},{}],57:[function(require,module,exports){
+module.exports = {};
+},{}],58:[function(require,module,exports){
+var getKeys   = require('./_object-keys')
+  , toIObject = require('./_to-iobject');
+module.exports = function(object, el){
+  var O      = toIObject(object)
+    , keys   = getKeys(O)
+    , length = keys.length
+    , index  = 0
+    , key;
+  while(length > index)if(O[key = keys[index++]] === el)return key;
+};
+},{"./_object-keys":77,"./_to-iobject":108}],59:[function(require,module,exports){
+module.exports = false;
+},{}],60:[function(require,module,exports){
+// 20.2.2.14 Math.expm1(x)
+var $expm1 = Math.expm1;
+module.exports = (!$expm1
+  // Old FF bug
+  || $expm1(10) > 22025.465794806719 || $expm1(10) < 22025.4657948067165168
+  // Tor Browser bug
+  || $expm1(-2e-17) != -2e-17
+) ? function expm1(x){
+  return (x = +x) == 0 ? x : x > -1e-6 && x < 1e-6 ? x + x * x / 2 : Math.exp(x) - 1;
+} : $expm1;
+},{}],61:[function(require,module,exports){
+// 20.2.2.20 Math.log1p(x)
+module.exports = Math.log1p || function log1p(x){
+  return (x = +x) > -1e-8 && x < 1e-8 ? x - x * x / 2 : Math.log(1 + x);
+};
+},{}],62:[function(require,module,exports){
+// 20.2.2.28 Math.sign(x)
+module.exports = Math.sign || function sign(x){
+  return (x = +x) == 0 || x != x ? x : x < 0 ? -1 : 1;
+};
+},{}],63:[function(require,module,exports){
+var META     = require('./_uid')('meta')
+  , isObject = require('./_is-object')
+  , has      = require('./_has')
+  , setDesc  = require('./_object-dp').f
+  , id       = 0;
+var isExtensible = Object.isExtensible || function(){
+  return true;
+};
+var FREEZE = !require('./_fails')(function(){
+  return isExtensible(Object.preventExtensions({}));
+});
+var setMeta = function(it){
+  setDesc(it, META, {value: {
+    i: 'O' + ++id, // object ID
+    w: {}          // weak collections IDs
+  }});
+};
+var fastKey = function(it, create){
+  // return primitive with prefix
+  if(!isObject(it))return typeof it == 'symbol' ? it : (typeof it == 'string' ? 'S' : 'P') + it;
+  if(!has(it, META)){
+    // can't set metadata to uncaught frozen object
+    if(!isExtensible(it))return 'F';
+    // not necessary to add metadata
+    if(!create)return 'E';
+    // add missing metadata
+    setMeta(it);
+  // return object ID
+  } return it[META].i;
+};
+var getWeak = function(it, create){
+  if(!has(it, META)){
+    // can't set metadata to uncaught frozen object
+    if(!isExtensible(it))return true;
+    // not necessary to add metadata
+    if(!create)return false;
+    // add missing metadata
+    setMeta(it);
+  // return hash weak collections IDs
+  } return it[META].w;
+};
+// add metadata on freeze-family methods calling
+var onFreeze = function(it){
+  if(FREEZE && meta.NEED && isExtensible(it) && !has(it, META))setMeta(it);
+  return it;
+};
+var meta = module.exports = {
+  KEY:      META,
+  NEED:     false,
+  fastKey:  fastKey,
+  getWeak:  getWeak,
+  onFreeze: onFreeze
+};
+},{"./_fails":35,"./_has":40,"./_is-object":50,"./_object-dp":68,"./_uid":115}],64:[function(require,module,exports){
+var Map     = require('./es6.map')
+  , $export = require('./_export')
+  , shared  = require('./_shared')('metadata')
+  , store   = shared.store || (shared.store = new (require('./es6.weak-map')));
+
+var getOrCreateMetadataMap = function(target, targetKey, create){
+  var targetMetadata = store.get(target);
+  if(!targetMetadata){
+    if(!create)return undefined;
+    store.set(target, targetMetadata = new Map);
+  }
+  var keyMetadata = targetMetadata.get(targetKey);
+  if(!keyMetadata){
+    if(!create)return undefined;
+    targetMetadata.set(targetKey, keyMetadata = new Map);
+  } return keyMetadata;
+};
+var ordinaryHasOwnMetadata = function(MetadataKey, O, P){
+  var metadataMap = getOrCreateMetadataMap(O, P, false);
+  return metadataMap === undefined ? false : metadataMap.has(MetadataKey);
+};
+var ordinaryGetOwnMetadata = function(MetadataKey, O, P){
+  var metadataMap = getOrCreateMetadataMap(O, P, false);
+  return metadataMap === undefined ? undefined : metadataMap.get(MetadataKey);
+};
+var ordinaryDefineOwnMetadata = function(MetadataKey, MetadataValue, O, P){
+  getOrCreateMetadataMap(O, P, true).set(MetadataKey, MetadataValue);
+};
+var ordinaryOwnMetadataKeys = function(target, targetKey){
+  var metadataMap = getOrCreateMetadataMap(target, targetKey, false)
+    , keys        = [];
+  if(metadataMap)metadataMap.forEach(function(_, key){ keys.push(key); });
+  return keys;
+};
+var toMetaKey = function(it){
+  return it === undefined || typeof it == 'symbol' ? it : String(it);
+};
+var exp = function(O){
+  $export($export.S, 'Reflect', O);
+};
+
+module.exports = {
+  store: store,
+  map: getOrCreateMetadataMap,
+  has: ordinaryHasOwnMetadata,
+  get: ordinaryGetOwnMetadata,
+  set: ordinaryDefineOwnMetadata,
+  keys: ordinaryOwnMetadataKeys,
+  key: toMetaKey,
+  exp: exp
+};
+},{"./_export":33,"./_shared":95,"./es6.map":151,"./es6.weak-map":257}],65:[function(require,module,exports){
+var global    = require('./_global')
+  , macrotask = require('./_task').set
+  , Observer  = global.MutationObserver || global.WebKitMutationObserver
+  , process   = global.process
+  , Promise   = global.Promise
+  , isNode    = require('./_cof')(process) == 'process';
+
+module.exports = function(){
+  var head, last, notify;
+
+  var flush = function(){
+    var parent, fn;
+    if(isNode && (parent = process.domain))parent.exit();
+    while(head){
+      fn   = head.fn;
+      head = head.next;
+      try {
+        fn();
+      } catch(e){
+        if(head)notify();
+        else last = undefined;
+        throw e;
+      }
+    } last = undefined;
+    if(parent)parent.enter();
+  };
+
+  // Node.js
+  if(isNode){
+    notify = function(){
+      process.nextTick(flush);
+    };
+  // browsers with MutationObserver
+  } else if(Observer){
+    var toggle = true
+      , node   = document.createTextNode('');
+    new Observer(flush).observe(node, {characterData: true}); // eslint-disable-line no-new
+    notify = function(){
+      node.data = toggle = !toggle;
+    };
+  // environments with maybe non-completely correct, but existent Promise
+  } else if(Promise && Promise.resolve){
+    var promise = Promise.resolve();
+    notify = function(){
+      promise.then(flush);
+    };
+  // for other environments - macrotask based on:
+  // - setImmediate
+  // - MessageChannel
+  // - window.postMessag
+  // - onreadystatechange
+  // - setTimeout
+  } else {
+    notify = function(){
+      // strange IE + webpack dev server bug - use .call(global)
+      macrotask.call(global, flush);
+    };
+  }
+
+  return function(fn){
+    var task = {fn: fn, next: undefined};
+    if(last)last.next = task;
+    if(!head){
+      head = task;
+      notify();
+    } last = task;
+  };
+};
+},{"./_cof":19,"./_global":39,"./_task":105}],66:[function(require,module,exports){
+'use strict';
+// 19.1.2.1 Object.assign(target, source, ...)
+var getKeys  = require('./_object-keys')
+  , gOPS     = require('./_object-gops')
+  , pIE      = require('./_object-pie')
+  , toObject = require('./_to-object')
+  , IObject  = require('./_iobject')
+  , $assign  = Object.assign;
+
+// should work with symbols and should have deterministic property order (V8 bug)
+module.exports = !$assign || require('./_fails')(function(){
+  var A = {}
+    , B = {}
+    , S = Symbol()
+    , K = 'abcdefghijklmnopqrst';
+  A[S] = 7;
+  K.split('').forEach(function(k){ B[k] = k; });
+  return $assign({}, A)[S] != 7 || Object.keys($assign({}, B)).join('') != K;
+}) ? function assign(target, source){ // eslint-disable-line no-unused-vars
+  var T     = toObject(target)
+    , aLen  = arguments.length
+    , index = 1
+    , getSymbols = gOPS.f
+    , isEnum     = pIE.f;
+  while(aLen > index){
+    var S      = IObject(arguments[index++])
+      , keys   = getSymbols ? getKeys(S).concat(getSymbols(S)) : getKeys(S)
+      , length = keys.length
+      , j      = 0
+      , key;
+    while(length > j)if(isEnum.call(S, key = keys[j++]))T[key] = S[key];
+  } return T;
+} : $assign;
+},{"./_fails":35,"./_iobject":46,"./_object-gops":74,"./_object-keys":77,"./_object-pie":78,"./_to-object":110}],67:[function(require,module,exports){
+// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])
+var anObject    = require('./_an-object')
+  , dPs         = require('./_object-dps')
+  , enumBugKeys = require('./_enum-bug-keys')
+  , IE_PROTO    = require('./_shared-key')('IE_PROTO')
+  , Empty       = function(){ /* empty */ }
+  , PROTOTYPE   = 'prototype';
+
+// Create object with fake `null` prototype: use iframe Object with cleared prototype
+var createDict = function(){
+  // Thrash, waste and sodomy: IE GC bug
+  var iframe = require('./_dom-create')('iframe')
+    , i      = enumBugKeys.length
+    , gt     = '>'
+    , iframeDocument;
+  iframe.style.display = 'none';
+  require('./_html').appendChild(iframe);
+  iframe.src = 'javascript:'; // eslint-disable-line no-script-url
+  // createDict = iframe.contentWindow.Object;
+  // html.removeChild(iframe);
+  iframeDocument = iframe.contentWindow.document;
+  iframeDocument.open();
+  iframeDocument.write('<script>document.F=Object</script' + gt);
+  iframeDocument.close();
+  createDict = iframeDocument.F;
+  while(i--)delete createDict[PROTOTYPE][enumBugKeys[i]];
+  return createDict();
+};
+
+module.exports = Object.create || function create(O, Properties){
+  var result;
+  if(O !== null){
+    Empty[PROTOTYPE] = anObject(O);
+    result = new Empty;
+    Empty[PROTOTYPE] = null;
+    // add "__proto__" for Object.getPrototypeOf polyfill
+    result[IE_PROTO] = O;
+  } else result = createDict();
+  return Properties === undefined ? result : dPs(result, Properties);
+};
+},{"./_an-object":8,"./_dom-create":30,"./_enum-bug-keys":31,"./_html":42,"./_object-dps":69,"./_shared-key":94}],68:[function(require,module,exports){
+var anObject       = require('./_an-object')
+  , IE8_DOM_DEFINE = require('./_ie8-dom-define')
+  , toPrimitive    = require('./_to-primitive')
+  , dP             = Object.defineProperty;
+
+exports.f = require('./_descriptors') ? Object.defineProperty : function defineProperty(O, P, Attributes){
+  anObject(O);
+  P = toPrimitive(P, true);
+  anObject(Attributes);
+  if(IE8_DOM_DEFINE)try {
+    return dP(O, P, Attributes);
+  } catch(e){ /* empty */ }
+  if('get' in Attributes || 'set' in Attributes)throw TypeError('Accessors not supported!');
+  if('value' in Attributes)O[P] = Attributes.value;
+  return O;
+};
+},{"./_an-object":8,"./_descriptors":29,"./_ie8-dom-define":43,"./_to-primitive":111}],69:[function(require,module,exports){
+var dP       = require('./_object-dp')
+  , anObject = require('./_an-object')
+  , getKeys  = require('./_object-keys');
+
+module.exports = require('./_descriptors') ? Object.defineProperties : function defineProperties(O, Properties){
+  anObject(O);
+  var keys   = getKeys(Properties)
+    , length = keys.length
+    , i = 0
+    , P;
+  while(length > i)dP.f(O, P = keys[i++], Properties[P]);
+  return O;
+};
+},{"./_an-object":8,"./_descriptors":29,"./_object-dp":68,"./_object-keys":77}],70:[function(require,module,exports){
+// Forced replacement prototype accessors methods
+module.exports = require('./_library')|| !require('./_fails')(function(){
+  var K = Math.random();
+  // In FF throws only define methods
+  __defineSetter__.call(null, K, function(){ /* empty */});
+  delete require('./_global')[K];
+});
+},{"./_fails":35,"./_global":39,"./_library":59}],71:[function(require,module,exports){
+var pIE            = require('./_object-pie')
+  , createDesc     = require('./_property-desc')
+  , toIObject      = require('./_to-iobject')
+  , toPrimitive    = require('./_to-primitive')
+  , has            = require('./_has')
+  , IE8_DOM_DEFINE = require('./_ie8-dom-define')
+  , gOPD           = Object.getOwnPropertyDescriptor;
+
+exports.f = require('./_descriptors') ? gOPD : function getOwnPropertyDescriptor(O, P){
+  O = toIObject(O);
+  P = toPrimitive(P, true);
+  if(IE8_DOM_DEFINE)try {
+    return gOPD(O, P);
+  } catch(e){ /* empty */ }
+  if(has(O, P))return createDesc(!pIE.f.call(O, P), O[P]);
+};
+},{"./_descriptors":29,"./_has":40,"./_ie8-dom-define":43,"./_object-pie":78,"./_property-desc":86,"./_to-iobject":108,"./_to-primitive":111}],72:[function(require,module,exports){
+// fallback for IE11 buggy Object.getOwnPropertyNames with iframe and window
+var toIObject = require('./_to-iobject')
+  , gOPN      = require('./_object-gopn').f
+  , toString  = {}.toString;
+
+var windowNames = typeof window == 'object' && window && Object.getOwnPropertyNames
+  ? Object.getOwnPropertyNames(window) : [];
+
+var getWindowNames = function(it){
+  try {
+    return gOPN(it);
+  } catch(e){
+    return windowNames.slice();
+  }
+};
+
+module.exports.f = function getOwnPropertyNames(it){
+  return windowNames && toString.call(it) == '[object Window]' ? getWindowNames(it) : gOPN(toIObject(it));
+};
+
+},{"./_object-gopn":73,"./_to-iobject":108}],73:[function(require,module,exports){
+// 19.1.2.7 / 15.2.3.4 Object.getOwnPropertyNames(O)
+var $keys      = require('./_object-keys-internal')
+  , hiddenKeys = require('./_enum-bug-keys').concat('length', 'prototype');
+
+exports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O){
+  return $keys(O, hiddenKeys);
+};
+},{"./_enum-bug-keys":31,"./_object-keys-internal":76}],74:[function(require,module,exports){
+exports.f = Object.getOwnPropertySymbols;
+},{}],75:[function(require,module,exports){
+// 19.1.2.9 / 15.2.3.2 Object.getPrototypeOf(O)
+var has         = require('./_has')
+  , toObject    = require('./_to-object')
+  , IE_PROTO    = require('./_shared-key')('IE_PROTO')
+  , ObjectProto = Object.prototype;
+
+module.exports = Object.getPrototypeOf || function(O){
+  O = toObject(O);
+  if(has(O, IE_PROTO))return O[IE_PROTO];
+  if(typeof O.constructor == 'function' && O instanceof O.constructor){
+    return O.constructor.prototype;
+  } return O instanceof Object ? ObjectProto : null;
+};
+},{"./_has":40,"./_shared-key":94,"./_to-object":110}],76:[function(require,module,exports){
+var has          = require('./_has')
+  , toIObject    = require('./_to-iobject')
+  , arrayIndexOf = require('./_array-includes')(false)
+  , IE_PROTO     = require('./_shared-key')('IE_PROTO');
+
+module.exports = function(object, names){
+  var O      = toIObject(object)
+    , i      = 0
+    , result = []
+    , key;
+  for(key in O)if(key != IE_PROTO)has(O, key) && result.push(key);
+  // Don't enum bug & hidden keys
+  while(names.length > i)if(has(O, key = names[i++])){
+    ~arrayIndexOf(result, key) || result.push(key);
+  }
+  return result;
+};
+},{"./_array-includes":12,"./_has":40,"./_shared-key":94,"./_to-iobject":108}],77:[function(require,module,exports){
+// 19.1.2.14 / 15.2.3.14 Object.keys(O)
+var $keys       = require('./_object-keys-internal')
+  , enumBugKeys = require('./_enum-bug-keys');
+
+module.exports = Object.keys || function keys(O){
+  return $keys(O, enumBugKeys);
+};
+},{"./_enum-bug-keys":31,"./_object-keys-internal":76}],78:[function(require,module,exports){
+exports.f = {}.propertyIsEnumerable;
+},{}],79:[function(require,module,exports){
+// most Object methods by ES6 should accept primitives
+var $export = require('./_export')
+  , core    = require('./_core')
+  , fails   = require('./_fails');
+module.exports = function(KEY, exec){
+  var fn  = (core.Object || {})[KEY] || Object[KEY]
+    , exp = {};
+  exp[KEY] = exec(fn);
+  $export($export.S + $export.F * fails(function(){ fn(1); }), 'Object', exp);
+};
+},{"./_core":24,"./_export":33,"./_fails":35}],80:[function(require,module,exports){
+var getKeys   = require('./_object-keys')
+  , toIObject = require('./_to-iobject')
+  , isEnum    = require('./_object-pie').f;
+module.exports = function(isEntries){
+  return function(it){
+    var O      = toIObject(it)
+      , keys   = getKeys(O)
+      , length = keys.length
+      , i      = 0
+      , result = []
+      , key;
+    while(length > i)if(isEnum.call(O, key = keys[i++])){
+      result.push(isEntries ? [key, O[key]] : O[key]);
+    } return result;
+  };
+};
+},{"./_object-keys":77,"./_object-pie":78,"./_to-iobject":108}],81:[function(require,module,exports){
+// all object keys, includes non-enumerable and symbols
+var gOPN     = require('./_object-gopn')
+  , gOPS     = require('./_object-gops')
+  , anObject = require('./_an-object')
+  , Reflect  = require('./_global').Reflect;
+module.exports = Reflect && Reflect.ownKeys || function ownKeys(it){
+  var keys       = gOPN.f(anObject(it))
+    , getSymbols = gOPS.f;
+  return getSymbols ? keys.concat(getSymbols(it)) : keys;
+};
+},{"./_an-object":8,"./_global":39,"./_object-gopn":73,"./_object-gops":74}],82:[function(require,module,exports){
+var $parseFloat = require('./_global').parseFloat
+  , $trim       = require('./_string-trim').trim;
+
+module.exports = 1 / $parseFloat(require('./_string-ws') + '-0') !== -Infinity ? function parseFloat(str){
+  var string = $trim(String(str), 3)
+    , result = $parseFloat(string);
+  return result === 0 && string.charAt(0) == '-' ? -0 : result;
+} : $parseFloat;
+},{"./_global":39,"./_string-trim":103,"./_string-ws":104}],83:[function(require,module,exports){
+var $parseInt = require('./_global').parseInt
+  , $trim     = require('./_string-trim').trim
+  , ws        = require('./_string-ws')
+  , hex       = /^[\-+]?0[xX]/;
+
+module.exports = $parseInt(ws + '08') !== 8 || $parseInt(ws + '0x16') !== 22 ? function parseInt(str, radix){
+  var string = $trim(String(str), 3);
+  return $parseInt(string, (radix >>> 0) || (hex.test(string) ? 16 : 10));
+} : $parseInt;
+},{"./_global":39,"./_string-trim":103,"./_string-ws":104}],84:[function(require,module,exports){
+'use strict';
+var path      = require('./_path')
+  , invoke    = require('./_invoke')
+  , aFunction = require('./_a-function');
+module.exports = function(/* ...pargs */){
+  var fn     = aFunction(this)
+    , length = arguments.length
+    , pargs  = Array(length)
+    , i      = 0
+    , _      = path._
+    , holder = false;
+  while(length > i)if((pargs[i] = arguments[i++]) === _)holder = true;
+  return function(/* ...args */){
+    var that = this
+      , aLen = arguments.length
+      , j = 0, k = 0, args;
+    if(!holder && !aLen)return invoke(fn, pargs, that);
+    args = pargs.slice();
+    if(holder)for(;length > j; j++)if(args[j] === _)args[j] = arguments[k++];
+    while(aLen > k)args.push(arguments[k++]);
+    return invoke(fn, args, that);
+  };
+};
+},{"./_a-function":4,"./_invoke":45,"./_path":85}],85:[function(require,module,exports){
+module.exports = require('./_global');
+},{"./_global":39}],86:[function(require,module,exports){
+module.exports = function(bitmap, value){
+  return {
+    enumerable  : !(bitmap & 1),
+    configurable: !(bitmap & 2),
+    writable    : !(bitmap & 4),
+    value       : value
+  };
+};
+},{}],87:[function(require,module,exports){
+var redefine = require('./_redefine');
+module.exports = function(target, src, safe){
+  for(var key in src)redefine(target, key, src[key], safe);
+  return target;
+};
+},{"./_redefine":88}],88:[function(require,module,exports){
+var global    = require('./_global')
+  , hide      = require('./_hide')
+  , has       = require('./_has')
+  , SRC       = require('./_uid')('src')
+  , TO_STRING = 'toString'
+  , $toString = Function[TO_STRING]
+  , TPL       = ('' + $toString).split(TO_STRING);
+
+require('./_core').inspectSource = function(it){
+  return $toString.call(it);
+};
+
+(module.exports = function(O, key, val, safe){
+  var isFunction = typeof val == 'function';
+  if(isFunction)has(val, 'name') || hide(val, 'name', key);
+  if(O[key] === val)return;
+  if(isFunction)has(val, SRC) || hide(val, SRC, O[key] ? '' + O[key] : TPL.join(String(key)));
+  if(O === global){
+    O[key] = val;
+  } else {
+    if(!safe){
+      delete O[key];
+      hide(O, key, val);
+    } else {
+      if(O[key])O[key] = val;
+      else hide(O, key, val);
+    }
+  }
+// add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative
+})(Function.prototype, TO_STRING, function toString(){
+  return typeof this == 'function' && this[SRC] || $toString.call(this);
+});
+},{"./_core":24,"./_global":39,"./_has":40,"./_hide":41,"./_uid":115}],89:[function(require,module,exports){
+module.exports = function(regExp, replace){
+  var replacer = replace === Object(replace) ? function(part){
+    return replace[part];
+  } : replace;
+  return function(it){
+    return String(it).replace(regExp, replacer);
+  };
+};
+},{}],90:[function(require,module,exports){
+// 7.2.9 SameValue(x, y)
+module.exports = Object.is || function is(x, y){
+  return x === y ? x !== 0 || 1 / x === 1 / y : x != x && y != y;
+};
+},{}],91:[function(require,module,exports){
+// Works with __proto__ only. Old v8 can't work with null proto objects.
+/* eslint-disable no-proto */
+var isObject = require('./_is-object')
+  , anObject = require('./_an-object');
+var check = function(O, proto){
+  anObject(O);
+  if(!isObject(proto) && proto !== null)throw TypeError(proto + ": can't set as prototype!");
+};
+module.exports = {
+  set: Object.setPrototypeOf || ('__proto__' in {} ? // eslint-disable-line
+    function(test, buggy, set){
+      try {
+        set = require('./_ctx')(Function.call, require('./_object-gopd').f(Object.prototype, '__proto__').set, 2);
+        set(test, []);
+        buggy = !(test instanceof Array);
+      } catch(e){ buggy = true; }
+      return function setPrototypeOf(O, proto){
+        check(O, proto);
+        if(buggy)O.__proto__ = proto;
+        else set(O, proto);
+        return O;
+      };
+    }({}, false) : undefined),
+  check: check
+};
+},{"./_an-object":8,"./_ctx":26,"./_is-object":50,"./_object-gopd":71}],92:[function(require,module,exports){
+'use strict';
+var global      = require('./_global')
+  , dP          = require('./_object-dp')
+  , DESCRIPTORS = require('./_descriptors')
+  , SPECIES     = require('./_wks')('species');
+
+module.exports = function(KEY){
+  var C = global[KEY];
+  if(DESCRIPTORS && C && !C[SPECIES])dP.f(C, SPECIES, {
+    configurable: true,
+    get: function(){ return this; }
+  });
+};
+},{"./_descriptors":29,"./_global":39,"./_object-dp":68,"./_wks":118}],93:[function(require,module,exports){
+var def = require('./_object-dp').f
+  , has = require('./_has')
+  , TAG = require('./_wks')('toStringTag');
+
+module.exports = function(it, tag, stat){
+  if(it && !has(it = stat ? it : it.prototype, TAG))def(it, TAG, {configurable: true, value: tag});
+};
+},{"./_has":40,"./_object-dp":68,"./_wks":118}],94:[function(require,module,exports){
+var shared = require('./_shared')('keys')
+  , uid    = require('./_uid');
+module.exports = function(key){
+  return shared[key] || (shared[key] = uid(key));
+};
+},{"./_shared":95,"./_uid":115}],95:[function(require,module,exports){
+var global = require('./_global')
+  , SHARED = '__core-js_shared__'
+  , store  = global[SHARED] || (global[SHARED] = {});
+module.exports = function(key){
+  return store[key] || (store[key] = {});
+};
+},{"./_global":39}],96:[function(require,module,exports){
+// 7.3.20 SpeciesConstructor(O, defaultConstructor)
+var anObject  = require('./_an-object')
+  , aFunction = require('./_a-function')
+  , SPECIES   = require('./_wks')('species');
+module.exports = function(O, D){
+  var C = anObject(O).constructor, S;
+  return C === undefined || (S = anObject(C)[SPECIES]) == undefined ? D : aFunction(S);
+};
+},{"./_a-function":4,"./_an-object":8,"./_wks":118}],97:[function(require,module,exports){
+var fails = require('./_fails');
+
+module.exports = function(method, arg){
+  return !!method && fails(function(){
+    arg ? method.call(null, function(){}, 1) : method.call(null);
+  });
+};
+},{"./_fails":35}],98:[function(require,module,exports){
+var toInteger = require('./_to-integer')
+  , defined   = require('./_defined');
+// true  -> String#at
+// false -> String#codePointAt
+module.exports = function(TO_STRING){
+  return function(that, pos){
+    var s = String(defined(that))
+      , i = toInteger(pos)
+      , l = s.length
+      , a, b;
+    if(i < 0 || i >= l)return TO_STRING ? '' : undefined;
+    a = s.charCodeAt(i);
+    return a < 0xd800 || a > 0xdbff || i + 1 === l || (b = s.charCodeAt(i + 1)) < 0xdc00 || b > 0xdfff
+      ? TO_STRING ? s.charAt(i) : a
+      : TO_STRING ? s.slice(i, i + 2) : (a - 0xd800 << 10) + (b - 0xdc00) + 0x10000;
+  };
+};
+},{"./_defined":28,"./_to-integer":107}],99:[function(require,module,exports){
+// helper for String#{startsWith, endsWith, includes}
+var isRegExp = require('./_is-regexp')
+  , defined  = require('./_defined');
+
+module.exports = function(that, searchString, NAME){
+  if(isRegExp(searchString))throw TypeError('String#' + NAME + " doesn't accept regex!");
+  return String(defined(that));
+};
+},{"./_defined":28,"./_is-regexp":51}],100:[function(require,module,exports){
+var $export = require('./_export')
+  , fails   = require('./_fails')
+  , defined = require('./_defined')
+  , quot    = /"/g;
+// B.2.3.2.1 CreateHTML(string, tag, attribute, value)
+var createHTML = function(string, tag, attribute, value) {
+  var S  = String(defined(string))
+    , p1 = '<' + tag;
+  if(attribute !== '')p1 += ' ' + attribute + '="' + String(value).replace(quot, '&quot;') + '"';
+  return p1 + '>' + S + '</' + tag + '>';
+};
+module.exports = function(NAME, exec){
+  var O = {};
+  O[NAME] = exec(createHTML);
+  $export($export.P + $export.F * fails(function(){
+    var test = ''[NAME]('"');
+    return test !== test.toLowerCase() || test.split('"').length > 3;
+  }), 'String', O);
+};
+},{"./_defined":28,"./_export":33,"./_fails":35}],101:[function(require,module,exports){
+// https://github.com/tc39/proposal-string-pad-start-end
+var toLength = require('./_to-length')
+  , repeat   = require('./_string-repeat')
+  , defined  = require('./_defined');
+
+module.exports = function(that, maxLength, fillString, left){
+  var S            = String(defined(that))
+    , stringLength = S.length
+    , fillStr      = fillString === undefined ? ' ' : String(fillString)
+    , intMaxLength = toLength(maxLength);
+  if(intMaxLength <= stringLength || fillStr == '')return S;
+  var fillLen = intMaxLength - stringLength
+    , stringFiller = repeat.call(fillStr, Math.ceil(fillLen / fillStr.length));
+  if(stringFiller.length > fillLen)stringFiller = stringFiller.slice(0, fillLen);
+  return left ? stringFiller + S : S + stringFiller;
+};
+
+},{"./_defined":28,"./_string-repeat":102,"./_to-length":109}],102:[function(require,module,exports){
+'use strict';
+var toInteger = require('./_to-integer')
+  , defined   = require('./_defined');
+
+module.exports = function repeat(count){
+  var str = String(defined(this))
+    , res = ''
+    , n   = toInteger(count);
+  if(n < 0 || n == Infinity)throw RangeError("Count can't be negative");
+  for(;n > 0; (n >>>= 1) && (str += str))if(n & 1)res += str;
+  return res;
+};
+},{"./_defined":28,"./_to-integer":107}],103:[function(require,module,exports){
+var $export = require('./_export')
+  , defined = require('./_defined')
+  , fails   = require('./_fails')
+  , spaces  = require('./_string-ws')
+  , space   = '[' + spaces + ']'
+  , non     = '\u200b\u0085'
+  , ltrim   = RegExp('^' + space + space + '*')
+  , rtrim   = RegExp(space + space + '*$');
+
+var exporter = function(KEY, exec, ALIAS){
+  var exp   = {};
+  var FORCE = fails(function(){
+    return !!spaces[KEY]() || non[KEY]() != non;
+  });
+  var fn = exp[KEY] = FORCE ? exec(trim) : spaces[KEY];
+  if(ALIAS)exp[ALIAS] = fn;
+  $export($export.P + $export.F * FORCE, 'String', exp);
+};
+
+// 1 -> String#trimLeft
+// 2 -> String#trimRight
+// 3 -> String#trim
+var trim = exporter.trim = function(string, TYPE){
+  string = String(defined(string));
+  if(TYPE & 1)string = string.replace(ltrim, '');
+  if(TYPE & 2)string = string.replace(rtrim, '');
+  return string;
+};
+
+module.exports = exporter;
+},{"./_defined":28,"./_export":33,"./_fails":35,"./_string-ws":104}],104:[function(require,module,exports){
+module.exports = '\x09\x0A\x0B\x0C\x0D\x20\xA0\u1680\u180E\u2000\u2001\u2002\u2003' +
+  '\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u202F\u205F\u3000\u2028\u2029\uFEFF';
+},{}],105:[function(require,module,exports){
+var ctx                = require('./_ctx')
+  , invoke             = require('./_invoke')
+  , html               = require('./_html')
+  , cel                = require('./_dom-create')
+  , global             = require('./_global')
+  , process            = global.process
+  , setTask            = global.setImmediate
+  , clearTask          = global.clearImmediate
+  , MessageChannel     = global.MessageChannel
+  , counter            = 0
+  , queue              = {}
+  , ONREADYSTATECHANGE = 'onreadystatechange'
+  , defer, channel, port;
+var run = function(){
+  var id = +this;
+  if(queue.hasOwnProperty(id)){
+    var fn = queue[id];
+    delete queue[id];
+    fn();
+  }
+};
+var listener = function(event){
+  run.call(event.data);
+};
+// Node.js 0.9+ & IE10+ has setImmediate, otherwise:
+if(!setTask || !clearTask){
+  setTask = function setImmediate(fn){
+    var args = [], i = 1;
+    while(arguments.length > i)args.push(arguments[i++]);
+    queue[++counter] = function(){
+      invoke(typeof fn == 'function' ? fn : Function(fn), args);
+    };
+    defer(counter);
+    return counter;
+  };
+  clearTask = function clearImmediate(id){
+    delete queue[id];
+  };
+  // Node.js 0.8-
+  if(require('./_cof')(process) == 'process'){
+    defer = function(id){
+      process.nextTick(ctx(run, id, 1));
+    };
+  // Browsers with MessageChannel, includes WebWorkers
+  } else if(MessageChannel){
+    channel = new MessageChannel;
+    port    = channel.port2;
+    channel.port1.onmessage = listener;
+    defer = ctx(port.postMessage, port, 1);
+  // Browsers with postMessage, skip WebWorkers
+  // IE8 has postMessage, but it's sync & typeof its postMessage is 'object'
+  } else if(global.addEventListener && typeof postMessage == 'function' && !global.importScripts){
+    defer = function(id){
+      global.postMessage(id + '', '*');
+    };
+    global.addEventListener('message', listener, false);
+  // IE8-
+  } else if(ONREADYSTATECHANGE in cel('script')){
+    defer = function(id){
+      html.appendChild(cel('script'))[ONREADYSTATECHANGE] = function(){
+        html.removeChild(this);
+        run.call(id);
+      };
+    };
+  // Rest old browsers
+  } else {
+    defer = function(id){
+      setTimeout(ctx(run, id, 1), 0);
+    };
+  }
+}
+module.exports = {
+  set:   setTask,
+  clear: clearTask
+};
+},{"./_cof":19,"./_ctx":26,"./_dom-create":30,"./_global":39,"./_html":42,"./_invoke":45}],106:[function(require,module,exports){
+var toInteger = require('./_to-integer')
+  , max       = Math.max
+  , min       = Math.min;
+module.exports = function(index, length){
+  index = toInteger(index);
+  return index < 0 ? max(index + length, 0) : min(index, length);
+};
+},{"./_to-integer":107}],107:[function(require,module,exports){
+// 7.1.4 ToInteger
+var ceil  = Math.ceil
+  , floor = Math.floor;
+module.exports = function(it){
+  return isNaN(it = +it) ? 0 : (it > 0 ? floor : ceil)(it);
+};
+},{}],108:[function(require,module,exports){
+// to indexed object, toObject with fallback for non-array-like ES3 strings
+var IObject = require('./_iobject')
+  , defined = require('./_defined');
+module.exports = function(it){
+  return IObject(defined(it));
+};
+},{"./_defined":28,"./_iobject":46}],109:[function(require,module,exports){
+// 7.1.15 ToLength
+var toInteger = require('./_to-integer')
+  , min       = Math.min;
+module.exports = function(it){
+  return it > 0 ? min(toInteger(it), 0x1fffffffffffff) : 0; // pow(2, 53) - 1 == 9007199254740991
+};
+},{"./_to-integer":107}],110:[function(require,module,exports){
+// 7.1.13 ToObject(argument)
+var defined = require('./_defined');
+module.exports = function(it){
+  return Object(defined(it));
+};
+},{"./_defined":28}],111:[function(require,module,exports){
+// 7.1.1 ToPrimitive(input [, PreferredType])
+var isObject = require('./_is-object');
+// instead of the ES6 spec version, we didn't implement @@toPrimitive case
+// and the second argument - flag - preferred type is a string
+module.exports = function(it, S){
+  if(!isObject(it))return it;
+  var fn, val;
+  if(S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it)))return val;
+  if(typeof (fn = it.valueOf) == 'function' && !isObject(val = fn.call(it)))return val;
+  if(!S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it)))return val;
+  throw TypeError("Can't convert object to primitive value");
+};
+},{"./_is-object":50}],112:[function(require,module,exports){
+'use strict';
+if(require('./_descriptors')){
+  var LIBRARY             = require('./_library')
+    , global              = require('./_global')
+    , fails               = require('./_fails')
+    , $export             = require('./_export')
+    , $typed              = require('./_typed')
+    , $buffer             = require('./_typed-buffer')
+    , ctx                 = require('./_ctx')
+    , anInstance          = require('./_an-instance')
+    , propertyDesc        = require('./_property-desc')
+    , hide                = require('./_hide')
+    , redefineAll         = require('./_redefine-all')
+    , isInteger           = require('./_is-integer')
+    , toInteger           = require('./_to-integer')
+    , toLength            = require('./_to-length')
+    , toIndex             = require('./_to-index')
+    , toPrimitive         = require('./_to-primitive')
+    , has                 = require('./_has')
+    , same                = require('./_same-value')
+    , classof             = require('./_classof')
+    , isObject            = require('./_is-object')
+    , toObject            = require('./_to-object')
+    , isArrayIter         = require('./_is-array-iter')
+    , create              = require('./_object-create')
+    , getPrototypeOf      = require('./_object-gpo')
+    , gOPN                = require('./_object-gopn').f
+    , isIterable          = require('./core.is-iterable')
+    , getIterFn           = require('./core.get-iterator-method')
+    , uid                 = require('./_uid')
+    , wks                 = require('./_wks')
+    , createArrayMethod   = require('./_array-methods')
+    , createArrayIncludes = require('./_array-includes')
+    , speciesConstructor  = require('./_species-constructor')
+    , ArrayIterators      = require('./es6.array.iterator')
+    , Iterators           = require('./_iterators')
+    , $iterDetect         = require('./_iter-detect')
+    , setSpecies          = require('./_set-species')
+    , arrayFill           = require('./_array-fill')
+    , arrayCopyWithin     = require('./_array-copy-within')
+    , $DP                 = require('./_object-dp')
+    , $GOPD               = require('./_object-gopd')
+    , dP                  = $DP.f
+    , gOPD                = $GOPD.f
+    , RangeError          = global.RangeError
+    , TypeError           = global.TypeError
+    , Uint8Array          = global.Uint8Array
+    , ARRAY_BUFFER        = 'ArrayBuffer'
+    , SHARED_BUFFER       = 'Shared' + ARRAY_BUFFER
+    , BYTES_PER_ELEMENT   = 'BYTES_PER_ELEMENT'
+    , PROTOTYPE           = 'prototype'
+    , ArrayProto          = Array[PROTOTYPE]
+    , $ArrayBuffer        = $buffer.ArrayBuffer
+    , $DataView           = $buffer.DataView
+    , arrayForEach        = createArrayMethod(0)
+    , arrayFilter         = createArrayMethod(2)
+    , arraySome           = createArrayMethod(3)
+    , arrayEvery          = createArrayMethod(4)
+    , arrayFind           = createArrayMethod(5)
+    , arrayFindIndex      = createArrayMethod(6)
+    , arrayIncludes       = createArrayIncludes(true)
+    , arrayIndexOf        = createArrayIncludes(false)
+    , arrayValues         = ArrayIterators.values
+    , arrayKeys           = ArrayIterators.keys
+    , arrayEntries        = ArrayIterators.entries
+    , arrayLastIndexOf    = ArrayProto.lastIndexOf
+    , arrayReduce         = ArrayProto.reduce
+    , arrayReduceRight    = ArrayProto.reduceRight
+    , arrayJoin           = ArrayProto.join
+    , arraySort           = ArrayProto.sort
+    , arraySlice          = ArrayProto.slice
+    , arrayToString       = ArrayProto.toString
+    , arrayToLocaleString = ArrayProto.toLocaleString
+    , ITERATOR            = wks('iterator')
+    , TAG                 = wks('toStringTag')
+    , TYPED_CONSTRUCTOR   = uid('typed_constructor')
+    , DEF_CONSTRUCTOR     = uid('def_constructor')
+    , ALL_CONSTRUCTORS    = $typed.CONSTR
+    , TYPED_ARRAY         = $typed.TYPED
+    , VIEW                = $typed.VIEW
+    , WRONG_LENGTH        = 'Wrong length!';
+
+  var $map = createArrayMethod(1, function(O, length){
+    return allocate(speciesConstructor(O, O[DEF_CONSTRUCTOR]), length);
+  });
+
+  var LITTLE_ENDIAN = fails(function(){
+    return new Uint8Array(new Uint16Array([1]).buffer)[0] === 1;
+  });
+
+  var FORCED_SET = !!Uint8Array && !!Uint8Array[PROTOTYPE].set && fails(function(){
+    new Uint8Array(1).set({});
+  });
+
+  var strictToLength = function(it, SAME){
+    if(it === undefined)throw TypeError(WRONG_LENGTH);
+    var number = +it
+      , length = toLength(it);
+    if(SAME && !same(number, length))throw RangeError(WRONG_LENGTH);
+    return length;
+  };
+
+  var toOffset = function(it, BYTES){
+    var offset = toInteger(it);
+    if(offset < 0 || offset % BYTES)throw RangeError('Wrong offset!');
+    return offset;
+  };
+
+  var validate = function(it){
+    if(isObject(it) && TYPED_ARRAY in it)return it;
+    throw TypeError(it + ' is not a typed array!');
+  };
+
+  var allocate = function(C, length){
+    if(!(isObject(C) && TYPED_CONSTRUCTOR in C)){
+      throw TypeError('It is not a typed array constructor!');
+    } return new C(length);
+  };
+
+  var speciesFromList = function(O, list){
+    return fromList(speciesConstructor(O, O[DEF_CONSTRUCTOR]), list);
+  };
+
+  var fromList = function(C, list){
+    var index  = 0
+      , length = list.length
+      , result = allocate(C, length);
+    while(length > index)result[index] = list[index++];
+    return result;
+  };
+
+  var addGetter = function(it, key, internal){
+    dP(it, key, {get: function(){ return this._d[internal]; }});
+  };
+
+  var $from = function from(source /*, mapfn, thisArg */){
+    var O       = toObject(source)
+      , aLen    = arguments.length
+      , mapfn   = aLen > 1 ? arguments[1] : undefined
+      , mapping = mapfn !== undefined
+      , iterFn  = getIterFn(O)
+      , i, length, values, result, step, iterator;
+    if(iterFn != undefined && !isArrayIter(iterFn)){
+      for(iterator = iterFn.call(O), values = [], i = 0; !(step = iterator.next()).done; i++){
+        values.push(step.value);
+      } O = values;
+    }
+    if(mapping && aLen > 2)mapfn = ctx(mapfn, arguments[2], 2);
+    for(i = 0, length = toLength(O.length), result = allocate(this, length); length > i; i++){
+      result[i] = mapping ? mapfn(O[i], i) : O[i];
+    }
+    return result;
+  };
+
+  var $of = function of(/*...items*/){
+    var index  = 0
+      , length = arguments.length
+      , result = allocate(this, length);
+    while(length > index)result[index] = arguments[index++];
+    return result;
+  };
+
+  // iOS Safari 6.x fails here
+  var TO_LOCALE_BUG = !!Uint8Array && fails(function(){ arrayToLocaleString.call(new Uint8Array(1)); });
+
+  var $toLocaleString = function toLocaleString(){
+    return arrayToLocaleString.apply(TO_LOCALE_BUG ? arraySlice.call(validate(this)) : validate(this), arguments);
+  };
+
+  var proto = {
+    copyWithin: function copyWithin(target, start /*, end */){
+      return arrayCopyWithin.call(validate(this), target, start, arguments.length > 2 ? arguments[2] : undefined);
+    },
+    every: function every(callbackfn /*, thisArg */){
+      return arrayEvery(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);
+    },
+    fill: function fill(value /*, start, end */){ // eslint-disable-line no-unused-vars
+      return arrayFill.apply(validate(this), arguments);
+    },
+    filter: function filter(callbackfn /*, thisArg */){
+      return speciesFromList(this, arrayFilter(validate(this), callbackfn,
+        arguments.length > 1 ? arguments[1] : undefined));
+    },
+    find: function find(predicate /*, thisArg */){
+      return arrayFind(validate(this), predicate, arguments.length > 1 ? arguments[1] : undefined);
+    },
+    findIndex: function findIndex(predicate /*, thisArg */){
+      return arrayFindIndex(validate(this), predicate, arguments.length > 1 ? arguments[1] : undefined);
+    },
+    forEach: function forEach(callbackfn /*, thisArg */){
+      arrayForEach(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);
+    },
+    indexOf: function indexOf(searchElement /*, fromIndex */){
+      return arrayIndexOf(validate(this), searchElement, arguments.length > 1 ? arguments[1] : undefined);
+    },
+    includes: function includes(searchElement /*, fromIndex */){
+      return arrayIncludes(validate(this), searchElement, arguments.length > 1 ? arguments[1] : undefined);
+    },
+    join: function join(separator){ // eslint-disable-line no-unused-vars
+      return arrayJoin.apply(validate(this), arguments);
+    },
+    lastIndexOf: function lastIndexOf(searchElement /*, fromIndex */){ // eslint-disable-line no-unused-vars
+      return arrayLastIndexOf.apply(validate(this), arguments);
+    },
+    map: function map(mapfn /*, thisArg */){
+      return $map(validate(this), mapfn, arguments.length > 1 ? arguments[1] : undefined);
+    },
+    reduce: function reduce(callbackfn /*, initialValue */){ // eslint-disable-line no-unused-vars
+      return arrayReduce.apply(validate(this), arguments);
+    },
+    reduceRight: function reduceRight(callbackfn /*, initialValue */){ // eslint-disable-line no-unused-vars
+      return arrayReduceRight.apply(validate(this), arguments);
+    },
+    reverse: function reverse(){
+      var that   = this
+        , length = validate(that).length
+        , middle = Math.floor(length / 2)
+        , index  = 0
+        , value;
+      while(index < middle){
+        value         = that[index];
+        that[index++] = that[--length];
+        that[length]  = value;
+      } return that;
+    },
+    some: function some(callbackfn /*, thisArg */){
+      return arraySome(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);
+    },
+    sort: function sort(comparefn){
+      return arraySort.call(validate(this), comparefn);
+    },
+    subarray: function subarray(begin, end){
+      var O      = validate(this)
+        , length = O.length
+        , $begin = toIndex(begin, length);
+      return new (speciesConstructor(O, O[DEF_CONSTRUCTOR]))(
+        O.buffer,
+        O.byteOffset + $begin * O.BYTES_PER_ELEMENT,
+        toLength((end === undefined ? length : toIndex(end, length)) - $begin)
+      );
+    }
+  };
+
+  var $slice = function slice(start, end){
+    return speciesFromList(this, arraySlice.call(validate(this), start, end));
+  };
+
+  var $set = function set(arrayLike /*, offset */){
+    validate(this);
+    var offset = toOffset(arguments[1], 1)
+      , length = this.length
+      , src    = toObject(arrayLike)
+      , len    = toLength(src.length)
+      , index  = 0;
+    if(len + offset > length)throw RangeError(WRONG_LENGTH);
+    while(index < len)this[offset + index] = src[index++];
+  };
+
+  var $iterators = {
+    entries: function entries(){
+      return arrayEntries.call(validate(this));
+    },
+    keys: function keys(){
+      return arrayKeys.call(validate(this));
+    },
+    values: function values(){
+      return arrayValues.call(validate(this));
+    }
+  };
+
+  var isTAIndex = function(target, key){
+    return isObject(target)
+      && target[TYPED_ARRAY]
+      && typeof key != 'symbol'
+      && key in target
+      && String(+key) == String(key);
+  };
+  var $getDesc = function getOwnPropertyDescriptor(target, key){
+    return isTAIndex(target, key = toPrimitive(key, true))
+      ? propertyDesc(2, target[key])
+      : gOPD(target, key);
+  };
+  var $setDesc = function defineProperty(target, key, desc){
+    if(isTAIndex(target, key = toPrimitive(key, true))
+      && isObject(desc)
+      && has(desc, 'value')
+      && !has(desc, 'get')
+      && !has(desc, 'set')
+      // TODO: add validation descriptor w/o calling accessors
+      && !desc.configurable
+      && (!has(desc, 'writable') || desc.writable)
+      && (!has(desc, 'enumerable') || desc.enumerable)
+    ){
+      target[key] = desc.value;
+      return target;
+    } else return dP(target, key, desc);
+  };
+
+  if(!ALL_CONSTRUCTORS){
+    $GOPD.f = $getDesc;
+    $DP.f   = $setDesc;
+  }
+
+  $export($export.S + $export.F * !ALL_CONSTRUCTORS, 'Object', {
+    getOwnPropertyDescriptor: $getDesc,
+    defineProperty:           $setDesc
+  });
+
+  if(fails(function(){ arrayToString.call({}); })){
+    arrayToString = arrayToLocaleString = function toString(){
+      return arrayJoin.call(this);
+    }
+  }
+
+  var $TypedArrayPrototype$ = redefineAll({}, proto);
+  redefineAll($TypedArrayPrototype$, $iterators);
+  hide($TypedArrayPrototype$, ITERATOR, $iterators.values);
+  redefineAll($TypedArrayPrototype$, {
+    slice:          $slice,
+    set:            $set,
+    constructor:    function(){ /* noop */ },
+    toString:       arrayToString,
+    toLocaleString: $toLocaleString
+  });
+  addGetter($TypedArrayPrototype$, 'buffer', 'b');
+  addGetter($TypedArrayPrototype$, 'byteOffset', 'o');
+  addGetter($TypedArrayPrototype$, 'byteLength', 'l');
+  addGetter($TypedArrayPrototype$, 'length', 'e');
+  dP($TypedArrayPrototype$, TAG, {
+    get: function(){ return this[TYPED_ARRAY]; }
+  });
+
+  module.exports = function(KEY, BYTES, wrapper, CLAMPED){
+    CLAMPED = !!CLAMPED;
+    var NAME       = KEY + (CLAMPED ? 'Clamped' : '') + 'Array'
+      , ISNT_UINT8 = NAME != 'Uint8Array'
+      , GETTER     = 'get' + KEY
+      , SETTER     = 'set' + KEY
+      , TypedArray = global[NAME]
+      , Base       = TypedArray || {}
+      , TAC        = TypedArray && getPrototypeOf(TypedArray)
+      , FORCED     = !TypedArray || !$typed.ABV
+      , O          = {}
+      , TypedArrayPrototype = TypedArray && TypedArray[PROTOTYPE];
+    var getter = function(that, index){
+      var data = that._d;
+      return data.v[GETTER](index * BYTES + data.o, LITTLE_ENDIAN);
+    };
+    var setter = function(that, index, value){
+      var data = that._d;
+      if(CLAMPED)value = (value = Math.round(value)) < 0 ? 0 : value > 0xff ? 0xff : value & 0xff;
+      data.v[SETTER](index * BYTES + data.o, value, LITTLE_ENDIAN);
+    };
+    var addElement = function(that, index){
+      dP(that, index, {
+        get: function(){
+          return getter(this, index);
+        },
+        set: function(value){
+          return setter(this, index, value);
+        },
+        enumerable: true
+      });
+    };
+    if(FORCED){
+      TypedArray = wrapper(function(that, data, $offset, $length){
+        anInstance(that, TypedArray, NAME, '_d');
+        var index  = 0
+          , offset = 0
+          , buffer, byteLength, length, klass;
+        if(!isObject(data)){
+          length     = strictToLength(data, true)
+          byteLength = length * BYTES;
+          buffer     = new $ArrayBuffer(byteLength);
+        } else if(data instanceof $ArrayBuffer || (klass = classof(data)) == ARRAY_BUFFER || klass == SHARED_BUFFER){
+          buffer = data;
+          offset = toOffset($offset, BYTES);
+          var $len = data.byteLength;
+          if($length === undefined){
+            if($len % BYTES)throw RangeError(WRONG_LENGTH);
+            byteLength = $len - offset;
+            if(byteLength < 0)throw RangeError(WRONG_LENGTH);
+          } else {
+            byteLength = toLength($length) * BYTES;
+            if(byteLength + offset > $len)throw RangeError(WRONG_LENGTH);
+          }
+          length = byteLength / BYTES;
+        } else if(TYPED_ARRAY in data){
+          return fromList(TypedArray, data);
+        } else {
+          return $from.call(TypedArray, data);
+        }
+        hide(that, '_d', {
+          b: buffer,
+          o: offset,
+          l: byteLength,
+          e: length,
+          v: new $DataView(buffer)
+        });
+        while(index < length)addElement(that, index++);
+      });
+      TypedArrayPrototype = TypedArray[PROTOTYPE] = create($TypedArrayPrototype$);
+      hide(TypedArrayPrototype, 'constructor', TypedArray);
+    } else if(!$iterDetect(function(iter){
+      // V8 works with iterators, but fails in many other cases
+      // https://code.google.com/p/v8/issues/detail?id=4552
+      new TypedArray(null); // eslint-disable-line no-new
+      new TypedArray(iter); // eslint-disable-line no-new
+    }, true)){
+      TypedArray = wrapper(function(that, data, $offset, $length){
+        anInstance(that, TypedArray, NAME);
+        var klass;
+        // `ws` module bug, temporarily remove validation length for Uint8Array
+        // https://github.com/websockets/ws/pull/645
+        if(!isObject(data))return new Base(strictToLength(data, ISNT_UINT8));
+        if(data instanceof $ArrayBuffer || (klass = classof(data)) == ARRAY_BUFFER || klass == SHARED_BUFFER){
+          return $length !== undefined
+            ? new Base(data, toOffset($offset, BYTES), $length)
+            : $offset !== undefined
+              ? new Base(data, toOffset($offset, BYTES))
+              : new Base(data);
+        }
+        if(TYPED_ARRAY in data)return fromList(TypedArray, data);
+        return $from.call(TypedArray, data);
+      });
+      arrayForEach(TAC !== Function.prototype ? gOPN(Base).concat(gOPN(TAC)) : gOPN(Base), function(key){
+        if(!(key in TypedArray))hide(TypedArray, key, Base[key]);
+      });
+      TypedArray[PROTOTYPE] = TypedArrayPrototype;
+      if(!LIBRARY)TypedArrayPrototype.constructor = TypedArray;
+    }
+    var $nativeIterator   = TypedArrayPrototype[ITERATOR]
+      , CORRECT_ITER_NAME = !!$nativeIterator && ($nativeIterator.name == 'values' || $nativeIterator.name == undefined)
+      , $iterator         = $iterators.values;
+    hide(TypedArray, TYPED_CONSTRUCTOR, true);
+    hide(TypedArrayPrototype, TYPED_ARRAY, NAME);
+    hide(TypedArrayPrototype, VIEW, true);
+    hide(TypedArrayPrototype, DEF_CONSTRUCTOR, TypedArray);
+
+    if(CLAMPED ? new TypedArray(1)[TAG] != NAME : !(TAG in TypedArrayPrototype)){
+      dP(TypedArrayPrototype, TAG, {
+        get: function(){ return NAME; }
+      });
+    }
+
+    O[NAME] = TypedArray;
+
+    $export($export.G + $export.W + $export.F * (TypedArray != Base), O);
+
+    $export($export.S, NAME, {
+      BYTES_PER_ELEMENT: BYTES,
+      from: $from,
+      of: $of
+    });
+
+    if(!(BYTES_PER_ELEMENT in TypedArrayPrototype))hide(TypedArrayPrototype, BYTES_PER_ELEMENT, BYTES);
+
+    $export($export.P, NAME, proto);
+
+    setSpecies(NAME);
+
+    $export($export.P + $export.F * FORCED_SET, NAME, {set: $set});
+
+    $export($export.P + $export.F * !CORRECT_ITER_NAME, NAME, $iterators);
+
+    $export($export.P + $export.F * (TypedArrayPrototype.toString != arrayToString), NAME, {toString: arrayToString});
+
+    $export($export.P + $export.F * fails(function(){
+      new TypedArray(1).slice();
+    }), NAME, {slice: $slice});
+
+    $export($export.P + $export.F * (fails(function(){
+      return [1, 2].toLocaleString() != new TypedArray([1, 2]).toLocaleString()
+    }) || !fails(function(){
+      TypedArrayPrototype.toLocaleString.call([1, 2]);
+    })), NAME, {toLocaleString: $toLocaleString});
+
+    Iterators[NAME] = CORRECT_ITER_NAME ? $nativeIterator : $iterator;
+    if(!LIBRARY && !CORRECT_ITER_NAME)hide(TypedArrayPrototype, ITERATOR, $iterator);
+  };
+} else module.exports = function(){ /* empty */ };
+},{"./_an-instance":7,"./_array-copy-within":9,"./_array-fill":10,"./_array-includes":12,"./_array-methods":13,"./_classof":18,"./_ctx":26,"./_descriptors":29,"./_export":33,"./_fails":35,"./_global":39,"./_has":40,"./_hide":41,"./_is-array-iter":47,"./_is-integer":49,"./_is-object":50,"./_iter-detect":55,"./_iterators":57,"./_library":59,"./_object-create":67,"./_object-dp":68,"./_object-gopd":71,"./_object-gopn":73,"./_object-gpo":75,"./_property-desc":86,"./_redefine-all":87,"./_same-value":90,"./_set-species":92,"./_species-constructor":96,"./_to-index":106,"./_to-integer":107,"./_to-length":109,"./_to-object":110,"./_to-primitive":111,"./_typed":114,"./_typed-buffer":113,"./_uid":115,"./_wks":118,"./core.get-iterator-method":119,"./core.is-iterable":120,"./es6.array.iterator":132}],113:[function(require,module,exports){
+'use strict';
+var global         = require('./_global')
+  , DESCRIPTORS    = require('./_descriptors')
+  , LIBRARY        = require('./_library')
+  , $typed         = require('./_typed')
+  , hide           = require('./_hide')
+  , redefineAll    = require('./_redefine-all')
+  , fails          = require('./_fails')
+  , anInstance     = require('./_an-instance')
+  , toInteger      = require('./_to-integer')
+  , toLength       = require('./_to-length')
+  , gOPN           = require('./_object-gopn').f
+  , dP             = require('./_object-dp').f
+  , arrayFill      = require('./_array-fill')
+  , setToStringTag = require('./_set-to-string-tag')
+  , ARRAY_BUFFER   = 'ArrayBuffer'
+  , DATA_VIEW      = 'DataView'
+  , PROTOTYPE      = 'prototype'
+  , WRONG_LENGTH   = 'Wrong length!'
+  , WRONG_INDEX    = 'Wrong index!'
+  , $ArrayBuffer   = global[ARRAY_BUFFER]
+  , $DataView      = global[DATA_VIEW]
+  , Math           = global.Math
+  , parseInt       = global.parseInt
+  , RangeError     = global.RangeError
+  , Infinity       = global.Infinity
+  , BaseBuffer     = $ArrayBuffer
+  , abs            = Math.abs
+  , pow            = Math.pow
+  , min            = Math.min
+  , floor          = Math.floor
+  , log            = Math.log
+  , LN2            = Math.LN2
+  , BUFFER         = 'buffer'
+  , BYTE_LENGTH    = 'byteLength'
+  , BYTE_OFFSET    = 'byteOffset'
+  , $BUFFER        = DESCRIPTORS ? '_b' : BUFFER
+  , $LENGTH        = DESCRIPTORS ? '_l' : BYTE_LENGTH
+  , $OFFSET        = DESCRIPTORS ? '_o' : BYTE_OFFSET;
+
+// IEEE754 conversions based on https://github.com/feross/ieee754
+var packIEEE754 = function(value, mLen, nBytes){
+  var buffer = Array(nBytes)
+    , eLen   = nBytes * 8 - mLen - 1
+    , eMax   = (1 << eLen) - 1
+    , eBias  = eMax >> 1
+    , rt     = mLen === 23 ? pow(2, -24) - pow(2, -77) : 0
+    , i      = 0
+    , s      = value < 0 || value === 0 && 1 / value < 0 ? 1 : 0
+    , e, m, c;
+  value = abs(value)
+  if(value != value || value === Infinity){
+    m = value != value ? 1 : 0;
+    e = eMax;
+  } else {
+    e = floor(log(value) / LN2);
+    if(value * (c = pow(2, -e)) < 1){
+      e--;
+      c *= 2;
+    }
+    if(e + eBias >= 1){
+      value += rt / c;
+    } else {
+      value += rt * pow(2, 1 - eBias);
+    }
+    if(value * c >= 2){
+      e++;
+      c /= 2;
+    }
+    if(e + eBias >= eMax){
+      m = 0;
+      e = eMax;
+    } else if(e + eBias >= 1){
+      m = (value * c - 1) * pow(2, mLen);
+      e = e + eBias;
+    } else {
+      m = value * pow(2, eBias - 1) * pow(2, mLen);
+      e = 0;
+    }
+  }
+  for(; mLen >= 8; buffer[i++] = m & 255, m /= 256, mLen -= 8);
+  e = e << mLen | m;
+  eLen += mLen;
+  for(; eLen > 0; buffer[i++] = e & 255, e /= 256, eLen -= 8);
+  buffer[--i] |= s * 128;
+  return buffer;
+};
+var unpackIEEE754 = function(buffer, mLen, nBytes){
+  var eLen  = nBytes * 8 - mLen - 1
+    , eMax  = (1 << eLen) - 1
+    , eBias = eMax >> 1
+    , nBits = eLen - 7
+    , i     = nBytes - 1
+    , s     = buffer[i--]
+    , e     = s & 127
+    , m;
+  s >>= 7;
+  for(; nBits > 0; e = e * 256 + buffer[i], i--, nBits -= 8);
+  m = e & (1 << -nBits) - 1;
+  e >>= -nBits;
+  nBits += mLen;
+  for(; nBits > 0; m = m * 256 + buffer[i], i--, nBits -= 8);
+  if(e === 0){
+    e = 1 - eBias;
+  } else if(e === eMax){
+    return m ? NaN : s ? -Infinity : Infinity;
+  } else {
+    m = m + pow(2, mLen);
+    e = e - eBias;
+  } return (s ? -1 : 1) * m * pow(2, e - mLen);
+};
+
+var unpackI32 = function(bytes){
+  return bytes[3] << 24 | bytes[2] << 16 | bytes[1] << 8 | bytes[0];
+};
+var packI8 = function(it){
+  return [it & 0xff];
+};
+var packI16 = function(it){
+  return [it & 0xff, it >> 8 & 0xff];
+};
+var packI32 = function(it){
+  return [it & 0xff, it >> 8 & 0xff, it >> 16 & 0xff, it >> 24 & 0xff];
+};
+var packF64 = function(it){
+  return packIEEE754(it, 52, 8);
+};
+var packF32 = function(it){
+  return packIEEE754(it, 23, 4);
+};
+
+var addGetter = function(C, key, internal){
+  dP(C[PROTOTYPE], key, {get: function(){ return this[internal]; }});
+};
+
+var get = function(view, bytes, index, isLittleEndian){
+  var numIndex = +index
+    , intIndex = toInteger(numIndex);
+  if(numIndex != intIndex || intIndex < 0 || intIndex + bytes > view[$LENGTH])throw RangeError(WRONG_INDEX);
+  var store = view[$BUFFER]._b
+    , start = intIndex + view[$OFFSET]
+    , pack  = store.slice(start, start + bytes);
+  return isLittleEndian ? pack : pack.reverse();
+};
+var set = function(view, bytes, index, conversion, value, isLittleEndian){
+  var numIndex = +index
+    , intIndex = toInteger(numIndex);
+  if(numIndex != intIndex || intIndex < 0 || intIndex + bytes > view[$LENGTH])throw RangeError(WRONG_INDEX);
+  var store = view[$BUFFER]._b
+    , start = intIndex + view[$OFFSET]
+    , pack  = conversion(+value);
+  for(var i = 0; i < bytes; i++)store[start + i] = pack[isLittleEndian ? i : bytes - i - 1];
+};
+
+var validateArrayBufferArguments = function(that, length){
+  anInstance(that, $ArrayBuffer, ARRAY_BUFFER);
+  var numberLength = +length
+    , byteLength   = toLength(numberLength);
+  if(numberLength != byteLength)throw RangeError(WRONG_LENGTH);
+  return byteLength;
+};
+
+if(!$typed.ABV){
+  $ArrayBuffer = function ArrayBuffer(length){
+    var byteLength = validateArrayBufferArguments(this, length);
+    this._b       = arrayFill.call(Array(byteLength), 0);
+    this[$LENGTH] = byteLength;
+  };
+
+  $DataView = function DataView(buffer, byteOffset, byteLength){
+    anInstance(this, $DataView, DATA_VIEW);
+    anInstance(buffer, $ArrayBuffer, DATA_VIEW);
+    var bufferLength = buffer[$LENGTH]
+      , offset       = toInteger(byteOffset);
+    if(offset < 0 || offset > bufferLength)throw RangeError('Wrong offset!');
+    byteLength = byteLength === undefined ? bufferLength - offset : toLength(byteLength);
+    if(offset + byteLength > bufferLength)throw RangeError(WRONG_LENGTH);
+    this[$BUFFER] = buffer;
+    this[$OFFSET] = offset;
+    this[$LENGTH] = byteLength;
+  };
+
+  if(DESCRIPTORS){
+    addGetter($ArrayBuffer, BYTE_LENGTH, '_l');
+    addGetter($DataView, BUFFER, '_b');
+    addGetter($DataView, BYTE_LENGTH, '_l');
+    addGetter($DataView, BYTE_OFFSET, '_o');
+  }
+
+  redefineAll($DataView[PROTOTYPE], {
+    getInt8: function getInt8(byteOffset){
+      return get(this, 1, byteOffset)[0] << 24 >> 24;
+    },
+    getUint8: function getUint8(byteOffset){
+      return get(this, 1, byteOffset)[0];
+    },
+    getInt16: function getInt16(byteOffset /*, littleEndian */){
+      var bytes = get(this, 2, byteOffset, arguments[1]);
+      return (bytes[1] << 8 | bytes[0]) << 16 >> 16;
+    },
+    getUint16: function getUint16(byteOffset /*, littleEndian */){
+      var bytes = get(this, 2, byteOffset, arguments[1]);
+      return bytes[1] << 8 | bytes[0];
+    },
+    getInt32: function getInt32(byteOffset /*, littleEndian */){
+      return unpackI32(get(this, 4, byteOffset, arguments[1]));
+    },
+    getUint32: function getUint32(byteOffset /*, littleEndian */){
+      return unpackI32(get(this, 4, byteOffset, arguments[1])) >>> 0;
+    },
+    getFloat32: function getFloat32(byteOffset /*, littleEndian */){
+      return unpackIEEE754(get(this, 4, byteOffset, arguments[1]), 23, 4);
+    },
+    getFloat64: function getFloat64(byteOffset /*, littleEndian */){
+      return unpackIEEE754(get(this, 8, byteOffset, arguments[1]), 52, 8);
+    },
+    setInt8: function setInt8(byteOffset, value){
+      set(this, 1, byteOffset, packI8, value);
+    },
+    setUint8: function setUint8(byteOffset, value){
+      set(this, 1, byteOffset, packI8, value);
+    },
+    setInt16: function setInt16(byteOffset, value /*, littleEndian */){
+      set(this, 2, byteOffset, packI16, value, arguments[2]);
+    },
+    setUint16: function setUint16(byteOffset, value /*, littleEndian */){
+      set(this, 2, byteOffset, packI16, value, arguments[2]);
+    },
+    setInt32: function setInt32(byteOffset, value /*, littleEndian */){
+      set(this, 4, byteOffset, packI32, value, arguments[2]);
+    },
+    setUint32: function setUint32(byteOffset, value /*, littleEndian */){
+      set(this, 4, byteOffset, packI32, value, arguments[2]);
+    },
+    setFloat32: function setFloat32(byteOffset, value /*, littleEndian */){
+      set(this, 4, byteOffset, packF32, value, arguments[2]);
+    },
+    setFloat64: function setFloat64(byteOffset, value /*, littleEndian */){
+      set(this, 8, byteOffset, packF64, value, arguments[2]);
+    }
+  });
+} else {
+  if(!fails(function(){
+    new $ArrayBuffer;     // eslint-disable-line no-new
+  }) || !fails(function(){
+    new $ArrayBuffer(.5); // eslint-disable-line no-new
+  })){
+    $ArrayBuffer = function ArrayBuffer(length){
+      return new BaseBuffer(validateArrayBufferArguments(this, length));
+    };
+    var ArrayBufferProto = $ArrayBuffer[PROTOTYPE] = BaseBuffer[PROTOTYPE];
+    for(var keys = gOPN(BaseBuffer), j = 0, key; keys.length > j; ){
+      if(!((key = keys[j++]) in $ArrayBuffer))hide($ArrayBuffer, key, BaseBuffer[key]);
+    };
+    if(!LIBRARY)ArrayBufferProto.constructor = $ArrayBuffer;
+  }
+  // iOS Safari 7.x bug
+  var view = new $DataView(new $ArrayBuffer(2))
+    , $setInt8 = $DataView[PROTOTYPE].setInt8;
+  view.setInt8(0, 2147483648);
+  view.setInt8(1, 2147483649);
+  if(view.getInt8(0) || !view.getInt8(1))redefineAll($DataView[PROTOTYPE], {
+    setInt8: function setInt8(byteOffset, value){
+      $setInt8.call(this, byteOffset, value << 24 >> 24);
+    },
+    setUint8: function setUint8(byteOffset, value){
+      $setInt8.call(this, byteOffset, value << 24 >> 24);
+    }
+  }, true);
+}
+setToStringTag($ArrayBuffer, ARRAY_BUFFER);
+setToStringTag($DataView, DATA_VIEW);
+hide($DataView[PROTOTYPE], $typed.VIEW, true);
+exports[ARRAY_BUFFER] = $ArrayBuffer;
+exports[DATA_VIEW] = $DataView;
+},{"./_an-instance":7,"./_array-fill":10,"./_descriptors":29,"./_fails":35,"./_global":39,"./_hide":41,"./_library":59,"./_object-dp":68,"./_object-gopn":73,"./_redefine-all":87,"./_set-to-string-tag":93,"./_to-integer":107,"./_to-length":109,"./_typed":114}],114:[function(require,module,exports){
+var global = require('./_global')
+  , hide   = require('./_hide')
+  , uid    = require('./_uid')
+  , TYPED  = uid('typed_array')
+  , VIEW   = uid('view')
+  , ABV    = !!(global.ArrayBuffer && global.DataView)
+  , CONSTR = ABV
+  , i = 0, l = 9, Typed;
+
+var TypedArrayConstructors = (
+  'Int8Array,Uint8Array,Uint8ClampedArray,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array'
+).split(',');
+
+while(i < l){
+  if(Typed = global[TypedArrayConstructors[i++]]){
+    hide(Typed.prototype, TYPED, true);
+    hide(Typed.prototype, VIEW, true);
+  } else CONSTR = false;
+}
+
+module.exports = {
+  ABV:    ABV,
+  CONSTR: CONSTR,
+  TYPED:  TYPED,
+  VIEW:   VIEW
+};
+},{"./_global":39,"./_hide":41,"./_uid":115}],115:[function(require,module,exports){
+var id = 0
+  , px = Math.random();
+module.exports = function(key){
+  return 'Symbol('.concat(key === undefined ? '' : key, ')_', (++id + px).toString(36));
+};
+},{}],116:[function(require,module,exports){
+var global         = require('./_global')
+  , core           = require('./_core')
+  , LIBRARY        = require('./_library')
+  , wksExt         = require('./_wks-ext')
+  , defineProperty = require('./_object-dp').f;
+module.exports = function(name){
+  var $Symbol = core.Symbol || (core.Symbol = LIBRARY ? {} : global.Symbol || {});
+  if(name.charAt(0) != '_' && !(name in $Symbol))defineProperty($Symbol, name, {value: wksExt.f(name)});
+};
+},{"./_core":24,"./_global":39,"./_library":59,"./_object-dp":68,"./_wks-ext":117}],117:[function(require,module,exports){
+exports.f = require('./_wks');
+},{"./_wks":118}],118:[function(require,module,exports){
+var store      = require('./_shared')('wks')
+  , uid        = require('./_uid')
+  , Symbol     = require('./_global').Symbol
+  , USE_SYMBOL = typeof Symbol == 'function';
+
+var $exports = module.exports = function(name){
+  return store[name] || (store[name] =
+    USE_SYMBOL && Symbol[name] || (USE_SYMBOL ? Symbol : uid)('Symbol.' + name));
+};
+
+$exports.store = store;
+},{"./_global":39,"./_shared":95,"./_uid":115}],119:[function(require,module,exports){
+var classof   = require('./_classof')
+  , ITERATOR  = require('./_wks')('iterator')
+  , Iterators = require('./_iterators');
+module.exports = require('./_core').getIteratorMethod = function(it){
+  if(it != undefined)return it[ITERATOR]
+    || it['@@iterator']
+    || Iterators[classof(it)];
+};
+},{"./_classof":18,"./_core":24,"./_iterators":57,"./_wks":118}],120:[function(require,module,exports){
+var classof   = require('./_classof')
+  , ITERATOR  = require('./_wks')('iterator')
+  , Iterators = require('./_iterators');
+module.exports = require('./_core').isIterable = function(it){
+  var O = Object(it);
+  return O[ITERATOR] !== undefined
+    || '@@iterator' in O
+    || Iterators.hasOwnProperty(classof(O));
+};
+},{"./_classof":18,"./_core":24,"./_iterators":57,"./_wks":118}],121:[function(require,module,exports){
+// https://github.com/benjamingr/RexExp.escape
+var $export = require('./_export')
+  , $re     = require('./_replacer')(/[\\^$*+?.()|[\]{}]/g, '\\$&');
+
+$export($export.S, 'RegExp', {escape: function escape(it){ return $re(it); }});
+
+},{"./_export":33,"./_replacer":89}],122:[function(require,module,exports){
+// 22.1.3.3 Array.prototype.copyWithin(target, start, end = this.length)
+var $export = require('./_export');
+
+$export($export.P, 'Array', {copyWithin: require('./_array-copy-within')});
+
+require('./_add-to-unscopables')('copyWithin');
+},{"./_add-to-unscopables":6,"./_array-copy-within":9,"./_export":33}],123:[function(require,module,exports){
+'use strict';
+var $export = require('./_export')
+  , $every  = require('./_array-methods')(4);
+
+$export($export.P + $export.F * !require('./_strict-method')([].every, true), 'Array', {
+  // 22.1.3.5 / 15.4.4.16 Array.prototype.every(callbackfn [, thisArg])
+  every: function every(callbackfn /* , thisArg */){
+    return $every(this, callbackfn, arguments[1]);
+  }
+});
+},{"./_array-methods":13,"./_export":33,"./_strict-method":97}],124:[function(require,module,exports){
+// 22.1.3.6 Array.prototype.fill(value, start = 0, end = this.length)
+var $export = require('./_export');
+
+$export($export.P, 'Array', {fill: require('./_array-fill')});
+
+require('./_add-to-unscopables')('fill');
+},{"./_add-to-unscopables":6,"./_array-fill":10,"./_export":33}],125:[function(require,module,exports){
+'use strict';
+var $export = require('./_export')
+  , $filter = require('./_array-methods')(2);
+
+$export($export.P + $export.F * !require('./_strict-method')([].filter, true), 'Array', {
+  // 22.1.3.7 / 15.4.4.20 Array.prototype.filter(callbackfn [, thisArg])
+  filter: function filter(callbackfn /* , thisArg */){
+    return $filter(this, callbackfn, arguments[1]);
+  }
+});
+},{"./_array-methods":13,"./_export":33,"./_strict-method":97}],126:[function(require,module,exports){
+'use strict';
+// 22.1.3.9 Array.prototype.findIndex(predicate, thisArg = undefined)
+var $export = require('./_export')
+  , $find   = require('./_array-methods')(6)
+  , KEY     = 'findIndex'
+  , forced  = true;
+// Shouldn't skip holes
+if(KEY in [])Array(1)[KEY](function(){ forced = false; });
+$export($export.P + $export.F * forced, 'Array', {
+  findIndex: function findIndex(callbackfn/*, that = undefined */){
+    return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);
+  }
+});
+require('./_add-to-unscopables')(KEY);
+},{"./_add-to-unscopables":6,"./_array-methods":13,"./_export":33}],127:[function(require,module,exports){
+'use strict';
+// 22.1.3.8 Array.prototype.find(predicate, thisArg = undefined)
+var $export = require('./_export')
+  , $find   = require('./_array-methods')(5)
+  , KEY     = 'find'
+  , forced  = true;
+// Shouldn't skip holes
+if(KEY in [])Array(1)[KEY](function(){ forced = false; });
+$export($export.P + $export.F * forced, 'Array', {
+  find: function find(callbackfn/*, that = undefined */){
+    return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);
+  }
+});
+require('./_add-to-unscopables')(KEY);
+},{"./_add-to-unscopables":6,"./_array-methods":13,"./_export":33}],128:[function(require,module,exports){
+'use strict';
+var $export  = require('./_export')
+  , $forEach = require('./_array-methods')(0)
+  , STRICT   = require('./_strict-method')([].forEach, true);
+
+$export($export.P + $export.F * !STRICT, 'Array', {
+  // 22.1.3.10 / 15.4.4.18 Array.prototype.forEach(callbackfn [, thisArg])
+  forEach: function forEach(callbackfn /* , thisArg */){
+    return $forEach(this, callbackfn, arguments[1]);
+  }
+});
+},{"./_array-methods":13,"./_export":33,"./_strict-method":97}],129:[function(require,module,exports){
+'use strict';
+var ctx            = require('./_ctx')
+  , $export        = require('./_export')
+  , toObject       = require('./_to-object')
+  , call           = require('./_iter-call')
+  , isArrayIter    = require('./_is-array-iter')
+  , toLength       = require('./_to-length')
+  , createProperty = require('./_create-property')
+  , getIterFn      = require('./core.get-iterator-method');
+
+$export($export.S + $export.F * !require('./_iter-detect')(function(iter){ Array.from(iter); }), 'Array', {
+  // 22.1.2.1 Array.from(arrayLike, mapfn = undefined, thisArg = undefined)
+  from: function from(arrayLike/*, mapfn = undefined, thisArg = undefined*/){
+    var O       = toObject(arrayLike)
+      , C       = typeof this == 'function' ? this : Array
+      , aLen    = arguments.length
+      , mapfn   = aLen > 1 ? arguments[1] : undefined
+      , mapping = mapfn !== undefined
+      , index   = 0
+      , iterFn  = getIterFn(O)
+      , length, result, step, iterator;
+    if(mapping)mapfn = ctx(mapfn, aLen > 2 ? arguments[2] : undefined, 2);
+    // if object isn't iterable or it's array with default iterator - use simple case
+    if(iterFn != undefined && !(C == Array && isArrayIter(iterFn))){
+      for(iterator = iterFn.call(O), result = new C; !(step = iterator.next()).done; index++){
+        createProperty(result, index, mapping ? call(iterator, mapfn, [step.value, index], true) : step.value);
+      }
+    } else {
+      length = toLength(O.length);
+      for(result = new C(length); length > index; index++){
+        createProperty(result, index, mapping ? mapfn(O[index], index) : O[index]);
+      }
+    }
+    result.length = index;
+    return result;
+  }
+});
+
+},{"./_create-property":25,"./_ctx":26,"./_export":33,"./_is-array-iter":47,"./_iter-call":52,"./_iter-detect":55,"./_to-length":109,"./_to-object":110,"./core.get-iterator-method":119}],130:[function(require,module,exports){
+'use strict';
+var $export       = require('./_export')
+  , $indexOf      = require('./_array-includes')(false)
+  , $native       = [].indexOf
+  , NEGATIVE_ZERO = !!$native && 1 / [1].indexOf(1, -0) < 0;
+
+$export($export.P + $export.F * (NEGATIVE_ZERO || !require('./_strict-method')($native)), 'Array', {
+  // 22.1.3.11 / 15.4.4.14 Array.prototype.indexOf(searchElement [, fromIndex])
+  indexOf: function indexOf(searchElement /*, fromIndex = 0 */){
+    return NEGATIVE_ZERO
+      // convert -0 to +0
+      ? $native.apply(this, arguments) || 0
+      : $indexOf(this, searchElement, arguments[1]);
+  }
+});
+},{"./_array-includes":12,"./_export":33,"./_strict-method":97}],131:[function(require,module,exports){
+// 22.1.2.2 / 15.4.3.2 Array.isArray(arg)
+var $export = require('./_export');
+
+$export($export.S, 'Array', {isArray: require('./_is-array')});
+},{"./_export":33,"./_is-array":48}],132:[function(require,module,exports){
+'use strict';
+var addToUnscopables = require('./_add-to-unscopables')
+  , step             = require('./_iter-step')
+  , Iterators        = require('./_iterators')
+  , toIObject        = require('./_to-iobject');
+
+// 22.1.3.4 Array.prototype.entries()
+// 22.1.3.13 Array.prototype.keys()
+// 22.1.3.29 Array.prototype.values()
+// 22.1.3.30 Array.prototype[@@iterator]()
+module.exports = require('./_iter-define')(Array, 'Array', function(iterated, kind){
+  this._t = toIObject(iterated); // target
+  this._i = 0;                   // next index
+  this._k = kind;                // kind
+// 22.1.5.2.1 %ArrayIteratorPrototype%.next()
+}, function(){
+  var O     = this._t
+    , kind  = this._k
+    , index = this._i++;
+  if(!O || index >= O.length){
+    this._t = undefined;
+    return step(1);
+  }
+  if(kind == 'keys'  )return step(0, index);
+  if(kind == 'values')return step(0, O[index]);
+  return step(0, [index, O[index]]);
+}, 'values');
+
+// argumentsList[@@iterator] is %ArrayProto_values% (9.4.4.6, 9.4.4.7)
+Iterators.Arguments = Iterators.Array;
+
+addToUnscopables('keys');
+addToUnscopables('values');
+addToUnscopables('entries');
+},{"./_add-to-unscopables":6,"./_iter-define":54,"./_iter-step":56,"./_iterators":57,"./_to-iobject":108}],133:[function(require,module,exports){
+'use strict';
+// 22.1.3.13 Array.prototype.join(separator)
+var $export   = require('./_export')
+  , toIObject = require('./_to-iobject')
+  , arrayJoin = [].join;
+
+// fallback for not array-like strings
+$export($export.P + $export.F * (require('./_iobject') != Object || !require('./_strict-method')(arrayJoin)), 'Array', {
+  join: function join(separator){
+    return arrayJoin.call(toIObject(this), separator === undefined ? ',' : separator);
+  }
+});
+},{"./_export":33,"./_iobject":46,"./_strict-method":97,"./_to-iobject":108}],134:[function(require,module,exports){
+'use strict';
+var $export       = require('./_export')
+  , toIObject     = require('./_to-iobject')
+  , toInteger     = require('./_to-integer')
+  , toLength      = require('./_to-length')
+  , $native       = [].lastIndexOf
+  , NEGATIVE_ZERO = !!$native && 1 / [1].lastIndexOf(1, -0) < 0;
+
+$export($export.P + $export.F * (NEGATIVE_ZERO || !require('./_strict-method')($native)), 'Array', {
+  // 22.1.3.14 / 15.4.4.15 Array.prototype.lastIndexOf(searchElement [, fromIndex])
+  lastIndexOf: function lastIndexOf(searchElement /*, fromIndex = @[*-1] */){
+    // convert -0 to +0
+    if(NEGATIVE_ZERO)return $native.apply(this, arguments) || 0;
+    var O      = toIObject(this)
+      , length = toLength(O.length)
+      , index  = length - 1;
+    if(arguments.length > 1)index = Math.min(index, toInteger(arguments[1]));
+    if(index < 0)index = length + index;
+    for(;index >= 0; index--)if(index in O)if(O[index] === searchElement)return index || 0;
+    return -1;
+  }
+});
+},{"./_export":33,"./_strict-method":97,"./_to-integer":107,"./_to-iobject":108,"./_to-length":109}],135:[function(require,module,exports){
+'use strict';
+var $export = require('./_export')
+  , $map    = require('./_array-methods')(1);
+
+$export($export.P + $export.F * !require('./_strict-method')([].map, true), 'Array', {
+  // 22.1.3.15 / 15.4.4.19 Array.prototype.map(callbackfn [, thisArg])
+  map: function map(callbackfn /* , thisArg */){
+    return $map(this, callbackfn, arguments[1]);
+  }
+});
+},{"./_array-methods":13,"./_export":33,"./_strict-method":97}],136:[function(require,module,exports){
+'use strict';
+var $export        = require('./_export')
+  , createProperty = require('./_create-property');
+
+// WebKit Array.of isn't generic
+$export($export.S + $export.F * require('./_fails')(function(){
+  function F(){}
+  return !(Array.of.call(F) instanceof F);
+}), 'Array', {
+  // 22.1.2.3 Array.of( ...items)
+  of: function of(/* ...args */){
+    var index  = 0
+      , aLen   = arguments.length
+      , result = new (typeof this == 'function' ? this : Array)(aLen);
+    while(aLen > index)createProperty(result, index, arguments[index++]);
+    result.length = aLen;
+    return result;
+  }
+});
+},{"./_create-property":25,"./_export":33,"./_fails":35}],137:[function(require,module,exports){
+'use strict';
+var $export = require('./_export')
+  , $reduce = require('./_array-reduce');
+
+$export($export.P + $export.F * !require('./_strict-method')([].reduceRight, true), 'Array', {
+  // 22.1.3.19 / 15.4.4.22 Array.prototype.reduceRight(callbackfn [, initialValue])
+  reduceRight: function reduceRight(callbackfn /* , initialValue */){
+    return $reduce(this, callbackfn, arguments.length, arguments[1], true);
+  }
+});
+},{"./_array-reduce":14,"./_export":33,"./_strict-method":97}],138:[function(require,module,exports){
+'use strict';
+var $export = require('./_export')
+  , $reduce = require('./_array-reduce');
+
+$export($export.P + $export.F * !require('./_strict-method')([].reduce, true), 'Array', {
+  // 22.1.3.18 / 15.4.4.21 Array.prototype.reduce(callbackfn [, initialValue])
+  reduce: function reduce(callbackfn /* , initialValue */){
+    return $reduce(this, callbackfn, arguments.length, arguments[1], false);
+  }
+});
+},{"./_array-reduce":14,"./_export":33,"./_strict-method":97}],139:[function(require,module,exports){
+'use strict';
+var $export    = require('./_export')
+  , html       = require('./_html')
+  , cof        = require('./_cof')
+  , toIndex    = require('./_to-index')
+  , toLength   = require('./_to-length')
+  , arraySlice = [].slice;
+
+// fallback for not array-like ES3 strings and DOM objects
+$export($export.P + $export.F * require('./_fails')(function(){
+  if(html)arraySlice.call(html);
+}), 'Array', {
+  slice: function slice(begin, end){
+    var len   = toLength(this.length)
+      , klass = cof(this);
+    end = end === undefined ? len : end;
+    if(klass == 'Array')return arraySlice.call(this, begin, end);
+    var start  = toIndex(begin, len)
+      , upTo   = toIndex(end, len)
+      , size   = toLength(upTo - start)
+      , cloned = Array(size)
+      , i      = 0;
+    for(; i < size; i++)cloned[i] = klass == 'String'
+      ? this.charAt(start + i)
+      : this[start + i];
+    return cloned;
+  }
+});
+},{"./_cof":19,"./_export":33,"./_fails":35,"./_html":42,"./_to-index":106,"./_to-length":109}],140:[function(require,module,exports){
+'use strict';
+var $export = require('./_export')
+  , $some   = require('./_array-methods')(3);
+
+$export($export.P + $export.F * !require('./_strict-method')([].some, true), 'Array', {
+  // 22.1.3.23 / 15.4.4.17 Array.prototype.some(callbackfn [, thisArg])
+  some: function some(callbackfn /* , thisArg */){
+    return $some(this, callbackfn, arguments[1]);
+  }
+});
+},{"./_array-methods":13,"./_export":33,"./_strict-method":97}],141:[function(require,module,exports){
+'use strict';
+var $export   = require('./_export')
+  , aFunction = require('./_a-function')
+  , toObject  = require('./_to-object')
+  , fails     = require('./_fails')
+  , $sort     = [].sort
+  , test      = [1, 2, 3];
+
+$export($export.P + $export.F * (fails(function(){
+  // IE8-
+  test.sort(undefined);
+}) || !fails(function(){
+  // V8 bug
+  test.sort(null);
+  // Old WebKit
+}) || !require('./_strict-method')($sort)), 'Array', {
+  // 22.1.3.25 Array.prototype.sort(comparefn)
+  sort: function sort(comparefn){
+    return comparefn === undefined
+      ? $sort.call(toObject(this))
+      : $sort.call(toObject(this), aFunction(comparefn));
+  }
+});
+},{"./_a-function":4,"./_export":33,"./_fails":35,"./_strict-method":97,"./_to-object":110}],142:[function(require,module,exports){
+require('./_set-species')('Array');
+},{"./_set-species":92}],143:[function(require,module,exports){
+// 20.3.3.1 / 15.9.4.4 Date.now()
+var $export = require('./_export');
+
+$export($export.S, 'Date', {now: function(){ return new Date().getTime(); }});
+},{"./_export":33}],144:[function(require,module,exports){
+'use strict';
+// 20.3.4.36 / 15.9.5.43 Date.prototype.toISOString()
+var $export = require('./_export')
+  , fails   = require('./_fails')
+  , getTime = Date.prototype.getTime;
+
+var lz = function(num){
+  return num > 9 ? num : '0' + num;
+};
+
+// PhantomJS / old WebKit has a broken implementations
+$export($export.P + $export.F * (fails(function(){
+  return new Date(-5e13 - 1).toISOString() != '0385-07-25T07:06:39.999Z';
+}) || !fails(function(){
+  new Date(NaN).toISOString();
+})), 'Date', {
+  toISOString: function toISOString(){
+    if(!isFinite(getTime.call(this)))throw RangeError('Invalid time value');
+    var d = this
+      , y = d.getUTCFullYear()
+      , m = d.getUTCMilliseconds()
+      , s = y < 0 ? '-' : y > 9999 ? '+' : '';
+    return s + ('00000' + Math.abs(y)).slice(s ? -6 : -4) +
+      '-' + lz(d.getUTCMonth() + 1) + '-' + lz(d.getUTCDate()) +
+      'T' + lz(d.getUTCHours()) + ':' + lz(d.getUTCMinutes()) +
+      ':' + lz(d.getUTCSeconds()) + '.' + (m > 99 ? m : '0' + lz(m)) + 'Z';
+  }
+});
+},{"./_export":33,"./_fails":35}],145:[function(require,module,exports){
+'use strict';
+var $export     = require('./_export')
+  , toObject    = require('./_to-object')
+  , toPrimitive = require('./_to-primitive');
+
+$export($export.P + $export.F * require('./_fails')(function(){
+  return new Date(NaN).toJSON() !== null || Date.prototype.toJSON.call({toISOString: function(){ return 1; }}) !== 1;
+}), 'Date', {
+  toJSON: function toJSON(key){
+    var O  = toObject(this)
+      , pv = toPrimitive(O);
+    return typeof pv == 'number' && !isFinite(pv) ? null : O.toISOString();
+  }
+});
+},{"./_export":33,"./_fails":35,"./_to-object":110,"./_to-primitive":111}],146:[function(require,module,exports){
+var TO_PRIMITIVE = require('./_wks')('toPrimitive')
+  , proto        = Date.prototype;
+
+if(!(TO_PRIMITIVE in proto))require('./_hide')(proto, TO_PRIMITIVE, require('./_date-to-primitive'));
+},{"./_date-to-primitive":27,"./_hide":41,"./_wks":118}],147:[function(require,module,exports){
+var DateProto    = Date.prototype
+  , INVALID_DATE = 'Invalid Date'
+  , TO_STRING    = 'toString'
+  , $toString    = DateProto[TO_STRING]
+  , getTime      = DateProto.getTime;
+if(new Date(NaN) + '' != INVALID_DATE){
+  require('./_redefine')(DateProto, TO_STRING, function toString(){
+    var value = getTime.call(this);
+    return value === value ? $toString.call(this) : INVALID_DATE;
+  });
+}
+},{"./_redefine":88}],148:[function(require,module,exports){
+// 19.2.3.2 / 15.3.4.5 Function.prototype.bind(thisArg, args...)
+var $export = require('./_export');
+
+$export($export.P, 'Function', {bind: require('./_bind')});
+},{"./_bind":17,"./_export":33}],149:[function(require,module,exports){
+'use strict';
+var isObject       = require('./_is-object')
+  , getPrototypeOf = require('./_object-gpo')
+  , HAS_INSTANCE   = require('./_wks')('hasInstance')
+  , FunctionProto  = Function.prototype;
+// 19.2.3.6 Function.prototype[@@hasInstance](V)
+if(!(HAS_INSTANCE in FunctionProto))require('./_object-dp').f(FunctionProto, HAS_INSTANCE, {value: function(O){
+  if(typeof this != 'function' || !isObject(O))return false;
+  if(!isObject(this.prototype))return O instanceof this;
+  // for environment w/o native `@@hasInstance` logic enough `instanceof`, but add this:
+  while(O = getPrototypeOf(O))if(this.prototype === O)return true;
+  return false;
+}});
+},{"./_is-object":50,"./_object-dp":68,"./_object-gpo":75,"./_wks":118}],150:[function(require,module,exports){
+var dP         = require('./_object-dp').f
+  , createDesc = require('./_property-desc')
+  , has        = require('./_has')
+  , FProto     = Function.prototype
+  , nameRE     = /^\s*function ([^ (]*)/
+  , NAME       = 'name';
+
+var isExtensible = Object.isExtensible || function(){
+  return true;
+};
+
+// 19.2.4.2 name
+NAME in FProto || require('./_descriptors') && dP(FProto, NAME, {
+  configurable: true,
+  get: function(){
+    try {
+      var that = this
+        , name = ('' + that).match(nameRE)[1];
+      has(that, NAME) || !isExtensible(that) || dP(that, NAME, createDesc(5, name));
+      return name;
+    } catch(e){
+      return '';
+    }
+  }
+});
+},{"./_descriptors":29,"./_has":40,"./_object-dp":68,"./_property-desc":86}],151:[function(require,module,exports){
+'use strict';
+var strong = require('./_collection-strong');
+
+// 23.1 Map Objects
+module.exports = require('./_collection')('Map', function(get){
+  return function Map(){ return get(this, arguments.length > 0 ? arguments[0] : undefined); };
+}, {
+  // 23.1.3.6 Map.prototype.get(key)
+  get: function get(key){
+    var entry = strong.getEntry(this, key);
+    return entry && entry.v;
+  },
+  // 23.1.3.9 Map.prototype.set(key, value)
+  set: function set(key, value){
+    return strong.def(this, key === 0 ? 0 : key, value);
+  }
+}, strong, true);
+},{"./_collection":23,"./_collection-strong":20}],152:[function(require,module,exports){
+// 20.2.2.3 Math.acosh(x)
+var $export = require('./_export')
+  , log1p   = require('./_math-log1p')
+  , sqrt    = Math.sqrt
+  , $acosh  = Math.acosh;
+
+$export($export.S + $export.F * !($acosh
+  // V8 bug: https://code.google.com/p/v8/issues/detail?id=3509
+  && Math.floor($acosh(Number.MAX_VALUE)) == 710
+  // Tor Browser bug: Math.acosh(Infinity) -> NaN 
+  && $acosh(Infinity) == Infinity
+), 'Math', {
+  acosh: function acosh(x){
+    return (x = +x) < 1 ? NaN : x > 94906265.62425156
+      ? Math.log(x) + Math.LN2
+      : log1p(x - 1 + sqrt(x - 1) * sqrt(x + 1));
+  }
+});
+},{"./_export":33,"./_math-log1p":61}],153:[function(require,module,exports){
+// 20.2.2.5 Math.asinh(x)
+var $export = require('./_export')
+  , $asinh  = Math.asinh;
+
+function asinh(x){
+  return !isFinite(x = +x) || x == 0 ? x : x < 0 ? -asinh(-x) : Math.log(x + Math.sqrt(x * x + 1));
+}
+
+// Tor Browser bug: Math.asinh(0) -> -0 
+$export($export.S + $export.F * !($asinh && 1 / $asinh(0) > 0), 'Math', {asinh: asinh});
+},{"./_export":33}],154:[function(require,module,exports){
+// 20.2.2.7 Math.atanh(x)
+var $export = require('./_export')
+  , $atanh  = Math.atanh;
+
+// Tor Browser bug: Math.atanh(-0) -> 0 
+$export($export.S + $export.F * !($atanh && 1 / $atanh(-0) < 0), 'Math', {
+  atanh: function atanh(x){
+    return (x = +x) == 0 ? x : Math.log((1 + x) / (1 - x)) / 2;
+  }
+});
+},{"./_export":33}],155:[function(require,module,exports){
+// 20.2.2.9 Math.cbrt(x)
+var $export = require('./_export')
+  , sign    = require('./_math-sign');
+
+$export($export.S, 'Math', {
+  cbrt: function cbrt(x){
+    return sign(x = +x) * Math.pow(Math.abs(x), 1 / 3);
+  }
+});
+},{"./_export":33,"./_math-sign":62}],156:[function(require,module,exports){
+// 20.2.2.11 Math.clz32(x)
+var $export = require('./_export');
+
+$export($export.S, 'Math', {
+  clz32: function clz32(x){
+    return (x >>>= 0) ? 31 - Math.floor(Math.log(x + 0.5) * Math.LOG2E) : 32;
+  }
+});
+},{"./_export":33}],157:[function(require,module,exports){
+// 20.2.2.12 Math.cosh(x)
+var $export = require('./_export')
+  , exp     = Math.exp;
+
+$export($export.S, 'Math', {
+  cosh: function cosh(x){
+    return (exp(x = +x) + exp(-x)) / 2;
+  }
+});
+},{"./_export":33}],158:[function(require,module,exports){
+// 20.2.2.14 Math.expm1(x)
+var $export = require('./_export')
+  , $expm1  = require('./_math-expm1');
+
+$export($export.S + $export.F * ($expm1 != Math.expm1), 'Math', {expm1: $expm1});
+},{"./_export":33,"./_math-expm1":60}],159:[function(require,module,exports){
+// 20.2.2.16 Math.fround(x)
+var $export   = require('./_export')
+  , sign      = require('./_math-sign')
+  , pow       = Math.pow
+  , EPSILON   = pow(2, -52)
+  , EPSILON32 = pow(2, -23)
+  , MAX32     = pow(2, 127) * (2 - EPSILON32)
+  , MIN32     = pow(2, -126);
+
+var roundTiesToEven = function(n){
+  return n + 1 / EPSILON - 1 / EPSILON;
+};
+
+
+$export($export.S, 'Math', {
+  fround: function fround(x){
+    var $abs  = Math.abs(x)
+      , $sign = sign(x)
+      , a, result;
+    if($abs < MIN32)return $sign * roundTiesToEven($abs / MIN32 / EPSILON32) * MIN32 * EPSILON32;
+    a = (1 + EPSILON32 / EPSILON) * $abs;
+    result = a - (a - $abs);
+    if(result > MAX32 || result != result)return $sign * Infinity;
+    return $sign * result;
+  }
+});
+},{"./_export":33,"./_math-sign":62}],160:[function(require,module,exports){
+// 20.2.2.17 Math.hypot([value1[, value2[, … ]]])
+var $export = require('./_export')
+  , abs     = Math.abs;
+
+$export($export.S, 'Math', {
+  hypot: function hypot(value1, value2){ // eslint-disable-line no-unused-vars
+    var sum  = 0
+      , i    = 0
+      , aLen = arguments.length
+      , larg = 0
+      , arg, div;
+    while(i < aLen){
+      arg = abs(arguments[i++]);
+      if(larg < arg){
+        div  = larg / arg;
+        sum  = sum * div * div + 1;
+        larg = arg;
+      } else if(arg > 0){
+        div  = arg / larg;
+        sum += div * div;
+      } else sum += arg;
+    }
+    return larg === Infinity ? Infinity : larg * Math.sqrt(sum);
+  }
+});
+},{"./_export":33}],161:[function(require,module,exports){
+// 20.2.2.18 Math.imul(x, y)
+var $export = require('./_export')
+  , $imul   = Math.imul;
+
+// some WebKit versions fails with big numbers, some has wrong arity
+$export($export.S + $export.F * require('./_fails')(function(){
+  return $imul(0xffffffff, 5) != -5 || $imul.length != 2;
+}), 'Math', {
+  imul: function imul(x, y){
+    var UINT16 = 0xffff
+      , xn = +x
+      , yn = +y
+      , xl = UINT16 & xn
+      , yl = UINT16 & yn;
+    return 0 | xl * yl + ((UINT16 & xn >>> 16) * yl + xl * (UINT16 & yn >>> 16) << 16 >>> 0);
+  }
+});
+},{"./_export":33,"./_fails":35}],162:[function(require,module,exports){
+// 20.2.2.21 Math.log10(x)
+var $export = require('./_export');
+
+$export($export.S, 'Math', {
+  log10: function log10(x){
+    return Math.log(x) / Math.LN10;
+  }
+});
+},{"./_export":33}],163:[function(require,module,exports){
+// 20.2.2.20 Math.log1p(x)
+var $export = require('./_export');
+
+$export($export.S, 'Math', {log1p: require('./_math-log1p')});
+},{"./_export":33,"./_math-log1p":61}],164:[function(require,module,exports){
+// 20.2.2.22 Math.log2(x)
+var $export = require('./_export');
+
+$export($export.S, 'Math', {
+  log2: function log2(x){
+    return Math.log(x) / Math.LN2;
+  }
+});
+},{"./_export":33}],165:[function(require,module,exports){
+// 20.2.2.28 Math.sign(x)
+var $export = require('./_export');
+
+$export($export.S, 'Math', {sign: require('./_math-sign')});
+},{"./_export":33,"./_math-sign":62}],166:[function(require,module,exports){
+// 20.2.2.30 Math.sinh(x)
+var $export = require('./_export')
+  , expm1   = require('./_math-expm1')
+  , exp     = Math.exp;
+
+// V8 near Chromium 38 has a problem with very small numbers
+$export($export.S + $export.F * require('./_fails')(function(){
+  return !Math.sinh(-2e-17) != -2e-17;
+}), 'Math', {
+  sinh: function sinh(x){
+    return Math.abs(x = +x) < 1
+      ? (expm1(x) - expm1(-x)) / 2
+      : (exp(x - 1) - exp(-x - 1)) * (Math.E / 2);
+  }
+});
+},{"./_export":33,"./_fails":35,"./_math-expm1":60}],167:[function(require,module,exports){
+// 20.2.2.33 Math.tanh(x)
+var $export = require('./_export')
+  , expm1   = require('./_math-expm1')
+  , exp     = Math.exp;
+
+$export($export.S, 'Math', {
+  tanh: function tanh(x){
+    var a = expm1(x = +x)
+      , b = expm1(-x);
+    return a == Infinity ? 1 : b == Infinity ? -1 : (a - b) / (exp(x) + exp(-x));
+  }
+});
+},{"./_export":33,"./_math-expm1":60}],168:[function(require,module,exports){
+// 20.2.2.34 Math.trunc(x)
+var $export = require('./_export');
+
+$export($export.S, 'Math', {
+  trunc: function trunc(it){
+    return (it > 0 ? Math.floor : Math.ceil)(it);
+  }
+});
+},{"./_export":33}],169:[function(require,module,exports){
+'use strict';
+var global            = require('./_global')
+  , has               = require('./_has')
+  , cof               = require('./_cof')
+  , inheritIfRequired = require('./_inherit-if-required')
+  , toPrimitive       = require('./_to-primitive')
+  , fails             = require('./_fails')
+  , gOPN              = require('./_object-gopn').f
+  , gOPD              = require('./_object-gopd').f
+  , dP                = require('./_object-dp').f
+  , $trim             = require('./_string-trim').trim
+  , NUMBER            = 'Number'
+  , $Number           = global[NUMBER]
+  , Base              = $Number
+  , proto             = $Number.prototype
+  // Opera ~12 has broken Object#toString
+  , BROKEN_COF        = cof(require('./_object-create')(proto)) == NUMBER
+  , TRIM              = 'trim' in String.prototype;
+
+// 7.1.3 ToNumber(argument)
+var toNumber = function(argument){
+  var it = toPrimitive(argument, false);
+  if(typeof it == 'string' && it.length > 2){
+    it = TRIM ? it.trim() : $trim(it, 3);
+    var first = it.charCodeAt(0)
+      , third, radix, maxCode;
+    if(first === 43 || first === 45){
+      third = it.charCodeAt(2);
+      if(third === 88 || third === 120)return NaN; // Number('+0x1') should be NaN, old V8 fix
+    } else if(first === 48){
+      switch(it.charCodeAt(1)){
+        case 66 : case 98  : radix = 2; maxCode = 49; break; // fast equal /^0b[01]+$/i
+        case 79 : case 111 : radix = 8; maxCode = 55; break; // fast equal /^0o[0-7]+$/i
+        default : return +it;
+      }
+      for(var digits = it.slice(2), i = 0, l = digits.length, code; i < l; i++){
+        code = digits.charCodeAt(i);
+        // parseInt parses a string to a first unavailable symbol
+        // but ToNumber should return NaN if a string contains unavailable symbols
+        if(code < 48 || code > maxCode)return NaN;
+      } return parseInt(digits, radix);
+    }
+  } return +it;
+};
+
+if(!$Number(' 0o1') || !$Number('0b1') || $Number('+0x1')){
+  $Number = function Number(value){
+    var it = arguments.length < 1 ? 0 : value
+      , that = this;
+    return that instanceof $Number
+      // check on 1..constructor(foo) case
+      && (BROKEN_COF ? fails(function(){ proto.valueOf.call(that); }) : cof(that) != NUMBER)
+        ? inheritIfRequired(new Base(toNumber(it)), that, $Number) : toNumber(it);
+  };
+  for(var keys = require('./_descriptors') ? gOPN(Base) : (
+    // ES3:
+    'MAX_VALUE,MIN_VALUE,NaN,NEGATIVE_INFINITY,POSITIVE_INFINITY,' +
+    // ES6 (in case, if modules with ES6 Number statics required before):
+    'EPSILON,isFinite,isInteger,isNaN,isSafeInteger,MAX_SAFE_INTEGER,' +
+    'MIN_SAFE_INTEGER,parseFloat,parseInt,isInteger'
+  ).split(','), j = 0, key; keys.length > j; j++){
+    if(has(Base, key = keys[j]) && !has($Number, key)){
+      dP($Number, key, gOPD(Base, key));
+    }
+  }
+  $Number.prototype = proto;
+  proto.constructor = $Number;
+  require('./_redefine')(global, NUMBER, $Number);
+}
+},{"./_cof":19,"./_descriptors":29,"./_fails":35,"./_global":39,"./_has":40,"./_inherit-if-required":44,"./_object-create":67,"./_object-dp":68,"./_object-gopd":71,"./_object-gopn":73,"./_redefine":88,"./_string-trim":103,"./_to-primitive":111}],170:[function(require,module,exports){
+// 20.1.2.1 Number.EPSILON
+var $export = require('./_export');
+
+$export($export.S, 'Number', {EPSILON: Math.pow(2, -52)});
+},{"./_export":33}],171:[function(require,module,exports){
+// 20.1.2.2 Number.isFinite(number)
+var $export   = require('./_export')
+  , _isFinite = require('./_global').isFinite;
+
+$export($export.S, 'Number', {
+  isFinite: function isFinite(it){
+    return typeof it == 'number' && _isFinite(it);
+  }
+});
+},{"./_export":33,"./_global":39}],172:[function(require,module,exports){
+// 20.1.2.3 Number.isInteger(number)
+var $export = require('./_export');
+
+$export($export.S, 'Number', {isInteger: require('./_is-integer')});
+},{"./_export":33,"./_is-integer":49}],173:[function(require,module,exports){
+// 20.1.2.4 Number.isNaN(number)
+var $export = require('./_export');
+
+$export($export.S, 'Number', {
+  isNaN: function isNaN(number){
+    return number != number;
+  }
+});
+},{"./_export":33}],174:[function(require,module,exports){
+// 20.1.2.5 Number.isSafeInteger(number)
+var $export   = require('./_export')
+  , isInteger = require('./_is-integer')
+  , abs       = Math.abs;
+
+$export($export.S, 'Number', {
+  isSafeInteger: function isSafeInteger(number){
+    return isInteger(number) && abs(number) <= 0x1fffffffffffff;
+  }
+});
+},{"./_export":33,"./_is-integer":49}],175:[function(require,module,exports){
+// 20.1.2.6 Number.MAX_SAFE_INTEGER
+var $export = require('./_export');
+
+$export($export.S, 'Number', {MAX_SAFE_INTEGER: 0x1fffffffffffff});
+},{"./_export":33}],176:[function(require,module,exports){
+// 20.1.2.10 Number.MIN_SAFE_INTEGER
+var $export = require('./_export');
+
+$export($export.S, 'Number', {MIN_SAFE_INTEGER: -0x1fffffffffffff});
+},{"./_export":33}],177:[function(require,module,exports){
+var $export     = require('./_export')
+  , $parseFloat = require('./_parse-float');
+// 20.1.2.12 Number.parseFloat(string)
+$export($export.S + $export.F * (Number.parseFloat != $parseFloat), 'Number', {parseFloat: $parseFloat});
+},{"./_export":33,"./_parse-float":82}],178:[function(require,module,exports){
+var $export   = require('./_export')
+  , $parseInt = require('./_parse-int');
+// 20.1.2.13 Number.parseInt(string, radix)
+$export($export.S + $export.F * (Number.parseInt != $parseInt), 'Number', {parseInt: $parseInt});
+},{"./_export":33,"./_parse-int":83}],179:[function(require,module,exports){
+'use strict';
+var $export      = require('./_export')
+  , anInstance   = require('./_an-instance')
+  , toInteger    = require('./_to-integer')
+  , aNumberValue = require('./_a-number-value')
+  , repeat       = require('./_string-repeat')
+  , $toFixed     = 1..toFixed
+  , floor        = Math.floor
+  , data         = [0, 0, 0, 0, 0, 0]
+  , ERROR        = 'Number.toFixed: incorrect invocation!'
+  , ZERO         = '0';
+
+var multiply = function(n, c){
+  var i  = -1
+    , c2 = c;
+  while(++i < 6){
+    c2 += n * data[i];
+    data[i] = c2 % 1e7;
+    c2 = floor(c2 / 1e7);
+  }
+};
+var divide = function(n){
+  var i = 6
+    , c = 0;
+  while(--i >= 0){
+    c += data[i];
+    data[i] = floor(c / n);
+    c = (c % n) * 1e7;
+  }
+};
+var numToString = function(){
+  var i = 6
+    , s = '';
+  while(--i >= 0){
+    if(s !== '' || i === 0 || data[i] !== 0){
+      var t = String(data[i]);
+      s = s === '' ? t : s + repeat.call(ZERO, 7 - t.length) + t;
+    }
+  } return s;
+};
+var pow = function(x, n, acc){
+  return n === 0 ? acc : n % 2 === 1 ? pow(x, n - 1, acc * x) : pow(x * x, n / 2, acc);
+};
+var log = function(x){
+  var n  = 0
+    , x2 = x;
+  while(x2 >= 4096){
+    n += 12;
+    x2 /= 4096;
+  }
+  while(x2 >= 2){
+    n  += 1;
+    x2 /= 2;
+  } return n;
+};
+
+$export($export.P + $export.F * (!!$toFixed && (
+  0.00008.toFixed(3) !== '0.000' ||
+  0.9.toFixed(0) !== '1' ||
+  1.255.toFixed(2) !== '1.25' ||
+  1000000000000000128..toFixed(0) !== '1000000000000000128'
+) || !require('./_fails')(function(){
+  // V8 ~ Android 4.3-
+  $toFixed.call({});
+})), 'Number', {
+  toFixed: function toFixed(fractionDigits){
+    var x = aNumberValue(this, ERROR)
+      , f = toInteger(fractionDigits)
+      , s = ''
+      , m = ZERO
+      , e, z, j, k;
+    if(f < 0 || f > 20)throw RangeError(ERROR);
+    if(x != x)return 'NaN';
+    if(x <= -1e21 || x >= 1e21)return String(x);
+    if(x < 0){
+      s = '-';
+      x = -x;
+    }
+    if(x > 1e-21){
+      e = log(x * pow(2, 69, 1)) - 69;
+      z = e < 0 ? x * pow(2, -e, 1) : x / pow(2, e, 1);
+      z *= 0x10000000000000;
+      e = 52 - e;
+      if(e > 0){
+        multiply(0, z);
+        j = f;
+        while(j >= 7){
+          multiply(1e7, 0);
+          j -= 7;
+        }
+        multiply(pow(10, j, 1), 0);
+        j = e - 1;
+        while(j >= 23){
+          divide(1 << 23);
+          j -= 23;
+        }
+        divide(1 << j);
+        multiply(1, 1);
+        divide(2);
+        m = numToString();
+      } else {
+        multiply(0, z);
+        multiply(1 << -e, 0);
+        m = numToString() + repeat.call(ZERO, f);
+      }
+    }
+    if(f > 0){
+      k = m.length;
+      m = s + (k <= f ? '0.' + repeat.call(ZERO, f - k) + m : m.slice(0, k - f) + '.' + m.slice(k - f));
+    } else {
+      m = s + m;
+    } return m;
+  }
+});
+},{"./_a-number-value":5,"./_an-instance":7,"./_export":33,"./_fails":35,"./_string-repeat":102,"./_to-integer":107}],180:[function(require,module,exports){
+'use strict';
+var $export      = require('./_export')
+  , $fails       = require('./_fails')
+  , aNumberValue = require('./_a-number-value')
+  , $toPrecision = 1..toPrecision;
+
+$export($export.P + $export.F * ($fails(function(){
+  // IE7-
+  return $toPrecision.call(1, undefined) !== '1';
+}) || !$fails(function(){
+  // V8 ~ Android 4.3-
+  $toPrecision.call({});
+})), 'Number', {
+  toPrecision: function toPrecision(precision){
+    var that = aNumberValue(this, 'Number#toPrecision: incorrect invocation!');
+    return precision === undefined ? $toPrecision.call(that) : $toPrecision.call(that, precision); 
+  }
+});
+},{"./_a-number-value":5,"./_export":33,"./_fails":35}],181:[function(require,module,exports){
+// 19.1.3.1 Object.assign(target, source)
+var $export = require('./_export');
+
+$export($export.S + $export.F, 'Object', {assign: require('./_object-assign')});
+},{"./_export":33,"./_object-assign":66}],182:[function(require,module,exports){
+var $export = require('./_export')
+// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])
+$export($export.S, 'Object', {create: require('./_object-create')});
+},{"./_export":33,"./_object-create":67}],183:[function(require,module,exports){
+var $export = require('./_export');
+// 19.1.2.3 / 15.2.3.7 Object.defineProperties(O, Properties)
+$export($export.S + $export.F * !require('./_descriptors'), 'Object', {defineProperties: require('./_object-dps')});
+},{"./_descriptors":29,"./_export":33,"./_object-dps":69}],184:[function(require,module,exports){
+var $export = require('./_export');
+// 19.1.2.4 / 15.2.3.6 Object.defineProperty(O, P, Attributes)
+$export($export.S + $export.F * !require('./_descriptors'), 'Object', {defineProperty: require('./_object-dp').f});
+},{"./_descriptors":29,"./_export":33,"./_object-dp":68}],185:[function(require,module,exports){
+// 19.1.2.5 Object.freeze(O)
+var isObject = require('./_is-object')
+  , meta     = require('./_meta').onFreeze;
+
+require('./_object-sap')('freeze', function($freeze){
+  return function freeze(it){
+    return $freeze && isObject(it) ? $freeze(meta(it)) : it;
+  };
+});
+},{"./_is-object":50,"./_meta":63,"./_object-sap":79}],186:[function(require,module,exports){
+// 19.1.2.6 Object.getOwnPropertyDescriptor(O, P)
+var toIObject                 = require('./_to-iobject')
+  , $getOwnPropertyDescriptor = require('./_object-gopd').f;
+
+require('./_object-sap')('getOwnPropertyDescriptor', function(){
+  return function getOwnPropertyDescriptor(it, key){
+    return $getOwnPropertyDescriptor(toIObject(it), key);
+  };
+});
+},{"./_object-gopd":71,"./_object-sap":79,"./_to-iobject":108}],187:[function(require,module,exports){
+// 19.1.2.7 Object.getOwnPropertyNames(O)
+require('./_object-sap')('getOwnPropertyNames', function(){
+  return require('./_object-gopn-ext').f;
+});
+},{"./_object-gopn-ext":72,"./_object-sap":79}],188:[function(require,module,exports){
+// 19.1.2.9 Object.getPrototypeOf(O)
+var toObject        = require('./_to-object')
+  , $getPrototypeOf = require('./_object-gpo');
+
+require('./_object-sap')('getPrototypeOf', function(){
+  return function getPrototypeOf(it){
+    return $getPrototypeOf(toObject(it));
+  };
+});
+},{"./_object-gpo":75,"./_object-sap":79,"./_to-object":110}],189:[function(require,module,exports){
+// 19.1.2.11 Object.isExtensible(O)
+var isObject = require('./_is-object');
+
+require('./_object-sap')('isExtensible', function($isExtensible){
+  return function isExtensible(it){
+    return isObject(it) ? $isExtensible ? $isExtensible(it) : true : false;
+  };
+});
+},{"./_is-object":50,"./_object-sap":79}],190:[function(require,module,exports){
+// 19.1.2.12 Object.isFrozen(O)
+var isObject = require('./_is-object');
+
+require('./_object-sap')('isFrozen', function($isFrozen){
+  return function isFrozen(it){
+    return isObject(it) ? $isFrozen ? $isFrozen(it) : false : true;
+  };
+});
+},{"./_is-object":50,"./_object-sap":79}],191:[function(require,module,exports){
+// 19.1.2.13 Object.isSealed(O)
+var isObject = require('./_is-object');
+
+require('./_object-sap')('isSealed', function($isSealed){
+  return function isSealed(it){
+    return isObject(it) ? $isSealed ? $isSealed(it) : false : true;
+  };
+});
+},{"./_is-object":50,"./_object-sap":79}],192:[function(require,module,exports){
+// 19.1.3.10 Object.is(value1, value2)
+var $export = require('./_export');
+$export($export.S, 'Object', {is: require('./_same-value')});
+},{"./_export":33,"./_same-value":90}],193:[function(require,module,exports){
+// 19.1.2.14 Object.keys(O)
+var toObject = require('./_to-object')
+  , $keys    = require('./_object-keys');
+
+require('./_object-sap')('keys', function(){
+  return function keys(it){
+    return $keys(toObject(it));
+  };
+});
+},{"./_object-keys":77,"./_object-sap":79,"./_to-object":110}],194:[function(require,module,exports){
+// 19.1.2.15 Object.preventExtensions(O)
+var isObject = require('./_is-object')
+  , meta     = require('./_meta').onFreeze;
+
+require('./_object-sap')('preventExtensions', function($preventExtensions){
+  return function preventExtensions(it){
+    return $preventExtensions && isObject(it) ? $preventExtensions(meta(it)) : it;
+  };
+});
+},{"./_is-object":50,"./_meta":63,"./_object-sap":79}],195:[function(require,module,exports){
+// 19.1.2.17 Object.seal(O)
+var isObject = require('./_is-object')
+  , meta     = require('./_meta').onFreeze;
+
+require('./_object-sap')('seal', function($seal){
+  return function seal(it){
+    return $seal && isObject(it) ? $seal(meta(it)) : it;
+  };
+});
+},{"./_is-object":50,"./_meta":63,"./_object-sap":79}],196:[function(require,module,exports){
+// 19.1.3.19 Object.setPrototypeOf(O, proto)
+var $export = require('./_export');
+$export($export.S, 'Object', {setPrototypeOf: require('./_set-proto').set});
+},{"./_export":33,"./_set-proto":91}],197:[function(require,module,exports){
+'use strict';
+// 19.1.3.6 Object.prototype.toString()
+var classof = require('./_classof')
+  , test    = {};
+test[require('./_wks')('toStringTag')] = 'z';
+if(test + '' != '[object z]'){
+  require('./_redefine')(Object.prototype, 'toString', function toString(){
+    return '[object ' + classof(this) + ']';
+  }, true);
+}
+},{"./_classof":18,"./_redefine":88,"./_wks":118}],198:[function(require,module,exports){
+var $export     = require('./_export')
+  , $parseFloat = require('./_parse-float');
+// 18.2.4 parseFloat(string)
+$export($export.G + $export.F * (parseFloat != $parseFloat), {parseFloat: $parseFloat});
+},{"./_export":33,"./_parse-float":82}],199:[function(require,module,exports){
+var $export   = require('./_export')
+  , $parseInt = require('./_parse-int');
+// 18.2.5 parseInt(string, radix)
+$export($export.G + $export.F * (parseInt != $parseInt), {parseInt: $parseInt});
+},{"./_export":33,"./_parse-int":83}],200:[function(require,module,exports){
+'use strict';
+var LIBRARY            = require('./_library')
+  , global             = require('./_global')
+  , ctx                = require('./_ctx')
+  , classof            = require('./_classof')
+  , $export            = require('./_export')
+  , isObject           = require('./_is-object')
+  , anObject           = require('./_an-object')
+  , aFunction          = require('./_a-function')
+  , anInstance         = require('./_an-instance')
+  , forOf              = require('./_for-of')
+  , setProto           = require('./_set-proto').set
+  , speciesConstructor = require('./_species-constructor')
+  , task               = require('./_task').set
+  , microtask          = require('./_microtask')()
+  , PROMISE            = 'Promise'
+  , TypeError          = global.TypeError
+  , process            = global.process
+  , $Promise           = global[PROMISE]
+  , process            = global.process
+  , isNode             = classof(process) == 'process'
+  , empty              = function(){ /* empty */ }
+  , Internal, GenericPromiseCapability, Wrapper;
+
+var USE_NATIVE = !!function(){
+  try {
+    // correct subclassing with @@species support
+    var promise     = $Promise.resolve(1)
+      , FakePromise = (promise.constructor = {})[require('./_wks')('species')] = function(exec){ exec(empty, empty); };
+    // unhandled rejections tracking support, NodeJS Promise without it fails @@species test
+    return (isNode || typeof PromiseRejectionEvent == 'function') && promise.then(empty) instanceof FakePromise;
+  } catch(e){ /* empty */ }
+}();
+
+// helpers
+var sameConstructor = function(a, b){
+  // with library wrapper special case
+  return a === b || a === $Promise && b === Wrapper;
+};
+var isThenable = function(it){
+  var then;
+  return isObject(it) && typeof (then = it.then) == 'function' ? then : false;
+};
+var newPromiseCapability = function(C){
+  return sameConstructor($Promise, C)
+    ? new PromiseCapability(C)
+    : new GenericPromiseCapability(C);
+};
+var PromiseCapability = GenericPromiseCapability = function(C){
+  var resolve, reject;
+  this.promise = new C(function($$resolve, $$reject){
+    if(resolve !== undefined || reject !== undefined)throw TypeError('Bad Promise constructor');
+    resolve = $$resolve;
+    reject  = $$reject;
+  });
+  this.resolve = aFunction(resolve);
+  this.reject  = aFunction(reject);
+};
+var perform = function(exec){
+  try {
+    exec();
+  } catch(e){
+    return {error: e};
+  }
+};
+var notify = function(promise, isReject){
+  if(promise._n)return;
+  promise._n = true;
+  var chain = promise._c;
+  microtask(function(){
+    var value = promise._v
+      , ok    = promise._s == 1
+      , i     = 0;
+    var run = function(reaction){
+      var handler = ok ? reaction.ok : reaction.fail
+        , resolve = reaction.resolve
+        , reject  = reaction.reject
+        , domain  = reaction.domain
+        , result, then;
+      try {
+        if(handler){
+          if(!ok){
+            if(promise._h == 2)onHandleUnhandled(promise);
+            promise._h = 1;
+          }
+          if(handler === true)result = value;
+          else {
+            if(domain)domain.enter();
+            result = handler(value);
+            if(domain)domain.exit();
+          }
+          if(result === reaction.promise){
+            reject(TypeError('Promise-chain cycle'));
+          } else if(then = isThenable(result)){
+            then.call(result, resolve, reject);
+          } else resolve(result);
+        } else reject(value);
+      } catch(e){
+        reject(e);
+      }
+    };
+    while(chain.length > i)run(chain[i++]); // variable length - can't use forEach
+    promise._c = [];
+    promise._n = false;
+    if(isReject && !promise._h)onUnhandled(promise);
+  });
+};
+var onUnhandled = function(promise){
+  task.call(global, function(){
+    var value = promise._v
+      , abrupt, handler, console;
+    if(isUnhandled(promise)){
+      abrupt = perform(function(){
+        if(isNode){
+          process.emit('unhandledRejection', value, promise);
+        } else if(handler = global.onunhandledrejection){
+          handler({promise: promise, reason: value});
+        } else if((console = global.console) && console.error){
+          console.error('Unhandled promise rejection', value);
+        }
+      });
+      // Browsers should not trigger `rejectionHandled` event if it was handled here, NodeJS - should
+      promise._h = isNode || isUnhandled(promise) ? 2 : 1;
+    } promise._a = undefined;
+    if(abrupt)throw abrupt.error;
+  });
+};
+var isUnhandled = function(promise){
+  if(promise._h == 1)return false;
+  var chain = promise._a || promise._c
+    , i     = 0
+    , reaction;
+  while(chain.length > i){
+    reaction = chain[i++];
+    if(reaction.fail || !isUnhandled(reaction.promise))return false;
+  } return true;
+};
+var onHandleUnhandled = function(promise){
+  task.call(global, function(){
+    var handler;
+    if(isNode){
+      process.emit('rejectionHandled', promise);
+    } else if(handler = global.onrejectionhandled){
+      handler({promise: promise, reason: promise._v});
+    }
+  });
+};
+var $reject = function(value){
+  var promise = this;
+  if(promise._d)return;
+  promise._d = true;
+  promise = promise._w || promise; // unwrap
+  promise._v = value;
+  promise._s = 2;
+  if(!promise._a)promise._a = promise._c.slice();
+  notify(promise, true);
+};
+var $resolve = function(value){
+  var promise = this
+    , then;
+  if(promise._d)return;
+  promise._d = true;
+  promise = promise._w || promise; // unwrap
+  try {
+    if(promise === value)throw TypeError("Promise can't be resolved itself");
+    if(then = isThenable(value)){
+      microtask(function(){
+        var wrapper = {_w: promise, _d: false}; // wrap
+        try {
+          then.call(value, ctx($resolve, wrapper, 1), ctx($reject, wrapper, 1));
+        } catch(e){
+          $reject.call(wrapper, e);
+        }
+      });
+    } else {
+      promise._v = value;
+      promise._s = 1;
+      notify(promise, false);
+    }
+  } catch(e){
+    $reject.call({_w: promise, _d: false}, e); // wrap
+  }
+};
+
+// constructor polyfill
+if(!USE_NATIVE){
+  // 25.4.3.1 Promise(executor)
+  $Promise = function Promise(executor){
+    anInstance(this, $Promise, PROMISE, '_h');
+    aFunction(executor);
+    Internal.call(this);
+    try {
+      executor(ctx($resolve, this, 1), ctx($reject, this, 1));
+    } catch(err){
+      $reject.call(this, err);
+    }
+  };
+  Internal = function Promise(executor){
+    this._c = [];             // <- awaiting reactions
+    this._a = undefined;      // <- checked in isUnhandled reactions
+    this._s = 0;              // <- state
+    this._d = false;          // <- done
+    this._v = undefined;      // <- value
+    this._h = 0;              // <- rejection state, 0 - default, 1 - handled, 2 - unhandled
+    this._n = false;          // <- notify
+  };
+  Internal.prototype = require('./_redefine-all')($Promise.prototype, {
+    // 25.4.5.3 Promise.prototype.then(onFulfilled, onRejected)
+    then: function then(onFulfilled, onRejected){
+      var reaction    = newPromiseCapability(speciesConstructor(this, $Promise));
+      reaction.ok     = typeof onFulfilled == 'function' ? onFulfilled : true;
+      reaction.fail   = typeof onRejected == 'function' && onRejected;
+      reaction.domain = isNode ? process.domain : undefined;
+      this._c.push(reaction);
+      if(this._a)this._a.push(reaction);
+      if(this._s)notify(this, false);
+      return reaction.promise;
+    },
+    // 25.4.5.1 Promise.prototype.catch(onRejected)
+    'catch': function(onRejected){
+      return this.then(undefined, onRejected);
+    }
+  });
+  PromiseCapability = function(){
+    var promise  = new Internal;
+    this.promise = promise;
+    this.resolve = ctx($resolve, promise, 1);
+    this.reject  = ctx($reject, promise, 1);
+  };
+}
+
+$export($export.G + $export.W + $export.F * !USE_NATIVE, {Promise: $Promise});
+require('./_set-to-string-tag')($Promise, PROMISE);
+require('./_set-species')(PROMISE);
+Wrapper = require('./_core')[PROMISE];
+
+// statics
+$export($export.S + $export.F * !USE_NATIVE, PROMISE, {
+  // 25.4.4.5 Promise.reject(r)
+  reject: function reject(r){
+    var capability = newPromiseCapability(this)
+      , $$reject   = capability.reject;
+    $$reject(r);
+    return capability.promise;
+  }
+});
+$export($export.S + $export.F * (LIBRARY || !USE_NATIVE), PROMISE, {
+  // 25.4.4.6 Promise.resolve(x)
+  resolve: function resolve(x){
+    // instanceof instead of internal slot check because we should fix it without replacement native Promise core
+    if(x instanceof $Promise && sameConstructor(x.constructor, this))return x;
+    var capability = newPromiseCapability(this)
+      , $$resolve  = capability.resolve;
+    $$resolve(x);
+    return capability.promise;
+  }
+});
+$export($export.S + $export.F * !(USE_NATIVE && require('./_iter-detect')(function(iter){
+  $Promise.all(iter)['catch'](empty);
+})), PROMISE, {
+  // 25.4.4.1 Promise.all(iterable)
+  all: function all(iterable){
+    var C          = this
+      , capability = newPromiseCapability(C)
+      , resolve    = capability.resolve
+      , reject     = capability.reject;
+    var abrupt = perform(function(){
+      var values    = []
+        , index     = 0
+        , remaining = 1;
+      forOf(iterable, false, function(promise){
+        var $index        = index++
+          , alreadyCalled = false;
+        values.push(undefined);
+        remaining++;
+        C.resolve(promise).then(function(value){
+          if(alreadyCalled)return;
+          alreadyCalled  = true;
+          values[$index] = value;
+          --remaining || resolve(values);
+        }, reject);
+      });
+      --remaining || resolve(values);
+    });
+    if(abrupt)reject(abrupt.error);
+    return capability.promise;
+  },
+  // 25.4.4.4 Promise.race(iterable)
+  race: function race(iterable){
+    var C          = this
+      , capability = newPromiseCapability(C)
+      , reject     = capability.reject;
+    var abrupt = perform(function(){
+      forOf(iterable, false, function(promise){
+        C.resolve(promise).then(capability.resolve, reject);
+      });
+    });
+    if(abrupt)reject(abrupt.error);
+    return capability.promise;
+  }
+});
+},{"./_a-function":4,"./_an-instance":7,"./_an-object":8,"./_classof":18,"./_core":24,"./_ctx":26,"./_export":33,"./_for-of":38,"./_global":39,"./_is-object":50,"./_iter-detect":55,"./_library":59,"./_microtask":65,"./_redefine-all":87,"./_set-proto":91,"./_set-species":92,"./_set-to-string-tag":93,"./_species-constructor":96,"./_task":105,"./_wks":118}],201:[function(require,module,exports){
+// 26.1.1 Reflect.apply(target, thisArgument, argumentsList)
+var $export   = require('./_export')
+  , aFunction = require('./_a-function')
+  , anObject  = require('./_an-object')
+  , _apply    = Function.apply;
+
+$export($export.S, 'Reflect', {
+  apply: function apply(target, thisArgument, argumentsList){
+    return _apply.call(aFunction(target), thisArgument, anObject(argumentsList));
+  }
+});
+},{"./_a-function":4,"./_an-object":8,"./_export":33}],202:[function(require,module,exports){
+// 26.1.2 Reflect.construct(target, argumentsList [, newTarget])
+var $export   = require('./_export')
+  , create    = require('./_object-create')
+  , aFunction = require('./_a-function')
+  , anObject  = require('./_an-object')
+  , isObject  = require('./_is-object')
+  , bind      = require('./_bind');
+
+// MS Edge supports only 2 arguments
+// FF Nightly sets third argument as `new.target`, but does not create `this` from it
+$export($export.S + $export.F * require('./_fails')(function(){
+  function F(){}
+  return !(Reflect.construct(function(){}, [], F) instanceof F);
+}), 'Reflect', {
+  construct: function construct(Target, args /*, newTarget*/){
+    aFunction(Target);
+    anObject(args);
+    var newTarget = arguments.length < 3 ? Target : aFunction(arguments[2]);
+    if(Target == newTarget){
+      // w/o altered newTarget, optimization for 0-4 arguments
+      switch(args.length){
+        case 0: return new Target;
+        case 1: return new Target(args[0]);
+        case 2: return new Target(args[0], args[1]);
+        case 3: return new Target(args[0], args[1], args[2]);
+        case 4: return new Target(args[0], args[1], args[2], args[3]);
+      }
+      // w/o altered newTarget, lot of arguments case
+      var $args = [null];
+      $args.push.apply($args, args);
+      return new (bind.apply(Target, $args));
+    }
+    // with altered newTarget, not support built-in constructors
+    var proto    = newTarget.prototype
+      , instance = create(isObject(proto) ? proto : Object.prototype)
+      , result   = Function.apply.call(Target, instance, args);
+    return isObject(result) ? result : instance;
+  }
+});
+},{"./_a-function":4,"./_an-object":8,"./_bind":17,"./_export":33,"./_fails":35,"./_is-object":50,"./_object-create":67}],203:[function(require,module,exports){
+// 26.1.3 Reflect.defineProperty(target, propertyKey, attributes)
+var dP          = require('./_object-dp')
+  , $export     = require('./_export')
+  , anObject    = require('./_an-object')
+  , toPrimitive = require('./_to-primitive');
+
+// MS Edge has broken Reflect.defineProperty - throwing instead of returning false
+$export($export.S + $export.F * require('./_fails')(function(){
+  Reflect.defineProperty(dP.f({}, 1, {value: 1}), 1, {value: 2});
+}), 'Reflect', {
+  defineProperty: function defineProperty(target, propertyKey, attributes){
+    anObject(target);
+    propertyKey = toPrimitive(propertyKey, true);
+    anObject(attributes);
+    try {
+      dP.f(target, propertyKey, attributes);
+      return true;
+    } catch(e){
+      return false;
+    }
+  }
+});
+},{"./_an-object":8,"./_export":33,"./_fails":35,"./_object-dp":68,"./_to-primitive":111}],204:[function(require,module,exports){
+// 26.1.4 Reflect.deleteProperty(target, propertyKey)
+var $export  = require('./_export')
+  , gOPD     = require('./_object-gopd').f
+  , anObject = require('./_an-object');
+
+$export($export.S, 'Reflect', {
+  deleteProperty: function deleteProperty(target, propertyKey){
+    var desc = gOPD(anObject(target), propertyKey);
+    return desc && !desc.configurable ? false : delete target[propertyKey];
+  }
+});
+},{"./_an-object":8,"./_export":33,"./_object-gopd":71}],205:[function(require,module,exports){
+'use strict';
+// 26.1.5 Reflect.enumerate(target)
+var $export  = require('./_export')
+  , anObject = require('./_an-object');
+var Enumerate = function(iterated){
+  this._t = anObject(iterated); // target
+  this._i = 0;                  // next index
+  var keys = this._k = []       // keys
+    , key;
+  for(key in iterated)keys.push(key);
+};
+require('./_iter-create')(Enumerate, 'Object', function(){
+  var that = this
+    , keys = that._k
+    , key;
+  do {
+    if(that._i >= keys.length)return {value: undefined, done: true};
+  } while(!((key = keys[that._i++]) in that._t));
+  return {value: key, done: false};
+});
+
+$export($export.S, 'Reflect', {
+  enumerate: function enumerate(target){
+    return new Enumerate(target);
+  }
+});
+},{"./_an-object":8,"./_export":33,"./_iter-create":53}],206:[function(require,module,exports){
+// 26.1.7 Reflect.getOwnPropertyDescriptor(target, propertyKey)
+var gOPD     = require('./_object-gopd')
+  , $export  = require('./_export')
+  , anObject = require('./_an-object');
+
+$export($export.S, 'Reflect', {
+  getOwnPropertyDescriptor: function getOwnPropertyDescriptor(target, propertyKey){
+    return gOPD.f(anObject(target), propertyKey);
+  }
+});
+},{"./_an-object":8,"./_export":33,"./_object-gopd":71}],207:[function(require,module,exports){
+// 26.1.8 Reflect.getPrototypeOf(target)
+var $export  = require('./_export')
+  , getProto = require('./_object-gpo')
+  , anObject = require('./_an-object');
+
+$export($export.S, 'Reflect', {
+  getPrototypeOf: function getPrototypeOf(target){
+    return getProto(anObject(target));
+  }
+});
+},{"./_an-object":8,"./_export":33,"./_object-gpo":75}],208:[function(require,module,exports){
+// 26.1.6 Reflect.get(target, propertyKey [, receiver])
+var gOPD           = require('./_object-gopd')
+  , getPrototypeOf = require('./_object-gpo')
+  , has            = require('./_has')
+  , $export        = require('./_export')
+  , isObject       = require('./_is-object')
+  , anObject       = require('./_an-object');
+
+function get(target, propertyKey/*, receiver*/){
+  var receiver = arguments.length < 3 ? target : arguments[2]
+    , desc, proto;
+  if(anObject(target) === receiver)return target[propertyKey];
+  if(desc = gOPD.f(target, propertyKey))return has(desc, 'value')
+    ? desc.value
+    : desc.get !== undefined
+      ? desc.get.call(receiver)
+      : undefined;
+  if(isObject(proto = getPrototypeOf(target)))return get(proto, propertyKey, receiver);
+}
+
+$export($export.S, 'Reflect', {get: get});
+},{"./_an-object":8,"./_export":33,"./_has":40,"./_is-object":50,"./_object-gopd":71,"./_object-gpo":75}],209:[function(require,module,exports){
+// 26.1.9 Reflect.has(target, propertyKey)
+var $export = require('./_export');
+
+$export($export.S, 'Reflect', {
+  has: function has(target, propertyKey){
+    return propertyKey in target;
+  }
+});
+},{"./_export":33}],210:[function(require,module,exports){
+// 26.1.10 Reflect.isExtensible(target)
+var $export       = require('./_export')
+  , anObject      = require('./_an-object')
+  , $isExtensible = Object.isExtensible;
+
+$export($export.S, 'Reflect', {
+  isExtensible: function isExtensible(target){
+    anObject(target);
+    return $isExtensible ? $isExtensible(target) : true;
+  }
+});
+},{"./_an-object":8,"./_export":33}],211:[function(require,module,exports){
+// 26.1.11 Reflect.ownKeys(target)
+var $export = require('./_export');
+
+$export($export.S, 'Reflect', {ownKeys: require('./_own-keys')});
+},{"./_export":33,"./_own-keys":81}],212:[function(require,module,exports){
+// 26.1.12 Reflect.preventExtensions(target)
+var $export            = require('./_export')
+  , anObject           = require('./_an-object')
+  , $preventExtensions = Object.preventExtensions;
+
+$export($export.S, 'Reflect', {
+  preventExtensions: function preventExtensions(target){
+    anObject(target);
+    try {
+      if($preventExtensions)$preventExtensions(target);
+      return true;
+    } catch(e){
+      return false;
+    }
+  }
+});
+},{"./_an-object":8,"./_export":33}],213:[function(require,module,exports){
+// 26.1.14 Reflect.setPrototypeOf(target, proto)
+var $export  = require('./_export')
+  , setProto = require('./_set-proto');
+
+if(setProto)$export($export.S, 'Reflect', {
+  setPrototypeOf: function setPrototypeOf(target, proto){
+    setProto.check(target, proto);
+    try {
+      setProto.set(target, proto);
+      return true;
+    } catch(e){
+      return false;
+    }
+  }
+});
+},{"./_export":33,"./_set-proto":91}],214:[function(require,module,exports){
+// 26.1.13 Reflect.set(target, propertyKey, V [, receiver])
+var dP             = require('./_object-dp')
+  , gOPD           = require('./_object-gopd')
+  , getPrototypeOf = require('./_object-gpo')
+  , has            = require('./_has')
+  , $export        = require('./_export')
+  , createDesc     = require('./_property-desc')
+  , anObject       = require('./_an-object')
+  , isObject       = require('./_is-object');
+
+function set(target, propertyKey, V/*, receiver*/){
+  var receiver = arguments.length < 4 ? target : arguments[3]
+    , ownDesc  = gOPD.f(anObject(target), propertyKey)
+    , existingDescriptor, proto;
+  if(!ownDesc){
+    if(isObject(proto = getPrototypeOf(target))){
+      return set(proto, propertyKey, V, receiver);
+    }
+    ownDesc = createDesc(0);
+  }
+  if(has(ownDesc, 'value')){
+    if(ownDesc.writable === false || !isObject(receiver))return false;
+    existingDescriptor = gOPD.f(receiver, propertyKey) || createDesc(0);
+    existingDescriptor.value = V;
+    dP.f(receiver, propertyKey, existingDescriptor);
+    return true;
+  }
+  return ownDesc.set === undefined ? false : (ownDesc.set.call(receiver, V), true);
+}
+
+$export($export.S, 'Reflect', {set: set});
+},{"./_an-object":8,"./_export":33,"./_has":40,"./_is-object":50,"./_object-dp":68,"./_object-gopd":71,"./_object-gpo":75,"./_property-desc":86}],215:[function(require,module,exports){
+var global            = require('./_global')
+  , inheritIfRequired = require('./_inherit-if-required')
+  , dP                = require('./_object-dp').f
+  , gOPN              = require('./_object-gopn').f
+  , isRegExp          = require('./_is-regexp')
+  , $flags            = require('./_flags')
+  , $RegExp           = global.RegExp
+  , Base              = $RegExp
+  , proto             = $RegExp.prototype
+  , re1               = /a/g
+  , re2               = /a/g
+  // "new" creates a new object, old webkit buggy here
+  , CORRECT_NEW       = new $RegExp(re1) !== re1;
+
+if(require('./_descriptors') && (!CORRECT_NEW || require('./_fails')(function(){
+  re2[require('./_wks')('match')] = false;
+  // RegExp constructor can alter flags and IsRegExp works correct with @@match
+  return $RegExp(re1) != re1 || $RegExp(re2) == re2 || $RegExp(re1, 'i') != '/a/i';
+}))){
+  $RegExp = function RegExp(p, f){
+    var tiRE = this instanceof $RegExp
+      , piRE = isRegExp(p)
+      , fiU  = f === undefined;
+    return !tiRE && piRE && p.constructor === $RegExp && fiU ? p
+      : inheritIfRequired(CORRECT_NEW
+        ? new Base(piRE && !fiU ? p.source : p, f)
+        : Base((piRE = p instanceof $RegExp) ? p.source : p, piRE && fiU ? $flags.call(p) : f)
+      , tiRE ? this : proto, $RegExp);
+  };
+  var proxy = function(key){
+    key in $RegExp || dP($RegExp, key, {
+      configurable: true,
+      get: function(){ return Base[key]; },
+      set: function(it){ Base[key] = it; }
+    });
+  };
+  for(var keys = gOPN(Base), i = 0; keys.length > i; )proxy(keys[i++]);
+  proto.constructor = $RegExp;
+  $RegExp.prototype = proto;
+  require('./_redefine')(global, 'RegExp', $RegExp);
+}
+
+require('./_set-species')('RegExp');
+},{"./_descriptors":29,"./_fails":35,"./_flags":37,"./_global":39,"./_inherit-if-required":44,"./_is-regexp":51,"./_object-dp":68,"./_object-gopn":73,"./_redefine":88,"./_set-species":92,"./_wks":118}],216:[function(require,module,exports){
+// 21.2.5.3 get RegExp.prototype.flags()
+if(require('./_descriptors') && /./g.flags != 'g')require('./_object-dp').f(RegExp.prototype, 'flags', {
+  configurable: true,
+  get: require('./_flags')
+});
+},{"./_descriptors":29,"./_flags":37,"./_object-dp":68}],217:[function(require,module,exports){
+// @@match logic
+require('./_fix-re-wks')('match', 1, function(defined, MATCH, $match){
+  // 21.1.3.11 String.prototype.match(regexp)
+  return [function match(regexp){
+    'use strict';
+    var O  = defined(this)
+      , fn = regexp == undefined ? undefined : regexp[MATCH];
+    return fn !== undefined ? fn.call(regexp, O) : new RegExp(regexp)[MATCH](String(O));
+  }, $match];
+});
+},{"./_fix-re-wks":36}],218:[function(require,module,exports){
+// @@replace logic
+require('./_fix-re-wks')('replace', 2, function(defined, REPLACE, $replace){
+  // 21.1.3.14 String.prototype.replace(searchValue, replaceValue)
+  return [function replace(searchValue, replaceValue){
+    'use strict';
+    var O  = defined(this)
+      , fn = searchValue == undefined ? undefined : searchValue[REPLACE];
+    return fn !== undefined
+      ? fn.call(searchValue, O, replaceValue)
+      : $replace.call(String(O), searchValue, replaceValue);
+  }, $replace];
+});
+},{"./_fix-re-wks":36}],219:[function(require,module,exports){
+// @@search logic
+require('./_fix-re-wks')('search', 1, function(defined, SEARCH, $search){
+  // 21.1.3.15 String.prototype.search(regexp)
+  return [function search(regexp){
+    'use strict';
+    var O  = defined(this)
+      , fn = regexp == undefined ? undefined : regexp[SEARCH];
+    return fn !== undefined ? fn.call(regexp, O) : new RegExp(regexp)[SEARCH](String(O));
+  }, $search];
+});
+},{"./_fix-re-wks":36}],220:[function(require,module,exports){
+// @@split logic
+require('./_fix-re-wks')('split', 2, function(defined, SPLIT, $split){
+  'use strict';
+  var isRegExp   = require('./_is-regexp')
+    , _split     = $split
+    , $push      = [].push
+    , $SPLIT     = 'split'
+    , LENGTH     = 'length'
+    , LAST_INDEX = 'lastIndex';
+  if(
+    'abbc'[$SPLIT](/(b)*/)[1] == 'c' ||
+    'test'[$SPLIT](/(?:)/, -1)[LENGTH] != 4 ||
+    'ab'[$SPLIT](/(?:ab)*/)[LENGTH] != 2 ||
+    '.'[$SPLIT](/(.?)(.?)/)[LENGTH] != 4 ||
+    '.'[$SPLIT](/()()/)[LENGTH] > 1 ||
+    ''[$SPLIT](/.?/)[LENGTH]
+  ){
+    var NPCG = /()??/.exec('')[1] === undefined; // nonparticipating capturing group
+    // based on es5-shim implementation, need to rework it
+    $split = function(separator, limit){
+      var string = String(this);
+      if(separator === undefined && limit === 0)return [];
+      // If `separator` is not a regex, use native split
+      if(!isRegExp(separator))return _split.call(string, separator, limit);
+      var output = [];
+      var flags = (separator.ignoreCase ? 'i' : '') +
+                  (separator.multiline ? 'm' : '') +
+                  (separator.unicode ? 'u' : '') +
+                  (separator.sticky ? 'y' : '');
+      var lastLastIndex = 0;
+      var splitLimit = limit === undefined ? 4294967295 : limit >>> 0;
+      // Make `global` and avoid `lastIndex` issues by working with a copy
+      var separatorCopy = new RegExp(separator.source, flags + 'g');
+      var separator2, match, lastIndex, lastLength, i;
+      // Doesn't need flags gy, but they don't hurt
+      if(!NPCG)separator2 = new RegExp('^' + separatorCopy.source + '$(?!\\s)', flags);
+      while(match = separatorCopy.exec(string)){
+        // `separatorCopy.lastIndex` is not reliable cross-browser
+        lastIndex = match.index + match[0][LENGTH];
+        if(lastIndex > lastLastIndex){
+          output.push(string.slice(lastLastIndex, match.index));
+          // Fix browsers whose `exec` methods don't consistently return `undefined` for NPCG
+          if(!NPCG && match[LENGTH] > 1)match[0].replace(separator2, function(){
+            for(i = 1; i < arguments[LENGTH] - 2; i++)if(arguments[i] === undefined)match[i] = undefined;
+          });
+          if(match[LENGTH] > 1 && match.index < string[LENGTH])$push.apply(output, match.slice(1));
+          lastLength = match[0][LENGTH];
+          lastLastIndex = lastIndex;
+          if(output[LENGTH] >= splitLimit)break;
+        }
+        if(separatorCopy[LAST_INDEX] === match.index)separatorCopy[LAST_INDEX]++; // Avoid an infinite loop
+      }
+      if(lastLastIndex === string[LENGTH]){
+        if(lastLength || !separatorCopy.test(''))output.push('');
+      } else output.push(string.slice(lastLastIndex));
+      return output[LENGTH] > splitLimit ? output.slice(0, splitLimit) : output;
+    };
+  // Chakra, V8
+  } else if('0'[$SPLIT](undefined, 0)[LENGTH]){
+    $split = function(separator, limit){
+      return separator === undefined && limit === 0 ? [] : _split.call(this, separator, limit);
+    };
+  }
+  // 21.1.3.17 String.prototype.split(separator, limit)
+  return [function split(separator, limit){
+    var O  = defined(this)
+      , fn = separator == undefined ? undefined : separator[SPLIT];
+    return fn !== undefined ? fn.call(separator, O, limit) : $split.call(String(O), separator, limit);
+  }, $split];
+});
+},{"./_fix-re-wks":36,"./_is-regexp":51}],221:[function(require,module,exports){
+'use strict';
+require('./es6.regexp.flags');
+var anObject    = require('./_an-object')
+  , $flags      = require('./_flags')
+  , DESCRIPTORS = require('./_descriptors')
+  , TO_STRING   = 'toString'
+  , $toString   = /./[TO_STRING];
+
+var define = function(fn){
+  require('./_redefine')(RegExp.prototype, TO_STRING, fn, true);
+};
+
+// 21.2.5.14 RegExp.prototype.toString()
+if(require('./_fails')(function(){ return $toString.call({source: 'a', flags: 'b'}) != '/a/b'; })){
+  define(function toString(){
+    var R = anObject(this);
+    return '/'.concat(R.source, '/',
+      'flags' in R ? R.flags : !DESCRIPTORS && R instanceof RegExp ? $flags.call(R) : undefined);
+  });
+// FF44- RegExp#toString has a wrong name
+} else if($toString.name != TO_STRING){
+  define(function toString(){
+    return $toString.call(this);
+  });
+}
+},{"./_an-object":8,"./_descriptors":29,"./_fails":35,"./_flags":37,"./_redefine":88,"./es6.regexp.flags":216}],222:[function(require,module,exports){
+'use strict';
+var strong = require('./_collection-strong');
+
+// 23.2 Set Objects
+module.exports = require('./_collection')('Set', function(get){
+  return function Set(){ return get(this, arguments.length > 0 ? arguments[0] : undefined); };
+}, {
+  // 23.2.3.1 Set.prototype.add(value)
+  add: function add(value){
+    return strong.def(this, value = value === 0 ? 0 : value, value);
+  }
+}, strong);
+},{"./_collection":23,"./_collection-strong":20}],223:[function(require,module,exports){
+'use strict';
+// B.2.3.2 String.prototype.anchor(name)
+require('./_string-html')('anchor', function(createHTML){
+  return function anchor(name){
+    return createHTML(this, 'a', 'name', name);
+  }
+});
+},{"./_string-html":100}],224:[function(require,module,exports){
+'use strict';
+// B.2.3.3 String.prototype.big()
+require('./_string-html')('big', function(createHTML){
+  return function big(){
+    return createHTML(this, 'big', '', '');
+  }
+});
+},{"./_string-html":100}],225:[function(require,module,exports){
+'use strict';
+// B.2.3.4 String.prototype.blink()
+require('./_string-html')('blink', function(createHTML){
+  return function blink(){
+    return createHTML(this, 'blink', '', '');
+  }
+});
+},{"./_string-html":100}],226:[function(require,module,exports){
+'use strict';
+// B.2.3.5 String.prototype.bold()
+require('./_string-html')('bold', function(createHTML){
+  return function bold(){
+    return createHTML(this, 'b', '', '');
+  }
+});
+},{"./_string-html":100}],227:[function(require,module,exports){
+'use strict';
+var $export = require('./_export')
+  , $at     = require('./_string-at')(false);
+$export($export.P, 'String', {
+  // 21.1.3.3 String.prototype.codePointAt(pos)
+  codePointAt: function codePointAt(pos){
+    return $at(this, pos);
+  }
+});
+},{"./_export":33,"./_string-at":98}],228:[function(require,module,exports){
+// 21.1.3.6 String.prototype.endsWith(searchString [, endPosition])
+'use strict';
+var $export   = require('./_export')
+  , toLength  = require('./_to-length')
+  , context   = require('./_string-context')
+  , ENDS_WITH = 'endsWith'
+  , $endsWith = ''[ENDS_WITH];
+
+$export($export.P + $export.F * require('./_fails-is-regexp')(ENDS_WITH), 'String', {
+  endsWith: function endsWith(searchString /*, endPosition = @length */){
+    var that = context(this, searchString, ENDS_WITH)
+      , endPosition = arguments.length > 1 ? arguments[1] : undefined
+      , len    = toLength(that.length)
+      , end    = endPosition === undefined ? len : Math.min(toLength(endPosition), len)
+      , search = String(searchString);
+    return $endsWith
+      ? $endsWith.call(that, search, end)
+      : that.slice(end - search.length, end) === search;
+  }
+});
+},{"./_export":33,"./_fails-is-regexp":34,"./_string-context":99,"./_to-length":109}],229:[function(require,module,exports){
+'use strict';
+// B.2.3.6 String.prototype.fixed()
+require('./_string-html')('fixed', function(createHTML){
+  return function fixed(){
+    return createHTML(this, 'tt', '', '');
+  }
+});
+},{"./_string-html":100}],230:[function(require,module,exports){
+'use strict';
+// B.2.3.7 String.prototype.fontcolor(color)
+require('./_string-html')('fontcolor', function(createHTML){
+  return function fontcolor(color){
+    return createHTML(this, 'font', 'color', color);
+  }
+});
+},{"./_string-html":100}],231:[function(require,module,exports){
+'use strict';
+// B.2.3.8 String.prototype.fontsize(size)
+require('./_string-html')('fontsize', function(createHTML){
+  return function fontsize(size){
+    return createHTML(this, 'font', 'size', size);
+  }
+});
+},{"./_string-html":100}],232:[function(require,module,exports){
+var $export        = require('./_export')
+  , toIndex        = require('./_to-index')
+  , fromCharCode   = String.fromCharCode
+  , $fromCodePoint = String.fromCodePoint;
+
+// length should be 1, old FF problem
+$export($export.S + $export.F * (!!$fromCodePoint && $fromCodePoint.length != 1), 'String', {
+  // 21.1.2.2 String.fromCodePoint(...codePoints)
+  fromCodePoint: function fromCodePoint(x){ // eslint-disable-line no-unused-vars
+    var res  = []
+      , aLen = arguments.length
+      , i    = 0
+      , code;
+    while(aLen > i){
+      code = +arguments[i++];
+      if(toIndex(code, 0x10ffff) !== code)throw RangeError(code + ' is not a valid code point');
+      res.push(code < 0x10000
+        ? fromCharCode(code)
+        : fromCharCode(((code -= 0x10000) >> 10) + 0xd800, code % 0x400 + 0xdc00)
+      );
+    } return res.join('');
+  }
+});
+},{"./_export":33,"./_to-index":106}],233:[function(require,module,exports){
+// 21.1.3.7 String.prototype.includes(searchString, position = 0)
+'use strict';
+var $export  = require('./_export')
+  , context  = require('./_string-context')
+  , INCLUDES = 'includes';
+
+$export($export.P + $export.F * require('./_fails-is-regexp')(INCLUDES), 'String', {
+  includes: function includes(searchString /*, position = 0 */){
+    return !!~context(this, searchString, INCLUDES)
+      .indexOf(searchString, arguments.length > 1 ? arguments[1] : undefined);
+  }
+});
+},{"./_export":33,"./_fails-is-regexp":34,"./_string-context":99}],234:[function(require,module,exports){
+'use strict';
+// B.2.3.9 String.prototype.italics()
+require('./_string-html')('italics', function(createHTML){
+  return function italics(){
+    return createHTML(this, 'i', '', '');
+  }
+});
+},{"./_string-html":100}],235:[function(require,module,exports){
+'use strict';
+var $at  = require('./_string-at')(true);
+
+// 21.1.3.27 String.prototype[@@iterator]()
+require('./_iter-define')(String, 'String', function(iterated){
+  this._t = String(iterated); // target
+  this._i = 0;                // next index
+// 21.1.5.2.1 %StringIteratorPrototype%.next()
+}, function(){
+  var O     = this._t
+    , index = this._i
+    , point;
+  if(index >= O.length)return {value: undefined, done: true};
+  point = $at(O, index);
+  this._i += point.length;
+  return {value: point, done: false};
+});
+},{"./_iter-define":54,"./_string-at":98}],236:[function(require,module,exports){
+'use strict';
+// B.2.3.10 String.prototype.link(url)
+require('./_string-html')('link', function(createHTML){
+  return function link(url){
+    return createHTML(this, 'a', 'href', url);
+  }
+});
+},{"./_string-html":100}],237:[function(require,module,exports){
+var $export   = require('./_export')
+  , toIObject = require('./_to-iobject')
+  , toLength  = require('./_to-length');
+
+$export($export.S, 'String', {
+  // 21.1.2.4 String.raw(callSite, ...substitutions)
+  raw: function raw(callSite){
+    var tpl  = toIObject(callSite.raw)
+      , len  = toLength(tpl.length)
+      , aLen = arguments.length
+      , res  = []
+      , i    = 0;
+    while(len > i){
+      res.push(String(tpl[i++]));
+      if(i < aLen)res.push(String(arguments[i]));
+    } return res.join('');
+  }
+});
+},{"./_export":33,"./_to-iobject":108,"./_to-length":109}],238:[function(require,module,exports){
+var $export = require('./_export');
+
+$export($export.P, 'String', {
+  // 21.1.3.13 String.prototype.repeat(count)
+  repeat: require('./_string-repeat')
+});
+},{"./_export":33,"./_string-repeat":102}],239:[function(require,module,exports){
+'use strict';
+// B.2.3.11 String.prototype.small()
+require('./_string-html')('small', function(createHTML){
+  return function small(){
+    return createHTML(this, 'small', '', '');
+  }
+});
+},{"./_string-html":100}],240:[function(require,module,exports){
+// 21.1.3.18 String.prototype.startsWith(searchString [, position ])
+'use strict';
+var $export     = require('./_export')
+  , toLength    = require('./_to-length')
+  , context     = require('./_string-context')
+  , STARTS_WITH = 'startsWith'
+  , $startsWith = ''[STARTS_WITH];
+
+$export($export.P + $export.F * require('./_fails-is-regexp')(STARTS_WITH), 'String', {
+  startsWith: function startsWith(searchString /*, position = 0 */){
+    var that   = context(this, searchString, STARTS_WITH)
+      , index  = toLength(Math.min(arguments.length > 1 ? arguments[1] : undefined, that.length))
+      , search = String(searchString);
+    return $startsWith
+      ? $startsWith.call(that, search, index)
+      : that.slice(index, index + search.length) === search;
+  }
+});
+},{"./_export":33,"./_fails-is-regexp":34,"./_string-context":99,"./_to-length":109}],241:[function(require,module,exports){
+'use strict';
+// B.2.3.12 String.prototype.strike()
+require('./_string-html')('strike', function(createHTML){
+  return function strike(){
+    return createHTML(this, 'strike', '', '');
+  }
+});
+},{"./_string-html":100}],242:[function(require,module,exports){
+'use strict';
+// B.2.3.13 String.prototype.sub()
+require('./_string-html')('sub', function(createHTML){
+  return function sub(){
+    return createHTML(this, 'sub', '', '');
+  }
+});
+},{"./_string-html":100}],243:[function(require,module,exports){
+'use strict';
+// B.2.3.14 String.prototype.sup()
+require('./_string-html')('sup', function(createHTML){
+  return function sup(){
+    return createHTML(this, 'sup', '', '');
+  }
+});
+},{"./_string-html":100}],244:[function(require,module,exports){
+'use strict';
+// 21.1.3.25 String.prototype.trim()
+require('./_string-trim')('trim', function($trim){
+  return function trim(){
+    return $trim(this, 3);
+  };
+});
+},{"./_string-trim":103}],245:[function(require,module,exports){
+'use strict';
+// ECMAScript 6 symbols shim
+var global         = require('./_global')
+  , has            = require('./_has')
+  , DESCRIPTORS    = require('./_descriptors')
+  , $export        = require('./_export')
+  , redefine       = require('./_redefine')
+  , META           = require('./_meta').KEY
+  , $fails         = require('./_fails')
+  , shared         = require('./_shared')
+  , setToStringTag = require('./_set-to-string-tag')
+  , uid            = require('./_uid')
+  , wks            = require('./_wks')
+  , wksExt         = require('./_wks-ext')
+  , wksDefine      = require('./_wks-define')
+  , keyOf          = require('./_keyof')
+  , enumKeys       = require('./_enum-keys')
+  , isArray        = require('./_is-array')
+  , anObject       = require('./_an-object')
+  , toIObject      = require('./_to-iobject')
+  , toPrimitive    = require('./_to-primitive')
+  , createDesc     = require('./_property-desc')
+  , _create        = require('./_object-create')
+  , gOPNExt        = require('./_object-gopn-ext')
+  , $GOPD          = require('./_object-gopd')
+  , $DP            = require('./_object-dp')
+  , $keys          = require('./_object-keys')
+  , gOPD           = $GOPD.f
+  , dP             = $DP.f
+  , gOPN           = gOPNExt.f
+  , $Symbol        = global.Symbol
+  , $JSON          = global.JSON
+  , _stringify     = $JSON && $JSON.stringify
+  , PROTOTYPE      = 'prototype'
+  , HIDDEN         = wks('_hidden')
+  , TO_PRIMITIVE   = wks('toPrimitive')
+  , isEnum         = {}.propertyIsEnumerable
+  , SymbolRegistry = shared('symbol-registry')
+  , AllSymbols     = shared('symbols')
+  , OPSymbols      = shared('op-symbols')
+  , ObjectProto    = Object[PROTOTYPE]
+  , USE_NATIVE     = typeof $Symbol == 'function'
+  , QObject        = global.QObject;
+// Don't use setters in Qt Script, https://github.com/zloirock/core-js/issues/173
+var setter = !QObject || !QObject[PROTOTYPE] || !QObject[PROTOTYPE].findChild;
+
+// fallback for old Android, https://code.google.com/p/v8/issues/detail?id=687
+var setSymbolDesc = DESCRIPTORS && $fails(function(){
+  return _create(dP({}, 'a', {
+    get: function(){ return dP(this, 'a', {value: 7}).a; }
+  })).a != 7;
+}) ? function(it, key, D){
+  var protoDesc = gOPD(ObjectProto, key);
+  if(protoDesc)delete ObjectProto[key];
+  dP(it, key, D);
+  if(protoDesc && it !== ObjectProto)dP(ObjectProto, key, protoDesc);
+} : dP;
+
+var wrap = function(tag){
+  var sym = AllSymbols[tag] = _create($Symbol[PROTOTYPE]);
+  sym._k = tag;
+  return sym;
+};
+
+var isSymbol = USE_NATIVE && typeof $Symbol.iterator == 'symbol' ? function(it){
+  return typeof it == 'symbol';
+} : function(it){
+  return it instanceof $Symbol;
+};
+
+var $defineProperty = function defineProperty(it, key, D){
+  if(it === ObjectProto)$defineProperty(OPSymbols, key, D);
+  anObject(it);
+  key = toPrimitive(key, true);
+  anObject(D);
+  if(has(AllSymbols, key)){
+    if(!D.enumerable){
+      if(!has(it, HIDDEN))dP(it, HIDDEN, createDesc(1, {}));
+      it[HIDDEN][key] = true;
+    } else {
+      if(has(it, HIDDEN) && it[HIDDEN][key])it[HIDDEN][key] = false;
+      D = _create(D, {enumerable: createDesc(0, false)});
+    } return setSymbolDesc(it, key, D);
+  } return dP(it, key, D);
+};
+var $defineProperties = function defineProperties(it, P){
+  anObject(it);
+  var keys = enumKeys(P = toIObject(P))
+    , i    = 0
+    , l = keys.length
+    , key;
+  while(l > i)$defineProperty(it, key = keys[i++], P[key]);
+  return it;
+};
+var $create = function create(it, P){
+  return P === undefined ? _create(it) : $defineProperties(_create(it), P);
+};
+var $propertyIsEnumerable = function propertyIsEnumerable(key){
+  var E = isEnum.call(this, key = toPrimitive(key, true));
+  if(this === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key))return false;
+  return E || !has(this, key) || !has(AllSymbols, key) || has(this, HIDDEN) && this[HIDDEN][key] ? E : true;
+};
+var $getOwnPropertyDescriptor = function getOwnPropertyDescriptor(it, key){
+  it  = toIObject(it);
+  key = toPrimitive(key, true);
+  if(it === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key))return;
+  var D = gOPD(it, key);
+  if(D && has(AllSymbols, key) && !(has(it, HIDDEN) && it[HIDDEN][key]))D.enumerable = true;
+  return D;
+};
+var $getOwnPropertyNames = function getOwnPropertyNames(it){
+  var names  = gOPN(toIObject(it))
+    , result = []
+    , i      = 0
+    , key;
+  while(names.length > i){
+    if(!has(AllSymbols, key = names[i++]) && key != HIDDEN && key != META)result.push(key);
+  } return result;
+};
+var $getOwnPropertySymbols = function getOwnPropertySymbols(it){
+  var IS_OP  = it === ObjectProto
+    , names  = gOPN(IS_OP ? OPSymbols : toIObject(it))
+    , result = []
+    , i      = 0
+    , key;
+  while(names.length > i){
+    if(has(AllSymbols, key = names[i++]) && (IS_OP ? has(ObjectProto, key) : true))result.push(AllSymbols[key]);
+  } return result;
+};
+
+// 19.4.1.1 Symbol([description])
+if(!USE_NATIVE){
+  $Symbol = function Symbol(){
+    if(this instanceof $Symbol)throw TypeError('Symbol is not a constructor!');
+    var tag = uid(arguments.length > 0 ? arguments[0] : undefined);
+    var $set = function(value){
+      if(this === ObjectProto)$set.call(OPSymbols, value);
+      if(has(this, HIDDEN) && has(this[HIDDEN], tag))this[HIDDEN][tag] = false;
+      setSymbolDesc(this, tag, createDesc(1, value));
+    };
+    if(DESCRIPTORS && setter)setSymbolDesc(ObjectProto, tag, {configurable: true, set: $set});
+    return wrap(tag);
+  };
+  redefine($Symbol[PROTOTYPE], 'toString', function toString(){
+    return this._k;
+  });
+
+  $GOPD.f = $getOwnPropertyDescriptor;
+  $DP.f   = $defineProperty;
+  require('./_object-gopn').f = gOPNExt.f = $getOwnPropertyNames;
+  require('./_object-pie').f  = $propertyIsEnumerable;
+  require('./_object-gops').f = $getOwnPropertySymbols;
+
+  if(DESCRIPTORS && !require('./_library')){
+    redefine(ObjectProto, 'propertyIsEnumerable', $propertyIsEnumerable, true);
+  }
+
+  wksExt.f = function(name){
+    return wrap(wks(name));
+  }
+}
+
+$export($export.G + $export.W + $export.F * !USE_NATIVE, {Symbol: $Symbol});
+
+for(var symbols = (
+  // 19.4.2.2, 19.4.2.3, 19.4.2.4, 19.4.2.6, 19.4.2.8, 19.4.2.9, 19.4.2.10, 19.4.2.11, 19.4.2.12, 19.4.2.13, 19.4.2.14
+  'hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables'
+).split(','), i = 0; symbols.length > i; )wks(symbols[i++]);
+
+for(var symbols = $keys(wks.store), i = 0; symbols.length > i; )wksDefine(symbols[i++]);
+
+$export($export.S + $export.F * !USE_NATIVE, 'Symbol', {
+  // 19.4.2.1 Symbol.for(key)
+  'for': function(key){
+    return has(SymbolRegistry, key += '')
+      ? SymbolRegistry[key]
+      : SymbolRegistry[key] = $Symbol(key);
+  },
+  // 19.4.2.5 Symbol.keyFor(sym)
+  keyFor: function keyFor(key){
+    if(isSymbol(key))return keyOf(SymbolRegistry, key);
+    throw TypeError(key + ' is not a symbol!');
+  },
+  useSetter: function(){ setter = true; },
+  useSimple: function(){ setter = false; }
+});
+
+$export($export.S + $export.F * !USE_NATIVE, 'Object', {
+  // 19.1.2.2 Object.create(O [, Properties])
+  create: $create,
+  // 19.1.2.4 Object.defineProperty(O, P, Attributes)
+  defineProperty: $defineProperty,
+  // 19.1.2.3 Object.defineProperties(O, Properties)
+  defineProperties: $defineProperties,
+  // 19.1.2.6 Object.getOwnPropertyDescriptor(O, P)
+  getOwnPropertyDescriptor: $getOwnPropertyDescriptor,
+  // 19.1.2.7 Object.getOwnPropertyNames(O)
+  getOwnPropertyNames: $getOwnPropertyNames,
+  // 19.1.2.8 Object.getOwnPropertySymbols(O)
+  getOwnPropertySymbols: $getOwnPropertySymbols
+});
+
+// 24.3.2 JSON.stringify(value [, replacer [, space]])
+$JSON && $export($export.S + $export.F * (!USE_NATIVE || $fails(function(){
+  var S = $Symbol();
+  // MS Edge converts symbol values to JSON as {}
+  // WebKit converts symbol values to JSON as null
+  // V8 throws on boxed symbols
+  return _stringify([S]) != '[null]' || _stringify({a: S}) != '{}' || _stringify(Object(S)) != '{}';
+})), 'JSON', {
+  stringify: function stringify(it){
+    if(it === undefined || isSymbol(it))return; // IE8 returns string on undefined
+    var args = [it]
+      , i    = 1
+      , replacer, $replacer;
+    while(arguments.length > i)args.push(arguments[i++]);
+    replacer = args[1];
+    if(typeof replacer == 'function')$replacer = replacer;
+    if($replacer || !isArray(replacer))replacer = function(key, value){
+      if($replacer)value = $replacer.call(this, key, value);
+      if(!isSymbol(value))return value;
+    };
+    args[1] = replacer;
+    return _stringify.apply($JSON, args);
+  }
+});
+
+// 19.4.3.4 Symbol.prototype[@@toPrimitive](hint)
+$Symbol[PROTOTYPE][TO_PRIMITIVE] || require('./_hide')($Symbol[PROTOTYPE], TO_PRIMITIVE, $Symbol[PROTOTYPE].valueOf);
+// 19.4.3.5 Symbol.prototype[@@toStringTag]
+setToStringTag($Symbol, 'Symbol');
+// 20.2.1.9 Math[@@toStringTag]
+setToStringTag(Math, 'Math', true);
+// 24.3.3 JSON[@@toStringTag]
+setToStringTag(global.JSON, 'JSON', true);
+},{"./_an-object":8,"./_descriptors":29,"./_enum-keys":32,"./_export":33,"./_fails":35,"./_global":39,"./_has":40,"./_hide":41,"./_is-array":48,"./_keyof":58,"./_library":59,"./_meta":63,"./_object-create":67,"./_object-dp":68,"./_object-gopd":71,"./_object-gopn":73,"./_object-gopn-ext":72,"./_object-gops":74,"./_object-keys":77,"./_object-pie":78,"./_property-desc":86,"./_redefine":88,"./_set-to-string-tag":93,"./_shared":95,"./_to-iobject":108,"./_to-primitive":111,"./_uid":115,"./_wks":118,"./_wks-define":116,"./_wks-ext":117}],246:[function(require,module,exports){
+'use strict';
+var $export      = require('./_export')
+  , $typed       = require('./_typed')
+  , buffer       = require('./_typed-buffer')
+  , anObject     = require('./_an-object')
+  , toIndex      = require('./_to-index')
+  , toLength     = require('./_to-length')
+  , isObject     = require('./_is-object')
+  , TYPED_ARRAY  = require('./_wks')('typed_array')
+  , ArrayBuffer  = require('./_global').ArrayBuffer
+  , speciesConstructor = require('./_species-constructor')
+  , $ArrayBuffer = buffer.ArrayBuffer
+  , $DataView    = buffer.DataView
+  , $isView      = $typed.ABV && ArrayBuffer.isView
+  , $slice       = $ArrayBuffer.prototype.slice
+  , VIEW         = $typed.VIEW
+  , ARRAY_BUFFER = 'ArrayBuffer';
+
+$export($export.G + $export.W + $export.F * (ArrayBuffer !== $ArrayBuffer), {ArrayBuffer: $ArrayBuffer});
+
+$export($export.S + $export.F * !$typed.CONSTR, ARRAY_BUFFER, {
+  // 24.1.3.1 ArrayBuffer.isView(arg)
+  isView: function isView(it){
+    return $isView && $isView(it) || isObject(it) && VIEW in it;
+  }
+});
+
+$export($export.P + $export.U + $export.F * require('./_fails')(function(){
+  return !new $ArrayBuffer(2).slice(1, undefined).byteLength;
+}), ARRAY_BUFFER, {
+  // 24.1.4.3 ArrayBuffer.prototype.slice(start, end)
+  slice: function slice(start, end){
+    if($slice !== undefined && end === undefined)return $slice.call(anObject(this), start); // FF fix
+    var len    = anObject(this).byteLength
+      , first  = toIndex(start, len)
+      , final  = toIndex(end === undefined ? len : end, len)
+      , result = new (speciesConstructor(this, $ArrayBuffer))(toLength(final - first))
+      , viewS  = new $DataView(this)
+      , viewT  = new $DataView(result)
+      , index  = 0;
+    while(first < final){
+      viewT.setUint8(index++, viewS.getUint8(first++));
+    } return result;
+  }
+});
+
+require('./_set-species')(ARRAY_BUFFER);
+},{"./_an-object":8,"./_export":33,"./_fails":35,"./_global":39,"./_is-object":50,"./_set-species":92,"./_species-constructor":96,"./_to-index":106,"./_to-length":109,"./_typed":114,"./_typed-buffer":113,"./_wks":118}],247:[function(require,module,exports){
+var $export = require('./_export');
+$export($export.G + $export.W + $export.F * !require('./_typed').ABV, {
+  DataView: require('./_typed-buffer').DataView
+});
+},{"./_export":33,"./_typed":114,"./_typed-buffer":113}],248:[function(require,module,exports){
+require('./_typed-array')('Float32', 4, function(init){
+  return function Float32Array(data, byteOffset, length){
+    return init(this, data, byteOffset, length);
+  };
+});
+},{"./_typed-array":112}],249:[function(require,module,exports){
+require('./_typed-array')('Float64', 8, function(init){
+  return function Float64Array(data, byteOffset, length){
+    return init(this, data, byteOffset, length);
+  };
+});
+},{"./_typed-array":112}],250:[function(require,module,exports){
+require('./_typed-array')('Int16', 2, function(init){
+  return function Int16Array(data, byteOffset, length){
+    return init(this, data, byteOffset, length);
+  };
+});
+},{"./_typed-array":112}],251:[function(require,module,exports){
+require('./_typed-array')('Int32', 4, function(init){
+  return function Int32Array(data, byteOffset, length){
+    return init(this, data, byteOffset, length);
+  };
+});
+},{"./_typed-array":112}],252:[function(require,module,exports){
+require('./_typed-array')('Int8', 1, function(init){
+  return function Int8Array(data, byteOffset, length){
+    return init(this, data, byteOffset, length);
+  };
+});
+},{"./_typed-array":112}],253:[function(require,module,exports){
+require('./_typed-array')('Uint16', 2, function(init){
+  return function Uint16Array(data, byteOffset, length){
+    return init(this, data, byteOffset, length);
+  };
+});
+},{"./_typed-array":112}],254:[function(require,module,exports){
+require('./_typed-array')('Uint32', 4, function(init){
+  return function Uint32Array(data, byteOffset, length){
+    return init(this, data, byteOffset, length);
+  };
+});
+},{"./_typed-array":112}],255:[function(require,module,exports){
+require('./_typed-array')('Uint8', 1, function(init){
+  return function Uint8Array(data, byteOffset, length){
+    return init(this, data, byteOffset, length);
+  };
+});
+},{"./_typed-array":112}],256:[function(require,module,exports){
+require('./_typed-array')('Uint8', 1, function(init){
+  return function Uint8ClampedArray(data, byteOffset, length){
+    return init(this, data, byteOffset, length);
+  };
+}, true);
+},{"./_typed-array":112}],257:[function(require,module,exports){
+'use strict';
+var each         = require('./_array-methods')(0)
+  , redefine     = require('./_redefine')
+  , meta         = require('./_meta')
+  , assign       = require('./_object-assign')
+  , weak         = require('./_collection-weak')
+  , isObject     = require('./_is-object')
+  , has          = require('./_has')
+  , getWeak      = meta.getWeak
+  , isExtensible = Object.isExtensible
+  , uncaughtFrozenStore = weak.ufstore
+  , tmp          = {}
+  , InternalMap;
+
+var wrapper = function(get){
+  return function WeakMap(){
+    return get(this, arguments.length > 0 ? arguments[0] : undefined);
+  };
+};
+
+var methods = {
+  // 23.3.3.3 WeakMap.prototype.get(key)
+  get: function get(key){
+    if(isObject(key)){
+      var data = getWeak(key);
+      if(data === true)return uncaughtFrozenStore(this).get(key);
+      return data ? data[this._i] : undefined;
+    }
+  },
+  // 23.3.3.5 WeakMap.prototype.set(key, value)
+  set: function set(key, value){
+    return weak.def(this, key, value);
+  }
+};
+
+// 23.3 WeakMap Objects
+var $WeakMap = module.exports = require('./_collection')('WeakMap', wrapper, methods, weak, true, true);
+
+// IE11 WeakMap frozen keys fix
+if(new $WeakMap().set((Object.freeze || Object)(tmp), 7).get(tmp) != 7){
+  InternalMap = weak.getConstructor(wrapper);
+  assign(InternalMap.prototype, methods);
+  meta.NEED = true;
+  each(['delete', 'has', 'get', 'set'], function(key){
+    var proto  = $WeakMap.prototype
+      , method = proto[key];
+    redefine(proto, key, function(a, b){
+      // store frozen objects on internal weakmap shim
+      if(isObject(a) && !isExtensible(a)){
+        if(!this._f)this._f = new InternalMap;
+        var result = this._f[key](a, b);
+        return key == 'set' ? this : result;
+      // store all the rest on native weakmap
+      } return method.call(this, a, b);
+    });
+  });
+}
+},{"./_array-methods":13,"./_collection":23,"./_collection-weak":22,"./_has":40,"./_is-object":50,"./_meta":63,"./_object-assign":66,"./_redefine":88}],258:[function(require,module,exports){
+'use strict';
+var weak = require('./_collection-weak');
+
+// 23.4 WeakSet Objects
+require('./_collection')('WeakSet', function(get){
+  return function WeakSet(){ return get(this, arguments.length > 0 ? arguments[0] : undefined); };
+}, {
+  // 23.4.3.1 WeakSet.prototype.add(value)
+  add: function add(value){
+    return weak.def(this, value, true);
+  }
+}, weak, false, true);
+},{"./_collection":23,"./_collection-weak":22}],259:[function(require,module,exports){
+'use strict';
+// https://github.com/tc39/Array.prototype.includes
+var $export   = require('./_export')
+  , $includes = require('./_array-includes')(true);
+
+$export($export.P, 'Array', {
+  includes: function includes(el /*, fromIndex = 0 */){
+    return $includes(this, el, arguments.length > 1 ? arguments[1] : undefined);
+  }
+});
+
+require('./_add-to-unscopables')('includes');
+},{"./_add-to-unscopables":6,"./_array-includes":12,"./_export":33}],260:[function(require,module,exports){
+// https://github.com/rwaldron/tc39-notes/blob/master/es6/2014-09/sept-25.md#510-globalasap-for-enqueuing-a-microtask
+var $export   = require('./_export')
+  , microtask = require('./_microtask')()
+  , process   = require('./_global').process
+  , isNode    = require('./_cof')(process) == 'process';
+
+$export($export.G, {
+  asap: function asap(fn){
+    var domain = isNode && process.domain;
+    microtask(domain ? domain.bind(fn) : fn);
+  }
+});
+},{"./_cof":19,"./_export":33,"./_global":39,"./_microtask":65}],261:[function(require,module,exports){
+// https://github.com/ljharb/proposal-is-error
+var $export = require('./_export')
+  , cof     = require('./_cof');
+
+$export($export.S, 'Error', {
+  isError: function isError(it){
+    return cof(it) === 'Error';
+  }
+});
+},{"./_cof":19,"./_export":33}],262:[function(require,module,exports){
+// https://github.com/DavidBruant/Map-Set.prototype.toJSON
+var $export  = require('./_export');
+
+$export($export.P + $export.R, 'Map', {toJSON: require('./_collection-to-json')('Map')});
+},{"./_collection-to-json":21,"./_export":33}],263:[function(require,module,exports){
+// https://gist.github.com/BrendanEich/4294d5c212a6d2254703
+var $export = require('./_export');
+
+$export($export.S, 'Math', {
+  iaddh: function iaddh(x0, x1, y0, y1){
+    var $x0 = x0 >>> 0
+      , $x1 = x1 >>> 0
+      , $y0 = y0 >>> 0;
+    return $x1 + (y1 >>> 0) + (($x0 & $y0 | ($x0 | $y0) & ~($x0 + $y0 >>> 0)) >>> 31) | 0;
+  }
+});
+},{"./_export":33}],264:[function(require,module,exports){
+// https://gist.github.com/BrendanEich/4294d5c212a6d2254703
+var $export = require('./_export');
+
+$export($export.S, 'Math', {
+  imulh: function imulh(u, v){
+    var UINT16 = 0xffff
+      , $u = +u
+      , $v = +v
+      , u0 = $u & UINT16
+      , v0 = $v & UINT16
+      , u1 = $u >> 16
+      , v1 = $v >> 16
+      , t  = (u1 * v0 >>> 0) + (u0 * v0 >>> 16);
+    return u1 * v1 + (t >> 16) + ((u0 * v1 >>> 0) + (t & UINT16) >> 16);
+  }
+});
+},{"./_export":33}],265:[function(require,module,exports){
+// https://gist.github.com/BrendanEich/4294d5c212a6d2254703
+var $export = require('./_export');
+
+$export($export.S, 'Math', {
+  isubh: function isubh(x0, x1, y0, y1){
+    var $x0 = x0 >>> 0
+      , $x1 = x1 >>> 0
+      , $y0 = y0 >>> 0;
+    return $x1 - (y1 >>> 0) - ((~$x0 & $y0 | ~($x0 ^ $y0) & $x0 - $y0 >>> 0) >>> 31) | 0;
+  }
+});
+},{"./_export":33}],266:[function(require,module,exports){
+// https://gist.github.com/BrendanEich/4294d5c212a6d2254703
+var $export = require('./_export');
+
+$export($export.S, 'Math', {
+  umulh: function umulh(u, v){
+    var UINT16 = 0xffff
+      , $u = +u
+      , $v = +v
+      , u0 = $u & UINT16
+      , v0 = $v & UINT16
+      , u1 = $u >>> 16
+      , v1 = $v >>> 16
+      , t  = (u1 * v0 >>> 0) + (u0 * v0 >>> 16);
+    return u1 * v1 + (t >>> 16) + ((u0 * v1 >>> 0) + (t & UINT16) >>> 16);
+  }
+});
+},{"./_export":33}],267:[function(require,module,exports){
+'use strict';
+var $export         = require('./_export')
+  , toObject        = require('./_to-object')
+  , aFunction       = require('./_a-function')
+  , $defineProperty = require('./_object-dp');
+
+// B.2.2.2 Object.prototype.__defineGetter__(P, getter)
+require('./_descriptors') && $export($export.P + require('./_object-forced-pam'), 'Object', {
+  __defineGetter__: function __defineGetter__(P, getter){
+    $defineProperty.f(toObject(this), P, {get: aFunction(getter), enumerable: true, configurable: true});
+  }
+});
+},{"./_a-function":4,"./_descriptors":29,"./_export":33,"./_object-dp":68,"./_object-forced-pam":70,"./_to-object":110}],268:[function(require,module,exports){
+'use strict';
+var $export         = require('./_export')
+  , toObject        = require('./_to-object')
+  , aFunction       = require('./_a-function')
+  , $defineProperty = require('./_object-dp');
+
+// B.2.2.3 Object.prototype.__defineSetter__(P, setter)
+require('./_descriptors') && $export($export.P + require('./_object-forced-pam'), 'Object', {
+  __defineSetter__: function __defineSetter__(P, setter){
+    $defineProperty.f(toObject(this), P, {set: aFunction(setter), enumerable: true, configurable: true});
+  }
+});
+},{"./_a-function":4,"./_descriptors":29,"./_export":33,"./_object-dp":68,"./_object-forced-pam":70,"./_to-object":110}],269:[function(require,module,exports){
+// https://github.com/tc39/proposal-object-values-entries
+var $export  = require('./_export')
+  , $entries = require('./_object-to-array')(true);
+
+$export($export.S, 'Object', {
+  entries: function entries(it){
+    return $entries(it);
+  }
+});
+},{"./_export":33,"./_object-to-array":80}],270:[function(require,module,exports){
+// https://github.com/tc39/proposal-object-getownpropertydescriptors
+var $export        = require('./_export')
+  , ownKeys        = require('./_own-keys')
+  , toIObject      = require('./_to-iobject')
+  , gOPD           = require('./_object-gopd')
+  , createProperty = require('./_create-property');
+
+$export($export.S, 'Object', {
+  getOwnPropertyDescriptors: function getOwnPropertyDescriptors(object){
+    var O       = toIObject(object)
+      , getDesc = gOPD.f
+      , keys    = ownKeys(O)
+      , result  = {}
+      , i       = 0
+      , key, D;
+    while(keys.length > i)createProperty(result, key = keys[i++], getDesc(O, key));
+    return result;
+  }
+});
+},{"./_create-property":25,"./_export":33,"./_object-gopd":71,"./_own-keys":81,"./_to-iobject":108}],271:[function(require,module,exports){
+'use strict';
+var $export                  = require('./_export')
+  , toObject                 = require('./_to-object')
+  , toPrimitive              = require('./_to-primitive')
+  , getPrototypeOf           = require('./_object-gpo')
+  , getOwnPropertyDescriptor = require('./_object-gopd').f;
+
+// B.2.2.4 Object.prototype.__lookupGetter__(P)
+require('./_descriptors') && $export($export.P + require('./_object-forced-pam'), 'Object', {
+  __lookupGetter__: function __lookupGetter__(P){
+    var O = toObject(this)
+      , K = toPrimitive(P, true)
+      , D;
+    do {
+      if(D = getOwnPropertyDescriptor(O, K))return D.get;
+    } while(O = getPrototypeOf(O));
+  }
+});
+},{"./_descriptors":29,"./_export":33,"./_object-forced-pam":70,"./_object-gopd":71,"./_object-gpo":75,"./_to-object":110,"./_to-primitive":111}],272:[function(require,module,exports){
+'use strict';
+var $export                  = require('./_export')
+  , toObject                 = require('./_to-object')
+  , toPrimitive              = require('./_to-primitive')
+  , getPrototypeOf           = require('./_object-gpo')
+  , getOwnPropertyDescriptor = require('./_object-gopd').f;
+
+// B.2.2.5 Object.prototype.__lookupSetter__(P)
+require('./_descriptors') && $export($export.P + require('./_object-forced-pam'), 'Object', {
+  __lookupSetter__: function __lookupSetter__(P){
+    var O = toObject(this)
+      , K = toPrimitive(P, true)
+      , D;
+    do {
+      if(D = getOwnPropertyDescriptor(O, K))return D.set;
+    } while(O = getPrototypeOf(O));
+  }
+});
+},{"./_descriptors":29,"./_export":33,"./_object-forced-pam":70,"./_object-gopd":71,"./_object-gpo":75,"./_to-object":110,"./_to-primitive":111}],273:[function(require,module,exports){
+// https://github.com/tc39/proposal-object-values-entries
+var $export = require('./_export')
+  , $values = require('./_object-to-array')(false);
+
+$export($export.S, 'Object', {
+  values: function values(it){
+    return $values(it);
+  }
+});
+},{"./_export":33,"./_object-to-array":80}],274:[function(require,module,exports){
+'use strict';
+// https://github.com/zenparsing/es-observable
+var $export     = require('./_export')
+  , global      = require('./_global')
+  , core        = require('./_core')
+  , microtask   = require('./_microtask')()
+  , OBSERVABLE  = require('./_wks')('observable')
+  , aFunction   = require('./_a-function')
+  , anObject    = require('./_an-object')
+  , anInstance  = require('./_an-instance')
+  , redefineAll = require('./_redefine-all')
+  , hide        = require('./_hide')
+  , forOf       = require('./_for-of')
+  , RETURN      = forOf.RETURN;
+
+var getMethod = function(fn){
+  return fn == null ? undefined : aFunction(fn);
+};
+
+var cleanupSubscription = function(subscription){
+  var cleanup = subscription._c;
+  if(cleanup){
+    subscription._c = undefined;
+    cleanup();
+  }
+};
+
+var subscriptionClosed = function(subscription){
+  return subscription._o === undefined;
+};
+
+var closeSubscription = function(subscription){
+  if(!subscriptionClosed(subscription)){
+    subscription._o = undefined;
+    cleanupSubscription(subscription);
+  }
+};
+
+var Subscription = function(observer, subscriber){
+  anObject(observer);
+  this._c = undefined;
+  this._o = observer;
+  observer = new SubscriptionObserver(this);
+  try {
+    var cleanup      = subscriber(observer)
+      , subscription = cleanup;
+    if(cleanup != null){
+      if(typeof cleanup.unsubscribe === 'function')cleanup = function(){ subscription.unsubscribe(); };
+      else aFunction(cleanup);
+      this._c = cleanup;
+    }
+  } catch(e){
+    observer.error(e);
+    return;
+  } if(subscriptionClosed(this))cleanupSubscription(this);
+};
+
+Subscription.prototype = redefineAll({}, {
+  unsubscribe: function unsubscribe(){ closeSubscription(this); }
+});
+
+var SubscriptionObserver = function(subscription){
+  this._s = subscription;
+};
+
+SubscriptionObserver.prototype = redefineAll({}, {
+  next: function next(value){
+    var subscription = this._s;
+    if(!subscriptionClosed(subscription)){
+      var observer = subscription._o;
+      try {
+        var m = getMethod(observer.next);
+        if(m)return m.call(observer, value);
+      } catch(e){
+        try {
+          closeSubscription(subscription);
+        } finally {
+          throw e;
+        }
+      }
+    }
+  },
+  error: function error(value){
+    var subscription = this._s;
+    if(subscriptionClosed(subscription))throw value;
+    var observer = subscription._o;
+    subscription._o = undefined;
+    try {
+      var m = getMethod(observer.error);
+      if(!m)throw value;
+      value = m.call(observer, value);
+    } catch(e){
+      try {
+        cleanupSubscription(subscription);
+      } finally {
+        throw e;
+      }
+    } cleanupSubscription(subscription);
+    return value;
+  },
+  complete: function complete(value){
+    var subscription = this._s;
+    if(!subscriptionClosed(subscription)){
+      var observer = subscription._o;
+      subscription._o = undefined;
+      try {
+        var m = getMethod(observer.complete);
+        value = m ? m.call(observer, value) : undefined;
+      } catch(e){
+        try {
+          cleanupSubscription(subscription);
+        } finally {
+          throw e;
+        }
+      } cleanupSubscription(subscription);
+      return value;
+    }
+  }
+});
+
+var $Observable = function Observable(subscriber){
+  anInstance(this, $Observable, 'Observable', '_f')._f = aFunction(subscriber);
+};
+
+redefineAll($Observable.prototype, {
+  subscribe: function subscribe(observer){
+    return new Subscription(observer, this._f);
+  },
+  forEach: function forEach(fn){
+    var that = this;
+    return new (core.Promise || global.Promise)(function(resolve, reject){
+      aFunction(fn);
+      var subscription = that.subscribe({
+        next : function(value){
+          try {
+            return fn(value);
+          } catch(e){
+            reject(e);
+            subscription.unsubscribe();
+          }
+        },
+        error: reject,
+        complete: resolve
+      });
+    });
+  }
+});
+
+redefineAll($Observable, {
+  from: function from(x){
+    var C = typeof this === 'function' ? this : $Observable;
+    var method = getMethod(anObject(x)[OBSERVABLE]);
+    if(method){
+      var observable = anObject(method.call(x));
+      return observable.constructor === C ? observable : new C(function(observer){
+        return observable.subscribe(observer);
+      });
+    }
+    return new C(function(observer){
+      var done = false;
+      microtask(function(){
+        if(!done){
+          try {
+            if(forOf(x, false, function(it){
+              observer.next(it);
+              if(done)return RETURN;
+            }) === RETURN)return;
+          } catch(e){
+            if(done)throw e;
+            observer.error(e);
+            return;
+          } observer.complete();
+        }
+      });
+      return function(){ done = true; };
+    });
+  },
+  of: function of(){
+    for(var i = 0, l = arguments.length, items = Array(l); i < l;)items[i] = arguments[i++];
+    return new (typeof this === 'function' ? this : $Observable)(function(observer){
+      var done = false;
+      microtask(function(){
+        if(!done){
+          for(var i = 0; i < items.length; ++i){
+            observer.next(items[i]);
+            if(done)return;
+          } observer.complete();
+        }
+      });
+      return function(){ done = true; };
+    });
+  }
+});
+
+hide($Observable.prototype, OBSERVABLE, function(){ return this; });
+
+$export($export.G, {Observable: $Observable});
+
+require('./_set-species')('Observable');
+},{"./_a-function":4,"./_an-instance":7,"./_an-object":8,"./_core":24,"./_export":33,"./_for-of":38,"./_global":39,"./_hide":41,"./_microtask":65,"./_redefine-all":87,"./_set-species":92,"./_wks":118}],275:[function(require,module,exports){
+var metadata                  = require('./_metadata')
+  , anObject                  = require('./_an-object')
+  , toMetaKey                 = metadata.key
+  , ordinaryDefineOwnMetadata = metadata.set;
+
+metadata.exp({defineMetadata: function defineMetadata(metadataKey, metadataValue, target, targetKey){
+  ordinaryDefineOwnMetadata(metadataKey, metadataValue, anObject(target), toMetaKey(targetKey));
+}});
+},{"./_an-object":8,"./_metadata":64}],276:[function(require,module,exports){
+var metadata               = require('./_metadata')
+  , anObject               = require('./_an-object')
+  , toMetaKey              = metadata.key
+  , getOrCreateMetadataMap = metadata.map
+  , store                  = metadata.store;
+
+metadata.exp({deleteMetadata: function deleteMetadata(metadataKey, target /*, targetKey */){
+  var targetKey   = arguments.length < 3 ? undefined : toMetaKey(arguments[2])
+    , metadataMap = getOrCreateMetadataMap(anObject(target), targetKey, false);
+  if(metadataMap === undefined || !metadataMap['delete'](metadataKey))return false;
+  if(metadataMap.size)return true;
+  var targetMetadata = store.get(target);
+  targetMetadata['delete'](targetKey);
+  return !!targetMetadata.size || store['delete'](target);
+}});
+},{"./_an-object":8,"./_metadata":64}],277:[function(require,module,exports){
+var Set                     = require('./es6.set')
+  , from                    = require('./_array-from-iterable')
+  , metadata                = require('./_metadata')
+  , anObject                = require('./_an-object')
+  , getPrototypeOf          = require('./_object-gpo')
+  , ordinaryOwnMetadataKeys = metadata.keys
+  , toMetaKey               = metadata.key;
+
+var ordinaryMetadataKeys = function(O, P){
+  var oKeys  = ordinaryOwnMetadataKeys(O, P)
+    , parent = getPrototypeOf(O);
+  if(parent === null)return oKeys;
+  var pKeys  = ordinaryMetadataKeys(parent, P);
+  return pKeys.length ? oKeys.length ? from(new Set(oKeys.concat(pKeys))) : pKeys : oKeys;
+};
+
+metadata.exp({getMetadataKeys: function getMetadataKeys(target /*, targetKey */){
+  return ordinaryMetadataKeys(anObject(target), arguments.length < 2 ? undefined : toMetaKey(arguments[1]));
+}});
+},{"./_an-object":8,"./_array-from-iterable":11,"./_metadata":64,"./_object-gpo":75,"./es6.set":222}],278:[function(require,module,exports){
+var metadata               = require('./_metadata')
+  , anObject               = require('./_an-object')
+  , getPrototypeOf         = require('./_object-gpo')
+  , ordinaryHasOwnMetadata = metadata.has
+  , ordinaryGetOwnMetadata = metadata.get
+  , toMetaKey              = metadata.key;
+
+var ordinaryGetMetadata = function(MetadataKey, O, P){
+  var hasOwn = ordinaryHasOwnMetadata(MetadataKey, O, P);
+  if(hasOwn)return ordinaryGetOwnMetadata(MetadataKey, O, P);
+  var parent = getPrototypeOf(O);
+  return parent !== null ? ordinaryGetMetadata(MetadataKey, parent, P) : undefined;
+};
+
+metadata.exp({getMetadata: function getMetadata(metadataKey, target /*, targetKey */){
+  return ordinaryGetMetadata(metadataKey, anObject(target), arguments.length < 3 ? undefined : toMetaKey(arguments[2]));
+}});
+},{"./_an-object":8,"./_metadata":64,"./_object-gpo":75}],279:[function(require,module,exports){
+var metadata                = require('./_metadata')
+  , anObject                = require('./_an-object')
+  , ordinaryOwnMetadataKeys = metadata.keys
+  , toMetaKey               = metadata.key;
+
+metadata.exp({getOwnMetadataKeys: function getOwnMetadataKeys(target /*, targetKey */){
+  return ordinaryOwnMetadataKeys(anObject(target), arguments.length < 2 ? undefined : toMetaKey(arguments[1]));
+}});
+},{"./_an-object":8,"./_metadata":64}],280:[function(require,module,exports){
+var metadata               = require('./_metadata')
+  , anObject               = require('./_an-object')
+  , ordinaryGetOwnMetadata = metadata.get
+  , toMetaKey              = metadata.key;
+
+metadata.exp({getOwnMetadata: function getOwnMetadata(metadataKey, target /*, targetKey */){
+  return ordinaryGetOwnMetadata(metadataKey, anObject(target)
+    , arguments.length < 3 ? undefined : toMetaKey(arguments[2]));
+}});
+},{"./_an-object":8,"./_metadata":64}],281:[function(require,module,exports){
+var metadata               = require('./_metadata')
+  , anObject               = require('./_an-object')
+  , getPrototypeOf         = require('./_object-gpo')
+  , ordinaryHasOwnMetadata = metadata.has
+  , toMetaKey              = metadata.key;
+
+var ordinaryHasMetadata = function(MetadataKey, O, P){
+  var hasOwn = ordinaryHasOwnMetadata(MetadataKey, O, P);
+  if(hasOwn)return true;
+  var parent = getPrototypeOf(O);
+  return parent !== null ? ordinaryHasMetadata(MetadataKey, parent, P) : false;
+};
+
+metadata.exp({hasMetadata: function hasMetadata(metadataKey, target /*, targetKey */){
+  return ordinaryHasMetadata(metadataKey, anObject(target), arguments.length < 3 ? undefined : toMetaKey(arguments[2]));
+}});
+},{"./_an-object":8,"./_metadata":64,"./_object-gpo":75}],282:[function(require,module,exports){
+var metadata               = require('./_metadata')
+  , anObject               = require('./_an-object')
+  , ordinaryHasOwnMetadata = metadata.has
+  , toMetaKey              = metadata.key;
+
+metadata.exp({hasOwnMetadata: function hasOwnMetadata(metadataKey, target /*, targetKey */){
+  return ordinaryHasOwnMetadata(metadataKey, anObject(target)
+    , arguments.length < 3 ? undefined : toMetaKey(arguments[2]));
+}});
+},{"./_an-object":8,"./_metadata":64}],283:[function(require,module,exports){
+var metadata                  = require('./_metadata')
+  , anObject                  = require('./_an-object')
+  , aFunction                 = require('./_a-function')
+  , toMetaKey                 = metadata.key
+  , ordinaryDefineOwnMetadata = metadata.set;
+
+metadata.exp({metadata: function metadata(metadataKey, metadataValue){
+  return function decorator(target, targetKey){
+    ordinaryDefineOwnMetadata(
+      metadataKey, metadataValue,
+      (targetKey !== undefined ? anObject : aFunction)(target),
+      toMetaKey(targetKey)
+    );
+  };
+}});
+},{"./_a-function":4,"./_an-object":8,"./_metadata":64}],284:[function(require,module,exports){
+// https://github.com/DavidBruant/Map-Set.prototype.toJSON
+var $export  = require('./_export');
+
+$export($export.P + $export.R, 'Set', {toJSON: require('./_collection-to-json')('Set')});
+},{"./_collection-to-json":21,"./_export":33}],285:[function(require,module,exports){
+'use strict';
+// https://github.com/mathiasbynens/String.prototype.at
+var $export = require('./_export')
+  , $at     = require('./_string-at')(true);
+
+$export($export.P, 'String', {
+  at: function at(pos){
+    return $at(this, pos);
+  }
+});
+},{"./_export":33,"./_string-at":98}],286:[function(require,module,exports){
+'use strict';
+// https://tc39.github.io/String.prototype.matchAll/
+var $export     = require('./_export')
+  , defined     = require('./_defined')
+  , toLength    = require('./_to-length')
+  , isRegExp    = require('./_is-regexp')
+  , getFlags    = require('./_flags')
+  , RegExpProto = RegExp.prototype;
+
+var $RegExpStringIterator = function(regexp, string){
+  this._r = regexp;
+  this._s = string;
+};
+
+require('./_iter-create')($RegExpStringIterator, 'RegExp String', function next(){
+  var match = this._r.exec(this._s);
+  return {value: match, done: match === null};
+});
+
+$export($export.P, 'String', {
+  matchAll: function matchAll(regexp){
+    defined(this);
+    if(!isRegExp(regexp))throw TypeError(regexp + ' is not a regexp!');
+    var S     = String(this)
+      , flags = 'flags' in RegExpProto ? String(regexp.flags) : getFlags.call(regexp)
+      , rx    = new RegExp(regexp.source, ~flags.indexOf('g') ? flags : 'g' + flags);
+    rx.lastIndex = toLength(regexp.lastIndex);
+    return new $RegExpStringIterator(rx, S);
+  }
+});
+},{"./_defined":28,"./_export":33,"./_flags":37,"./_is-regexp":51,"./_iter-create":53,"./_to-length":109}],287:[function(require,module,exports){
+'use strict';
+// https://github.com/tc39/proposal-string-pad-start-end
+var $export = require('./_export')
+  , $pad    = require('./_string-pad');
+
+$export($export.P, 'String', {
+  padEnd: function padEnd(maxLength /*, fillString = ' ' */){
+    return $pad(this, maxLength, arguments.length > 1 ? arguments[1] : undefined, false);
+  }
+});
+},{"./_export":33,"./_string-pad":101}],288:[function(require,module,exports){
+'use strict';
+// https://github.com/tc39/proposal-string-pad-start-end
+var $export = require('./_export')
+  , $pad    = require('./_string-pad');
+
+$export($export.P, 'String', {
+  padStart: function padStart(maxLength /*, fillString = ' ' */){
+    return $pad(this, maxLength, arguments.length > 1 ? arguments[1] : undefined, true);
+  }
+});
+},{"./_export":33,"./_string-pad":101}],289:[function(require,module,exports){
+'use strict';
+// https://github.com/sebmarkbage/ecmascript-string-left-right-trim
+require('./_string-trim')('trimLeft', function($trim){
+  return function trimLeft(){
+    return $trim(this, 1);
+  };
+}, 'trimStart');
+},{"./_string-trim":103}],290:[function(require,module,exports){
+'use strict';
+// https://github.com/sebmarkbage/ecmascript-string-left-right-trim
+require('./_string-trim')('trimRight', function($trim){
+  return function trimRight(){
+    return $trim(this, 2);
+  };
+}, 'trimEnd');
+},{"./_string-trim":103}],291:[function(require,module,exports){
+require('./_wks-define')('asyncIterator');
+},{"./_wks-define":116}],292:[function(require,module,exports){
+require('./_wks-define')('observable');
+},{"./_wks-define":116}],293:[function(require,module,exports){
+// https://github.com/ljharb/proposal-global
+var $export = require('./_export');
+
+$export($export.S, 'System', {global: require('./_global')});
+},{"./_export":33,"./_global":39}],294:[function(require,module,exports){
+var $iterators    = require('./es6.array.iterator')
+  , redefine      = require('./_redefine')
+  , global        = require('./_global')
+  , hide          = require('./_hide')
+  , Iterators     = require('./_iterators')
+  , wks           = require('./_wks')
+  , ITERATOR      = wks('iterator')
+  , TO_STRING_TAG = wks('toStringTag')
+  , ArrayValues   = Iterators.Array;
+
+for(var collections = ['NodeList', 'DOMTokenList', 'MediaList', 'StyleSheetList', 'CSSRuleList'], i = 0; i < 5; i++){
+  var NAME       = collections[i]
+    , Collection = global[NAME]
+    , proto      = Collection && Collection.prototype
+    , key;
+  if(proto){
+    if(!proto[ITERATOR])hide(proto, ITERATOR, ArrayValues);
+    if(!proto[TO_STRING_TAG])hide(proto, TO_STRING_TAG, NAME);
+    Iterators[NAME] = ArrayValues;
+    for(key in $iterators)if(!proto[key])redefine(proto, key, $iterators[key], true);
+  }
+}
+},{"./_global":39,"./_hide":41,"./_iterators":57,"./_redefine":88,"./_wks":118,"./es6.array.iterator":132}],295:[function(require,module,exports){
+var $export = require('./_export')
+  , $task   = require('./_task');
+$export($export.G + $export.B, {
+  setImmediate:   $task.set,
+  clearImmediate: $task.clear
+});
+},{"./_export":33,"./_task":105}],296:[function(require,module,exports){
+// ie9- setTimeout & setInterval additional parameters fix
+var global     = require('./_global')
+  , $export    = require('./_export')
+  , invoke     = require('./_invoke')
+  , partial    = require('./_partial')
+  , navigator  = global.navigator
+  , MSIE       = !!navigator && /MSIE .\./.test(navigator.userAgent); // <- dirty ie9- check
+var wrap = function(set){
+  return MSIE ? function(fn, time /*, ...args */){
+    return set(invoke(
+      partial,
+      [].slice.call(arguments, 2),
+      typeof fn == 'function' ? fn : Function(fn)
+    ), time);
+  } : set;
+};
+$export($export.G + $export.B + $export.F * MSIE, {
+  setTimeout:  wrap(global.setTimeout),
+  setInterval: wrap(global.setInterval)
+});
+},{"./_export":33,"./_global":39,"./_invoke":45,"./_partial":84}],297:[function(require,module,exports){
+require('./modules/es6.symbol');
+require('./modules/es6.object.create');
+require('./modules/es6.object.define-property');
+require('./modules/es6.object.define-properties');
+require('./modules/es6.object.get-own-property-descriptor');
+require('./modules/es6.object.get-prototype-of');
+require('./modules/es6.object.keys');
+require('./modules/es6.object.get-own-property-names');
+require('./modules/es6.object.freeze');
+require('./modules/es6.object.seal');
+require('./modules/es6.object.prevent-extensions');
+require('./modules/es6.object.is-frozen');
+require('./modules/es6.object.is-sealed');
+require('./modules/es6.object.is-extensible');
+require('./modules/es6.object.assign');
+require('./modules/es6.object.is');
+require('./modules/es6.object.set-prototype-of');
+require('./modules/es6.object.to-string');
+require('./modules/es6.function.bind');
+require('./modules/es6.function.name');
+require('./modules/es6.function.has-instance');
+require('./modules/es6.parse-int');
+require('./modules/es6.parse-float');
+require('./modules/es6.number.constructor');
+require('./modules/es6.number.to-fixed');
+require('./modules/es6.number.to-precision');
+require('./modules/es6.number.epsilon');
+require('./modules/es6.number.is-finite');
+require('./modules/es6.number.is-integer');
+require('./modules/es6.number.is-nan');
+require('./modules/es6.number.is-safe-integer');
+require('./modules/es6.number.max-safe-integer');
+require('./modules/es6.number.min-safe-integer');
+require('./modules/es6.number.parse-float');
+require('./modules/es6.number.parse-int');
+require('./modules/es6.math.acosh');
+require('./modules/es6.math.asinh');
+require('./modules/es6.math.atanh');
+require('./modules/es6.math.cbrt');
+require('./modules/es6.math.clz32');
+require('./modules/es6.math.cosh');
+require('./modules/es6.math.expm1');
+require('./modules/es6.math.fround');
+require('./modules/es6.math.hypot');
+require('./modules/es6.math.imul');
+require('./modules/es6.math.log10');
+require('./modules/es6.math.log1p');
+require('./modules/es6.math.log2');
+require('./modules/es6.math.sign');
+require('./modules/es6.math.sinh');
+require('./modules/es6.math.tanh');
+require('./modules/es6.math.trunc');
+require('./modules/es6.string.from-code-point');
+require('./modules/es6.string.raw');
+require('./modules/es6.string.trim');
+require('./modules/es6.string.iterator');
+require('./modules/es6.string.code-point-at');
+require('./modules/es6.string.ends-with');
+require('./modules/es6.string.includes');
+require('./modules/es6.string.repeat');
+require('./modules/es6.string.starts-with');
+require('./modules/es6.string.anchor');
+require('./modules/es6.string.big');
+require('./modules/es6.string.blink');
+require('./modules/es6.string.bold');
+require('./modules/es6.string.fixed');
+require('./modules/es6.string.fontcolor');
+require('./modules/es6.string.fontsize');
+require('./modules/es6.string.italics');
+require('./modules/es6.string.link');
+require('./modules/es6.string.small');
+require('./modules/es6.string.strike');
+require('./modules/es6.string.sub');
+require('./modules/es6.string.sup');
+require('./modules/es6.date.now');
+require('./modules/es6.date.to-json');
+require('./modules/es6.date.to-iso-string');
+require('./modules/es6.date.to-string');
+require('./modules/es6.date.to-primitive');
+require('./modules/es6.array.is-array');
+require('./modules/es6.array.from');
+require('./modules/es6.array.of');
+require('./modules/es6.array.join');
+require('./modules/es6.array.slice');
+require('./modules/es6.array.sort');
+require('./modules/es6.array.for-each');
+require('./modules/es6.array.map');
+require('./modules/es6.array.filter');
+require('./modules/es6.array.some');
+require('./modules/es6.array.every');
+require('./modules/es6.array.reduce');
+require('./modules/es6.array.reduce-right');
+require('./modules/es6.array.index-of');
+require('./modules/es6.array.last-index-of');
+require('./modules/es6.array.copy-within');
+require('./modules/es6.array.fill');
+require('./modules/es6.array.find');
+require('./modules/es6.array.find-index');
+require('./modules/es6.array.species');
+require('./modules/es6.array.iterator');
+require('./modules/es6.regexp.constructor');
+require('./modules/es6.regexp.to-string');
+require('./modules/es6.regexp.flags');
+require('./modules/es6.regexp.match');
+require('./modules/es6.regexp.replace');
+require('./modules/es6.regexp.search');
+require('./modules/es6.regexp.split');
+require('./modules/es6.promise');
+require('./modules/es6.map');
+require('./modules/es6.set');
+require('./modules/es6.weak-map');
+require('./modules/es6.weak-set');
+require('./modules/es6.typed.array-buffer');
+require('./modules/es6.typed.data-view');
+require('./modules/es6.typed.int8-array');
+require('./modules/es6.typed.uint8-array');
+require('./modules/es6.typed.uint8-clamped-array');
+require('./modules/es6.typed.int16-array');
+require('./modules/es6.typed.uint16-array');
+require('./modules/es6.typed.int32-array');
+require('./modules/es6.typed.uint32-array');
+require('./modules/es6.typed.float32-array');
+require('./modules/es6.typed.float64-array');
+require('./modules/es6.reflect.apply');
+require('./modules/es6.reflect.construct');
+require('./modules/es6.reflect.define-property');
+require('./modules/es6.reflect.delete-property');
+require('./modules/es6.reflect.enumerate');
+require('./modules/es6.reflect.get');
+require('./modules/es6.reflect.get-own-property-descriptor');
+require('./modules/es6.reflect.get-prototype-of');
+require('./modules/es6.reflect.has');
+require('./modules/es6.reflect.is-extensible');
+require('./modules/es6.reflect.own-keys');
+require('./modules/es6.reflect.prevent-extensions');
+require('./modules/es6.reflect.set');
+require('./modules/es6.reflect.set-prototype-of');
+require('./modules/es7.array.includes');
+require('./modules/es7.string.at');
+require('./modules/es7.string.pad-start');
+require('./modules/es7.string.pad-end');
+require('./modules/es7.string.trim-left');
+require('./modules/es7.string.trim-right');
+require('./modules/es7.string.match-all');
+require('./modules/es7.symbol.async-iterator');
+require('./modules/es7.symbol.observable');
+require('./modules/es7.object.get-own-property-descriptors');
+require('./modules/es7.object.values');
+require('./modules/es7.object.entries');
+require('./modules/es7.object.define-getter');
+require('./modules/es7.object.define-setter');
+require('./modules/es7.object.lookup-getter');
+require('./modules/es7.object.lookup-setter');
+require('./modules/es7.map.to-json');
+require('./modules/es7.set.to-json');
+require('./modules/es7.system.global');
+require('./modules/es7.error.is-error');
+require('./modules/es7.math.iaddh');
+require('./modules/es7.math.isubh');
+require('./modules/es7.math.imulh');
+require('./modules/es7.math.umulh');
+require('./modules/es7.reflect.define-metadata');
+require('./modules/es7.reflect.delete-metadata');
+require('./modules/es7.reflect.get-metadata');
+require('./modules/es7.reflect.get-metadata-keys');
+require('./modules/es7.reflect.get-own-metadata');
+require('./modules/es7.reflect.get-own-metadata-keys');
+require('./modules/es7.reflect.has-metadata');
+require('./modules/es7.reflect.has-own-metadata');
+require('./modules/es7.reflect.metadata');
+require('./modules/es7.asap');
+require('./modules/es7.observable');
+require('./modules/web.timers');
+require('./modules/web.immediate');
+require('./modules/web.dom.iterable');
+module.exports = require('./modules/_core');
+},{"./modules/_core":24,"./modules/es6.array.copy-within":122,"./modules/es6.array.every":123,"./modules/es6.array.fill":124,"./modules/es6.array.filter":125,"./modules/es6.array.find":127,"./modules/es6.array.find-index":126,"./modules/es6.array.for-each":128,"./modules/es6.array.from":129,"./modules/es6.array.index-of":130,"./modules/es6.array.is-array":131,"./modules/es6.array.iterator":132,"./modules/es6.array.join":133,"./modules/es6.array.last-index-of":134,"./modules/es6.array.map":135,"./modules/es6.array.of":136,"./modules/es6.array.reduce":138,"./modules/es6.array.reduce-right":137,"./modules/es6.array.slice":139,"./modules/es6.array.some":140,"./modules/es6.array.sort":141,"./modules/es6.array.species":142,"./modules/es6.date.now":143,"./modules/es6.date.to-iso-string":144,"./modules/es6.date.to-json":145,"./modules/es6.date.to-primitive":146,"./modules/es6.date.to-string":147,"./modules/es6.function.bind":148,"./modules/es6.function.has-instance":149,"./modules/es6.function.name":150,"./modules/es6.map":151,"./modules/es6.math.acosh":152,"./modules/es6.math.asinh":153,"./modules/es6.math.atanh":154,"./modules/es6.math.cbrt":155,"./modules/es6.math.clz32":156,"./modules/es6.math.cosh":157,"./modules/es6.math.expm1":158,"./modules/es6.math.fround":159,"./modules/es6.math.hypot":160,"./modules/es6.math.imul":161,"./modules/es6.math.log10":162,"./modules/es6.math.log1p":163,"./modules/es6.math.log2":164,"./modules/es6.math.sign":165,"./modules/es6.math.sinh":166,"./modules/es6.math.tanh":167,"./modules/es6.math.trunc":168,"./modules/es6.number.constructor":169,"./modules/es6.number.epsilon":170,"./modules/es6.number.is-finite":171,"./modules/es6.number.is-integer":172,"./modules/es6.number.is-nan":173,"./modules/es6.number.is-safe-integer":174,"./modules/es6.number.max-safe-integer":175,"./modules/es6.number.min-safe-integer":176,"./modules/es6.number.parse-float":177,"./modules/es6.number.parse-int":178,"./modules/es6.number.to-fixed":179,"./modules/es6.number.to-precision":180,"./modules/es6.object.assign":181,"./modules/es6.object.create":182,"./modules/es6.object.define-properties":183,"./modules/es6.object.define-property":184,"./modules/es6.object.freeze":185,"./modules/es6.object.get-own-property-descriptor":186,"./modules/es6.object.get-own-property-names":187,"./modules/es6.object.get-prototype-of":188,"./modules/es6.object.is":192,"./modules/es6.object.is-extensible":189,"./modules/es6.object.is-frozen":190,"./modules/es6.object.is-sealed":191,"./modules/es6.object.keys":193,"./modules/es6.object.prevent-extensions":194,"./modules/es6.object.seal":195,"./modules/es6.object.set-prototype-of":196,"./modules/es6.object.to-string":197,"./modules/es6.parse-float":198,"./modules/es6.parse-int":199,"./modules/es6.promise":200,"./modules/es6.reflect.apply":201,"./modules/es6.reflect.construct":202,"./modules/es6.reflect.define-property":203,"./modules/es6.reflect.delete-property":204,"./modules/es6.reflect.enumerate":205,"./modules/es6.reflect.get":208,"./modules/es6.reflect.get-own-property-descriptor":206,"./modules/es6.reflect.get-prototype-of":207,"./modules/es6.reflect.has":209,"./modules/es6.reflect.is-extensible":210,"./modules/es6.reflect.own-keys":211,"./modules/es6.reflect.prevent-extensions":212,"./modules/es6.reflect.set":214,"./modules/es6.reflect.set-prototype-of":213,"./modules/es6.regexp.constructor":215,"./modules/es6.regexp.flags":216,"./modules/es6.regexp.match":217,"./modules/es6.regexp.replace":218,"./modules/es6.regexp.search":219,"./modules/es6.regexp.split":220,"./modules/es6.regexp.to-string":221,"./modules/es6.set":222,"./modules/es6.string.anchor":223,"./modules/es6.string.big":224,"./modules/es6.string.blink":225,"./modules/es6.string.bold":226,"./modules/es6.string.code-point-at":227,"./modules/es6.string.ends-with":228,"./modules/es6.string.fixed":229,"./modules/es6.string.fontcolor":230,"./modules/es6.string.fontsize":231,"./modules/es6.string.from-code-point":232,"./modules/es6.string.includes":233,"./modules/es6.string.italics":234,"./modules/es6.string.iterator":235,"./modules/es6.string.link":236,"./modules/es6.string.raw":237,"./modules/es6.string.repeat":238,"./modules/es6.string.small":239,"./modules/es6.string.starts-with":240,"./modules/es6.string.strike":241,"./modules/es6.string.sub":242,"./modules/es6.string.sup":243,"./modules/es6.string.trim":244,"./modules/es6.symbol":245,"./modules/es6.typed.array-buffer":246,"./modules/es6.typed.data-view":247,"./modules/es6.typed.float32-array":248,"./modules/es6.typed.float64-array":249,"./modules/es6.typed.int16-array":250,"./modules/es6.typed.int32-array":251,"./modules/es6.typed.int8-array":252,"./modules/es6.typed.uint16-array":253,"./modules/es6.typed.uint32-array":254,"./modules/es6.typed.uint8-array":255,"./modules/es6.typed.uint8-clamped-array":256,"./modules/es6.weak-map":257,"./modules/es6.weak-set":258,"./modules/es7.array.includes":259,"./modules/es7.asap":260,"./modules/es7.error.is-error":261,"./modules/es7.map.to-json":262,"./modules/es7.math.iaddh":263,"./modules/es7.math.imulh":264,"./modules/es7.math.isubh":265,"./modules/es7.math.umulh":266,"./modules/es7.object.define-getter":267,"./modules/es7.object.define-setter":268,"./modules/es7.object.entries":269,"./modules/es7.object.get-own-property-descriptors":270,"./modules/es7.object.lookup-getter":271,"./modules/es7.object.lookup-setter":272,"./modules/es7.object.values":273,"./modules/es7.observable":274,"./modules/es7.reflect.define-metadata":275,"./modules/es7.reflect.delete-metadata":276,"./modules/es7.reflect.get-metadata":278,"./modules/es7.reflect.get-metadata-keys":277,"./modules/es7.reflect.get-own-metadata":280,"./modules/es7.reflect.get-own-metadata-keys":279,"./modules/es7.reflect.has-metadata":281,"./modules/es7.reflect.has-own-metadata":282,"./modules/es7.reflect.metadata":283,"./modules/es7.set.to-json":284,"./modules/es7.string.at":285,"./modules/es7.string.match-all":286,"./modules/es7.string.pad-end":287,"./modules/es7.string.pad-start":288,"./modules/es7.string.trim-left":289,"./modules/es7.string.trim-right":290,"./modules/es7.symbol.async-iterator":291,"./modules/es7.symbol.observable":292,"./modules/es7.system.global":293,"./modules/web.dom.iterable":294,"./modules/web.immediate":295,"./modules/web.timers":296}],298:[function(require,module,exports){
+(function (global){
+/*!
+ * The buffer module from node.js, for the browser.
+ *
+ * @author   Feross Aboukhadijeh <feross@feross.org> <http://feross.org>
+ * @license  MIT
+ */
+/* eslint-disable no-proto */
+
+'use strict'
+
+var base64 = require('base64-js')
+var ieee754 = require('ieee754')
+var isArray = require('isarray')
+
+exports.Buffer = Buffer
+exports.SlowBuffer = SlowBuffer
+exports.INSPECT_MAX_BYTES = 50
+
+/**
+ * If `Buffer.TYPED_ARRAY_SUPPORT`:
+ *   === true    Use Uint8Array implementation (fastest)
+ *   === false   Use Object implementation (most compatible, even IE6)
+ *
+ * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,
+ * Opera 11.6+, iOS 4.2+.
+ *
+ * Due to various browser bugs, sometimes the Object implementation will be used even
+ * when the browser supports typed arrays.
+ *
+ * Note:
+ *
+ *   - Firefox 4-29 lacks support for adding new properties to `Uint8Array` instances,
+ *     See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438.
+ *
+ *   - Chrome 9-10 is missing the `TypedArray.prototype.subarray` function.
+ *
+ *   - IE10 has a broken `TypedArray.prototype.subarray` function which returns arrays of
+ *     incorrect length in some situations.
+
+ * We detect these buggy browsers and set `Buffer.TYPED_ARRAY_SUPPORT` to `false` so they
+ * get the Object implementation, which is slower but behaves correctly.
+ */
+Buffer.TYPED_ARRAY_SUPPORT = global.TYPED_ARRAY_SUPPORT !== undefined
+  ? global.TYPED_ARRAY_SUPPORT
+  : typedArraySupport()
+
+/*
+ * Export kMaxLength after typed array support is determined.
+ */
+exports.kMaxLength = kMaxLength()
+
+function typedArraySupport () {
+  try {
+    var arr = new Uint8Array(1)
+    arr.foo = function () { return 42 }
+    return arr.foo() === 42 && // typed array instances can be augmented
+        typeof arr.subarray === 'function' && // chrome 9-10 lack `subarray`
+        arr.subarray(1, 1).byteLength === 0 // ie10 has broken `subarray`
+  } catch (e) {
+    return false
+  }
+}
+
+function kMaxLength () {
+  return Buffer.TYPED_ARRAY_SUPPORT
+    ? 0x7fffffff
+    : 0x3fffffff
+}
+
+function createBuffer (that, length) {
+  if (kMaxLength() < length) {
+    throw new RangeError('Invalid typed array length')
+  }
+  if (Buffer.TYPED_ARRAY_SUPPORT) {
+    // Return an augmented `Uint8Array` instance, for best performance
+    that = new Uint8Array(length)
+    that.__proto__ = Buffer.prototype
+  } else {
+    // Fallback: Return an object instance of the Buffer class
+    if (that === null) {
+      that = new Buffer(length)
+    }
+    that.length = length
+  }
+
+  return that
+}
+
+/**
+ * The Buffer constructor returns instances of `Uint8Array` that have their
+ * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of
+ * `Uint8Array`, so the returned instances will have all the node `Buffer` methods
+ * and the `Uint8Array` methods. Square bracket notation works as expected -- it
+ * returns a single octet.
+ *
+ * The `Uint8Array` prototype remains unmodified.
+ */
+
+function Buffer (arg, encodingOrOffset, length) {
+  if (!Buffer.TYPED_ARRAY_SUPPORT && !(this instanceof Buffer)) {
+    return new Buffer(arg, encodingOrOffset, length)
+  }
+
+  // Common case.
+  if (typeof arg === 'number') {
+    if (typeof encodingOrOffset === 'string') {
+      throw new Error(
+        'If encoding is specified then the first argument must be a string'
+      )
+    }
+    return allocUnsafe(this, arg)
+  }
+  return from(this, arg, encodingOrOffset, length)
+}
+
+Buffer.poolSize = 8192 // not used by this implementation
+
+// TODO: Legacy, not needed anymore. Remove in next major version.
+Buffer._augment = function (arr) {
+  arr.__proto__ = Buffer.prototype
+  return arr
+}
+
+function from (that, value, encodingOrOffset, length) {
+  if (typeof value === 'number') {
+    throw new TypeError('"value" argument must not be a number')
+  }
+
+  if (typeof ArrayBuffer !== 'undefined' && value instanceof ArrayBuffer) {
+    return fromArrayBuffer(that, value, encodingOrOffset, length)
+  }
+
+  if (typeof value === 'string') {
+    return fromString(that, value, encodingOrOffset)
+  }
+
+  return fromObject(that, value)
+}
+
+/**
+ * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError
+ * if value is a number.
+ * Buffer.from(str[, encoding])
+ * Buffer.from(array)
+ * Buffer.from(buffer)
+ * Buffer.from(arrayBuffer[, byteOffset[, length]])
+ **/
+Buffer.from = function (value, encodingOrOffset, length) {
+  return from(null, value, encodingOrOffset, length)
+}
+
+if (Buffer.TYPED_ARRAY_SUPPORT) {
+  Buffer.prototype.__proto__ = Uint8Array.prototype
+  Buffer.__proto__ = Uint8Array
+  if (typeof Symbol !== 'undefined' && Symbol.species &&
+      Buffer[Symbol.species] === Buffer) {
+    // Fix subarray() in ES2016. See: https://github.com/feross/buffer/pull/97
+    Object.defineProperty(Buffer, Symbol.species, {
+      value: null,
+      configurable: true
+    })
+  }
+}
+
+function assertSize (size) {
+  if (typeof size !== 'number') {
+    throw new TypeError('"size" argument must be a number')
+  }
+}
+
+function alloc (that, size, fill, encoding) {
+  assertSize(size)
+  if (size <= 0) {
+    return createBuffer(that, size)
+  }
+  if (fill !== undefined) {
+    // Only pay attention to encoding if it's a string. This
+    // prevents accidentally sending in a number that would
+    // be interpretted as a start offset.
+    return typeof encoding === 'string'
+      ? createBuffer(that, size).fill(fill, encoding)
+      : createBuffer(that, size).fill(fill)
+  }
+  return createBuffer(that, size)
+}
+
+/**
+ * Creates a new filled Buffer instance.
+ * alloc(size[, fill[, encoding]])
+ **/
+Buffer.alloc = function (size, fill, encoding) {
+  return alloc(null, size, fill, encoding)
+}
+
+function allocUnsafe (that, size) {
+  assertSize(size)
+  that = createBuffer(that, size < 0 ? 0 : checked(size) | 0)
+  if (!Buffer.TYPED_ARRAY_SUPPORT) {
+    for (var i = 0; i < size; i++) {
+      that[i] = 0
+    }
+  }
+  return that
+}
+
+/**
+ * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.
+ * */
+Buffer.allocUnsafe = function (size) {
+  return allocUnsafe(null, size)
+}
+/**
+ * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.
+ */
+Buffer.allocUnsafeSlow = function (size) {
+  return allocUnsafe(null, size)
+}
+
+function fromString (that, string, encoding) {
+  if (typeof encoding !== 'string' || encoding === '') {
+    encoding = 'utf8'
+  }
+
+  if (!Buffer.isEncoding(encoding)) {
+    throw new TypeError('"encoding" must be a valid string encoding')
+  }
+
+  var length = byteLength(string, encoding) | 0
+  that = createBuffer(that, length)
+
+  that.write(string, encoding)
+  return that
+}
+
+function fromArrayLike (that, array) {
+  var length = checked(array.length) | 0
+  that = createBuffer(that, length)
+  for (var i = 0; i < length; i += 1) {
+    that[i] = array[i] & 255
+  }
+  return that
+}
+
+function fromArrayBuffer (that, array, byteOffset, length) {
+  array.byteLength // this throws if `array` is not a valid ArrayBuffer
+
+  if (byteOffset < 0 || array.byteLength < byteOffset) {
+    throw new RangeError('\'offset\' is out of bounds')
+  }
+
+  if (array.byteLength < byteOffset + (length || 0)) {
+    throw new RangeError('\'length\' is out of bounds')
+  }
+
+  if (length === undefined) {
+    array = new Uint8Array(array, byteOffset)
+  } else {
+    array = new Uint8Array(array, byteOffset, length)
+  }
+
+  if (Buffer.TYPED_ARRAY_SUPPORT) {
+    // Return an augmented `Uint8Array` instance, for best performance
+    that = array
+    that.__proto__ = Buffer.prototype
+  } else {
+    // Fallback: Return an object instance of the Buffer class
+    that = fromArrayLike(that, array)
+  }
+  return that
+}
+
+function fromObject (that, obj) {
+  if (Buffer.isBuffer(obj)) {
+    var len = checked(obj.length) | 0
+    that = createBuffer(that, len)
+
+    if (that.length === 0) {
+      return that
+    }
+
+    obj.copy(that, 0, 0, len)
+    return that
+  }
+
+  if (obj) {
+    if ((typeof ArrayBuffer !== 'undefined' &&
+        obj.buffer instanceof ArrayBuffer) || 'length' in obj) {
+      if (typeof obj.length !== 'number' || isnan(obj.length)) {
+        return createBuffer(that, 0)
+      }
+      return fromArrayLike(that, obj)
+    }
+
+    if (obj.type === 'Buffer' && isArray(obj.data)) {
+      return fromArrayLike(that, obj.data)
+    }
+  }
+
+  throw new TypeError('First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.')
+}
+
+function checked (length) {
+  // Note: cannot use `length < kMaxLength` here because that fails when
+  // length is NaN (which is otherwise coerced to zero.)
+  if (length >= kMaxLength()) {
+    throw new RangeError('Attempt to allocate Buffer larger than maximum ' +
+                         'size: 0x' + kMaxLength().toString(16) + ' bytes')
+  }
+  return length | 0
+}
+
+function SlowBuffer (length) {
+  if (+length != length) { // eslint-disable-line eqeqeq
+    length = 0
+  }
+  return Buffer.alloc(+length)
+}
+
+Buffer.isBuffer = function isBuffer (b) {
+  return !!(b != null && b._isBuffer)
+}
+
+Buffer.compare = function compare (a, b) {
+  if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {
+    throw new TypeError('Arguments must be Buffers')
+  }
+
+  if (a === b) return 0
+
+  var x = a.length
+  var y = b.length
+
+  for (var i = 0, len = Math.min(x, y); i < len; ++i) {
+    if (a[i] !== b[i]) {
+      x = a[i]
+      y = b[i]
+      break
+    }
+  }
+
+  if (x < y) return -1
+  if (y < x) return 1
+  return 0
+}
+
+Buffer.isEncoding = function isEncoding (encoding) {
+  switch (String(encoding).toLowerCase()) {
+    case 'hex':
+    case 'utf8':
+    case 'utf-8':
+    case 'ascii':
+    case 'binary':
+    case 'base64':
+    case 'raw':
+    case 'ucs2':
+    case 'ucs-2':
+    case 'utf16le':
+    case 'utf-16le':
+      return true
+    default:
+      return false
+  }
+}
+
+Buffer.concat = function concat (list, length) {
+  if (!isArray(list)) {
+    throw new TypeError('"list" argument must be an Array of Buffers')
+  }
+
+  if (list.length === 0) {
+    return Buffer.alloc(0)
+  }
+
+  var i
+  if (length === undefined) {
+    length = 0
+    for (i = 0; i < list.length; i++) {
+      length += list[i].length
+    }
+  }
+
+  var buffer = Buffer.allocUnsafe(length)
+  var pos = 0
+  for (i = 0; i < list.length; i++) {
+    var buf = list[i]
+    if (!Buffer.isBuffer(buf)) {
+      throw new TypeError('"list" argument must be an Array of Buffers')
+    }
+    buf.copy(buffer, pos)
+    pos += buf.length
+  }
+  return buffer
+}
+
+function byteLength (string, encoding) {
+  if (Buffer.isBuffer(string)) {
+    return string.length
+  }
+  if (typeof ArrayBuffer !== 'undefined' && typeof ArrayBuffer.isView === 'function' &&
+      (ArrayBuffer.isView(string) || string instanceof ArrayBuffer)) {
+    return string.byteLength
+  }
+  if (typeof string !== 'string') {
+    string = '' + string
+  }
+
+  var len = string.length
+  if (len === 0) return 0
+
+  // Use a for loop to avoid recursion
+  var loweredCase = false
+  for (;;) {
+    switch (encoding) {
+      case 'ascii':
+      case 'binary':
+      // Deprecated
+      case 'raw':
+      case 'raws':
+        return len
+      case 'utf8':
+      case 'utf-8':
+      case undefined:
+        return utf8ToBytes(string).length
+      case 'ucs2':
+      case 'ucs-2':
+      case 'utf16le':
+      case 'utf-16le':
+        return len * 2
+      case 'hex':
+        return len >>> 1
+      case 'base64':
+        return base64ToBytes(string).length
+      default:
+        if (loweredCase) return utf8ToBytes(string).length // assume utf8
+        encoding = ('' + encoding).toLowerCase()
+        loweredCase = true
+    }
+  }
+}
+Buffer.byteLength = byteLength
+
+function slowToString (encoding, start, end) {
+  var loweredCase = false
+
+  // No need to verify that "this.length <= MAX_UINT32" since it's a read-only
+  // property of a typed array.
+
+  // This behaves neither like String nor Uint8Array in that we set start/end
+  // to their upper/lower bounds if the value passed is out of range.
+  // undefined is handled specially as per ECMA-262 6th Edition,
+  // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.
+  if (start === undefined || start < 0) {
+    start = 0
+  }
+  // Return early if start > this.length. Done here to prevent potential uint32
+  // coercion fail below.
+  if (start > this.length) {
+    return ''
+  }
+
+  if (end === undefined || end > this.length) {
+    end = this.length
+  }
+
+  if (end <= 0) {
+    return ''
+  }
+
+  // Force coersion to uint32. This will also coerce falsey/NaN values to 0.
+  end >>>= 0
+  start >>>= 0
+
+  if (end <= start) {
+    return ''
+  }
+
+  if (!encoding) encoding = 'utf8'
+
+  while (true) {
+    switch (encoding) {
+      case 'hex':
+        return hexSlice(this, start, end)
+
+      case 'utf8':
+      case 'utf-8':
+        return utf8Slice(this, start, end)
+
+      case 'ascii':
+        return asciiSlice(this, start, end)
+
+      case 'binary':
+        return binarySlice(this, start, end)
+
+      case 'base64':
+        return base64Slice(this, start, end)
+
+      case 'ucs2':
+      case 'ucs-2':
+      case 'utf16le':
+      case 'utf-16le':
+        return utf16leSlice(this, start, end)
+
+      default:
+        if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
+        encoding = (encoding + '').toLowerCase()
+        loweredCase = true
+    }
+  }
+}
+
+// The property is used by `Buffer.isBuffer` and `is-buffer` (in Safari 5-7) to detect
+// Buffer instances.
+Buffer.prototype._isBuffer = true
+
+function swap (b, n, m) {
+  var i = b[n]
+  b[n] = b[m]
+  b[m] = i
+}
+
+Buffer.prototype.swap16 = function swap16 () {
+  var len = this.length
+  if (len % 2 !== 0) {
+    throw new RangeError('Buffer size must be a multiple of 16-bits')
+  }
+  for (var i = 0; i < len; i += 2) {
+    swap(this, i, i + 1)
+  }
+  return this
+}
+
+Buffer.prototype.swap32 = function swap32 () {
+  var len = this.length
+  if (len % 4 !== 0) {
+    throw new RangeError('Buffer size must be a multiple of 32-bits')
+  }
+  for (var i = 0; i < len; i += 4) {
+    swap(this, i, i + 3)
+    swap(this, i + 1, i + 2)
+  }
+  return this
+}
+
+Buffer.prototype.toString = function toString () {
+  var length = this.length | 0
+  if (length === 0) return ''
+  if (arguments.length === 0) return utf8Slice(this, 0, length)
+  return slowToString.apply(this, arguments)
+}
+
+Buffer.prototype.equals = function equals (b) {
+  if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')
+  if (this === b) return true
+  return Buffer.compare(this, b) === 0
+}
+
+Buffer.prototype.inspect = function inspect () {
+  var str = ''
+  var max = exports.INSPECT_MAX_BYTES
+  if (this.length > 0) {
+    str = this.toString('hex', 0, max).match(/.{2}/g).join(' ')
+    if (this.length > max) str += ' ... '
+  }
+  return '<Buffer ' + str + '>'
+}
+
+Buffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {
+  if (!Buffer.isBuffer(target)) {
+    throw new TypeError('Argument must be a Buffer')
+  }
+
+  if (start === undefined) {
+    start = 0
+  }
+  if (end === undefined) {
+    end = target ? target.length : 0
+  }
+  if (thisStart === undefined) {
+    thisStart = 0
+  }
+  if (thisEnd === undefined) {
+    thisEnd = this.length
+  }
+
+  if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {
+    throw new RangeError('out of range index')
+  }
+
+  if (thisStart >= thisEnd && start >= end) {
+    return 0
+  }
+  if (thisStart >= thisEnd) {
+    return -1
+  }
+  if (start >= end) {
+    return 1
+  }
+
+  start >>>= 0
+  end >>>= 0
+  thisStart >>>= 0
+  thisEnd >>>= 0
+
+  if (this === target) return 0
+
+  var x = thisEnd - thisStart
+  var y = end - start
+  var len = Math.min(x, y)
+
+  var thisCopy = this.slice(thisStart, thisEnd)
+  var targetCopy = target.slice(start, end)
+
+  for (var i = 0; i < len; ++i) {
+    if (thisCopy[i] !== targetCopy[i]) {
+      x = thisCopy[i]
+      y = targetCopy[i]
+      break
+    }
+  }
+
+  if (x < y) return -1
+  if (y < x) return 1
+  return 0
+}
+
+function arrayIndexOf (arr, val, byteOffset, encoding) {
+  var indexSize = 1
+  var arrLength = arr.length
+  var valLength = val.length
+
+  if (encoding !== undefined) {
+    encoding = String(encoding).toLowerCase()
+    if (encoding === 'ucs2' || encoding === 'ucs-2' ||
+        encoding === 'utf16le' || encoding === 'utf-16le') {
+      if (arr.length < 2 || val.length < 2) {
+        return -1
+      }
+      indexSize = 2
+      arrLength /= 2
+      valLength /= 2
+      byteOffset /= 2
+    }
+  }
+
+  function read (buf, i) {
+    if (indexSize === 1) {
+      return buf[i]
+    } else {
+      return buf.readUInt16BE(i * indexSize)
+    }
+  }
+
+  var foundIndex = -1
+  for (var i = 0; byteOffset + i < arrLength; i++) {
+    if (read(arr, byteOffset + i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {
+      if (foundIndex === -1) foundIndex = i
+      if (i - foundIndex + 1 === valLength) return (byteOffset + foundIndex) * indexSize
+    } else {
+      if (foundIndex !== -1) i -= i - foundIndex
+      foundIndex = -1
+    }
+  }
+  return -1
+}
+
+Buffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {
+  if (typeof byteOffset === 'string') {
+    encoding = byteOffset
+    byteOffset = 0
+  } else if (byteOffset > 0x7fffffff) {
+    byteOffset = 0x7fffffff
+  } else if (byteOffset < -0x80000000) {
+    byteOffset = -0x80000000
+  }
+  byteOffset >>= 0
+
+  if (this.length === 0) return -1
+  if (byteOffset >= this.length) return -1
+
+  // Negative offsets start from the end of the buffer
+  if (byteOffset < 0) byteOffset = Math.max(this.length + byteOffset, 0)
+
+  if (typeof val === 'string') {
+    val = Buffer.from(val, encoding)
+  }
+
+  if (Buffer.isBuffer(val)) {
+    // special case: looking for empty string/buffer always fails
+    if (val.length === 0) {
+      return -1
+    }
+    return arrayIndexOf(this, val, byteOffset, encoding)
+  }
+  if (typeof val === 'number') {
+    if (Buffer.TYPED_ARRAY_SUPPORT && Uint8Array.prototype.indexOf === 'function') {
+      return Uint8Array.prototype.indexOf.call(this, val, byteOffset)
+    }
+    return arrayIndexOf(this, [ val ], byteOffset, encoding)
+  }
+
+  throw new TypeError('val must be string, number or Buffer')
+}
+
+Buffer.prototype.includes = function includes (val, byteOffset, encoding) {
+  return this.indexOf(val, byteOffset, encoding) !== -1
+}
+
+function hexWrite (buf, string, offset, length) {
+  offset = Number(offset) || 0
+  var remaining = buf.length - offset
+  if (!length) {
+    length = remaining
+  } else {
+    length = Number(length)
+    if (length > remaining) {
+      length = remaining
+    }
+  }
+
+  // must be an even number of digits
+  var strLen = string.length
+  if (strLen % 2 !== 0) throw new Error('Invalid hex string')
+
+  if (length > strLen / 2) {
+    length = strLen / 2
+  }
+  for (var i = 0; i < length; i++) {
+    var parsed = parseInt(string.substr(i * 2, 2), 16)
+    if (isNaN(parsed)) return i
+    buf[offset + i] = parsed
+  }
+  return i
+}
+
+function utf8Write (buf, string, offset, length) {
+  return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)
+}
+
+function asciiWrite (buf, string, offset, length) {
+  return blitBuffer(asciiToBytes(string), buf, offset, length)
+}
+
+function binaryWrite (buf, string, offset, length) {
+  return asciiWrite(buf, string, offset, length)
+}
+
+function base64Write (buf, string, offset, length) {
+  return blitBuffer(base64ToBytes(string), buf, offset, length)
+}
+
+function ucs2Write (buf, string, offset, length) {
+  return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)
+}
+
+Buffer.prototype.write = function write (string, offset, length, encoding) {
+  // Buffer#write(string)
+  if (offset === undefined) {
+    encoding = 'utf8'
+    length = this.length
+    offset = 0
+  // Buffer#write(string, encoding)
+  } else if (length === undefined && typeof offset === 'string') {
+    encoding = offset
+    length = this.length
+    offset = 0
+  // Buffer#write(string, offset[, length][, encoding])
+  } else if (isFinite(offset)) {
+    offset = offset | 0
+    if (isFinite(length)) {
+      length = length | 0
+      if (encoding === undefined) encoding = 'utf8'
+    } else {
+      encoding = length
+      length = undefined
+    }
+  // legacy write(string, encoding, offset, length) - remove in v0.13
+  } else {
+    throw new Error(
+      'Buffer.write(string, encoding, offset[, length]) is no longer supported'
+    )
+  }
+
+  var remaining = this.length - offset
+  if (length === undefined || length > remaining) length = remaining
+
+  if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {
+    throw new RangeError('Attempt to write outside buffer bounds')
+  }
+
+  if (!encoding) encoding = 'utf8'
+
+  var loweredCase = false
+  for (;;) {
+    switch (encoding) {
+      case 'hex':
+        return hexWrite(this, string, offset, length)
+
+      case 'utf8':
+      case 'utf-8':
+        return utf8Write(this, string, offset, length)
+
+      case 'ascii':
+        return asciiWrite(this, string, offset, length)
+
+      case 'binary':
+        return binaryWrite(this, string, offset, length)
+
+      case 'base64':
+        // Warning: maxLength not taken into account in base64Write
+        return base64Write(this, string, offset, length)
+
+      case 'ucs2':
+      case 'ucs-2':
+      case 'utf16le':
+      case 'utf-16le':
+        return ucs2Write(this, string, offset, length)
+
+      default:
+        if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
+        encoding = ('' + encoding).toLowerCase()
+        loweredCase = true
+    }
+  }
+}
+
+Buffer.prototype.toJSON = function toJSON () {
+  return {
+    type: 'Buffer',
+    data: Array.prototype.slice.call(this._arr || this, 0)
+  }
+}
+
+function base64Slice (buf, start, end) {
+  if (start === 0 && end === buf.length) {
+    return base64.fromByteArray(buf)
+  } else {
+    return base64.fromByteArray(buf.slice(start, end))
+  }
+}
+
+function utf8Slice (buf, start, end) {
+  end = Math.min(buf.length, end)
+  var res = []
+
+  var i = start
+  while (i < end) {
+    var firstByte = buf[i]
+    var codePoint = null
+    var bytesPerSequence = (firstByte > 0xEF) ? 4
+      : (firstByte > 0xDF) ? 3
+      : (firstByte > 0xBF) ? 2
+      : 1
+
+    if (i + bytesPerSequence <= end) {
+      var secondByte, thirdByte, fourthByte, tempCodePoint
+
+      switch (bytesPerSequence) {
+        case 1:
+          if (firstByte < 0x80) {
+            codePoint = firstByte
+          }
+          break
+        case 2:
+          secondByte = buf[i + 1]
+          if ((secondByte & 0xC0) === 0x80) {
+            tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)
+            if (tempCodePoint > 0x7F) {
+              codePoint = tempCodePoint
+            }
+          }
+          break
+        case 3:
+          secondByte = buf[i + 1]
+          thirdByte = buf[i + 2]
+          if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {
+            tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)
+            if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {
+              codePoint = tempCodePoint
+            }
+          }
+          break
+        case 4:
+          secondByte = buf[i + 1]
+          thirdByte = buf[i + 2]
+          fourthByte = buf[i + 3]
+          if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {
+            tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)
+            if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {
+              codePoint = tempCodePoint
+            }
+          }
+      }
+    }
+
+    if (codePoint === null) {
+      // we did not generate a valid codePoint so insert a
+      // replacement char (U+FFFD) and advance only 1 byte
+      codePoint = 0xFFFD
+      bytesPerSequence = 1
+    } else if (codePoint > 0xFFFF) {
+      // encode to utf16 (surrogate pair dance)
+      codePoint -= 0x10000
+      res.push(codePoint >>> 10 & 0x3FF | 0xD800)
+      codePoint = 0xDC00 | codePoint & 0x3FF
+    }
+
+    res.push(codePoint)
+    i += bytesPerSequence
+  }
+
+  return decodeCodePointsArray(res)
+}
+
+// Based on http://stackoverflow.com/a/22747272/680742, the browser with
+// the lowest limit is Chrome, with 0x10000 args.
+// We go 1 magnitude less, for safety
+var MAX_ARGUMENTS_LENGTH = 0x1000
+
+function decodeCodePointsArray (codePoints) {
+  var len = codePoints.length
+  if (len <= MAX_ARGUMENTS_LENGTH) {
+    return String.fromCharCode.apply(String, codePoints) // avoid extra slice()
+  }
+
+  // Decode in chunks to avoid "call stack size exceeded".
+  var res = ''
+  var i = 0
+  while (i < len) {
+    res += String.fromCharCode.apply(
+      String,
+      codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)
+    )
+  }
+  return res
+}
+
+function asciiSlice (buf, start, end) {
+  var ret = ''
+  end = Math.min(buf.length, end)
+
+  for (var i = start; i < end; i++) {
+    ret += String.fromCharCode(buf[i] & 0x7F)
+  }
+  return ret
+}
+
+function binarySlice (buf, start, end) {
+  var ret = ''
+  end = Math.min(buf.length, end)
+
+  for (var i = start; i < end; i++) {
+    ret += String.fromCharCode(buf[i])
+  }
+  return ret
+}
+
+function hexSlice (buf, start, end) {
+  var len = buf.length
+
+  if (!start || start < 0) start = 0
+  if (!end || end < 0 || end > len) end = len
+
+  var out = ''
+  for (var i = start; i < end; i++) {
+    out += toHex(buf[i])
+  }
+  return out
+}
+
+function utf16leSlice (buf, start, end) {
+  var bytes = buf.slice(start, end)
+  var res = ''
+  for (var i = 0; i < bytes.length; i += 2) {
+    res += String.fromCharCode(bytes[i] + bytes[i + 1] * 256)
+  }
+  return res
+}
+
+Buffer.prototype.slice = function slice (start, end) {
+  var len = this.length
+  start = ~~start
+  end = end === undefined ? len : ~~end
+
+  if (start < 0) {
+    start += len
+    if (start < 0) start = 0
+  } else if (start > len) {
+    start = len
+  }
+
+  if (end < 0) {
+    end += len
+    if (end < 0) end = 0
+  } else if (end > len) {
+    end = len
+  }
+
+  if (end < start) end = start
+
+  var newBuf
+  if (Buffer.TYPED_ARRAY_SUPPORT) {
+    newBuf = this.subarray(start, end)
+    newBuf.__proto__ = Buffer.prototype
+  } else {
+    var sliceLen = end - start
+    newBuf = new Buffer(sliceLen, undefined)
+    for (var i = 0; i < sliceLen; i++) {
+      newBuf[i] = this[i + start]
+    }
+  }
+
+  return newBuf
+}
+
+/*
+ * Need to make sure that buffer isn't trying to write out of bounds.
+ */
+function checkOffset (offset, ext, length) {
+  if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')
+  if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')
+}
+
+Buffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {
+  offset = offset | 0
+  byteLength = byteLength | 0
+  if (!noAssert) checkOffset(offset, byteLength, this.length)
+
+  var val = this[offset]
+  var mul = 1
+  var i = 0
+  while (++i < byteLength && (mul *= 0x100)) {
+    val += this[offset + i] * mul
+  }
+
+  return val
+}
+
+Buffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {
+  offset = offset | 0
+  byteLength = byteLength | 0
+  if (!noAssert) {
+    checkOffset(offset, byteLength, this.length)
+  }
+
+  var val = this[offset + --byteLength]
+  var mul = 1
+  while (byteLength > 0 && (mul *= 0x100)) {
+    val += this[offset + --byteLength] * mul
+  }
+
+  return val
+}
+
+Buffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {
+  if (!noAssert) checkOffset(offset, 1, this.length)
+  return this[offset]
+}
+
+Buffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {
+  if (!noAssert) checkOffset(offset, 2, this.length)
+  return this[offset] | (this[offset + 1] << 8)
+}
+
+Buffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {
+  if (!noAssert) checkOffset(offset, 2, this.length)
+  return (this[offset] << 8) | this[offset + 1]
+}
+
+Buffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {
+  if (!noAssert) checkOffset(offset, 4, this.length)
+
+  return ((this[offset]) |
+      (this[offset + 1] << 8) |
+      (this[offset + 2] << 16)) +
+      (this[offset + 3] * 0x1000000)
+}
+
+Buffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {
+  if (!noAssert) checkOffset(offset, 4, this.length)
+
+  return (this[offset] * 0x1000000) +
+    ((this[offset + 1] << 16) |
+    (this[offset + 2] << 8) |
+    this[offset + 3])
+}
+
+Buffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {
+  offset = offset | 0
+  byteLength = byteLength | 0
+  if (!noAssert) checkOffset(offset, byteLength, this.length)
+
+  var val = this[offset]
+  var mul = 1
+  var i = 0
+  while (++i < byteLength && (mul *= 0x100)) {
+    val += this[offset + i] * mul
+  }
+  mul *= 0x80
+
+  if (val >= mul) val -= Math.pow(2, 8 * byteLength)
+
+  return val
+}
+
+Buffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {
+  offset = offset | 0
+  byteLength = byteLength | 0
+  if (!noAssert) checkOffset(offset, byteLength, this.length)
+
+  var i = byteLength
+  var mul = 1
+  var val = this[offset + --i]
+  while (i > 0 && (mul *= 0x100)) {
+    val += this[offset + --i] * mul
+  }
+  mul *= 0x80
+
+  if (val >= mul) val -= Math.pow(2, 8 * byteLength)
+
+  return val
+}
+
+Buffer.prototype.readInt8 = function readInt8 (offset, noAssert) {
+  if (!noAssert) checkOffset(offset, 1, this.length)
+  if (!(this[offset] & 0x80)) return (this[offset])
+  return ((0xff - this[offset] + 1) * -1)
+}
+
+Buffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {
+  if (!noAssert) checkOffset(offset, 2, this.length)
+  var val = this[offset] | (this[offset + 1] << 8)
+  return (val & 0x8000) ? val | 0xFFFF0000 : val
+}
+
+Buffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {
+  if (!noAssert) checkOffset(offset, 2, this.length)
+  var val = this[offset + 1] | (this[offset] << 8)
+  return (val & 0x8000) ? val | 0xFFFF0000 : val
+}
+
+Buffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {
+  if (!noAssert) checkOffset(offset, 4, this.length)
+
+  return (this[offset]) |
+    (this[offset + 1] << 8) |
+    (this[offset + 2] << 16) |
+    (this[offset + 3] << 24)
+}
+
+Buffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {
+  if (!noAssert) checkOffset(offset, 4, this.length)
+
+  return (this[offset] << 24) |
+    (this[offset + 1] << 16) |
+    (this[offset + 2] << 8) |
+    (this[offset + 3])
+}
+
+Buffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {
+  if (!noAssert) checkOffset(offset, 4, this.length)
+  return ieee754.read(this, offset, true, 23, 4)
+}
+
+Buffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {
+  if (!noAssert) checkOffset(offset, 4, this.length)
+  return ieee754.read(this, offset, false, 23, 4)
+}
+
+Buffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {
+  if (!noAssert) checkOffset(offset, 8, this.length)
+  return ieee754.read(this, offset, true, 52, 8)
+}
+
+Buffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {
+  if (!noAssert) checkOffset(offset, 8, this.length)
+  return ieee754.read(this, offset, false, 52, 8)
+}
+
+function checkInt (buf, value, offset, ext, max, min) {
+  if (!Buffer.isBuffer(buf)) throw new TypeError('"buffer" argument must be a Buffer instance')
+  if (value > max || value < min) throw new RangeError('"value" argument is out of bounds')
+  if (offset + ext > buf.length) throw new RangeError('Index out of range')
+}
+
+Buffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {
+  value = +value
+  offset = offset | 0
+  byteLength = byteLength | 0
+  if (!noAssert) {
+    var maxBytes = Math.pow(2, 8 * byteLength) - 1
+    checkInt(this, value, offset, byteLength, maxBytes, 0)
+  }
+
+  var mul = 1
+  var i = 0
+  this[offset] = value & 0xFF
+  while (++i < byteLength && (mul *= 0x100)) {
+    this[offset + i] = (value / mul) & 0xFF
+  }
+
+  return offset + byteLength
+}
+
+Buffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {
+  value = +value
+  offset = offset | 0
+  byteLength = byteLength | 0
+  if (!noAssert) {
+    var maxBytes = Math.pow(2, 8 * byteLength) - 1
+    checkInt(this, value, offset, byteLength, maxBytes, 0)
+  }
+
+  var i = byteLength - 1
+  var mul = 1
+  this[offset + i] = value & 0xFF
+  while (--i >= 0 && (mul *= 0x100)) {
+    this[offset + i] = (value / mul) & 0xFF
+  }
+
+  return offset + byteLength
+}
+
+Buffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {
+  value = +value
+  offset = offset | 0
+  if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)
+  if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)
+  this[offset] = (value & 0xff)
+  return offset + 1
+}
+
+function objectWriteUInt16 (buf, value, offset, littleEndian) {
+  if (value < 0) value = 0xffff + value + 1
+  for (var i = 0, j = Math.min(buf.length - offset, 2); i < j; i++) {
+    buf[offset + i] = (value & (0xff << (8 * (littleEndian ? i : 1 - i)))) >>>
+      (littleEndian ? i : 1 - i) * 8
+  }
+}
+
+Buffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {
+  value = +value
+  offset = offset | 0
+  if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)
+  if (Buffer.TYPED_ARRAY_SUPPORT) {
+    this[offset] = (value & 0xff)
+    this[offset + 1] = (value >>> 8)
+  } else {
+    objectWriteUInt16(this, value, offset, true)
+  }
+  return offset + 2
+}
+
+Buffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {
+  value = +value
+  offset = offset | 0
+  if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)
+  if (Buffer.TYPED_ARRAY_SUPPORT) {
+    this[offset] = (value >>> 8)
+    this[offset + 1] = (value & 0xff)
+  } else {
+    objectWriteUInt16(this, value, offset, false)
+  }
+  return offset + 2
+}
+
+function objectWriteUInt32 (buf, value, offset, littleEndian) {
+  if (value < 0) value = 0xffffffff + value + 1
+  for (var i = 0, j = Math.min(buf.length - offset, 4); i < j; i++) {
+    buf[offset + i] = (value >>> (littleEndian ? i : 3 - i) * 8) & 0xff
+  }
+}
+
+Buffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {
+  value = +value
+  offset = offset | 0
+  if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)
+  if (Buffer.TYPED_ARRAY_SUPPORT) {
+    this[offset + 3] = (value >>> 24)
+    this[offset + 2] = (value >>> 16)
+    this[offset + 1] = (value >>> 8)
+    this[offset] = (value & 0xff)
+  } else {
+    objectWriteUInt32(this, value, offset, true)
+  }
+  return offset + 4
+}
+
+Buffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {
+  value = +value
+  offset = offset | 0
+  if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)
+  if (Buffer.TYPED_ARRAY_SUPPORT) {
+    this[offset] = (value >>> 24)
+    this[offset + 1] = (value >>> 16)
+    this[offset + 2] = (value >>> 8)
+    this[offset + 3] = (value & 0xff)
+  } else {
+    objectWriteUInt32(this, value, offset, false)
+  }
+  return offset + 4
+}
+
+Buffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {
+  value = +value
+  offset = offset | 0
+  if (!noAssert) {
+    var limit = Math.pow(2, 8 * byteLength - 1)
+
+    checkInt(this, value, offset, byteLength, limit - 1, -limit)
+  }
+
+  var i = 0
+  var mul = 1
+  var sub = 0
+  this[offset] = value & 0xFF
+  while (++i < byteLength && (mul *= 0x100)) {
+    if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {
+      sub = 1
+    }
+    this[offset + i] = ((value / mul) >> 0) - sub & 0xFF
+  }
+
+  return offset + byteLength
+}
+
+Buffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {
+  value = +value
+  offset = offset | 0
+  if (!noAssert) {
+    var limit = Math.pow(2, 8 * byteLength - 1)
+
+    checkInt(this, value, offset, byteLength, limit - 1, -limit)
+  }
+
+  var i = byteLength - 1
+  var mul = 1
+  var sub = 0
+  this[offset + i] = value & 0xFF
+  while (--i >= 0 && (mul *= 0x100)) {
+    if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {
+      sub = 1
+    }
+    this[offset + i] = ((value / mul) >> 0) - sub & 0xFF
+  }
+
+  return offset + byteLength
+}
+
+Buffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {
+  value = +value
+  offset = offset | 0
+  if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)
+  if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)
+  if (value < 0) value = 0xff + value + 1
+  this[offset] = (value & 0xff)
+  return offset + 1
+}
+
+Buffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {
+  value = +value
+  offset = offset | 0
+  if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)
+  if (Buffer.TYPED_ARRAY_SUPPORT) {
+    this[offset] = (value & 0xff)
+    this[offset + 1] = (value >>> 8)
+  } else {
+    objectWriteUInt16(this, value, offset, true)
+  }
+  return offset + 2
+}
+
+Buffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {
+  value = +value
+  offset = offset | 0
+  if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)
+  if (Buffer.TYPED_ARRAY_SUPPORT) {
+    this[offset] = (value >>> 8)
+    this[offset + 1] = (value & 0xff)
+  } else {
+    objectWriteUInt16(this, value, offset, false)
+  }
+  return offset + 2
+}
+
+Buffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {
+  value = +value
+  offset = offset | 0
+  if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)
+  if (Buffer.TYPED_ARRAY_SUPPORT) {
+    this[offset] = (value & 0xff)
+    this[offset + 1] = (value >>> 8)
+    this[offset + 2] = (value >>> 16)
+    this[offset + 3] = (value >>> 24)
+  } else {
+    objectWriteUInt32(this, value, offset, true)
+  }
+  return offset + 4
+}
+
+Buffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {
+  value = +value
+  offset = offset | 0
+  if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)
+  if (value < 0) value = 0xffffffff + value + 1
+  if (Buffer.TYPED_ARRAY_SUPPORT) {
+    this[offset] = (value >>> 24)
+    this[offset + 1] = (value >>> 16)
+    this[offset + 2] = (value >>> 8)
+    this[offset + 3] = (value & 0xff)
+  } else {
+    objectWriteUInt32(this, value, offset, false)
+  }
+  return offset + 4
+}
+
+function checkIEEE754 (buf, value, offset, ext, max, min) {
+  if (offset + ext > buf.length) throw new RangeError('Index out of range')
+  if (offset < 0) throw new RangeError('Index out of range')
+}
+
+function writeFloat (buf, value, offset, littleEndian, noAssert) {
+  if (!noAssert) {
+    checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)
+  }
+  ieee754.write(buf, value, offset, littleEndian, 23, 4)
+  return offset + 4
+}
+
+Buffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {
+  return writeFloat(this, value, offset, true, noAssert)
+}
+
+Buffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {
+  return writeFloat(this, value, offset, false, noAssert)
+}
+
+function writeDouble (buf, value, offset, littleEndian, noAssert) {
+  if (!noAssert) {
+    checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)
+  }
+  ieee754.write(buf, value, offset, littleEndian, 52, 8)
+  return offset + 8
+}
+
+Buffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {
+  return writeDouble(this, value, offset, true, noAssert)
+}
+
+Buffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {
+  return writeDouble(this, value, offset, false, noAssert)
+}
+
+// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)
+Buffer.prototype.copy = function copy (target, targetStart, start, end) {
+  if (!start) start = 0
+  if (!end && end !== 0) end = this.length
+  if (targetStart >= target.length) targetStart = target.length
+  if (!targetStart) targetStart = 0
+  if (end > 0 && end < start) end = start
+
+  // Copy 0 bytes; we're done
+  if (end === start) return 0
+  if (target.length === 0 || this.length === 0) return 0
+
+  // Fatal error conditions
+  if (targetStart < 0) {
+    throw new RangeError('targetStart out of bounds')
+  }
+  if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds')
+  if (end < 0) throw new RangeError('sourceEnd out of bounds')
+
+  // Are we oob?
+  if (end > this.length) end = this.length
+  if (target.length - targetStart < end - start) {
+    end = target.length - targetStart + start
+  }
+
+  var len = end - start
+  var i
+
+  if (this === target && start < targetStart && targetStart < end) {
+    // descending copy from end
+    for (i = len - 1; i >= 0; i--) {
+      target[i + targetStart] = this[i + start]
+    }
+  } else if (len < 1000 || !Buffer.TYPED_ARRAY_SUPPORT) {
+    // ascending copy from start
+    for (i = 0; i < len; i++) {
+      target[i + targetStart] = this[i + start]
+    }
+  } else {
+    Uint8Array.prototype.set.call(
+      target,
+      this.subarray(start, start + len),
+      targetStart
+    )
+  }
+
+  return len
+}
+
+// Usage:
+//    buffer.fill(number[, offset[, end]])
+//    buffer.fill(buffer[, offset[, end]])
+//    buffer.fill(string[, offset[, end]][, encoding])
+Buffer.prototype.fill = function fill (val, start, end, encoding) {
+  // Handle string cases:
+  if (typeof val === 'string') {
+    if (typeof start === 'string') {
+      encoding = start
+      start = 0
+      end = this.length
+    } else if (typeof end === 'string') {
+      encoding = end
+      end = this.length
+    }
+    if (val.length === 1) {
+      var code = val.charCodeAt(0)
+      if (code < 256) {
+        val = code
+      }
+    }
+    if (encoding !== undefined && typeof encoding !== 'string') {
+      throw new TypeError('encoding must be a string')
+    }
+    if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {
+      throw new TypeError('Unknown encoding: ' + encoding)
+    }
+  } else if (typeof val === 'number') {
+    val = val & 255
+  }
+
+  // Invalid ranges are not set to a default, so can range check early.
+  if (start < 0 || this.length < start || this.length < end) {
+    throw new RangeError('Out of range index')
+  }
+
+  if (end <= start) {
+    return this
+  }
+
+  start = start >>> 0
+  end = end === undefined ? this.length : end >>> 0
+
+  if (!val) val = 0
+
+  var i
+  if (typeof val === 'number') {
+    for (i = start; i < end; i++) {
+      this[i] = val
+    }
+  } else {
+    var bytes = Buffer.isBuffer(val)
+      ? val
+      : utf8ToBytes(new Buffer(val, encoding).toString())
+    var len = bytes.length
+    for (i = 0; i < end - start; i++) {
+      this[i + start] = bytes[i % len]
+    }
+  }
+
+  return this
+}
+
+// HELPER FUNCTIONS
+// ================
+
+var INVALID_BASE64_RE = /[^+\/0-9A-Za-z-_]/g
+
+function base64clean (str) {
+  // Node strips out invalid characters like \n and \t from the string, base64-js does not
+  str = stringtrim(str).replace(INVALID_BASE64_RE, '')
+  // Node converts strings with length < 2 to ''
+  if (str.length < 2) return ''
+  // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not
+  while (str.length % 4 !== 0) {
+    str = str + '='
+  }
+  return str
+}
+
+function stringtrim (str) {
+  if (str.trim) return str.trim()
+  return str.replace(/^\s+|\s+$/g, '')
+}
+
+function toHex (n) {
+  if (n < 16) return '0' + n.toString(16)
+  return n.toString(16)
+}
+
+function utf8ToBytes (string, units) {
+  units = units || Infinity
+  var codePoint
+  var length = string.length
+  var leadSurrogate = null
+  var bytes = []
+
+  for (var i = 0; i < length; i++) {
+    codePoint = string.charCodeAt(i)
+
+    // is surrogate component
+    if (codePoint > 0xD7FF && codePoint < 0xE000) {
+      // last char was a lead
+      if (!leadSurrogate) {
+        // no lead yet
+        if (codePoint > 0xDBFF) {
+          // unexpected trail
+          if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
+          continue
+        } else if (i + 1 === length) {
+          // unpaired lead
+          if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
+          continue
+        }
+
+        // valid lead
+        leadSurrogate = codePoint
+
+        continue
+      }
+
+      // 2 leads in a row
+      if (codePoint < 0xDC00) {
+        if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
+        leadSurrogate = codePoint
+        continue
+      }
+
+      // valid surrogate pair
+      codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000
+    } else if (leadSurrogate) {
+      // valid bmp char, but last char was a lead
+      if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
+    }
+
+    leadSurrogate = null
+
+    // encode utf8
+    if (codePoint < 0x80) {
+      if ((units -= 1) < 0) break
+      bytes.push(codePoint)
+    } else if (codePoint < 0x800) {
+      if ((units -= 2) < 0) break
+      bytes.push(
+        codePoint >> 0x6 | 0xC0,
+        codePoint & 0x3F | 0x80
+      )
+    } else if (codePoint < 0x10000) {
+      if ((units -= 3) < 0) break
+      bytes.push(
+        codePoint >> 0xC | 0xE0,
+        codePoint >> 0x6 & 0x3F | 0x80,
+        codePoint & 0x3F | 0x80
+      )
+    } else if (codePoint < 0x110000) {
+      if ((units -= 4) < 0) break
+      bytes.push(
+        codePoint >> 0x12 | 0xF0,
+        codePoint >> 0xC & 0x3F | 0x80,
+        codePoint >> 0x6 & 0x3F | 0x80,
+        codePoint & 0x3F | 0x80
+      )
+    } else {
+      throw new Error('Invalid code point')
+    }
+  }
+
+  return bytes
+}
+
+function asciiToBytes (str) {
+  var byteArray = []
+  for (var i = 0; i < str.length; i++) {
+    // Node's code seems to be doing this and not & 0x7F..
+    byteArray.push(str.charCodeAt(i) & 0xFF)
+  }
+  return byteArray
+}
+
+function utf16leToBytes (str, units) {
+  var c, hi, lo
+  var byteArray = []
+  for (var i = 0; i < str.length; i++) {
+    if ((units -= 2) < 0) break
+
+    c = str.charCodeAt(i)
+    hi = c >> 8
+    lo = c % 256
+    byteArray.push(lo)
+    byteArray.push(hi)
+  }
+
+  return byteArray
+}
+
+function base64ToBytes (str) {
+  return base64.toByteArray(base64clean(str))
+}
+
+function blitBuffer (src, dst, offset, length) {
+  for (var i = 0; i < length; i++) {
+    if ((i + offset >= dst.length) || (i >= src.length)) break
+    dst[i + offset] = src[i]
+  }
+  return i
+}
+
+function isnan (val) {
+  return val !== val // eslint-disable-line no-self-compare
+}
+
+}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
+
+},{"base64-js":299,"ieee754":300,"isarray":301}],299:[function(require,module,exports){
+'use strict'
+
+exports.toByteArray = toByteArray
+exports.fromByteArray = fromByteArray
+
+var lookup = []
+var revLookup = []
+var Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array
+
+function init () {
+  var code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
+  for (var i = 0, len = code.length; i < len; ++i) {
+    lookup[i] = code[i]
+    revLookup[code.charCodeAt(i)] = i
+  }
+
+  revLookup['-'.charCodeAt(0)] = 62
+  revLookup['_'.charCodeAt(0)] = 63
+}
+
+init()
+
+function toByteArray (b64) {
+  var i, j, l, tmp, placeHolders, arr
+  var len = b64.length
+
+  if (len % 4 > 0) {
+    throw new Error('Invalid string. Length must be a multiple of 4')
+  }
+
+  // the number of equal signs (place holders)
+  // if there are two placeholders, than the two characters before it
+  // represent one byte
+  // if there is only one, then the three characters before it represent 2 bytes
+  // this is just a cheap hack to not do indexOf twice
+  placeHolders = b64[len - 2] === '=' ? 2 : b64[len - 1] === '=' ? 1 : 0
+
+  // base64 is 4/3 + up to two characters of the original data
+  arr = new Arr(len * 3 / 4 - placeHolders)
+
+  // if there are placeholders, only get up to the last complete 4 chars
+  l = placeHolders > 0 ? len - 4 : len
+
+  var L = 0
+
+  for (i = 0, j = 0; i < l; i += 4, j += 3) {
+    tmp = (revLookup[b64.charCodeAt(i)] << 18) | (revLookup[b64.charCodeAt(i + 1)] << 12) | (revLookup[b64.charCodeAt(i + 2)] << 6) | revLookup[b64.charCodeAt(i + 3)]
+    arr[L++] = (tmp >> 16) & 0xFF
+    arr[L++] = (tmp >> 8) & 0xFF
+    arr[L++] = tmp & 0xFF
+  }
+
+  if (placeHolders === 2) {
+    tmp = (revLookup[b64.charCodeAt(i)] << 2) | (revLookup[b64.charCodeAt(i + 1)] >> 4)
+    arr[L++] = tmp & 0xFF
+  } else if (placeHolders === 1) {
+    tmp = (revLookup[b64.charCodeAt(i)] << 10) | (revLookup[b64.charCodeAt(i + 1)] << 4) | (revLookup[b64.charCodeAt(i + 2)] >> 2)
+    arr[L++] = (tmp >> 8) & 0xFF
+    arr[L++] = tmp & 0xFF
+  }
+
+  return arr
+}
+
+function tripletToBase64 (num) {
+  return lookup[num >> 18 & 0x3F] + lookup[num >> 12 & 0x3F] + lookup[num >> 6 & 0x3F] + lookup[num & 0x3F]
+}
+
+function encodeChunk (uint8, start, end) {
+  var tmp
+  var output = []
+  for (var i = start; i < end; i += 3) {
+    tmp = (uint8[i] << 16) + (uint8[i + 1] << 8) + (uint8[i + 2])
+    output.push(tripletToBase64(tmp))
+  }
+  return output.join('')
+}
+
+function fromByteArray (uint8) {
+  var tmp
+  var len = uint8.length
+  var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes
+  var output = ''
+  var parts = []
+  var maxChunkLength = 16383 // must be multiple of 3
+
+  // go through the array every three bytes, we'll deal with trailing stuff later
+  for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {
+    parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)))
+  }
+
+  // pad the end with zeros, but make sure to not forget the extra bytes
+  if (extraBytes === 1) {
+    tmp = uint8[len - 1]
+    output += lookup[tmp >> 2]
+    output += lookup[(tmp << 4) & 0x3F]
+    output += '=='
+  } else if (extraBytes === 2) {
+    tmp = (uint8[len - 2] << 8) + (uint8[len - 1])
+    output += lookup[tmp >> 10]
+    output += lookup[(tmp >> 4) & 0x3F]
+    output += lookup[(tmp << 2) & 0x3F]
+    output += '='
+  }
+
+  parts.push(output)
+
+  return parts.join('')
+}
+
+},{}],300:[function(require,module,exports){
+exports.read = function (buffer, offset, isLE, mLen, nBytes) {
+  var e, m
+  var eLen = nBytes * 8 - mLen - 1
+  var eMax = (1 << eLen) - 1
+  var eBias = eMax >> 1
+  var nBits = -7
+  var i = isLE ? (nBytes - 1) : 0
+  var d = isLE ? -1 : 1
+  var s = buffer[offset + i]
+
+  i += d
+
+  e = s & ((1 << (-nBits)) - 1)
+  s >>= (-nBits)
+  nBits += eLen
+  for (; nBits > 0; e = e * 256 + buffer[offset + i], i += d, nBits -= 8) {}
+
+  m = e & ((1 << (-nBits)) - 1)
+  e >>= (-nBits)
+  nBits += mLen
+  for (; nBits > 0; m = m * 256 + buffer[offset + i], i += d, nBits -= 8) {}
+
+  if (e === 0) {
+    e = 1 - eBias
+  } else if (e === eMax) {
+    return m ? NaN : ((s ? -1 : 1) * Infinity)
+  } else {
+    m = m + Math.pow(2, mLen)
+    e = e - eBias
+  }
+  return (s ? -1 : 1) * m * Math.pow(2, e - mLen)
+}
+
+exports.write = function (buffer, value, offset, isLE, mLen, nBytes) {
+  var e, m, c
+  var eLen = nBytes * 8 - mLen - 1
+  var eMax = (1 << eLen) - 1
+  var eBias = eMax >> 1
+  var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)
+  var i = isLE ? 0 : (nBytes - 1)
+  var d = isLE ? 1 : -1
+  var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0
+
+  value = Math.abs(value)
+
+  if (isNaN(value) || value === Infinity) {
+    m = isNaN(value) ? 1 : 0
+    e = eMax
+  } else {
+    e = Math.floor(Math.log(value) / Math.LN2)
+    if (value * (c = Math.pow(2, -e)) < 1) {
+      e--
+      c *= 2
+    }
+    if (e + eBias >= 1) {
+      value += rt / c
+    } else {
+      value += rt * Math.pow(2, 1 - eBias)
+    }
+    if (value * c >= 2) {
+      e++
+      c /= 2
+    }
+
+    if (e + eBias >= eMax) {
+      m = 0
+      e = eMax
+    } else if (e + eBias >= 1) {
+      m = (value * c - 1) * Math.pow(2, mLen)
+      e = e + eBias
+    } else {
+      m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)
+      e = 0
+    }
+  }
+
+  for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}
+
+  e = (e << mLen) | m
+  eLen += mLen
+  for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}
+
+  buffer[offset + i - d] |= s * 128
+}
+
+},{}],301:[function(require,module,exports){
+var toString = {}.toString;
+
+module.exports = Array.isArray || function (arr) {
+  return toString.call(arr) == '[object Array]';
+};
+
+},{}],302:[function(require,module,exports){
+// shim for using process in browser
+
+var process = module.exports = {};
+var queue = [];
+var draining = false;
+var currentQueue;
+var queueIndex = -1;
+
+function cleanUpNextTick() {
+    if (!draining || !currentQueue) {
+        return;
+    }
+    draining = false;
+    if (currentQueue.length) {
+        queue = currentQueue.concat(queue);
+    } else {
+        queueIndex = -1;
+    }
+    if (queue.length) {
+        drainQueue();
+    }
+}
+
+function drainQueue() {
+    if (draining) {
+        return;
+    }
+    var timeout = setTimeout(cleanUpNextTick);
+    draining = true;
+
+    var len = queue.length;
+    while(len) {
+        currentQueue = queue;
+        queue = [];
+        while (++queueIndex < len) {
+            if (currentQueue) {
+                currentQueue[queueIndex].run();
+            }
+        }
+        queueIndex = -1;
+        len = queue.length;
+    }
+    currentQueue = null;
+    draining = false;
+    clearTimeout(timeout);
+}
+
+process.nextTick = function (fun) {
+    var args = new Array(arguments.length - 1);
+    if (arguments.length > 1) {
+        for (var i = 1; i < arguments.length; i++) {
+            args[i - 1] = arguments[i];
+        }
+    }
+    queue.push(new Item(fun, args));
+    if (queue.length === 1 && !draining) {
+        setTimeout(drainQueue, 0);
+    }
+};
+
+// v8 likes predictible objects
+function Item(fun, array) {
+    this.fun = fun;
+    this.array = array;
+}
+Item.prototype.run = function () {
+    this.fun.apply(null, this.array);
+};
+process.title = 'browser';
+process.browser = true;
+process.env = {};
+process.argv = [];
+process.version = ''; // empty string to avoid regexp issues
+process.versions = {};
+
+function noop() {}
+
+process.on = noop;
+process.addListener = noop;
+process.once = noop;
+process.off = noop;
+process.removeListener = noop;
+process.removeAllListeners = noop;
+process.emit = noop;
+
+process.binding = function (name) {
+    throw new Error('process.binding is not supported');
+};
+
+process.cwd = function () { return '/' };
+process.chdir = function (dir) {
+    throw new Error('process.chdir is not supported');
+};
+process.umask = function() { return 0; };
+
+},{}],303:[function(require,module,exports){
+module.exports = require('./lib/chai');
+
+},{"./lib/chai":304}],304:[function(require,module,exports){
+/*!
+ * chai
+ * Copyright(c) 2011-2014 Jake Luer <jake@alogicalparadox.com>
+ * MIT Licensed
+ */
+
+var used = []
+  , exports = module.exports = {};
+
+/*!
+ * Chai version
+ */
+
+exports.version = '3.5.0';
+
+/*!
+ * Assertion Error
+ */
+
+exports.AssertionError = require('assertion-error');
+
+/*!
+ * Utils for plugins (not exported)
+ */
+
+var util = require('./chai/utils');
+
+/**
+ * # .use(function)
+ *
+ * Provides a way to extend the internals of Chai
+ *
+ * @param {Function}
+ * @returns {this} for chaining
+ * @api public
+ */
+
+exports.use = function (fn) {
+  if (!~used.indexOf(fn)) {
+    fn(this, util);
+    used.push(fn);
+  }
+
+  return this;
+};
+
+/*!
+ * Utility Functions
+ */
+
+exports.util = util;
+
+/*!
+ * Configuration
+ */
+
+var config = require('./chai/config');
+exports.config = config;
+
+/*!
+ * Primary `Assertion` prototype
+ */
+
+var assertion = require('./chai/assertion');
+exports.use(assertion);
+
+/*!
+ * Core Assertions
+ */
+
+var core = require('./chai/core/assertions');
+exports.use(core);
+
+/*!
+ * Expect interface
+ */
+
+var expect = require('./chai/interface/expect');
+exports.use(expect);
+
+/*!
+ * Should interface
+ */
+
+var should = require('./chai/interface/should');
+exports.use(should);
+
+/*!
+ * Assert interface
+ */
+
+var assert = require('./chai/interface/assert');
+exports.use(assert);
+
+},{"./chai/assertion":305,"./chai/config":306,"./chai/core/assertions":307,"./chai/interface/assert":308,"./chai/interface/expect":309,"./chai/interface/should":310,"./chai/utils":324,"assertion-error":332}],305:[function(require,module,exports){
+/*!
+ * chai
+ * http://chaijs.com
+ * Copyright(c) 2011-2014 Jake Luer <jake@alogicalparadox.com>
+ * MIT Licensed
+ */
+
+var config = require('./config');
+
+module.exports = function (_chai, util) {
+  /*!
+   * Module dependencies.
+   */
+
+  var AssertionError = _chai.AssertionError
+    , flag = util.flag;
+
+  /*!
+   * Module export.
+   */
+
+  _chai.Assertion = Assertion;
+
+  /*!
+   * Assertion Constructor
+   *
+   * Creates object for chaining.
+   *
+   * @api private
+   */
+
+  function Assertion (obj, msg, stack) {
+    flag(this, 'ssfi', stack || arguments.callee);
+    flag(this, 'object', obj);
+    flag(this, 'message', msg);
+  }
+
+  Object.defineProperty(Assertion, 'includeStack', {
+    get: function() {
+      console.warn('Assertion.includeStack is deprecated, use chai.config.includeStack instead.');
+      return config.includeStack;
+    },
+    set: function(value) {
+      console.warn('Assertion.includeStack is deprecated, use chai.config.includeStack instead.');
+      config.includeStack = value;
+    }
+  });
+
+  Object.defineProperty(Assertion, 'showDiff', {
+    get: function() {
+      console.warn('Assertion.showDiff is deprecated, use chai.config.showDiff instead.');
+      return config.showDiff;
+    },
+    set: function(value) {
+      console.warn('Assertion.showDiff is deprecated, use chai.config.showDiff instead.');
+      config.showDiff = value;
+    }
+  });
+
+  Assertion.addProperty = function (name, fn) {
+    util.addProperty(this.prototype, name, fn);
+  };
+
+  Assertion.addMethod = function (name, fn) {
+    util.addMethod(this.prototype, name, fn);
+  };
+
+  Assertion.addChainableMethod = function (name, fn, chainingBehavior) {
+    util.addChainableMethod(this.prototype, name, fn, chainingBehavior);
+  };
+
+  Assertion.overwriteProperty = function (name, fn) {
+    util.overwriteProperty(this.prototype, name, fn);
+  };
+
+  Assertion.overwriteMethod = function (name, fn) {
+    util.overwriteMethod(this.prototype, name, fn);
+  };
+
+  Assertion.overwriteChainableMethod = function (name, fn, chainingBehavior) {
+    util.overwriteChainableMethod(this.prototype, name, fn, chainingBehavior);
+  };
+
+  /**
+   * ### .assert(expression, message, negateMessage, expected, actual, showDiff)
+   *
+   * Executes an expression and check expectations. Throws AssertionError for reporting if test doesn't pass.
+   *
+   * @name assert
+   * @param {Philosophical} expression to be tested
+   * @param {String|Function} message or function that returns message to display if expression fails
+   * @param {String|Function} negatedMessage or function that returns negatedMessage to display if negated expression fails
+   * @param {Mixed} expected value (remember to check for negation)
+   * @param {Mixed} actual (optional) will default to `this.obj`
+   * @param {Boolean} showDiff (optional) when set to `true`, assert will display a diff in addition to the message if expression fails
+   * @api private
+   */
+
+  Assertion.prototype.assert = function (expr, msg, negateMsg, expected, _actual, showDiff) {
+    var ok = util.test(this, arguments);
+    if (true !== showDiff) showDiff = false;
+    if (true !== config.showDiff) showDiff = false;
+
+    if (!ok) {
+      var msg = util.getMessage(this, arguments)
+        , actual = util.getActual(this, arguments);
+      throw new AssertionError(msg, {
+          actual: actual
+        , expected: expected
+        , showDiff: showDiff
+      }, (config.includeStack) ? this.assert : flag(this, 'ssfi'));
+    }
+  };
+
+  /*!
+   * ### ._obj
+   *
+   * Quick reference to stored `actual` value for plugin developers.
+   *
+   * @api private
+   */
+
+  Object.defineProperty(Assertion.prototype, '_obj',
+    { get: function () {
+        return flag(this, 'object');
+      }
+    , set: function (val) {
+        flag(this, 'object', val);
+      }
+  });
+};
+
+},{"./config":306}],306:[function(require,module,exports){
+module.exports = {
+
+  /**
+   * ### config.includeStack
+   *
+   * User configurable property, influences whether stack trace
+   * is included in Assertion error message. Default of false
+   * suppresses stack trace in the error message.
+   *
+   *     chai.config.includeStack = true;  // enable stack on error
+   *
+   * @param {Boolean}
+   * @api public
+   */
+
+   includeStack: false,
+
+  /**
+   * ### config.showDiff
+   *
+   * User configurable property, influences whether or not
+   * the `showDiff` flag should be included in the thrown
+   * AssertionErrors. `false` will always be `false`; `true`
+   * will be true when the assertion has requested a diff
+   * be shown.
+   *
+   * @param {Boolean}
+   * @api public
+   */
+
+  showDiff: true,
+
+  /**
+   * ### config.truncateThreshold
+   *
+   * User configurable property, sets length threshold for actual and
+   * expected values in assertion errors. If this threshold is exceeded, for
+   * example for large data structures, the value is replaced with something
+   * like `[ Array(3) ]` or `{ Object (prop1, prop2) }`.
+   *
+   * Set it to zero if you want to disable truncating altogether.
+   *
+   * This is especially userful when doing assertions on arrays: having this
+   * set to a reasonable large value makes the failure messages readily
+   * inspectable.
+   *
+   *     chai.config.truncateThreshold = 0;  // disable truncating
+   *
+   * @param {Number}
+   * @api public
+   */
+
+  truncateThreshold: 40
+
+};
+
+},{}],307:[function(require,module,exports){
+/*!
+ * chai
+ * http://chaijs.com
+ * Copyright(c) 2011-2014 Jake Luer <jake@alogicalparadox.com>
+ * MIT Licensed
+ */
+
+module.exports = function (chai, _) {
+  var Assertion = chai.Assertion
+    , toString = Object.prototype.toString
+    , flag = _.flag;
+
+  /**
+   * ### Language Chains
+   *
+   * The following are provided as chainable getters to
+   * improve the readability of your assertions. They
+   * do not provide testing capabilities unless they
+   * have been overwritten by a plugin.
+   *
+   * **Chains**
+   *
+   * - to
+   * - be
+   * - been
+   * - is
+   * - that
+   * - which
+   * - and
+   * - has
+   * - have
+   * - with
+   * - at
+   * - of
+   * - same
+   *
+   * @name language chains
+   * @namespace BDD
+   * @api public
+   */
+
+  [ 'to', 'be', 'been'
+  , 'is', 'and', 'has', 'have'
+  , 'with', 'that', 'which', 'at'
+  , 'of', 'same' ].forEach(function (chain) {
+    Assertion.addProperty(chain, function () {
+      return this;
+    });
+  });
+
+  /**
+   * ### .not
+   *
+   * Negates any of assertions following in the chain.
+   *
+   *     expect(foo).to.not.equal('bar');
+   *     expect(goodFn).to.not.throw(Error);
+   *     expect({ foo: 'baz' }).to.have.property('foo')
+   *       .and.not.equal('bar');
+   *
+   * @name not
+   * @namespace BDD
+   * @api public
+   */
+
+  Assertion.addProperty('not', function () {
+    flag(this, 'negate', true);
+  });
+
+  /**
+   * ### .deep
+   *
+   * Sets the `deep` flag, later used by the `equal` and
+   * `property` assertions.
+   *
+   *     expect(foo).to.deep.equal({ bar: 'baz' });
+   *     expect({ foo: { bar: { baz: 'quux' } } })
+   *       .to.have.deep.property('foo.bar.baz', 'quux');
+   *
+   * `.deep.property` special characters can be escaped
+   * by adding two slashes before the `.` or `[]`.
+   *
+   *     var deepCss = { '.link': { '[target]': 42 }};
+   *     expect(deepCss).to.have.deep.property('\\.link.\\[target\\]', 42);
+   *
+   * @name deep
+   * @namespace BDD
+   * @api public
+   */
+
+  Assertion.addProperty('deep', function () {
+    flag(this, 'deep', true);
+  });
+
+  /**
+   * ### .any
+   *
+   * Sets the `any` flag, (opposite of the `all` flag)
+   * later used in the `keys` assertion.
+   *
+   *     expect(foo).to.have.any.keys('bar', 'baz');
+   *
+   * @name any
+   * @namespace BDD
+   * @api public
+   */
+
+  Assertion.addProperty('any', function () {
+    flag(this, 'any', true);
+    flag(this, 'all', false)
+  });
+
+
+  /**
+   * ### .all
+   *
+   * Sets the `all` flag (opposite of the `any` flag)
+   * later used by the `keys` assertion.
+   *
+   *     expect(foo).to.have.all.keys('bar', 'baz');
+   *
+   * @name all
+   * @namespace BDD
+   * @api public
+   */
+
+  Assertion.addProperty('all', function () {
+    flag(this, 'all', true);
+    flag(this, 'any', false);
+  });
+
+  /**
+   * ### .a(type)
+   *
+   * The `a` and `an` assertions are aliases that can be
+   * used either as language chains or to assert a value's
+   * type.
+   *
+   *     // typeof
+   *     expect('test').to.be.a('string');
+   *     expect({ foo: 'bar' }).to.be.an('object');
+   *     expect(null).to.be.a('null');
+   *     expect(undefined).to.be.an('undefined');
+   *     expect(new Error).to.be.an('error');
+   *     expect(new Promise).to.be.a('promise');
+   *     expect(new Float32Array()).to.be.a('float32array');
+   *     expect(Symbol()).to.be.a('symbol');
+   *
+   *     // es6 overrides
+   *     expect({[Symbol.toStringTag]:()=>'foo'}).to.be.a('foo');
+   *
+   *     // language chain
+   *     expect(foo).to.be.an.instanceof(Foo);
+   *
+   * @name a
+   * @alias an
+   * @param {String} type
+   * @param {String} message _optional_
+   * @namespace BDD
+   * @api public
+   */
+
+  function an (type, msg) {
+    if (msg) flag(this, 'message', msg);
+    type = type.toLowerCase();
+    var obj = flag(this, 'object')
+      , article = ~[ 'a', 'e', 'i', 'o', 'u' ].indexOf(type.charAt(0)) ? 'an ' : 'a ';
+
+    this.assert(
+        type === _.type(obj)
+      , 'expected #{this} to be ' + article + type
+      , 'expected #{this} not to be ' + article + type
+    );
+  }
+
+  Assertion.addChainableMethod('an', an);
+  Assertion.addChainableMethod('a', an);
+
+  /**
+   * ### .include(value)
+   *
+   * The `include` and `contain` assertions can be used as either property
+   * based language chains or as methods to assert the inclusion of an object
+   * in an array or a substring in a string. When used as language chains,
+   * they toggle the `contains` flag for the `keys` assertion.
+   *
+   *     expect([1,2,3]).to.include(2);
+   *     expect('foobar').to.contain('foo');
+   *     expect({ foo: 'bar', hello: 'universe' }).to.include.keys('foo');
+   *
+   * @name include
+   * @alias contain
+   * @alias includes
+   * @alias contains
+   * @param {Object|String|Number} obj
+   * @param {String} message _optional_
+   * @namespace BDD
+   * @api public
+   */
+
+  function includeChainingBehavior () {
+    flag(this, 'contains', true);
+  }
+
+  function include (val, msg) {
+    _.expectTypes(this, ['array', 'object', 'string']);
+
+    if (msg) flag(this, 'message', msg);
+    var obj = flag(this, 'object');
+    var expected = false;
+
+    if (_.type(obj) === 'array' && _.type(val) === 'object') {
+      for (var i in obj) {
+        if (_.eql(obj[i], val)) {
+          expected = true;
+          break;
+        }
+      }
+    } else if (_.type(val) === 'object') {
+      if (!flag(this, 'negate')) {
+        for (var k in val) new Assertion(obj).property(k, val[k]);
+        return;
+      }
+      var subset = {};
+      for (var k in val) subset[k] = obj[k];
+      expected = _.eql(subset, val);
+    } else {
+      expected = (obj != undefined) && ~obj.indexOf(val);
+    }
+    this.assert(
+        expected
+      , 'expected #{this} to include ' + _.inspect(val)
+      , 'expected #{this} to not include ' + _.inspect(val));
+  }
+
+  Assertion.addChainableMethod('include', include, includeChainingBehavior);
+  Assertion.addChainableMethod('contain', include, includeChainingBehavior);
+  Assertion.addChainableMethod('contains', include, includeChainingBehavior);
+  Assertion.addChainableMethod('includes', include, includeChainingBehavior);
+
+  /**
+   * ### .ok
+   *
+   * Asserts that the target is truthy.
+   *
+   *     expect('everything').to.be.ok;
+   *     expect(1).to.be.ok;
+   *     expect(false).to.not.be.ok;
+   *     expect(undefined).to.not.be.ok;
+   *     expect(null).to.not.be.ok;
+   *
+   * @name ok
+   * @namespace BDD
+   * @api public
+   */
+
+  Assertion.addProperty('ok', function () {
+    this.assert(
+        flag(this, 'object')
+      , 'expected #{this} to be truthy'
+      , 'expected #{this} to be falsy');
+  });
+
+  /**
+   * ### .true
+   *
+   * Asserts that the target is `true`.
+   *
+   *     expect(true).to.be.true;
+   *     expect(1).to.not.be.true;
+   *
+   * @name true
+   * @namespace BDD
+   * @api public
+   */
+
+  Assertion.addProperty('true', function () {
+    this.assert(
+        true === flag(this, 'object')
+      , 'expected #{this} to be true'
+      , 'expected #{this} to be false'
+      , this.negate ? false : true
+    );
+  });
+
+  /**
+   * ### .false
+   *
+   * Asserts that the target is `false`.
+   *
+   *     expect(false).to.be.false;
+   *     expect(0).to.not.be.false;
+   *
+   * @name false
+   * @namespace BDD
+   * @api public
+   */
+
+  Assertion.addProperty('false', function () {
+    this.assert(
+        false === flag(this, 'object')
+      , 'expected #{this} to be false'
+      , 'expected #{this} to be true'
+      , this.negate ? true : false
+    );
+  });
+
+  /**
+   * ### .null
+   *
+   * Asserts that the target is `null`.
+   *
+   *     expect(null).to.be.null;
+   *     expect(undefined).to.not.be.null;
+   *
+   * @name null
+   * @namespace BDD
+   * @api public
+   */
+
+  Assertion.addProperty('null', function () {
+    this.assert(
+        null === flag(this, 'object')
+      , 'expected #{this} to be null'
+      , 'expected #{this} not to be null'
+    );
+  });
+
+  /**
+   * ### .undefined
+   *
+   * Asserts that the target is `undefined`.
+   *
+   *     expect(undefined).to.be.undefined;
+   *     expect(null).to.not.be.undefined;
+   *
+   * @name undefined
+   * @namespace BDD
+   * @api public
+   */
+
+  Assertion.addProperty('undefined', function () {
+    this.assert(
+        undefined === flag(this, 'object')
+      , 'expected #{this} to be undefined'
+      , 'expected #{this} not to be undefined'
+    );
+  });
+
+  /**
+   * ### .NaN
+   * Asserts that the target is `NaN`.
+   *
+   *     expect('foo').to.be.NaN;
+   *     expect(4).not.to.be.NaN;
+   *
+   * @name NaN
+   * @namespace BDD
+   * @api public
+   */
+
+  Assertion.addProperty('NaN', function () {
+    this.assert(
+        isNaN(flag(this, 'object'))
+        , 'expected #{this} to be NaN'
+        , 'expected #{this} not to be NaN'
+    );
+  });
+
+  /**
+   * ### .exist
+   *
+   * Asserts that the target is neither `null` nor `undefined`.
+   *
+   *     var foo = 'hi'
+   *       , bar = null
+   *       , baz;
+   *
+   *     expect(foo).to.exist;
+   *     expect(bar).to.not.exist;
+   *     expect(baz).to.not.exist;
+   *
+   * @name exist
+   * @namespace BDD
+   * @api public
+   */
+
+  Assertion.addProperty('exist', function () {
+    this.assert(
+        null != flag(this, 'object')
+      , 'expected #{this} to exist'
+      , 'expected #{this} to not exist'
+    );
+  });
+
+
+  /**
+   * ### .empty
+   *
+   * Asserts that the target's length is `0`. For arrays and strings, it checks
+   * the `length` property. For objects, it gets the count of
+   * enumerable keys.
+   *
+   *     expect([]).to.be.empty;
+   *     expect('').to.be.empty;
+   *     expect({}).to.be.empty;
+   *
+   * @name empty
+   * @namespace BDD
+   * @api public
+   */
+
+  Assertion.addProperty('empty', function () {
+    var obj = flag(this, 'object')
+      , expected = obj;
+
+    if (Array.isArray(obj) || 'string' === typeof object) {
+      expected = obj.length;
+    } else if (typeof obj === 'object') {
+      expected = Object.keys(obj).length;
+    }
+
+    this.assert(
+        !expected
+      , 'expected #{this} to be empty'
+      , 'expected #{this} not to be empty'
+    );
+  });
+
+  /**
+   * ### .arguments
+   *
+   * Asserts that the target is an arguments object.
+   *
+   *     function test () {
+   *       expect(arguments).to.be.arguments;
+   *     }
+   *
+   * @name arguments
+   * @alias Arguments
+   * @namespace BDD
+   * @api public
+   */
+
+  function checkArguments () {
+    var obj = flag(this, 'object')
+      , type = Object.prototype.toString.call(obj);
+    this.assert(
+        '[object Arguments]' === type
+      , 'expected #{this} to be arguments but got ' + type
+      , 'expected #{this} to not be arguments'
+    );
+  }
+
+  Assertion.addProperty('arguments', checkArguments);
+  Assertion.addProperty('Arguments', checkArguments);
+
+  /**
+   * ### .equal(value)
+   *
+   * Asserts that the target is strictly equal (`===`) to `value`.
+   * Alternately, if the `deep` flag is set, asserts that
+   * the target is deeply equal to `value`.
+   *
+   *     expect('hello').to.equal('hello');
+   *     expect(42).to.equal(42);
+   *     expect(1).to.not.equal(true);
+   *     expect({ foo: 'bar' }).to.not.equal({ foo: 'bar' });
+   *     expect({ foo: 'bar' }).to.deep.equal({ foo: 'bar' });
+   *
+   * @name equal
+   * @alias equals
+   * @alias eq
+   * @alias deep.equal
+   * @param {Mixed} value
+   * @param {String} message _optional_
+   * @namespace BDD
+   * @api public
+   */
+
+  function assertEqual (val, msg) {
+    if (msg) flag(this, 'message', msg);
+    var obj = flag(this, 'object');
+    if (flag(this, 'deep')) {
+      return this.eql(val);
+    } else {
+      this.assert(
+          val === obj
+        , 'expected #{this} to equal #{exp}'
+        , 'expected #{this} to not equal #{exp}'
+        , val
+        , this._obj
+        , true
+      );
+    }
+  }
+
+  Assertion.addMethod('equal', assertEqual);
+  Assertion.addMethod('equals', assertEqual);
+  Assertion.addMethod('eq', assertEqual);
+
+  /**
+   * ### .eql(value)
+   *
+   * Asserts that the target is deeply equal to `value`.
+   *
+   *     expect({ foo: 'bar' }).to.eql({ foo: 'bar' });
+   *     expect([ 1, 2, 3 ]).to.eql([ 1, 2, 3 ]);
+   *
+   * @name eql
+   * @alias eqls
+   * @param {Mixed} value
+   * @param {String} message _optional_
+   * @namespace BDD
+   * @api public
+   */
+
+  function assertEql(obj, msg) {
+    if (msg) flag(this, 'message', msg);
+    this.assert(
+        _.eql(obj, flag(this, 'object'))
+      , 'expected #{this} to deeply equal #{exp}'
+      , 'expected #{this} to not deeply equal #{exp}'
+      , obj
+      , this._obj
+      , true
+    );
+  }
+
+  Assertion.addMethod('eql', assertEql);
+  Assertion.addMethod('eqls', assertEql);
+
+  /**
+   * ### .above(value)
+   *
+   * Asserts that the target is greater than `value`.
+   *
+   *     expect(10).to.be.above(5);
+   *
+   * Can also be used in conjunction with `length` to
+   * assert a minimum length. The benefit being a
+   * more informative error message than if the length
+   * was supplied directly.
+   *
+   *     expect('foo').to.have.length.above(2);
+   *     expect([ 1, 2, 3 ]).to.have.length.above(2);
+   *
+   * @name above
+   * @alias gt
+   * @alias greaterThan
+   * @param {Number} value
+   * @param {String} message _optional_
+   * @namespace BDD
+   * @api public
+   */
+
+  function assertAbove (n, msg) {
+    if (msg) flag(this, 'message', msg);
+    var obj = flag(this, 'object');
+    if (flag(this, 'doLength')) {
+      new Assertion(obj, msg).to.have.property('length');
+      var len = obj.length;
+      this.assert(
+          len > n
+        , 'expected #{this} to have a length above #{exp} but got #{act}'
+        , 'expected #{this} to not have a length above #{exp}'
+        , n
+        , len
+      );
+    } else {
+      this.assert(
+          obj > n
+        , 'expected #{this} to be above ' + n
+        , 'expected #{this} to be at most ' + n
+      );
+    }
+  }
+
+  Assertion.addMethod('above', assertAbove);
+  Assertion.addMethod('gt', assertAbove);
+  Assertion.addMethod('greaterThan', assertAbove);
+
+  /**
+   * ### .least(value)
+   *
+   * Asserts that the target is greater than or equal to `value`.
+   *
+   *     expect(10).to.be.at.least(10);
+   *
+   * Can also be used in conjunction with `length` to
+   * assert a minimum length. The benefit being a
+   * more informative error message than if the length
+   * was supplied directly.
+   *
+   *     expect('foo').to.have.length.of.at.least(2);
+   *     expect([ 1, 2, 3 ]).to.have.length.of.at.least(3);
+   *
+   * @name least
+   * @alias gte
+   * @param {Number} value
+   * @param {String} message _optional_
+   * @namespace BDD
+   * @api public
+   */
+
+  function assertLeast (n, msg) {
+    if (msg) flag(this, 'message', msg);
+    var obj = flag(this, 'object');
+    if (flag(this, 'doLength')) {
+      new Assertion(obj, msg).to.have.property('length');
+      var len = obj.length;
+      this.assert(
+          len >= n
+        , 'expected #{this} to have a length at least #{exp} but got #{act}'
+        , 'expected #{this} to have a length below #{exp}'
+        , n
+        , len
+      );
+    } else {
+      this.assert(
+          obj >= n
+        , 'expected #{this} to be at least ' + n
+        , 'expected #{this} to be below ' + n
+      );
+    }
+  }
+
+  Assertion.addMethod('least', assertLeast);
+  Assertion.addMethod('gte', assertLeast);
+
+  /**
+   * ### .below(value)
+   *
+   * Asserts that the target is less than `value`.
+   *
+   *     expect(5).to.be.below(10);
+   *
+   * Can also be used in conjunction with `length` to
+   * assert a maximum length. The benefit being a
+   * more informative error message than if the length
+   * was supplied directly.
+   *
+   *     expect('foo').to.have.length.below(4);
+   *     expect([ 1, 2, 3 ]).to.have.length.below(4);
+   *
+   * @name below
+   * @alias lt
+   * @alias lessThan
+   * @param {Number} value
+   * @param {String} message _optional_
+   * @namespace BDD
+   * @api public
+   */
+
+  function assertBelow (n, msg) {
+    if (msg) flag(this, 'message', msg);
+    var obj = flag(this, 'object');
+    if (flag(this, 'doLength')) {
+      new Assertion(obj, msg).to.have.property('length');
+      var len = obj.length;
+      this.assert(
+          len < n
+        , 'expected #{this} to have a length below #{exp} but got #{act}'
+        , 'expected #{this} to not have a length below #{exp}'
+        , n
+        , len
+      );
+    } else {
+      this.assert(
+          obj < n
+        , 'expected #{this} to be below ' + n
+        , 'expected #{this} to be at least ' + n
+      );
+    }
+  }
+
+  Assertion.addMethod('below', assertBelow);
+  Assertion.addMethod('lt', assertBelow);
+  Assertion.addMethod('lessThan', assertBelow);
+
+  /**
+   * ### .most(value)
+   *
+   * Asserts that the target is less than or equal to `value`.
+   *
+   *     expect(5).to.be.at.most(5);
+   *
+   * Can also be used in conjunction with `length` to
+   * assert a maximum length. The benefit being a
+   * more informative error message than if the length
+   * was supplied directly.
+   *
+   *     expect('foo').to.have.length.of.at.most(4);
+   *     expect([ 1, 2, 3 ]).to.have.length.of.at.most(3);
+   *
+   * @name most
+   * @alias lte
+   * @param {Number} value
+   * @param {String} message _optional_
+   * @namespace BDD
+   * @api public
+   */
+
+  function assertMost (n, msg) {
+    if (msg) flag(this, 'message', msg);
+    var obj = flag(this, 'object');
+    if (flag(this, 'doLength')) {
+      new Assertion(obj, msg).to.have.property('length');
+      var len = obj.length;
+      this.assert(
+          len <= n
+        , 'expected #{this} to have a length at most #{exp} but got #{act}'
+        , 'expected #{this} to have a length above #{exp}'
+        , n
+        , len
+      );
+    } else {
+      this.assert(
+          obj <= n
+        , 'expected #{this} to be at most ' + n
+        , 'expected #{this} to be above ' + n
+      );
+    }
+  }
+
+  Assertion.addMethod('most', assertMost);
+  Assertion.addMethod('lte', assertMost);
+
+  /**
+   * ### .within(start, finish)
+   *
+   * Asserts that the target is within a range.
+   *
+   *     expect(7).to.be.within(5,10);
+   *
+   * Can also be used in conjunction with `length` to
+   * assert a length range. The benefit being a
+   * more informative error message than if the length
+   * was supplied directly.
+   *
+   *     expect('foo').to.have.length.within(2,4);
+   *     expect([ 1, 2, 3 ]).to.have.length.within(2,4);
+   *
+   * @name within
+   * @param {Number} start lowerbound inclusive
+   * @param {Number} finish upperbound inclusive
+   * @param {String} message _optional_
+   * @namespace BDD
+   * @api public
+   */
+
+  Assertion.addMethod('within', function (start, finish, msg) {
+    if (msg) flag(this, 'message', msg);
+    var obj = flag(this, 'object')
+      , range = start + '..' + finish;
+    if (flag(this, 'doLength')) {
+      new Assertion(obj, msg).to.have.property('length');
+      var len = obj.length;
+      this.assert(
+          len >= start && len <= finish
+        , 'expected #{this} to have a length within ' + range
+        , 'expected #{this} to not have a length within ' + range
+      );
+    } else {
+      this.assert(
+          obj >= start && obj <= finish
+        , 'expected #{this} to be within ' + range
+        , 'expected #{this} to not be within ' + range
+      );
+    }
+  });
+
+  /**
+   * ### .instanceof(constructor)
+   *
+   * Asserts that the target is an instance of `constructor`.
+   *
+   *     var Tea = function (name) { this.name = name; }
+   *       , Chai = new Tea('chai');
+   *
+   *     expect(Chai).to.be.an.instanceof(Tea);
+   *     expect([ 1, 2, 3 ]).to.be.instanceof(Array);
+   *
+   * @name instanceof
+   * @param {Constructor} constructor
+   * @param {String} message _optional_
+   * @alias instanceOf
+   * @namespace BDD
+   * @api public
+   */
+
+  function assertInstanceOf (constructor, msg) {
+    if (msg) flag(this, 'message', msg);
+    var name = _.getName(constructor);
+    this.assert(
+        flag(this, 'object') instanceof constructor
+      , 'expected #{this} to be an instance of ' + name
+      , 'expected #{this} to not be an instance of ' + name
+    );
+  };
+
+  Assertion.addMethod('instanceof', assertInstanceOf);
+  Assertion.addMethod('instanceOf', assertInstanceOf);
+
+  /**
+   * ### .property(name, [value])
+   *
+   * Asserts that the target has a property `name`, optionally asserting that
+   * the value of that property is strictly equal to  `value`.
+   * If the `deep` flag is set, you can use dot- and bracket-notation for deep
+   * references into objects and arrays.
+   *
+   *     // simple referencing
+   *     var obj = { foo: 'bar' };
+   *     expect(obj).to.have.property('foo');
+   *     expect(obj).to.have.property('foo', 'bar');
+   *
+   *     // deep referencing
+   *     var deepObj = {
+   *         green: { tea: 'matcha' }
+   *       , teas: [ 'chai', 'matcha', { tea: 'konacha' } ]
+   *     };
+   *
+   *     expect(deepObj).to.have.deep.property('green.tea', 'matcha');
+   *     expect(deepObj).to.have.deep.property('teas[1]', 'matcha');
+   *     expect(deepObj).to.have.deep.property('teas[2].tea', 'konacha');
+   *
+   * You can also use an array as the starting point of a `deep.property`
+   * assertion, or traverse nested arrays.
+   *
+   *     var arr = [
+   *         [ 'chai', 'matcha', 'konacha' ]
+   *       , [ { tea: 'chai' }
+   *         , { tea: 'matcha' }
+   *         , { tea: 'konacha' } ]
+   *     ];
+   *
+   *     expect(arr).to.have.deep.property('[0][1]', 'matcha');
+   *     expect(arr).to.have.deep.property('[1][2].tea', 'konacha');
+   *
+   * Furthermore, `property` changes the subject of the assertion
+   * to be the value of that property from the original object. This
+   * permits for further chainable assertions on that property.
+   *
+   *     expect(obj).to.have.property('foo')
+   *       .that.is.a('string');
+   *     expect(deepObj).to.have.property('green')
+   *       .that.is.an('object')
+   *       .that.deep.equals({ tea: 'matcha' });
+   *     expect(deepObj).to.have.property('teas')
+   *       .that.is.an('array')
+   *       .with.deep.property('[2]')
+   *         .that.deep.equals({ tea: 'konacha' });
+   *
+   * Note that dots and bracket in `name` must be backslash-escaped when
+   * the `deep` flag is set, while they must NOT be escaped when the `deep`
+   * flag is not set.
+   *
+   *     // simple referencing
+   *     var css = { '.link[target]': 42 };
+   *     expect(css).to.have.property('.link[target]', 42);
+   *
+   *     // deep referencing
+   *     var deepCss = { '.link': { '[target]': 42 }};
+   *     expect(deepCss).to.have.deep.property('\\.link.\\[target\\]', 42);
+   *
+   * @name property
+   * @alias deep.property
+   * @param {String} name
+   * @param {Mixed} value (optional)
+   * @param {String} message _optional_
+   * @returns value of property for chaining
+   * @namespace BDD
+   * @api public
+   */
+
+  Assertion.addMethod('property', function (name, val, msg) {
+    if (msg) flag(this, 'message', msg);
+
+    var isDeep = !!flag(this, 'deep')
+      , descriptor = isDeep ? 'deep property ' : 'property '
+      , negate = flag(this, 'negate')
+      , obj = flag(this, 'object')
+      , pathInfo = isDeep ? _.getPathInfo(name, obj) : null
+      , hasProperty = isDeep
+        ? pathInfo.exists
+        : _.hasProperty(name, obj)
+      , value = isDeep
+        ? pathInfo.value
+        : obj[name];
+
+    if (negate && arguments.length > 1) {
+      if (undefined === value) {
+        msg = (msg != null) ? msg + ': ' : '';
+        throw new Error(msg + _.inspect(obj) + ' has no ' + descriptor + _.inspect(name));
+      }
+    } else {
+      this.assert(
+          hasProperty
+        , 'expected #{this} to have a ' + descriptor + _.inspect(name)
+        , 'expected #{this} to not have ' + descriptor + _.inspect(name));
+    }
+
+    if (arguments.length > 1) {
+      this.assert(
+          val === value
+        , 'expected #{this} to have a ' + descriptor + _.inspect(name) + ' of #{exp}, but got #{act}'
+        , 'expected #{this} to not have a ' + descriptor + _.inspect(name) + ' of #{act}'
+        , val
+        , value
+      );
+    }
+
+    flag(this, 'object', value);
+  });
+
+
+  /**
+   * ### .ownProperty(name)
+   *
+   * Asserts that the target has an own property `name`.
+   *
+   *     expect('test').to.have.ownProperty('length');
+   *
+   * @name ownProperty
+   * @alias haveOwnProperty
+   * @param {String} name
+   * @param {String} message _optional_
+   * @namespace BDD
+   * @api public
+   */
+
+  function assertOwnProperty (name, msg) {
+    if (msg) flag(this, 'message', msg);
+    var obj = flag(this, 'object');
+    this.assert(
+        obj.hasOwnProperty(name)
+      , 'expected #{this} to have own property ' + _.inspect(name)
+      , 'expected #{this} to not have own property ' + _.inspect(name)
+    );
+  }
+
+  Assertion.addMethod('ownProperty', assertOwnProperty);
+  Assertion.addMethod('haveOwnProperty', assertOwnProperty);
+
+  /**
+   * ### .ownPropertyDescriptor(name[, descriptor[, message]])
+   *
+   * Asserts that the target has an own property descriptor `name`, that optionally matches `descriptor`.
+   *
+   *     expect('test').to.have.ownPropertyDescriptor('length');
+   *     expect('test').to.have.ownPropertyDescriptor('length', { enumerable: false, configurable: false, writable: false, value: 4 });
+   *     expect('test').not.to.have.ownPropertyDescriptor('length', { enumerable: false, configurable: false, writable: false, value: 3 });
+   *     expect('test').ownPropertyDescriptor('length').to.have.property('enumerable', false);
+   *     expect('test').ownPropertyDescriptor('length').to.have.keys('value');
+   *
+   * @name ownPropertyDescriptor
+   * @alias haveOwnPropertyDescriptor
+   * @param {String} name
+   * @param {Object} descriptor _optional_
+   * @param {String} message _optional_
+   * @namespace BDD
+   * @api public
+   */
+
+  function assertOwnPropertyDescriptor (name, descriptor, msg) {
+    if (typeof descriptor === 'string') {
+      msg = descriptor;
+      descriptor = null;
+    }
+    if (msg) flag(this, 'message', msg);
+    var obj = flag(this, 'object');
+    var actualDescriptor = Object.getOwnPropertyDescriptor(Object(obj), name);
+    if (actualDescriptor && descriptor) {
+      this.assert(
+          _.eql(descriptor, actualDescriptor)
+        , 'expected the own property descriptor for ' + _.inspect(name) + ' on #{this} to match ' + _.inspect(descriptor) + ', got ' + _.inspect(actualDescriptor)
+        , 'expected the own property descriptor for ' + _.inspect(name) + ' on #{this} to not match ' + _.inspect(descriptor)
+        , descriptor
+        , actualDescriptor
+        , true
+      );
+    } else {
+      this.assert(
+          actualDescriptor
+        , 'expected #{this} to have an own property descriptor for ' + _.inspect(name)
+        , 'expected #{this} to not have an own property descriptor for ' + _.inspect(name)
+      );
+    }
+    flag(this, 'object', actualDescriptor);
+  }
+
+  Assertion.addMethod('ownPropertyDescriptor', assertOwnPropertyDescriptor);
+  Assertion.addMethod('haveOwnPropertyDescriptor', assertOwnPropertyDescriptor);
+
+  /**
+   * ### .length
+   *
+   * Sets the `doLength` flag later used as a chain precursor to a value
+   * comparison for the `length` property.
+   *
+   *     expect('foo').to.have.length.above(2);
+   *     expect([ 1, 2, 3 ]).to.have.length.above(2);
+   *     expect('foo').to.have.length.below(4);
+   *     expect([ 1, 2, 3 ]).to.have.length.below(4);
+   *     expect('foo').to.have.length.within(2,4);
+   *     expect([ 1, 2, 3 ]).to.have.length.within(2,4);
+   *
+   * *Deprecation notice:* Using `length` as an assertion will be deprecated
+   * in version 2.4.0 and removed in 3.0.0. Code using the old style of
+   * asserting for `length` property value using `length(value)` should be
+   * switched to use `lengthOf(value)` instead.
+   *
+   * @name length
+   * @namespace BDD
+   * @api public
+   */
+
+  /**
+   * ### .lengthOf(value[, message])
+   *
+   * Asserts that the target's `length` property has
+   * the expected value.
+   *
+   *     expect([ 1, 2, 3]).to.have.lengthOf(3);
+   *     expect('foobar').to.have.lengthOf(6);
+   *
+   * @name lengthOf
+   * @param {Number} length
+   * @param {String} message _optional_
+   * @namespace BDD
+   * @api public
+   */
+
+  function assertLengthChain () {
+    flag(this, 'doLength', true);
+  }
+
+  function assertLength (n, msg) {
+    if (msg) flag(this, 'message', msg);
+    var obj = flag(this, 'object');
+    new Assertion(obj, msg).to.have.property('length');
+    var len = obj.length;
+
+    this.assert(
+        len == n
+      , 'expected #{this} to have a length of #{exp} but got #{act}'
+      , 'expected #{this} to not have a length of #{act}'
+      , n
+      , len
+    );
+  }
+
+  Assertion.addChainableMethod('length', assertLength, assertLengthChain);
+  Assertion.addMethod('lengthOf', assertLength);
+
+  /**
+   * ### .match(regexp)
+   *
+   * Asserts that the target matches a regular expression.
+   *
+   *     expect('foobar').to.match(/^foo/);
+   *
+   * @name match
+   * @alias matches
+   * @param {RegExp} RegularExpression
+   * @param {String} message _optional_
+   * @namespace BDD
+   * @api public
+   */
+  function assertMatch(re, msg) {
+    if (msg) flag(this, 'message', msg);
+    var obj = flag(this, 'object');
+    this.assert(
+        re.exec(obj)
+      , 'expected #{this} to match ' + re
+      , 'expected #{this} not to match ' + re
+    );
+  }
+
+  Assertion.addMethod('match', assertMatch);
+  Assertion.addMethod('matches', assertMatch);
+
+  /**
+   * ### .string(string)
+   *
+   * Asserts that the string target contains another string.
+   *
+   *     expect('foobar').to.have.string('bar');
+   *
+   * @name string
+   * @param {String} string
+   * @param {String} message _optional_
+   * @namespace BDD
+   * @api public
+   */
+
+  Assertion.addMethod('string', function (str, msg) {
+    if (msg) flag(this, 'message', msg);
+    var obj = flag(this, 'object');
+    new Assertion(obj, msg).is.a('string');
+
+    this.assert(
+        ~obj.indexOf(str)
+      , 'expected #{this} to contain ' + _.inspect(str)
+      , 'expected #{this} to not contain ' + _.inspect(str)
+    );
+  });
+
+
+  /**
+   * ### .keys(key1, [key2], [...])
+   *
+   * Asserts that the target contains any or all of the passed-in keys.
+   * Use in combination with `any`, `all`, `contains`, or `have` will affect
+   * what will pass.
+   *
+   * When used in conjunction with `any`, at least one key that is passed
+   * in must exist in the target object. This is regardless whether or not
+   * the `have` or `contain` qualifiers are used. Note, either `any` or `all`
+   * should be used in the assertion. If neither are used, the assertion is
+   * defaulted to `all`.
+   *
+   * When both `all` and `contain` are used, the target object must have at
+   * least all of the passed-in keys but may have more keys not listed.
+   *
+   * When both `all` and `have` are used, the target object must both contain
+   * all of the passed-in keys AND the number of keys in the target object must
+   * match the number of keys passed in (in other words, a target object must
+   * have all and only all of the passed-in keys).
+   *
+   *     expect({ foo: 1, bar: 2 }).to.have.any.keys('foo', 'baz');
+   *     expect({ foo: 1, bar: 2 }).to.have.any.keys('foo');
+   *     expect({ foo: 1, bar: 2 }).to.contain.any.keys('bar', 'baz');
+   *     expect({ foo: 1, bar: 2 }).to.contain.any.keys(['foo']);
+   *     expect({ foo: 1, bar: 2 }).to.contain.any.keys({'foo': 6});
+   *     expect({ foo: 1, bar: 2 }).to.have.all.keys(['bar', 'foo']);
+   *     expect({ foo: 1, bar: 2 }).to.have.all.keys({'bar': 6, 'foo': 7});
+   *     expect({ foo: 1, bar: 2, baz: 3 }).to.contain.all.keys(['bar', 'foo']);
+   *     expect({ foo: 1, bar: 2, baz: 3 }).to.contain.all.keys({'bar': 6});
+   *
+   *
+   * @name keys
+   * @alias key
+   * @param {...String|Array|Object} keys
+   * @namespace BDD
+   * @api public
+   */
+
+  function assertKeys (keys) {
+    var obj = flag(this, 'object')
+      , str
+      , ok = true
+      , mixedArgsMsg = 'keys must be given single argument of Array|Object|String, or multiple String arguments';
+
+    switch (_.type(keys)) {
+      case "array":
+        if (arguments.length > 1) throw (new Error(mixedArgsMsg));
+        break;
+      case "object":
+        if (arguments.length > 1) throw (new Error(mixedArgsMsg));
+        keys = Object.keys(keys);
+        break;
+      default:
+        keys = Array.prototype.slice.call(arguments);
+    }
+
+    if (!keys.length) throw new Error('keys required');
+
+    var actual = Object.keys(obj)
+      , expected = keys
+      , len = keys.length
+      , any = flag(this, 'any')
+      , all = flag(this, 'all');
+
+    if (!any && !all) {
+      all = true;
+    }
+
+    // Has any
+    if (any) {
+      var intersection = expected.filter(function(key) {
+        return ~actual.indexOf(key);
+      });
+      ok = intersection.length > 0;
+    }
+
+    // Has all
+    if (all) {
+      ok = keys.every(function(key){
+        return ~actual.indexOf(key);
+      });
+      if (!flag(this, 'negate') && !flag(this, 'contains')) {
+        ok = ok && keys.length == actual.length;
+      }
+    }
+
+    // Key string
+    if (len > 1) {
+      keys = keys.map(function(key){
+        return _.inspect(key);
+      });
+      var last = keys.pop();
+      if (all) {
+        str = keys.join(', ') + ', and ' + last;
+      }
+      if (any) {
+        str = keys.join(', ') + ', or ' + last;
+      }
+    } else {
+      str = _.inspect(keys[0]);
+    }
+
+    // Form
+    str = (len > 1 ? 'keys ' : 'key ') + str;
+
+    // Have / include
+    str = (flag(this, 'contains') ? 'contain ' : 'have ') + str;
+
+    // Assertion
+    this.assert(
+        ok
+      , 'expected #{this} to ' + str
+      , 'expected #{this} to not ' + str
+      , expected.slice(0).sort()
+      , actual.sort()
+      , true
+    );
+  }
+
+  Assertion.addMethod('keys', assertKeys);
+  Assertion.addMethod('key', assertKeys);
+
+  /**
+   * ### .throw(constructor)
+   *
+   * Asserts that the function target will throw a specific error, or specific type of error
+   * (as determined using `instanceof`), optionally with a RegExp or string inclusion test
+   * for the error's message.
+   *
+   *     var err = new ReferenceError('This is a bad function.');
+   *     var fn = function () { throw err; }
+   *     expect(fn).to.throw(ReferenceError);
+   *     expect(fn).to.throw(Error);
+   *     expect(fn).to.throw(/bad function/);
+   *     expect(fn).to.not.throw('good function');
+   *     expect(fn).to.throw(ReferenceError, /bad function/);
+   *     expect(fn).to.throw(err);
+   *
+   * Please note that when a throw expectation is negated, it will check each
+   * parameter independently, starting with error constructor type. The appropriate way
+   * to check for the existence of a type of error but for a message that does not match
+   * is to use `and`.
+   *
+   *     expect(fn).to.throw(ReferenceError)
+   *        .and.not.throw(/good function/);
+   *
+   * @name throw
+   * @alias throws
+   * @alias Throw
+   * @param {ErrorConstructor} constructor
+   * @param {String|RegExp} expected error message
+   * @param {String} message _optional_
+   * @see https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Error#Error_types
+   * @returns error for chaining (null if no error)
+   * @namespace BDD
+   * @api public
+   */
+
+  function assertThrows (constructor, errMsg, msg) {
+    if (msg) flag(this, 'message', msg);
+    var obj = flag(this, 'object');
+    new Assertion(obj, msg).is.a('function');
+
+    var thrown = false
+      , desiredError = null
+      , name = null
+      , thrownError = null;
+
+    if (arguments.length === 0) {
+      errMsg = null;
+      constructor = null;
+    } else if (constructor && (constructor instanceof RegExp || 'string' === typeof constructor)) {
+      errMsg = constructor;
+      constructor = null;
+    } else if (constructor && constructor instanceof Error) {
+      desiredError = constructor;
+      constructor = null;
+      errMsg = null;
+    } else if (typeof constructor === 'function') {
+      name = constructor.prototype.name;
+      if (!name || (name === 'Error' && constructor !== Error)) {
+        name = constructor.name || (new constructor()).name;
+      }
+    } else {
+      constructor = null;
+    }
+
+    try {
+      obj();
+    } catch (err) {
+      // first, check desired error
+      if (desiredError) {
+        this.assert(
+            err === desiredError
+          , 'expected #{this} to throw #{exp} but #{act} was thrown'
+          , 'expected #{this} to not throw #{exp}'
+          , (desiredError instanceof Error ? desiredError.toString() : desiredError)
+          , (err instanceof Error ? err.toString() : err)
+        );
+
+        flag(this, 'object', err);
+        return this;
+      }
+
+      // next, check constructor
+      if (constructor) {
+        this.assert(
+            err instanceof constructor
+          , 'expected #{this} to throw #{exp} but #{act} was thrown'
+          , 'expected #{this} to not throw #{exp} but #{act} was thrown'
+          , name
+          , (err instanceof Error ? err.toString() : err)
+        );
+
+        if (!errMsg) {
+          flag(this, 'object', err);
+          return this;
+        }
+      }
+
+      // next, check message
+      var message = 'error' === _.type(err) && "message" in err
+        ? err.message
+        : '' + err;
+
+      if ((message != null) && errMsg && errMsg instanceof RegExp) {
+        this.assert(
+            errMsg.exec(message)
+          , 'expected #{this} to throw error matching #{exp} but got #{act}'
+          , 'expected #{this} to throw error not matching #{exp}'
+          , errMsg
+          , message
+        );
+
+        flag(this, 'object', err);
+        return this;
+      } else if ((message != null) && errMsg && 'string' === typeof errMsg) {
+        this.assert(
+            ~message.indexOf(errMsg)
+          , 'expected #{this} to throw error including #{exp} but got #{act}'
+          , 'expected #{this} to throw error not including #{act}'
+          , errMsg
+          , message
+        );
+
+        flag(this, 'object', err);
+        return this;
+      } else {
+        thrown = true;
+        thrownError = err;
+      }
+    }
+
+    var actuallyGot = ''
+      , expectedThrown = name !== null
+        ? name
+        : desiredError
+          ? '#{exp}' //_.inspect(desiredError)
+          : 'an error';
+
+    if (thrown) {
+      actuallyGot = ' but #{act} was thrown'
+    }
+
+    this.assert(
+        thrown === true
+      , 'expected #{this} to throw ' + expectedThrown + actuallyGot
+      , 'expected #{this} to not throw ' + expectedThrown + actuallyGot
+      , (desiredError instanceof Error ? desiredError.toString() : desiredError)
+      , (thrownError instanceof Error ? thrownError.toString() : thrownError)
+    );
+
+    flag(this, 'object', thrownError);
+  };
+
+  Assertion.addMethod('throw', assertThrows);
+  Assertion.addMethod('throws', assertThrows);
+  Assertion.addMethod('Throw', assertThrows);
+
+  /**
+   * ### .respondTo(method)
+   *
+   * Asserts that the object or class target will respond to a method.
+   *
+   *     Klass.prototype.bar = function(){};
+   *     expect(Klass).to.respondTo('bar');
+   *     expect(obj).to.respondTo('bar');
+   *
+   * To check if a constructor will respond to a static function,
+   * set the `itself` flag.
+   *
+   *     Klass.baz = function(){};
+   *     expect(Klass).itself.to.respondTo('baz');
+   *
+   * @name respondTo
+   * @alias respondsTo
+   * @param {String} method
+   * @param {String} message _optional_
+   * @namespace BDD
+   * @api public
+   */
+
+  function respondTo (method, msg) {
+    if (msg) flag(this, 'message', msg);
+    var obj = flag(this, 'object')
+      , itself = flag(this, 'itself')
+      , context = ('function' === _.type(obj) && !itself)
+        ? obj.prototype[method]
+        : obj[method];
+
+    this.assert(
+        'function' === typeof context
+      , 'expected #{this} to respond to ' + _.inspect(method)
+      , 'expected #{this} to not respond to ' + _.inspect(method)
+    );
+  }
+
+  Assertion.addMethod('respondTo', respondTo);
+  Assertion.addMethod('respondsTo', respondTo);
+
+  /**
+   * ### .itself
+   *
+   * Sets the `itself` flag, later used by the `respondTo` assertion.
+   *
+   *     function Foo() {}
+   *     Foo.bar = function() {}
+   *     Foo.prototype.baz = function() {}
+   *
+   *     expect(Foo).itself.to.respondTo('bar');
+   *     expect(Foo).itself.not.to.respondTo('baz');
+   *
+   * @name itself
+   * @namespace BDD
+   * @api public
+   */
+
+  Assertion.addProperty('itself', function () {
+    flag(this, 'itself', true);
+  });
+
+  /**
+   * ### .satisfy(method)
+   *
+   * Asserts that the target passes a given truth test.
+   *
+   *     expect(1).to.satisfy(function(num) { return num > 0; });
+   *
+   * @name satisfy
+   * @alias satisfies
+   * @param {Function} matcher
+   * @param {String} message _optional_
+   * @namespace BDD
+   * @api public
+   */
+
+  function satisfy (matcher, msg) {
+    if (msg) flag(this, 'message', msg);
+    var obj = flag(this, 'object');
+    var result = matcher(obj);
+    this.assert(
+        result
+      , 'expected #{this} to satisfy ' + _.objDisplay(matcher)
+      , 'expected #{this} to not satisfy' + _.objDisplay(matcher)
+      , this.negate ? false : true
+      , result
+    );
+  }
+
+  Assertion.addMethod('satisfy', satisfy);
+  Assertion.addMethod('satisfies', satisfy);
+
+  /**
+   * ### .closeTo(expected, delta)
+   *
+   * Asserts that the target is equal `expected`, to within a +/- `delta` range.
+   *
+   *     expect(1.5).to.be.closeTo(1, 0.5);
+   *
+   * @name closeTo
+   * @alias approximately
+   * @param {Number} expected
+   * @param {Number} delta
+   * @param {String} message _optional_
+   * @namespace BDD
+   * @api public
+   */
+
+  function closeTo(expected, delta, msg) {
+    if (msg) flag(this, 'message', msg);
+    var obj = flag(this, 'object');
+
+    new Assertion(obj, msg).is.a('number');
+    if (_.type(expected) !== 'number' || _.type(delta) !== 'number') {
+      throw new Error('the arguments to closeTo or approximately must be numbers');
+    }
+
+    this.assert(
+        Math.abs(obj - expected) <= delta
+      , 'expected #{this} to be close to ' + expected + ' +/- ' + delta
+      , 'expected #{this} not to be close to ' + expected + ' +/- ' + delta
+    );
+  }
+
+  Assertion.addMethod('closeTo', closeTo);
+  Assertion.addMethod('approximately', closeTo);
+
+  function isSubsetOf(subset, superset, cmp) {
+    return subset.every(function(elem) {
+      if (!cmp) return superset.indexOf(elem) !== -1;
+
+      return superset.some(function(elem2) {
+        return cmp(elem, elem2);
+      });
+    })
+  }
+
+  /**
+   * ### .members(set)
+   *
+   * Asserts that the target is a superset of `set`,
+   * or that the target and `set` have the same strictly-equal (===) members.
+   * Alternately, if the `deep` flag is set, set members are compared for deep
+   * equality.
+   *
+   *     expect([1, 2, 3]).to.include.members([3, 2]);
+   *     expect([1, 2, 3]).to.not.include.members([3, 2, 8]);
+   *
+   *     expect([4, 2]).to.have.members([2, 4]);
+   *     expect([5, 2]).to.not.have.members([5, 2, 1]);
+   *
+   *     expect([{ id: 1 }]).to.deep.include.members([{ id: 1 }]);
+   *
+   * @name members
+   * @param {Array} set
+   * @param {String} message _optional_
+   * @namespace BDD
+   * @api public
+   */
+
+  Assertion.addMethod('members', function (subset, msg) {
+    if (msg) flag(this, 'message', msg);
+    var obj = flag(this, 'object');
+
+    new Assertion(obj).to.be.an('array');
+    new Assertion(subset).to.be.an('array');
+
+    var cmp = flag(this, 'deep') ? _.eql : undefined;
+
+    if (flag(this, 'contains')) {
+      return this.assert(
+          isSubsetOf(subset, obj, cmp)
+        , 'expected #{this} to be a superset of #{act}'
+        , 'expected #{this} to not be a superset of #{act}'
+        , obj
+        , subset
+      );
+    }
+
+    this.assert(
+        isSubsetOf(obj, subset, cmp) && isSubsetOf(subset, obj, cmp)
+        , 'expected #{this} to have the same members as #{act}'
+        , 'expected #{this} to not have the same members as #{act}'
+        , obj
+        , subset
+    );
+  });
+
+  /**
+   * ### .oneOf(list)
+   *
+   * Assert that a value appears somewhere in the top level of array `list`.
+   *
+   *     expect('a').to.be.oneOf(['a', 'b', 'c']);
+   *     expect(9).to.not.be.oneOf(['z']);
+   *     expect([3]).to.not.be.oneOf([1, 2, [3]]);
+   *
+   *     var three = [3];
+   *     // for object-types, contents are not compared
+   *     expect(three).to.not.be.oneOf([1, 2, [3]]);
+   *     // comparing references works
+   *     expect(three).to.be.oneOf([1, 2, three]);
+   *
+   * @name oneOf
+   * @param {Array<*>} list
+   * @param {String} message _optional_
+   * @namespace BDD
+   * @api public
+   */
+
+  function oneOf (list, msg) {
+    if (msg) flag(this, 'message', msg);
+    var expected = flag(this, 'object');
+    new Assertion(list).to.be.an('array');
+
+    this.assert(
+        list.indexOf(expected) > -1
+      , 'expected #{this} to be one of #{exp}'
+      , 'expected #{this} to not be one of #{exp}'
+      , list
+      , expected
+    );
+  }
+
+  Assertion.addMethod('oneOf', oneOf);
+
+
+  /**
+   * ### .change(function)
+   *
+   * Asserts that a function changes an object property
+   *
+   *     var obj = { val: 10 };
+   *     var fn = function() { obj.val += 3 };
+   *     var noChangeFn = function() { return 'foo' + 'bar'; }
+   *     expect(fn).to.change(obj, 'val');
+   *     expect(noChangeFn).to.not.change(obj, 'val')
+   *
+   * @name change
+   * @alias changes
+   * @alias Change
+   * @param {String} object
+   * @param {String} property name
+   * @param {String} message _optional_
+   * @namespace BDD
+   * @api public
+   */
+
+  function assertChanges (object, prop, msg) {
+    if (msg) flag(this, 'message', msg);
+    var fn = flag(this, 'object');
+    new Assertion(object, msg).to.have.property(prop);
+    new Assertion(fn).is.a('function');
+
+    var initial = object[prop];
+    fn();
+
+    this.assert(
+      initial !== object[prop]
+      , 'expected .' + prop + ' to change'
+      , 'expected .' + prop + ' to not change'
+    );
+  }
+
+  Assertion.addChainableMethod('change', assertChanges);
+  Assertion.addChainableMethod('changes', assertChanges);
+
+  /**
+   * ### .increase(function)
+   *
+   * Asserts that a function increases an object property
+   *
+   *     var obj = { val: 10 };
+   *     var fn = function() { obj.val = 15 };
+   *     expect(fn).to.increase(obj, 'val');
+   *
+   * @name increase
+   * @alias increases
+   * @alias Increase
+   * @param {String} object
+   * @param {String} property name
+   * @param {String} message _optional_
+   * @namespace BDD
+   * @api public
+   */
+
+  function assertIncreases (object, prop, msg) {
+    if (msg) flag(this, 'message', msg);
+    var fn = flag(this, 'object');
+    new Assertion(object, msg).to.have.property(prop);
+    new Assertion(fn).is.a('function');
+
+    var initial = object[prop];
+    fn();
+
+    this.assert(
+      object[prop] - initial > 0
+      , 'expected .' + prop + ' to increase'
+      , 'expected .' + prop + ' to not increase'
+    );
+  }
+
+  Assertion.addChainableMethod('increase', assertIncreases);
+  Assertion.addChainableMethod('increases', assertIncreases);
+
+  /**
+   * ### .decrease(function)
+   *
+   * Asserts that a function decreases an object property
+   *
+   *     var obj = { val: 10 };
+   *     var fn = function() { obj.val = 5 };
+   *     expect(fn).to.decrease(obj, 'val');
+   *
+   * @name decrease
+   * @alias decreases
+   * @alias Decrease
+   * @param {String} object
+   * @param {String} property name
+   * @param {String} message _optional_
+   * @namespace BDD
+   * @api public
+   */
+
+  function assertDecreases (object, prop, msg) {
+    if (msg) flag(this, 'message', msg);
+    var fn = flag(this, 'object');
+    new Assertion(object, msg).to.have.property(prop);
+    new Assertion(fn).is.a('function');
+
+    var initial = object[prop];
+    fn();
+
+    this.assert(
+      object[prop] - initial < 0
+      , 'expected .' + prop + ' to decrease'
+      , 'expected .' + prop + ' to not decrease'
+    );
+  }
+
+  Assertion.addChainableMethod('decrease', assertDecreases);
+  Assertion.addChainableMethod('decreases', assertDecreases);
+
+  /**
+   * ### .extensible
+   *
+   * Asserts that the target is extensible (can have new properties added to
+   * it).
+   *
+   *     var nonExtensibleObject = Object.preventExtensions({});
+   *     var sealedObject = Object.seal({});
+   *     var frozenObject = Object.freeze({});
+   *
+   *     expect({}).to.be.extensible;
+   *     expect(nonExtensibleObject).to.not.be.extensible;
+   *     expect(sealedObject).to.not.be.extensible;
+   *     expect(frozenObject).to.not.be.extensible;
+   *
+   * @name extensible
+   * @namespace BDD
+   * @api public
+   */
+
+  Assertion.addProperty('extensible', function() {
+    var obj = flag(this, 'object');
+
+    // In ES5, if the argument to this method is not an object (a primitive), then it will cause a TypeError.
+    // In ES6, a non-object argument will be treated as if it was a non-extensible ordinary object, simply return false.
+    // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/isExtensible
+    // The following provides ES6 behavior when a TypeError is thrown under ES5.
+
+    var isExtensible;
+
+    try {
+      isExtensible = Object.isExtensible(obj);
+    } catch (err) {
+      if (err instanceof TypeError) isExtensible = false;
+      else throw err;
+    }
+
+    this.assert(
+      isExtensible
+      , 'expected #{this} to be extensible'
+      , 'expected #{this} to not be extensible'
+    );
+  });
+
+  /**
+   * ### .sealed
+   *
+   * Asserts that the target is sealed (cannot have new properties added to it
+   * and its existing properties cannot be removed).
+   *
+   *     var sealedObject = Object.seal({});
+   *     var frozenObject = Object.freeze({});
+   *
+   *     expect(sealedObject).to.be.sealed;
+   *     expect(frozenObject).to.be.sealed;
+   *     expect({}).to.not.be.sealed;
+   *
+   * @name sealed
+   * @namespace BDD
+   * @api public
+   */
+
+  Assertion.addProperty('sealed', function() {
+    var obj = flag(this, 'object');
+
+    // In ES5, if the argument to this method is not an object (a primitive), then it will cause a TypeError.
+    // In ES6, a non-object argument will be treated as if it was a sealed ordinary object, simply return true.
+    // See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/isSealed
+    // The following provides ES6 behavior when a TypeError is thrown under ES5.
+
+    var isSealed;
+
+    try {
+      isSealed = Object.isSealed(obj);
+    } catch (err) {
+      if (err instanceof TypeError) isSealed = true;
+      else throw err;
+    }
+
+    this.assert(
+      isSealed
+      , 'expected #{this} to be sealed'
+      , 'expected #{this} to not be sealed'
+    );
+  });
+
+  /**
+   * ### .frozen
+   *
+   * Asserts that the target is frozen (cannot have new properties added to it
+   * and its existing properties cannot be modified).
+   *
+   *     var frozenObject = Object.freeze({});
+   *
+   *     expect(frozenObject).to.be.frozen;
+   *     expect({}).to.not.be.frozen;
+   *
+   * @name frozen
+   * @namespace BDD
+   * @api public
+   */
+
+  Assertion.addProperty('frozen', function() {
+    var obj = flag(this, 'object');
+
+    // In ES5, if the argument to this method is not an object (a primitive), then it will cause a TypeError.
+    // In ES6, a non-object argument will be treated as if it was a frozen ordinary object, simply return true.
+    // See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/isFrozen
+    // The following provides ES6 behavior when a TypeError is thrown under ES5.
+
+    var isFrozen;
+
+    try {
+      isFrozen = Object.isFrozen(obj);
+    } catch (err) {
+      if (err instanceof TypeError) isFrozen = true;
+      else throw err;
+    }
+
+    this.assert(
+      isFrozen
+      , 'expected #{this} to be frozen'
+      , 'expected #{this} to not be frozen'
+    );
+  });
+};
+
+},{}],308:[function(require,module,exports){
+/*!
+ * chai
+ * Copyright(c) 2011-2014 Jake Luer <jake@alogicalparadox.com>
+ * MIT Licensed
+ */
+
+
+module.exports = function (chai, util) {
+
+  /*!
+   * Chai dependencies.
+   */
+
+  var Assertion = chai.Assertion
+    , flag = util.flag;
+
+  /*!
+   * Module export.
+   */
+
+  /**
+   * ### assert(expression, message)
+   *
+   * Write your own test expressions.
+   *
+   *     assert('foo' !== 'bar', 'foo is not bar');
+   *     assert(Array.isArray([]), 'empty arrays are arrays');
+   *
+   * @param {Mixed} expression to test for truthiness
+   * @param {String} message to display on error
+   * @name assert
+   * @namespace Assert
+   * @api public
+   */
+
+  var assert = chai.assert = function (express, errmsg) {
+    var test = new Assertion(null, null, chai.assert);
+    test.assert(
+        express
+      , errmsg
+      , '[ negation message unavailable ]'
+    );
+  };
+
+  /**
+   * ### .fail(actual, expected, [message], [operator])
+   *
+   * Throw a failure. Node.js `assert` module-compatible.
+   *
+   * @name fail
+   * @param {Mixed} actual
+   * @param {Mixed} expected
+   * @param {String} message
+   * @param {String} operator
+   * @namespace Assert
+   * @api public
+   */
+
+  assert.fail = function (actual, expected, message, operator) {
+    message = message || 'assert.fail()';
+    throw new chai.AssertionError(message, {
+        actual: actual
+      , expected: expected
+      , operator: operator
+    }, assert.fail);
+  };
+
+  /**
+   * ### .isOk(object, [message])
+   *
+   * Asserts that `object` is truthy.
+   *
+   *     assert.isOk('everything', 'everything is ok');
+   *     assert.isOk(false, 'this will fail');
+   *
+   * @name isOk
+   * @alias ok
+   * @param {Mixed} object to test
+   * @param {String} message
+   * @namespace Assert
+   * @api public
+   */
+
+  assert.isOk = function (val, msg) {
+    new Assertion(val, msg).is.ok;
+  };
+
+  /**
+   * ### .isNotOk(object, [message])
+   *
+   * Asserts that `object` is falsy.
+   *
+   *     assert.isNotOk('everything', 'this will fail');
+   *     assert.isNotOk(false, 'this will pass');
+   *
+   * @name isNotOk
+   * @alias notOk
+   * @param {Mixed} object to test
+   * @param {String} message
+   * @namespace Assert
+   * @api public
+   */
+
+  assert.isNotOk = function (val, msg) {
+    new Assertion(val, msg).is.not.ok;
+  };
+
+  /**
+   * ### .equal(actual, expected, [message])
+   *
+   * Asserts non-strict equality (`==`) of `actual` and `expected`.
+   *
+   *     assert.equal(3, '3', '== coerces values to strings');
+   *
+   * @name equal
+   * @param {Mixed} actual
+   * @param {Mixed} expected
+   * @param {String} message
+   * @namespace Assert
+   * @api public
+   */
+
+  assert.equal = function (act, exp, msg) {
+    var test = new Assertion(act, msg, assert.equal);
+
+    test.assert(
+        exp == flag(test, 'object')
+      , 'expected #{this} to equal #{exp}'
+      , 'expected #{this} to not equal #{act}'
+      , exp
+      , act
+    );
+  };
+
+  /**
+   * ### .notEqual(actual, expected, [message])
+   *
+   * Asserts non-strict inequality (`!=`) of `actual` and `expected`.
+   *
+   *     assert.notEqual(3, 4, 'these numbers are not equal');
+   *
+   * @name notEqual
+   * @param {Mixed} actual
+   * @param {Mixed} expected
+   * @param {String} message
+   * @namespace Assert
+   * @api public
+   */
+
+  assert.notEqual = function (act, exp, msg) {
+    var test = new Assertion(act, msg, assert.notEqual);
+
+    test.assert(
+        exp != flag(test, 'object')
+      , 'expected #{this} to not equal #{exp}'
+      , 'expected #{this} to equal #{act}'
+      , exp
+      , act
+    );
+  };
+
+  /**
+   * ### .strictEqual(actual, expected, [message])
+   *
+   * Asserts strict equality (`===`) of `actual` and `expected`.
+   *
+   *     assert.strictEqual(true, true, 'these booleans are strictly equal');
+   *
+   * @name strictEqual
+   * @param {Mixed} actual
+   * @param {Mixed} expected
+   * @param {String} message
+   * @namespace Assert
+   * @api public
+   */
+
+  assert.strictEqual = function (act, exp, msg) {
+    new Assertion(act, msg).to.equal(exp);
+  };
+
+  /**
+   * ### .notStrictEqual(actual, expected, [message])
+   *
+   * Asserts strict inequality (`!==`) of `actual` and `expected`.
+   *
+   *     assert.notStrictEqual(3, '3', 'no coercion for strict equality');
+   *
+   * @name notStrictEqual
+   * @param {Mixed} actual
+   * @param {Mixed} expected
+   * @param {String} message
+   * @namespace Assert
+   * @api public
+   */
+
+  assert.notStrictEqual = function (act, exp, msg) {
+    new Assertion(act, msg).to.not.equal(exp);
+  };
+
+  /**
+   * ### .deepEqual(actual, expected, [message])
+   *
+   * Asserts that `actual` is deeply equal to `expected`.
+   *
+   *     assert.deepEqual({ tea: 'green' }, { tea: 'green' });
+   *
+   * @name deepEqual
+   * @param {Mixed} actual
+   * @param {Mixed} expected
+   * @param {String} message
+   * @namespace Assert
+   * @api public
+   */
+
+  assert.deepEqual = function (act, exp, msg) {
+    new Assertion(act, msg).to.eql(exp);
+  };
+
+  /**
+   * ### .notDeepEqual(actual, expected, [message])
+   *
+   * Assert that `actual` is not deeply equal to `expected`.
+   *
+   *     assert.notDeepEqual({ tea: 'green' }, { tea: 'jasmine' });
+   *
+   * @name notDeepEqual
+   * @param {Mixed} actual
+   * @param {Mixed} expected
+   * @param {String} message
+   * @namespace Assert
+   * @api public
+   */
+
+  assert.notDeepEqual = function (act, exp, msg) {
+    new Assertion(act, msg).to.not.eql(exp);
+  };
+
+   /**
+   * ### .isAbove(valueToCheck, valueToBeAbove, [message])
+   *
+   * Asserts `valueToCheck` is strictly greater than (>) `valueToBeAbove`
+   *
+   *     assert.isAbove(5, 2, '5 is strictly greater than 2');
+   *
+   * @name isAbove
+   * @param {Mixed} valueToCheck
+   * @param {Mixed} valueToBeAbove
+   * @param {String} message
+   * @namespace Assert
+   * @api public
+   */
+
+  assert.isAbove = function (val, abv, msg) {
+    new Assertion(val, msg).to.be.above(abv);
+  };
+
+   /**
+   * ### .isAtLeast(valueToCheck, valueToBeAtLeast, [message])
+   *
+   * Asserts `valueToCheck` is greater than or equal to (>=) `valueToBeAtLeast`
+   *
+   *     assert.isAtLeast(5, 2, '5 is greater or equal to 2');
+   *     assert.isAtLeast(3, 3, '3 is greater or equal to 3');
+   *
+   * @name isAtLeast
+   * @param {Mixed} valueToCheck
+   * @param {Mixed} valueToBeAtLeast
+   * @param {String} message
+   * @namespace Assert
+   * @api public
+   */
+
+  assert.isAtLeast = function (val, atlst, msg) {
+    new Assertion(val, msg).to.be.least(atlst);
+  };
+
+   /**
+   * ### .isBelow(valueToCheck, valueToBeBelow, [message])
+   *
+   * Asserts `valueToCheck` is strictly less than (<) `valueToBeBelow`
+   *
+   *     assert.isBelow(3, 6, '3 is strictly less than 6');
+   *
+   * @name isBelow
+   * @param {Mixed} valueToCheck
+   * @param {Mixed} valueToBeBelow
+   * @param {String} message
+   * @namespace Assert
+   * @api public
+   */
+
+  assert.isBelow = function (val, blw, msg) {
+    new Assertion(val, msg).to.be.below(blw);
+  };
+
+   /**
+   * ### .isAtMost(valueToCheck, valueToBeAtMost, [message])
+   *
+   * Asserts `valueToCheck` is less than or equal to (<=) `valueToBeAtMost`
+   *
+   *     assert.isAtMost(3, 6, '3 is less than or equal to 6');
+   *     assert.isAtMost(4, 4, '4 is less than or equal to 4');
+   *
+   * @name isAtMost
+   * @param {Mixed} valueToCheck
+   * @param {Mixed} valueToBeAtMost
+   * @param {String} message
+   * @namespace Assert
+   * @api public
+   */
+
+  assert.isAtMost = function (val, atmst, msg) {
+    new Assertion(val, msg).to.be.most(atmst);
+  };
+
+  /**
+   * ### .isTrue(value, [message])
+   *
+   * Asserts that `value` is true.
+   *
+   *     var teaServed = true;
+   *     assert.isTrue(teaServed, 'the tea has been served');
+   *
+   * @name isTrue
+   * @param {Mixed} value
+   * @param {String} message
+   * @namespace Assert
+   * @api public
+   */
+
+  assert.isTrue = function (val, msg) {
+    new Assertion(val, msg).is['true'];
+  };
+
+  /**
+   * ### .isNotTrue(value, [message])
+   *
+   * Asserts that `value` is not true.
+   *
+   *     var tea = 'tasty chai';
+   *     assert.isNotTrue(tea, 'great, time for tea!');
+   *
+   * @name isNotTrue
+   * @param {Mixed} value
+   * @param {String} message
+   * @namespace Assert
+   * @api public
+   */
+
+  assert.isNotTrue = function (val, msg) {
+    new Assertion(val, msg).to.not.equal(true);
+  };
+
+  /**
+   * ### .isFalse(value, [message])
+   *
+   * Asserts that `value` is false.
+   *
+   *     var teaServed = false;
+   *     assert.isFalse(teaServed, 'no tea yet? hmm...');
+   *
+   * @name isFalse
+   * @param {Mixed} value
+   * @param {String} message
+   * @namespace Assert
+   * @api public
+   */
+
+  assert.isFalse = function (val, msg) {
+    new Assertion(val, msg).is['false'];
+  };
+
+  /**
+   * ### .isNotFalse(value, [message])
+   *
+   * Asserts that `value` is not false.
+   *
+   *     var tea = 'tasty chai';
+   *     assert.isNotFalse(tea, 'great, time for tea!');
+   *
+   * @name isNotFalse
+   * @param {Mixed} value
+   * @param {String} message
+   * @namespace Assert
+   * @api public
+   */
+
+  assert.isNotFalse = function (val, msg) {
+    new Assertion(val, msg).to.not.equal(false);
+  };
+
+  /**
+   * ### .isNull(value, [message])
+   *
+   * Asserts that `value` is null.
+   *
+   *     assert.isNull(err, 'there was no error');
+   *
+   * @name isNull
+   * @param {Mixed} value
+   * @param {String} message
+   * @namespace Assert
+   * @api public
+   */
+
+  assert.isNull = function (val, msg) {
+    new Assertion(val, msg).to.equal(null);
+  };
+
+  /**
+   * ### .isNotNull(value, [message])
+   *
+   * Asserts that `value` is not null.
+   *
+   *     var tea = 'tasty chai';
+   *     assert.isNotNull(tea, 'great, time for tea!');
+   *
+   * @name isNotNull
+   * @param {Mixed} value
+   * @param {String} message
+   * @namespace Assert
+   * @api public
+   */
+
+  assert.isNotNull = function (val, msg) {
+    new Assertion(val, msg).to.not.equal(null);
+  };
+
+  /**
+   * ### .isNaN
+   * Asserts that value is NaN
+   *
+   *    assert.isNaN('foo', 'foo is NaN');
+   *
+   * @name isNaN
+   * @param {Mixed} value
+   * @param {String} message
+   * @namespace Assert
+   * @api public
+   */
+
+  assert.isNaN = function (val, msg) {
+    new Assertion(val, msg).to.be.NaN;
+  };
+
+  /**
+   * ### .isNotNaN
+   * Asserts that value is not NaN
+   *
+   *    assert.isNotNaN(4, '4 is not NaN');
+   *
+   * @name isNotNaN
+   * @param {Mixed} value
+   * @param {String} message
+   * @namespace Assert
+   * @api public
+   */
+  assert.isNotNaN = function (val, msg) {
+    new Assertion(val, msg).not.to.be.NaN;
+  };
+
+  /**
+   * ### .isUndefined(value, [message])
+   *
+   * Asserts that `value` is `undefined`.
+   *
+   *     var tea;
+   *     assert.isUndefined(tea, 'no tea defined');
+   *
+   * @name isUndefined
+   * @param {Mixed} value
+   * @param {String} message
+   * @namespace Assert
+   * @api public
+   */
+
+  assert.isUndefined = function (val, msg) {
+    new Assertion(val, msg).to.equal(undefined);
+  };
+
+  /**
+   * ### .isDefined(value, [message])
+   *
+   * Asserts that `value` is not `undefined`.
+   *
+   *     var tea = 'cup of chai';
+   *     assert.isDefined(tea, 'tea has been defined');
+   *
+   * @name isDefined
+   * @param {Mixed} value
+   * @param {String} message
+   * @namespace Assert
+   * @api public
+   */
+
+  assert.isDefined = function (val, msg) {
+    new Assertion(val, msg).to.not.equal(undefined);
+  };
+
+  /**
+   * ### .isFunction(value, [message])
+   *
+   * Asserts that `value` is a function.
+   *
+   *     function serveTea() { return 'cup of tea'; };
+   *     assert.isFunction(serveTea, 'great, we can have tea now');
+   *
+   * @name isFunction
+   * @param {Mixed} value
+   * @param {String} message
+   * @namespace Assert
+   * @api public
+   */
+
+  assert.isFunction = function (val, msg) {
+    new Assertion(val, msg).to.be.a('function');
+  };
+
+  /**
+   * ### .isNotFunction(value, [message])
+   *
+   * Asserts that `value` is _not_ a function.
+   *
+   *     var serveTea = [ 'heat', 'pour', 'sip' ];
+   *     assert.isNotFunction(serveTea, 'great, we have listed the steps');
+   *
+   * @name isNotFunction
+   * @param {Mixed} value
+   * @param {String} message
+   * @namespace Assert
+   * @api public
+   */
+
+  assert.isNotFunction = function (val, msg) {
+    new Assertion(val, msg).to.not.be.a('function');
+  };
+
+  /**
+   * ### .isObject(value, [message])
+   *
+   * Asserts that `value` is an object of type 'Object' (as revealed by `Object.prototype.toString`).
+   * _The assertion does not match subclassed objects._
+   *
+   *     var selection = { name: 'Chai', serve: 'with spices' };
+   *     assert.isObject(selection, 'tea selection is an object');
+   *
+   * @name isObject
+   * @param {Mixed} value
+   * @param {String} message
+   * @namespace Assert
+   * @api public
+   */
+
+  assert.isObject = function (val, msg) {
+    new Assertion(val, msg).to.be.a('object');
+  };
+
+  /**
+   * ### .isNotObject(value, [message])
+   *
+   * Asserts that `value` is _not_ an object of type 'Object' (as revealed by `Object.prototype.toString`).
+   *
+   *     var selection = 'chai'
+   *     assert.isNotObject(selection, 'tea selection is not an object');
+   *     assert.isNotObject(null, 'null is not an object');
+   *
+   * @name isNotObject
+   * @param {Mixed} value
+   * @param {String} message
+   * @namespace Assert
+   * @api public
+   */
+
+  assert.isNotObject = function (val, msg) {
+    new Assertion(val, msg).to.not.be.a('object');
+  };
+
+  /**
+   * ### .isArray(value, [message])
+   *
+   * Asserts that `value` is an array.
+   *
+   *     var menu = [ 'green', 'chai', 'oolong' ];
+   *     assert.isArray(menu, 'what kind of tea do we want?');
+   *
+   * @name isArray
+   * @param {Mixed} value
+   * @param {String} message
+   * @namespace Assert
+   * @api public
+   */
+
+  assert.isArray = function (val, msg) {
+    new Assertion(val, msg).to.be.an('array');
+  };
+
+  /**
+   * ### .isNotArray(value, [message])
+   *
+   * Asserts that `value` is _not_ an array.
+   *
+   *     var menu = 'green|chai|oolong';
+   *     assert.isNotArray(menu, 'what kind of tea do we want?');
+   *
+   * @name isNotArray
+   * @param {Mixed} value
+   * @param {String} message
+   * @namespace Assert
+   * @api public
+   */
+
+  assert.isNotArray = function (val, msg) {
+    new Assertion(val, msg).to.not.be.an('array');
+  };
+
+  /**
+   * ### .isString(value, [message])
+   *
+   * Asserts that `value` is a string.
+   *
+   *     var teaOrder = 'chai';
+   *     assert.isString(teaOrder, 'order placed');
+   *
+   * @name isString
+   * @param {Mixed} value
+   * @param {String} message
+   * @namespace Assert
+   * @api public
+   */
+
+  assert.isString = function (val, msg) {
+    new Assertion(val, msg).to.be.a('string');
+  };
+
+  /**
+   * ### .isNotString(value, [message])
+   *
+   * Asserts that `value` is _not_ a string.
+   *
+   *     var teaOrder = 4;
+   *     assert.isNotString(teaOrder, 'order placed');
+   *
+   * @name isNotString
+   * @param {Mixed} value
+   * @param {String} message
+   * @namespace Assert
+   * @api public
+   */
+
+  assert.isNotString = function (val, msg) {
+    new Assertion(val, msg).to.not.be.a('string');
+  };
+
+  /**
+   * ### .isNumber(value, [message])
+   *
+   * Asserts that `value` is a number.
+   *
+   *     var cups = 2;
+   *     assert.isNumber(cups, 'how many cups');
+   *
+   * @name isNumber
+   * @param {Number} value
+   * @param {String} message
+   * @namespace Assert
+   * @api public
+   */
+
+  assert.isNumber = function (val, msg) {
+    new Assertion(val, msg).to.be.a('number');
+  };
+
+  /**
+   * ### .isNotNumber(value, [message])
+   *
+   * Asserts that `value` is _not_ a number.
+   *
+   *     var cups = '2 cups please';
+   *     assert.isNotNumber(cups, 'how many cups');
+   *
+   * @name isNotNumber
+   * @param {Mixed} value
+   * @param {String} message
+   * @namespace Assert
+   * @api public
+   */
+
+  assert.isNotNumber = function (val, msg) {
+    new Assertion(val, msg).to.not.be.a('number');
+  };
+
+  /**
+   * ### .isBoolean(value, [message])
+   *
+   * Asserts that `value` is a boolean.
+   *
+   *     var teaReady = true
+   *       , teaServed = false;
+   *
+   *     assert.isBoolean(teaReady, 'is the tea ready');
+   *     assert.isBoolean(teaServed, 'has tea been served');
+   *
+   * @name isBoolean
+   * @param {Mixed} value
+   * @param {String} message
+   * @namespace Assert
+   * @api public
+   */
+
+  assert.isBoolean = function (val, msg) {
+    new Assertion(val, msg).to.be.a('boolean');
+  };
+
+  /**
+   * ### .isNotBoolean(value, [message])
+   *
+   * Asserts that `value` is _not_ a boolean.
+   *
+   *     var teaReady = 'yep'
+   *       , teaServed = 'nope';
+   *
+   *     assert.isNotBoolean(teaReady, 'is the tea ready');
+   *     assert.isNotBoolean(teaServed, 'has tea been served');
+   *
+   * @name isNotBoolean
+   * @param {Mixed} value
+   * @param {String} message
+   * @namespace Assert
+   * @api public
+   */
+
+  assert.isNotBoolean = function (val, msg) {
+    new Assertion(val, msg).to.not.be.a('boolean');
+  };
+
+  /**
+   * ### .typeOf(value, name, [message])
+   *
+   * Asserts that `value`'s type is `name`, as determined by
+   * `Object.prototype.toString`.
+   *
+   *     assert.typeOf({ tea: 'chai' }, 'object', 'we have an object');
+   *     assert.typeOf(['chai', 'jasmine'], 'array', 'we have an array');
+   *     assert.typeOf('tea', 'string', 'we have a string');
+   *     assert.typeOf(/tea/, 'regexp', 'we have a regular expression');
+   *     assert.typeOf(null, 'null', 'we have a null');
+   *     assert.typeOf(undefined, 'undefined', 'we have an undefined');
+   *
+   * @name typeOf
+   * @param {Mixed} value
+   * @param {String} name
+   * @param {String} message
+   * @namespace Assert
+   * @api public
+   */
+
+  assert.typeOf = function (val, type, msg) {
+    new Assertion(val, msg).to.be.a(type);
+  };
+
+  /**
+   * ### .notTypeOf(value, name, [message])
+   *
+   * Asserts that `value`'s type is _not_ `name`, as determined by
+   * `Object.prototype.toString`.
+   *
+   *     assert.notTypeOf('tea', 'number', 'strings are not numbers');
+   *
+   * @name notTypeOf
+   * @param {Mixed} value
+   * @param {String} typeof name
+   * @param {String} message
+   * @namespace Assert
+   * @api public
+   */
+
+  assert.notTypeOf = function (val, type, msg) {
+    new Assertion(val, msg).to.not.be.a(type);
+  };
+
+  /**
+   * ### .instanceOf(object, constructor, [message])
+   *
+   * Asserts that `value` is an instance of `constructor`.
+   *
+   *     var Tea = function (name) { this.name = name; }
+   *       , chai = new Tea('chai');
+   *
+   *     assert.instanceOf(chai, Tea, 'chai is an instance of tea');
+   *
+   * @name instanceOf
+   * @param {Object} object
+   * @param {Constructor} constructor
+   * @param {String} message
+   * @namespace Assert
+   * @api public
+   */
+
+  assert.instanceOf = function (val, type, msg) {
+    new Assertion(val, msg).to.be.instanceOf(type);
+  };
+
+  /**
+   * ### .notInstanceOf(object, constructor, [message])
+   *
+   * Asserts `value` is not an instance of `constructor`.
+   *
+   *     var Tea = function (name) { this.name = name; }
+   *       , chai = new String('chai');
+   *
+   *     assert.notInstanceOf(chai, Tea, 'chai is not an instance of tea');
+   *
+   * @name notInstanceOf
+   * @param {Object} object
+   * @param {Constructor} constructor
+   * @param {String} message
+   * @namespace Assert
+   * @api public
+   */
+
+  assert.notInstanceOf = function (val, type, msg) {
+    new Assertion(val, msg).to.not.be.instanceOf(type);
+  };
+
+  /**
+   * ### .include(haystack, needle, [message])
+   *
+   * Asserts that `haystack` includes `needle`. Works
+   * for strings and arrays.
+   *
+   *     assert.include('foobar', 'bar', 'foobar contains string "bar"');
+   *     assert.include([ 1, 2, 3 ], 3, 'array contains value');
+   *
+   * @name include
+   * @param {Array|String} haystack
+   * @param {Mixed} needle
+   * @param {String} message
+   * @namespace Assert
+   * @api public
+   */
+
+  assert.include = function (exp, inc, msg) {
+    new Assertion(exp, msg, assert.include).include(inc);
+  };
+
+  /**
+   * ### .notInclude(haystack, needle, [message])
+   *
+   * Asserts that `haystack` does not include `needle`. Works
+   * for strings and arrays.
+   *
+   *     assert.notInclude('foobar', 'baz', 'string not include substring');
+   *     assert.notInclude([ 1, 2, 3 ], 4, 'array not include contain value');
+   *
+   * @name notInclude
+   * @param {Array|String} haystack
+   * @param {Mixed} needle
+   * @param {String} message
+   * @namespace Assert
+   * @api public
+   */
+
+  assert.notInclude = function (exp, inc, msg) {
+    new Assertion(exp, msg, assert.notInclude).not.include(inc);
+  };
+
+  /**
+   * ### .match(value, regexp, [message])
+   *
+   * Asserts that `value` matches the regular expression `regexp`.
+   *
+   *     assert.match('foobar', /^foo/, 'regexp matches');
+   *
+   * @name match
+   * @param {Mixed} value
+   * @param {RegExp} regexp
+   * @param {String} message
+   * @namespace Assert
+   * @api public
+   */
+
+  assert.match = function (exp, re, msg) {
+    new Assertion(exp, msg).to.match(re);
+  };
+
+  /**
+   * ### .notMatch(value, regexp, [message])
+   *
+   * Asserts that `value` does not match the regular expression `regexp`.
+   *
+   *     assert.notMatch('foobar', /^foo/, 'regexp does not match');
+   *
+   * @name notMatch
+   * @param {Mixed} value
+   * @param {RegExp} regexp
+   * @param {String} message
+   * @namespace Assert
+   * @api public
+   */
+
+  assert.notMatch = function (exp, re, msg) {
+    new Assertion(exp, msg).to.not.match(re);
+  };
+
+  /**
+   * ### .property(object, property, [message])
+   *
+   * Asserts that `object` has a property named by `property`.
+   *
+   *     assert.property({ tea: { green: 'matcha' }}, 'tea');
+   *
+   * @name property
+   * @param {Object} object
+   * @param {String} property
+   * @param {String} message
+   * @namespace Assert
+   * @api public
+   */
+
+  assert.property = function (obj, prop, msg) {
+    new Assertion(obj, msg).to.have.property(prop);
+  };
+
+  /**
+   * ### .notProperty(object, property, [message])
+   *
+   * Asserts that `object` does _not_ have a property named by `property`.
+   *
+   *     assert.notProperty({ tea: { green: 'matcha' }}, 'coffee');
+   *
+   * @name notProperty
+   * @param {Object} object
+   * @param {String} property
+   * @param {String} message
+   * @namespace Assert
+   * @api public
+   */
+
+  assert.notProperty = function (obj, prop, msg) {
+    new Assertion(obj, msg).to.not.have.property(prop);
+  };
+
+  /**
+   * ### .deepProperty(object, property, [message])
+   *
+   * Asserts that `object` has a property named by `property`, which can be a
+   * string using dot- and bracket-notation for deep reference.
+   *
+   *     assert.deepProperty({ tea: { green: 'matcha' }}, 'tea.green');
+   *
+   * @name deepProperty
+   * @param {Object} object
+   * @param {String} property
+   * @param {String} message
+   * @namespace Assert
+   * @api public
+   */
+
+  assert.deepProperty = function (obj, prop, msg) {
+    new Assertion(obj, msg).to.have.deep.property(prop);
+  };
+
+  /**
+   * ### .notDeepProperty(object, property, [message])
+   *
+   * Asserts that `object` does _not_ have a property named by `property`, which
+   * can be a string using dot- and bracket-notation for deep reference.
+   *
+   *     assert.notDeepProperty({ tea: { green: 'matcha' }}, 'tea.oolong');
+   *
+   * @name notDeepProperty
+   * @param {Object} object
+   * @param {String} property
+   * @param {String} message
+   * @namespace Assert
+   * @api public
+   */
+
+  assert.notDeepProperty = function (obj, prop, msg) {
+    new Assertion(obj, msg).to.not.have.deep.property(prop);
+  };
+
+  /**
+   * ### .propertyVal(object, property, value, [message])
+   *
+   * Asserts that `object` has a property named by `property` with value given
+   * by `value`.
+   *
+   *     assert.propertyVal({ tea: 'is good' }, 'tea', 'is good');
+   *
+   * @name propertyVal
+   * @param {Object} object
+   * @param {String} property
+   * @param {Mixed} value
+   * @param {String} message
+   * @namespace Assert
+   * @api public
+   */
+
+  assert.propertyVal = function (obj, prop, val, msg) {
+    new Assertion(obj, msg).to.have.property(prop, val);
+  };
+
+  /**
+   * ### .propertyNotVal(object, property, value, [message])
+   *
+   * Asserts that `object` has a property named by `property`, but with a value
+   * different from that given by `value`.
+   *
+   *     assert.propertyNotVal({ tea: 'is good' }, 'tea', 'is bad');
+   *
+   * @name propertyNotVal
+   * @param {Object} object
+   * @param {String} property
+   * @param {Mixed} value
+   * @param {String} message
+   * @namespace Assert
+   * @api public
+   */
+
+  assert.propertyNotVal = function (obj, prop, val, msg) {
+    new Assertion(obj, msg).to.not.have.property(prop, val);
+  };
+
+  /**
+   * ### .deepPropertyVal(object, property, value, [message])
+   *
+   * Asserts that `object` has a property named by `property` with value given
+   * by `value`. `property` can use dot- and bracket-notation for deep
+   * reference.
+   *
+   *     assert.deepPropertyVal({ tea: { green: 'matcha' }}, 'tea.green', 'matcha');
+   *
+   * @name deepPropertyVal
+   * @param {Object} object
+   * @param {String} property
+   * @param {Mixed} value
+   * @param {String} message
+   * @namespace Assert
+   * @api public
+   */
+
+  assert.deepPropertyVal = function (obj, prop, val, msg) {
+    new Assertion(obj, msg).to.have.deep.property(prop, val);
+  };
+
+  /**
+   * ### .deepPropertyNotVal(object, property, value, [message])
+   *
+   * Asserts that `object` has a property named by `property`, but with a value
+   * different from that given by `value`. `property` can use dot- and
+   * bracket-notation for deep reference.
+   *
+   *     assert.deepPropertyNotVal({ tea: { green: 'matcha' }}, 'tea.green', 'konacha');
+   *
+   * @name deepPropertyNotVal
+   * @param {Object} object
+   * @param {String} property
+   * @param {Mixed} value
+   * @param {String} message
+   * @namespace Assert
+   * @api public
+   */
+
+  assert.deepPropertyNotVal = function (obj, prop, val, msg) {
+    new Assertion(obj, msg).to.not.have.deep.property(prop, val);
+  };
+
+  /**
+   * ### .lengthOf(object, length, [message])
+   *
+   * Asserts that `object` has a `length` property with the expected value.
+   *
+   *     assert.lengthOf([1,2,3], 3, 'array has length of 3');
+   *     assert.lengthOf('foobar', 6, 'string has length of 6');
+   *
+   * @name lengthOf
+   * @param {Mixed} object
+   * @param {Number} length
+   * @param {String} message
+   * @namespace Assert
+   * @api public
+   */
+
+  assert.lengthOf = function (exp, len, msg) {
+    new Assertion(exp, msg).to.have.length(len);
+  };
+
+  /**
+   * ### .throws(function, [constructor/string/regexp], [string/regexp], [message])
+   *
+   * Asserts that `function` will throw an error that is an instance of
+   * `constructor`, or alternately that it will throw an error with message
+   * matching `regexp`.
+   *
+   *     assert.throws(fn, 'function throws a reference error');
+   *     assert.throws(fn, /function throws a reference error/);
+   *     assert.throws(fn, ReferenceError);
+   *     assert.throws(fn, ReferenceError, 'function throws a reference error');
+   *     assert.throws(fn, ReferenceError, /function throws a reference error/);
+   *
+   * @name throws
+   * @alias throw
+   * @alias Throw
+   * @param {Function} function
+   * @param {ErrorConstructor} constructor
+   * @param {RegExp} regexp
+   * @param {String} message
+   * @see https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Error#Error_types
+   * @namespace Assert
+   * @api public
+   */
+
+  assert.throws = function (fn, errt, errs, msg) {
+    if ('string' === typeof errt || errt instanceof RegExp) {
+      errs = errt;
+      errt = null;
+    }
+
+    var assertErr = new Assertion(fn, msg).to.throw(errt, errs);
+    return flag(assertErr, 'object');
+  };
+
+  /**
+   * ### .doesNotThrow(function, [constructor/regexp], [message])
+   *
+   * Asserts that `function` will _not_ throw an error that is an instance of
+   * `constructor`, or alternately that it will not throw an error with message
+   * matching `regexp`.
+   *
+   *     assert.doesNotThrow(fn, Error, 'function does not throw');
+   *
+   * @name doesNotThrow
+   * @param {Function} function
+   * @param {ErrorConstructor} constructor
+   * @param {RegExp} regexp
+   * @param {String} message
+   * @see https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Error#Error_types
+   * @namespace Assert
+   * @api public
+   */
+
+  assert.doesNotThrow = function (fn, type, msg) {
+    if ('string' === typeof type) {
+      msg = type;
+      type = null;
+    }
+
+    new Assertion(fn, msg).to.not.Throw(type);
+  };
+
+  /**
+   * ### .operator(val1, operator, val2, [message])
+   *
+   * Compares two values using `operator`.
+   *
+   *     assert.operator(1, '<', 2, 'everything is ok');
+   *     assert.operator(1, '>', 2, 'this will fail');
+   *
+   * @name operator
+   * @param {Mixed} val1
+   * @param {String} operator
+   * @param {Mixed} val2
+   * @param {String} message
+   * @namespace Assert
+   * @api public
+   */
+
+  assert.operator = function (val, operator, val2, msg) {
+    var ok;
+    switch(operator) {
+      case '==':
+        ok = val == val2;
+        break;
+      case '===':
+        ok = val === val2;
+        break;
+      case '>':
+        ok = val > val2;
+        break;
+      case '>=':
+        ok = val >= val2;
+        break;
+      case '<':
+        ok = val < val2;
+        break;
+      case '<=':
+        ok = val <= val2;
+        break;
+      case '!=':
+        ok = val != val2;
+        break;
+      case '!==':
+        ok = val !== val2;
+        break;
+      default:
+        throw new Error('Invalid operator "' + operator + '"');
+    }
+    var test = new Assertion(ok, msg);
+    test.assert(
+        true === flag(test, 'object')
+      , 'expected ' + util.inspect(val) + ' to be ' + operator + ' ' + util.inspect(val2)
+      , 'expected ' + util.inspect(val) + ' to not be ' + operator + ' ' + util.inspect(val2) );
+  };
+
+  /**
+   * ### .closeTo(actual, expected, delta, [message])
+   *
+   * Asserts that the target is equal `expected`, to within a +/- `delta` range.
+   *
+   *     assert.closeTo(1.5, 1, 0.5, 'numbers are close');
+   *
+   * @name closeTo
+   * @param {Number} actual
+   * @param {Number} expected
+   * @param {Number} delta
+   * @param {String} message
+   * @namespace Assert
+   * @api public
+   */
+
+  assert.closeTo = function (act, exp, delta, msg) {
+    new Assertion(act, msg).to.be.closeTo(exp, delta);
+  };
+
+  /**
+   * ### .approximately(actual, expected, delta, [message])
+   *
+   * Asserts that the target is equal `expected`, to within a +/- `delta` range.
+   *
+   *     assert.approximately(1.5, 1, 0.5, 'numbers are close');
+   *
+   * @name approximately
+   * @param {Number} actual
+   * @param {Number} expected
+   * @param {Number} delta
+   * @param {String} message
+   * @namespace Assert
+   * @api public
+   */
+
+  assert.approximately = function (act, exp, delta, msg) {
+    new Assertion(act, msg).to.be.approximately(exp, delta);
+  };
+
+  /**
+   * ### .sameMembers(set1, set2, [message])
+   *
+   * Asserts that `set1` and `set2` have the same members.
+   * Order is not taken into account.
+   *
+   *     assert.sameMembers([ 1, 2, 3 ], [ 2, 1, 3 ], 'same members');
+   *
+   * @name sameMembers
+   * @param {Array} set1
+   * @param {Array} set2
+   * @param {String} message
+   * @namespace Assert
+   * @api public
+   */
+
+  assert.sameMembers = function (set1, set2, msg) {
+    new Assertion(set1, msg).to.have.same.members(set2);
+  }
+
+  /**
+   * ### .sameDeepMembers(set1, set2, [message])
+   *
+   * Asserts that `set1` and `set2` have the same members - using a deep equality checking.
+   * Order is not taken into account.
+   *
+   *     assert.sameDeepMembers([ {b: 3}, {a: 2}, {c: 5} ], [ {c: 5}, {b: 3}, {a: 2} ], 'same deep members');
+   *
+   * @name sameDeepMembers
+   * @param {Array} set1
+   * @param {Array} set2
+   * @param {String} message
+   * @namespace Assert
+   * @api public
+   */
+
+  assert.sameDeepMembers = function (set1, set2, msg) {
+    new Assertion(set1, msg).to.have.same.deep.members(set2);
+  }
+
+  /**
+   * ### .includeMembers(superset, subset, [message])
+   *
+   * Asserts that `subset` is included in `superset`.
+   * Order is not taken into account.
+   *
+   *     assert.includeMembers([ 1, 2, 3 ], [ 2, 1 ], 'include members');
+   *
+   * @name includeMembers
+   * @param {Array} superset
+   * @param {Array} subset
+   * @param {String} message
+   * @namespace Assert
+   * @api public
+   */
+
+  assert.includeMembers = function (superset, subset, msg) {
+    new Assertion(superset, msg).to.include.members(subset);
+  }
+
+  /**
+   * ### .includeDeepMembers(superset, subset, [message])
+   *
+   * Asserts that `subset` is included in `superset` - using deep equality checking.
+   * Order is not taken into account.
+   * Duplicates are ignored.
+   *
+   *     assert.includeDeepMembers([ {a: 1}, {b: 2}, {c: 3} ], [ {b: 2}, {a: 1}, {b: 2} ], 'include deep members');
+   *
+   * @name includeDeepMembers
+   * @param {Array} superset
+   * @param {Array} subset
+   * @param {String} message
+   * @namespace Assert
+   * @api public
+   */
+
+  assert.includeDeepMembers = function (superset, subset, msg) {
+    new Assertion(superset, msg).to.include.deep.members(subset);
+  }
+
+  /**
+   * ### .oneOf(inList, list, [message])
+   *
+   * Asserts that non-object, non-array value `inList` appears in the flat array `list`.
+   *
+   *     assert.oneOf(1, [ 2, 1 ], 'Not found in list');
+   *
+   * @name oneOf
+   * @param {*} inList
+   * @param {Array<*>} list
+   * @param {String} message
+   * @namespace Assert
+   * @api public
+   */
+
+  assert.oneOf = function (inList, list, msg) {
+    new Assertion(inList, msg).to.be.oneOf(list);
+  }
+
+   /**
+   * ### .changes(function, object, property)
+   *
+   * Asserts that a function changes the value of a property
+   *
+   *     var obj = { val: 10 };
+   *     var fn = function() { obj.val = 22 };
+   *     assert.changes(fn, obj, 'val');
+   *
+   * @name changes
+   * @param {Function} modifier function
+   * @param {Object} object
+   * @param {String} property name
+   * @param {String} message _optional_
+   * @namespace Assert
+   * @api public
+   */
+
+  assert.changes = function (fn, obj, prop) {
+    new Assertion(fn).to.change(obj, prop);
+  }
+
+   /**
+   * ### .doesNotChange(function, object, property)
+   *
+   * Asserts that a function does not changes the value of a property
+   *
+   *     var obj = { val: 10 };
+   *     var fn = function() { console.log('foo'); };
+   *     assert.doesNotChange(fn, obj, 'val');
+   *
+   * @name doesNotChange
+   * @param {Function} modifier function
+   * @param {Object} object
+   * @param {String} property name
+   * @param {String} message _optional_
+   * @namespace Assert
+   * @api public
+   */
+
+  assert.doesNotChange = function (fn, obj, prop) {
+    new Assertion(fn).to.not.change(obj, prop);
+  }
+
+   /**
+   * ### .increases(function, object, property)
+   *
+   * Asserts that a function increases an object property
+   *
+   *     var obj = { val: 10 };
+   *     var fn = function() { obj.val = 13 };
+   *     assert.increases(fn, obj, 'val');
+   *
+   * @name increases
+   * @param {Function} modifier function
+   * @param {Object} object
+   * @param {String} property name
+   * @param {String} message _optional_
+   * @namespace Assert
+   * @api public
+   */
+
+  assert.increases = function (fn, obj, prop) {
+    new Assertion(fn).to.increase(obj, prop);
+  }
+
+   /**
+   * ### .doesNotIncrease(function, object, property)
+   *
+   * Asserts that a function does not increase object property
+   *
+   *     var obj = { val: 10 };
+   *     var fn = function() { obj.val = 8 };
+   *     assert.doesNotIncrease(fn, obj, 'val');
+   *
+   * @name doesNotIncrease
+   * @param {Function} modifier function
+   * @param {Object} object
+   * @param {String} property name
+   * @param {String} message _optional_
+   * @namespace Assert
+   * @api public
+   */
+
+  assert.doesNotIncrease = function (fn, obj, prop) {
+    new Assertion(fn).to.not.increase(obj, prop);
+  }
+
+   /**
+   * ### .decreases(function, object, property)
+   *
+   * Asserts that a function decreases an object property
+   *
+   *     var obj = { val: 10 };
+   *     var fn = function() { obj.val = 5 };
+   *     assert.decreases(fn, obj, 'val');
+   *
+   * @name decreases
+   * @param {Function} modifier function
+   * @param {Object} object
+   * @param {String} property name
+   * @param {String} message _optional_
+   * @namespace Assert
+   * @api public
+   */
+
+  assert.decreases = function (fn, obj, prop) {
+    new Assertion(fn).to.decrease(obj, prop);
+  }
+
+   /**
+   * ### .doesNotDecrease(function, object, property)
+   *
+   * Asserts that a function does not decreases an object property
+   *
+   *     var obj = { val: 10 };
+   *     var fn = function() { obj.val = 15 };
+   *     assert.doesNotDecrease(fn, obj, 'val');
+   *
+   * @name doesNotDecrease
+   * @param {Function} modifier function
+   * @param {Object} object
+   * @param {String} property name
+   * @param {String} message _optional_
+   * @namespace Assert
+   * @api public
+   */
+
+  assert.doesNotDecrease = function (fn, obj, prop) {
+    new Assertion(fn).to.not.decrease(obj, prop);
+  }
+
+  /*!
+   * ### .ifError(object)
+   *
+   * Asserts if value is not a false value, and throws if it is a true value.
+   * This is added to allow for chai to be a drop-in replacement for Node's
+   * assert class.
+   *
+   *     var err = new Error('I am a custom error');
+   *     assert.ifError(err); // Rethrows err!
+   *
+   * @name ifError
+   * @param {Object} object
+   * @namespace Assert
+   * @api public
+   */
+
+  assert.ifError = function (val) {
+    if (val) {
+      throw(val);
+    }
+  };
+
+  /**
+   * ### .isExtensible(object)
+   *
+   * Asserts that `object` is extensible (can have new properties added to it).
+   *
+   *     assert.isExtensible({});
+   *
+   * @name isExtensible
+   * @alias extensible
+   * @param {Object} object
+   * @param {String} message _optional_
+   * @namespace Assert
+   * @api public
+   */
+
+  assert.isExtensible = function (obj, msg) {
+    new Assertion(obj, msg).to.be.extensible;
+  };
+
+  /**
+   * ### .isNotExtensible(object)
+   *
+   * Asserts that `object` is _not_ extensible.
+   *
+   *     var nonExtensibleObject = Object.preventExtensions({});
+   *     var sealedObject = Object.seal({});
+   *     var frozenObject = Object.freese({});
+   *
+   *     assert.isNotExtensible(nonExtensibleObject);
+   *     assert.isNotExtensible(sealedObject);
+   *     assert.isNotExtensible(frozenObject);
+   *
+   * @name isNotExtensible
+   * @alias notExtensible
+   * @param {Object} object
+   * @param {String} message _optional_
+   * @namespace Assert
+   * @api public
+   */
+
+  assert.isNotExtensible = function (obj, msg) {
+    new Assertion(obj, msg).to.not.be.extensible;
+  };
+
+  /**
+   * ### .isSealed(object)
+   *
+   * Asserts that `object` is sealed (cannot have new properties added to it
+   * and its existing properties cannot be removed).
+   *
+   *     var sealedObject = Object.seal({});
+   *     var frozenObject = Object.seal({});
+   *
+   *     assert.isSealed(sealedObject);
+   *     assert.isSealed(frozenObject);
+   *
+   * @name isSealed
+   * @alias sealed
+   * @param {Object} object
+   * @param {String} message _optional_
+   * @namespace Assert
+   * @api public
+   */
+
+  assert.isSealed = function (obj, msg) {
+    new Assertion(obj, msg).to.be.sealed;
+  };
+
+  /**
+   * ### .isNotSealed(object)
+   *
+   * Asserts that `object` is _not_ sealed.
+   *
+   *     assert.isNotSealed({});
+   *
+   * @name isNotSealed
+   * @alias notSealed
+   * @param {Object} object
+   * @param {String} message _optional_
+   * @namespace Assert
+   * @api public
+   */
+
+  assert.isNotSealed = function (obj, msg) {
+    new Assertion(obj, msg).to.not.be.sealed;
+  };
+
+  /**
+   * ### .isFrozen(object)
+   *
+   * Asserts that `object` is frozen (cannot have new properties added to it
+   * and its existing properties cannot be modified).
+   *
+   *     var frozenObject = Object.freeze({});
+   *     assert.frozen(frozenObject);
+   *
+   * @name isFrozen
+   * @alias frozen
+   * @param {Object} object
+   * @param {String} message _optional_
+   * @namespace Assert
+   * @api public
+   */
+
+  assert.isFrozen = function (obj, msg) {
+    new Assertion(obj, msg).to.be.frozen;
+  };
+
+  /**
+   * ### .isNotFrozen(object)
+   *
+   * Asserts that `object` is _not_ frozen.
+   *
+   *     assert.isNotFrozen({});
+   *
+   * @name isNotFrozen
+   * @alias notFrozen
+   * @param {Object} object
+   * @param {String} message _optional_
+   * @namespace Assert
+   * @api public
+   */
+
+  assert.isNotFrozen = function (obj, msg) {
+    new Assertion(obj, msg).to.not.be.frozen;
+  };
+
+  /*!
+   * Aliases.
+   */
+
+  (function alias(name, as){
+    assert[as] = assert[name];
+    return alias;
+  })
+  ('isOk', 'ok')
+  ('isNotOk', 'notOk')
+  ('throws', 'throw')
+  ('throws', 'Throw')
+  ('isExtensible', 'extensible')
+  ('isNotExtensible', 'notExtensible')
+  ('isSealed', 'sealed')
+  ('isNotSealed', 'notSealed')
+  ('isFrozen', 'frozen')
+  ('isNotFrozen', 'notFrozen');
+};
+
+},{}],309:[function(require,module,exports){
+/*!
+ * chai
+ * Copyright(c) 2011-2014 Jake Luer <jake@alogicalparadox.com>
+ * MIT Licensed
+ */
+
+module.exports = function (chai, util) {
+  chai.expect = function (val, message) {
+    return new chai.Assertion(val, message);
+  };
+
+  /**
+   * ### .fail(actual, expected, [message], [operator])
+   *
+   * Throw a failure.
+   *
+   * @name fail
+   * @param {Mixed} actual
+   * @param {Mixed} expected
+   * @param {String} message
+   * @param {String} operator
+   * @namespace Expect
+   * @api public
+   */
+
+  chai.expect.fail = function (actual, expected, message, operator) {
+    message = message || 'expect.fail()';
+    throw new chai.AssertionError(message, {
+        actual: actual
+      , expected: expected
+      , operator: operator
+    }, chai.expect.fail);
+  };
+};
+
+},{}],310:[function(require,module,exports){
+/*!
+ * chai
+ * Copyright(c) 2011-2014 Jake Luer <jake@alogicalparadox.com>
+ * MIT Licensed
+ */
+
+module.exports = function (chai, util) {
+  var Assertion = chai.Assertion;
+
+  function loadShould () {
+    // explicitly define this method as function as to have it's name to include as `ssfi`
+    function shouldGetter() {
+      if (this instanceof String || this instanceof Number || this instanceof Boolean ) {
+        return new Assertion(this.valueOf(), null, shouldGetter);
+      }
+      return new Assertion(this, null, shouldGetter);
+    }
+    function shouldSetter(value) {
+      // See https://github.com/chaijs/chai/issues/86: this makes
+      // `whatever.should = someValue` actually set `someValue`, which is
+      // especially useful for `global.should = require('chai').should()`.
+      //
+      // Note that we have to use [[DefineProperty]] instead of [[Put]]
+      // since otherwise we would trigger this very setter!
+      Object.defineProperty(this, 'should', {
+        value: value,
+        enumerable: true,
+        configurable: true,
+        writable: true
+      });
+    }
+    // modify Object.prototype to have `should`
+    Object.defineProperty(Object.prototype, 'should', {
+      set: shouldSetter
+      , get: shouldGetter
+      , configurable: true
+    });
+
+    var should = {};
+
+    /**
+     * ### .fail(actual, expected, [message], [operator])
+     *
+     * Throw a failure.
+     *
+     * @name fail
+     * @param {Mixed} actual
+     * @param {Mixed} expected
+     * @param {String} message
+     * @param {String} operator
+     * @namespace Should
+     * @api public
+     */
+
+    should.fail = function (actual, expected, message, operator) {
+      message = message || 'should.fail()';
+      throw new chai.AssertionError(message, {
+          actual: actual
+        , expected: expected
+        , operator: operator
+      }, should.fail);
+    };
+
+    /**
+     * ### .equal(actual, expected, [message])
+     *
+     * Asserts non-strict equality (`==`) of `actual` and `expected`.
+     *
+     *     should.equal(3, '3', '== coerces values to strings');
+     *
+     * @name equal
+     * @param {Mixed} actual
+     * @param {Mixed} expected
+     * @param {String} message
+     * @namespace Should
+     * @api public
+     */
+
+    should.equal = function (val1, val2, msg) {
+      new Assertion(val1, msg).to.equal(val2);
+    };
+
+    /**
+     * ### .throw(function, [constructor/string/regexp], [string/regexp], [message])
+     *
+     * Asserts that `function` will throw an error that is an instance of
+     * `constructor`, or alternately that it will throw an error with message
+     * matching `regexp`.
+     *
+     *     should.throw(fn, 'function throws a reference error');
+     *     should.throw(fn, /function throws a reference error/);
+     *     should.throw(fn, ReferenceError);
+     *     should.throw(fn, ReferenceError, 'function throws a reference error');
+     *     should.throw(fn, ReferenceError, /function throws a reference error/);
+     *
+     * @name throw
+     * @alias Throw
+     * @param {Function} function
+     * @param {ErrorConstructor} constructor
+     * @param {RegExp} regexp
+     * @param {String} message
+     * @see https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Error#Error_types
+     * @namespace Should
+     * @api public
+     */
+
+    should.Throw = function (fn, errt, errs, msg) {
+      new Assertion(fn, msg).to.Throw(errt, errs);
+    };
+
+    /**
+     * ### .exist
+     *
+     * Asserts that the target is neither `null` nor `undefined`.
+     *
+     *     var foo = 'hi';
+     *
+     *     should.exist(foo, 'foo exists');
+     *
+     * @name exist
+     * @namespace Should
+     * @api public
+     */
+
+    should.exist = function (val, msg) {
+      new Assertion(val, msg).to.exist;
+    }
+
+    // negation
+    should.not = {}
+
+    /**
+     * ### .not.equal(actual, expected, [message])
+     *
+     * Asserts non-strict inequality (`!=`) of `actual` and `expected`.
+     *
+     *     should.not.equal(3, 4, 'these numbers are not equal');
+     *
+     * @name not.equal
+     * @param {Mixed} actual
+     * @param {Mixed} expected
+     * @param {String} message
+     * @namespace Should
+     * @api public
+     */
+
+    should.not.equal = function (val1, val2, msg) {
+      new Assertion(val1, msg).to.not.equal(val2);
+    };
+
+    /**
+     * ### .throw(function, [constructor/regexp], [message])
+     *
+     * Asserts that `function` will _not_ throw an error that is an instance of
+     * `constructor`, or alternately that it will not throw an error with message
+     * matching `regexp`.
+     *
+     *     should.not.throw(fn, Error, 'function does not throw');
+     *
+     * @name not.throw
+     * @alias not.Throw
+     * @param {Function} function
+     * @param {ErrorConstructor} constructor
+     * @param {RegExp} regexp
+     * @param {String} message
+     * @see https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Error#Error_types
+     * @namespace Should
+     * @api public
+     */
+
+    should.not.Throw = function (fn, errt, errs, msg) {
+      new Assertion(fn, msg).to.not.Throw(errt, errs);
+    };
+
+    /**
+     * ### .not.exist
+     *
+     * Asserts that the target is neither `null` nor `undefined`.
+     *
+     *     var bar = null;
+     *
+     *     should.not.exist(bar, 'bar does not exist');
+     *
+     * @name not.exist
+     * @namespace Should
+     * @api public
+     */
+
+    should.not.exist = function (val, msg) {
+      new Assertion(val, msg).to.not.exist;
+    }
+
+    should['throw'] = should['Throw'];
+    should.not['throw'] = should.not['Throw'];
+
+    return should;
+  };
+
+  chai.should = loadShould;
+  chai.Should = loadShould;
+};
+
+},{}],311:[function(require,module,exports){
+/*!
+ * Chai - addChainingMethod utility
+ * Copyright(c) 2012-2014 Jake Luer <jake@alogicalparadox.com>
+ * MIT Licensed
+ */
+
+/*!
+ * Module dependencies
+ */
+
+var transferFlags = require('./transferFlags');
+var flag = require('./flag');
+var config = require('../config');
+
+/*!
+ * Module variables
+ */
+
+// Check whether `__proto__` is supported
+var hasProtoSupport = '__proto__' in Object;
+
+// Without `__proto__` support, this module will need to add properties to a function.
+// However, some Function.prototype methods cannot be overwritten,
+// and there seems no easy cross-platform way to detect them (@see chaijs/chai/issues/69).
+var excludeNames = /^(?:length|name|arguments|caller)$/;
+
+// Cache `Function` properties
+var call  = Function.prototype.call,
+    apply = Function.prototype.apply;
+
+/**
+ * ### addChainableMethod (ctx, name, method, chainingBehavior)
+ *
+ * Adds a method to an object, such that the method can also be chained.
+ *
+ *     utils.addChainableMethod(chai.Assertion.prototype, 'foo', function (str) {
+ *       var obj = utils.flag(this, 'object');
+ *       new chai.Assertion(obj).to.be.equal(str);
+ *     });
+ *
+ * Can also be accessed directly from `chai.Assertion`.
+ *
+ *     chai.Assertion.addChainableMethod('foo', fn, chainingBehavior);
+ *
+ * The result can then be used as both a method assertion, executing both `method` and
+ * `chainingBehavior`, or as a language chain, which only executes `chainingBehavior`.
+ *
+ *     expect(fooStr).to.be.foo('bar');
+ *     expect(fooStr).to.be.foo.equal('foo');
+ *
+ * @param {Object} ctx object to which the method is added
+ * @param {String} name of method to add
+ * @param {Function} method function to be used for `name`, when called
+ * @param {Function} chainingBehavior function to be called every time the property is accessed
+ * @namespace Utils
+ * @name addChainableMethod
+ * @api public
+ */
+
+module.exports = function (ctx, name, method, chainingBehavior) {
+  if (typeof chainingBehavior !== 'function') {
+    chainingBehavior = function () { };
+  }
+
+  var chainableBehavior = {
+      method: method
+    , chainingBehavior: chainingBehavior
+  };
+
+  // save the methods so we can overwrite them later, if we need to.
+  if (!ctx.__methods) {
+    ctx.__methods = {};
+  }
+  ctx.__methods[name] = chainableBehavior;
+
+  Object.defineProperty(ctx, name,
+    { get: function () {
+        chainableBehavior.chainingBehavior.call(this);
+
+        var assert = function assert() {
+          var old_ssfi = flag(this, 'ssfi');
+          if (old_ssfi && config.includeStack === false)
+            flag(this, 'ssfi', assert);
+          var result = chainableBehavior.method.apply(this, arguments);
+          return result === undefined ? this : result;
+        };
+
+        // Use `__proto__` if available
+        if (hasProtoSupport) {
+          // Inherit all properties from the object by replacing the `Function` prototype
+          var prototype = assert.__proto__ = Object.create(this);
+          // Restore the `call` and `apply` methods from `Function`
+          prototype.call = call;
+          prototype.apply = apply;
+        }
+        // Otherwise, redefine all properties (slow!)
+        else {
+          var asserterNames = Object.getOwnPropertyNames(ctx);
+          asserterNames.forEach(function (asserterName) {
+            if (!excludeNames.test(asserterName)) {
+              var pd = Object.getOwnPropertyDescriptor(ctx, asserterName);
+              Object.defineProperty(assert, asserterName, pd);
+            }
+          });
+        }
+
+        transferFlags(this, assert);
+        return assert;
+      }
+    , configurable: true
+  });
+};
+
+},{"../config":306,"./flag":315,"./transferFlags":331}],312:[function(require,module,exports){
+/*!
+ * Chai - addMethod utility
+ * Copyright(c) 2012-2014 Jake Luer <jake@alogicalparadox.com>
+ * MIT Licensed
+ */
+
+var config = require('../config');
+
+/**
+ * ### .addMethod (ctx, name, method)
+ *
+ * Adds a method to the prototype of an object.
+ *
+ *     utils.addMethod(chai.Assertion.prototype, 'foo', function (str) {
+ *       var obj = utils.flag(this, 'object');
+ *       new chai.Assertion(obj).to.be.equal(str);
+ *     });
+ *
+ * Can also be accessed directly from `chai.Assertion`.
+ *
+ *     chai.Assertion.addMethod('foo', fn);
+ *
+ * Then can be used as any other assertion.
+ *
+ *     expect(fooStr).to.be.foo('bar');
+ *
+ * @param {Object} ctx object to which the method is added
+ * @param {String} name of method to add
+ * @param {Function} method function to be used for name
+ * @namespace Utils
+ * @name addMethod
+ * @api public
+ */
+var flag = require('./flag');
+
+module.exports = function (ctx, name, method) {
+  ctx[name] = function () {
+    var old_ssfi = flag(this, 'ssfi');
+    if (old_ssfi && config.includeStack === false)
+      flag(this, 'ssfi', ctx[name]);
+    var result = method.apply(this, arguments);
+    return result === undefined ? this : result;
+  };
+};
+
+},{"../config":306,"./flag":315}],313:[function(require,module,exports){
+/*!
+ * Chai - addProperty utility
+ * Copyright(c) 2012-2014 Jake Luer <jake@alogicalparadox.com>
+ * MIT Licensed
+ */
+
+var config = require('../config');
+var flag = require('./flag');
+
+/**
+ * ### addProperty (ctx, name, getter)
+ *
+ * Adds a property to the prototype of an object.
+ *
+ *     utils.addProperty(chai.Assertion.prototype, 'foo', function () {
+ *       var obj = utils.flag(this, 'object');
+ *       new chai.Assertion(obj).to.be.instanceof(Foo);
+ *     });
+ *
+ * Can also be accessed directly from `chai.Assertion`.
+ *
+ *     chai.Assertion.addProperty('foo', fn);
+ *
+ * Then can be used as any other assertion.
+ *
+ *     expect(myFoo).to.be.foo;
+ *
+ * @param {Object} ctx object to which the property is added
+ * @param {String} name of property to add
+ * @param {Function} getter function to be used for name
+ * @namespace Utils
+ * @name addProperty
+ * @api public
+ */
+
+module.exports = function (ctx, name, getter) {
+  Object.defineProperty(ctx, name,
+    { get: function addProperty() {
+        var old_ssfi = flag(this, 'ssfi');
+        if (old_ssfi && config.includeStack === false)
+          flag(this, 'ssfi', addProperty);
+
+        var result = getter.call(this);
+        return result === undefined ? this : result;
+      }
+    , configurable: true
+  });
+};
+
+},{"../config":306,"./flag":315}],314:[function(require,module,exports){
+/*!
+ * Chai - expectTypes utility
+ * Copyright(c) 2012-2014 Jake Luer <jake@alogicalparadox.com>
+ * MIT Licensed
+ */
+
+/**
+ * ### expectTypes(obj, types)
+ *
+ * Ensures that the object being tested against is of a valid type.
+ *
+ *     utils.expectTypes(this, ['array', 'object', 'string']);
+ *
+ * @param {Mixed} obj constructed Assertion
+ * @param {Array} type A list of allowed types for this assertion
+ * @namespace Utils
+ * @name expectTypes
+ * @api public
+ */
+
+var AssertionError = require('assertion-error');
+var flag = require('./flag');
+var type = require('type-detect');
+
+module.exports = function (obj, types) {
+  var obj = flag(obj, 'object');
+  types = types.map(function (t) { return t.toLowerCase(); });
+  types.sort();
+
+  // Transforms ['lorem', 'ipsum'] into 'a lirum, or an ipsum'
+  var str = types.map(function (t, index) {
+    var art = ~[ 'a', 'e', 'i', 'o', 'u' ].indexOf(t.charAt(0)) ? 'an' : 'a';
+    var or = types.length > 1 && index === types.length - 1 ? 'or ' : '';
+    return or + art + ' ' + t;
+  }).join(', ');
+
+  if (!types.some(function (expected) { return type(obj) === expected; })) {
+    throw new AssertionError(
+      'object tested must be ' + str + ', but ' + type(obj) + ' given'
+    );
+  }
+};
+
+},{"./flag":315,"assertion-error":332,"type-detect":337}],315:[function(require,module,exports){
+/*!
+ * Chai - flag utility
+ * Copyright(c) 2012-2014 Jake Luer <jake@alogicalparadox.com>
+ * MIT Licensed
+ */
+
+/**
+ * ### flag(object, key, [value])
+ *
+ * Get or set a flag value on an object. If a
+ * value is provided it will be set, else it will
+ * return the currently set value or `undefined` if
+ * the value is not set.
+ *
+ *     utils.flag(this, 'foo', 'bar'); // setter
+ *     utils.flag(this, 'foo'); // getter, returns `bar`
+ *
+ * @param {Object} object constructed Assertion
+ * @param {String} key
+ * @param {Mixed} value (optional)
+ * @namespace Utils
+ * @name flag
+ * @api private
+ */
+
+module.exports = function (obj, key, value) {
+  var flags = obj.__flags || (obj.__flags = Object.create(null));
+  if (arguments.length === 3) {
+    flags[key] = value;
+  } else {
+    return flags[key];
+  }
+};
+
+},{}],316:[function(require,module,exports){
+/*!
+ * Chai - getActual utility
+ * Copyright(c) 2012-2014 Jake Luer <jake@alogicalparadox.com>
+ * MIT Licensed
+ */
+
+/**
+ * # getActual(object, [actual])
+ *
+ * Returns the `actual` value for an Assertion
+ *
+ * @param {Object} object (constructed Assertion)
+ * @param {Arguments} chai.Assertion.prototype.assert arguments
+ * @namespace Utils
+ * @name getActual
+ */
+
+module.exports = function (obj, args) {
+  return args.length > 4 ? args[4] : obj._obj;
+};
+
+},{}],317:[function(require,module,exports){
+/*!
+ * Chai - getEnumerableProperties utility
+ * Copyright(c) 2012-2014 Jake Luer <jake@alogicalparadox.com>
+ * MIT Licensed
+ */
+
+/**
+ * ### .getEnumerableProperties(object)
+ *
+ * This allows the retrieval of enumerable property names of an object,
+ * inherited or not.
+ *
+ * @param {Object} object
+ * @returns {Array}
+ * @namespace Utils
+ * @name getEnumerableProperties
+ * @api public
+ */
+
+module.exports = function getEnumerableProperties(object) {
+  var result = [];
+  for (var name in object) {
+    result.push(name);
+  }
+  return result;
+};
+
+},{}],318:[function(require,module,exports){
+/*!
+ * Chai - message composition utility
+ * Copyright(c) 2012-2014 Jake Luer <jake@alogicalparadox.com>
+ * MIT Licensed
+ */
+
+/*!
+ * Module dependancies
+ */
+
+var flag = require('./flag')
+  , getActual = require('./getActual')
+  , inspect = require('./inspect')
+  , objDisplay = require('./objDisplay');
+
+/**
+ * ### .getMessage(object, message, negateMessage)
+ *
+ * Construct the error message based on flags
+ * and template tags. Template tags will return
+ * a stringified inspection of the object referenced.
+ *
+ * Message template tags:
+ * - `#{this}` current asserted object
+ * - `#{act}` actual value
+ * - `#{exp}` expected value
+ *
+ * @param {Object} object (constructed Assertion)
+ * @param {Arguments} chai.Assertion.prototype.assert arguments
+ * @namespace Utils
+ * @name getMessage
+ * @api public
+ */
+
+module.exports = function (obj, args) {
+  var negate = flag(obj, 'negate')
+    , val = flag(obj, 'object')
+    , expected = args[3]
+    , actual = getActual(obj, args)
+    , msg = negate ? args[2] : args[1]
+    , flagMsg = flag(obj, 'message');
+
+  if(typeof msg === "function") msg = msg();
+  msg = msg || '';
+  msg = msg
+    .replace(/#\{this\}/g, function () { return objDisplay(val); })
+    .replace(/#\{act\}/g, function () { return objDisplay(actual); })
+    .replace(/#\{exp\}/g, function () { return objDisplay(expected); });
+
+  return flagMsg ? flagMsg + ': ' + msg : msg;
+};
+
+},{"./flag":315,"./getActual":316,"./inspect":325,"./objDisplay":326}],319:[function(require,module,exports){
+/*!
+ * Chai - getName utility
+ * Copyright(c) 2012-2014 Jake Luer <jake@alogicalparadox.com>
+ * MIT Licensed
+ */
+
+/**
+ * # getName(func)
+ *
+ * Gets the name of a function, in a cross-browser way.
+ *
+ * @param {Function} a function (usually a constructor)
+ * @namespace Utils
+ * @name getName
+ */
+
+module.exports = function (func) {
+  if (func.name) return func.name;
+
+  var match = /^\s?function ([^(]*)\(/.exec(func);
+  return match && match[1] ? match[1] : "";
+};
+
+},{}],320:[function(require,module,exports){
+/*!
+ * Chai - getPathInfo utility
+ * Copyright(c) 2012-2014 Jake Luer <jake@alogicalparadox.com>
+ * MIT Licensed
+ */
+
+var hasProperty = require('./hasProperty');
+
+/**
+ * ### .getPathInfo(path, object)
+ *
+ * This allows the retrieval of property info in an
+ * object given a string path.
+ *
+ * The path info consists of an object with the
+ * following properties:
+ *
+ * * parent - The parent object of the property referenced by `path`
+ * * name - The name of the final property, a number if it was an array indexer
+ * * value - The value of the property, if it exists, otherwise `undefined`
+ * * exists - Whether the property exists or not
+ *
+ * @param {String} path
+ * @param {Object} object
+ * @returns {Object} info
+ * @namespace Utils
+ * @name getPathInfo
+ * @api public
+ */
+
+module.exports = function getPathInfo(path, obj) {
+  var parsed = parsePath(path),
+      last = parsed[parsed.length - 1];
+
+  var info = {
+    parent: parsed.length > 1 ? _getPathValue(parsed, obj, parsed.length - 1) : obj,
+    name: last.p || last.i,
+    value: _getPathValue(parsed, obj)
+  };
+  info.exists = hasProperty(info.name, info.parent);
+
+  return info;
+};
+
+
+/*!
+ * ## parsePath(path)
+ *
+ * Helper function used to parse string object
+ * paths. Use in conjunction with `_getPathValue`.
+ *
+ *      var parsed = parsePath('myobject.property.subprop');
+ *
+ * ### Paths:
+ *
+ * * Can be as near infinitely deep and nested
+ * * Arrays are also valid using the formal `myobject.document[3].property`.
+ * * Literal dots and brackets (not delimiter) must be backslash-escaped.
+ *
+ * @param {String} path
+ * @returns {Object} parsed
+ * @api private
+ */
+
+function parsePath (path) {
+  var str = path.replace(/([^\\])\[/g, '$1.[')
+    , parts = str.match(/(\\\.|[^.]+?)+/g);
+  return parts.map(function (value) {
+    var re = /^\[(\d+)\]$/
+      , mArr = re.exec(value);
+    if (mArr) return { i: parseFloat(mArr[1]) };
+    else return { p: value.replace(/\\([.\[\]])/g, '$1') };
+  });
+}
+
+
+/*!
+ * ## _getPathValue(parsed, obj)
+ *
+ * Helper companion function for `.parsePath` that returns
+ * the value located at the parsed address.
+ *
+ *      var value = getPathValue(parsed, obj);
+ *
+ * @param {Object} parsed definition from `parsePath`.
+ * @param {Object} object to search against
+ * @param {Number} object to search against
+ * @returns {Object|Undefined} value
+ * @api private
+ */
+
+function _getPathValue (parsed, obj, index) {
+  var tmp = obj
+    , res;
+
+  index = (index === undefined ? parsed.length : index);
+
+  for (var i = 0, l = index; i < l; i++) {
+    var part = parsed[i];
+    if (tmp) {
+      if ('undefined' !== typeof part.p)
+        tmp = tmp[part.p];
+      else if ('undefined' !== typeof part.i)
+        tmp = tmp[part.i];
+      if (i == (l - 1)) res = tmp;
+    } else {
+      res = undefined;
+    }
+  }
+  return res;
+}
+
+},{"./hasProperty":323}],321:[function(require,module,exports){
+/*!
+ * Chai - getPathValue utility
+ * Copyright(c) 2012-2014 Jake Luer <jake@alogicalparadox.com>
+ * @see https://github.com/logicalparadox/filtr
+ * MIT Licensed
+ */
+
+var getPathInfo = require('./getPathInfo');
+
+/**
+ * ### .getPathValue(path, object)
+ *
+ * This allows the retrieval of values in an
+ * object given a string path.
+ *
+ *     var obj = {
+ *         prop1: {
+ *             arr: ['a', 'b', 'c']
+ *           , str: 'Hello'
+ *         }
+ *       , prop2: {
+ *             arr: [ { nested: 'Universe' } ]
+ *           , str: 'Hello again!'
+ *         }
+ *     }
+ *
+ * The following would be the results.
+ *
+ *     getPathValue('prop1.str', obj); // Hello
+ *     getPathValue('prop1.att[2]', obj); // b
+ *     getPathValue('prop2.arr[0].nested', obj); // Universe
+ *
+ * @param {String} path
+ * @param {Object} object
+ * @returns {Object} value or `undefined`
+ * @namespace Utils
+ * @name getPathValue
+ * @api public
+ */
+module.exports = function(path, obj) {
+  var info = getPathInfo(path, obj);
+  return info.value;
+};
+
+},{"./getPathInfo":320}],322:[function(require,module,exports){
+/*!
+ * Chai - getProperties utility
+ * Copyright(c) 2012-2014 Jake Luer <jake@alogicalparadox.com>
+ * MIT Licensed
+ */
+
+/**
+ * ### .getProperties(object)
+ *
+ * This allows the retrieval of property names of an object, enumerable or not,
+ * inherited or not.
+ *
+ * @param {Object} object
+ * @returns {Array}
+ * @namespace Utils
+ * @name getProperties
+ * @api public
+ */
+
+module.exports = function getProperties(object) {
+  var result = Object.getOwnPropertyNames(object);
+
+  function addProperty(property) {
+    if (result.indexOf(property) === -1) {
+      result.push(property);
+    }
+  }
+
+  var proto = Object.getPrototypeOf(object);
+  while (proto !== null) {
+    Object.getOwnPropertyNames(proto).forEach(addProperty);
+    proto = Object.getPrototypeOf(proto);
+  }
+
+  return result;
+};
+
+},{}],323:[function(require,module,exports){
+/*!
+ * Chai - hasProperty utility
+ * Copyright(c) 2012-2014 Jake Luer <jake@alogicalparadox.com>
+ * MIT Licensed
+ */
+
+var type = require('type-detect');
+
+/**
+ * ### .hasProperty(object, name)
+ *
+ * This allows checking whether an object has
+ * named property or numeric array index.
+ *
+ * Basically does the same thing as the `in`
+ * operator but works properly with natives
+ * and null/undefined values.
+ *
+ *     var obj = {
+ *         arr: ['a', 'b', 'c']
+ *       , str: 'Hello'
+ *     }
+ *
+ * The following would be the results.
+ *
+ *     hasProperty('str', obj);  // true
+ *     hasProperty('constructor', obj);  // true
+ *     hasProperty('bar', obj);  // false
+ *
+ *     hasProperty('length', obj.str); // true
+ *     hasProperty(1, obj.str);  // true
+ *     hasProperty(5, obj.str);  // false
+ *
+ *     hasProperty('length', obj.arr);  // true
+ *     hasProperty(2, obj.arr);  // true
+ *     hasProperty(3, obj.arr);  // false
+ *
+ * @param {Objuect} object
+ * @param {String|Number} name
+ * @returns {Boolean} whether it exists
+ * @namespace Utils
+ * @name getPathInfo
+ * @api public
+ */
+
+var literals = {
+    'number': Number
+  , 'string': String
+};
+
+module.exports = function hasProperty(name, obj) {
+  var ot = type(obj);
+
+  // Bad Object, obviously no props at all
+  if(ot === 'null' || ot === 'undefined')
+    return false;
+
+  // The `in` operator does not work with certain literals
+  // box these before the check
+  if(literals[ot] && typeof obj !== 'object')
+    obj = new literals[ot](obj);
+
+  return name in obj;
+};
+
+},{"type-detect":337}],324:[function(require,module,exports){
+/*!
+ * chai
+ * Copyright(c) 2011 Jake Luer <jake@alogicalparadox.com>
+ * MIT Licensed
+ */
+
+/*!
+ * Main exports
+ */
+
+var exports = module.exports = {};
+
+/*!
+ * test utility
+ */
+
+exports.test = require('./test');
+
+/*!
+ * type utility
+ */
+
+exports.type = require('type-detect');
+
+/*!
+ * expectTypes utility
+ */
+exports.expectTypes = require('./expectTypes');
+
+/*!
+ * message utility
+ */
+
+exports.getMessage = require('./getMessage');
+
+/*!
+ * actual utility
+ */
+
+exports.getActual = require('./getActual');
+
+/*!
+ * Inspect util
+ */
+
+exports.inspect = require('./inspect');
+
+/*!
+ * Object Display util
+ */
+
+exports.objDisplay = require('./objDisplay');
+
+/*!
+ * Flag utility
+ */
+
+exports.flag = require('./flag');
+
+/*!
+ * Flag transferring utility
+ */
+
+exports.transferFlags = require('./transferFlags');
+
+/*!
+ * Deep equal utility
+ */
+
+exports.eql = require('deep-eql');
+
+/*!
+ * Deep path value
+ */
+
+exports.getPathValue = require('./getPathValue');
+
+/*!
+ * Deep path info
+ */
+
+exports.getPathInfo = require('./getPathInfo');
+
+/*!
+ * Check if a property exists
+ */
+
+exports.hasProperty = require('./hasProperty');
+
+/*!
+ * Function name
+ */
+
+exports.getName = require('./getName');
+
+/*!
+ * add Property
+ */
+
+exports.addProperty = require('./addProperty');
+
+/*!
+ * add Method
+ */
+
+exports.addMethod = require('./addMethod');
+
+/*!
+ * overwrite Property
+ */
+
+exports.overwriteProperty = require('./overwriteProperty');
+
+/*!
+ * overwrite Method
+ */
+
+exports.overwriteMethod = require('./overwriteMethod');
+
+/*!
+ * Add a chainable method
+ */
+
+exports.addChainableMethod = require('./addChainableMethod');
+
+/*!
+ * Overwrite chainable method
+ */
+
+exports.overwriteChainableMethod = require('./overwriteChainableMethod');
+
+},{"./addChainableMethod":311,"./addMethod":312,"./addProperty":313,"./expectTypes":314,"./flag":315,"./getActual":316,"./getMessage":318,"./getName":319,"./getPathInfo":320,"./getPathValue":321,"./hasProperty":323,"./inspect":325,"./objDisplay":326,"./overwriteChainableMethod":327,"./overwriteMethod":328,"./overwriteProperty":329,"./test":330,"./transferFlags":331,"deep-eql":333,"type-detect":337}],325:[function(require,module,exports){
+// This is (almost) directly from Node.js utils
+// https://github.com/joyent/node/blob/f8c335d0caf47f16d31413f89aa28eda3878e3aa/lib/util.js
+
+var getName = require('./getName');
+var getProperties = require('./getProperties');
+var getEnumerableProperties = require('./getEnumerableProperties');
+
+module.exports = inspect;
+
+/**
+ * Echos the value of a value. Trys to print the value out
+ * in the best way possible given the different types.
+ *
+ * @param {Object} obj The object to print out.
+ * @param {Boolean} showHidden Flag that shows hidden (not enumerable)
+ *    properties of objects.
+ * @param {Number} depth Depth in which to descend in object. Default is 2.
+ * @param {Boolean} colors Flag to turn on ANSI escape codes to color the
+ *    output. Default is false (no coloring).
+ * @namespace Utils
+ * @name inspect
+ */
+function inspect(obj, showHidden, depth, colors) {
+  var ctx = {
+    showHidden: showHidden,
+    seen: [],
+    stylize: function (str) { return str; }
+  };
+  return formatValue(ctx, obj, (typeof depth === 'undefined' ? 2 : depth));
+}
+
+// Returns true if object is a DOM element.
+var isDOMElement = function (object) {
+  if (typeof HTMLElement === 'object') {
+    return object instanceof HTMLElement;
+  } else {
+    return object &&
+      typeof object === 'object' &&
+      object.nodeType === 1 &&
+      typeof object.nodeName === 'string';
+  }
+};
+
+function formatValue(ctx, value, recurseTimes) {
+  // Provide a hook for user-specified inspect functions.
+  // Check that value is an object with an inspect function on it
+  if (value && typeof value.inspect === 'function' &&
+      // Filter out the util module, it's inspect function is special
+      value.inspect !== exports.inspect &&
+      // Also filter out any prototype objects using the circular check.
+      !(value.constructor && value.constructor.prototype === value)) {
+    var ret = value.inspect(recurseTimes);
+    if (typeof ret !== 'string') {
+      ret = formatValue(ctx, ret, recurseTimes);
+    }
+    return ret;
+  }
+
+  // Primitive types cannot have properties
+  var primitive = formatPrimitive(ctx, value);
+  if (primitive) {
+    return primitive;
+  }
+
+  // If this is a DOM element, try to get the outer HTML.
+  if (isDOMElement(value)) {
+    if ('outerHTML' in value) {
+      return value.outerHTML;
+      // This value does not have an outerHTML attribute,
+      //   it could still be an XML element
+    } else {
+      // Attempt to serialize it
+      try {
+        if (document.xmlVersion) {
+          var xmlSerializer = new XMLSerializer();
+          return xmlSerializer.serializeToString(value);
+        } else {
+          // Firefox 11- do not support outerHTML
+          //   It does, however, support innerHTML
+          //   Use the following to render the element
+          var ns = "http://www.w3.org/1999/xhtml";
+          var container = document.createElementNS(ns, '_');
+
+          container.appendChild(value.cloneNode(false));
+          html = container.innerHTML
+            .replace('><', '>' + value.innerHTML + '<');
+          container.innerHTML = '';
+          return html;
+        }
+      } catch (err) {
+        // This could be a non-native DOM implementation,
+        //   continue with the normal flow:
+        //   printing the element as if it is an object.
+      }
+    }
+  }
+
+  // Look up the keys of the object.
+  var visibleKeys = getEnumerableProperties(value);
+  var keys = ctx.showHidden ? getProperties(value) : visibleKeys;
+
+  // Some type of object without properties can be shortcutted.
+  // In IE, errors have a single `stack` property, or if they are vanilla `Error`,
+  // a `stack` plus `description` property; ignore those for consistency.
+  if (keys.length === 0 || (isError(value) && (
+      (keys.length === 1 && keys[0] === 'stack') ||
+      (keys.length === 2 && keys[0] === 'description' && keys[1] === 'stack')
+     ))) {
+    if (typeof value === 'function') {
+      var name = getName(value);
+      var nameSuffix = name ? ': ' + name : '';
+      return ctx.stylize('[Function' + nameSuffix + ']', 'special');
+    }
+    if (isRegExp(value)) {
+      return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');
+    }
+    if (isDate(value)) {
+      return ctx.stylize(Date.prototype.toUTCString.call(value), 'date');
+    }
+    if (isError(value)) {
+      return formatError(value);
+    }
+  }
+
+  var base = '', array = false, braces = ['{', '}'];
+
+  // Make Array say that they are Array
+  if (isArray(value)) {
+    array = true;
+    braces = ['[', ']'];
+  }
+
+  // Make functions say that they are functions
+  if (typeof value === 'function') {
+    var name = getName(value);
+    var nameSuffix = name ? ': ' + name : '';
+    base = ' [Function' + nameSuffix + ']';
+  }
+
+  // Make RegExps say that they are RegExps
+  if (isRegExp(value)) {
+    base = ' ' + RegExp.prototype.toString.call(value);
+  }
+
+  // Make dates with properties first say the date
+  if (isDate(value)) {
+    base = ' ' + Date.prototype.toUTCString.call(value);
+  }
+
+  // Make error with message first say the error
+  if (isError(value)) {
+    return formatError(value);
+  }
+
+  if (keys.length === 0 && (!array || value.length == 0)) {
+    return braces[0] + base + braces[1];
+  }
+
+  if (recurseTimes < 0) {
+    if (isRegExp(value)) {
+      return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');
+    } else {
+      return ctx.stylize('[Object]', 'special');
+    }
+  }
+
+  ctx.seen.push(value);
+
+  var output;
+  if (array) {
+    output = formatArray(ctx, value, recurseTimes, visibleKeys, keys);
+  } else {
+    output = keys.map(function(key) {
+      return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array);
+    });
+  }
+
+  ctx.seen.pop();
+
+  return reduceToSingleString(output, base, braces);
+}
+
+
+function formatPrimitive(ctx, value) {
+  switch (typeof value) {
+    case 'undefined':
+      return ctx.stylize('undefined', 'undefined');
+
+    case 'string':
+      var simple = '\'' + JSON.stringify(value).replace(/^"|"$/g, '')
+                                               .replace(/'/g, "\\'")
+                                               .replace(/\\"/g, '"') + '\'';
+      return ctx.stylize(simple, 'string');
+
+    case 'number':
+      if (value === 0 && (1/value) === -Infinity) {
+        return ctx.stylize('-0', 'number');
+      }
+      return ctx.stylize('' + value, 'number');
+
+    case 'boolean':
+      return ctx.stylize('' + value, 'boolean');
+  }
+  // For some reason typeof null is "object", so special case here.
+  if (value === null) {
+    return ctx.stylize('null', 'null');
+  }
+}
+
+
+function formatError(value) {
+  return '[' + Error.prototype.toString.call(value) + ']';
+}
+
+
+function formatArray(ctx, value, recurseTimes, visibleKeys, keys) {
+  var output = [];
+  for (var i = 0, l = value.length; i < l; ++i) {
+    if (Object.prototype.hasOwnProperty.call(value, String(i))) {
+      output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,
+          String(i), true));
+    } else {
+      output.push('');
+    }
+  }
+  keys.forEach(function(key) {
+    if (!key.match(/^\d+$/)) {
+      output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,
+          key, true));
+    }
+  });
+  return output;
+}
+
+
+function formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) {
+  var name, str;
+  if (value.__lookupGetter__) {
+    if (value.__lookupGetter__(key)) {
+      if (value.__lookupSetter__(key)) {
+        str = ctx.stylize('[Getter/Setter]', 'special');
+      } else {
+        str = ctx.stylize('[Getter]', 'special');
+      }
+    } else {
+      if (value.__lookupSetter__(key)) {
+        str = ctx.stylize('[Setter]', 'special');
+      }
+    }
+  }
+  if (visibleKeys.indexOf(key) < 0) {
+    name = '[' + key + ']';
+  }
+  if (!str) {
+    if (ctx.seen.indexOf(value[key]) < 0) {
+      if (recurseTimes === null) {
+        str = formatValue(ctx, value[key], null);
+      } else {
+        str = formatValue(ctx, value[key], recurseTimes - 1);
+      }
+      if (str.indexOf('\n') > -1) {
+        if (array) {
+          str = str.split('\n').map(function(line) {
+            return '  ' + line;
+          }).join('\n').substr(2);
+        } else {
+          str = '\n' + str.split('\n').map(function(line) {
+            return '   ' + line;
+          }).join('\n');
+        }
+      }
+    } else {
+      str = ctx.stylize('[Circular]', 'special');
+    }
+  }
+  if (typeof name === 'undefined') {
+    if (array && key.match(/^\d+$/)) {
+      return str;
+    }
+    name = JSON.stringify('' + key);
+    if (name.match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)) {
+      name = name.substr(1, name.length - 2);
+      name = ctx.stylize(name, 'name');
+    } else {
+      name = name.replace(/'/g, "\\'")
+                 .replace(/\\"/g, '"')
+                 .replace(/(^"|"$)/g, "'");
+      name = ctx.stylize(name, 'string');
+    }
+  }
+
+  return name + ': ' + str;
+}
+
+
+function reduceToSingleString(output, base, braces) {
+  var numLinesEst = 0;
+  var length = output.reduce(function(prev, cur) {
+    numLinesEst++;
+    if (cur.indexOf('\n') >= 0) numLinesEst++;
+    return prev + cur.length + 1;
+  }, 0);
+
+  if (length > 60) {
+    return braces[0] +
+           (base === '' ? '' : base + '\n ') +
+           ' ' +
+           output.join(',\n  ') +
+           ' ' +
+           braces[1];
+  }
+
+  return braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1];
+}
+
+function isArray(ar) {
+  return Array.isArray(ar) ||
+         (typeof ar === 'object' && objectToString(ar) === '[object Array]');
+}
+
+function isRegExp(re) {
+  return typeof re === 'object' && objectToString(re) === '[object RegExp]';
+}
+
+function isDate(d) {
+  return typeof d === 'object' && objectToString(d) === '[object Date]';
+}
+
+function isError(e) {
+  return typeof e === 'object' && objectToString(e) === '[object Error]';
+}
+
+function objectToString(o) {
+  return Object.prototype.toString.call(o);
+}
+
+},{"./getEnumerableProperties":317,"./getName":319,"./getProperties":322}],326:[function(require,module,exports){
+/*!
+ * Chai - flag utility
+ * Copyright(c) 2012-2014 Jake Luer <jake@alogicalparadox.com>
+ * MIT Licensed
+ */
+
+/*!
+ * Module dependancies
+ */
+
+var inspect = require('./inspect');
+var config = require('../config');
+
+/**
+ * ### .objDisplay (object)
+ *
+ * Determines if an object or an array matches
+ * criteria to be inspected in-line for error
+ * messages or should be truncated.
+ *
+ * @param {Mixed} javascript object to inspect
+ * @name objDisplay
+ * @namespace Utils
+ * @api public
+ */
+
+module.exports = function (obj) {
+  var str = inspect(obj)
+    , type = Object.prototype.toString.call(obj);
+
+  if (config.truncateThreshold && str.length >= config.truncateThreshold) {
+    if (type === '[object Function]') {
+      return !obj.name || obj.name === ''
+        ? '[Function]'
+        : '[Function: ' + obj.name + ']';
+    } else if (type === '[object Array]') {
+      return '[ Array(' + obj.length + ') ]';
+    } else if (type === '[object Object]') {
+      var keys = Object.keys(obj)
+        , kstr = keys.length > 2
+          ? keys.splice(0, 2).join(', ') + ', ...'
+          : keys.join(', ');
+      return '{ Object (' + kstr + ') }';
+    } else {
+      return str;
+    }
+  } else {
+    return str;
+  }
+};
+
+},{"../config":306,"./inspect":325}],327:[function(require,module,exports){
+/*!
+ * Chai - overwriteChainableMethod utility
+ * Copyright(c) 2012-2014 Jake Luer <jake@alogicalparadox.com>
+ * MIT Licensed
+ */
+
+/**
+ * ### overwriteChainableMethod (ctx, name, method, chainingBehavior)
+ *
+ * Overwites an already existing chainable method
+ * and provides access to the previous function or
+ * property.  Must return functions to be used for
+ * name.
+ *
+ *     utils.overwriteChainableMethod(chai.Assertion.prototype, 'length',
+ *       function (_super) {
+ *       }
+ *     , function (_super) {
+ *       }
+ *     );
+ *
+ * Can also be accessed directly from `chai.Assertion`.
+ *
+ *     chai.Assertion.overwriteChainableMethod('foo', fn, fn);
+ *
+ * Then can be used as any other assertion.
+ *
+ *     expect(myFoo).to.have.length(3);
+ *     expect(myFoo).to.have.length.above(3);
+ *
+ * @param {Object} ctx object whose method / property is to be overwritten
+ * @param {String} name of method / property to overwrite
+ * @param {Function} method function that returns a function to be used for name
+ * @param {Function} chainingBehavior function that returns a function to be used for property
+ * @namespace Utils
+ * @name overwriteChainableMethod
+ * @api public
+ */
+
+module.exports = function (ctx, name, method, chainingBehavior) {
+  var chainableBehavior = ctx.__methods[name];
+
+  var _chainingBehavior = chainableBehavior.chainingBehavior;
+  chainableBehavior.chainingBehavior = function () {
+    var result = chainingBehavior(_chainingBehavior).call(this);
+    return result === undefined ? this : result;
+  };
+
+  var _method = chainableBehavior.method;
+  chainableBehavior.method = function () {
+    var result = method(_method).apply(this, arguments);
+    return result === undefined ? this : result;
+  };
+};
+
+},{}],328:[function(require,module,exports){
+/*!
+ * Chai - overwriteMethod utility
+ * Copyright(c) 2012-2014 Jake Luer <jake@alogicalparadox.com>
+ * MIT Licensed
+ */
+
+/**
+ * ### overwriteMethod (ctx, name, fn)
+ *
+ * Overwites an already existing method and provides
+ * access to previous function. Must return function
+ * to be used for name.
+ *
+ *     utils.overwriteMethod(chai.Assertion.prototype, 'equal', function (_super) {
+ *       return function (str) {
+ *         var obj = utils.flag(this, 'object');
+ *         if (obj instanceof Foo) {
+ *           new chai.Assertion(obj.value).to.equal(str);
+ *         } else {
+ *           _super.apply(this, arguments);
+ *         }
+ *       }
+ *     });
+ *
+ * Can also be accessed directly from `chai.Assertion`.
+ *
+ *     chai.Assertion.overwriteMethod('foo', fn);
+ *
+ * Then can be used as any other assertion.
+ *
+ *     expect(myFoo).to.equal('bar');
+ *
+ * @param {Object} ctx object whose method is to be overwritten
+ * @param {String} name of method to overwrite
+ * @param {Function} method function that returns a function to be used for name
+ * @namespace Utils
+ * @name overwriteMethod
+ * @api public
+ */
+
+module.exports = function (ctx, name, method) {
+  var _method = ctx[name]
+    , _super = function () { return this; };
+
+  if (_method && 'function' === typeof _method)
+    _super = _method;
+
+  ctx[name] = function () {
+    var result = method(_super).apply(this, arguments);
+    return result === undefined ? this : result;
+  }
+};
+
+},{}],329:[function(require,module,exports){
+/*!
+ * Chai - overwriteProperty utility
+ * Copyright(c) 2012-2014 Jake Luer <jake@alogicalparadox.com>
+ * MIT Licensed
+ */
+
+/**
+ * ### overwriteProperty (ctx, name, fn)
+ *
+ * Overwites an already existing property getter and provides
+ * access to previous value. Must return function to use as getter.
+ *
+ *     utils.overwriteProperty(chai.Assertion.prototype, 'ok', function (_super) {
+ *       return function () {
+ *         var obj = utils.flag(this, 'object');
+ *         if (obj instanceof Foo) {
+ *           new chai.Assertion(obj.name).to.equal('bar');
+ *         } else {
+ *           _super.call(this);
+ *         }
+ *       }
+ *     });
+ *
+ *
+ * Can also be accessed directly from `chai.Assertion`.
+ *
+ *     chai.Assertion.overwriteProperty('foo', fn);
+ *
+ * Then can be used as any other assertion.
+ *
+ *     expect(myFoo).to.be.ok;
+ *
+ * @param {Object} ctx object whose property is to be overwritten
+ * @param {String} name of property to overwrite
+ * @param {Function} getter function that returns a getter function to be used for name
+ * @namespace Utils
+ * @name overwriteProperty
+ * @api public
+ */
+
+module.exports = function (ctx, name, getter) {
+  var _get = Object.getOwnPropertyDescriptor(ctx, name)
+    , _super = function () {};
+
+  if (_get && 'function' === typeof _get.get)
+    _super = _get.get
+
+  Object.defineProperty(ctx, name,
+    { get: function () {
+        var result = getter(_super).call(this);
+        return result === undefined ? this : result;
+      }
+    , configurable: true
+  });
+};
+
+},{}],330:[function(require,module,exports){
+/*!
+ * Chai - test utility
+ * Copyright(c) 2012-2014 Jake Luer <jake@alogicalparadox.com>
+ * MIT Licensed
+ */
+
+/*!
+ * Module dependancies
+ */
+
+var flag = require('./flag');
+
+/**
+ * # test(object, expression)
+ *
+ * Test and object for expression.
+ *
+ * @param {Object} object (constructed Assertion)
+ * @param {Arguments} chai.Assertion.prototype.assert arguments
+ * @namespace Utils
+ * @name test
+ */
+
+module.exports = function (obj, args) {
+  var negate = flag(obj, 'negate')
+    , expr = args[0];
+  return negate ? !expr : expr;
+};
+
+},{"./flag":315}],331:[function(require,module,exports){
+/*!
+ * Chai - transferFlags utility
+ * Copyright(c) 2012-2014 Jake Luer <jake@alogicalparadox.com>
+ * MIT Licensed
+ */
+
+/**
+ * ### transferFlags(assertion, object, includeAll = true)
+ *
+ * Transfer all the flags for `assertion` to `object`. If
+ * `includeAll` is set to `false`, then the base Chai
+ * assertion flags (namely `object`, `ssfi`, and `message`)
+ * will not be transferred.
+ *
+ *
+ *     var newAssertion = new Assertion();
+ *     utils.transferFlags(assertion, newAssertion);
+ *
+ *     var anotherAsseriton = new Assertion(myObj);
+ *     utils.transferFlags(assertion, anotherAssertion, false);
+ *
+ * @param {Assertion} assertion the assertion to transfer the flags from
+ * @param {Object} object the object to transfer the flags to; usually a new assertion
+ * @param {Boolean} includeAll
+ * @namespace Utils
+ * @name transferFlags
+ * @api private
+ */
+
+module.exports = function (assertion, object, includeAll) {
+  var flags = assertion.__flags || (assertion.__flags = Object.create(null));
+
+  if (!object.__flags) {
+    object.__flags = Object.create(null);
+  }
+
+  includeAll = arguments.length === 3 ? includeAll : true;
+
+  for (var flag in flags) {
+    if (includeAll ||
+        (flag !== 'object' && flag !== 'ssfi' && flag != 'message')) {
+      object.__flags[flag] = flags[flag];
+    }
+  }
+};
+
+},{}],332:[function(require,module,exports){
+/*!
+ * assertion-error
+ * Copyright(c) 2013 Jake Luer <jake@qualiancy.com>
+ * MIT Licensed
+ */
+
+/*!
+ * Return a function that will copy properties from
+ * one object to another excluding any originally
+ * listed. Returned function will create a new `{}`.
+ *
+ * @param {String} excluded properties ...
+ * @return {Function}
+ */
+
+function exclude () {
+  var excludes = [].slice.call(arguments);
+
+  function excludeProps (res, obj) {
+    Object.keys(obj).forEach(function (key) {
+      if (!~excludes.indexOf(key)) res[key] = obj[key];
+    });
+  }
+
+  return function extendExclude () {
+    var args = [].slice.call(arguments)
+      , i = 0
+      , res = {};
+
+    for (; i < args.length; i++) {
+      excludeProps(res, args[i]);
+    }
+
+    return res;
+  };
+};
+
+/*!
+ * Primary Exports
+ */
+
+module.exports = AssertionError;
+
+/**
+ * ### AssertionError
+ *
+ * An extension of the JavaScript `Error` constructor for
+ * assertion and validation scenarios.
+ *
+ * @param {String} message
+ * @param {Object} properties to include (optional)
+ * @param {callee} start stack function (optional)
+ */
+
+function AssertionError (message, _props, ssf) {
+  var extend = exclude('name', 'message', 'stack', 'constructor', 'toJSON')
+    , props = extend(_props || {});
+
+  // default values
+  this.message = message || 'Unspecified AssertionError';
+  this.showDiff = false;
+
+  // copy from properties
+  for (var key in props) {
+    this[key] = props[key];
+  }
+
+  // capture stack trace
+  ssf = ssf || arguments.callee;
+  if (ssf && Error.captureStackTrace) {
+    Error.captureStackTrace(this, ssf);
+  } else {
+    this.stack = new Error().stack;
+  }
+}
+
+/*!
+ * Inherit from Error.prototype
+ */
+
+AssertionError.prototype = Object.create(Error.prototype);
+
+/*!
+ * Statically set name
+ */
+
+AssertionError.prototype.name = 'AssertionError';
+
+/*!
+ * Ensure correct constructor
+ */
+
+AssertionError.prototype.constructor = AssertionError;
+
+/**
+ * Allow errors to be converted to JSON for static transfer.
+ *
+ * @param {Boolean} include stack (default: `true`)
+ * @return {Object} object that can be `JSON.stringify`
+ */
+
+AssertionError.prototype.toJSON = function (stack) {
+  var extend = exclude('constructor', 'toJSON', 'stack')
+    , props = extend({ name: this.name }, this);
+
+  // include stack if exists and not turned off
+  if (false !== stack && this.stack) {
+    props.stack = this.stack;
+  }
+
+  return props;
+};
+
+},{}],333:[function(require,module,exports){
+module.exports = require('./lib/eql');
+
+},{"./lib/eql":334}],334:[function(require,module,exports){
+/*!
+ * deep-eql
+ * Copyright(c) 2013 Jake Luer <jake@alogicalparadox.com>
+ * MIT Licensed
+ */
+
+/*!
+ * Module dependencies
+ */
+
+var type = require('type-detect');
+
+/*!
+ * Buffer.isBuffer browser shim
+ */
+
+var Buffer;
+try { Buffer = require('buffer').Buffer; }
+catch(ex) {
+  Buffer = {};
+  Buffer.isBuffer = function() { return false; }
+}
+
+/*!
+ * Primary Export
+ */
+
+module.exports = deepEqual;
+
+/**
+ * Assert super-strict (egal) equality between
+ * two objects of any type.
+ *
+ * @param {Mixed} a
+ * @param {Mixed} b
+ * @param {Array} memoised (optional)
+ * @return {Boolean} equal match
+ */
+
+function deepEqual(a, b, m) {
+  if (sameValue(a, b)) {
+    return true;
+  } else if ('date' === type(a)) {
+    return dateEqual(a, b);
+  } else if ('regexp' === type(a)) {
+    return regexpEqual(a, b);
+  } else if (Buffer.isBuffer(a)) {
+    return bufferEqual(a, b);
+  } else if ('arguments' === type(a)) {
+    return argumentsEqual(a, b, m);
+  } else if (!typeEqual(a, b)) {
+    return false;
+  } else if (('object' !== type(a) && 'object' !== type(b))
+  && ('array' !== type(a) && 'array' !== type(b))) {
+    return sameValue(a, b);
+  } else {
+    return objectEqual(a, b, m);
+  }
+}
+
+/*!
+ * Strict (egal) equality test. Ensures that NaN always
+ * equals NaN and `-0` does not equal `+0`.
+ *
+ * @param {Mixed} a
+ * @param {Mixed} b
+ * @return {Boolean} equal match
+ */
+
+function sameValue(a, b) {
+  if (a === b) return a !== 0 || 1 / a === 1 / b;
+  return a !== a && b !== b;
+}
+
+/*!
+ * Compare the types of two given objects and
+ * return if they are equal. Note that an Array
+ * has a type of `array` (not `object`) and arguments
+ * have a type of `arguments` (not `array`/`object`).
+ *
+ * @param {Mixed} a
+ * @param {Mixed} b
+ * @return {Boolean} result
+ */
+
+function typeEqual(a, b) {
+  return type(a) === type(b);
+}
+
+/*!
+ * Compare two Date objects by asserting that
+ * the time values are equal using `saveValue`.
+ *
+ * @param {Date} a
+ * @param {Date} b
+ * @return {Boolean} result
+ */
+
+function dateEqual(a, b) {
+  if ('date' !== type(b)) return false;
+  return sameValue(a.getTime(), b.getTime());
+}
+
+/*!
+ * Compare two regular expressions by converting them
+ * to string and checking for `sameValue`.
+ *
+ * @param {RegExp} a
+ * @param {RegExp} b
+ * @return {Boolean} result
+ */
+
+function regexpEqual(a, b) {
+  if ('regexp' !== type(b)) return false;
+  return sameValue(a.toString(), b.toString());
+}
+
+/*!
+ * Assert deep equality of two `arguments` objects.
+ * Unfortunately, these must be sliced to arrays
+ * prior to test to ensure no bad behavior.
+ *
+ * @param {Arguments} a
+ * @param {Arguments} b
+ * @param {Array} memoize (optional)
+ * @return {Boolean} result
+ */
+
+function argumentsEqual(a, b, m) {
+  if ('arguments' !== type(b)) return false;
+  a = [].slice.call(a);
+  b = [].slice.call(b);
+  return deepEqual(a, b, m);
+}
+
+/*!
+ * Get enumerable properties of a given object.
+ *
+ * @param {Object} a
+ * @return {Array} property names
+ */
+
+function enumerable(a) {
+  var res = [];
+  for (var key in a) res.push(key);
+  return res;
+}
+
+/*!
+ * Simple equality for flat iterable objects
+ * such as Arrays or Node.js buffers.
+ *
+ * @param {Iterable} a
+ * @param {Iterable} b
+ * @return {Boolean} result
+ */
+
+function iterableEqual(a, b) {
+  if (a.length !==  b.length) return false;
+
+  var i = 0;
+  var match = true;
+
+  for (; i < a.length; i++) {
+    if (a[i] !== b[i]) {
+      match = false;
+      break;
+    }
+  }
+
+  return match;
+}
+
+/*!
+ * Extension to `iterableEqual` specifically
+ * for Node.js Buffers.
+ *
+ * @param {Buffer} a
+ * @param {Mixed} b
+ * @return {Boolean} result
+ */
+
+function bufferEqual(a, b) {
+  if (!Buffer.isBuffer(b)) return false;
+  return iterableEqual(a, b);
+}
+
+/*!
+ * Block for `objectEqual` ensuring non-existing
+ * values don't get in.
+ *
+ * @param {Mixed} object
+ * @return {Boolean} result
+ */
+
+function isValue(a) {
+  return a !== null && a !== undefined;
+}
+
+/*!
+ * Recursively check the equality of two objects.
+ * Once basic sameness has been established it will
+ * defer to `deepEqual` for each enumerable key
+ * in the object.
+ *
+ * @param {Mixed} a
+ * @param {Mixed} b
+ * @return {Boolean} result
+ */
+
+function objectEqual(a, b, m) {
+  if (!isValue(a) || !isValue(b)) {
+    return false;
+  }
+
+  if (a.prototype !== b.prototype) {
+    return false;
+  }
+
+  var i;
+  if (m) {
+    for (i = 0; i < m.length; i++) {
+      if ((m[i][0] === a && m[i][1] === b)
+      ||  (m[i][0] === b && m[i][1] === a)) {
+        return true;
+      }
+    }
+  } else {
+    m = [];
+  }
+
+  try {
+    var ka = enumerable(a);
+    var kb = enumerable(b);
+  } catch (ex) {
+    return false;
+  }
+
+  ka.sort();
+  kb.sort();
+
+  if (!iterableEqual(ka, kb)) {
+    return false;
+  }
+
+  m.push([ a, b ]);
+
+  var key;
+  for (i = ka.length - 1; i >= 0; i--) {
+    key = ka[i];
+    if (!deepEqual(a[key], b[key], m)) {
+      return false;
+    }
+  }
+
+  return true;
+}
+
+},{"buffer":298,"type-detect":335}],335:[function(require,module,exports){
+module.exports = require('./lib/type');
+
+},{"./lib/type":336}],336:[function(require,module,exports){
+/*!
+ * type-detect
+ * Copyright(c) 2013 jake luer <jake@alogicalparadox.com>
+ * MIT Licensed
+ */
+
+/*!
+ * Primary Exports
+ */
+
+var exports = module.exports = getType;
+
+/*!
+ * Detectable javascript natives
+ */
+
+var natives = {
+    '[object Array]': 'array'
+  , '[object RegExp]': 'regexp'
+  , '[object Function]': 'function'
+  , '[object Arguments]': 'arguments'
+  , '[object Date]': 'date'
+};
+
+/**
+ * ### typeOf (obj)
+ *
+ * Use several different techniques to determine
+ * the type of object being tested.
+ *
+ *
+ * @param {Mixed} object
+ * @return {String} object type
+ * @api public
+ */
+
+function getType (obj) {
+  var str = Object.prototype.toString.call(obj);
+  if (natives[str]) return natives[str];
+  if (obj === null) return 'null';
+  if (obj === undefined) return 'undefined';
+  if (obj === Object(obj)) return 'object';
+  return typeof obj;
+}
+
+exports.Library = Library;
+
+/**
+ * ### Library
+ *
+ * Create a repository for custom type detection.
+ *
+ * ```js
+ * var lib = new type.Library;
+ * ```
+ *
+ */
+
+function Library () {
+  this.tests = {};
+}
+
+/**
+ * #### .of (obj)
+ *
+ * Expose replacement `typeof` detection to the library.
+ *
+ * ```js
+ * if ('string' === lib.of('hello world')) {
+ *   // ...
+ * }
+ * ```
+ *
+ * @param {Mixed} object to test
+ * @return {String} type
+ */
+
+Library.prototype.of = getType;
+
+/**
+ * #### .define (type, test)
+ *
+ * Add a test to for the `.test()` assertion.
+ *
+ * Can be defined as a regular expression:
+ *
+ * ```js
+ * lib.define('int', /^[0-9]+$/);
+ * ```
+ *
+ * ... or as a function:
+ *
+ * ```js
+ * lib.define('bln', function (obj) {
+ *   if ('boolean' === lib.of(obj)) return true;
+ *   var blns = [ 'yes', 'no', 'true', 'false', 1, 0 ];
+ *   if ('string' === lib.of(obj)) obj = obj.toLowerCase();
+ *   return !! ~blns.indexOf(obj);
+ * });
+ * ```
+ *
+ * @param {String} type
+ * @param {RegExp|Function} test
+ * @api public
+ */
+
+Library.prototype.define = function (type, test) {
+  if (arguments.length === 1) return this.tests[type];
+  this.tests[type] = test;
+  return this;
+};
+
+/**
+ * #### .test (obj, test)
+ *
+ * Assert that an object is of type. Will first
+ * check natives, and if that does not pass it will
+ * use the user defined custom tests.
+ *
+ * ```js
+ * assert(lib.test('1', 'int'));
+ * assert(lib.test('yes', 'bln'));
+ * ```
+ *
+ * @param {Mixed} object
+ * @param {String} type
+ * @return {Boolean} result
+ * @api public
+ */
+
+Library.prototype.test = function (obj, type) {
+  if (type === getType(obj)) return true;
+  var test = this.tests[type];
+
+  if (test && 'regexp' === getType(test)) {
+    return test.test(obj);
+  } else if (test && 'function' === getType(test)) {
+    return test(obj);
+  } else {
+    throw new ReferenceError('Type test "' + type + '" not defined or invalid.');
+  }
+};
+
+},{}],337:[function(require,module,exports){
+arguments[4][335][0].apply(exports,arguments)
+},{"./lib/type":338,"dup":335}],338:[function(require,module,exports){
+/*!
+ * type-detect
+ * Copyright(c) 2013 jake luer <jake@alogicalparadox.com>
+ * MIT Licensed
+ */
+
+/*!
+ * Primary Exports
+ */
+
+var exports = module.exports = getType;
+
+/**
+ * ### typeOf (obj)
+ *
+ * Use several different techniques to determine
+ * the type of object being tested.
+ *
+ *
+ * @param {Mixed} object
+ * @return {String} object type
+ * @api public
+ */
+var objectTypeRegexp = /^\[object (.*)\]$/;
+
+function getType(obj) {
+  var type = Object.prototype.toString.call(obj).match(objectTypeRegexp)[1].toLowerCase();
+  // Let "new String('')" return 'object'
+  if (typeof Promise === 'function' && obj instanceof Promise) return 'promise';
+  // PhantomJS has type "DOMWindow" for null
+  if (obj === null) return 'null';
+  // PhantomJS has type "DOMWindow" for undefined
+  if (obj === undefined) return 'undefined';
+  return type;
+}
+
+exports.Library = Library;
+
+/**
+ * ### Library
+ *
+ * Create a repository for custom type detection.
+ *
+ * ```js
+ * var lib = new type.Library;
+ * ```
+ *
+ */
+
+function Library() {
+  if (!(this instanceof Library)) return new Library();
+  this.tests = {};
+}
+
+/**
+ * #### .of (obj)
+ *
+ * Expose replacement `typeof` detection to the library.
+ *
+ * ```js
+ * if ('string' === lib.of('hello world')) {
+ *   // ...
+ * }
+ * ```
+ *
+ * @param {Mixed} object to test
+ * @return {String} type
+ */
+
+Library.prototype.of = getType;
+
+/**
+ * #### .define (type, test)
+ *
+ * Add a test to for the `.test()` assertion.
+ *
+ * Can be defined as a regular expression:
+ *
+ * ```js
+ * lib.define('int', /^[0-9]+$/);
+ * ```
+ *
+ * ... or as a function:
+ *
+ * ```js
+ * lib.define('bln', function (obj) {
+ *   if ('boolean' === lib.of(obj)) return true;
+ *   var blns = [ 'yes', 'no', 'true', 'false', 1, 0 ];
+ *   if ('string' === lib.of(obj)) obj = obj.toLowerCase();
+ *   return !! ~blns.indexOf(obj);
+ * });
+ * ```
+ *
+ * @param {String} type
+ * @param {RegExp|Function} test
+ * @api public
+ */
+
+Library.prototype.define = function(type, test) {
+  if (arguments.length === 1) return this.tests[type];
+  this.tests[type] = test;
+  return this;
+};
+
+/**
+ * #### .test (obj, test)
+ *
+ * Assert that an object is of type. Will first
+ * check natives, and if that does not pass it will
+ * use the user defined custom tests.
+ *
+ * ```js
+ * assert(lib.test('1', 'int'));
+ * assert(lib.test('yes', 'bln'));
+ * ```
+ *
+ * @param {Mixed} object
+ * @param {String} type
+ * @return {Boolean} result
+ * @api public
+ */
+
+Library.prototype.test = function(obj, type) {
+  if (type === getType(obj)) return true;
+  var test = this.tests[type];
+
+  if (test && 'regexp' === getType(test)) {
+    return test.test(obj);
+  } else if (test && 'function' === getType(test)) {
+    return test(obj);
+  } else {
+    throw new ReferenceError('Type test "' + type + '" not defined or invalid.');
+  }
+};
+
+},{}],339:[function(require,module,exports){
+/*!
+ * jQuery JavaScript Library v2.2.3
+ * http://jquery.com/
+ *
+ * Includes Sizzle.js
+ * http://sizzlejs.com/
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license
+ * http://jquery.org/license
+ *
+ * Date: 2016-04-05T19:26Z
+ */
+
+(function( global, factory ) {
+
+	if ( typeof module === "object" && typeof module.exports === "object" ) {
+		// For CommonJS and CommonJS-like environments where a proper `window`
+		// is present, execute the factory and get jQuery.
+		// For environments that do not have a `window` with a `document`
+		// (such as Node.js), expose a factory as module.exports.
+		// This accentuates the need for the creation of a real `window`.
+		// e.g. var jQuery = require("jquery")(window);
+		// See ticket #14549 for more info.
+		module.exports = global.document ?
+			factory( global, true ) :
+			function( w ) {
+				if ( !w.document ) {
+					throw new Error( "jQuery requires a window with a document" );
+				}
+				return factory( w );
+			};
+	} else {
+		factory( global );
+	}
+
+// Pass this if window is not defined yet
+}(typeof window !== "undefined" ? window : this, function( window, noGlobal ) {
+
+// Support: Firefox 18+
+// Can't be in strict mode, several libs including ASP.NET trace
+// the stack via arguments.caller.callee and Firefox dies if
+// you try to trace through "use strict" call chains. (#13335)
+//"use strict";
+var arr = [];
+
+var document = window.document;
+
+var slice = arr.slice;
+
+var concat = arr.concat;
+
+var push = arr.push;
+
+var indexOf = arr.indexOf;
+
+var class2type = {};
+
+var toString = class2type.toString;
+
+var hasOwn = class2type.hasOwnProperty;
+
+var support = {};
+
+
+
+var
+	version = "2.2.3",
+
+	// Define a local copy of jQuery
+	jQuery = function( selector, context ) {
+
+		// The jQuery object is actually just the init constructor 'enhanced'
+		// Need init if jQuery is called (just allow error to be thrown if not included)
+		return new jQuery.fn.init( selector, context );
+	},
+
+	// Support: Android<4.1
+	// Make sure we trim BOM and NBSP
+	rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,
+
+	// Matches dashed string for camelizing
+	rmsPrefix = /^-ms-/,
+	rdashAlpha = /-([\da-z])/gi,
+
+	// Used by jQuery.camelCase as callback to replace()
+	fcamelCase = function( all, letter ) {
+		return letter.toUpperCase();
+	};
+
+jQuery.fn = jQuery.prototype = {
+
+	// The current version of jQuery being used
+	jquery: version,
+
+	constructor: jQuery,
+
+	// Start with an empty selector
+	selector: "",
+
+	// The default length of a jQuery object is 0
+	length: 0,
+
+	toArray: function() {
+		return slice.call( this );
+	},
+
+	// Get the Nth element in the matched element set OR
+	// Get the whole matched element set as a clean array
+	get: function( num ) {
+		return num != null ?
+
+			// Return just the one element from the set
+			( num < 0 ? this[ num + this.length ] : this[ num ] ) :
+
+			// Return all the elements in a clean array
+			slice.call( this );
+	},
+
+	// Take an array of elements and push it onto the stack
+	// (returning the new matched element set)
+	pushStack: function( elems ) {
+
+		// Build a new jQuery matched element set
+		var ret = jQuery.merge( this.constructor(), elems );
+
+		// Add the old object onto the stack (as a reference)
+		ret.prevObject = this;
+		ret.context = this.context;
+
+		// Return the newly-formed element set
+		return ret;
+	},
+
+	// Execute a callback for every element in the matched set.
+	each: function( callback ) {
+		return jQuery.each( this, callback );
+	},
+
+	map: function( callback ) {
+		return this.pushStack( jQuery.map( this, function( elem, i ) {
+			return callback.call( elem, i, elem );
+		} ) );
+	},
+
+	slice: function() {
+		return this.pushStack( slice.apply( this, arguments ) );
+	},
+
+	first: function() {
+		return this.eq( 0 );
+	},
+
+	last: function() {
+		return this.eq( -1 );
+	},
+
+	eq: function( i ) {
+		var len = this.length,
+			j = +i + ( i < 0 ? len : 0 );
+		return this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] );
+	},
+
+	end: function() {
+		return this.prevObject || this.constructor();
+	},
+
+	// For internal use only.
+	// Behaves like an Array's method, not like a jQuery method.
+	push: push,
+	sort: arr.sort,
+	splice: arr.splice
+};
+
+jQuery.extend = jQuery.fn.extend = function() {
+	var options, name, src, copy, copyIsArray, clone,
+		target = arguments[ 0 ] || {},
+		i = 1,
+		length = arguments.length,
+		deep = false;
+
+	// Handle a deep copy situation
+	if ( typeof target === "boolean" ) {
+		deep = target;
+
+		// Skip the boolean and the target
+		target = arguments[ i ] || {};
+		i++;
+	}
+
+	// Handle case when target is a string or something (possible in deep copy)
+	if ( typeof target !== "object" && !jQuery.isFunction( target ) ) {
+		target = {};
+	}
+
+	// Extend jQuery itself if only one argument is passed
+	if ( i === length ) {
+		target = this;
+		i--;
+	}
+
+	for ( ; i < length; i++ ) {
+
+		// Only deal with non-null/undefined values
+		if ( ( options = arguments[ i ] ) != null ) {
+
+			// Extend the base object
+			for ( name in options ) {
+				src = target[ name ];
+				copy = options[ name ];
+
+				// Prevent never-ending loop
+				if ( target === copy ) {
+					continue;
+				}
+
+				// Recurse if we're merging plain objects or arrays
+				if ( deep && copy && ( jQuery.isPlainObject( copy ) ||
+					( copyIsArray = jQuery.isArray( copy ) ) ) ) {
+
+					if ( copyIsArray ) {
+						copyIsArray = false;
+						clone = src && jQuery.isArray( src ) ? src : [];
+
+					} else {
+						clone = src && jQuery.isPlainObject( src ) ? src : {};
+					}
+
+					// Never move original objects, clone them
+					target[ name ] = jQuery.extend( deep, clone, copy );
+
+				// Don't bring in undefined values
+				} else if ( copy !== undefined ) {
+					target[ name ] = copy;
+				}
+			}
+		}
+	}
+
+	// Return the modified object
+	return target;
+};
+
+jQuery.extend( {
+
+	// Unique for each copy of jQuery on the page
+	expando: "jQuery" + ( version + Math.random() ).replace( /\D/g, "" ),
+
+	// Assume jQuery is ready without the ready module
+	isReady: true,
+
+	error: function( msg ) {
+		throw new Error( msg );
+	},
+
+	noop: function() {},
+
+	isFunction: function( obj ) {
+		return jQuery.type( obj ) === "function";
+	},
+
+	isArray: Array.isArray,
+
+	isWindow: function( obj ) {
+		return obj != null && obj === obj.window;
+	},
+
+	isNumeric: function( obj ) {
+
+		// parseFloat NaNs numeric-cast false positives (null|true|false|"")
+		// ...but misinterprets leading-number strings, particularly hex literals ("0x...")
+		// subtraction forces infinities to NaN
+		// adding 1 corrects loss of precision from parseFloat (#15100)
+		var realStringObj = obj && obj.toString();
+		return !jQuery.isArray( obj ) && ( realStringObj - parseFloat( realStringObj ) + 1 ) >= 0;
+	},
+
+	isPlainObject: function( obj ) {
+		var key;
+
+		// Not plain objects:
+		// - Any object or value whose internal [[Class]] property is not "[object Object]"
+		// - DOM nodes
+		// - window
+		if ( jQuery.type( obj ) !== "object" || obj.nodeType || jQuery.isWindow( obj ) ) {
+			return false;
+		}
+
+		// Not own constructor property must be Object
+		if ( obj.constructor &&
+				!hasOwn.call( obj, "constructor" ) &&
+				!hasOwn.call( obj.constructor.prototype || {}, "isPrototypeOf" ) ) {
+			return false;
+		}
+
+		// Own properties are enumerated firstly, so to speed up,
+		// if last one is own, then all properties are own
+		for ( key in obj ) {}
+
+		return key === undefined || hasOwn.call( obj, key );
+	},
+
+	isEmptyObject: function( obj ) {
+		var name;
+		for ( name in obj ) {
+			return false;
+		}
+		return true;
+	},
+
+	type: function( obj ) {
+		if ( obj == null ) {
+			return obj + "";
+		}
+
+		// Support: Android<4.0, iOS<6 (functionish RegExp)
+		return typeof obj === "object" || typeof obj === "function" ?
+			class2type[ toString.call( obj ) ] || "object" :
+			typeof obj;
+	},
+
+	// Evaluates a script in a global context
+	globalEval: function( code ) {
+		var script,
+			indirect = eval;
+
+		code = jQuery.trim( code );
+
+		if ( code ) {
+
+			// If the code includes a valid, prologue position
+			// strict mode pragma, execute code by injecting a
+			// script tag into the document.
+			if ( code.indexOf( "use strict" ) === 1 ) {
+				script = document.createElement( "script" );
+				script.text = code;
+				document.head.appendChild( script ).parentNode.removeChild( script );
+			} else {
+
+				// Otherwise, avoid the DOM node creation, insertion
+				// and removal by using an indirect global eval
+
+				indirect( code );
+			}
+		}
+	},
+
+	// Convert dashed to camelCase; used by the css and data modules
+	// Support: IE9-11+
+	// Microsoft forgot to hump their vendor prefix (#9572)
+	camelCase: function( string ) {
+		return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase );
+	},
+
+	nodeName: function( elem, name ) {
+		return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();
+	},
+
+	each: function( obj, callback ) {
+		var length, i = 0;
+
+		if ( isArrayLike( obj ) ) {
+			length = obj.length;
+			for ( ; i < length; i++ ) {
+				if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {
+					break;
+				}
+			}
+		} else {
+			for ( i in obj ) {
+				if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {
+					break;
+				}
+			}
+		}
+
+		return obj;
+	},
+
+	// Support: Android<4.1
+	trim: function( text ) {
+		return text == null ?
+			"" :
+			( text + "" ).replace( rtrim, "" );
+	},
+
+	// results is for internal usage only
+	makeArray: function( arr, results ) {
+		var ret = results || [];
+
+		if ( arr != null ) {
+			if ( isArrayLike( Object( arr ) ) ) {
+				jQuery.merge( ret,
+					typeof arr === "string" ?
+					[ arr ] : arr
+				);
+			} else {
+				push.call( ret, arr );
+			}
+		}
+
+		return ret;
+	},
+
+	inArray: function( elem, arr, i ) {
+		return arr == null ? -1 : indexOf.call( arr, elem, i );
+	},
+
+	merge: function( first, second ) {
+		var len = +second.length,
+			j = 0,
+			i = first.length;
+
+		for ( ; j < len; j++ ) {
+			first[ i++ ] = second[ j ];
+		}
+
+		first.length = i;
+
+		return first;
+	},
+
+	grep: function( elems, callback, invert ) {
+		var callbackInverse,
+			matches = [],
+			i = 0,
+			length = elems.length,
+			callbackExpect = !invert;
+
+		// Go through the array, only saving the items
+		// that pass the validator function
+		for ( ; i < length; i++ ) {
+			callbackInverse = !callback( elems[ i ], i );
+			if ( callbackInverse !== callbackExpect ) {
+				matches.push( elems[ i ] );
+			}
+		}
+
+		return matches;
+	},
+
+	// arg is for internal usage only
+	map: function( elems, callback, arg ) {
+		var length, value,
+			i = 0,
+			ret = [];
+
+		// Go through the array, translating each of the items to their new values
+		if ( isArrayLike( elems ) ) {
+			length = elems.length;
+			for ( ; i < length; i++ ) {
+				value = callback( elems[ i ], i, arg );
+
+				if ( value != null ) {
+					ret.push( value );
+				}
+			}
+
+		// Go through every key on the object,
+		} else {
+			for ( i in elems ) {
+				value = callback( elems[ i ], i, arg );
+
+				if ( value != null ) {
+					ret.push( value );
+				}
+			}
+		}
+
+		// Flatten any nested arrays
+		return concat.apply( [], ret );
+	},
+
+	// A global GUID counter for objects
+	guid: 1,
+
+	// Bind a function to a context, optionally partially applying any
+	// arguments.
+	proxy: function( fn, context ) {
+		var tmp, args, proxy;
+
+		if ( typeof context === "string" ) {
+			tmp = fn[ context ];
+			context = fn;
+			fn = tmp;
+		}
+
+		// Quick check to determine if target is callable, in the spec
+		// this throws a TypeError, but we will just return undefined.
+		if ( !jQuery.isFunction( fn ) ) {
+			return undefined;
+		}
+
+		// Simulated bind
+		args = slice.call( arguments, 2 );
+		proxy = function() {
+			return fn.apply( context || this, args.concat( slice.call( arguments ) ) );
+		};
+
+		// Set the guid of unique handler to the same of original handler, so it can be removed
+		proxy.guid = fn.guid = fn.guid || jQuery.guid++;
+
+		return proxy;
+	},
+
+	now: Date.now,
+
+	// jQuery.support is not used in Core but other projects attach their
+	// properties to it so it needs to exist.
+	support: support
+} );
+
+// JSHint would error on this code due to the Symbol not being defined in ES5.
+// Defining this global in .jshintrc would create a danger of using the global
+// unguarded in another place, it seems safer to just disable JSHint for these
+// three lines.
+/* jshint ignore: start */
+if ( typeof Symbol === "function" ) {
+	jQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ];
+}
+/* jshint ignore: end */
+
+// Populate the class2type map
+jQuery.each( "Boolean Number String Function Array Date RegExp Object Error Symbol".split( " " ),
+function( i, name ) {
+	class2type[ "[object " + name + "]" ] = name.toLowerCase();
+} );
+
+function isArrayLike( obj ) {
+
+	// Support: iOS 8.2 (not reproducible in simulator)
+	// `in` check used to prevent JIT error (gh-2145)
+	// hasOwn isn't used here due to false negatives
+	// regarding Nodelist length in IE
+	var length = !!obj && "length" in obj && obj.length,
+		type = jQuery.type( obj );
+
+	if ( type === "function" || jQuery.isWindow( obj ) ) {
+		return false;
+	}
+
+	return type === "array" || length === 0 ||
+		typeof length === "number" && length > 0 && ( length - 1 ) in obj;
+}
+var Sizzle =
+/*!
+ * Sizzle CSS Selector Engine v2.2.1
+ * http://sizzlejs.com/
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license
+ * http://jquery.org/license
+ *
+ * Date: 2015-10-17
+ */
+(function( window ) {
+
+var i,
+	support,
+	Expr,
+	getText,
+	isXML,
+	tokenize,
+	compile,
+	select,
+	outermostContext,
+	sortInput,
+	hasDuplicate,
+
+	// Local document vars
+	setDocument,
+	document,
+	docElem,
+	documentIsHTML,
+	rbuggyQSA,
+	rbuggyMatches,
+	matches,
+	contains,
+
+	// Instance-specific data
+	expando = "sizzle" + 1 * new Date(),
+	preferredDoc = window.document,
+	dirruns = 0,
+	done = 0,
+	classCache = createCache(),
+	tokenCache = createCache(),
+	compilerCache = createCache(),
+	sortOrder = function( a, b ) {
+		if ( a === b ) {
+			hasDuplicate = true;
+		}
+		return 0;
+	},
+
+	// General-purpose constants
+	MAX_NEGATIVE = 1 << 31,
+
+	// Instance methods
+	hasOwn = ({}).hasOwnProperty,
+	arr = [],
+	pop = arr.pop,
+	push_native = arr.push,
+	push = arr.push,
+	slice = arr.slice,
+	// Use a stripped-down indexOf as it's faster than native
+	// http://jsperf.com/thor-indexof-vs-for/5
+	indexOf = function( list, elem ) {
+		var i = 0,
+			len = list.length;
+		for ( ; i < len; i++ ) {
+			if ( list[i] === elem ) {
+				return i;
+			}
+		}
+		return -1;
+	},
+
+	booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",
+
+	// Regular expressions
+
+	// http://www.w3.org/TR/css3-selectors/#whitespace
+	whitespace = "[\\x20\\t\\r\\n\\f]",
+
+	// http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier
+	identifier = "(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",
+
+	// Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors
+	attributes = "\\[" + whitespace + "*(" + identifier + ")(?:" + whitespace +
+		// Operator (capture 2)
+		"*([*^$|!~]?=)" + whitespace +
+		// "Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]"
+		"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" + whitespace +
+		"*\\]",
+
+	pseudos = ":(" + identifier + ")(?:\\((" +
+		// To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:
+		// 1. quoted (capture 3; capture 4 or capture 5)
+		"('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|" +
+		// 2. simple (capture 6)
+		"((?:\\\\.|[^\\\\()[\\]]|" + attributes + ")*)|" +
+		// 3. anything else (capture 2)
+		".*" +
+		")\\)|)",
+
+	// Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter
+	rwhitespace = new RegExp( whitespace + "+", "g" ),
+	rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", "g" ),
+
+	rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ),
+	rcombinators = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace + "*" ),
+
+	rattributeQuotes = new RegExp( "=" + whitespace + "*([^\\]'\"]*?)" + whitespace + "*\\]", "g" ),
+
+	rpseudo = new RegExp( pseudos ),
+	ridentifier = new RegExp( "^" + identifier + "$" ),
+
+	matchExpr = {
+		"ID": new RegExp( "^#(" + identifier + ")" ),
+		"CLASS": new RegExp( "^\\.(" + identifier + ")" ),
+		"TAG": new RegExp( "^(" + identifier + "|[*])" ),
+		"ATTR": new RegExp( "^" + attributes ),
+		"PSEUDO": new RegExp( "^" + pseudos ),
+		"CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + whitespace +
+			"*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + whitespace +
+			"*(\\d+)|))" + whitespace + "*\\)|)", "i" ),
+		"bool": new RegExp( "^(?:" + booleans + ")$", "i" ),
+		// For use in libraries implementing .is()
+		// We use this for POS matching in `select`
+		"needsContext": new RegExp( "^" + whitespace + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" +
+			whitespace + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" )
+	},
+
+	rinputs = /^(?:input|select|textarea|button)$/i,
+	rheader = /^h\d$/i,
+
+	rnative = /^[^{]+\{\s*\[native \w/,
+
+	// Easily-parseable/retrievable ID or TAG or CLASS selectors
+	rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,
+
+	rsibling = /[+~]/,
+	rescape = /'|\\/g,
+
+	// CSS escapes http://www.w3.org/TR/CSS21/syndata.html#escaped-characters
+	runescape = new RegExp( "\\\\([\\da-f]{1,6}" + whitespace + "?|(" + whitespace + ")|.)", "ig" ),
+	funescape = function( _, escaped, escapedWhitespace ) {
+		var high = "0x" + escaped - 0x10000;
+		// NaN means non-codepoint
+		// Support: Firefox<24
+		// Workaround erroneous numeric interpretation of +"0x"
+		return high !== high || escapedWhitespace ?
+			escaped :
+			high < 0 ?
+				// BMP codepoint
+				String.fromCharCode( high + 0x10000 ) :
+				// Supplemental Plane codepoint (surrogate pair)
+				String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );
+	},
+
+	// Used for iframes
+	// See setDocument()
+	// Removing the function wrapper causes a "Permission Denied"
+	// error in IE
+	unloadHandler = function() {
+		setDocument();
+	};
+
+// Optimize for push.apply( _, NodeList )
+try {
+	push.apply(
+		(arr = slice.call( preferredDoc.childNodes )),
+		preferredDoc.childNodes
+	);
+	// Support: Android<4.0
+	// Detect silently failing push.apply
+	arr[ preferredDoc.childNodes.length ].nodeType;
+} catch ( e ) {
+	push = { apply: arr.length ?
+
+		// Leverage slice if possible
+		function( target, els ) {
+			push_native.apply( target, slice.call(els) );
+		} :
+
+		// Support: IE<9
+		// Otherwise append directly
+		function( target, els ) {
+			var j = target.length,
+				i = 0;
+			// Can't trust NodeList.length
+			while ( (target[j++] = els[i++]) ) {}
+			target.length = j - 1;
+		}
+	};
+}
+
+function Sizzle( selector, context, results, seed ) {
+	var m, i, elem, nid, nidselect, match, groups, newSelector,
+		newContext = context && context.ownerDocument,
+
+		// nodeType defaults to 9, since context defaults to document
+		nodeType = context ? context.nodeType : 9;
+
+	results = results || [];
+
+	// Return early from calls with invalid selector or context
+	if ( typeof selector !== "string" || !selector ||
+		nodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) {
+
+		return results;
+	}
+
+	// Try to shortcut find operations (as opposed to filters) in HTML documents
+	if ( !seed ) {
+
+		if ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) {
+			setDocument( context );
+		}
+		context = context || document;
+
+		if ( documentIsHTML ) {
+
+			// If the selector is sufficiently simple, try using a "get*By*" DOM method
+			// (excepting DocumentFragment context, where the methods don't exist)
+			if ( nodeType !== 11 && (match = rquickExpr.exec( selector )) ) {
+
+				// ID selector
+				if ( (m = match[1]) ) {
+
+					// Document context
+					if ( nodeType === 9 ) {
+						if ( (elem = context.getElementById( m )) ) {
+
+							// Support: IE, Opera, Webkit
+							// TODO: identify versions
+							// getElementById can match elements by name instead of ID
+							if ( elem.id === m ) {
+								results.push( elem );
+								return results;
+							}
+						} else {
+							return results;
+						}
+
+					// Element context
+					} else {
+
+						// Support: IE, Opera, Webkit
+						// TODO: identify versions
+						// getElementById can match elements by name instead of ID
+						if ( newContext && (elem = newContext.getElementById( m )) &&
+							contains( context, elem ) &&
+							elem.id === m ) {
+
+							results.push( elem );
+							return results;
+						}
+					}
+
+				// Type selector
+				} else if ( match[2] ) {
+					push.apply( results, context.getElementsByTagName( selector ) );
+					return results;
+
+				// Class selector
+				} else if ( (m = match[3]) && support.getElementsByClassName &&
+					context.getElementsByClassName ) {
+
+					push.apply( results, context.getElementsByClassName( m ) );
+					return results;
+				}
+			}
+
+			// Take advantage of querySelectorAll
+			if ( support.qsa &&
+				!compilerCache[ selector + " " ] &&
+				(!rbuggyQSA || !rbuggyQSA.test( selector )) ) {
+
+				if ( nodeType !== 1 ) {
+					newContext = context;
+					newSelector = selector;
+
+				// qSA looks outside Element context, which is not what we want
+				// Thanks to Andrew Dupont for this workaround technique
+				// Support: IE <=8
+				// Exclude object elements
+				} else if ( context.nodeName.toLowerCase() !== "object" ) {
+
+					// Capture the context ID, setting it first if necessary
+					if ( (nid = context.getAttribute( "id" )) ) {
+						nid = nid.replace( rescape, "\\$&" );
+					} else {
+						context.setAttribute( "id", (nid = expando) );
+					}
+
+					// Prefix every selector in the list
+					groups = tokenize( selector );
+					i = groups.length;
+					nidselect = ridentifier.test( nid ) ? "#" + nid : "[id='" + nid + "']";
+					while ( i-- ) {
+						groups[i] = nidselect + " " + toSelector( groups[i] );
+					}
+					newSelector = groups.join( "," );
+
+					// Expand context for sibling selectors
+					newContext = rsibling.test( selector ) && testContext( context.parentNode ) ||
+						context;
+				}
+
+				if ( newSelector ) {
+					try {
+						push.apply( results,
+							newContext.querySelectorAll( newSelector )
+						);
+						return results;
+					} catch ( qsaError ) {
+					} finally {
+						if ( nid === expando ) {
+							context.removeAttribute( "id" );
+						}
+					}
+				}
+			}
+		}
+	}
+
+	// All others
+	return select( selector.replace( rtrim, "$1" ), context, results, seed );
+}
+
+/**
+ * Create key-value caches of limited size
+ * @returns {function(string, object)} Returns the Object data after storing it on itself with
+ *	property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)
+ *	deleting the oldest entry
+ */
+function createCache() {
+	var keys = [];
+
+	function cache( key, value ) {
+		// Use (key + " ") to avoid collision with native prototype properties (see Issue #157)
+		if ( keys.push( key + " " ) > Expr.cacheLength ) {
+			// Only keep the most recent entries
+			delete cache[ keys.shift() ];
+		}
+		return (cache[ key + " " ] = value);
+	}
+	return cache;
+}
+
+/**
+ * Mark a function for special use by Sizzle
+ * @param {Function} fn The function to mark
+ */
+function markFunction( fn ) {
+	fn[ expando ] = true;
+	return fn;
+}
+
+/**
+ * Support testing using an element
+ * @param {Function} fn Passed the created div and expects a boolean result
+ */
+function assert( fn ) {
+	var div = document.createElement("div");
+
+	try {
+		return !!fn( div );
+	} catch (e) {
+		return false;
+	} finally {
+		// Remove from its parent by default
+		if ( div.parentNode ) {
+			div.parentNode.removeChild( div );
+		}
+		// release memory in IE
+		div = null;
+	}
+}
+
+/**
+ * Adds the same handler for all of the specified attrs
+ * @param {String} attrs Pipe-separated list of attributes
+ * @param {Function} handler The method that will be applied
+ */
+function addHandle( attrs, handler ) {
+	var arr = attrs.split("|"),
+		i = arr.length;
+
+	while ( i-- ) {
+		Expr.attrHandle[ arr[i] ] = handler;
+	}
+}
+
+/**
+ * Checks document order of two siblings
+ * @param {Element} a
+ * @param {Element} b
+ * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b
+ */
+function siblingCheck( a, b ) {
+	var cur = b && a,
+		diff = cur && a.nodeType === 1 && b.nodeType === 1 &&
+			( ~b.sourceIndex || MAX_NEGATIVE ) -
+			( ~a.sourceIndex || MAX_NEGATIVE );
+
+	// Use IE sourceIndex if available on both nodes
+	if ( diff ) {
+		return diff;
+	}
+
+	// Check if b follows a
+	if ( cur ) {
+		while ( (cur = cur.nextSibling) ) {
+			if ( cur === b ) {
+				return -1;
+			}
+		}
+	}
+
+	return a ? 1 : -1;
+}
+
+/**
+ * Returns a function to use in pseudos for input types
+ * @param {String} type
+ */
+function createInputPseudo( type ) {
+	return function( elem ) {
+		var name = elem.nodeName.toLowerCase();
+		return name === "input" && elem.type === type;
+	};
+}
+
+/**
+ * Returns a function to use in pseudos for buttons
+ * @param {String} type
+ */
+function createButtonPseudo( type ) {
+	return function( elem ) {
+		var name = elem.nodeName.toLowerCase();
+		return (name === "input" || name === "button") && elem.type === type;
+	};
+}
+
+/**
+ * Returns a function to use in pseudos for positionals
+ * @param {Function} fn
+ */
+function createPositionalPseudo( fn ) {
+	return markFunction(function( argument ) {
+		argument = +argument;
+		return markFunction(function( seed, matches ) {
+			var j,
+				matchIndexes = fn( [], seed.length, argument ),
+				i = matchIndexes.length;
+
+			// Match elements found at the specified indexes
+			while ( i-- ) {
+				if ( seed[ (j = matchIndexes[i]) ] ) {
+					seed[j] = !(matches[j] = seed[j]);
+				}
+			}
+		});
+	});
+}
+
+/**
+ * Checks a node for validity as a Sizzle context
+ * @param {Element|Object=} context
+ * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value
+ */
+function testContext( context ) {
+	return context && typeof context.getElementsByTagName !== "undefined" && context;
+}
+
+// Expose support vars for convenience
+support = Sizzle.support = {};
+
+/**
+ * Detects XML nodes
+ * @param {Element|Object} elem An element or a document
+ * @returns {Boolean} True iff elem is a non-HTML XML node
+ */
+isXML = Sizzle.isXML = function( elem ) {
+	// documentElement is verified for cases where it doesn't yet exist
+	// (such as loading iframes in IE - #4833)
+	var documentElement = elem && (elem.ownerDocument || elem).documentElement;
+	return documentElement ? documentElement.nodeName !== "HTML" : false;
+};
+
+/**
+ * Sets document-related variables once based on the current document
+ * @param {Element|Object} [doc] An element or document object to use to set the document
+ * @returns {Object} Returns the current document
+ */
+setDocument = Sizzle.setDocument = function( node ) {
+	var hasCompare, parent,
+		doc = node ? node.ownerDocument || node : preferredDoc;
+
+	// Return early if doc is invalid or already selected
+	if ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) {
+		return document;
+	}
+
+	// Update global variables
+	document = doc;
+	docElem = document.documentElement;
+	documentIsHTML = !isXML( document );
+
+	// Support: IE 9-11, Edge
+	// Accessing iframe documents after unload throws "permission denied" errors (jQuery #13936)
+	if ( (parent = document.defaultView) && parent.top !== parent ) {
+		// Support: IE 11
+		if ( parent.addEventListener ) {
+			parent.addEventListener( "unload", unloadHandler, false );
+
+		// Support: IE 9 - 10 only
+		} else if ( parent.attachEvent ) {
+			parent.attachEvent( "onunload", unloadHandler );
+		}
+	}
+
+	/* Attributes
+	---------------------------------------------------------------------- */
+
+	// Support: IE<8
+	// Verify that getAttribute really returns attributes and not properties
+	// (excepting IE8 booleans)
+	support.attributes = assert(function( div ) {
+		div.className = "i";
+		return !div.getAttribute("className");
+	});
+
+	/* getElement(s)By*
+	---------------------------------------------------------------------- */
+
+	// Check if getElementsByTagName("*") returns only elements
+	support.getElementsByTagName = assert(function( div ) {
+		div.appendChild( document.createComment("") );
+		return !div.getElementsByTagName("*").length;
+	});
+
+	// Support: IE<9
+	support.getElementsByClassName = rnative.test( document.getElementsByClassName );
+
+	// Support: IE<10
+	// Check if getElementById returns elements by name
+	// The broken getElementById methods don't pick up programatically-set names,
+	// so use a roundabout getElementsByName test
+	support.getById = assert(function( div ) {
+		docElem.appendChild( div ).id = expando;
+		return !document.getElementsByName || !document.getElementsByName( expando ).length;
+	});
+
+	// ID find and filter
+	if ( support.getById ) {
+		Expr.find["ID"] = function( id, context ) {
+			if ( typeof context.getElementById !== "undefined" && documentIsHTML ) {
+				var m = context.getElementById( id );
+				return m ? [ m ] : [];
+			}
+		};
+		Expr.filter["ID"] = function( id ) {
+			var attrId = id.replace( runescape, funescape );
+			return function( elem ) {
+				return elem.getAttribute("id") === attrId;
+			};
+		};
+	} else {
+		// Support: IE6/7
+		// getElementById is not reliable as a find shortcut
+		delete Expr.find["ID"];
+
+		Expr.filter["ID"] =  function( id ) {
+			var attrId = id.replace( runescape, funescape );
+			return function( elem ) {
+				var node = typeof elem.getAttributeNode !== "undefined" &&
+					elem.getAttributeNode("id");
+				return node && node.value === attrId;
+			};
+		};
+	}
+
+	// Tag
+	Expr.find["TAG"] = support.getElementsByTagName ?
+		function( tag, context ) {
+			if ( typeof context.getElementsByTagName !== "undefined" ) {
+				return context.getElementsByTagName( tag );
+
+			// DocumentFragment nodes don't have gEBTN
+			} else if ( support.qsa ) {
+				return context.querySelectorAll( tag );
+			}
+		} :
+
+		function( tag, context ) {
+			var elem,
+				tmp = [],
+				i = 0,
+				// By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too
+				results = context.getElementsByTagName( tag );
+
+			// Filter out possible comments
+			if ( tag === "*" ) {
+				while ( (elem = results[i++]) ) {
+					if ( elem.nodeType === 1 ) {
+						tmp.push( elem );
+					}
+				}
+
+				return tmp;
+			}
+			return results;
+		};
+
+	// Class
+	Expr.find["CLASS"] = support.getElementsByClassName && function( className, context ) {
+		if ( typeof context.getElementsByClassName !== "undefined" && documentIsHTML ) {
+			return context.getElementsByClassName( className );
+		}
+	};
+
+	/* QSA/matchesSelector
+	---------------------------------------------------------------------- */
+
+	// QSA and matchesSelector support
+
+	// matchesSelector(:active) reports false when true (IE9/Opera 11.5)
+	rbuggyMatches = [];
+
+	// qSa(:focus) reports false when true (Chrome 21)
+	// We allow this because of a bug in IE8/9 that throws an error
+	// whenever `document.activeElement` is accessed on an iframe
+	// So, we allow :focus to pass through QSA all the time to avoid the IE error
+	// See http://bugs.jquery.com/ticket/13378
+	rbuggyQSA = [];
+
+	if ( (support.qsa = rnative.test( document.querySelectorAll )) ) {
+		// Build QSA regex
+		// Regex strategy adopted from Diego Perini
+		assert(function( div ) {
+			// Select is set to empty string on purpose
+			// This is to test IE's treatment of not explicitly
+			// setting a boolean content attribute,
+			// since its presence should be enough
+			// http://bugs.jquery.com/ticket/12359
+			docElem.appendChild( div ).innerHTML = "<a id='" + expando + "'></a>" +
+				"<select id='" + expando + "-\r\\' msallowcapture=''>" +
+				"<option selected=''></option></select>";
+
+			// Support: IE8, Opera 11-12.16
+			// Nothing should be selected when empty strings follow ^= or $= or *=
+			// The test attribute must be unknown in Opera but "safe" for WinRT
+			// http://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section
+			if ( div.querySelectorAll("[msallowcapture^='']").length ) {
+				rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:''|\"\")" );
+			}
+
+			// Support: IE8
+			// Boolean attributes and "value" are not treated correctly
+			if ( !div.querySelectorAll("[selected]").length ) {
+				rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" );
+			}
+
+			// Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+
+			if ( !div.querySelectorAll( "[id~=" + expando + "-]" ).length ) {
+				rbuggyQSA.push("~=");
+			}
+
+			// Webkit/Opera - :checked should return selected option elements
+			// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked
+			// IE8 throws error here and will not see later tests
+			if ( !div.querySelectorAll(":checked").length ) {
+				rbuggyQSA.push(":checked");
+			}
+
+			// Support: Safari 8+, iOS 8+
+			// https://bugs.webkit.org/show_bug.cgi?id=136851
+			// In-page `selector#id sibing-combinator selector` fails
+			if ( !div.querySelectorAll( "a#" + expando + "+*" ).length ) {
+				rbuggyQSA.push(".#.+[+~]");
+			}
+		});
+
+		assert(function( div ) {
+			// Support: Windows 8 Native Apps
+			// The type and name attributes are restricted during .innerHTML assignment
+			var input = document.createElement("input");
+			input.setAttribute( "type", "hidden" );
+			div.appendChild( input ).setAttribute( "name", "D" );
+
+			// Support: IE8
+			// Enforce case-sensitivity of name attribute
+			if ( div.querySelectorAll("[name=d]").length ) {
+				rbuggyQSA.push( "name" + whitespace + "*[*^$|!~]?=" );
+			}
+
+			// FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled)
+			// IE8 throws error here and will not see later tests
+			if ( !div.querySelectorAll(":enabled").length ) {
+				rbuggyQSA.push( ":enabled", ":disabled" );
+			}
+
+			// Opera 10-11 does not throw on post-comma invalid pseudos
+			div.querySelectorAll("*,:x");
+			rbuggyQSA.push(",.*:");
+		});
+	}
+
+	if ( (support.matchesSelector = rnative.test( (matches = docElem.matches ||
+		docElem.webkitMatchesSelector ||
+		docElem.mozMatchesSelector ||
+		docElem.oMatchesSelector ||
+		docElem.msMatchesSelector) )) ) {
+
+		assert(function( div ) {
+			// Check to see if it's possible to do matchesSelector
+			// on a disconnected node (IE 9)
+			support.disconnectedMatch = matches.call( div, "div" );
+
+			// This should fail with an exception
+			// Gecko does not error, returns false instead
+			matches.call( div, "[s!='']:x" );
+			rbuggyMatches.push( "!=", pseudos );
+		});
+	}
+
+	rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join("|") );
+	rbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join("|") );
+
+	/* Contains
+	---------------------------------------------------------------------- */
+	hasCompare = rnative.test( docElem.compareDocumentPosition );
+
+	// Element contains another
+	// Purposefully self-exclusive
+	// As in, an element does not contain itself
+	contains = hasCompare || rnative.test( docElem.contains ) ?
+		function( a, b ) {
+			var adown = a.nodeType === 9 ? a.documentElement : a,
+				bup = b && b.parentNode;
+			return a === bup || !!( bup && bup.nodeType === 1 && (
+				adown.contains ?
+					adown.contains( bup ) :
+					a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16
+			));
+		} :
+		function( a, b ) {
+			if ( b ) {
+				while ( (b = b.parentNode) ) {
+					if ( b === a ) {
+						return true;
+					}
+				}
+			}
+			return false;
+		};
+
+	/* Sorting
+	---------------------------------------------------------------------- */
+
+	// Document order sorting
+	sortOrder = hasCompare ?
+	function( a, b ) {
+
+		// Flag for duplicate removal
+		if ( a === b ) {
+			hasDuplicate = true;
+			return 0;
+		}
+
+		// Sort on method existence if only one input has compareDocumentPosition
+		var compare = !a.compareDocumentPosition - !b.compareDocumentPosition;
+		if ( compare ) {
+			return compare;
+		}
+
+		// Calculate position if both inputs belong to the same document
+		compare = ( a.ownerDocument || a ) === ( b.ownerDocument || b ) ?
+			a.compareDocumentPosition( b ) :
+
+			// Otherwise we know they are disconnected
+			1;
+
+		// Disconnected nodes
+		if ( compare & 1 ||
+			(!support.sortDetached && b.compareDocumentPosition( a ) === compare) ) {
+
+			// Choose the first element that is related to our preferred document
+			if ( a === document || a.ownerDocument === preferredDoc && contains(preferredDoc, a) ) {
+				return -1;
+			}
+			if ( b === document || b.ownerDocument === preferredDoc && contains(preferredDoc, b) ) {
+				return 1;
+			}
+
+			// Maintain original order
+			return sortInput ?
+				( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :
+				0;
+		}
+
+		return compare & 4 ? -1 : 1;
+	} :
+	function( a, b ) {
+		// Exit early if the nodes are identical
+		if ( a === b ) {
+			hasDuplicate = true;
+			return 0;
+		}
+
+		var cur,
+			i = 0,
+			aup = a.parentNode,
+			bup = b.parentNode,
+			ap = [ a ],
+			bp = [ b ];
+
+		// Parentless nodes are either documents or disconnected
+		if ( !aup || !bup ) {
+			return a === document ? -1 :
+				b === document ? 1 :
+				aup ? -1 :
+				bup ? 1 :
+				sortInput ?
+				( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :
+				0;
+
+		// If the nodes are siblings, we can do a quick check
+		} else if ( aup === bup ) {
+			return siblingCheck( a, b );
+		}
+
+		// Otherwise we need full lists of their ancestors for comparison
+		cur = a;
+		while ( (cur = cur.parentNode) ) {
+			ap.unshift( cur );
+		}
+		cur = b;
+		while ( (cur = cur.parentNode) ) {
+			bp.unshift( cur );
+		}
+
+		// Walk down the tree looking for a discrepancy
+		while ( ap[i] === bp[i] ) {
+			i++;
+		}
+
+		return i ?
+			// Do a sibling check if the nodes have a common ancestor
+			siblingCheck( ap[i], bp[i] ) :
+
+			// Otherwise nodes in our document sort first
+			ap[i] === preferredDoc ? -1 :
+			bp[i] === preferredDoc ? 1 :
+			0;
+	};
+
+	return document;
+};
+
+Sizzle.matches = function( expr, elements ) {
+	return Sizzle( expr, null, null, elements );
+};
+
+Sizzle.matchesSelector = function( elem, expr ) {
+	// Set document vars if needed
+	if ( ( elem.ownerDocument || elem ) !== document ) {
+		setDocument( elem );
+	}
+
+	// Make sure that attribute selectors are quoted
+	expr = expr.replace( rattributeQuotes, "='$1']" );
+
+	if ( support.matchesSelector && documentIsHTML &&
+		!compilerCache[ expr + " " ] &&
+		( !rbuggyMatches || !rbuggyMatches.test( expr ) ) &&
+		( !rbuggyQSA     || !rbuggyQSA.test( expr ) ) ) {
+
+		try {
+			var ret = matches.call( elem, expr );
+
+			// IE 9's matchesSelector returns false on disconnected nodes
+			if ( ret || support.disconnectedMatch ||
+					// As well, disconnected nodes are said to be in a document
+					// fragment in IE 9
+					elem.document && elem.document.nodeType !== 11 ) {
+				return ret;
+			}
+		} catch (e) {}
+	}
+
+	return Sizzle( expr, document, null, [ elem ] ).length > 0;
+};
+
+Sizzle.contains = function( context, elem ) {
+	// Set document vars if needed
+	if ( ( context.ownerDocument || context ) !== document ) {
+		setDocument( context );
+	}
+	return contains( context, elem );
+};
+
+Sizzle.attr = function( elem, name ) {
+	// Set document vars if needed
+	if ( ( elem.ownerDocument || elem ) !== document ) {
+		setDocument( elem );
+	}
+
+	var fn = Expr.attrHandle[ name.toLowerCase() ],
+		// Don't get fooled by Object.prototype properties (jQuery #13807)
+		val = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ?
+			fn( elem, name, !documentIsHTML ) :
+			undefined;
+
+	return val !== undefined ?
+		val :
+		support.attributes || !documentIsHTML ?
+			elem.getAttribute( name ) :
+			(val = elem.getAttributeNode(name)) && val.specified ?
+				val.value :
+				null;
+};
+
+Sizzle.error = function( msg ) {
+	throw new Error( "Syntax error, unrecognized expression: " + msg );
+};
+
+/**
+ * Document sorting and removing duplicates
+ * @param {ArrayLike} results
+ */
+Sizzle.uniqueSort = function( results ) {
+	var elem,
+		duplicates = [],
+		j = 0,
+		i = 0;
+
+	// Unless we *know* we can detect duplicates, assume their presence
+	hasDuplicate = !support.detectDuplicates;
+	sortInput = !support.sortStable && results.slice( 0 );
+	results.sort( sortOrder );
+
+	if ( hasDuplicate ) {
+		while ( (elem = results[i++]) ) {
+			if ( elem === results[ i ] ) {
+				j = duplicates.push( i );
+			}
+		}
+		while ( j-- ) {
+			results.splice( duplicates[ j ], 1 );
+		}
+	}
+
+	// Clear input after sorting to release objects
+	// See https://github.com/jquery/sizzle/pull/225
+	sortInput = null;
+
+	return results;
+};
+
+/**
+ * Utility function for retrieving the text value of an array of DOM nodes
+ * @param {Array|Element} elem
+ */
+getText = Sizzle.getText = function( elem ) {
+	var node,
+		ret = "",
+		i = 0,
+		nodeType = elem.nodeType;
+
+	if ( !nodeType ) {
+		// If no nodeType, this is expected to be an array
+		while ( (node = elem[i++]) ) {
+			// Do not traverse comment nodes
+			ret += getText( node );
+		}
+	} else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) {
+		// Use textContent for elements
+		// innerText usage removed for consistency of new lines (jQuery #11153)
+		if ( typeof elem.textContent === "string" ) {
+			return elem.textContent;
+		} else {
+			// Traverse its children
+			for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {
+				ret += getText( elem );
+			}
+		}
+	} else if ( nodeType === 3 || nodeType === 4 ) {
+		return elem.nodeValue;
+	}
+	// Do not include comment or processing instruction nodes
+
+	return ret;
+};
+
+Expr = Sizzle.selectors = {
+
+	// Can be adjusted by the user
+	cacheLength: 50,
+
+	createPseudo: markFunction,
+
+	match: matchExpr,
+
+	attrHandle: {},
+
+	find: {},
+
+	relative: {
+		">": { dir: "parentNode", first: true },
+		" ": { dir: "parentNode" },
+		"+": { dir: "previousSibling", first: true },
+		"~": { dir: "previousSibling" }
+	},
+
+	preFilter: {
+		"ATTR": function( match ) {
+			match[1] = match[1].replace( runescape, funescape );
+
+			// Move the given value to match[3] whether quoted or unquoted
+			match[3] = ( match[3] || match[4] || match[5] || "" ).replace( runescape, funescape );
+
+			if ( match[2] === "~=" ) {
+				match[3] = " " + match[3] + " ";
+			}
+
+			return match.slice( 0, 4 );
+		},
+
+		"CHILD": function( match ) {
+			/* matches from matchExpr["CHILD"]
+				1 type (only|nth|...)
+				2 what (child|of-type)
+				3 argument (even|odd|\d*|\d*n([+-]\d+)?|...)
+				4 xn-component of xn+y argument ([+-]?\d*n|)
+				5 sign of xn-component
+				6 x of xn-component
+				7 sign of y-component
+				8 y of y-component
+			*/
+			match[1] = match[1].toLowerCase();
+
+			if ( match[1].slice( 0, 3 ) === "nth" ) {
+				// nth-* requires argument
+				if ( !match[3] ) {
+					Sizzle.error( match[0] );
+				}
+
+				// numeric x and y parameters for Expr.filter.CHILD
+				// remember that false/true cast respectively to 0/1
+				match[4] = +( match[4] ? match[5] + (match[6] || 1) : 2 * ( match[3] === "even" || match[3] === "odd" ) );
+				match[5] = +( ( match[7] + match[8] ) || match[3] === "odd" );
+
+			// other types prohibit arguments
+			} else if ( match[3] ) {
+				Sizzle.error( match[0] );
+			}
+
+			return match;
+		},
+
+		"PSEUDO": function( match ) {
+			var excess,
+				unquoted = !match[6] && match[2];
+
+			if ( matchExpr["CHILD"].test( match[0] ) ) {
+				return null;
+			}
+
+			// Accept quoted arguments as-is
+			if ( match[3] ) {
+				match[2] = match[4] || match[5] || "";
+
+			// Strip excess characters from unquoted arguments
+			} else if ( unquoted && rpseudo.test( unquoted ) &&
+				// Get excess from tokenize (recursively)
+				(excess = tokenize( unquoted, true )) &&
+				// advance to the next closing parenthesis
+				(excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length) ) {
+
+				// excess is a negative index
+				match[0] = match[0].slice( 0, excess );
+				match[2] = unquoted.slice( 0, excess );
+			}
+
+			// Return only captures needed by the pseudo filter method (type and argument)
+			return match.slice( 0, 3 );
+		}
+	},
+
+	filter: {
+
+		"TAG": function( nodeNameSelector ) {
+			var nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase();
+			return nodeNameSelector === "*" ?
+				function() { return true; } :
+				function( elem ) {
+					return elem.nodeName && elem.nodeName.toLowerCase() === nodeName;
+				};
+		},
+
+		"CLASS": function( className ) {
+			var pattern = classCache[ className + " " ];
+
+			return pattern ||
+				(pattern = new RegExp( "(^|" + whitespace + ")" + className + "(" + whitespace + "|$)" )) &&
+				classCache( className, function( elem ) {
+					return pattern.test( typeof elem.className === "string" && elem.className || typeof elem.getAttribute !== "undefined" && elem.getAttribute("class") || "" );
+				});
+		},
+
+		"ATTR": function( name, operator, check ) {
+			return function( elem ) {
+				var result = Sizzle.attr( elem, name );
+
+				if ( result == null ) {
+					return operator === "!=";
+				}
+				if ( !operator ) {
+					return true;
+				}
+
+				result += "";
+
+				return operator === "=" ? result === check :
+					operator === "!=" ? result !== check :
+					operator === "^=" ? check && result.indexOf( check ) === 0 :
+					operator === "*=" ? check && result.indexOf( check ) > -1 :
+					operator === "$=" ? check && result.slice( -check.length ) === check :
+					operator === "~=" ? ( " " + result.replace( rwhitespace, " " ) + " " ).indexOf( check ) > -1 :
+					operator === "|=" ? result === check || result.slice( 0, check.length + 1 ) === check + "-" :
+					false;
+			};
+		},
+
+		"CHILD": function( type, what, argument, first, last ) {
+			var simple = type.slice( 0, 3 ) !== "nth",
+				forward = type.slice( -4 ) !== "last",
+				ofType = what === "of-type";
+
+			return first === 1 && last === 0 ?
+
+				// Shortcut for :nth-*(n)
+				function( elem ) {
+					return !!elem.parentNode;
+				} :
+
+				function( elem, context, xml ) {
+					var cache, uniqueCache, outerCache, node, nodeIndex, start,
+						dir = simple !== forward ? "nextSibling" : "previousSibling",
+						parent = elem.parentNode,
+						name = ofType && elem.nodeName.toLowerCase(),
+						useCache = !xml && !ofType,
+						diff = false;
+
+					if ( parent ) {
+
+						// :(first|last|only)-(child|of-type)
+						if ( simple ) {
+							while ( dir ) {
+								node = elem;
+								while ( (node = node[ dir ]) ) {
+									if ( ofType ?
+										node.nodeName.toLowerCase() === name :
+										node.nodeType === 1 ) {
+
+										return false;
+									}
+								}
+								// Reverse direction for :only-* (if we haven't yet done so)
+								start = dir = type === "only" && !start && "nextSibling";
+							}
+							return true;
+						}
+
+						start = [ forward ? parent.firstChild : parent.lastChild ];
+
+						// non-xml :nth-child(...) stores cache data on `parent`
+						if ( forward && useCache ) {
+
+							// Seek `elem` from a previously-cached index
+
+							// ...in a gzip-friendly way
+							node = parent;
+							outerCache = node[ expando ] || (node[ expando ] = {});
+
+							// Support: IE <9 only
+							// Defend against cloned attroperties (jQuery gh-1709)
+							uniqueCache = outerCache[ node.uniqueID ] ||
+								(outerCache[ node.uniqueID ] = {});
+
+							cache = uniqueCache[ type ] || [];
+							nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];
+							diff = nodeIndex && cache[ 2 ];
+							node = nodeIndex && parent.childNodes[ nodeIndex ];
+
+							while ( (node = ++nodeIndex && node && node[ dir ] ||
+
+								// Fallback to seeking `elem` from the start
+								(diff = nodeIndex = 0) || start.pop()) ) {
+
+								// When found, cache indexes on `parent` and break
+								if ( node.nodeType === 1 && ++diff && node === elem ) {
+									uniqueCache[ type ] = [ dirruns, nodeIndex, diff ];
+									break;
+								}
+							}
+
+						} else {
+							// Use previously-cached element index if available
+							if ( useCache ) {
+								// ...in a gzip-friendly way
+								node = elem;
+								outerCache = node[ expando ] || (node[ expando ] = {});
+
+								// Support: IE <9 only
+								// Defend against cloned attroperties (jQuery gh-1709)
+								uniqueCache = outerCache[ node.uniqueID ] ||
+									(outerCache[ node.uniqueID ] = {});
+
+								cache = uniqueCache[ type ] || [];
+								nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];
+								diff = nodeIndex;
+							}
+
+							// xml :nth-child(...)
+							// or :nth-last-child(...) or :nth(-last)?-of-type(...)
+							if ( diff === false ) {
+								// Use the same loop as above to seek `elem` from the start
+								while ( (node = ++nodeIndex && node && node[ dir ] ||
+									(diff = nodeIndex = 0) || start.pop()) ) {
+
+									if ( ( ofType ?
+										node.nodeName.toLowerCase() === name :
+										node.nodeType === 1 ) &&
+										++diff ) {
+
+										// Cache the index of each encountered element
+										if ( useCache ) {
+											outerCache = node[ expando ] || (node[ expando ] = {});
+
+											// Support: IE <9 only
+											// Defend against cloned attroperties (jQuery gh-1709)
+											uniqueCache = outerCache[ node.uniqueID ] ||
+												(outerCache[ node.uniqueID ] = {});
+
+											uniqueCache[ type ] = [ dirruns, diff ];
+										}
+
+										if ( node === elem ) {
+											break;
+										}
+									}
+								}
+							}
+						}
+
+						// Incorporate the offset, then check against cycle size
+						diff -= last;
+						return diff === first || ( diff % first === 0 && diff / first >= 0 );
+					}
+				};
+		},
+
+		"PSEUDO": function( pseudo, argument ) {
+			// pseudo-class names are case-insensitive
+			// http://www.w3.org/TR/selectors/#pseudo-classes
+			// Prioritize by case sensitivity in case custom pseudos are added with uppercase letters
+			// Remember that setFilters inherits from pseudos
+			var args,
+				fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] ||
+					Sizzle.error( "unsupported pseudo: " + pseudo );
+
+			// The user may use createPseudo to indicate that
+			// arguments are needed to create the filter function
+			// just as Sizzle does
+			if ( fn[ expando ] ) {
+				return fn( argument );
+			}
+
+			// But maintain support for old signatures
+			if ( fn.length > 1 ) {
+				args = [ pseudo, pseudo, "", argument ];
+				return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ?
+					markFunction(function( seed, matches ) {
+						var idx,
+							matched = fn( seed, argument ),
+							i = matched.length;
+						while ( i-- ) {
+							idx = indexOf( seed, matched[i] );
+							seed[ idx ] = !( matches[ idx ] = matched[i] );
+						}
+					}) :
+					function( elem ) {
+						return fn( elem, 0, args );
+					};
+			}
+
+			return fn;
+		}
+	},
+
+	pseudos: {
+		// Potentially complex pseudos
+		"not": markFunction(function( selector ) {
+			// Trim the selector passed to compile
+			// to avoid treating leading and trailing
+			// spaces as combinators
+			var input = [],
+				results = [],
+				matcher = compile( selector.replace( rtrim, "$1" ) );
+
+			return matcher[ expando ] ?
+				markFunction(function( seed, matches, context, xml ) {
+					var elem,
+						unmatched = matcher( seed, null, xml, [] ),
+						i = seed.length;
+
+					// Match elements unmatched by `matcher`
+					while ( i-- ) {
+						if ( (elem = unmatched[i]) ) {
+							seed[i] = !(matches[i] = elem);
+						}
+					}
+				}) :
+				function( elem, context, xml ) {
+					input[0] = elem;
+					matcher( input, null, xml, results );
+					// Don't keep the element (issue #299)
+					input[0] = null;
+					return !results.pop();
+				};
+		}),
+
+		"has": markFunction(function( selector ) {
+			return function( elem ) {
+				return Sizzle( selector, elem ).length > 0;
+			};
+		}),
+
+		"contains": markFunction(function( text ) {
+			text = text.replace( runescape, funescape );
+			return function( elem ) {
+				return ( elem.textContent || elem.innerText || getText( elem ) ).indexOf( text ) > -1;
+			};
+		}),
+
+		// "Whether an element is represented by a :lang() selector
+		// is based solely on the element's language value
+		// being equal to the identifier C,
+		// or beginning with the identifier C immediately followed by "-".
+		// The matching of C against the element's language value is performed case-insensitively.
+		// The identifier C does not have to be a valid language name."
+		// http://www.w3.org/TR/selectors/#lang-pseudo
+		"lang": markFunction( function( lang ) {
+			// lang value must be a valid identifier
+			if ( !ridentifier.test(lang || "") ) {
+				Sizzle.error( "unsupported lang: " + lang );
+			}
+			lang = lang.replace( runescape, funescape ).toLowerCase();
+			return function( elem ) {
+				var elemLang;
+				do {
+					if ( (elemLang = documentIsHTML ?
+						elem.lang :
+						elem.getAttribute("xml:lang") || elem.getAttribute("lang")) ) {
+
+						elemLang = elemLang.toLowerCase();
+						return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0;
+					}
+				} while ( (elem = elem.parentNode) && elem.nodeType === 1 );
+				return false;
+			};
+		}),
+
+		// Miscellaneous
+		"target": function( elem ) {
+			var hash = window.location && window.location.hash;
+			return hash && hash.slice( 1 ) === elem.id;
+		},
+
+		"root": function( elem ) {
+			return elem === docElem;
+		},
+
+		"focus": function( elem ) {
+			return elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex);
+		},
+
+		// Boolean properties
+		"enabled": function( elem ) {
+			return elem.disabled === false;
+		},
+
+		"disabled": function( elem ) {
+			return elem.disabled === true;
+		},
+
+		"checked": function( elem ) {
+			// In CSS3, :checked should return both checked and selected elements
+			// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked
+			var nodeName = elem.nodeName.toLowerCase();
+			return (nodeName === "input" && !!elem.checked) || (nodeName === "option" && !!elem.selected);
+		},
+
+		"selected": function( elem ) {
+			// Accessing this property makes selected-by-default
+			// options in Safari work properly
+			if ( elem.parentNode ) {
+				elem.parentNode.selectedIndex;
+			}
+
+			return elem.selected === true;
+		},
+
+		// Contents
+		"empty": function( elem ) {
+			// http://www.w3.org/TR/selectors/#empty-pseudo
+			// :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5),
+			//   but not by others (comment: 8; processing instruction: 7; etc.)
+			// nodeType < 6 works because attributes (2) do not appear as children
+			for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {
+				if ( elem.nodeType < 6 ) {
+					return false;
+				}
+			}
+			return true;
+		},
+
+		"parent": function( elem ) {
+			return !Expr.pseudos["empty"]( elem );
+		},
+
+		// Element/input types
+		"header": function( elem ) {
+			return rheader.test( elem.nodeName );
+		},
+
+		"input": function( elem ) {
+			return rinputs.test( elem.nodeName );
+		},
+
+		"button": function( elem ) {
+			var name = elem.nodeName.toLowerCase();
+			return name === "input" && elem.type === "button" || name === "button";
+		},
+
+		"text": function( elem ) {
+			var attr;
+			return elem.nodeName.toLowerCase() === "input" &&
+				elem.type === "text" &&
+
+				// Support: IE<8
+				// New HTML5 attribute values (e.g., "search") appear with elem.type === "text"
+				( (attr = elem.getAttribute("type")) == null || attr.toLowerCase() === "text" );
+		},
+
+		// Position-in-collection
+		"first": createPositionalPseudo(function() {
+			return [ 0 ];
+		}),
+
+		"last": createPositionalPseudo(function( matchIndexes, length ) {
+			return [ length - 1 ];
+		}),
+
+		"eq": createPositionalPseudo(function( matchIndexes, length, argument ) {
+			return [ argument < 0 ? argument + length : argument ];
+		}),
+
+		"even": createPositionalPseudo(function( matchIndexes, length ) {
+			var i = 0;
+			for ( ; i < length; i += 2 ) {
+				matchIndexes.push( i );
+			}
+			return matchIndexes;
+		}),
+
+		"odd": createPositionalPseudo(function( matchIndexes, length ) {
+			var i = 1;
+			for ( ; i < length; i += 2 ) {
+				matchIndexes.push( i );
+			}
+			return matchIndexes;
+		}),
+
+		"lt": createPositionalPseudo(function( matchIndexes, length, argument ) {
+			var i = argument < 0 ? argument + length : argument;
+			for ( ; --i >= 0; ) {
+				matchIndexes.push( i );
+			}
+			return matchIndexes;
+		}),
+
+		"gt": createPositionalPseudo(function( matchIndexes, length, argument ) {
+			var i = argument < 0 ? argument + length : argument;
+			for ( ; ++i < length; ) {
+				matchIndexes.push( i );
+			}
+			return matchIndexes;
+		})
+	}
+};
+
+Expr.pseudos["nth"] = Expr.pseudos["eq"];
+
+// Add button/input type pseudos
+for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) {
+	Expr.pseudos[ i ] = createInputPseudo( i );
+}
+for ( i in { submit: true, reset: true } ) {
+	Expr.pseudos[ i ] = createButtonPseudo( i );
+}
+
+// Easy API for creating new setFilters
+function setFilters() {}
+setFilters.prototype = Expr.filters = Expr.pseudos;
+Expr.setFilters = new setFilters();
+
+tokenize = Sizzle.tokenize = function( selector, parseOnly ) {
+	var matched, match, tokens, type,
+		soFar, groups, preFilters,
+		cached = tokenCache[ selector + " " ];
+
+	if ( cached ) {
+		return parseOnly ? 0 : cached.slice( 0 );
+	}
+
+	soFar = selector;
+	groups = [];
+	preFilters = Expr.preFilter;
+
+	while ( soFar ) {
+
+		// Comma and first run
+		if ( !matched || (match = rcomma.exec( soFar )) ) {
+			if ( match ) {
+				// Don't consume trailing commas as valid
+				soFar = soFar.slice( match[0].length ) || soFar;
+			}
+			groups.push( (tokens = []) );
+		}
+
+		matched = false;
+
+		// Combinators
+		if ( (match = rcombinators.exec( soFar )) ) {
+			matched = match.shift();
+			tokens.push({
+				value: matched,
+				// Cast descendant combinators to space
+				type: match[0].replace( rtrim, " " )
+			});
+			soFar = soFar.slice( matched.length );
+		}
+
+		// Filters
+		for ( type in Expr.filter ) {
+			if ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] ||
+				(match = preFilters[ type ]( match ))) ) {
+				matched = match.shift();
+				tokens.push({
+					value: matched,
+					type: type,
+					matches: match
+				});
+				soFar = soFar.slice( matched.length );
+			}
+		}
+
+		if ( !matched ) {
+			break;
+		}
+	}
+
+	// Return the length of the invalid excess
+	// if we're just parsing
+	// Otherwise, throw an error or return tokens
+	return parseOnly ?
+		soFar.length :
+		soFar ?
+			Sizzle.error( selector ) :
+			// Cache the tokens
+			tokenCache( selector, groups ).slice( 0 );
+};
+
+function toSelector( tokens ) {
+	var i = 0,
+		len = tokens.length,
+		selector = "";
+	for ( ; i < len; i++ ) {
+		selector += tokens[i].value;
+	}
+	return selector;
+}
+
+function addCombinator( matcher, combinator, base ) {
+	var dir = combinator.dir,
+		checkNonElements = base && dir === "parentNode",
+		doneName = done++;
+
+	return combinator.first ?
+		// Check against closest ancestor/preceding element
+		function( elem, context, xml ) {
+			while ( (elem = elem[ dir ]) ) {
+				if ( elem.nodeType === 1 || checkNonElements ) {
+					return matcher( elem, context, xml );
+				}
+			}
+		} :
+
+		// Check against all ancestor/preceding elements
+		function( elem, context, xml ) {
+			var oldCache, uniqueCache, outerCache,
+				newCache = [ dirruns, doneName ];
+
+			// We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching
+			if ( xml ) {
+				while ( (elem = elem[ dir ]) ) {
+					if ( elem.nodeType === 1 || checkNonElements ) {
+						if ( matcher( elem, context, xml ) ) {
+							return true;
+						}
+					}
+				}
+			} else {
+				while ( (elem = elem[ dir ]) ) {
+					if ( elem.nodeType === 1 || checkNonElements ) {
+						outerCache = elem[ expando ] || (elem[ expando ] = {});
+
+						// Support: IE <9 only
+						// Defend against cloned attroperties (jQuery gh-1709)
+						uniqueCache = outerCache[ elem.uniqueID ] || (outerCache[ elem.uniqueID ] = {});
+
+						if ( (oldCache = uniqueCache[ dir ]) &&
+							oldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) {
+
+							// Assign to newCache so results back-propagate to previous elements
+							return (newCache[ 2 ] = oldCache[ 2 ]);
+						} else {
+							// Reuse newcache so results back-propagate to previous elements
+							uniqueCache[ dir ] = newCache;
+
+							// A match means we're done; a fail means we have to keep checking
+							if ( (newCache[ 2 ] = matcher( elem, context, xml )) ) {
+								return true;
+							}
+						}
+					}
+				}
+			}
+		};
+}
+
+function elementMatcher( matchers ) {
+	return matchers.length > 1 ?
+		function( elem, context, xml ) {
+			var i = matchers.length;
+			while ( i-- ) {
+				if ( !matchers[i]( elem, context, xml ) ) {
+					return false;
+				}
+			}
+			return true;
+		} :
+		matchers[0];
+}
+
+function multipleContexts( selector, contexts, results ) {
+	var i = 0,
+		len = contexts.length;
+	for ( ; i < len; i++ ) {
+		Sizzle( selector, contexts[i], results );
+	}
+	return results;
+}
+
+function condense( unmatched, map, filter, context, xml ) {
+	var elem,
+		newUnmatched = [],
+		i = 0,
+		len = unmatched.length,
+		mapped = map != null;
+
+	for ( ; i < len; i++ ) {
+		if ( (elem = unmatched[i]) ) {
+			if ( !filter || filter( elem, context, xml ) ) {
+				newUnmatched.push( elem );
+				if ( mapped ) {
+					map.push( i );
+				}
+			}
+		}
+	}
+
+	return newUnmatched;
+}
+
+function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) {
+	if ( postFilter && !postFilter[ expando ] ) {
+		postFilter = setMatcher( postFilter );
+	}
+	if ( postFinder && !postFinder[ expando ] ) {
+		postFinder = setMatcher( postFinder, postSelector );
+	}
+	return markFunction(function( seed, results, context, xml ) {
+		var temp, i, elem,
+			preMap = [],
+			postMap = [],
+			preexisting = results.length,
+
+			// Get initial elements from seed or context
+			elems = seed || multipleContexts( selector || "*", context.nodeType ? [ context ] : context, [] ),
+
+			// Prefilter to get matcher input, preserving a map for seed-results synchronization
+			matcherIn = preFilter && ( seed || !selector ) ?
+				condense( elems, preMap, preFilter, context, xml ) :
+				elems,
+
+			matcherOut = matcher ?
+				// If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results,
+				postFinder || ( seed ? preFilter : preexisting || postFilter ) ?
+
+					// ...intermediate processing is necessary
+					[] :
+
+					// ...otherwise use results directly
+					results :
+				matcherIn;
+
+		// Find primary matches
+		if ( matcher ) {
+			matcher( matcherIn, matcherOut, context, xml );
+		}
+
+		// Apply postFilter
+		if ( postFilter ) {
+			temp = condense( matcherOut, postMap );
+			postFilter( temp, [], context, xml );
+
+			// Un-match failing elements by moving them back to matcherIn
+			i = temp.length;
+			while ( i-- ) {
+				if ( (elem = temp[i]) ) {
+					matcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem);
+				}
+			}
+		}
+
+		if ( seed ) {
+			if ( postFinder || preFilter ) {
+				if ( postFinder ) {
+					// Get the final matcherOut by condensing this intermediate into postFinder contexts
+					temp = [];
+					i = matcherOut.length;
+					while ( i-- ) {
+						if ( (elem = matcherOut[i]) ) {
+							// Restore matcherIn since elem is not yet a final match
+							temp.push( (matcherIn[i] = elem) );
+						}
+					}
+					postFinder( null, (matcherOut = []), temp, xml );
+				}
+
+				// Move matched elements from seed to results to keep them synchronized
+				i = matcherOut.length;
+				while ( i-- ) {
+					if ( (elem = matcherOut[i]) &&
+						(temp = postFinder ? indexOf( seed, elem ) : preMap[i]) > -1 ) {
+
+						seed[temp] = !(results[temp] = elem);
+					}
+				}
+			}
+
+		// Add elements to results, through postFinder if defined
+		} else {
+			matcherOut = condense(
+				matcherOut === results ?
+					matcherOut.splice( preexisting, matcherOut.length ) :
+					matcherOut
+			);
+			if ( postFinder ) {
+				postFinder( null, results, matcherOut, xml );
+			} else {
+				push.apply( results, matcherOut );
+			}
+		}
+	});
+}
+
+function matcherFromTokens( tokens ) {
+	var checkContext, matcher, j,
+		len = tokens.length,
+		leadingRelative = Expr.relative[ tokens[0].type ],
+		implicitRelative = leadingRelative || Expr.relative[" "],
+		i = leadingRelative ? 1 : 0,
+
+		// The foundational matcher ensures that elements are reachable from top-level context(s)
+		matchContext = addCombinator( function( elem ) {
+			return elem === checkContext;
+		}, implicitRelative, true ),
+		matchAnyContext = addCombinator( function( elem ) {
+			return indexOf( checkContext, elem ) > -1;
+		}, implicitRelative, true ),
+		matchers = [ function( elem, context, xml ) {
+			var ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || (
+				(checkContext = context).nodeType ?
+					matchContext( elem, context, xml ) :
+					matchAnyContext( elem, context, xml ) );
+			// Avoid hanging onto element (issue #299)
+			checkContext = null;
+			return ret;
+		} ];
+
+	for ( ; i < len; i++ ) {
+		if ( (matcher = Expr.relative[ tokens[i].type ]) ) {
+			matchers = [ addCombinator(elementMatcher( matchers ), matcher) ];
+		} else {
+			matcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches );
+
+			// Return special upon seeing a positional matcher
+			if ( matcher[ expando ] ) {
+				// Find the next relative operator (if any) for proper handling
+				j = ++i;
+				for ( ; j < len; j++ ) {
+					if ( Expr.relative[ tokens[j].type ] ) {
+						break;
+					}
+				}
+				return setMatcher(
+					i > 1 && elementMatcher( matchers ),
+					i > 1 && toSelector(
+						// If the preceding token was a descendant combinator, insert an implicit any-element `*`
+						tokens.slice( 0, i - 1 ).concat({ value: tokens[ i - 2 ].type === " " ? "*" : "" })
+					).replace( rtrim, "$1" ),
+					matcher,
+					i < j && matcherFromTokens( tokens.slice( i, j ) ),
+					j < len && matcherFromTokens( (tokens = tokens.slice( j )) ),
+					j < len && toSelector( tokens )
+				);
+			}
+			matchers.push( matcher );
+		}
+	}
+
+	return elementMatcher( matchers );
+}
+
+function matcherFromGroupMatchers( elementMatchers, setMatchers ) {
+	var bySet = setMatchers.length > 0,
+		byElement = elementMatchers.length > 0,
+		superMatcher = function( seed, context, xml, results, outermost ) {
+			var elem, j, matcher,
+				matchedCount = 0,
+				i = "0",
+				unmatched = seed && [],
+				setMatched = [],
+				contextBackup = outermostContext,
+				// We must always have either seed elements or outermost context
+				elems = seed || byElement && Expr.find["TAG"]( "*", outermost ),
+				// Use integer dirruns iff this is the outermost matcher
+				dirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1),
+				len = elems.length;
+
+			if ( outermost ) {
+				outermostContext = context === document || context || outermost;
+			}
+
+			// Add elements passing elementMatchers directly to results
+			// Support: IE<9, Safari
+			// Tolerate NodeList properties (IE: "length"; Safari: <number>) matching elements by id
+			for ( ; i !== len && (elem = elems[i]) != null; i++ ) {
+				if ( byElement && elem ) {
+					j = 0;
+					if ( !context && elem.ownerDocument !== document ) {
+						setDocument( elem );
+						xml = !documentIsHTML;
+					}
+					while ( (matcher = elementMatchers[j++]) ) {
+						if ( matcher( elem, context || document, xml) ) {
+							results.push( elem );
+							break;
+						}
+					}
+					if ( outermost ) {
+						dirruns = dirrunsUnique;
+					}
+				}
+
+				// Track unmatched elements for set filters
+				if ( bySet ) {
+					// They will have gone through all possible matchers
+					if ( (elem = !matcher && elem) ) {
+						matchedCount--;
+					}
+
+					// Lengthen the array for every element, matched or not
+					if ( seed ) {
+						unmatched.push( elem );
+					}
+				}
+			}
+
+			// `i` is now the count of elements visited above, and adding it to `matchedCount`
+			// makes the latter nonnegative.
+			matchedCount += i;
+
+			// Apply set filters to unmatched elements
+			// NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount`
+			// equals `i`), unless we didn't visit _any_ elements in the above loop because we have
+			// no element matchers and no seed.
+			// Incrementing an initially-string "0" `i` allows `i` to remain a string only in that
+			// case, which will result in a "00" `matchedCount` that differs from `i` but is also
+			// numerically zero.
+			if ( bySet && i !== matchedCount ) {
+				j = 0;
+				while ( (matcher = setMatchers[j++]) ) {
+					matcher( unmatched, setMatched, context, xml );
+				}
+
+				if ( seed ) {
+					// Reintegrate element matches to eliminate the need for sorting
+					if ( matchedCount > 0 ) {
+						while ( i-- ) {
+							if ( !(unmatched[i] || setMatched[i]) ) {
+								setMatched[i] = pop.call( results );
+							}
+						}
+					}
+
+					// Discard index placeholder values to get only actual matches
+					setMatched = condense( setMatched );
+				}
+
+				// Add matches to results
+				push.apply( results, setMatched );
+
+				// Seedless set matches succeeding multiple successful matchers stipulate sorting
+				if ( outermost && !seed && setMatched.length > 0 &&
+					( matchedCount + setMatchers.length ) > 1 ) {
+
+					Sizzle.uniqueSort( results );
+				}
+			}
+
+			// Override manipulation of globals by nested matchers
+			if ( outermost ) {
+				dirruns = dirrunsUnique;
+				outermostContext = contextBackup;
+			}
+
+			return unmatched;
+		};
+
+	return bySet ?
+		markFunction( superMatcher ) :
+		superMatcher;
+}
+
+compile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) {
+	var i,
+		setMatchers = [],
+		elementMatchers = [],
+		cached = compilerCache[ selector + " " ];
+
+	if ( !cached ) {
+		// Generate a function of recursive functions that can be used to check each element
+		if ( !match ) {
+			match = tokenize( selector );
+		}
+		i = match.length;
+		while ( i-- ) {
+			cached = matcherFromTokens( match[i] );
+			if ( cached[ expando ] ) {
+				setMatchers.push( cached );
+			} else {
+				elementMatchers.push( cached );
+			}
+		}
+
+		// Cache the compiled function
+		cached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) );
+
+		// Save selector and tokenization
+		cached.selector = selector;
+	}
+	return cached;
+};
+
+/**
+ * A low-level selection function that works with Sizzle's compiled
+ *  selector functions
+ * @param {String|Function} selector A selector or a pre-compiled
+ *  selector function built with Sizzle.compile
+ * @param {Element} context
+ * @param {Array} [results]
+ * @param {Array} [seed] A set of elements to match against
+ */
+select = Sizzle.select = function( selector, context, results, seed ) {
+	var i, tokens, token, type, find,
+		compiled = typeof selector === "function" && selector,
+		match = !seed && tokenize( (selector = compiled.selector || selector) );
+
+	results = results || [];
+
+	// Try to minimize operations if there is only one selector in the list and no seed
+	// (the latter of which guarantees us context)
+	if ( match.length === 1 ) {
+
+		// Reduce context if the leading compound selector is an ID
+		tokens = match[0] = match[0].slice( 0 );
+		if ( tokens.length > 2 && (token = tokens[0]).type === "ID" &&
+				support.getById && context.nodeType === 9 && documentIsHTML &&
+				Expr.relative[ tokens[1].type ] ) {
+
+			context = ( Expr.find["ID"]( token.matches[0].replace(runescape, funescape), context ) || [] )[0];
+			if ( !context ) {
+				return results;
+
+			// Precompiled matchers will still verify ancestry, so step up a level
+			} else if ( compiled ) {
+				context = context.parentNode;
+			}
+
+			selector = selector.slice( tokens.shift().value.length );
+		}
+
+		// Fetch a seed set for right-to-left matching
+		i = matchExpr["needsContext"].test( selector ) ? 0 : tokens.length;
+		while ( i-- ) {
+			token = tokens[i];
+
+			// Abort if we hit a combinator
+			if ( Expr.relative[ (type = token.type) ] ) {
+				break;
+			}
+			if ( (find = Expr.find[ type ]) ) {
+				// Search, expanding context for leading sibling combinators
+				if ( (seed = find(
+					token.matches[0].replace( runescape, funescape ),
+					rsibling.test( tokens[0].type ) && testContext( context.parentNode ) || context
+				)) ) {
+
+					// If seed is empty or no tokens remain, we can return early
+					tokens.splice( i, 1 );
+					selector = seed.length && toSelector( tokens );
+					if ( !selector ) {
+						push.apply( results, seed );
+						return results;
+					}
+
+					break;
+				}
+			}
+		}
+	}
+
+	// Compile and execute a filtering function if one is not provided
+	// Provide `match` to avoid retokenization if we modified the selector above
+	( compiled || compile( selector, match ) )(
+		seed,
+		context,
+		!documentIsHTML,
+		results,
+		!context || rsibling.test( selector ) && testContext( context.parentNode ) || context
+	);
+	return results;
+};
+
+// One-time assignments
+
+// Sort stability
+support.sortStable = expando.split("").sort( sortOrder ).join("") === expando;
+
+// Support: Chrome 14-35+
+// Always assume duplicates if they aren't passed to the comparison function
+support.detectDuplicates = !!hasDuplicate;
+
+// Initialize against the default document
+setDocument();
+
+// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27)
+// Detached nodes confoundingly follow *each other*
+support.sortDetached = assert(function( div1 ) {
+	// Should return 1, but returns 4 (following)
+	return div1.compareDocumentPosition( document.createElement("div") ) & 1;
+});
+
+// Support: IE<8
+// Prevent attribute/property "interpolation"
+// http://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx
+if ( !assert(function( div ) {
+	div.innerHTML = "<a href='#'></a>";
+	return div.firstChild.getAttribute("href") === "#" ;
+}) ) {
+	addHandle( "type|href|height|width", function( elem, name, isXML ) {
+		if ( !isXML ) {
+			return elem.getAttribute( name, name.toLowerCase() === "type" ? 1 : 2 );
+		}
+	});
+}
+
+// Support: IE<9
+// Use defaultValue in place of getAttribute("value")
+if ( !support.attributes || !assert(function( div ) {
+	div.innerHTML = "<input/>";
+	div.firstChild.setAttribute( "value", "" );
+	return div.firstChild.getAttribute( "value" ) === "";
+}) ) {
+	addHandle( "value", function( elem, name, isXML ) {
+		if ( !isXML && elem.nodeName.toLowerCase() === "input" ) {
+			return elem.defaultValue;
+		}
+	});
+}
+
+// Support: IE<9
+// Use getAttributeNode to fetch booleans when getAttribute lies
+if ( !assert(function( div ) {
+	return div.getAttribute("disabled") == null;
+}) ) {
+	addHandle( booleans, function( elem, name, isXML ) {
+		var val;
+		if ( !isXML ) {
+			return elem[ name ] === true ? name.toLowerCase() :
+					(val = elem.getAttributeNode( name )) && val.specified ?
+					val.value :
+				null;
+		}
+	});
+}
+
+return Sizzle;
+
+})( window );
+
+
+
+jQuery.find = Sizzle;
+jQuery.expr = Sizzle.selectors;
+jQuery.expr[ ":" ] = jQuery.expr.pseudos;
+jQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort;
+jQuery.text = Sizzle.getText;
+jQuery.isXMLDoc = Sizzle.isXML;
+jQuery.contains = Sizzle.contains;
+
+
+
+var dir = function( elem, dir, until ) {
+	var matched = [],
+		truncate = until !== undefined;
+
+	while ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) {
+		if ( elem.nodeType === 1 ) {
+			if ( truncate && jQuery( elem ).is( until ) ) {
+				break;
+			}
+			matched.push( elem );
+		}
+	}
+	return matched;
+};
+
+
+var siblings = function( n, elem ) {
+	var matched = [];
+
+	for ( ; n; n = n.nextSibling ) {
+		if ( n.nodeType === 1 && n !== elem ) {
+			matched.push( n );
+		}
+	}
+
+	return matched;
+};
+
+
+var rneedsContext = jQuery.expr.match.needsContext;
+
+var rsingleTag = ( /^<([\w-]+)\s*\/?>(?:<\/\1>|)$/ );
+
+
+
+var risSimple = /^.[^:#\[\.,]*$/;
+
+// Implement the identical functionality for filter and not
+function winnow( elements, qualifier, not ) {
+	if ( jQuery.isFunction( qualifier ) ) {
+		return jQuery.grep( elements, function( elem, i ) {
+			/* jshint -W018 */
+			return !!qualifier.call( elem, i, elem ) !== not;
+		} );
+
+	}
+
+	if ( qualifier.nodeType ) {
+		return jQuery.grep( elements, function( elem ) {
+			return ( elem === qualifier ) !== not;
+		} );
+
+	}
+
+	if ( typeof qualifier === "string" ) {
+		if ( risSimple.test( qualifier ) ) {
+			return jQuery.filter( qualifier, elements, not );
+		}
+
+		qualifier = jQuery.filter( qualifier, elements );
+	}
+
+	return jQuery.grep( elements, function( elem ) {
+		return ( indexOf.call( qualifier, elem ) > -1 ) !== not;
+	} );
+}
+
+jQuery.filter = function( expr, elems, not ) {
+	var elem = elems[ 0 ];
+
+	if ( not ) {
+		expr = ":not(" + expr + ")";
+	}
+
+	return elems.length === 1 && elem.nodeType === 1 ?
+		jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [] :
+		jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) {
+			return elem.nodeType === 1;
+		} ) );
+};
+
+jQuery.fn.extend( {
+	find: function( selector ) {
+		var i,
+			len = this.length,
+			ret = [],
+			self = this;
+
+		if ( typeof selector !== "string" ) {
+			return this.pushStack( jQuery( selector ).filter( function() {
+				for ( i = 0; i < len; i++ ) {
+					if ( jQuery.contains( self[ i ], this ) ) {
+						return true;
+					}
+				}
+			} ) );
+		}
+
+		for ( i = 0; i < len; i++ ) {
+			jQuery.find( selector, self[ i ], ret );
+		}
+
+		// Needed because $( selector, context ) becomes $( context ).find( selector )
+		ret = this.pushStack( len > 1 ? jQuery.unique( ret ) : ret );
+		ret.selector = this.selector ? this.selector + " " + selector : selector;
+		return ret;
+	},
+	filter: function( selector ) {
+		return this.pushStack( winnow( this, selector || [], false ) );
+	},
+	not: function( selector ) {
+		return this.pushStack( winnow( this, selector || [], true ) );
+	},
+	is: function( selector ) {
+		return !!winnow(
+			this,
+
+			// If this is a positional/relative selector, check membership in the returned set
+			// so $("p:first").is("p:last") won't return true for a doc with two "p".
+			typeof selector === "string" && rneedsContext.test( selector ) ?
+				jQuery( selector ) :
+				selector || [],
+			false
+		).length;
+	}
+} );
+
+
+// Initialize a jQuery object
+
+
+// A central reference to the root jQuery(document)
+var rootjQuery,
+
+	// A simple way to check for HTML strings
+	// Prioritize #id over <tag> to avoid XSS via location.hash (#9521)
+	// Strict HTML recognition (#11290: must start with <)
+	rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,
+
+	init = jQuery.fn.init = function( selector, context, root ) {
+		var match, elem;
+
+		// HANDLE: $(""), $(null), $(undefined), $(false)
+		if ( !selector ) {
+			return this;
+		}
+
+		// Method init() accepts an alternate rootjQuery
+		// so migrate can support jQuery.sub (gh-2101)
+		root = root || rootjQuery;
+
+		// Handle HTML strings
+		if ( typeof selector === "string" ) {
+			if ( selector[ 0 ] === "<" &&
+				selector[ selector.length - 1 ] === ">" &&
+				selector.length >= 3 ) {
+
+				// Assume that strings that start and end with <> are HTML and skip the regex check
+				match = [ null, selector, null ];
+
+			} else {
+				match = rquickExpr.exec( selector );
+			}
+
+			// Match html or make sure no context is specified for #id
+			if ( match && ( match[ 1 ] || !context ) ) {
+
+				// HANDLE: $(html) -> $(array)
+				if ( match[ 1 ] ) {
+					context = context instanceof jQuery ? context[ 0 ] : context;
+
+					// Option to run scripts is true for back-compat
+					// Intentionally let the error be thrown if parseHTML is not present
+					jQuery.merge( this, jQuery.parseHTML(
+						match[ 1 ],
+						context && context.nodeType ? context.ownerDocument || context : document,
+						true
+					) );
+
+					// HANDLE: $(html, props)
+					if ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) {
+						for ( match in context ) {
+
+							// Properties of context are called as methods if possible
+							if ( jQuery.isFunction( this[ match ] ) ) {
+								this[ match ]( context[ match ] );
+
+							// ...and otherwise set as attributes
+							} else {
+								this.attr( match, context[ match ] );
+							}
+						}
+					}
+
+					return this;
+
+				// HANDLE: $(#id)
+				} else {
+					elem = document.getElementById( match[ 2 ] );
+
+					// Support: Blackberry 4.6
+					// gEBID returns nodes no longer in the document (#6963)
+					if ( elem && elem.parentNode ) {
+
+						// Inject the element directly into the jQuery object
+						this.length = 1;
+						this[ 0 ] = elem;
+					}
+
+					this.context = document;
+					this.selector = selector;
+					return this;
+				}
+
+			// HANDLE: $(expr, $(...))
+			} else if ( !context || context.jquery ) {
+				return ( context || root ).find( selector );
+
+			// HANDLE: $(expr, context)
+			// (which is just equivalent to: $(context).find(expr)
+			} else {
+				return this.constructor( context ).find( selector );
+			}
+
+		// HANDLE: $(DOMElement)
+		} else if ( selector.nodeType ) {
+			this.context = this[ 0 ] = selector;
+			this.length = 1;
+			return this;
+
+		// HANDLE: $(function)
+		// Shortcut for document ready
+		} else if ( jQuery.isFunction( selector ) ) {
+			return root.ready !== undefined ?
+				root.ready( selector ) :
+
+				// Execute immediately if ready is not present
+				selector( jQuery );
+		}
+
+		if ( selector.selector !== undefined ) {
+			this.selector = selector.selector;
+			this.context = selector.context;
+		}
+
+		return jQuery.makeArray( selector, this );
+	};
+
+// Give the init function the jQuery prototype for later instantiation
+init.prototype = jQuery.fn;
+
+// Initialize central reference
+rootjQuery = jQuery( document );
+
+
+var rparentsprev = /^(?:parents|prev(?:Until|All))/,
+
+	// Methods guaranteed to produce a unique set when starting from a unique set
+	guaranteedUnique = {
+		children: true,
+		contents: true,
+		next: true,
+		prev: true
+	};
+
+jQuery.fn.extend( {
+	has: function( target ) {
+		var targets = jQuery( target, this ),
+			l = targets.length;
+
+		return this.filter( function() {
+			var i = 0;
+			for ( ; i < l; i++ ) {
+				if ( jQuery.contains( this, targets[ i ] ) ) {
+					return true;
+				}
+			}
+		} );
+	},
+
+	closest: function( selectors, context ) {
+		var cur,
+			i = 0,
+			l = this.length,
+			matched = [],
+			pos = rneedsContext.test( selectors ) || typeof selectors !== "string" ?
+				jQuery( selectors, context || this.context ) :
+				0;
+
+		for ( ; i < l; i++ ) {
+			for ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) {
+
+				// Always skip document fragments
+				if ( cur.nodeType < 11 && ( pos ?
+					pos.index( cur ) > -1 :
+
+					// Don't pass non-elements to Sizzle
+					cur.nodeType === 1 &&
+						jQuery.find.matchesSelector( cur, selectors ) ) ) {
+
+					matched.push( cur );
+					break;
+				}
+			}
+		}
+
+		return this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched );
+	},
+
+	// Determine the position of an element within the set
+	index: function( elem ) {
+
+		// No argument, return index in parent
+		if ( !elem ) {
+			return ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1;
+		}
+
+		// Index in selector
+		if ( typeof elem === "string" ) {
+			return indexOf.call( jQuery( elem ), this[ 0 ] );
+		}
+
+		// Locate the position of the desired element
+		return indexOf.call( this,
+
+			// If it receives a jQuery object, the first element is used
+			elem.jquery ? elem[ 0 ] : elem
+		);
+	},
+
+	add: function( selector, context ) {
+		return this.pushStack(
+			jQuery.uniqueSort(
+				jQuery.merge( this.get(), jQuery( selector, context ) )
+			)
+		);
+	},
+
+	addBack: function( selector ) {
+		return this.add( selector == null ?
+			this.prevObject : this.prevObject.filter( selector )
+		);
+	}
+} );
+
+function sibling( cur, dir ) {
+	while ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {}
+	return cur;
+}
+
+jQuery.each( {
+	parent: function( elem ) {
+		var parent = elem.parentNode;
+		return parent && parent.nodeType !== 11 ? parent : null;
+	},
+	parents: function( elem ) {
+		return dir( elem, "parentNode" );
+	},
+	parentsUntil: function( elem, i, until ) {
+		return dir( elem, "parentNode", until );
+	},
+	next: function( elem ) {
+		return sibling( elem, "nextSibling" );
+	},
+	prev: function( elem ) {
+		return sibling( elem, "previousSibling" );
+	},
+	nextAll: function( elem ) {
+		return dir( elem, "nextSibling" );
+	},
+	prevAll: function( elem ) {
+		return dir( elem, "previousSibling" );
+	},
+	nextUntil: function( elem, i, until ) {
+		return dir( elem, "nextSibling", until );
+	},
+	prevUntil: function( elem, i, until ) {
+		return dir( elem, "previousSibling", until );
+	},
+	siblings: function( elem ) {
+		return siblings( ( elem.parentNode || {} ).firstChild, elem );
+	},
+	children: function( elem ) {
+		return siblings( elem.firstChild );
+	},
+	contents: function( elem ) {
+		return elem.contentDocument || jQuery.merge( [], elem.childNodes );
+	}
+}, function( name, fn ) {
+	jQuery.fn[ name ] = function( until, selector ) {
+		var matched = jQuery.map( this, fn, until );
+
+		if ( name.slice( -5 ) !== "Until" ) {
+			selector = until;
+		}
+
+		if ( selector && typeof selector === "string" ) {
+			matched = jQuery.filter( selector, matched );
+		}
+
+		if ( this.length > 1 ) {
+
+			// Remove duplicates
+			if ( !guaranteedUnique[ name ] ) {
+				jQuery.uniqueSort( matched );
+			}
+
+			// Reverse order for parents* and prev-derivatives
+			if ( rparentsprev.test( name ) ) {
+				matched.reverse();
+			}
+		}
+
+		return this.pushStack( matched );
+	};
+} );
+var rnotwhite = ( /\S+/g );
+
+
+
+// Convert String-formatted options into Object-formatted ones
+function createOptions( options ) {
+	var object = {};
+	jQuery.each( options.match( rnotwhite ) || [], function( _, flag ) {
+		object[ flag ] = true;
+	} );
+	return object;
+}
+
+/*
+ * Create a callback list using the following parameters:
+ *
+ *	options: an optional list of space-separated options that will change how
+ *			the callback list behaves or a more traditional option object
+ *
+ * By default a callback list will act like an event callback list and can be
+ * "fired" multiple times.
+ *
+ * Possible options:
+ *
+ *	once:			will ensure the callback list can only be fired once (like a Deferred)
+ *
+ *	memory:			will keep track of previous values and will call any callback added
+ *					after the list has been fired right away with the latest "memorized"
+ *					values (like a Deferred)
+ *
+ *	unique:			will ensure a callback can only be added once (no duplicate in the list)
+ *
+ *	stopOnFalse:	interrupt callings when a callback returns false
+ *
+ */
+jQuery.Callbacks = function( options ) {
+
+	// Convert options from String-formatted to Object-formatted if needed
+	// (we check in cache first)
+	options = typeof options === "string" ?
+		createOptions( options ) :
+		jQuery.extend( {}, options );
+
+	var // Flag to know if list is currently firing
+		firing,
+
+		// Last fire value for non-forgettable lists
+		memory,
+
+		// Flag to know if list was already fired
+		fired,
+
+		// Flag to prevent firing
+		locked,
+
+		// Actual callback list
+		list = [],
+
+		// Queue of execution data for repeatable lists
+		queue = [],
+
+		// Index of currently firing callback (modified by add/remove as needed)
+		firingIndex = -1,
+
+		// Fire callbacks
+		fire = function() {
+
+			// Enforce single-firing
+			locked = options.once;
+
+			// Execute callbacks for all pending executions,
+			// respecting firingIndex overrides and runtime changes
+			fired = firing = true;
+			for ( ; queue.length; firingIndex = -1 ) {
+				memory = queue.shift();
+				while ( ++firingIndex < list.length ) {
+
+					// Run callback and check for early termination
+					if ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false &&
+						options.stopOnFalse ) {
+
+						// Jump to end and forget the data so .add doesn't re-fire
+						firingIndex = list.length;
+						memory = false;
+					}
+				}
+			}
+
+			// Forget the data if we're done with it
+			if ( !options.memory ) {
+				memory = false;
+			}
+
+			firing = false;
+
+			// Clean up if we're done firing for good
+			if ( locked ) {
+
+				// Keep an empty list if we have data for future add calls
+				if ( memory ) {
+					list = [];
+
+				// Otherwise, this object is spent
+				} else {
+					list = "";
+				}
+			}
+		},
+
+		// Actual Callbacks object
+		self = {
+
+			// Add a callback or a collection of callbacks to the list
+			add: function() {
+				if ( list ) {
+
+					// If we have memory from a past run, we should fire after adding
+					if ( memory && !firing ) {
+						firingIndex = list.length - 1;
+						queue.push( memory );
+					}
+
+					( function add( args ) {
+						jQuery.each( args, function( _, arg ) {
+							if ( jQuery.isFunction( arg ) ) {
+								if ( !options.unique || !self.has( arg ) ) {
+									list.push( arg );
+								}
+							} else if ( arg && arg.length && jQuery.type( arg ) !== "string" ) {
+
+								// Inspect recursively
+								add( arg );
+							}
+						} );
+					} )( arguments );
+
+					if ( memory && !firing ) {
+						fire();
+					}
+				}
+				return this;
+			},
+
+			// Remove a callback from the list
+			remove: function() {
+				jQuery.each( arguments, function( _, arg ) {
+					var index;
+					while ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) {
+						list.splice( index, 1 );
+
+						// Handle firing indexes
+						if ( index <= firingIndex ) {
+							firingIndex--;
+						}
+					}
+				} );
+				return this;
+			},
+
+			// Check if a given callback is in the list.
+			// If no argument is given, return whether or not list has callbacks attached.
+			has: function( fn ) {
+				return fn ?
+					jQuery.inArray( fn, list ) > -1 :
+					list.length > 0;
+			},
+
+			// Remove all callbacks from the list
+			empty: function() {
+				if ( list ) {
+					list = [];
+				}
+				return this;
+			},
+
+			// Disable .fire and .add
+			// Abort any current/pending executions
+			// Clear all callbacks and values
+			disable: function() {
+				locked = queue = [];
+				list = memory = "";
+				return this;
+			},
+			disabled: function() {
+				return !list;
+			},
+
+			// Disable .fire
+			// Also disable .add unless we have memory (since it would have no effect)
+			// Abort any pending executions
+			lock: function() {
+				locked = queue = [];
+				if ( !memory ) {
+					list = memory = "";
+				}
+				return this;
+			},
+			locked: function() {
+				return !!locked;
+			},
+
+			// Call all callbacks with the given context and arguments
+			fireWith: function( context, args ) {
+				if ( !locked ) {
+					args = args || [];
+					args = [ context, args.slice ? args.slice() : args ];
+					queue.push( args );
+					if ( !firing ) {
+						fire();
+					}
+				}
+				return this;
+			},
+
+			// Call all the callbacks with the given arguments
+			fire: function() {
+				self.fireWith( this, arguments );
+				return this;
+			},
+
+			// To know if the callbacks have already been called at least once
+			fired: function() {
+				return !!fired;
+			}
+		};
+
+	return self;
+};
+
+
+jQuery.extend( {
+
+	Deferred: function( func ) {
+		var tuples = [
+
+				// action, add listener, listener list, final state
+				[ "resolve", "done", jQuery.Callbacks( "once memory" ), "resolved" ],
+				[ "reject", "fail", jQuery.Callbacks( "once memory" ), "rejected" ],
+				[ "notify", "progress", jQuery.Callbacks( "memory" ) ]
+			],
+			state = "pending",
+			promise = {
+				state: function() {
+					return state;
+				},
+				always: function() {
+					deferred.done( arguments ).fail( arguments );
+					return this;
+				},
+				then: function( /* fnDone, fnFail, fnProgress */ ) {
+					var fns = arguments;
+					return jQuery.Deferred( function( newDefer ) {
+						jQuery.each( tuples, function( i, tuple ) {
+							var fn = jQuery.isFunction( fns[ i ] ) && fns[ i ];
+
+							// deferred[ done | fail | progress ] for forwarding actions to newDefer
+							deferred[ tuple[ 1 ] ]( function() {
+								var returned = fn && fn.apply( this, arguments );
+								if ( returned && jQuery.isFunction( returned.promise ) ) {
+									returned.promise()
+										.progress( newDefer.notify )
+										.done( newDefer.resolve )
+										.fail( newDefer.reject );
+								} else {
+									newDefer[ tuple[ 0 ] + "With" ](
+										this === promise ? newDefer.promise() : this,
+										fn ? [ returned ] : arguments
+									);
+								}
+							} );
+						} );
+						fns = null;
+					} ).promise();
+				},
+
+				// Get a promise for this deferred
+				// If obj is provided, the promise aspect is added to the object
+				promise: function( obj ) {
+					return obj != null ? jQuery.extend( obj, promise ) : promise;
+				}
+			},
+			deferred = {};
+
+		// Keep pipe for back-compat
+		promise.pipe = promise.then;
+
+		// Add list-specific methods
+		jQuery.each( tuples, function( i, tuple ) {
+			var list = tuple[ 2 ],
+				stateString = tuple[ 3 ];
+
+			// promise[ done | fail | progress ] = list.add
+			promise[ tuple[ 1 ] ] = list.add;
+
+			// Handle state
+			if ( stateString ) {
+				list.add( function() {
+
+					// state = [ resolved | rejected ]
+					state = stateString;
+
+				// [ reject_list | resolve_list ].disable; progress_list.lock
+				}, tuples[ i ^ 1 ][ 2 ].disable, tuples[ 2 ][ 2 ].lock );
+			}
+
+			// deferred[ resolve | reject | notify ]
+			deferred[ tuple[ 0 ] ] = function() {
+				deferred[ tuple[ 0 ] + "With" ]( this === deferred ? promise : this, arguments );
+				return this;
+			};
+			deferred[ tuple[ 0 ] + "With" ] = list.fireWith;
+		} );
+
+		// Make the deferred a promise
+		promise.promise( deferred );
+
+		// Call given func if any
+		if ( func ) {
+			func.call( deferred, deferred );
+		}
+
+		// All done!
+		return deferred;
+	},
+
+	// Deferred helper
+	when: function( subordinate /* , ..., subordinateN */ ) {
+		var i = 0,
+			resolveValues = slice.call( arguments ),
+			length = resolveValues.length,
+
+			// the count of uncompleted subordinates
+			remaining = length !== 1 ||
+				( subordinate && jQuery.isFunction( subordinate.promise ) ) ? length : 0,
+
+			// the master Deferred.
+			// If resolveValues consist of only a single Deferred, just use that.
+			deferred = remaining === 1 ? subordinate : jQuery.Deferred(),
+
+			// Update function for both resolve and progress values
+			updateFunc = function( i, contexts, values ) {
+				return function( value ) {
+					contexts[ i ] = this;
+					values[ i ] = arguments.length > 1 ? slice.call( arguments ) : value;
+					if ( values === progressValues ) {
+						deferred.notifyWith( contexts, values );
+					} else if ( !( --remaining ) ) {
+						deferred.resolveWith( contexts, values );
+					}
+				};
+			},
+
+			progressValues, progressContexts, resolveContexts;
+
+		// Add listeners to Deferred subordinates; treat others as resolved
+		if ( length > 1 ) {
+			progressValues = new Array( length );
+			progressContexts = new Array( length );
+			resolveContexts = new Array( length );
+			for ( ; i < length; i++ ) {
+				if ( resolveValues[ i ] && jQuery.isFunction( resolveValues[ i ].promise ) ) {
+					resolveValues[ i ].promise()
+						.progress( updateFunc( i, progressContexts, progressValues ) )
+						.done( updateFunc( i, resolveContexts, resolveValues ) )
+						.fail( deferred.reject );
+				} else {
+					--remaining;
+				}
+			}
+		}
+
+		// If we're not waiting on anything, resolve the master
+		if ( !remaining ) {
+			deferred.resolveWith( resolveContexts, resolveValues );
+		}
+
+		return deferred.promise();
+	}
+} );
+
+
+// The deferred used on DOM ready
+var readyList;
+
+jQuery.fn.ready = function( fn ) {
+
+	// Add the callback
+	jQuery.ready.promise().done( fn );
+
+	return this;
+};
+
+jQuery.extend( {
+
+	// Is the DOM ready to be used? Set to true once it occurs.
+	isReady: false,
+
+	// A counter to track how many items to wait for before
+	// the ready event fires. See #6781
+	readyWait: 1,
+
+	// Hold (or release) the ready event
+	holdReady: function( hold ) {
+		if ( hold ) {
+			jQuery.readyWait++;
+		} else {
+			jQuery.ready( true );
+		}
+	},
+
+	// Handle when the DOM is ready
+	ready: function( wait ) {
+
+		// Abort if there are pending holds or we're already ready
+		if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) {
+			return;
+		}
+
+		// Remember that the DOM is ready
+		jQuery.isReady = true;
+
+		// If a normal DOM Ready event fired, decrement, and wait if need be
+		if ( wait !== true && --jQuery.readyWait > 0 ) {
+			return;
+		}
+
+		// If there are functions bound, to execute
+		readyList.resolveWith( document, [ jQuery ] );
+
+		// Trigger any bound ready events
+		if ( jQuery.fn.triggerHandler ) {
+			jQuery( document ).triggerHandler( "ready" );
+			jQuery( document ).off( "ready" );
+		}
+	}
+} );
+
+/**
+ * The ready event handler and self cleanup method
+ */
+function completed() {
+	document.removeEventListener( "DOMContentLoaded", completed );
+	window.removeEventListener( "load", completed );
+	jQuery.ready();
+}
+
+jQuery.ready.promise = function( obj ) {
+	if ( !readyList ) {
+
+		readyList = jQuery.Deferred();
+
+		// Catch cases where $(document).ready() is called
+		// after the browser event has already occurred.
+		// Support: IE9-10 only
+		// Older IE sometimes signals "interactive" too soon
+		if ( document.readyState === "complete" ||
+			( document.readyState !== "loading" && !document.documentElement.doScroll ) ) {
+
+			// Handle it asynchronously to allow scripts the opportunity to delay ready
+			window.setTimeout( jQuery.ready );
+
+		} else {
+
+			// Use the handy event callback
+			document.addEventListener( "DOMContentLoaded", completed );
+
+			// A fallback to window.onload, that will always work
+			window.addEventListener( "load", completed );
+		}
+	}
+	return readyList.promise( obj );
+};
+
+// Kick off the DOM ready check even if the user does not
+jQuery.ready.promise();
+
+
+
+
+// Multifunctional method to get and set values of a collection
+// The value/s can optionally be executed if it's a function
+var access = function( elems, fn, key, value, chainable, emptyGet, raw ) {
+	var i = 0,
+		len = elems.length,
+		bulk = key == null;
+
+	// Sets many values
+	if ( jQuery.type( key ) === "object" ) {
+		chainable = true;
+		for ( i in key ) {
+			access( elems, fn, i, key[ i ], true, emptyGet, raw );
+		}
+
+	// Sets one value
+	} else if ( value !== undefined ) {
+		chainable = true;
+
+		if ( !jQuery.isFunction( value ) ) {
+			raw = true;
+		}
+
+		if ( bulk ) {
+
+			// Bulk operations run against the entire set
+			if ( raw ) {
+				fn.call( elems, value );
+				fn = null;
+
+			// ...except when executing function values
+			} else {
+				bulk = fn;
+				fn = function( elem, key, value ) {
+					return bulk.call( jQuery( elem ), value );
+				};
+			}
+		}
+
+		if ( fn ) {
+			for ( ; i < len; i++ ) {
+				fn(
+					elems[ i ], key, raw ?
+					value :
+					value.call( elems[ i ], i, fn( elems[ i ], key ) )
+				);
+			}
+		}
+	}
+
+	return chainable ?
+		elems :
+
+		// Gets
+		bulk ?
+			fn.call( elems ) :
+			len ? fn( elems[ 0 ], key ) : emptyGet;
+};
+var acceptData = function( owner ) {
+
+	// Accepts only:
+	//  - Node
+	//    - Node.ELEMENT_NODE
+	//    - Node.DOCUMENT_NODE
+	//  - Object
+	//    - Any
+	/* jshint -W018 */
+	return owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType );
+};
+
+
+
+
+function Data() {
+	this.expando = jQuery.expando + Data.uid++;
+}
+
+Data.uid = 1;
+
+Data.prototype = {
+
+	register: function( owner, initial ) {
+		var value = initial || {};
+
+		// If it is a node unlikely to be stringify-ed or looped over
+		// use plain assignment
+		if ( owner.nodeType ) {
+			owner[ this.expando ] = value;
+
+		// Otherwise secure it in a non-enumerable, non-writable property
+		// configurability must be true to allow the property to be
+		// deleted with the delete operator
+		} else {
+			Object.defineProperty( owner, this.expando, {
+				value: value,
+				writable: true,
+				configurable: true
+			} );
+		}
+		return owner[ this.expando ];
+	},
+	cache: function( owner ) {
+
+		// We can accept data for non-element nodes in modern browsers,
+		// but we should not, see #8335.
+		// Always return an empty object.
+		if ( !acceptData( owner ) ) {
+			return {};
+		}
+
+		// Check if the owner object already has a cache
+		var value = owner[ this.expando ];
+
+		// If not, create one
+		if ( !value ) {
+			value = {};
+
+			// We can accept data for non-element nodes in modern browsers,
+			// but we should not, see #8335.
+			// Always return an empty object.
+			if ( acceptData( owner ) ) {
+
+				// If it is a node unlikely to be stringify-ed or looped over
+				// use plain assignment
+				if ( owner.nodeType ) {
+					owner[ this.expando ] = value;
+
+				// Otherwise secure it in a non-enumerable property
+				// configurable must be true to allow the property to be
+				// deleted when data is removed
+				} else {
+					Object.defineProperty( owner, this.expando, {
+						value: value,
+						configurable: true
+					} );
+				}
+			}
+		}
+
+		return value;
+	},
+	set: function( owner, data, value ) {
+		var prop,
+			cache = this.cache( owner );
+
+		// Handle: [ owner, key, value ] args
+		if ( typeof data === "string" ) {
+			cache[ data ] = value;
+
+		// Handle: [ owner, { properties } ] args
+		} else {
+
+			// Copy the properties one-by-one to the cache object
+			for ( prop in data ) {
+				cache[ prop ] = data[ prop ];
+			}
+		}
+		return cache;
+	},
+	get: function( owner, key ) {
+		return key === undefined ?
+			this.cache( owner ) :
+			owner[ this.expando ] && owner[ this.expando ][ key ];
+	},
+	access: function( owner, key, value ) {
+		var stored;
+
+		// In cases where either:
+		//
+		//   1. No key was specified
+		//   2. A string key was specified, but no value provided
+		//
+		// Take the "read" path and allow the get method to determine
+		// which value to return, respectively either:
+		//
+		//   1. The entire cache object
+		//   2. The data stored at the key
+		//
+		if ( key === undefined ||
+				( ( key && typeof key === "string" ) && value === undefined ) ) {
+
+			stored = this.get( owner, key );
+
+			return stored !== undefined ?
+				stored : this.get( owner, jQuery.camelCase( key ) );
+		}
+
+		// When the key is not a string, or both a key and value
+		// are specified, set or extend (existing objects) with either:
+		//
+		//   1. An object of properties
+		//   2. A key and value
+		//
+		this.set( owner, key, value );
+
+		// Since the "set" path can have two possible entry points
+		// return the expected data based on which path was taken[*]
+		return value !== undefined ? value : key;
+	},
+	remove: function( owner, key ) {
+		var i, name, camel,
+			cache = owner[ this.expando ];
+
+		if ( cache === undefined ) {
+			return;
+		}
+
+		if ( key === undefined ) {
+			this.register( owner );
+
+		} else {
+
+			// Support array or space separated string of keys
+			if ( jQuery.isArray( key ) ) {
+
+				// If "name" is an array of keys...
+				// When data is initially created, via ("key", "val") signature,
+				// keys will be converted to camelCase.
+				// Since there is no way to tell _how_ a key was added, remove
+				// both plain key and camelCase key. #12786
+				// This will only penalize the array argument path.
+				name = key.concat( key.map( jQuery.camelCase ) );
+			} else {
+				camel = jQuery.camelCase( key );
+
+				// Try the string as a key before any manipulation
+				if ( key in cache ) {
+					name = [ key, camel ];
+				} else {
+
+					// If a key with the spaces exists, use it.
+					// Otherwise, create an array by matching non-whitespace
+					name = camel;
+					name = name in cache ?
+						[ name ] : ( name.match( rnotwhite ) || [] );
+				}
+			}
+
+			i = name.length;
+
+			while ( i-- ) {
+				delete cache[ name[ i ] ];
+			}
+		}
+
+		// Remove the expando if there's no more data
+		if ( key === undefined || jQuery.isEmptyObject( cache ) ) {
+
+			// Support: Chrome <= 35-45+
+			// Webkit & Blink performance suffers when deleting properties
+			// from DOM nodes, so set to undefined instead
+			// https://code.google.com/p/chromium/issues/detail?id=378607
+			if ( owner.nodeType ) {
+				owner[ this.expando ] = undefined;
+			} else {
+				delete owner[ this.expando ];
+			}
+		}
+	},
+	hasData: function( owner ) {
+		var cache = owner[ this.expando ];
+		return cache !== undefined && !jQuery.isEmptyObject( cache );
+	}
+};
+var dataPriv = new Data();
+
+var dataUser = new Data();
+
+
+
+//	Implementation Summary
+//
+//	1. Enforce API surface and semantic compatibility with 1.9.x branch
+//	2. Improve the module's maintainability by reducing the storage
+//		paths to a single mechanism.
+//	3. Use the same single mechanism to support "private" and "user" data.
+//	4. _Never_ expose "private" data to user code (TODO: Drop _data, _removeData)
+//	5. Avoid exposing implementation details on user objects (eg. expando properties)
+//	6. Provide a clear path for implementation upgrade to WeakMap in 2014
+
+var rbrace = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,
+	rmultiDash = /[A-Z]/g;
+
+function dataAttr( elem, key, data ) {
+	var name;
+
+	// If nothing was found internally, try to fetch any
+	// data from the HTML5 data-* attribute
+	if ( data === undefined && elem.nodeType === 1 ) {
+		name = "data-" + key.replace( rmultiDash, "-$&" ).toLowerCase();
+		data = elem.getAttribute( name );
+
+		if ( typeof data === "string" ) {
+			try {
+				data = data === "true" ? true :
+					data === "false" ? false :
+					data === "null" ? null :
+
+					// Only convert to a number if it doesn't change the string
+					+data + "" === data ? +data :
+					rbrace.test( data ) ? jQuery.parseJSON( data ) :
+					data;
+			} catch ( e ) {}
+
+			// Make sure we set the data so it isn't changed later
+			dataUser.set( elem, key, data );
+		} else {
+			data = undefined;
+		}
+	}
+	return data;
+}
+
+jQuery.extend( {
+	hasData: function( elem ) {
+		return dataUser.hasData( elem ) || dataPriv.hasData( elem );
+	},
+
+	data: function( elem, name, data ) {
+		return dataUser.access( elem, name, data );
+	},
+
+	removeData: function( elem, name ) {
+		dataUser.remove( elem, name );
+	},
+
+	// TODO: Now that all calls to _data and _removeData have been replaced
+	// with direct calls to dataPriv methods, these can be deprecated.
+	_data: function( elem, name, data ) {
+		return dataPriv.access( elem, name, data );
+	},
+
+	_removeData: function( elem, name ) {
+		dataPriv.remove( elem, name );
+	}
+} );
+
+jQuery.fn.extend( {
+	data: function( key, value ) {
+		var i, name, data,
+			elem = this[ 0 ],
+			attrs = elem && elem.attributes;
+
+		// Gets all values
+		if ( key === undefined ) {
+			if ( this.length ) {
+				data = dataUser.get( elem );
+
+				if ( elem.nodeType === 1 && !dataPriv.get( elem, "hasDataAttrs" ) ) {
+					i = attrs.length;
+					while ( i-- ) {
+
+						// Support: IE11+
+						// The attrs elements can be null (#14894)
+						if ( attrs[ i ] ) {
+							name = attrs[ i ].name;
+							if ( name.indexOf( "data-" ) === 0 ) {
+								name = jQuery.camelCase( name.slice( 5 ) );
+								dataAttr( elem, name, data[ name ] );
+							}
+						}
+					}
+					dataPriv.set( elem, "hasDataAttrs", true );
+				}
+			}
+
+			return data;
+		}
+
+		// Sets multiple values
+		if ( typeof key === "object" ) {
+			return this.each( function() {
+				dataUser.set( this, key );
+			} );
+		}
+
+		return access( this, function( value ) {
+			var data, camelKey;
+
+			// The calling jQuery object (element matches) is not empty
+			// (and therefore has an element appears at this[ 0 ]) and the
+			// `value` parameter was not undefined. An empty jQuery object
+			// will result in `undefined` for elem = this[ 0 ] which will
+			// throw an exception if an attempt to read a data cache is made.
+			if ( elem && value === undefined ) {
+
+				// Attempt to get data from the cache
+				// with the key as-is
+				data = dataUser.get( elem, key ) ||
+
+					// Try to find dashed key if it exists (gh-2779)
+					// This is for 2.2.x only
+					dataUser.get( elem, key.replace( rmultiDash, "-$&" ).toLowerCase() );
+
+				if ( data !== undefined ) {
+					return data;
+				}
+
+				camelKey = jQuery.camelCase( key );
+
+				// Attempt to get data from the cache
+				// with the key camelized
+				data = dataUser.get( elem, camelKey );
+				if ( data !== undefined ) {
+					return data;
+				}
+
+				// Attempt to "discover" the data in
+				// HTML5 custom data-* attrs
+				data = dataAttr( elem, camelKey, undefined );
+				if ( data !== undefined ) {
+					return data;
+				}
+
+				// We tried really hard, but the data doesn't exist.
+				return;
+			}
+
+			// Set the data...
+			camelKey = jQuery.camelCase( key );
+			this.each( function() {
+
+				// First, attempt to store a copy or reference of any
+				// data that might've been store with a camelCased key.
+				var data = dataUser.get( this, camelKey );
+
+				// For HTML5 data-* attribute interop, we have to
+				// store property names with dashes in a camelCase form.
+				// This might not apply to all properties...*
+				dataUser.set( this, camelKey, value );
+
+				// *... In the case of properties that might _actually_
+				// have dashes, we need to also store a copy of that
+				// unchanged property.
+				if ( key.indexOf( "-" ) > -1 && data !== undefined ) {
+					dataUser.set( this, key, value );
+				}
+			} );
+		}, null, value, arguments.length > 1, null, true );
+	},
+
+	removeData: function( key ) {
+		return this.each( function() {
+			dataUser.remove( this, key );
+		} );
+	}
+} );
+
+
+jQuery.extend( {
+	queue: function( elem, type, data ) {
+		var queue;
+
+		if ( elem ) {
+			type = ( type || "fx" ) + "queue";
+			queue = dataPriv.get( elem, type );
+
+			// Speed up dequeue by getting out quickly if this is just a lookup
+			if ( data ) {
+				if ( !queue || jQuery.isArray( data ) ) {
+					queue = dataPriv.access( elem, type, jQuery.makeArray( data ) );
+				} else {
+					queue.push( data );
+				}
+			}
+			return queue || [];
+		}
+	},
+
+	dequeue: function( elem, type ) {
+		type = type || "fx";
+
+		var queue = jQuery.queue( elem, type ),
+			startLength = queue.length,
+			fn = queue.shift(),
+			hooks = jQuery._queueHooks( elem, type ),
+			next = function() {
+				jQuery.dequeue( elem, type );
+			};
+
+		// If the fx queue is dequeued, always remove the progress sentinel
+		if ( fn === "inprogress" ) {
+			fn = queue.shift();
+			startLength--;
+		}
+
+		if ( fn ) {
+
+			// Add a progress sentinel to prevent the fx queue from being
+			// automatically dequeued
+			if ( type === "fx" ) {
+				queue.unshift( "inprogress" );
+			}
+
+			// Clear up the last queue stop function
+			delete hooks.stop;
+			fn.call( elem, next, hooks );
+		}
+
+		if ( !startLength && hooks ) {
+			hooks.empty.fire();
+		}
+	},
+
+	// Not public - generate a queueHooks object, or return the current one
+	_queueHooks: function( elem, type ) {
+		var key = type + "queueHooks";
+		return dataPriv.get( elem, key ) || dataPriv.access( elem, key, {
+			empty: jQuery.Callbacks( "once memory" ).add( function() {
+				dataPriv.remove( elem, [ type + "queue", key ] );
+			} )
+		} );
+	}
+} );
+
+jQuery.fn.extend( {
+	queue: function( type, data ) {
+		var setter = 2;
+
+		if ( typeof type !== "string" ) {
+			data = type;
+			type = "fx";
+			setter--;
+		}
+
+		if ( arguments.length < setter ) {
+			return jQuery.queue( this[ 0 ], type );
+		}
+
+		return data === undefined ?
+			this :
+			this.each( function() {
+				var queue = jQuery.queue( this, type, data );
+
+				// Ensure a hooks for this queue
+				jQuery._queueHooks( this, type );
+
+				if ( type === "fx" && queue[ 0 ] !== "inprogress" ) {
+					jQuery.dequeue( this, type );
+				}
+			} );
+	},
+	dequeue: function( type ) {
+		return this.each( function() {
+			jQuery.dequeue( this, type );
+		} );
+	},
+	clearQueue: function( type ) {
+		return this.queue( type || "fx", [] );
+	},
+
+	// Get a promise resolved when queues of a certain type
+	// are emptied (fx is the type by default)
+	promise: function( type, obj ) {
+		var tmp,
+			count = 1,
+			defer = jQuery.Deferred(),
+			elements = this,
+			i = this.length,
+			resolve = function() {
+				if ( !( --count ) ) {
+					defer.resolveWith( elements, [ elements ] );
+				}
+			};
+
+		if ( typeof type !== "string" ) {
+			obj = type;
+			type = undefined;
+		}
+		type = type || "fx";
+
+		while ( i-- ) {
+			tmp = dataPriv.get( elements[ i ], type + "queueHooks" );
+			if ( tmp && tmp.empty ) {
+				count++;
+				tmp.empty.add( resolve );
+			}
+		}
+		resolve();
+		return defer.promise( obj );
+	}
+} );
+var pnum = ( /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/ ).source;
+
+var rcssNum = new RegExp( "^(?:([+-])=|)(" + pnum + ")([a-z%]*)$", "i" );
+
+
+var cssExpand = [ "Top", "Right", "Bottom", "Left" ];
+
+var isHidden = function( elem, el ) {
+
+		// isHidden might be called from jQuery#filter function;
+		// in that case, element will be second argument
+		elem = el || elem;
+		return jQuery.css( elem, "display" ) === "none" ||
+			!jQuery.contains( elem.ownerDocument, elem );
+	};
+
+
+
+function adjustCSS( elem, prop, valueParts, tween ) {
+	var adjusted,
+		scale = 1,
+		maxIterations = 20,
+		currentValue = tween ?
+			function() { return tween.cur(); } :
+			function() { return jQuery.css( elem, prop, "" ); },
+		initial = currentValue(),
+		unit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? "" : "px" ),
+
+		// Starting value computation is required for potential unit mismatches
+		initialInUnit = ( jQuery.cssNumber[ prop ] || unit !== "px" && +initial ) &&
+			rcssNum.exec( jQuery.css( elem, prop ) );
+
+	if ( initialInUnit && initialInUnit[ 3 ] !== unit ) {
+
+		// Trust units reported by jQuery.css
+		unit = unit || initialInUnit[ 3 ];
+
+		// Make sure we update the tween properties later on
+		valueParts = valueParts || [];
+
+		// Iteratively approximate from a nonzero starting point
+		initialInUnit = +initial || 1;
+
+		do {
+
+			// If previous iteration zeroed out, double until we get *something*.
+			// Use string for doubling so we don't accidentally see scale as unchanged below
+			scale = scale || ".5";
+
+			// Adjust and apply
+			initialInUnit = initialInUnit / scale;
+			jQuery.style( elem, prop, initialInUnit + unit );
+
+		// Update scale, tolerating zero or NaN from tween.cur()
+		// Break the loop if scale is unchanged or perfect, or if we've just had enough.
+		} while (
+			scale !== ( scale = currentValue() / initial ) && scale !== 1 && --maxIterations
+		);
+	}
+
+	if ( valueParts ) {
+		initialInUnit = +initialInUnit || +initial || 0;
+
+		// Apply relative offset (+=/-=) if specified
+		adjusted = valueParts[ 1 ] ?
+			initialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] :
+			+valueParts[ 2 ];
+		if ( tween ) {
+			tween.unit = unit;
+			tween.start = initialInUnit;
+			tween.end = adjusted;
+		}
+	}
+	return adjusted;
+}
+var rcheckableType = ( /^(?:checkbox|radio)$/i );
+
+var rtagName = ( /<([\w:-]+)/ );
+
+var rscriptType = ( /^$|\/(?:java|ecma)script/i );
+
+
+
+// We have to close these tags to support XHTML (#13200)
+var wrapMap = {
+
+	// Support: IE9
+	option: [ 1, "<select multiple='multiple'>", "</select>" ],
+
+	// XHTML parsers do not magically insert elements in the
+	// same way that tag soup parsers do. So we cannot shorten
+	// this by omitting <tbody> or other required elements.
+	thead: [ 1, "<table>", "</table>" ],
+	col: [ 2, "<table><colgroup>", "</colgroup></table>" ],
+	tr: [ 2, "<table><tbody>", "</tbody></table>" ],
+	td: [ 3, "<table><tbody><tr>", "</tr></tbody></table>" ],
+
+	_default: [ 0, "", "" ]
+};
+
+// Support: IE9
+wrapMap.optgroup = wrapMap.option;
+
+wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;
+wrapMap.th = wrapMap.td;
+
+
+function getAll( context, tag ) {
+
+	// Support: IE9-11+
+	// Use typeof to avoid zero-argument method invocation on host objects (#15151)
+	var ret = typeof context.getElementsByTagName !== "undefined" ?
+			context.getElementsByTagName( tag || "*" ) :
+			typeof context.querySelectorAll !== "undefined" ?
+				context.querySelectorAll( tag || "*" ) :
+			[];
+
+	return tag === undefined || tag && jQuery.nodeName( context, tag ) ?
+		jQuery.merge( [ context ], ret ) :
+		ret;
+}
+
+
+// Mark scripts as having already been evaluated
+function setGlobalEval( elems, refElements ) {
+	var i = 0,
+		l = elems.length;
+
+	for ( ; i < l; i++ ) {
+		dataPriv.set(
+			elems[ i ],
+			"globalEval",
+			!refElements || dataPriv.get( refElements[ i ], "globalEval" )
+		);
+	}
+}
+
+
+var rhtml = /<|&#?\w+;/;
+
+function buildFragment( elems, context, scripts, selection, ignored ) {
+	var elem, tmp, tag, wrap, contains, j,
+		fragment = context.createDocumentFragment(),
+		nodes = [],
+		i = 0,
+		l = elems.length;
+
+	for ( ; i < l; i++ ) {
+		elem = elems[ i ];
+
+		if ( elem || elem === 0 ) {
+
+			// Add nodes directly
+			if ( jQuery.type( elem ) === "object" ) {
+
+				// Support: Android<4.1, PhantomJS<2
+				// push.apply(_, arraylike) throws on ancient WebKit
+				jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem );
+
+			// Convert non-html into a text node
+			} else if ( !rhtml.test( elem ) ) {
+				nodes.push( context.createTextNode( elem ) );
+
+			// Convert html into DOM nodes
+			} else {
+				tmp = tmp || fragment.appendChild( context.createElement( "div" ) );
+
+				// Deserialize a standard representation
+				tag = ( rtagName.exec( elem ) || [ "", "" ] )[ 1 ].toLowerCase();
+				wrap = wrapMap[ tag ] || wrapMap._default;
+				tmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ];
+
+				// Descend through wrappers to the right content
+				j = wrap[ 0 ];
+				while ( j-- ) {
+					tmp = tmp.lastChild;
+				}
+
+				// Support: Android<4.1, PhantomJS<2
+				// push.apply(_, arraylike) throws on ancient WebKit
+				jQuery.merge( nodes, tmp.childNodes );
+
+				// Remember the top-level container
+				tmp = fragment.firstChild;
+
+				// Ensure the created nodes are orphaned (#12392)
+				tmp.textContent = "";
+			}
+		}
+	}
+
+	// Remove wrapper from fragment
+	fragment.textContent = "";
+
+	i = 0;
+	while ( ( elem = nodes[ i++ ] ) ) {
+
+		// Skip elements already in the context collection (trac-4087)
+		if ( selection && jQuery.inArray( elem, selection ) > -1 ) {
+			if ( ignored ) {
+				ignored.push( elem );
+			}
+			continue;
+		}
+
+		contains = jQuery.contains( elem.ownerDocument, elem );
+
+		// Append to fragment
+		tmp = getAll( fragment.appendChild( elem ), "script" );
+
+		// Preserve script evaluation history
+		if ( contains ) {
+			setGlobalEval( tmp );
+		}
+
+		// Capture executables
+		if ( scripts ) {
+			j = 0;
+			while ( ( elem = tmp[ j++ ] ) ) {
+				if ( rscriptType.test( elem.type || "" ) ) {
+					scripts.push( elem );
+				}
+			}
+		}
+	}
+
+	return fragment;
+}
+
+
+( function() {
+	var fragment = document.createDocumentFragment(),
+		div = fragment.appendChild( document.createElement( "div" ) ),
+		input = document.createElement( "input" );
+
+	// Support: Android 4.0-4.3, Safari<=5.1
+	// Check state lost if the name is set (#11217)
+	// Support: Windows Web Apps (WWA)
+	// `name` and `type` must use .setAttribute for WWA (#14901)
+	input.setAttribute( "type", "radio" );
+	input.setAttribute( "checked", "checked" );
+	input.setAttribute( "name", "t" );
+
+	div.appendChild( input );
+
+	// Support: Safari<=5.1, Android<4.2
+	// Older WebKit doesn't clone checked state correctly in fragments
+	support.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked;
+
+	// Support: IE<=11+
+	// Make sure textarea (and checkbox) defaultValue is properly cloned
+	div.innerHTML = "<textarea>x</textarea>";
+	support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue;
+} )();
+
+
+var
+	rkeyEvent = /^key/,
+	rmouseEvent = /^(?:mouse|pointer|contextmenu|drag|drop)|click/,
+	rtypenamespace = /^([^.]*)(?:\.(.+)|)/;
+
+function returnTrue() {
+	return true;
+}
+
+function returnFalse() {
+	return false;
+}
+
+// Support: IE9
+// See #13393 for more info
+function safeActiveElement() {
+	try {
+		return document.activeElement;
+	} catch ( err ) { }
+}
+
+function on( elem, types, selector, data, fn, one ) {
+	var origFn, type;
+
+	// Types can be a map of types/handlers
+	if ( typeof types === "object" ) {
+
+		// ( types-Object, selector, data )
+		if ( typeof selector !== "string" ) {
+
+			// ( types-Object, data )
+			data = data || selector;
+			selector = undefined;
+		}
+		for ( type in types ) {
+			on( elem, type, selector, data, types[ type ], one );
+		}
+		return elem;
+	}
+
+	if ( data == null && fn == null ) {
+
+		// ( types, fn )
+		fn = selector;
+		data = selector = undefined;
+	} else if ( fn == null ) {
+		if ( typeof selector === "string" ) {
+
+			// ( types, selector, fn )
+			fn = data;
+			data = undefined;
+		} else {
+
+			// ( types, data, fn )
+			fn = data;
+			data = selector;
+			selector = undefined;
+		}
+	}
+	if ( fn === false ) {
+		fn = returnFalse;
+	} else if ( !fn ) {
+		return elem;
+	}
+
+	if ( one === 1 ) {
+		origFn = fn;
+		fn = function( event ) {
+
+			// Can use an empty set, since event contains the info
+			jQuery().off( event );
+			return origFn.apply( this, arguments );
+		};
+
+		// Use same guid so caller can remove using origFn
+		fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );
+	}
+	return elem.each( function() {
+		jQuery.event.add( this, types, fn, data, selector );
+	} );
+}
+
+/*
+ * Helper functions for managing events -- not part of the public interface.
+ * Props to Dean Edwards' addEvent library for many of the ideas.
+ */
+jQuery.event = {
+
+	global: {},
+
+	add: function( elem, types, handler, data, selector ) {
+
+		var handleObjIn, eventHandle, tmp,
+			events, t, handleObj,
+			special, handlers, type, namespaces, origType,
+			elemData = dataPriv.get( elem );
+
+		// Don't attach events to noData or text/comment nodes (but allow plain objects)
+		if ( !elemData ) {
+			return;
+		}
+
+		// Caller can pass in an object of custom data in lieu of the handler
+		if ( handler.handler ) {
+			handleObjIn = handler;
+			handler = handleObjIn.handler;
+			selector = handleObjIn.selector;
+		}
+
+		// Make sure that the handler has a unique ID, used to find/remove it later
+		if ( !handler.guid ) {
+			handler.guid = jQuery.guid++;
+		}
+
+		// Init the element's event structure and main handler, if this is the first
+		if ( !( events = elemData.events ) ) {
+			events = elemData.events = {};
+		}
+		if ( !( eventHandle = elemData.handle ) ) {
+			eventHandle = elemData.handle = function( e ) {
+
+				// Discard the second event of a jQuery.event.trigger() and
+				// when an event is called after a page has unloaded
+				return typeof jQuery !== "undefined" && jQuery.event.triggered !== e.type ?
+					jQuery.event.dispatch.apply( elem, arguments ) : undefined;
+			};
+		}
+
+		// Handle multiple events separated by a space
+		types = ( types || "" ).match( rnotwhite ) || [ "" ];
+		t = types.length;
+		while ( t-- ) {
+			tmp = rtypenamespace.exec( types[ t ] ) || [];
+			type = origType = tmp[ 1 ];
+			namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort();
+
+			// There *must* be a type, no attaching namespace-only handlers
+			if ( !type ) {
+				continue;
+			}
+
+			// If event changes its type, use the special event handlers for the changed type
+			special = jQuery.event.special[ type ] || {};
+
+			// If selector defined, determine special event api type, otherwise given type
+			type = ( selector ? special.delegateType : special.bindType ) || type;
+
+			// Update special based on newly reset type
+			special = jQuery.event.special[ type ] || {};
+
+			// handleObj is passed to all event handlers
+			handleObj = jQuery.extend( {
+				type: type,
+				origType: origType,
+				data: data,
+				handler: handler,
+				guid: handler.guid,
+				selector: selector,
+				needsContext: selector && jQuery.expr.match.needsContext.test( selector ),
+				namespace: namespaces.join( "." )
+			}, handleObjIn );
+
+			// Init the event handler queue if we're the first
+			if ( !( handlers = events[ type ] ) ) {
+				handlers = events[ type ] = [];
+				handlers.delegateCount = 0;
+
+				// Only use addEventListener if the special events handler returns false
+				if ( !special.setup ||
+					special.setup.call( elem, data, namespaces, eventHandle ) === false ) {
+
+					if ( elem.addEventListener ) {
+						elem.addEventListener( type, eventHandle );
+					}
+				}
+			}
+
+			if ( special.add ) {
+				special.add.call( elem, handleObj );
+
+				if ( !handleObj.handler.guid ) {
+					handleObj.handler.guid = handler.guid;
+				}
+			}
+
+			// Add to the element's handler list, delegates in front
+			if ( selector ) {
+				handlers.splice( handlers.delegateCount++, 0, handleObj );
+			} else {
+				handlers.push( handleObj );
+			}
+
+			// Keep track of which events have ever been used, for event optimization
+			jQuery.event.global[ type ] = true;
+		}
+
+	},
+
+	// Detach an event or set of events from an element
+	remove: function( elem, types, handler, selector, mappedTypes ) {
+
+		var j, origCount, tmp,
+			events, t, handleObj,
+			special, handlers, type, namespaces, origType,
+			elemData = dataPriv.hasData( elem ) && dataPriv.get( elem );
+
+		if ( !elemData || !( events = elemData.events ) ) {
+			return;
+		}
+
+		// Once for each type.namespace in types; type may be omitted
+		types = ( types || "" ).match( rnotwhite ) || [ "" ];
+		t = types.length;
+		while ( t-- ) {
+			tmp = rtypenamespace.exec( types[ t ] ) || [];
+			type = origType = tmp[ 1 ];
+			namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort();
+
+			// Unbind all events (on this namespace, if provided) for the element
+			if ( !type ) {
+				for ( type in events ) {
+					jQuery.event.remove( elem, type + types[ t ], handler, selector, true );
+				}
+				continue;
+			}
+
+			special = jQuery.event.special[ type ] || {};
+			type = ( selector ? special.delegateType : special.bindType ) || type;
+			handlers = events[ type ] || [];
+			tmp = tmp[ 2 ] &&
+				new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" );
+
+			// Remove matching events
+			origCount = j = handlers.length;
+			while ( j-- ) {
+				handleObj = handlers[ j ];
+
+				if ( ( mappedTypes || origType === handleObj.origType ) &&
+					( !handler || handler.guid === handleObj.guid ) &&
+					( !tmp || tmp.test( handleObj.namespace ) ) &&
+					( !selector || selector === handleObj.selector ||
+						selector === "**" && handleObj.selector ) ) {
+					handlers.splice( j, 1 );
+
+					if ( handleObj.selector ) {
+						handlers.delegateCount--;
+					}
+					if ( special.remove ) {
+						special.remove.call( elem, handleObj );
+					}
+				}
+			}
+
+			// Remove generic event handler if we removed something and no more handlers exist
+			// (avoids potential for endless recursion during removal of special event handlers)
+			if ( origCount && !handlers.length ) {
+				if ( !special.teardown ||
+					special.teardown.call( elem, namespaces, elemData.handle ) === false ) {
+
+					jQuery.removeEvent( elem, type, elemData.handle );
+				}
+
+				delete events[ type ];
+			}
+		}
+
+		// Remove data and the expando if it's no longer used
+		if ( jQuery.isEmptyObject( events ) ) {
+			dataPriv.remove( elem, "handle events" );
+		}
+	},
+
+	dispatch: function( event ) {
+
+		// Make a writable jQuery.Event from the native event object
+		event = jQuery.event.fix( event );
+
+		var i, j, ret, matched, handleObj,
+			handlerQueue = [],
+			args = slice.call( arguments ),
+			handlers = ( dataPriv.get( this, "events" ) || {} )[ event.type ] || [],
+			special = jQuery.event.special[ event.type ] || {};
+
+		// Use the fix-ed jQuery.Event rather than the (read-only) native event
+		args[ 0 ] = event;
+		event.delegateTarget = this;
+
+		// Call the preDispatch hook for the mapped type, and let it bail if desired
+		if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) {
+			return;
+		}
+
+		// Determine handlers
+		handlerQueue = jQuery.event.handlers.call( this, event, handlers );
+
+		// Run delegates first; they may want to stop propagation beneath us
+		i = 0;
+		while ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) {
+			event.currentTarget = matched.elem;
+
+			j = 0;
+			while ( ( handleObj = matched.handlers[ j++ ] ) &&
+				!event.isImmediatePropagationStopped() ) {
+
+				// Triggered event must either 1) have no namespace, or 2) have namespace(s)
+				// a subset or equal to those in the bound event (both can have no namespace).
+				if ( !event.rnamespace || event.rnamespace.test( handleObj.namespace ) ) {
+
+					event.handleObj = handleObj;
+					event.data = handleObj.data;
+
+					ret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle ||
+						handleObj.handler ).apply( matched.elem, args );
+
+					if ( ret !== undefined ) {
+						if ( ( event.result = ret ) === false ) {
+							event.preventDefault();
+							event.stopPropagation();
+						}
+					}
+				}
+			}
+		}
+
+		// Call the postDispatch hook for the mapped type
+		if ( special.postDispatch ) {
+			special.postDispatch.call( this, event );
+		}
+
+		return event.result;
+	},
+
+	handlers: function( event, handlers ) {
+		var i, matches, sel, handleObj,
+			handlerQueue = [],
+			delegateCount = handlers.delegateCount,
+			cur = event.target;
+
+		// Support (at least): Chrome, IE9
+		// Find delegate handlers
+		// Black-hole SVG <use> instance trees (#13180)
+		//
+		// Support: Firefox<=42+
+		// Avoid non-left-click in FF but don't block IE radio events (#3861, gh-2343)
+		if ( delegateCount && cur.nodeType &&
+			( event.type !== "click" || isNaN( event.button ) || event.button < 1 ) ) {
+
+			for ( ; cur !== this; cur = cur.parentNode || this ) {
+
+				// Don't check non-elements (#13208)
+				// Don't process clicks on disabled elements (#6911, #8165, #11382, #11764)
+				if ( cur.nodeType === 1 && ( cur.disabled !== true || event.type !== "click" ) ) {
+					matches = [];
+					for ( i = 0; i < delegateCount; i++ ) {
+						handleObj = handlers[ i ];
+
+						// Don't conflict with Object.prototype properties (#13203)
+						sel = handleObj.selector + " ";
+
+						if ( matches[ sel ] === undefined ) {
+							matches[ sel ] = handleObj.needsContext ?
+								jQuery( sel, this ).index( cur ) > -1 :
+								jQuery.find( sel, this, null, [ cur ] ).length;
+						}
+						if ( matches[ sel ] ) {
+							matches.push( handleObj );
+						}
+					}
+					if ( matches.length ) {
+						handlerQueue.push( { elem: cur, handlers: matches } );
+					}
+				}
+			}
+		}
+
+		// Add the remaining (directly-bound) handlers
+		if ( delegateCount < handlers.length ) {
+			handlerQueue.push( { elem: this, handlers: handlers.slice( delegateCount ) } );
+		}
+
+		return handlerQueue;
+	},
+
+	// Includes some event props shared by KeyEvent and MouseEvent
+	props: ( "altKey bubbles cancelable ctrlKey currentTarget detail eventPhase " +
+		"metaKey relatedTarget shiftKey target timeStamp view which" ).split( " " ),
+
+	fixHooks: {},
+
+	keyHooks: {
+		props: "char charCode key keyCode".split( " " ),
+		filter: function( event, original ) {
+
+			// Add which for key events
+			if ( event.which == null ) {
+				event.which = original.charCode != null ? original.charCode : original.keyCode;
+			}
+
+			return event;
+		}
+	},
+
+	mouseHooks: {
+		props: ( "button buttons clientX clientY offsetX offsetY pageX pageY " +
+			"screenX screenY toElement" ).split( " " ),
+		filter: function( event, original ) {
+			var eventDoc, doc, body,
+				button = original.button;
+
+			// Calculate pageX/Y if missing and clientX/Y available
+			if ( event.pageX == null && original.clientX != null ) {
+				eventDoc = event.target.ownerDocument || document;
+				doc = eventDoc.documentElement;
+				body = eventDoc.body;
+
+				event.pageX = original.clientX +
+					( doc && doc.scrollLeft || body && body.scrollLeft || 0 ) -
+					( doc && doc.clientLeft || body && body.clientLeft || 0 );
+				event.pageY = original.clientY +
+					( doc && doc.scrollTop  || body && body.scrollTop  || 0 ) -
+					( doc && doc.clientTop  || body && body.clientTop  || 0 );
+			}
+
+			// Add which for click: 1 === left; 2 === middle; 3 === right
+			// Note: button is not normalized, so don't use it
+			if ( !event.which && button !== undefined ) {
+				event.which = ( button & 1 ? 1 : ( button & 2 ? 3 : ( button & 4 ? 2 : 0 ) ) );
+			}
+
+			return event;
+		}
+	},
+
+	fix: function( event ) {
+		if ( event[ jQuery.expando ] ) {
+			return event;
+		}
+
+		// Create a writable copy of the event object and normalize some properties
+		var i, prop, copy,
+			type = event.type,
+			originalEvent = event,
+			fixHook = this.fixHooks[ type ];
+
+		if ( !fixHook ) {
+			this.fixHooks[ type ] = fixHook =
+				rmouseEvent.test( type ) ? this.mouseHooks :
+				rkeyEvent.test( type ) ? this.keyHooks :
+				{};
+		}
+		copy = fixHook.props ? this.props.concat( fixHook.props ) : this.props;
+
+		event = new jQuery.Event( originalEvent );
+
+		i = copy.length;
+		while ( i-- ) {
+			prop = copy[ i ];
+			event[ prop ] = originalEvent[ prop ];
+		}
+
+		// Support: Cordova 2.5 (WebKit) (#13255)
+		// All events should have a target; Cordova deviceready doesn't
+		if ( !event.target ) {
+			event.target = document;
+		}
+
+		// Support: Safari 6.0+, Chrome<28
+		// Target should not be a text node (#504, #13143)
+		if ( event.target.nodeType === 3 ) {
+			event.target = event.target.parentNode;
+		}
+
+		return fixHook.filter ? fixHook.filter( event, originalEvent ) : event;
+	},
+
+	special: {
+		load: {
+
+			// Prevent triggered image.load events from bubbling to window.load
+			noBubble: true
+		},
+		focus: {
+
+			// Fire native event if possible so blur/focus sequence is correct
+			trigger: function() {
+				if ( this !== safeActiveElement() && this.focus ) {
+					this.focus();
+					return false;
+				}
+			},
+			delegateType: "focusin"
+		},
+		blur: {
+			trigger: function() {
+				if ( this === safeActiveElement() && this.blur ) {
+					this.blur();
+					return false;
+				}
+			},
+			delegateType: "focusout"
+		},
+		click: {
+
+			// For checkbox, fire native event so checked state will be right
+			trigger: function() {
+				if ( this.type === "checkbox" && this.click && jQuery.nodeName( this, "input" ) ) {
+					this.click();
+					return false;
+				}
+			},
+
+			// For cross-browser consistency, don't fire native .click() on links
+			_default: function( event ) {
+				return jQuery.nodeName( event.target, "a" );
+			}
+		},
+
+		beforeunload: {
+			postDispatch: function( event ) {
+
+				// Support: Firefox 20+
+				// Firefox doesn't alert if the returnValue field is not set.
+				if ( event.result !== undefined && event.originalEvent ) {
+					event.originalEvent.returnValue = event.result;
+				}
+			}
+		}
+	}
+};
+
+jQuery.removeEvent = function( elem, type, handle ) {
+
+	// This "if" is needed for plain objects
+	if ( elem.removeEventListener ) {
+		elem.removeEventListener( type, handle );
+	}
+};
+
+jQuery.Event = function( src, props ) {
+
+	// Allow instantiation without the 'new' keyword
+	if ( !( this instanceof jQuery.Event ) ) {
+		return new jQuery.Event( src, props );
+	}
+
+	// Event object
+	if ( src && src.type ) {
+		this.originalEvent = src;
+		this.type = src.type;
+
+		// Events bubbling up the document may have been marked as prevented
+		// by a handler lower down the tree; reflect the correct value.
+		this.isDefaultPrevented = src.defaultPrevented ||
+				src.defaultPrevented === undefined &&
+
+				// Support: Android<4.0
+				src.returnValue === false ?
+			returnTrue :
+			returnFalse;
+
+	// Event type
+	} else {
+		this.type = src;
+	}
+
+	// Put explicitly provided properties onto the event object
+	if ( props ) {
+		jQuery.extend( this, props );
+	}
+
+	// Create a timestamp if incoming event doesn't have one
+	this.timeStamp = src && src.timeStamp || jQuery.now();
+
+	// Mark it as fixed
+	this[ jQuery.expando ] = true;
+};
+
+// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding
+// http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html
+jQuery.Event.prototype = {
+	constructor: jQuery.Event,
+	isDefaultPrevented: returnFalse,
+	isPropagationStopped: returnFalse,
+	isImmediatePropagationStopped: returnFalse,
+
+	preventDefault: function() {
+		var e = this.originalEvent;
+
+		this.isDefaultPrevented = returnTrue;
+
+		if ( e ) {
+			e.preventDefault();
+		}
+	},
+	stopPropagation: function() {
+		var e = this.originalEvent;
+
+		this.isPropagationStopped = returnTrue;
+
+		if ( e ) {
+			e.stopPropagation();
+		}
+	},
+	stopImmediatePropagation: function() {
+		var e = this.originalEvent;
+
+		this.isImmediatePropagationStopped = returnTrue;
+
+		if ( e ) {
+			e.stopImmediatePropagation();
+		}
+
+		this.stopPropagation();
+	}
+};
+
+// Create mouseenter/leave events using mouseover/out and event-time checks
+// so that event delegation works in jQuery.
+// Do the same for pointerenter/pointerleave and pointerover/pointerout
+//
+// Support: Safari 7 only
+// Safari sends mouseenter too often; see:
+// https://code.google.com/p/chromium/issues/detail?id=470258
+// for the description of the bug (it existed in older Chrome versions as well).
+jQuery.each( {
+	mouseenter: "mouseover",
+	mouseleave: "mouseout",
+	pointerenter: "pointerover",
+	pointerleave: "pointerout"
+}, function( orig, fix ) {
+	jQuery.event.special[ orig ] = {
+		delegateType: fix,
+		bindType: fix,
+
+		handle: function( event ) {
+			var ret,
+				target = this,
+				related = event.relatedTarget,
+				handleObj = event.handleObj;
+
+			// For mouseenter/leave call the handler if related is outside the target.
+			// NB: No relatedTarget if the mouse left/entered the browser window
+			if ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) {
+				event.type = handleObj.origType;
+				ret = handleObj.handler.apply( this, arguments );
+				event.type = fix;
+			}
+			return ret;
+		}
+	};
+} );
+
+jQuery.fn.extend( {
+	on: function( types, selector, data, fn ) {
+		return on( this, types, selector, data, fn );
+	},
+	one: function( types, selector, data, fn ) {
+		return on( this, types, selector, data, fn, 1 );
+	},
+	off: function( types, selector, fn ) {
+		var handleObj, type;
+		if ( types && types.preventDefault && types.handleObj ) {
+
+			// ( event )  dispatched jQuery.Event
+			handleObj = types.handleObj;
+			jQuery( types.delegateTarget ).off(
+				handleObj.namespace ?
+					handleObj.origType + "." + handleObj.namespace :
+					handleObj.origType,
+				handleObj.selector,
+				handleObj.handler
+			);
+			return this;
+		}
+		if ( typeof types === "object" ) {
+
+			// ( types-object [, selector] )
+			for ( type in types ) {
+				this.off( type, selector, types[ type ] );
+			}
+			return this;
+		}
+		if ( selector === false || typeof selector === "function" ) {
+
+			// ( types [, fn] )
+			fn = selector;
+			selector = undefined;
+		}
+		if ( fn === false ) {
+			fn = returnFalse;
+		}
+		return this.each( function() {
+			jQuery.event.remove( this, types, fn, selector );
+		} );
+	}
+} );
+
+
+var
+	rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:-]+)[^>]*)\/>/gi,
+
+	// Support: IE 10-11, Edge 10240+
+	// In IE/Edge using regex groups here causes severe slowdowns.
+	// See https://connect.microsoft.com/IE/feedback/details/1736512/
+	rnoInnerhtml = /<script|<style|<link/i,
+
+	// checked="checked" or checked
+	rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i,
+	rscriptTypeMasked = /^true\/(.*)/,
+	rcleanScript = /^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g;
+
+// Manipulating tables requires a tbody
+function manipulationTarget( elem, content ) {
+	return jQuery.nodeName( elem, "table" ) &&
+		jQuery.nodeName( content.nodeType !== 11 ? content : content.firstChild, "tr" ) ?
+
+		elem.getElementsByTagName( "tbody" )[ 0 ] ||
+			elem.appendChild( elem.ownerDocument.createElement( "tbody" ) ) :
+		elem;
+}
+
+// Replace/restore the type attribute of script elements for safe DOM manipulation
+function disableScript( elem ) {
+	elem.type = ( elem.getAttribute( "type" ) !== null ) + "/" + elem.type;
+	return elem;
+}
+function restoreScript( elem ) {
+	var match = rscriptTypeMasked.exec( elem.type );
+
+	if ( match ) {
+		elem.type = match[ 1 ];
+	} else {
+		elem.removeAttribute( "type" );
+	}
+
+	return elem;
+}
+
+function cloneCopyEvent( src, dest ) {
+	var i, l, type, pdataOld, pdataCur, udataOld, udataCur, events;
+
+	if ( dest.nodeType !== 1 ) {
+		return;
+	}
+
+	// 1. Copy private data: events, handlers, etc.
+	if ( dataPriv.hasData( src ) ) {
+		pdataOld = dataPriv.access( src );
+		pdataCur = dataPriv.set( dest, pdataOld );
+		events = pdataOld.events;
+
+		if ( events ) {
+			delete pdataCur.handle;
+			pdataCur.events = {};
+
+			for ( type in events ) {
+				for ( i = 0, l = events[ type ].length; i < l; i++ ) {
+					jQuery.event.add( dest, type, events[ type ][ i ] );
+				}
+			}
+		}
+	}
+
+	// 2. Copy user data
+	if ( dataUser.hasData( src ) ) {
+		udataOld = dataUser.access( src );
+		udataCur = jQuery.extend( {}, udataOld );
+
+		dataUser.set( dest, udataCur );
+	}
+}
+
+// Fix IE bugs, see support tests
+function fixInput( src, dest ) {
+	var nodeName = dest.nodeName.toLowerCase();
+
+	// Fails to persist the checked state of a cloned checkbox or radio button.
+	if ( nodeName === "input" && rcheckableType.test( src.type ) ) {
+		dest.checked = src.checked;
+
+	// Fails to return the selected option to the default selected state when cloning options
+	} else if ( nodeName === "input" || nodeName === "textarea" ) {
+		dest.defaultValue = src.defaultValue;
+	}
+}
+
+function domManip( collection, args, callback, ignored ) {
+
+	// Flatten any nested arrays
+	args = concat.apply( [], args );
+
+	var fragment, first, scripts, hasScripts, node, doc,
+		i = 0,
+		l = collection.length,
+		iNoClone = l - 1,
+		value = args[ 0 ],
+		isFunction = jQuery.isFunction( value );
+
+	// We can't cloneNode fragments that contain checked, in WebKit
+	if ( isFunction ||
+			( l > 1 && typeof value === "string" &&
+				!support.checkClone && rchecked.test( value ) ) ) {
+		return collection.each( function( index ) {
+			var self = collection.eq( index );
+			if ( isFunction ) {
+				args[ 0 ] = value.call( this, index, self.html() );
+			}
+			domManip( self, args, callback, ignored );
+		} );
+	}
+
+	if ( l ) {
+		fragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored );
+		first = fragment.firstChild;
+
+		if ( fragment.childNodes.length === 1 ) {
+			fragment = first;
+		}
+
+		// Require either new content or an interest in ignored elements to invoke the callback
+		if ( first || ignored ) {
+			scripts = jQuery.map( getAll( fragment, "script" ), disableScript );
+			hasScripts = scripts.length;
+
+			// Use the original fragment for the last item
+			// instead of the first because it can end up
+			// being emptied incorrectly in certain situations (#8070).
+			for ( ; i < l; i++ ) {
+				node = fragment;
+
+				if ( i !== iNoClone ) {
+					node = jQuery.clone( node, true, true );
+
+					// Keep references to cloned scripts for later restoration
+					if ( hasScripts ) {
+
+						// Support: Android<4.1, PhantomJS<2
+						// push.apply(_, arraylike) throws on ancient WebKit
+						jQuery.merge( scripts, getAll( node, "script" ) );
+					}
+				}
+
+				callback.call( collection[ i ], node, i );
+			}
+
+			if ( hasScripts ) {
+				doc = scripts[ scripts.length - 1 ].ownerDocument;
+
+				// Reenable scripts
+				jQuery.map( scripts, restoreScript );
+
+				// Evaluate executable scripts on first document insertion
+				for ( i = 0; i < hasScripts; i++ ) {
+					node = scripts[ i ];
+					if ( rscriptType.test( node.type || "" ) &&
+						!dataPriv.access( node, "globalEval" ) &&
+						jQuery.contains( doc, node ) ) {
+
+						if ( node.src ) {
+
+							// Optional AJAX dependency, but won't run scripts if not present
+							if ( jQuery._evalUrl ) {
+								jQuery._evalUrl( node.src );
+							}
+						} else {
+							jQuery.globalEval( node.textContent.replace( rcleanScript, "" ) );
+						}
+					}
+				}
+			}
+		}
+	}
+
+	return collection;
+}
+
+function remove( elem, selector, keepData ) {
+	var node,
+		nodes = selector ? jQuery.filter( selector, elem ) : elem,
+		i = 0;
+
+	for ( ; ( node = nodes[ i ] ) != null; i++ ) {
+		if ( !keepData && node.nodeType === 1 ) {
+			jQuery.cleanData( getAll( node ) );
+		}
+
+		if ( node.parentNode ) {
+			if ( keepData && jQuery.contains( node.ownerDocument, node ) ) {
+				setGlobalEval( getAll( node, "script" ) );
+			}
+			node.parentNode.removeChild( node );
+		}
+	}
+
+	return elem;
+}
+
+jQuery.extend( {
+	htmlPrefilter: function( html ) {
+		return html.replace( rxhtmlTag, "<$1></$2>" );
+	},
+
+	clone: function( elem, dataAndEvents, deepDataAndEvents ) {
+		var i, l, srcElements, destElements,
+			clone = elem.cloneNode( true ),
+			inPage = jQuery.contains( elem.ownerDocument, elem );
+
+		// Fix IE cloning issues
+		if ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) &&
+				!jQuery.isXMLDoc( elem ) ) {
+
+			// We eschew Sizzle here for performance reasons: http://jsperf.com/getall-vs-sizzle/2
+			destElements = getAll( clone );
+			srcElements = getAll( elem );
+
+			for ( i = 0, l = srcElements.length; i < l; i++ ) {
+				fixInput( srcElements[ i ], destElements[ i ] );
+			}
+		}
+
+		// Copy the events from the original to the clone
+		if ( dataAndEvents ) {
+			if ( deepDataAndEvents ) {
+				srcElements = srcElements || getAll( elem );
+				destElements = destElements || getAll( clone );
+
+				for ( i = 0, l = srcElements.length; i < l; i++ ) {
+					cloneCopyEvent( srcElements[ i ], destElements[ i ] );
+				}
+			} else {
+				cloneCopyEvent( elem, clone );
+			}
+		}
+
+		// Preserve script evaluation history
+		destElements = getAll( clone, "script" );
+		if ( destElements.length > 0 ) {
+			setGlobalEval( destElements, !inPage && getAll( elem, "script" ) );
+		}
+
+		// Return the cloned set
+		return clone;
+	},
+
+	cleanData: function( elems ) {
+		var data, elem, type,
+			special = jQuery.event.special,
+			i = 0;
+
+		for ( ; ( elem = elems[ i ] ) !== undefined; i++ ) {
+			if ( acceptData( elem ) ) {
+				if ( ( data = elem[ dataPriv.expando ] ) ) {
+					if ( data.events ) {
+						for ( type in data.events ) {
+							if ( special[ type ] ) {
+								jQuery.event.remove( elem, type );
+
+							// This is a shortcut to avoid jQuery.event.remove's overhead
+							} else {
+								jQuery.removeEvent( elem, type, data.handle );
+							}
+						}
+					}
+
+					// Support: Chrome <= 35-45+
+					// Assign undefined instead of using delete, see Data#remove
+					elem[ dataPriv.expando ] = undefined;
+				}
+				if ( elem[ dataUser.expando ] ) {
+
+					// Support: Chrome <= 35-45+
+					// Assign undefined instead of using delete, see Data#remove
+					elem[ dataUser.expando ] = undefined;
+				}
+			}
+		}
+	}
+} );
+
+jQuery.fn.extend( {
+
+	// Keep domManip exposed until 3.0 (gh-2225)
+	domManip: domManip,
+
+	detach: function( selector ) {
+		return remove( this, selector, true );
+	},
+
+	remove: function( selector ) {
+		return remove( this, selector );
+	},
+
+	text: function( value ) {
+		return access( this, function( value ) {
+			return value === undefined ?
+				jQuery.text( this ) :
+				this.empty().each( function() {
+					if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
+						this.textContent = value;
+					}
+				} );
+		}, null, value, arguments.length );
+	},
+
+	append: function() {
+		return domManip( this, arguments, function( elem ) {
+			if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
+				var target = manipulationTarget( this, elem );
+				target.appendChild( elem );
+			}
+		} );
+	},
+
+	prepend: function() {
+		return domManip( this, arguments, function( elem ) {
+			if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
+				var target = manipulationTarget( this, elem );
+				target.insertBefore( elem, target.firstChild );
+			}
+		} );
+	},
+
+	before: function() {
+		return domManip( this, arguments, function( elem ) {
+			if ( this.parentNode ) {
+				this.parentNode.insertBefore( elem, this );
+			}
+		} );
+	},
+
+	after: function() {
+		return domManip( this, arguments, function( elem ) {
+			if ( this.parentNode ) {
+				this.parentNode.insertBefore( elem, this.nextSibling );
+			}
+		} );
+	},
+
+	empty: function() {
+		var elem,
+			i = 0;
+
+		for ( ; ( elem = this[ i ] ) != null; i++ ) {
+			if ( elem.nodeType === 1 ) {
+
+				// Prevent memory leaks
+				jQuery.cleanData( getAll( elem, false ) );
+
+				// Remove any remaining nodes
+				elem.textContent = "";
+			}
+		}
+
+		return this;
+	},
+
+	clone: function( dataAndEvents, deepDataAndEvents ) {
+		dataAndEvents = dataAndEvents == null ? false : dataAndEvents;
+		deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;
+
+		return this.map( function() {
+			return jQuery.clone( this, dataAndEvents, deepDataAndEvents );
+		} );
+	},
+
+	html: function( value ) {
+		return access( this, function( value ) {
+			var elem = this[ 0 ] || {},
+				i = 0,
+				l = this.length;
+
+			if ( value === undefined && elem.nodeType === 1 ) {
+				return elem.innerHTML;
+			}
+
+			// See if we can take a shortcut and just use innerHTML
+			if ( typeof value === "string" && !rnoInnerhtml.test( value ) &&
+				!wrapMap[ ( rtagName.exec( value ) || [ "", "" ] )[ 1 ].toLowerCase() ] ) {
+
+				value = jQuery.htmlPrefilter( value );
+
+				try {
+					for ( ; i < l; i++ ) {
+						elem = this[ i ] || {};
+
+						// Remove element nodes and prevent memory leaks
+						if ( elem.nodeType === 1 ) {
+							jQuery.cleanData( getAll( elem, false ) );
+							elem.innerHTML = value;
+						}
+					}
+
+					elem = 0;
+
+				// If using innerHTML throws an exception, use the fallback method
+				} catch ( e ) {}
+			}
+
+			if ( elem ) {
+				this.empty().append( value );
+			}
+		}, null, value, arguments.length );
+	},
+
+	replaceWith: function() {
+		var ignored = [];
+
+		// Make the changes, replacing each non-ignored context element with the new content
+		return domManip( this, arguments, function( elem ) {
+			var parent = this.parentNode;
+
+			if ( jQuery.inArray( this, ignored ) < 0 ) {
+				jQuery.cleanData( getAll( this ) );
+				if ( parent ) {
+					parent.replaceChild( elem, this );
+				}
+			}
+
+		// Force callback invocation
+		}, ignored );
+	}
+} );
+
+jQuery.each( {
+	appendTo: "append",
+	prependTo: "prepend",
+	insertBefore: "before",
+	insertAfter: "after",
+	replaceAll: "replaceWith"
+}, function( name, original ) {
+	jQuery.fn[ name ] = function( selector ) {
+		var elems,
+			ret = [],
+			insert = jQuery( selector ),
+			last = insert.length - 1,
+			i = 0;
+
+		for ( ; i <= last; i++ ) {
+			elems = i === last ? this : this.clone( true );
+			jQuery( insert[ i ] )[ original ]( elems );
+
+			// Support: QtWebKit
+			// .get() because push.apply(_, arraylike) throws
+			push.apply( ret, elems.get() );
+		}
+
+		return this.pushStack( ret );
+	};
+} );
+
+
+var iframe,
+	elemdisplay = {
+
+		// Support: Firefox
+		// We have to pre-define these values for FF (#10227)
+		HTML: "block",
+		BODY: "block"
+	};
+
+/**
+ * Retrieve the actual display of a element
+ * @param {String} name nodeName of the element
+ * @param {Object} doc Document object
+ */
+
+// Called only from within defaultDisplay
+function actualDisplay( name, doc ) {
+	var elem = jQuery( doc.createElement( name ) ).appendTo( doc.body ),
+
+		display = jQuery.css( elem[ 0 ], "display" );
+
+	// We don't have any data stored on the element,
+	// so use "detach" method as fast way to get rid of the element
+	elem.detach();
+
+	return display;
+}
+
+/**
+ * Try to determine the default display value of an element
+ * @param {String} nodeName
+ */
+function defaultDisplay( nodeName ) {
+	var doc = document,
+		display = elemdisplay[ nodeName ];
+
+	if ( !display ) {
+		display = actualDisplay( nodeName, doc );
+
+		// If the simple way fails, read from inside an iframe
+		if ( display === "none" || !display ) {
+
+			// Use the already-created iframe if possible
+			iframe = ( iframe || jQuery( "<iframe frameborder='0' width='0' height='0'/>" ) )
+				.appendTo( doc.documentElement );
+
+			// Always write a new HTML skeleton so Webkit and Firefox don't choke on reuse
+			doc = iframe[ 0 ].contentDocument;
+
+			// Support: IE
+			doc.write();
+			doc.close();
+
+			display = actualDisplay( nodeName, doc );
+			iframe.detach();
+		}
+
+		// Store the correct default display
+		elemdisplay[ nodeName ] = display;
+	}
+
+	return display;
+}
+var rmargin = ( /^margin/ );
+
+var rnumnonpx = new RegExp( "^(" + pnum + ")(?!px)[a-z%]+$", "i" );
+
+var getStyles = function( elem ) {
+
+		// Support: IE<=11+, Firefox<=30+ (#15098, #14150)
+		// IE throws on elements created in popups
+		// FF meanwhile throws on frame elements through "defaultView.getComputedStyle"
+		var view = elem.ownerDocument.defaultView;
+
+		if ( !view || !view.opener ) {
+			view = window;
+		}
+
+		return view.getComputedStyle( elem );
+	};
+
+var swap = function( elem, options, callback, args ) {
+	var ret, name,
+		old = {};
+
+	// Remember the old values, and insert the new ones
+	for ( name in options ) {
+		old[ name ] = elem.style[ name ];
+		elem.style[ name ] = options[ name ];
+	}
+
+	ret = callback.apply( elem, args || [] );
+
+	// Revert the old values
+	for ( name in options ) {
+		elem.style[ name ] = old[ name ];
+	}
+
+	return ret;
+};
+
+
+var documentElement = document.documentElement;
+
+
+
+( function() {
+	var pixelPositionVal, boxSizingReliableVal, pixelMarginRightVal, reliableMarginLeftVal,
+		container = document.createElement( "div" ),
+		div = document.createElement( "div" );
+
+	// Finish early in limited (non-browser) environments
+	if ( !div.style ) {
+		return;
+	}
+
+	// Support: IE9-11+
+	// Style of cloned element affects source element cloned (#8908)
+	div.style.backgroundClip = "content-box";
+	div.cloneNode( true ).style.backgroundClip = "";
+	support.clearCloneStyle = div.style.backgroundClip === "content-box";
+
+	container.style.cssText = "border:0;width:8px;height:0;top:0;left:-9999px;" +
+		"padding:0;margin-top:1px;position:absolute";
+	container.appendChild( div );
+
+	// Executing both pixelPosition & boxSizingReliable tests require only one layout
+	// so they're executed at the same time to save the second computation.
+	function computeStyleTests() {
+		div.style.cssText =
+
+			// Support: Firefox<29, Android 2.3
+			// Vendor-prefix box-sizing
+			"-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;" +
+			"position:relative;display:block;" +
+			"margin:auto;border:1px;padding:1px;" +
+			"top:1%;width:50%";
+		div.innerHTML = "";
+		documentElement.appendChild( container );
+
+		var divStyle = window.getComputedStyle( div );
+		pixelPositionVal = divStyle.top !== "1%";
+		reliableMarginLeftVal = divStyle.marginLeft === "2px";
+		boxSizingReliableVal = divStyle.width === "4px";
+
+		// Support: Android 4.0 - 4.3 only
+		// Some styles come back with percentage values, even though they shouldn't
+		div.style.marginRight = "50%";
+		pixelMarginRightVal = divStyle.marginRight === "4px";
+
+		documentElement.removeChild( container );
+	}
+
+	jQuery.extend( support, {
+		pixelPosition: function() {
+
+			// This test is executed only once but we still do memoizing
+			// since we can use the boxSizingReliable pre-computing.
+			// No need to check if the test was already performed, though.
+			computeStyleTests();
+			return pixelPositionVal;
+		},
+		boxSizingReliable: function() {
+			if ( boxSizingReliableVal == null ) {
+				computeStyleTests();
+			}
+			return boxSizingReliableVal;
+		},
+		pixelMarginRight: function() {
+
+			// Support: Android 4.0-4.3
+			// We're checking for boxSizingReliableVal here instead of pixelMarginRightVal
+			// since that compresses better and they're computed together anyway.
+			if ( boxSizingReliableVal == null ) {
+				computeStyleTests();
+			}
+			return pixelMarginRightVal;
+		},
+		reliableMarginLeft: function() {
+
+			// Support: IE <=8 only, Android 4.0 - 4.3 only, Firefox <=3 - 37
+			if ( boxSizingReliableVal == null ) {
+				computeStyleTests();
+			}
+			return reliableMarginLeftVal;
+		},
+		reliableMarginRight: function() {
+
+			// Support: Android 2.3
+			// Check if div with explicit width and no margin-right incorrectly
+			// gets computed margin-right based on width of container. (#3333)
+			// WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right
+			// This support function is only executed once so no memoizing is needed.
+			var ret,
+				marginDiv = div.appendChild( document.createElement( "div" ) );
+
+			// Reset CSS: box-sizing; display; margin; border; padding
+			marginDiv.style.cssText = div.style.cssText =
+
+				// Support: Android 2.3
+				// Vendor-prefix box-sizing
+				"-webkit-box-sizing:content-box;box-sizing:content-box;" +
+				"display:block;margin:0;border:0;padding:0";
+			marginDiv.style.marginRight = marginDiv.style.width = "0";
+			div.style.width = "1px";
+			documentElement.appendChild( container );
+
+			ret = !parseFloat( window.getComputedStyle( marginDiv ).marginRight );
+
+			documentElement.removeChild( container );
+			div.removeChild( marginDiv );
+
+			return ret;
+		}
+	} );
+} )();
+
+
+function curCSS( elem, name, computed ) {
+	var width, minWidth, maxWidth, ret,
+		style = elem.style;
+
+	computed = computed || getStyles( elem );
+	ret = computed ? computed.getPropertyValue( name ) || computed[ name ] : undefined;
+
+	// Support: Opera 12.1x only
+	// Fall back to style even without computed
+	// computed is undefined for elems on document fragments
+	if ( ( ret === "" || ret === undefined ) && !jQuery.contains( elem.ownerDocument, elem ) ) {
+		ret = jQuery.style( elem, name );
+	}
+
+	// Support: IE9
+	// getPropertyValue is only needed for .css('filter') (#12537)
+	if ( computed ) {
+
+		// A tribute to the "awesome hack by Dean Edwards"
+		// Android Browser returns percentage for some values,
+		// but width seems to be reliably pixels.
+		// This is against the CSSOM draft spec:
+		// http://dev.w3.org/csswg/cssom/#resolved-values
+		if ( !support.pixelMarginRight() && rnumnonpx.test( ret ) && rmargin.test( name ) ) {
+
+			// Remember the original values
+			width = style.width;
+			minWidth = style.minWidth;
+			maxWidth = style.maxWidth;
+
+			// Put in the new values to get a computed value out
+			style.minWidth = style.maxWidth = style.width = ret;
+			ret = computed.width;
+
+			// Revert the changed values
+			style.width = width;
+			style.minWidth = minWidth;
+			style.maxWidth = maxWidth;
+		}
+	}
+
+	return ret !== undefined ?
+
+		// Support: IE9-11+
+		// IE returns zIndex value as an integer.
+		ret + "" :
+		ret;
+}
+
+
+function addGetHookIf( conditionFn, hookFn ) {
+
+	// Define the hook, we'll check on the first run if it's really needed.
+	return {
+		get: function() {
+			if ( conditionFn() ) {
+
+				// Hook not needed (or it's not possible to use it due
+				// to missing dependency), remove it.
+				delete this.get;
+				return;
+			}
+
+			// Hook needed; redefine it so that the support test is not executed again.
+			return ( this.get = hookFn ).apply( this, arguments );
+		}
+	};
+}
+
+
+var
+
+	// Swappable if display is none or starts with table
+	// except "table", "table-cell", or "table-caption"
+	// See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display
+	rdisplayswap = /^(none|table(?!-c[ea]).+)/,
+
+	cssShow = { position: "absolute", visibility: "hidden", display: "block" },
+	cssNormalTransform = {
+		letterSpacing: "0",
+		fontWeight: "400"
+	},
+
+	cssPrefixes = [ "Webkit", "O", "Moz", "ms" ],
+	emptyStyle = document.createElement( "div" ).style;
+
+// Return a css property mapped to a potentially vendor prefixed property
+function vendorPropName( name ) {
+
+	// Shortcut for names that are not vendor prefixed
+	if ( name in emptyStyle ) {
+		return name;
+	}
+
+	// Check for vendor prefixed names
+	var capName = name[ 0 ].toUpperCase() + name.slice( 1 ),
+		i = cssPrefixes.length;
+
+	while ( i-- ) {
+		name = cssPrefixes[ i ] + capName;
+		if ( name in emptyStyle ) {
+			return name;
+		}
+	}
+}
+
+function setPositiveNumber( elem, value, subtract ) {
+
+	// Any relative (+/-) values have already been
+	// normalized at this point
+	var matches = rcssNum.exec( value );
+	return matches ?
+
+		// Guard against undefined "subtract", e.g., when used as in cssHooks
+		Math.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || "px" ) :
+		value;
+}
+
+function augmentWidthOrHeight( elem, name, extra, isBorderBox, styles ) {
+	var i = extra === ( isBorderBox ? "border" : "content" ) ?
+
+		// If we already have the right measurement, avoid augmentation
+		4 :
+
+		// Otherwise initialize for horizontal or vertical properties
+		name === "width" ? 1 : 0,
+
+		val = 0;
+
+	for ( ; i < 4; i += 2 ) {
+
+		// Both box models exclude margin, so add it if we want it
+		if ( extra === "margin" ) {
+			val += jQuery.css( elem, extra + cssExpand[ i ], true, styles );
+		}
+
+		if ( isBorderBox ) {
+
+			// border-box includes padding, so remove it if we want content
+			if ( extra === "content" ) {
+				val -= jQuery.css( elem, "padding" + cssExpand[ i ], true, styles );
+			}
+
+			// At this point, extra isn't border nor margin, so remove border
+			if ( extra !== "margin" ) {
+				val -= jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles );
+			}
+		} else {
+
+			// At this point, extra isn't content, so add padding
+			val += jQuery.css( elem, "padding" + cssExpand[ i ], true, styles );
+
+			// At this point, extra isn't content nor padding, so add border
+			if ( extra !== "padding" ) {
+				val += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles );
+			}
+		}
+	}
+
+	return val;
+}
+
+function getWidthOrHeight( elem, name, extra ) {
+
+	// Start with offset property, which is equivalent to the border-box value
+	var valueIsBorderBox = true,
+		val = name === "width" ? elem.offsetWidth : elem.offsetHeight,
+		styles = getStyles( elem ),
+		isBorderBox = jQuery.css( elem, "boxSizing", false, styles ) === "border-box";
+
+	// Support: IE11 only
+	// In IE 11 fullscreen elements inside of an iframe have
+	// 100x too small dimensions (gh-1764).
+	if ( document.msFullscreenElement && window.top !== window ) {
+
+		// Support: IE11 only
+		// Running getBoundingClientRect on a disconnected node
+		// in IE throws an error.
+		if ( elem.getClientRects().length ) {
+			val = Math.round( elem.getBoundingClientRect()[ name ] * 100 );
+		}
+	}
+
+	// Some non-html elements return undefined for offsetWidth, so check for null/undefined
+	// svg - https://bugzilla.mozilla.org/show_bug.cgi?id=649285
+	// MathML - https://bugzilla.mozilla.org/show_bug.cgi?id=491668
+	if ( val <= 0 || val == null ) {
+
+		// Fall back to computed then uncomputed css if necessary
+		val = curCSS( elem, name, styles );
+		if ( val < 0 || val == null ) {
+			val = elem.style[ name ];
+		}
+
+		// Computed unit is not pixels. Stop here and return.
+		if ( rnumnonpx.test( val ) ) {
+			return val;
+		}
+
+		// Check for style in case a browser which returns unreliable values
+		// for getComputedStyle silently falls back to the reliable elem.style
+		valueIsBorderBox = isBorderBox &&
+			( support.boxSizingReliable() || val === elem.style[ name ] );
+
+		// Normalize "", auto, and prepare for extra
+		val = parseFloat( val ) || 0;
+	}
+
+	// Use the active box-sizing model to add/subtract irrelevant styles
+	return ( val +
+		augmentWidthOrHeight(
+			elem,
+			name,
+			extra || ( isBorderBox ? "border" : "content" ),
+			valueIsBorderBox,
+			styles
+		)
+	) + "px";
+}
+
+function showHide( elements, show ) {
+	var display, elem, hidden,
+		values = [],
+		index = 0,
+		length = elements.length;
+
+	for ( ; index < length; index++ ) {
+		elem = elements[ index ];
+		if ( !elem.style ) {
+			continue;
+		}
+
+		values[ index ] = dataPriv.get( elem, "olddisplay" );
+		display = elem.style.display;
+		if ( show ) {
+
+			// Reset the inline display of this element to learn if it is
+			// being hidden by cascaded rules or not
+			if ( !values[ index ] && display === "none" ) {
+				elem.style.display = "";
+			}
+
+			// Set elements which have been overridden with display: none
+			// in a stylesheet to whatever the default browser style is
+			// for such an element
+			if ( elem.style.display === "" && isHidden( elem ) ) {
+				values[ index ] = dataPriv.access(
+					elem,
+					"olddisplay",
+					defaultDisplay( elem.nodeName )
+				);
+			}
+		} else {
+			hidden = isHidden( elem );
+
+			if ( display !== "none" || !hidden ) {
+				dataPriv.set(
+					elem,
+					"olddisplay",
+					hidden ? display : jQuery.css( elem, "display" )
+				);
+			}
+		}
+	}
+
+	// Set the display of most of the elements in a second loop
+	// to avoid the constant reflow
+	for ( index = 0; index < length; index++ ) {
+		elem = elements[ index ];
+		if ( !elem.style ) {
+			continue;
+		}
+		if ( !show || elem.style.display === "none" || elem.style.display === "" ) {
+			elem.style.display = show ? values[ index ] || "" : "none";
+		}
+	}
+
+	return elements;
+}
+
+jQuery.extend( {
+
+	// Add in style property hooks for overriding the default
+	// behavior of getting and setting a style property
+	cssHooks: {
+		opacity: {
+			get: function( elem, computed ) {
+				if ( computed ) {
+
+					// We should always get a number back from opacity
+					var ret = curCSS( elem, "opacity" );
+					return ret === "" ? "1" : ret;
+				}
+			}
+		}
+	},
+
+	// Don't automatically add "px" to these possibly-unitless properties
+	cssNumber: {
+		"animationIterationCount": true,
+		"columnCount": true,
+		"fillOpacity": true,
+		"flexGrow": true,
+		"flexShrink": true,
+		"fontWeight": true,
+		"lineHeight": true,
+		"opacity": true,
+		"order": true,
+		"orphans": true,
+		"widows": true,
+		"zIndex": true,
+		"zoom": true
+	},
+
+	// Add in properties whose names you wish to fix before
+	// setting or getting the value
+	cssProps: {
+		"float": "cssFloat"
+	},
+
+	// Get and set the style property on a DOM Node
+	style: function( elem, name, value, extra ) {
+
+		// Don't set styles on text and comment nodes
+		if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {
+			return;
+		}
+
+		// Make sure that we're working with the right name
+		var ret, type, hooks,
+			origName = jQuery.camelCase( name ),
+			style = elem.style;
+
+		name = jQuery.cssProps[ origName ] ||
+			( jQuery.cssProps[ origName ] = vendorPropName( origName ) || origName );
+
+		// Gets hook for the prefixed version, then unprefixed version
+		hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];
+
+		// Check if we're setting a value
+		if ( value !== undefined ) {
+			type = typeof value;
+
+			// Convert "+=" or "-=" to relative numbers (#7345)
+			if ( type === "string" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) {
+				value = adjustCSS( elem, name, ret );
+
+				// Fixes bug #9237
+				type = "number";
+			}
+
+			// Make sure that null and NaN values aren't set (#7116)
+			if ( value == null || value !== value ) {
+				return;
+			}
+
+			// If a number was passed in, add the unit (except for certain CSS properties)
+			if ( type === "number" ) {
+				value += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? "" : "px" );
+			}
+
+			// Support: IE9-11+
+			// background-* props affect original clone's values
+			if ( !support.clearCloneStyle && value === "" && name.indexOf( "background" ) === 0 ) {
+				style[ name ] = "inherit";
+			}
+
+			// If a hook was provided, use that value, otherwise just set the specified value
+			if ( !hooks || !( "set" in hooks ) ||
+				( value = hooks.set( elem, value, extra ) ) !== undefined ) {
+
+				style[ name ] = value;
+			}
+
+		} else {
+
+			// If a hook was provided get the non-computed value from there
+			if ( hooks && "get" in hooks &&
+				( ret = hooks.get( elem, false, extra ) ) !== undefined ) {
+
+				return ret;
+			}
+
+			// Otherwise just get the value from the style object
+			return style[ name ];
+		}
+	},
+
+	css: function( elem, name, extra, styles ) {
+		var val, num, hooks,
+			origName = jQuery.camelCase( name );
+
+		// Make sure that we're working with the right name
+		name = jQuery.cssProps[ origName ] ||
+			( jQuery.cssProps[ origName ] = vendorPropName( origName ) || origName );
+
+		// Try prefixed name followed by the unprefixed name
+		hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];
+
+		// If a hook was provided get the computed value from there
+		if ( hooks && "get" in hooks ) {
+			val = hooks.get( elem, true, extra );
+		}
+
+		// Otherwise, if a way to get the computed value exists, use that
+		if ( val === undefined ) {
+			val = curCSS( elem, name, styles );
+		}
+
+		// Convert "normal" to computed value
+		if ( val === "normal" && name in cssNormalTransform ) {
+			val = cssNormalTransform[ name ];
+		}
+
+		// Make numeric if forced or a qualifier was provided and val looks numeric
+		if ( extra === "" || extra ) {
+			num = parseFloat( val );
+			return extra === true || isFinite( num ) ? num || 0 : val;
+		}
+		return val;
+	}
+} );
+
+jQuery.each( [ "height", "width" ], function( i, name ) {
+	jQuery.cssHooks[ name ] = {
+		get: function( elem, computed, extra ) {
+			if ( computed ) {
+
+				// Certain elements can have dimension info if we invisibly show them
+				// but it must have a current display style that would benefit
+				return rdisplayswap.test( jQuery.css( elem, "display" ) ) &&
+					elem.offsetWidth === 0 ?
+						swap( elem, cssShow, function() {
+							return getWidthOrHeight( elem, name, extra );
+						} ) :
+						getWidthOrHeight( elem, name, extra );
+			}
+		},
+
+		set: function( elem, value, extra ) {
+			var matches,
+				styles = extra && getStyles( elem ),
+				subtract = extra && augmentWidthOrHeight(
+					elem,
+					name,
+					extra,
+					jQuery.css( elem, "boxSizing", false, styles ) === "border-box",
+					styles
+				);
+
+			// Convert to pixels if value adjustment is needed
+			if ( subtract && ( matches = rcssNum.exec( value ) ) &&
+				( matches[ 3 ] || "px" ) !== "px" ) {
+
+				elem.style[ name ] = value;
+				value = jQuery.css( elem, name );
+			}
+
+			return setPositiveNumber( elem, value, subtract );
+		}
+	};
+} );
+
+jQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft,
+	function( elem, computed ) {
+		if ( computed ) {
+			return ( parseFloat( curCSS( elem, "marginLeft" ) ) ||
+				elem.getBoundingClientRect().left -
+					swap( elem, { marginLeft: 0 }, function() {
+						return elem.getBoundingClientRect().left;
+					} )
+				) + "px";
+		}
+	}
+);
+
+// Support: Android 2.3
+jQuery.cssHooks.marginRight = addGetHookIf( support.reliableMarginRight,
+	function( elem, computed ) {
+		if ( computed ) {
+			return swap( elem, { "display": "inline-block" },
+				curCSS, [ elem, "marginRight" ] );
+		}
+	}
+);
+
+// These hooks are used by animate to expand properties
+jQuery.each( {
+	margin: "",
+	padding: "",
+	border: "Width"
+}, function( prefix, suffix ) {
+	jQuery.cssHooks[ prefix + suffix ] = {
+		expand: function( value ) {
+			var i = 0,
+				expanded = {},
+
+				// Assumes a single number if not a string
+				parts = typeof value === "string" ? value.split( " " ) : [ value ];
+
+			for ( ; i < 4; i++ ) {
+				expanded[ prefix + cssExpand[ i ] + suffix ] =
+					parts[ i ] || parts[ i - 2 ] || parts[ 0 ];
+			}
+
+			return expanded;
+		}
+	};
+
+	if ( !rmargin.test( prefix ) ) {
+		jQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber;
+	}
+} );
+
+jQuery.fn.extend( {
+	css: function( name, value ) {
+		return access( this, function( elem, name, value ) {
+			var styles, len,
+				map = {},
+				i = 0;
+
+			if ( jQuery.isArray( name ) ) {
+				styles = getStyles( elem );
+				len = name.length;
+
+				for ( ; i < len; i++ ) {
+					map[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles );
+				}
+
+				return map;
+			}
+
+			return value !== undefined ?
+				jQuery.style( elem, name, value ) :
+				jQuery.css( elem, name );
+		}, name, value, arguments.length > 1 );
+	},
+	show: function() {
+		return showHide( this, true );
+	},
+	hide: function() {
+		return showHide( this );
+	},
+	toggle: function( state ) {
+		if ( typeof state === "boolean" ) {
+			return state ? this.show() : this.hide();
+		}
+
+		return this.each( function() {
+			if ( isHidden( this ) ) {
+				jQuery( this ).show();
+			} else {
+				jQuery( this ).hide();
+			}
+		} );
+	}
+} );
+
+
+function Tween( elem, options, prop, end, easing ) {
+	return new Tween.prototype.init( elem, options, prop, end, easing );
+}
+jQuery.Tween = Tween;
+
+Tween.prototype = {
+	constructor: Tween,
+	init: function( elem, options, prop, end, easing, unit ) {
+		this.elem = elem;
+		this.prop = prop;
+		this.easing = easing || jQuery.easing._default;
+		this.options = options;
+		this.start = this.now = this.cur();
+		this.end = end;
+		this.unit = unit || ( jQuery.cssNumber[ prop ] ? "" : "px" );
+	},
+	cur: function() {
+		var hooks = Tween.propHooks[ this.prop ];
+
+		return hooks && hooks.get ?
+			hooks.get( this ) :
+			Tween.propHooks._default.get( this );
+	},
+	run: function( percent ) {
+		var eased,
+			hooks = Tween.propHooks[ this.prop ];
+
+		if ( this.options.duration ) {
+			this.pos = eased = jQuery.easing[ this.easing ](
+				percent, this.options.duration * percent, 0, 1, this.options.duration
+			);
+		} else {
+			this.pos = eased = percent;
+		}
+		this.now = ( this.end - this.start ) * eased + this.start;
+
+		if ( this.options.step ) {
+			this.options.step.call( this.elem, this.now, this );
+		}
+
+		if ( hooks && hooks.set ) {
+			hooks.set( this );
+		} else {
+			Tween.propHooks._default.set( this );
+		}
+		return this;
+	}
+};
+
+Tween.prototype.init.prototype = Tween.prototype;
+
+Tween.propHooks = {
+	_default: {
+		get: function( tween ) {
+			var result;
+
+			// Use a property on the element directly when it is not a DOM element,
+			// or when there is no matching style property that exists.
+			if ( tween.elem.nodeType !== 1 ||
+				tween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) {
+				return tween.elem[ tween.prop ];
+			}
+
+			// Passing an empty string as a 3rd parameter to .css will automatically
+			// attempt a parseFloat and fallback to a string if the parse fails.
+			// Simple values such as "10px" are parsed to Float;
+			// complex values such as "rotate(1rad)" are returned as-is.
+			result = jQuery.css( tween.elem, tween.prop, "" );
+
+			// Empty strings, null, undefined and "auto" are converted to 0.
+			return !result || result === "auto" ? 0 : result;
+		},
+		set: function( tween ) {
+
+			// Use step hook for back compat.
+			// Use cssHook if its there.
+			// Use .style if available and use plain properties where available.
+			if ( jQuery.fx.step[ tween.prop ] ) {
+				jQuery.fx.step[ tween.prop ]( tween );
+			} else if ( tween.elem.nodeType === 1 &&
+				( tween.elem.style[ jQuery.cssProps[ tween.prop ] ] != null ||
+					jQuery.cssHooks[ tween.prop ] ) ) {
+				jQuery.style( tween.elem, tween.prop, tween.now + tween.unit );
+			} else {
+				tween.elem[ tween.prop ] = tween.now;
+			}
+		}
+	}
+};
+
+// Support: IE9
+// Panic based approach to setting things on disconnected nodes
+Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = {
+	set: function( tween ) {
+		if ( tween.elem.nodeType && tween.elem.parentNode ) {
+			tween.elem[ tween.prop ] = tween.now;
+		}
+	}
+};
+
+jQuery.easing = {
+	linear: function( p ) {
+		return p;
+	},
+	swing: function( p ) {
+		return 0.5 - Math.cos( p * Math.PI ) / 2;
+	},
+	_default: "swing"
+};
+
+jQuery.fx = Tween.prototype.init;
+
+// Back Compat <1.8 extension point
+jQuery.fx.step = {};
+
+
+
+
+var
+	fxNow, timerId,
+	rfxtypes = /^(?:toggle|show|hide)$/,
+	rrun = /queueHooks$/;
+
+// Animations created synchronously will run synchronously
+function createFxNow() {
+	window.setTimeout( function() {
+		fxNow = undefined;
+	} );
+	return ( fxNow = jQuery.now() );
+}
+
+// Generate parameters to create a standard animation
+function genFx( type, includeWidth ) {
+	var which,
+		i = 0,
+		attrs = { height: type };
+
+	// If we include width, step value is 1 to do all cssExpand values,
+	// otherwise step value is 2 to skip over Left and Right
+	includeWidth = includeWidth ? 1 : 0;
+	for ( ; i < 4 ; i += 2 - includeWidth ) {
+		which = cssExpand[ i ];
+		attrs[ "margin" + which ] = attrs[ "padding" + which ] = type;
+	}
+
+	if ( includeWidth ) {
+		attrs.opacity = attrs.width = type;
+	}
+
+	return attrs;
+}
+
+function createTween( value, prop, animation ) {
+	var tween,
+		collection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ "*" ] ),
+		index = 0,
+		length = collection.length;
+	for ( ; index < length; index++ ) {
+		if ( ( tween = collection[ index ].call( animation, prop, value ) ) ) {
+
+			// We're done with this property
+			return tween;
+		}
+	}
+}
+
+function defaultPrefilter( elem, props, opts ) {
+	/* jshint validthis: true */
+	var prop, value, toggle, tween, hooks, oldfire, display, checkDisplay,
+		anim = this,
+		orig = {},
+		style = elem.style,
+		hidden = elem.nodeType && isHidden( elem ),
+		dataShow = dataPriv.get( elem, "fxshow" );
+
+	// Handle queue: false promises
+	if ( !opts.queue ) {
+		hooks = jQuery._queueHooks( elem, "fx" );
+		if ( hooks.unqueued == null ) {
+			hooks.unqueued = 0;
+			oldfire = hooks.empty.fire;
+			hooks.empty.fire = function() {
+				if ( !hooks.unqueued ) {
+					oldfire();
+				}
+			};
+		}
+		hooks.unqueued++;
+
+		anim.always( function() {
+
+			// Ensure the complete handler is called before this completes
+			anim.always( function() {
+				hooks.unqueued--;
+				if ( !jQuery.queue( elem, "fx" ).length ) {
+					hooks.empty.fire();
+				}
+			} );
+		} );
+	}
+
+	// Height/width overflow pass
+	if ( elem.nodeType === 1 && ( "height" in props || "width" in props ) ) {
+
+		// Make sure that nothing sneaks out
+		// Record all 3 overflow attributes because IE9-10 do not
+		// change the overflow attribute when overflowX and
+		// overflowY are set to the same value
+		opts.overflow = [ style.overflow, style.overflowX, style.overflowY ];
+
+		// Set display property to inline-block for height/width
+		// animations on inline elements that are having width/height animated
+		display = jQuery.css( elem, "display" );
+
+		// Test default display if display is currently "none"
+		checkDisplay = display === "none" ?
+			dataPriv.get( elem, "olddisplay" ) || defaultDisplay( elem.nodeName ) : display;
+
+		if ( checkDisplay === "inline" && jQuery.css( elem, "float" ) === "none" ) {
+			style.display = "inline-block";
+		}
+	}
+
+	if ( opts.overflow ) {
+		style.overflow = "hidden";
+		anim.always( function() {
+			style.overflow = opts.overflow[ 0 ];
+			style.overflowX = opts.overflow[ 1 ];
+			style.overflowY = opts.overflow[ 2 ];
+		} );
+	}
+
+	// show/hide pass
+	for ( prop in props ) {
+		value = props[ prop ];
+		if ( rfxtypes.exec( value ) ) {
+			delete props[ prop ];
+			toggle = toggle || value === "toggle";
+			if ( value === ( hidden ? "hide" : "show" ) ) {
+
+				// If there is dataShow left over from a stopped hide or show
+				// and we are going to proceed with show, we should pretend to be hidden
+				if ( value === "show" && dataShow && dataShow[ prop ] !== undefined ) {
+					hidden = true;
+				} else {
+					continue;
+				}
+			}
+			orig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop );
+
+		// Any non-fx value stops us from restoring the original display value
+		} else {
+			display = undefined;
+		}
+	}
+
+	if ( !jQuery.isEmptyObject( orig ) ) {
+		if ( dataShow ) {
+			if ( "hidden" in dataShow ) {
+				hidden = dataShow.hidden;
+			}
+		} else {
+			dataShow = dataPriv.access( elem, "fxshow", {} );
+		}
+
+		// Store state if its toggle - enables .stop().toggle() to "reverse"
+		if ( toggle ) {
+			dataShow.hidden = !hidden;
+		}
+		if ( hidden ) {
+			jQuery( elem ).show();
+		} else {
+			anim.done( function() {
+				jQuery( elem ).hide();
+			} );
+		}
+		anim.done( function() {
+			var prop;
+
+			dataPriv.remove( elem, "fxshow" );
+			for ( prop in orig ) {
+				jQuery.style( elem, prop, orig[ prop ] );
+			}
+		} );
+		for ( prop in orig ) {
+			tween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim );
+
+			if ( !( prop in dataShow ) ) {
+				dataShow[ prop ] = tween.start;
+				if ( hidden ) {
+					tween.end = tween.start;
+					tween.start = prop === "width" || prop === "height" ? 1 : 0;
+				}
+			}
+		}
+
+	// If this is a noop like .hide().hide(), restore an overwritten display value
+	} else if ( ( display === "none" ? defaultDisplay( elem.nodeName ) : display ) === "inline" ) {
+		style.display = display;
+	}
+}
+
+function propFilter( props, specialEasing ) {
+	var index, name, easing, value, hooks;
+
+	// camelCase, specialEasing and expand cssHook pass
+	for ( index in props ) {
+		name = jQuery.camelCase( index );
+		easing = specialEasing[ name ];
+		value = props[ index ];
+		if ( jQuery.isArray( value ) ) {
+			easing = value[ 1 ];
+			value = props[ index ] = value[ 0 ];
+		}
+
+		if ( index !== name ) {
+			props[ name ] = value;
+			delete props[ index ];
+		}
+
+		hooks = jQuery.cssHooks[ name ];
+		if ( hooks && "expand" in hooks ) {
+			value = hooks.expand( value );
+			delete props[ name ];
+
+			// Not quite $.extend, this won't overwrite existing keys.
+			// Reusing 'index' because we have the correct "name"
+			for ( index in value ) {
+				if ( !( index in props ) ) {
+					props[ index ] = value[ index ];
+					specialEasing[ index ] = easing;
+				}
+			}
+		} else {
+			specialEasing[ name ] = easing;
+		}
+	}
+}
+
+function Animation( elem, properties, options ) {
+	var result,
+		stopped,
+		index = 0,
+		length = Animation.prefilters.length,
+		deferred = jQuery.Deferred().always( function() {
+
+			// Don't match elem in the :animated selector
+			delete tick.elem;
+		} ),
+		tick = function() {
+			if ( stopped ) {
+				return false;
+			}
+			var currentTime = fxNow || createFxNow(),
+				remaining = Math.max( 0, animation.startTime + animation.duration - currentTime ),
+
+				// Support: Android 2.3
+				// Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (#12497)
+				temp = remaining / animation.duration || 0,
+				percent = 1 - temp,
+				index = 0,
+				length = animation.tweens.length;
+
+			for ( ; index < length ; index++ ) {
+				animation.tweens[ index ].run( percent );
+			}
+
+			deferred.notifyWith( elem, [ animation, percent, remaining ] );
+
+			if ( percent < 1 && length ) {
+				return remaining;
+			} else {
+				deferred.resolveWith( elem, [ animation ] );
+				return false;
+			}
+		},
+		animation = deferred.promise( {
+			elem: elem,
+			props: jQuery.extend( {}, properties ),
+			opts: jQuery.extend( true, {
+				specialEasing: {},
+				easing: jQuery.easing._default
+			}, options ),
+			originalProperties: properties,
+			originalOptions: options,
+			startTime: fxNow || createFxNow(),
+			duration: options.duration,
+			tweens: [],
+			createTween: function( prop, end ) {
+				var tween = jQuery.Tween( elem, animation.opts, prop, end,
+						animation.opts.specialEasing[ prop ] || animation.opts.easing );
+				animation.tweens.push( tween );
+				return tween;
+			},
+			stop: function( gotoEnd ) {
+				var index = 0,
+
+					// If we are going to the end, we want to run all the tweens
+					// otherwise we skip this part
+					length = gotoEnd ? animation.tweens.length : 0;
+				if ( stopped ) {
+					return this;
+				}
+				stopped = true;
+				for ( ; index < length ; index++ ) {
+					animation.tweens[ index ].run( 1 );
+				}
+
+				// Resolve when we played the last frame; otherwise, reject
+				if ( gotoEnd ) {
+					deferred.notifyWith( elem, [ animation, 1, 0 ] );
+					deferred.resolveWith( elem, [ animation, gotoEnd ] );
+				} else {
+					deferred.rejectWith( elem, [ animation, gotoEnd ] );
+				}
+				return this;
+			}
+		} ),
+		props = animation.props;
+
+	propFilter( props, animation.opts.specialEasing );
+
+	for ( ; index < length ; index++ ) {
+		result = Animation.prefilters[ index ].call( animation, elem, props, animation.opts );
+		if ( result ) {
+			if ( jQuery.isFunction( result.stop ) ) {
+				jQuery._queueHooks( animation.elem, animation.opts.queue ).stop =
+					jQuery.proxy( result.stop, result );
+			}
+			return result;
+		}
+	}
+
+	jQuery.map( props, createTween, animation );
+
+	if ( jQuery.isFunction( animation.opts.start ) ) {
+		animation.opts.start.call( elem, animation );
+	}
+
+	jQuery.fx.timer(
+		jQuery.extend( tick, {
+			elem: elem,
+			anim: animation,
+			queue: animation.opts.queue
+		} )
+	);
+
+	// attach callbacks from options
+	return animation.progress( animation.opts.progress )
+		.done( animation.opts.done, animation.opts.complete )
+		.fail( animation.opts.fail )
+		.always( animation.opts.always );
+}
+
+jQuery.Animation = jQuery.extend( Animation, {
+	tweeners: {
+		"*": [ function( prop, value ) {
+			var tween = this.createTween( prop, value );
+			adjustCSS( tween.elem, prop, rcssNum.exec( value ), tween );
+			return tween;
+		} ]
+	},
+
+	tweener: function( props, callback ) {
+		if ( jQuery.isFunction( props ) ) {
+			callback = props;
+			props = [ "*" ];
+		} else {
+			props = props.match( rnotwhite );
+		}
+
+		var prop,
+			index = 0,
+			length = props.length;
+
+		for ( ; index < length ; index++ ) {
+			prop = props[ index ];
+			Animation.tweeners[ prop ] = Animation.tweeners[ prop ] || [];
+			Animation.tweeners[ prop ].unshift( callback );
+		}
+	},
+
+	prefilters: [ defaultPrefilter ],
+
+	prefilter: function( callback, prepend ) {
+		if ( prepend ) {
+			Animation.prefilters.unshift( callback );
+		} else {
+			Animation.prefilters.push( callback );
+		}
+	}
+} );
+
+jQuery.speed = function( speed, easing, fn ) {
+	var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : {
+		complete: fn || !fn && easing ||
+			jQuery.isFunction( speed ) && speed,
+		duration: speed,
+		easing: fn && easing || easing && !jQuery.isFunction( easing ) && easing
+	};
+
+	opt.duration = jQuery.fx.off ? 0 : typeof opt.duration === "number" ?
+		opt.duration : opt.duration in jQuery.fx.speeds ?
+			jQuery.fx.speeds[ opt.duration ] : jQuery.fx.speeds._default;
+
+	// Normalize opt.queue - true/undefined/null -> "fx"
+	if ( opt.queue == null || opt.queue === true ) {
+		opt.queue = "fx";
+	}
+
+	// Queueing
+	opt.old = opt.complete;
+
+	opt.complete = function() {
+		if ( jQuery.isFunction( opt.old ) ) {
+			opt.old.call( this );
+		}
+
+		if ( opt.queue ) {
+			jQuery.dequeue( this, opt.queue );
+		}
+	};
+
+	return opt;
+};
+
+jQuery.fn.extend( {
+	fadeTo: function( speed, to, easing, callback ) {
+
+		// Show any hidden elements after setting opacity to 0
+		return this.filter( isHidden ).css( "opacity", 0 ).show()
+
+			// Animate to the value specified
+			.end().animate( { opacity: to }, speed, easing, callback );
+	},
+	animate: function( prop, speed, easing, callback ) {
+		var empty = jQuery.isEmptyObject( prop ),
+			optall = jQuery.speed( speed, easing, callback ),
+			doAnimation = function() {
+
+				// Operate on a copy of prop so per-property easing won't be lost
+				var anim = Animation( this, jQuery.extend( {}, prop ), optall );
+
+				// Empty animations, or finishing resolves immediately
+				if ( empty || dataPriv.get( this, "finish" ) ) {
+					anim.stop( true );
+				}
+			};
+			doAnimation.finish = doAnimation;
+
+		return empty || optall.queue === false ?
+			this.each( doAnimation ) :
+			this.queue( optall.queue, doAnimation );
+	},
+	stop: function( type, clearQueue, gotoEnd ) {
+		var stopQueue = function( hooks ) {
+			var stop = hooks.stop;
+			delete hooks.stop;
+			stop( gotoEnd );
+		};
+
+		if ( typeof type !== "string" ) {
+			gotoEnd = clearQueue;
+			clearQueue = type;
+			type = undefined;
+		}
+		if ( clearQueue && type !== false ) {
+			this.queue( type || "fx", [] );
+		}
+
+		return this.each( function() {
+			var dequeue = true,
+				index = type != null && type + "queueHooks",
+				timers = jQuery.timers,
+				data = dataPriv.get( this );
+
+			if ( index ) {
+				if ( data[ index ] && data[ index ].stop ) {
+					stopQueue( data[ index ] );
+				}
+			} else {
+				for ( index in data ) {
+					if ( data[ index ] && data[ index ].stop && rrun.test( index ) ) {
+						stopQueue( data[ index ] );
+					}
+				}
+			}
+
+			for ( index = timers.length; index--; ) {
+				if ( timers[ index ].elem === this &&
+					( type == null || timers[ index ].queue === type ) ) {
+
+					timers[ index ].anim.stop( gotoEnd );
+					dequeue = false;
+					timers.splice( index, 1 );
+				}
+			}
+
+			// Start the next in the queue if the last step wasn't forced.
+			// Timers currently will call their complete callbacks, which
+			// will dequeue but only if they were gotoEnd.
+			if ( dequeue || !gotoEnd ) {
+				jQuery.dequeue( this, type );
+			}
+		} );
+	},
+	finish: function( type ) {
+		if ( type !== false ) {
+			type = type || "fx";
+		}
+		return this.each( function() {
+			var index,
+				data = dataPriv.get( this ),
+				queue = data[ type + "queue" ],
+				hooks = data[ type + "queueHooks" ],
+				timers = jQuery.timers,
+				length = queue ? queue.length : 0;
+
+			// Enable finishing flag on private data
+			data.finish = true;
+
+			// Empty the queue first
+			jQuery.queue( this, type, [] );
+
+			if ( hooks && hooks.stop ) {
+				hooks.stop.call( this, true );
+			}
+
+			// Look for any active animations, and finish them
+			for ( index = timers.length; index--; ) {
+				if ( timers[ index ].elem === this && timers[ index ].queue === type ) {
+					timers[ index ].anim.stop( true );
+					timers.splice( index, 1 );
+				}
+			}
+
+			// Look for any animations in the old queue and finish them
+			for ( index = 0; index < length; index++ ) {
+				if ( queue[ index ] && queue[ index ].finish ) {
+					queue[ index ].finish.call( this );
+				}
+			}
+
+			// Turn off finishing flag
+			delete data.finish;
+		} );
+	}
+} );
+
+jQuery.each( [ "toggle", "show", "hide" ], function( i, name ) {
+	var cssFn = jQuery.fn[ name ];
+	jQuery.fn[ name ] = function( speed, easing, callback ) {
+		return speed == null || typeof speed === "boolean" ?
+			cssFn.apply( this, arguments ) :
+			this.animate( genFx( name, true ), speed, easing, callback );
+	};
+} );
+
+// Generate shortcuts for custom animations
+jQuery.each( {
+	slideDown: genFx( "show" ),
+	slideUp: genFx( "hide" ),
+	slideToggle: genFx( "toggle" ),
+	fadeIn: { opacity: "show" },
+	fadeOut: { opacity: "hide" },
+	fadeToggle: { opacity: "toggle" }
+}, function( name, props ) {
+	jQuery.fn[ name ] = function( speed, easing, callback ) {
+		return this.animate( props, speed, easing, callback );
+	};
+} );
+
+jQuery.timers = [];
+jQuery.fx.tick = function() {
+	var timer,
+		i = 0,
+		timers = jQuery.timers;
+
+	fxNow = jQuery.now();
+
+	for ( ; i < timers.length; i++ ) {
+		timer = timers[ i ];
+
+		// Checks the timer has not already been removed
+		if ( !timer() && timers[ i ] === timer ) {
+			timers.splice( i--, 1 );
+		}
+	}
+
+	if ( !timers.length ) {
+		jQuery.fx.stop();
+	}
+	fxNow = undefined;
+};
+
+jQuery.fx.timer = function( timer ) {
+	jQuery.timers.push( timer );
+	if ( timer() ) {
+		jQuery.fx.start();
+	} else {
+		jQuery.timers.pop();
+	}
+};
+
+jQuery.fx.interval = 13;
+jQuery.fx.start = function() {
+	if ( !timerId ) {
+		timerId = window.setInterval( jQuery.fx.tick, jQuery.fx.interval );
+	}
+};
+
+jQuery.fx.stop = function() {
+	window.clearInterval( timerId );
+
+	timerId = null;
+};
+
+jQuery.fx.speeds = {
+	slow: 600,
+	fast: 200,
+
+	// Default speed
+	_default: 400
+};
+
+
+// Based off of the plugin by Clint Helfers, with permission.
+// http://web.archive.org/web/20100324014747/http://blindsignals.com/index.php/2009/07/jquery-delay/
+jQuery.fn.delay = function( time, type ) {
+	time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;
+	type = type || "fx";
+
+	return this.queue( type, function( next, hooks ) {
+		var timeout = window.setTimeout( next, time );
+		hooks.stop = function() {
+			window.clearTimeout( timeout );
+		};
+	} );
+};
+
+
+( function() {
+	var input = document.createElement( "input" ),
+		select = document.createElement( "select" ),
+		opt = select.appendChild( document.createElement( "option" ) );
+
+	input.type = "checkbox";
+
+	// Support: iOS<=5.1, Android<=4.2+
+	// Default value for a checkbox should be "on"
+	support.checkOn = input.value !== "";
+
+	// Support: IE<=11+
+	// Must access selectedIndex to make default options select
+	support.optSelected = opt.selected;
+
+	// Support: Android<=2.3
+	// Options inside disabled selects are incorrectly marked as disabled
+	select.disabled = true;
+	support.optDisabled = !opt.disabled;
+
+	// Support: IE<=11+
+	// An input loses its value after becoming a radio
+	input = document.createElement( "input" );
+	input.value = "t";
+	input.type = "radio";
+	support.radioValue = input.value === "t";
+} )();
+
+
+var boolHook,
+	attrHandle = jQuery.expr.attrHandle;
+
+jQuery.fn.extend( {
+	attr: function( name, value ) {
+		return access( this, jQuery.attr, name, value, arguments.length > 1 );
+	},
+
+	removeAttr: function( name ) {
+		return this.each( function() {
+			jQuery.removeAttr( this, name );
+		} );
+	}
+} );
+
+jQuery.extend( {
+	attr: function( elem, name, value ) {
+		var ret, hooks,
+			nType = elem.nodeType;
+
+		// Don't get/set attributes on text, comment and attribute nodes
+		if ( nType === 3 || nType === 8 || nType === 2 ) {
+			return;
+		}
+
+		// Fallback to prop when attributes are not supported
+		if ( typeof elem.getAttribute === "undefined" ) {
+			return jQuery.prop( elem, name, value );
+		}
+
+		// All attributes are lowercase
+		// Grab necessary hook if one is defined
+		if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {
+			name = name.toLowerCase();
+			hooks = jQuery.attrHooks[ name ] ||
+				( jQuery.expr.match.bool.test( name ) ? boolHook : undefined );
+		}
+
+		if ( value !== undefined ) {
+			if ( value === null ) {
+				jQuery.removeAttr( elem, name );
+				return;
+			}
+
+			if ( hooks && "set" in hooks &&
+				( ret = hooks.set( elem, value, name ) ) !== undefined ) {
+				return ret;
+			}
+
+			elem.setAttribute( name, value + "" );
+			return value;
+		}
+
+		if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {
+			return ret;
+		}
+
+		ret = jQuery.find.attr( elem, name );
+
+		// Non-existent attributes return null, we normalize to undefined
+		return ret == null ? undefined : ret;
+	},
+
+	attrHooks: {
+		type: {
+			set: function( elem, value ) {
+				if ( !support.radioValue && value === "radio" &&
+					jQuery.nodeName( elem, "input" ) ) {
+					var val = elem.value;
+					elem.setAttribute( "type", value );
+					if ( val ) {
+						elem.value = val;
+					}
+					return value;
+				}
+			}
+		}
+	},
+
+	removeAttr: function( elem, value ) {
+		var name, propName,
+			i = 0,
+			attrNames = value && value.match( rnotwhite );
+
+		if ( attrNames && elem.nodeType === 1 ) {
+			while ( ( name = attrNames[ i++ ] ) ) {
+				propName = jQuery.propFix[ name ] || name;
+
+				// Boolean attributes get special treatment (#10870)
+				if ( jQuery.expr.match.bool.test( name ) ) {
+
+					// Set corresponding property to false
+					elem[ propName ] = false;
+				}
+
+				elem.removeAttribute( name );
+			}
+		}
+	}
+} );
+
+// Hooks for boolean attributes
+boolHook = {
+	set: function( elem, value, name ) {
+		if ( value === false ) {
+
+			// Remove boolean attributes when set to false
+			jQuery.removeAttr( elem, name );
+		} else {
+			elem.setAttribute( name, name );
+		}
+		return name;
+	}
+};
+jQuery.each( jQuery.expr.match.bool.source.match( /\w+/g ), function( i, name ) {
+	var getter = attrHandle[ name ] || jQuery.find.attr;
+
+	attrHandle[ name ] = function( elem, name, isXML ) {
+		var ret, handle;
+		if ( !isXML ) {
+
+			// Avoid an infinite loop by temporarily removing this function from the getter
+			handle = attrHandle[ name ];
+			attrHandle[ name ] = ret;
+			ret = getter( elem, name, isXML ) != null ?
+				name.toLowerCase() :
+				null;
+			attrHandle[ name ] = handle;
+		}
+		return ret;
+	};
+} );
+
+
+
+
+var rfocusable = /^(?:input|select|textarea|button)$/i,
+	rclickable = /^(?:a|area)$/i;
+
+jQuery.fn.extend( {
+	prop: function( name, value ) {
+		return access( this, jQuery.prop, name, value, arguments.length > 1 );
+	},
+
+	removeProp: function( name ) {
+		return this.each( function() {
+			delete this[ jQuery.propFix[ name ] || name ];
+		} );
+	}
+} );
+
+jQuery.extend( {
+	prop: function( elem, name, value ) {
+		var ret, hooks,
+			nType = elem.nodeType;
+
+		// Don't get/set properties on text, comment and attribute nodes
+		if ( nType === 3 || nType === 8 || nType === 2 ) {
+			return;
+		}
+
+		if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {
+
+			// Fix name and attach hooks
+			name = jQuery.propFix[ name ] || name;
+			hooks = jQuery.propHooks[ name ];
+		}
+
+		if ( value !== undefined ) {
+			if ( hooks && "set" in hooks &&
+				( ret = hooks.set( elem, value, name ) ) !== undefined ) {
+				return ret;
+			}
+
+			return ( elem[ name ] = value );
+		}
+
+		if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {
+			return ret;
+		}
+
+		return elem[ name ];
+	},
+
+	propHooks: {
+		tabIndex: {
+			get: function( elem ) {
+
+				// elem.tabIndex doesn't always return the
+				// correct value when it hasn't been explicitly set
+				// http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/
+				// Use proper attribute retrieval(#12072)
+				var tabindex = jQuery.find.attr( elem, "tabindex" );
+
+				return tabindex ?
+					parseInt( tabindex, 10 ) :
+					rfocusable.test( elem.nodeName ) ||
+						rclickable.test( elem.nodeName ) && elem.href ?
+							0 :
+							-1;
+			}
+		}
+	},
+
+	propFix: {
+		"for": "htmlFor",
+		"class": "className"
+	}
+} );
+
+// Support: IE <=11 only
+// Accessing the selectedIndex property
+// forces the browser to respect setting selected
+// on the option
+// The getter ensures a default option is selected
+// when in an optgroup
+if ( !support.optSelected ) {
+	jQuery.propHooks.selected = {
+		get: function( elem ) {
+			var parent = elem.parentNode;
+			if ( parent && parent.parentNode ) {
+				parent.parentNode.selectedIndex;
+			}
+			return null;
+		},
+		set: function( elem ) {
+			var parent = elem.parentNode;
+			if ( parent ) {
+				parent.selectedIndex;
+
+				if ( parent.parentNode ) {
+					parent.parentNode.selectedIndex;
+				}
+			}
+		}
+	};
+}
+
+jQuery.each( [
+	"tabIndex",
+	"readOnly",
+	"maxLength",
+	"cellSpacing",
+	"cellPadding",
+	"rowSpan",
+	"colSpan",
+	"useMap",
+	"frameBorder",
+	"contentEditable"
+], function() {
+	jQuery.propFix[ this.toLowerCase() ] = this;
+} );
+
+
+
+
+var rclass = /[\t\r\n\f]/g;
+
+function getClass( elem ) {
+	return elem.getAttribute && elem.getAttribute( "class" ) || "";
+}
+
+jQuery.fn.extend( {
+	addClass: function( value ) {
+		var classes, elem, cur, curValue, clazz, j, finalValue,
+			i = 0;
+
+		if ( jQuery.isFunction( value ) ) {
+			return this.each( function( j ) {
+				jQuery( this ).addClass( value.call( this, j, getClass( this ) ) );
+			} );
+		}
+
+		if ( typeof value === "string" && value ) {
+			classes = value.match( rnotwhite ) || [];
+
+			while ( ( elem = this[ i++ ] ) ) {
+				curValue = getClass( elem );
+				cur = elem.nodeType === 1 &&
+					( " " + curValue + " " ).replace( rclass, " " );
+
+				if ( cur ) {
+					j = 0;
+					while ( ( clazz = classes[ j++ ] ) ) {
+						if ( cur.indexOf( " " + clazz + " " ) < 0 ) {
+							cur += clazz + " ";
+						}
+					}
+
+					// Only assign if different to avoid unneeded rendering.
+					finalValue = jQuery.trim( cur );
+					if ( curValue !== finalValue ) {
+						elem.setAttribute( "class", finalValue );
+					}
+				}
+			}
+		}
+
+		return this;
+	},
+
+	removeClass: function( value ) {
+		var classes, elem, cur, curValue, clazz, j, finalValue,
+			i = 0;
+
+		if ( jQuery.isFunction( value ) ) {
+			return this.each( function( j ) {
+				jQuery( this ).removeClass( value.call( this, j, getClass( this ) ) );
+			} );
+		}
+
+		if ( !arguments.length ) {
+			return this.attr( "class", "" );
+		}
+
+		if ( typeof value === "string" && value ) {
+			classes = value.match( rnotwhite ) || [];
+
+			while ( ( elem = this[ i++ ] ) ) {
+				curValue = getClass( elem );
+
+				// This expression is here for better compressibility (see addClass)
+				cur = elem.nodeType === 1 &&
+					( " " + curValue + " " ).replace( rclass, " " );
+
+				if ( cur ) {
+					j = 0;
+					while ( ( clazz = classes[ j++ ] ) ) {
+
+						// Remove *all* instances
+						while ( cur.indexOf( " " + clazz + " " ) > -1 ) {
+							cur = cur.replace( " " + clazz + " ", " " );
+						}
+					}
+
+					// Only assign if different to avoid unneeded rendering.
+					finalValue = jQuery.trim( cur );
+					if ( curValue !== finalValue ) {
+						elem.setAttribute( "class", finalValue );
+					}
+				}
+			}
+		}
+
+		return this;
+	},
+
+	toggleClass: function( value, stateVal ) {
+		var type = typeof value;
+
+		if ( typeof stateVal === "boolean" && type === "string" ) {
+			return stateVal ? this.addClass( value ) : this.removeClass( value );
+		}
+
+		if ( jQuery.isFunction( value ) ) {
+			return this.each( function( i ) {
+				jQuery( this ).toggleClass(
+					value.call( this, i, getClass( this ), stateVal ),
+					stateVal
+				);
+			} );
+		}
+
+		return this.each( function() {
+			var className, i, self, classNames;
+
+			if ( type === "string" ) {
+
+				// Toggle individual class names
+				i = 0;
+				self = jQuery( this );
+				classNames = value.match( rnotwhite ) || [];
+
+				while ( ( className = classNames[ i++ ] ) ) {
+
+					// Check each className given, space separated list
+					if ( self.hasClass( className ) ) {
+						self.removeClass( className );
+					} else {
+						self.addClass( className );
+					}
+				}
+
+			// Toggle whole class name
+			} else if ( value === undefined || type === "boolean" ) {
+				className = getClass( this );
+				if ( className ) {
+
+					// Store className if set
+					dataPriv.set( this, "__className__", className );
+				}
+
+				// If the element has a class name or if we're passed `false`,
+				// then remove the whole classname (if there was one, the above saved it).
+				// Otherwise bring back whatever was previously saved (if anything),
+				// falling back to the empty string if nothing was stored.
+				if ( this.setAttribute ) {
+					this.setAttribute( "class",
+						className || value === false ?
+						"" :
+						dataPriv.get( this, "__className__" ) || ""
+					);
+				}
+			}
+		} );
+	},
+
+	hasClass: function( selector ) {
+		var className, elem,
+			i = 0;
+
+		className = " " + selector + " ";
+		while ( ( elem = this[ i++ ] ) ) {
+			if ( elem.nodeType === 1 &&
+				( " " + getClass( elem ) + " " ).replace( rclass, " " )
+					.indexOf( className ) > -1
+			) {
+				return true;
+			}
+		}
+
+		return false;
+	}
+} );
+
+
+
+
+var rreturn = /\r/g,
+	rspaces = /[\x20\t\r\n\f]+/g;
+
+jQuery.fn.extend( {
+	val: function( value ) {
+		var hooks, ret, isFunction,
+			elem = this[ 0 ];
+
+		if ( !arguments.length ) {
+			if ( elem ) {
+				hooks = jQuery.valHooks[ elem.type ] ||
+					jQuery.valHooks[ elem.nodeName.toLowerCase() ];
+
+				if ( hooks &&
+					"get" in hooks &&
+					( ret = hooks.get( elem, "value" ) ) !== undefined
+				) {
+					return ret;
+				}
+
+				ret = elem.value;
+
+				return typeof ret === "string" ?
+
+					// Handle most common string cases
+					ret.replace( rreturn, "" ) :
+
+					// Handle cases where value is null/undef or number
+					ret == null ? "" : ret;
+			}
+
+			return;
+		}
+
+		isFunction = jQuery.isFunction( value );
+
+		return this.each( function( i ) {
+			var val;
+
+			if ( this.nodeType !== 1 ) {
+				return;
+			}
+
+			if ( isFunction ) {
+				val = value.call( this, i, jQuery( this ).val() );
+			} else {
+				val = value;
+			}
+
+			// Treat null/undefined as ""; convert numbers to string
+			if ( val == null ) {
+				val = "";
+
+			} else if ( typeof val === "number" ) {
+				val += "";
+
+			} else if ( jQuery.isArray( val ) ) {
+				val = jQuery.map( val, function( value ) {
+					return value == null ? "" : value + "";
+				} );
+			}
+
+			hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ];
+
+			// If set returns undefined, fall back to normal setting
+			if ( !hooks || !( "set" in hooks ) || hooks.set( this, val, "value" ) === undefined ) {
+				this.value = val;
+			}
+		} );
+	}
+} );
+
+jQuery.extend( {
+	valHooks: {
+		option: {
+			get: function( elem ) {
+
+				var val = jQuery.find.attr( elem, "value" );
+				return val != null ?
+					val :
+
+					// Support: IE10-11+
+					// option.text throws exceptions (#14686, #14858)
+					// Strip and collapse whitespace
+					// https://html.spec.whatwg.org/#strip-and-collapse-whitespace
+					jQuery.trim( jQuery.text( elem ) ).replace( rspaces, " " );
+			}
+		},
+		select: {
+			get: function( elem ) {
+				var value, option,
+					options = elem.options,
+					index = elem.selectedIndex,
+					one = elem.type === "select-one" || index < 0,
+					values = one ? null : [],
+					max = one ? index + 1 : options.length,
+					i = index < 0 ?
+						max :
+						one ? index : 0;
+
+				// Loop through all the selected options
+				for ( ; i < max; i++ ) {
+					option = options[ i ];
+
+					// IE8-9 doesn't update selected after form reset (#2551)
+					if ( ( option.selected || i === index ) &&
+
+							// Don't return options that are disabled or in a disabled optgroup
+							( support.optDisabled ?
+								!option.disabled : option.getAttribute( "disabled" ) === null ) &&
+							( !option.parentNode.disabled ||
+								!jQuery.nodeName( option.parentNode, "optgroup" ) ) ) {
+
+						// Get the specific value for the option
+						value = jQuery( option ).val();
+
+						// We don't need an array for one selects
+						if ( one ) {
+							return value;
+						}
+
+						// Multi-Selects return an array
+						values.push( value );
+					}
+				}
+
+				return values;
+			},
+
+			set: function( elem, value ) {
+				var optionSet, option,
+					options = elem.options,
+					values = jQuery.makeArray( value ),
+					i = options.length;
+
+				while ( i-- ) {
+					option = options[ i ];
+					if ( option.selected =
+						jQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1
+					) {
+						optionSet = true;
+					}
+				}
+
+				// Force browsers to behave consistently when non-matching value is set
+				if ( !optionSet ) {
+					elem.selectedIndex = -1;
+				}
+				return values;
+			}
+		}
+	}
+} );
+
+// Radios and checkboxes getter/setter
+jQuery.each( [ "radio", "checkbox" ], function() {
+	jQuery.valHooks[ this ] = {
+		set: function( elem, value ) {
+			if ( jQuery.isArray( value ) ) {
+				return ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 );
+			}
+		}
+	};
+	if ( !support.checkOn ) {
+		jQuery.valHooks[ this ].get = function( elem ) {
+			return elem.getAttribute( "value" ) === null ? "on" : elem.value;
+		};
+	}
+} );
+
+
+
+
+// Return jQuery for attributes-only inclusion
+
+
+var rfocusMorph = /^(?:focusinfocus|focusoutblur)$/;
+
+jQuery.extend( jQuery.event, {
+
+	trigger: function( event, data, elem, onlyHandlers ) {
+
+		var i, cur, tmp, bubbleType, ontype, handle, special,
+			eventPath = [ elem || document ],
+			type = hasOwn.call( event, "type" ) ? event.type : event,
+			namespaces = hasOwn.call( event, "namespace" ) ? event.namespace.split( "." ) : [];
+
+		cur = tmp = elem = elem || document;
+
+		// Don't do events on text and comment nodes
+		if ( elem.nodeType === 3 || elem.nodeType === 8 ) {
+			return;
+		}
+
+		// focus/blur morphs to focusin/out; ensure we're not firing them right now
+		if ( rfocusMorph.test( type + jQuery.event.triggered ) ) {
+			return;
+		}
+
+		if ( type.indexOf( "." ) > -1 ) {
+
+			// Namespaced trigger; create a regexp to match event type in handle()
+			namespaces = type.split( "." );
+			type = namespaces.shift();
+			namespaces.sort();
+		}
+		ontype = type.indexOf( ":" ) < 0 && "on" + type;
+
+		// Caller can pass in a jQuery.Event object, Object, or just an event type string
+		event = event[ jQuery.expando ] ?
+			event :
+			new jQuery.Event( type, typeof event === "object" && event );
+
+		// Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true)
+		event.isTrigger = onlyHandlers ? 2 : 3;
+		event.namespace = namespaces.join( "." );
+		event.rnamespace = event.namespace ?
+			new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ) :
+			null;
+
+		// Clean up the event in case it is being reused
+		event.result = undefined;
+		if ( !event.target ) {
+			event.target = elem;
+		}
+
+		// Clone any incoming data and prepend the event, creating the handler arg list
+		data = data == null ?
+			[ event ] :
+			jQuery.makeArray( data, [ event ] );
+
+		// Allow special events to draw outside the lines
+		special = jQuery.event.special[ type ] || {};
+		if ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) {
+			return;
+		}
+
+		// Determine event propagation path in advance, per W3C events spec (#9951)
+		// Bubble up to document, then to window; watch for a global ownerDocument var (#9724)
+		if ( !onlyHandlers && !special.noBubble && !jQuery.isWindow( elem ) ) {
+
+			bubbleType = special.delegateType || type;
+			if ( !rfocusMorph.test( bubbleType + type ) ) {
+				cur = cur.parentNode;
+			}
+			for ( ; cur; cur = cur.parentNode ) {
+				eventPath.push( cur );
+				tmp = cur;
+			}
+
+			// Only add window if we got to document (e.g., not plain obj or detached DOM)
+			if ( tmp === ( elem.ownerDocument || document ) ) {
+				eventPath.push( tmp.defaultView || tmp.parentWindow || window );
+			}
+		}
+
+		// Fire handlers on the event path
+		i = 0;
+		while ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) {
+
+			event.type = i > 1 ?
+				bubbleType :
+				special.bindType || type;
+
+			// jQuery handler
+			handle = ( dataPriv.get( cur, "events" ) || {} )[ event.type ] &&
+				dataPriv.get( cur, "handle" );
+			if ( handle ) {
+				handle.apply( cur, data );
+			}
+
+			// Native handler
+			handle = ontype && cur[ ontype ];
+			if ( handle && handle.apply && acceptData( cur ) ) {
+				event.result = handle.apply( cur, data );
+				if ( event.result === false ) {
+					event.preventDefault();
+				}
+			}
+		}
+		event.type = type;
+
+		// If nobody prevented the default action, do it now
+		if ( !onlyHandlers && !event.isDefaultPrevented() ) {
+
+			if ( ( !special._default ||
+				special._default.apply( eventPath.pop(), data ) === false ) &&
+				acceptData( elem ) ) {
+
+				// Call a native DOM method on the target with the same name name as the event.
+				// Don't do default actions on window, that's where global variables be (#6170)
+				if ( ontype && jQuery.isFunction( elem[ type ] ) && !jQuery.isWindow( elem ) ) {
+
+					// Don't re-trigger an onFOO event when we call its FOO() method
+					tmp = elem[ ontype ];
+
+					if ( tmp ) {
+						elem[ ontype ] = null;
+					}
+
+					// Prevent re-triggering of the same event, since we already bubbled it above
+					jQuery.event.triggered = type;
+					elem[ type ]();
+					jQuery.event.triggered = undefined;
+
+					if ( tmp ) {
+						elem[ ontype ] = tmp;
+					}
+				}
+			}
+		}
+
+		return event.result;
+	},
+
+	// Piggyback on a donor event to simulate a different one
+	simulate: function( type, elem, event ) {
+		var e = jQuery.extend(
+			new jQuery.Event(),
+			event,
+			{
+				type: type,
+				isSimulated: true
+
+				// Previously, `originalEvent: {}` was set here, so stopPropagation call
+				// would not be triggered on donor event, since in our own
+				// jQuery.event.stopPropagation function we had a check for existence of
+				// originalEvent.stopPropagation method, so, consequently it would be a noop.
+				//
+				// But now, this "simulate" function is used only for events
+				// for which stopPropagation() is noop, so there is no need for that anymore.
+				//
+				// For the 1.x branch though, guard for "click" and "submit"
+				// events is still used, but was moved to jQuery.event.stopPropagation function
+				// because `originalEvent` should point to the original event for the constancy
+				// with other events and for more focused logic
+			}
+		);
+
+		jQuery.event.trigger( e, null, elem );
+
+		if ( e.isDefaultPrevented() ) {
+			event.preventDefault();
+		}
+	}
+
+} );
+
+jQuery.fn.extend( {
+
+	trigger: function( type, data ) {
+		return this.each( function() {
+			jQuery.event.trigger( type, data, this );
+		} );
+	},
+	triggerHandler: function( type, data ) {
+		var elem = this[ 0 ];
+		if ( elem ) {
+			return jQuery.event.trigger( type, data, elem, true );
+		}
+	}
+} );
+
+
+jQuery.each( ( "blur focus focusin focusout load resize scroll unload click dblclick " +
+	"mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " +
+	"change select submit keydown keypress keyup error contextmenu" ).split( " " ),
+	function( i, name ) {
+
+	// Handle event binding
+	jQuery.fn[ name ] = function( data, fn ) {
+		return arguments.length > 0 ?
+			this.on( name, null, data, fn ) :
+			this.trigger( name );
+	};
+} );
+
+jQuery.fn.extend( {
+	hover: function( fnOver, fnOut ) {
+		return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver );
+	}
+} );
+
+
+
+
+support.focusin = "onfocusin" in window;
+
+
+// Support: Firefox
+// Firefox doesn't have focus(in | out) events
+// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787
+//
+// Support: Chrome, Safari
+// focus(in | out) events fire after focus & blur events,
+// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order
+// Related ticket - https://code.google.com/p/chromium/issues/detail?id=449857
+if ( !support.focusin ) {
+	jQuery.each( { focus: "focusin", blur: "focusout" }, function( orig, fix ) {
+
+		// Attach a single capturing handler on the document while someone wants focusin/focusout
+		var handler = function( event ) {
+			jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ) );
+		};
+
+		jQuery.event.special[ fix ] = {
+			setup: function() {
+				var doc = this.ownerDocument || this,
+					attaches = dataPriv.access( doc, fix );
+
+				if ( !attaches ) {
+					doc.addEventListener( orig, handler, true );
+				}
+				dataPriv.access( doc, fix, ( attaches || 0 ) + 1 );
+			},
+			teardown: function() {
+				var doc = this.ownerDocument || this,
+					attaches = dataPriv.access( doc, fix ) - 1;
+
+				if ( !attaches ) {
+					doc.removeEventListener( orig, handler, true );
+					dataPriv.remove( doc, fix );
+
+				} else {
+					dataPriv.access( doc, fix, attaches );
+				}
+			}
+		};
+	} );
+}
+var location = window.location;
+
+var nonce = jQuery.now();
+
+var rquery = ( /\?/ );
+
+
+
+// Support: Android 2.3
+// Workaround failure to string-cast null input
+jQuery.parseJSON = function( data ) {
+	return JSON.parse( data + "" );
+};
+
+
+// Cross-browser xml parsing
+jQuery.parseXML = function( data ) {
+	var xml;
+	if ( !data || typeof data !== "string" ) {
+		return null;
+	}
+
+	// Support: IE9
+	try {
+		xml = ( new window.DOMParser() ).parseFromString( data, "text/xml" );
+	} catch ( e ) {
+		xml = undefined;
+	}
+
+	if ( !xml || xml.getElementsByTagName( "parsererror" ).length ) {
+		jQuery.error( "Invalid XML: " + data );
+	}
+	return xml;
+};
+
+
+var
+	rhash = /#.*$/,
+	rts = /([?&])_=[^&]*/,
+	rheaders = /^(.*?):[ \t]*([^\r\n]*)$/mg,
+
+	// #7653, #8125, #8152: local protocol detection
+	rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,
+	rnoContent = /^(?:GET|HEAD)$/,
+	rprotocol = /^\/\//,
+
+	/* Prefilters
+	 * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)
+	 * 2) These are called:
+	 *    - BEFORE asking for a transport
+	 *    - AFTER param serialization (s.data is a string if s.processData is true)
+	 * 3) key is the dataType
+	 * 4) the catchall symbol "*" can be used
+	 * 5) execution will start with transport dataType and THEN continue down to "*" if needed
+	 */
+	prefilters = {},
+
+	/* Transports bindings
+	 * 1) key is the dataType
+	 * 2) the catchall symbol "*" can be used
+	 * 3) selection will start with transport dataType and THEN go to "*" if needed
+	 */
+	transports = {},
+
+	// Avoid comment-prolog char sequence (#10098); must appease lint and evade compression
+	allTypes = "*/".concat( "*" ),
+
+	// Anchor tag for parsing the document origin
+	originAnchor = document.createElement( "a" );
+	originAnchor.href = location.href;
+
+// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport
+function addToPrefiltersOrTransports( structure ) {
+
+	// dataTypeExpression is optional and defaults to "*"
+	return function( dataTypeExpression, func ) {
+
+		if ( typeof dataTypeExpression !== "string" ) {
+			func = dataTypeExpression;
+			dataTypeExpression = "*";
+		}
+
+		var dataType,
+			i = 0,
+			dataTypes = dataTypeExpression.toLowerCase().match( rnotwhite ) || [];
+
+		if ( jQuery.isFunction( func ) ) {
+
+			// For each dataType in the dataTypeExpression
+			while ( ( dataType = dataTypes[ i++ ] ) ) {
+
+				// Prepend if requested
+				if ( dataType[ 0 ] === "+" ) {
+					dataType = dataType.slice( 1 ) || "*";
+					( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func );
+
+				// Otherwise append
+				} else {
+					( structure[ dataType ] = structure[ dataType ] || [] ).push( func );
+				}
+			}
+		}
+	};
+}
+
+// Base inspection function for prefilters and transports
+function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) {
+
+	var inspected = {},
+		seekingTransport = ( structure === transports );
+
+	function inspect( dataType ) {
+		var selected;
+		inspected[ dataType ] = true;
+		jQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) {
+			var dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR );
+			if ( typeof dataTypeOrTransport === "string" &&
+				!seekingTransport && !inspected[ dataTypeOrTransport ] ) {
+
+				options.dataTypes.unshift( dataTypeOrTransport );
+				inspect( dataTypeOrTransport );
+				return false;
+			} else if ( seekingTransport ) {
+				return !( selected = dataTypeOrTransport );
+			}
+		} );
+		return selected;
+	}
+
+	return inspect( options.dataTypes[ 0 ] ) || !inspected[ "*" ] && inspect( "*" );
+}
+
+// A special extend for ajax options
+// that takes "flat" options (not to be deep extended)
+// Fixes #9887
+function ajaxExtend( target, src ) {
+	var key, deep,
+		flatOptions = jQuery.ajaxSettings.flatOptions || {};
+
+	for ( key in src ) {
+		if ( src[ key ] !== undefined ) {
+			( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ];
+		}
+	}
+	if ( deep ) {
+		jQuery.extend( true, target, deep );
+	}
+
+	return target;
+}
+
+/* Handles responses to an ajax request:
+ * - finds the right dataType (mediates between content-type and expected dataType)
+ * - returns the corresponding response
+ */
+function ajaxHandleResponses( s, jqXHR, responses ) {
+
+	var ct, type, finalDataType, firstDataType,
+		contents = s.contents,
+		dataTypes = s.dataTypes;
+
+	// Remove auto dataType and get content-type in the process
+	while ( dataTypes[ 0 ] === "*" ) {
+		dataTypes.shift();
+		if ( ct === undefined ) {
+			ct = s.mimeType || jqXHR.getResponseHeader( "Content-Type" );
+		}
+	}
+
+	// Check if we're dealing with a known content-type
+	if ( ct ) {
+		for ( type in contents ) {
+			if ( contents[ type ] && contents[ type ].test( ct ) ) {
+				dataTypes.unshift( type );
+				break;
+			}
+		}
+	}
+
+	// Check to see if we have a response for the expected dataType
+	if ( dataTypes[ 0 ] in responses ) {
+		finalDataType = dataTypes[ 0 ];
+	} else {
+
+		// Try convertible dataTypes
+		for ( type in responses ) {
+			if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[ 0 ] ] ) {
+				finalDataType = type;
+				break;
+			}
+			if ( !firstDataType ) {
+				firstDataType = type;
+			}
+		}
+
+		// Or just use first one
+		finalDataType = finalDataType || firstDataType;
+	}
+
+	// If we found a dataType
+	// We add the dataType to the list if needed
+	// and return the corresponding response
+	if ( finalDataType ) {
+		if ( finalDataType !== dataTypes[ 0 ] ) {
+			dataTypes.unshift( finalDataType );
+		}
+		return responses[ finalDataType ];
+	}
+}
+
+/* Chain conversions given the request and the original response
+ * Also sets the responseXXX fields on the jqXHR instance
+ */
+function ajaxConvert( s, response, jqXHR, isSuccess ) {
+	var conv2, current, conv, tmp, prev,
+		converters = {},
+
+		// Work with a copy of dataTypes in case we need to modify it for conversion
+		dataTypes = s.dataTypes.slice();
+
+	// Create converters map with lowercased keys
+	if ( dataTypes[ 1 ] ) {
+		for ( conv in s.converters ) {
+			converters[ conv.toLowerCase() ] = s.converters[ conv ];
+		}
+	}
+
+	current = dataTypes.shift();
+
+	// Convert to each sequential dataType
+	while ( current ) {
+
+		if ( s.responseFields[ current ] ) {
+			jqXHR[ s.responseFields[ current ] ] = response;
+		}
+
+		// Apply the dataFilter if provided
+		if ( !prev && isSuccess && s.dataFilter ) {
+			response = s.dataFilter( response, s.dataType );
+		}
+
+		prev = current;
+		current = dataTypes.shift();
+
+		if ( current ) {
+
+		// There's only work to do if current dataType is non-auto
+			if ( current === "*" ) {
+
+				current = prev;
+
+			// Convert response if prev dataType is non-auto and differs from current
+			} else if ( prev !== "*" && prev !== current ) {
+
+				// Seek a direct converter
+				conv = converters[ prev + " " + current ] || converters[ "* " + current ];
+
+				// If none found, seek a pair
+				if ( !conv ) {
+					for ( conv2 in converters ) {
+
+						// If conv2 outputs current
+						tmp = conv2.split( " " );
+						if ( tmp[ 1 ] === current ) {
+
+							// If prev can be converted to accepted input
+							conv = converters[ prev + " " + tmp[ 0 ] ] ||
+								converters[ "* " + tmp[ 0 ] ];
+							if ( conv ) {
+
+								// Condense equivalence converters
+								if ( conv === true ) {
+									conv = converters[ conv2 ];
+
+								// Otherwise, insert the intermediate dataType
+								} else if ( converters[ conv2 ] !== true ) {
+									current = tmp[ 0 ];
+									dataTypes.unshift( tmp[ 1 ] );
+								}
+								break;
+							}
+						}
+					}
+				}
+
+				// Apply converter (if not an equivalence)
+				if ( conv !== true ) {
+
+					// Unless errors are allowed to bubble, catch and return them
+					if ( conv && s.throws ) {
+						response = conv( response );
+					} else {
+						try {
+							response = conv( response );
+						} catch ( e ) {
+							return {
+								state: "parsererror",
+								error: conv ? e : "No conversion from " + prev + " to " + current
+							};
+						}
+					}
+				}
+			}
+		}
+	}
+
+	return { state: "success", data: response };
+}
+
+jQuery.extend( {
+
+	// Counter for holding the number of active queries
+	active: 0,
+
+	// Last-Modified header cache for next request
+	lastModified: {},
+	etag: {},
+
+	ajaxSettings: {
+		url: location.href,
+		type: "GET",
+		isLocal: rlocalProtocol.test( location.protocol ),
+		global: true,
+		processData: true,
+		async: true,
+		contentType: "application/x-www-form-urlencoded; charset=UTF-8",
+		/*
+		timeout: 0,
+		data: null,
+		dataType: null,
+		username: null,
+		password: null,
+		cache: null,
+		throws: false,
+		traditional: false,
+		headers: {},
+		*/
+
+		accepts: {
+			"*": allTypes,
+			text: "text/plain",
+			html: "text/html",
+			xml: "application/xml, text/xml",
+			json: "application/json, text/javascript"
+		},
+
+		contents: {
+			xml: /\bxml\b/,
+			html: /\bhtml/,
+			json: /\bjson\b/
+		},
+
+		responseFields: {
+			xml: "responseXML",
+			text: "responseText",
+			json: "responseJSON"
+		},
+
+		// Data converters
+		// Keys separate source (or catchall "*") and destination types with a single space
+		converters: {
+
+			// Convert anything to text
+			"* text": String,
+
+			// Text to html (true = no transformation)
+			"text html": true,
+
+			// Evaluate text as a json expression
+			"text json": jQuery.parseJSON,
+
+			// Parse text as xml
+			"text xml": jQuery.parseXML
+		},
+
+		// For options that shouldn't be deep extended:
+		// you can add your own custom options here if
+		// and when you create one that shouldn't be
+		// deep extended (see ajaxExtend)
+		flatOptions: {
+			url: true,
+			context: true
+		}
+	},
+
+	// Creates a full fledged settings object into target
+	// with both ajaxSettings and settings fields.
+	// If target is omitted, writes into ajaxSettings.
+	ajaxSetup: function( target, settings ) {
+		return settings ?
+
+			// Building a settings object
+			ajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) :
+
+			// Extending ajaxSettings
+			ajaxExtend( jQuery.ajaxSettings, target );
+	},
+
+	ajaxPrefilter: addToPrefiltersOrTransports( prefilters ),
+	ajaxTransport: addToPrefiltersOrTransports( transports ),
+
+	// Main method
+	ajax: function( url, options ) {
+
+		// If url is an object, simulate pre-1.5 signature
+		if ( typeof url === "object" ) {
+			options = url;
+			url = undefined;
+		}
+
+		// Force options to be an object
+		options = options || {};
+
+		var transport,
+
+			// URL without anti-cache param
+			cacheURL,
+
+			// Response headers
+			responseHeadersString,
+			responseHeaders,
+
+			// timeout handle
+			timeoutTimer,
+
+			// Url cleanup var
+			urlAnchor,
+
+			// To know if global events are to be dispatched
+			fireGlobals,
+
+			// Loop variable
+			i,
+
+			// Create the final options object
+			s = jQuery.ajaxSetup( {}, options ),
+
+			// Callbacks context
+			callbackContext = s.context || s,
+
+			// Context for global events is callbackContext if it is a DOM node or jQuery collection
+			globalEventContext = s.context &&
+				( callbackContext.nodeType || callbackContext.jquery ) ?
+					jQuery( callbackContext ) :
+					jQuery.event,
+
+			// Deferreds
+			deferred = jQuery.Deferred(),
+			completeDeferred = jQuery.Callbacks( "once memory" ),
+
+			// Status-dependent callbacks
+			statusCode = s.statusCode || {},
+
+			// Headers (they are sent all at once)
+			requestHeaders = {},
+			requestHeadersNames = {},
+
+			// The jqXHR state
+			state = 0,
+
+			// Default abort message
+			strAbort = "canceled",
+
+			// Fake xhr
+			jqXHR = {
+				readyState: 0,
+
+				// Builds headers hashtable if needed
+				getResponseHeader: function( key ) {
+					var match;
+					if ( state === 2 ) {
+						if ( !responseHeaders ) {
+							responseHeaders = {};
+							while ( ( match = rheaders.exec( responseHeadersString ) ) ) {
+								responseHeaders[ match[ 1 ].toLowerCase() ] = match[ 2 ];
+							}
+						}
+						match = responseHeaders[ key.toLowerCase() ];
+					}
+					return match == null ? null : match;
+				},
+
+				// Raw string
+				getAllResponseHeaders: function() {
+					return state === 2 ? responseHeadersString : null;
+				},
+
+				// Caches the header
+				setRequestHeader: function( name, value ) {
+					var lname = name.toLowerCase();
+					if ( !state ) {
+						name = requestHeadersNames[ lname ] = requestHeadersNames[ lname ] || name;
+						requestHeaders[ name ] = value;
+					}
+					return this;
+				},
+
+				// Overrides response content-type header
+				overrideMimeType: function( type ) {
+					if ( !state ) {
+						s.mimeType = type;
+					}
+					return this;
+				},
+
+				// Status-dependent callbacks
+				statusCode: function( map ) {
+					var code;
+					if ( map ) {
+						if ( state < 2 ) {
+							for ( code in map ) {
+
+								// Lazy-add the new callback in a way that preserves old ones
+								statusCode[ code ] = [ statusCode[ code ], map[ code ] ];
+							}
+						} else {
+
+							// Execute the appropriate callbacks
+							jqXHR.always( map[ jqXHR.status ] );
+						}
+					}
+					return this;
+				},
+
+				// Cancel the request
+				abort: function( statusText ) {
+					var finalText = statusText || strAbort;
+					if ( transport ) {
+						transport.abort( finalText );
+					}
+					done( 0, finalText );
+					return this;
+				}
+			};
+
+		// Attach deferreds
+		deferred.promise( jqXHR ).complete = completeDeferred.add;
+		jqXHR.success = jqXHR.done;
+		jqXHR.error = jqXHR.fail;
+
+		// Remove hash character (#7531: and string promotion)
+		// Add protocol if not provided (prefilters might expect it)
+		// Handle falsy url in the settings object (#10093: consistency with old signature)
+		// We also use the url parameter if available
+		s.url = ( ( url || s.url || location.href ) + "" ).replace( rhash, "" )
+			.replace( rprotocol, location.protocol + "//" );
+
+		// Alias method option to type as per ticket #12004
+		s.type = options.method || options.type || s.method || s.type;
+
+		// Extract dataTypes list
+		s.dataTypes = jQuery.trim( s.dataType || "*" ).toLowerCase().match( rnotwhite ) || [ "" ];
+
+		// A cross-domain request is in order when the origin doesn't match the current origin.
+		if ( s.crossDomain == null ) {
+			urlAnchor = document.createElement( "a" );
+
+			// Support: IE8-11+
+			// IE throws exception if url is malformed, e.g. http://example.com:80x/
+			try {
+				urlAnchor.href = s.url;
+
+				// Support: IE8-11+
+				// Anchor's host property isn't correctly set when s.url is relative
+				urlAnchor.href = urlAnchor.href;
+				s.crossDomain = originAnchor.protocol + "//" + originAnchor.host !==
+					urlAnchor.protocol + "//" + urlAnchor.host;
+			} catch ( e ) {
+
+				// If there is an error parsing the URL, assume it is crossDomain,
+				// it can be rejected by the transport if it is invalid
+				s.crossDomain = true;
+			}
+		}
+
+		// Convert data if not already a string
+		if ( s.data && s.processData && typeof s.data !== "string" ) {
+			s.data = jQuery.param( s.data, s.traditional );
+		}
+
+		// Apply prefilters
+		inspectPrefiltersOrTransports( prefilters, s, options, jqXHR );
+
+		// If request was aborted inside a prefilter, stop there
+		if ( state === 2 ) {
+			return jqXHR;
+		}
+
+		// We can fire global events as of now if asked to
+		// Don't fire events if jQuery.event is undefined in an AMD-usage scenario (#15118)
+		fireGlobals = jQuery.event && s.global;
+
+		// Watch for a new set of requests
+		if ( fireGlobals && jQuery.active++ === 0 ) {
+			jQuery.event.trigger( "ajaxStart" );
+		}
+
+		// Uppercase the type
+		s.type = s.type.toUpperCase();
+
+		// Determine if request has content
+		s.hasContent = !rnoContent.test( s.type );
+
+		// Save the URL in case we're toying with the If-Modified-Since
+		// and/or If-None-Match header later on
+		cacheURL = s.url;
+
+		// More options handling for requests with no content
+		if ( !s.hasContent ) {
+
+			// If data is available, append data to url
+			if ( s.data ) {
+				cacheURL = ( s.url += ( rquery.test( cacheURL ) ? "&" : "?" ) + s.data );
+
+				// #9682: remove data so that it's not used in an eventual retry
+				delete s.data;
+			}
+
+			// Add anti-cache in url if needed
+			if ( s.cache === false ) {
+				s.url = rts.test( cacheURL ) ?
+
+					// If there is already a '_' parameter, set its value
+					cacheURL.replace( rts, "$1_=" + nonce++ ) :
+
+					// Otherwise add one to the end
+					cacheURL + ( rquery.test( cacheURL ) ? "&" : "?" ) + "_=" + nonce++;
+			}
+		}
+
+		// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
+		if ( s.ifModified ) {
+			if ( jQuery.lastModified[ cacheURL ] ) {
+				jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ cacheURL ] );
+			}
+			if ( jQuery.etag[ cacheURL ] ) {
+				jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ cacheURL ] );
+			}
+		}
+
+		// Set the correct header, if data is being sent
+		if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {
+			jqXHR.setRequestHeader( "Content-Type", s.contentType );
+		}
+
+		// Set the Accepts header for the server, depending on the dataType
+		jqXHR.setRequestHeader(
+			"Accept",
+			s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ?
+				s.accepts[ s.dataTypes[ 0 ] ] +
+					( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) :
+				s.accepts[ "*" ]
+		);
+
+		// Check for headers option
+		for ( i in s.headers ) {
+			jqXHR.setRequestHeader( i, s.headers[ i ] );
+		}
+
+		// Allow custom headers/mimetypes and early abort
+		if ( s.beforeSend &&
+			( s.beforeSend.call( callbackContext, jqXHR, s ) === false || state === 2 ) ) {
+
+			// Abort if not done already and return
+			return jqXHR.abort();
+		}
+
+		// Aborting is no longer a cancellation
+		strAbort = "abort";
+
+		// Install callbacks on deferreds
+		for ( i in { success: 1, error: 1, complete: 1 } ) {
+			jqXHR[ i ]( s[ i ] );
+		}
+
+		// Get transport
+		transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );
+
+		// If no transport, we auto-abort
+		if ( !transport ) {
+			done( -1, "No Transport" );
+		} else {
+			jqXHR.readyState = 1;
+
+			// Send global event
+			if ( fireGlobals ) {
+				globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] );
+			}
+
+			// If request was aborted inside ajaxSend, stop there
+			if ( state === 2 ) {
+				return jqXHR;
+			}
+
+			// Timeout
+			if ( s.async && s.timeout > 0 ) {
+				timeoutTimer = window.setTimeout( function() {
+					jqXHR.abort( "timeout" );
+				}, s.timeout );
+			}
+
+			try {
+				state = 1;
+				transport.send( requestHeaders, done );
+			} catch ( e ) {
+
+				// Propagate exception as error if not done
+				if ( state < 2 ) {
+					done( -1, e );
+
+				// Simply rethrow otherwise
+				} else {
+					throw e;
+				}
+			}
+		}
+
+		// Callback for when everything is done
+		function done( status, nativeStatusText, responses, headers ) {
+			var isSuccess, success, error, response, modified,
+				statusText = nativeStatusText;
+
+			// Called once
+			if ( state === 2 ) {
+				return;
+			}
+
+			// State is "done" now
+			state = 2;
+
+			// Clear timeout if it exists
+			if ( timeoutTimer ) {
+				window.clearTimeout( timeoutTimer );
+			}
+
+			// Dereference transport for early garbage collection
+			// (no matter how long the jqXHR object will be used)
+			transport = undefined;
+
+			// Cache response headers
+			responseHeadersString = headers || "";
+
+			// Set readyState
+			jqXHR.readyState = status > 0 ? 4 : 0;
+
+			// Determine if successful
+			isSuccess = status >= 200 && status < 300 || status === 304;
+
+			// Get response data
+			if ( responses ) {
+				response = ajaxHandleResponses( s, jqXHR, responses );
+			}
+
+			// Convert no matter what (that way responseXXX fields are always set)
+			response = ajaxConvert( s, response, jqXHR, isSuccess );
+
+			// If successful, handle type chaining
+			if ( isSuccess ) {
+
+				// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
+				if ( s.ifModified ) {
+					modified = jqXHR.getResponseHeader( "Last-Modified" );
+					if ( modified ) {
+						jQuery.lastModified[ cacheURL ] = modified;
+					}
+					modified = jqXHR.getResponseHeader( "etag" );
+					if ( modified ) {
+						jQuery.etag[ cacheURL ] = modified;
+					}
+				}
+
+				// if no content
+				if ( status === 204 || s.type === "HEAD" ) {
+					statusText = "nocontent";
+
+				// if not modified
+				} else if ( status === 304 ) {
+					statusText = "notmodified";
+
+				// If we have data, let's convert it
+				} else {
+					statusText = response.state;
+					success = response.data;
+					error = response.error;
+					isSuccess = !error;
+				}
+			} else {
+
+				// Extract error from statusText and normalize for non-aborts
+				error = statusText;
+				if ( status || !statusText ) {
+					statusText = "error";
+					if ( status < 0 ) {
+						status = 0;
+					}
+				}
+			}
+
+			// Set data for the fake xhr object
+			jqXHR.status = status;
+			jqXHR.statusText = ( nativeStatusText || statusText ) + "";
+
+			// Success/Error
+			if ( isSuccess ) {
+				deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );
+			} else {
+				deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );
+			}
+
+			// Status-dependent callbacks
+			jqXHR.statusCode( statusCode );
+			statusCode = undefined;
+
+			if ( fireGlobals ) {
+				globalEventContext.trigger( isSuccess ? "ajaxSuccess" : "ajaxError",
+					[ jqXHR, s, isSuccess ? success : error ] );
+			}
+
+			// Complete
+			completeDeferred.fireWith( callbackContext, [ jqXHR, statusText ] );
+
+			if ( fireGlobals ) {
+				globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] );
+
+				// Handle the global AJAX counter
+				if ( !( --jQuery.active ) ) {
+					jQuery.event.trigger( "ajaxStop" );
+				}
+			}
+		}
+
+		return jqXHR;
+	},
+
+	getJSON: function( url, data, callback ) {
+		return jQuery.get( url, data, callback, "json" );
+	},
+
+	getScript: function( url, callback ) {
+		return jQuery.get( url, undefined, callback, "script" );
+	}
+} );
+
+jQuery.each( [ "get", "post" ], function( i, method ) {
+	jQuery[ method ] = function( url, data, callback, type ) {
+
+		// Shift arguments if data argument was omitted
+		if ( jQuery.isFunction( data ) ) {
+			type = type || callback;
+			callback = data;
+			data = undefined;
+		}
+
+		// The url can be an options object (which then must have .url)
+		return jQuery.ajax( jQuery.extend( {
+			url: url,
+			type: method,
+			dataType: type,
+			data: data,
+			success: callback
+		}, jQuery.isPlainObject( url ) && url ) );
+	};
+} );
+
+
+jQuery._evalUrl = function( url ) {
+	return jQuery.ajax( {
+		url: url,
+
+		// Make this explicit, since user can override this through ajaxSetup (#11264)
+		type: "GET",
+		dataType: "script",
+		async: false,
+		global: false,
+		"throws": true
+	} );
+};
+
+
+jQuery.fn.extend( {
+	wrapAll: function( html ) {
+		var wrap;
+
+		if ( jQuery.isFunction( html ) ) {
+			return this.each( function( i ) {
+				jQuery( this ).wrapAll( html.call( this, i ) );
+			} );
+		}
+
+		if ( this[ 0 ] ) {
+
+			// The elements to wrap the target around
+			wrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true );
+
+			if ( this[ 0 ].parentNode ) {
+				wrap.insertBefore( this[ 0 ] );
+			}
+
+			wrap.map( function() {
+				var elem = this;
+
+				while ( elem.firstElementChild ) {
+					elem = elem.firstElementChild;
+				}
+
+				return elem;
+			} ).append( this );
+		}
+
+		return this;
+	},
+
+	wrapInner: function( html ) {
+		if ( jQuery.isFunction( html ) ) {
+			return this.each( function( i ) {
+				jQuery( this ).wrapInner( html.call( this, i ) );
+			} );
+		}
+
+		return this.each( function() {
+			var self = jQuery( this ),
+				contents = self.contents();
+
+			if ( contents.length ) {
+				contents.wrapAll( html );
+
+			} else {
+				self.append( html );
+			}
+		} );
+	},
+
+	wrap: function( html ) {
+		var isFunction = jQuery.isFunction( html );
+
+		return this.each( function( i ) {
+			jQuery( this ).wrapAll( isFunction ? html.call( this, i ) : html );
+		} );
+	},
+
+	unwrap: function() {
+		return this.parent().each( function() {
+			if ( !jQuery.nodeName( this, "body" ) ) {
+				jQuery( this ).replaceWith( this.childNodes );
+			}
+		} ).end();
+	}
+} );
+
+
+jQuery.expr.filters.hidden = function( elem ) {
+	return !jQuery.expr.filters.visible( elem );
+};
+jQuery.expr.filters.visible = function( elem ) {
+
+	// Support: Opera <= 12.12
+	// Opera reports offsetWidths and offsetHeights less than zero on some elements
+	// Use OR instead of AND as the element is not visible if either is true
+	// See tickets #10406 and #13132
+	return elem.offsetWidth > 0 || elem.offsetHeight > 0 || elem.getClientRects().length > 0;
+};
+
+
+
+
+var r20 = /%20/g,
+	rbracket = /\[\]$/,
+	rCRLF = /\r?\n/g,
+	rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,
+	rsubmittable = /^(?:input|select|textarea|keygen)/i;
+
+function buildParams( prefix, obj, traditional, add ) {
+	var name;
+
+	if ( jQuery.isArray( obj ) ) {
+
+		// Serialize array item.
+		jQuery.each( obj, function( i, v ) {
+			if ( traditional || rbracket.test( prefix ) ) {
+
+				// Treat each array item as a scalar.
+				add( prefix, v );
+
+			} else {
+
+				// Item is non-scalar (array or object), encode its numeric index.
+				buildParams(
+					prefix + "[" + ( typeof v === "object" && v != null ? i : "" ) + "]",
+					v,
+					traditional,
+					add
+				);
+			}
+		} );
+
+	} else if ( !traditional && jQuery.type( obj ) === "object" ) {
+
+		// Serialize object item.
+		for ( name in obj ) {
+			buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add );
+		}
+
+	} else {
+
+		// Serialize scalar item.
+		add( prefix, obj );
+	}
+}
+
+// Serialize an array of form elements or a set of
+// key/values into a query string
+jQuery.param = function( a, traditional ) {
+	var prefix,
+		s = [],
+		add = function( key, value ) {
+
+			// If value is a function, invoke it and return its value
+			value = jQuery.isFunction( value ) ? value() : ( value == null ? "" : value );
+			s[ s.length ] = encodeURIComponent( key ) + "=" + encodeURIComponent( value );
+		};
+
+	// Set traditional to true for jQuery <= 1.3.2 behavior.
+	if ( traditional === undefined ) {
+		traditional = jQuery.ajaxSettings && jQuery.ajaxSettings.traditional;
+	}
+
+	// If an array was passed in, assume that it is an array of form elements.
+	if ( jQuery.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {
+
+		// Serialize the form elements
+		jQuery.each( a, function() {
+			add( this.name, this.value );
+		} );
+
+	} else {
+
+		// If traditional, encode the "old" way (the way 1.3.2 or older
+		// did it), otherwise encode params recursively.
+		for ( prefix in a ) {
+			buildParams( prefix, a[ prefix ], traditional, add );
+		}
+	}
+
+	// Return the resulting serialization
+	return s.join( "&" ).replace( r20, "+" );
+};
+
+jQuery.fn.extend( {
+	serialize: function() {
+		return jQuery.param( this.serializeArray() );
+	},
+	serializeArray: function() {
+		return this.map( function() {
+
+			// Can add propHook for "elements" to filter or add form elements
+			var elements = jQuery.prop( this, "elements" );
+			return elements ? jQuery.makeArray( elements ) : this;
+		} )
+		.filter( function() {
+			var type = this.type;
+
+			// Use .is( ":disabled" ) so that fieldset[disabled] works
+			return this.name && !jQuery( this ).is( ":disabled" ) &&
+				rsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) &&
+				( this.checked || !rcheckableType.test( type ) );
+		} )
+		.map( function( i, elem ) {
+			var val = jQuery( this ).val();
+
+			return val == null ?
+				null :
+				jQuery.isArray( val ) ?
+					jQuery.map( val, function( val ) {
+						return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
+					} ) :
+					{ name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
+		} ).get();
+	}
+} );
+
+
+jQuery.ajaxSettings.xhr = function() {
+	try {
+		return new window.XMLHttpRequest();
+	} catch ( e ) {}
+};
+
+var xhrSuccessStatus = {
+
+		// File protocol always yields status code 0, assume 200
+		0: 200,
+
+		// Support: IE9
+		// #1450: sometimes IE returns 1223 when it should be 204
+		1223: 204
+	},
+	xhrSupported = jQuery.ajaxSettings.xhr();
+
+support.cors = !!xhrSupported && ( "withCredentials" in xhrSupported );
+support.ajax = xhrSupported = !!xhrSupported;
+
+jQuery.ajaxTransport( function( options ) {
+	var callback, errorCallback;
+
+	// Cross domain only allowed if supported through XMLHttpRequest
+	if ( support.cors || xhrSupported && !options.crossDomain ) {
+		return {
+			send: function( headers, complete ) {
+				var i,
+					xhr = options.xhr();
+
+				xhr.open(
+					options.type,
+					options.url,
+					options.async,
+					options.username,
+					options.password
+				);
+
+				// Apply custom fields if provided
+				if ( options.xhrFields ) {
+					for ( i in options.xhrFields ) {
+						xhr[ i ] = options.xhrFields[ i ];
+					}
+				}
+
+				// Override mime type if needed
+				if ( options.mimeType && xhr.overrideMimeType ) {
+					xhr.overrideMimeType( options.mimeType );
+				}
+
+				// X-Requested-With header
+				// For cross-domain requests, seeing as conditions for a preflight are
+				// akin to a jigsaw puzzle, we simply never set it to be sure.
+				// (it can always be set on a per-request basis or even using ajaxSetup)
+				// For same-domain requests, won't change header if already provided.
+				if ( !options.crossDomain && !headers[ "X-Requested-With" ] ) {
+					headers[ "X-Requested-With" ] = "XMLHttpRequest";
+				}
+
+				// Set headers
+				for ( i in headers ) {
+					xhr.setRequestHeader( i, headers[ i ] );
+				}
+
+				// Callback
+				callback = function( type ) {
+					return function() {
+						if ( callback ) {
+							callback = errorCallback = xhr.onload =
+								xhr.onerror = xhr.onabort = xhr.onreadystatechange = null;
+
+							if ( type === "abort" ) {
+								xhr.abort();
+							} else if ( type === "error" ) {
+
+								// Support: IE9
+								// On a manual native abort, IE9 throws
+								// errors on any property access that is not readyState
+								if ( typeof xhr.status !== "number" ) {
+									complete( 0, "error" );
+								} else {
+									complete(
+
+										// File: protocol always yields status 0; see #8605, #14207
+										xhr.status,
+										xhr.statusText
+									);
+								}
+							} else {
+								complete(
+									xhrSuccessStatus[ xhr.status ] || xhr.status,
+									xhr.statusText,
+
+									// Support: IE9 only
+									// IE9 has no XHR2 but throws on binary (trac-11426)
+									// For XHR2 non-text, let the caller handle it (gh-2498)
+									( xhr.responseType || "text" ) !== "text"  ||
+									typeof xhr.responseText !== "string" ?
+										{ binary: xhr.response } :
+										{ text: xhr.responseText },
+									xhr.getAllResponseHeaders()
+								);
+							}
+						}
+					};
+				};
+
+				// Listen to events
+				xhr.onload = callback();
+				errorCallback = xhr.onerror = callback( "error" );
+
+				// Support: IE9
+				// Use onreadystatechange to replace onabort
+				// to handle uncaught aborts
+				if ( xhr.onabort !== undefined ) {
+					xhr.onabort = errorCallback;
+				} else {
+					xhr.onreadystatechange = function() {
+
+						// Check readyState before timeout as it changes
+						if ( xhr.readyState === 4 ) {
+
+							// Allow onerror to be called first,
+							// but that will not handle a native abort
+							// Also, save errorCallback to a variable
+							// as xhr.onerror cannot be accessed
+							window.setTimeout( function() {
+								if ( callback ) {
+									errorCallback();
+								}
+							} );
+						}
+					};
+				}
+
+				// Create the abort callback
+				callback = callback( "abort" );
+
+				try {
+
+					// Do send the request (this may raise an exception)
+					xhr.send( options.hasContent && options.data || null );
+				} catch ( e ) {
+
+					// #14683: Only rethrow if this hasn't been notified as an error yet
+					if ( callback ) {
+						throw e;
+					}
+				}
+			},
+
+			abort: function() {
+				if ( callback ) {
+					callback();
+				}
+			}
+		};
+	}
+} );
+
+
+
+
+// Install script dataType
+jQuery.ajaxSetup( {
+	accepts: {
+		script: "text/javascript, application/javascript, " +
+			"application/ecmascript, application/x-ecmascript"
+	},
+	contents: {
+		script: /\b(?:java|ecma)script\b/
+	},
+	converters: {
+		"text script": function( text ) {
+			jQuery.globalEval( text );
+			return text;
+		}
+	}
+} );
+
+// Handle cache's special case and crossDomain
+jQuery.ajaxPrefilter( "script", function( s ) {
+	if ( s.cache === undefined ) {
+		s.cache = false;
+	}
+	if ( s.crossDomain ) {
+		s.type = "GET";
+	}
+} );
+
+// Bind script tag hack transport
+jQuery.ajaxTransport( "script", function( s ) {
+
+	// This transport only deals with cross domain requests
+	if ( s.crossDomain ) {
+		var script, callback;
+		return {
+			send: function( _, complete ) {
+				script = jQuery( "<script>" ).prop( {
+					charset: s.scriptCharset,
+					src: s.url
+				} ).on(
+					"load error",
+					callback = function( evt ) {
+						script.remove();
+						callback = null;
+						if ( evt ) {
+							complete( evt.type === "error" ? 404 : 200, evt.type );
+						}
+					}
+				);
+
+				// Use native DOM manipulation to avoid our domManip AJAX trickery
+				document.head.appendChild( script[ 0 ] );
+			},
+			abort: function() {
+				if ( callback ) {
+					callback();
+				}
+			}
+		};
+	}
+} );
+
+
+
+
+var oldCallbacks = [],
+	rjsonp = /(=)\?(?=&|$)|\?\?/;
+
+// Default jsonp settings
+jQuery.ajaxSetup( {
+	jsonp: "callback",
+	jsonpCallback: function() {
+		var callback = oldCallbacks.pop() || ( jQuery.expando + "_" + ( nonce++ ) );
+		this[ callback ] = true;
+		return callback;
+	}
+} );
+
+// Detect, normalize options and install callbacks for jsonp requests
+jQuery.ajaxPrefilter( "json jsonp", function( s, originalSettings, jqXHR ) {
+
+	var callbackName, overwritten, responseContainer,
+		jsonProp = s.jsonp !== false && ( rjsonp.test( s.url ) ?
+			"url" :
+			typeof s.data === "string" &&
+				( s.contentType || "" )
+					.indexOf( "application/x-www-form-urlencoded" ) === 0 &&
+				rjsonp.test( s.data ) && "data"
+		);
+
+	// Handle iff the expected data type is "jsonp" or we have a parameter to set
+	if ( jsonProp || s.dataTypes[ 0 ] === "jsonp" ) {
+
+		// Get callback name, remembering preexisting value associated with it
+		callbackName = s.jsonpCallback = jQuery.isFunction( s.jsonpCallback ) ?
+			s.jsonpCallback() :
+			s.jsonpCallback;
+
+		// Insert callback into url or form data
+		if ( jsonProp ) {
+			s[ jsonProp ] = s[ jsonProp ].replace( rjsonp, "$1" + callbackName );
+		} else if ( s.jsonp !== false ) {
+			s.url += ( rquery.test( s.url ) ? "&" : "?" ) + s.jsonp + "=" + callbackName;
+		}
+
+		// Use data converter to retrieve json after script execution
+		s.converters[ "script json" ] = function() {
+			if ( !responseContainer ) {
+				jQuery.error( callbackName + " was not called" );
+			}
+			return responseContainer[ 0 ];
+		};
+
+		// Force json dataType
+		s.dataTypes[ 0 ] = "json";
+
+		// Install callback
+		overwritten = window[ callbackName ];
+		window[ callbackName ] = function() {
+			responseContainer = arguments;
+		};
+
+		// Clean-up function (fires after converters)
+		jqXHR.always( function() {
+
+			// If previous value didn't exist - remove it
+			if ( overwritten === undefined ) {
+				jQuery( window ).removeProp( callbackName );
+
+			// Otherwise restore preexisting value
+			} else {
+				window[ callbackName ] = overwritten;
+			}
+
+			// Save back as free
+			if ( s[ callbackName ] ) {
+
+				// Make sure that re-using the options doesn't screw things around
+				s.jsonpCallback = originalSettings.jsonpCallback;
+
+				// Save the callback name for future use
+				oldCallbacks.push( callbackName );
+			}
+
+			// Call if it was a function and we have a response
+			if ( responseContainer && jQuery.isFunction( overwritten ) ) {
+				overwritten( responseContainer[ 0 ] );
+			}
+
+			responseContainer = overwritten = undefined;
+		} );
+
+		// Delegate to script
+		return "script";
+	}
+} );
+
+
+
+
+// Argument "data" should be string of html
+// context (optional): If specified, the fragment will be created in this context,
+// defaults to document
+// keepScripts (optional): If true, will include scripts passed in the html string
+jQuery.parseHTML = function( data, context, keepScripts ) {
+	if ( !data || typeof data !== "string" ) {
+		return null;
+	}
+	if ( typeof context === "boolean" ) {
+		keepScripts = context;
+		context = false;
+	}
+	context = context || document;
+
+	var parsed = rsingleTag.exec( data ),
+		scripts = !keepScripts && [];
+
+	// Single tag
+	if ( parsed ) {
+		return [ context.createElement( parsed[ 1 ] ) ];
+	}
+
+	parsed = buildFragment( [ data ], context, scripts );
+
+	if ( scripts && scripts.length ) {
+		jQuery( scripts ).remove();
+	}
+
+	return jQuery.merge( [], parsed.childNodes );
+};
+
+
+// Keep a copy of the old load method
+var _load = jQuery.fn.load;
+
+/**
+ * Load a url into a page
+ */
+jQuery.fn.load = function( url, params, callback ) {
+	if ( typeof url !== "string" && _load ) {
+		return _load.apply( this, arguments );
+	}
+
+	var selector, type, response,
+		self = this,
+		off = url.indexOf( " " );
+
+	if ( off > -1 ) {
+		selector = jQuery.trim( url.slice( off ) );
+		url = url.slice( 0, off );
+	}
+
+	// If it's a function
+	if ( jQuery.isFunction( params ) ) {
+
+		// We assume that it's the callback
+		callback = params;
+		params = undefined;
+
+	// Otherwise, build a param string
+	} else if ( params && typeof params === "object" ) {
+		type = "POST";
+	}
+
+	// If we have elements to modify, make the request
+	if ( self.length > 0 ) {
+		jQuery.ajax( {
+			url: url,
+
+			// If "type" variable is undefined, then "GET" method will be used.
+			// Make value of this field explicit since
+			// user can override it through ajaxSetup method
+			type: type || "GET",
+			dataType: "html",
+			data: params
+		} ).done( function( responseText ) {
+
+			// Save response for use in complete callback
+			response = arguments;
+
+			self.html( selector ?
+
+				// If a selector was specified, locate the right elements in a dummy div
+				// Exclude scripts to avoid IE 'Permission Denied' errors
+				jQuery( "<div>" ).append( jQuery.parseHTML( responseText ) ).find( selector ) :
+
+				// Otherwise use the full result
+				responseText );
+
+		// If the request succeeds, this function gets "data", "status", "jqXHR"
+		// but they are ignored because response was set above.
+		// If it fails, this function gets "jqXHR", "status", "error"
+		} ).always( callback && function( jqXHR, status ) {
+			self.each( function() {
+				callback.apply( this, response || [ jqXHR.responseText, status, jqXHR ] );
+			} );
+		} );
+	}
+
+	return this;
+};
+
+
+
+
+// Attach a bunch of functions for handling common AJAX events
+jQuery.each( [
+	"ajaxStart",
+	"ajaxStop",
+	"ajaxComplete",
+	"ajaxError",
+	"ajaxSuccess",
+	"ajaxSend"
+], function( i, type ) {
+	jQuery.fn[ type ] = function( fn ) {
+		return this.on( type, fn );
+	};
+} );
+
+
+
+
+jQuery.expr.filters.animated = function( elem ) {
+	return jQuery.grep( jQuery.timers, function( fn ) {
+		return elem === fn.elem;
+	} ).length;
+};
+
+
+
+
+/**
+ * Gets a window from an element
+ */
+function getWindow( elem ) {
+	return jQuery.isWindow( elem ) ? elem : elem.nodeType === 9 && elem.defaultView;
+}
+
+jQuery.offset = {
+	setOffset: function( elem, options, i ) {
+		var curPosition, curLeft, curCSSTop, curTop, curOffset, curCSSLeft, calculatePosition,
+			position = jQuery.css( elem, "position" ),
+			curElem = jQuery( elem ),
+			props = {};
+
+		// Set position first, in-case top/left are set even on static elem
+		if ( position === "static" ) {
+			elem.style.position = "relative";
+		}
+
+		curOffset = curElem.offset();
+		curCSSTop = jQuery.css( elem, "top" );
+		curCSSLeft = jQuery.css( elem, "left" );
+		calculatePosition = ( position === "absolute" || position === "fixed" ) &&
+			( curCSSTop + curCSSLeft ).indexOf( "auto" ) > -1;
+
+		// Need to be able to calculate position if either
+		// top or left is auto and position is either absolute or fixed
+		if ( calculatePosition ) {
+			curPosition = curElem.position();
+			curTop = curPosition.top;
+			curLeft = curPosition.left;
+
+		} else {
+			curTop = parseFloat( curCSSTop ) || 0;
+			curLeft = parseFloat( curCSSLeft ) || 0;
+		}
+
+		if ( jQuery.isFunction( options ) ) {
+
+			// Use jQuery.extend here to allow modification of coordinates argument (gh-1848)
+			options = options.call( elem, i, jQuery.extend( {}, curOffset ) );
+		}
+
+		if ( options.top != null ) {
+			props.top = ( options.top - curOffset.top ) + curTop;
+		}
+		if ( options.left != null ) {
+			props.left = ( options.left - curOffset.left ) + curLeft;
+		}
+
+		if ( "using" in options ) {
+			options.using.call( elem, props );
+
+		} else {
+			curElem.css( props );
+		}
+	}
+};
+
+jQuery.fn.extend( {
+	offset: function( options ) {
+		if ( arguments.length ) {
+			return options === undefined ?
+				this :
+				this.each( function( i ) {
+					jQuery.offset.setOffset( this, options, i );
+				} );
+		}
+
+		var docElem, win,
+			elem = this[ 0 ],
+			box = { top: 0, left: 0 },
+			doc = elem && elem.ownerDocument;
+
+		if ( !doc ) {
+			return;
+		}
+
+		docElem = doc.documentElement;
+
+		// Make sure it's not a disconnected DOM node
+		if ( !jQuery.contains( docElem, elem ) ) {
+			return box;
+		}
+
+		box = elem.getBoundingClientRect();
+		win = getWindow( doc );
+		return {
+			top: box.top + win.pageYOffset - docElem.clientTop,
+			left: box.left + win.pageXOffset - docElem.clientLeft
+		};
+	},
+
+	position: function() {
+		if ( !this[ 0 ] ) {
+			return;
+		}
+
+		var offsetParent, offset,
+			elem = this[ 0 ],
+			parentOffset = { top: 0, left: 0 };
+
+		// Fixed elements are offset from window (parentOffset = {top:0, left: 0},
+		// because it is its only offset parent
+		if ( jQuery.css( elem, "position" ) === "fixed" ) {
+
+			// Assume getBoundingClientRect is there when computed position is fixed
+			offset = elem.getBoundingClientRect();
+
+		} else {
+
+			// Get *real* offsetParent
+			offsetParent = this.offsetParent();
+
+			// Get correct offsets
+			offset = this.offset();
+			if ( !jQuery.nodeName( offsetParent[ 0 ], "html" ) ) {
+				parentOffset = offsetParent.offset();
+			}
+
+			// Add offsetParent borders
+			parentOffset.top += jQuery.css( offsetParent[ 0 ], "borderTopWidth", true );
+			parentOffset.left += jQuery.css( offsetParent[ 0 ], "borderLeftWidth", true );
+		}
+
+		// Subtract parent offsets and element margins
+		return {
+			top: offset.top - parentOffset.top - jQuery.css( elem, "marginTop", true ),
+			left: offset.left - parentOffset.left - jQuery.css( elem, "marginLeft", true )
+		};
+	},
+
+	// This method will return documentElement in the following cases:
+	// 1) For the element inside the iframe without offsetParent, this method will return
+	//    documentElement of the parent window
+	// 2) For the hidden or detached element
+	// 3) For body or html element, i.e. in case of the html node - it will return itself
+	//
+	// but those exceptions were never presented as a real life use-cases
+	// and might be considered as more preferable results.
+	//
+	// This logic, however, is not guaranteed and can change at any point in the future
+	offsetParent: function() {
+		return this.map( function() {
+			var offsetParent = this.offsetParent;
+
+			while ( offsetParent && jQuery.css( offsetParent, "position" ) === "static" ) {
+				offsetParent = offsetParent.offsetParent;
+			}
+
+			return offsetParent || documentElement;
+		} );
+	}
+} );
+
+// Create scrollLeft and scrollTop methods
+jQuery.each( { scrollLeft: "pageXOffset", scrollTop: "pageYOffset" }, function( method, prop ) {
+	var top = "pageYOffset" === prop;
+
+	jQuery.fn[ method ] = function( val ) {
+		return access( this, function( elem, method, val ) {
+			var win = getWindow( elem );
+
+			if ( val === undefined ) {
+				return win ? win[ prop ] : elem[ method ];
+			}
+
+			if ( win ) {
+				win.scrollTo(
+					!top ? val : win.pageXOffset,
+					top ? val : win.pageYOffset
+				);
+
+			} else {
+				elem[ method ] = val;
+			}
+		}, method, val, arguments.length );
+	};
+} );
+
+// Support: Safari<7-8+, Chrome<37-44+
+// Add the top/left cssHooks using jQuery.fn.position
+// Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084
+// Blink bug: https://code.google.com/p/chromium/issues/detail?id=229280
+// getComputedStyle returns percent when specified for top/left/bottom/right;
+// rather than make the css module depend on the offset module, just check for it here
+jQuery.each( [ "top", "left" ], function( i, prop ) {
+	jQuery.cssHooks[ prop ] = addGetHookIf( support.pixelPosition,
+		function( elem, computed ) {
+			if ( computed ) {
+				computed = curCSS( elem, prop );
+
+				// If curCSS returns percentage, fallback to offset
+				return rnumnonpx.test( computed ) ?
+					jQuery( elem ).position()[ prop ] + "px" :
+					computed;
+			}
+		}
+	);
+} );
+
+
+// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods
+jQuery.each( { Height: "height", Width: "width" }, function( name, type ) {
+	jQuery.each( { padding: "inner" + name, content: type, "": "outer" + name },
+		function( defaultExtra, funcName ) {
+
+		// Margin is only for outerHeight, outerWidth
+		jQuery.fn[ funcName ] = function( margin, value ) {
+			var chainable = arguments.length && ( defaultExtra || typeof margin !== "boolean" ),
+				extra = defaultExtra || ( margin === true || value === true ? "margin" : "border" );
+
+			return access( this, function( elem, type, value ) {
+				var doc;
+
+				if ( jQuery.isWindow( elem ) ) {
+
+					// As of 5/8/2012 this will yield incorrect results for Mobile Safari, but there
+					// isn't a whole lot we can do. See pull request at this URL for discussion:
+					// https://github.com/jquery/jquery/pull/764
+					return elem.document.documentElement[ "client" + name ];
+				}
+
+				// Get document width or height
+				if ( elem.nodeType === 9 ) {
+					doc = elem.documentElement;
+
+					// Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height],
+					// whichever is greatest
+					return Math.max(
+						elem.body[ "scroll" + name ], doc[ "scroll" + name ],
+						elem.body[ "offset" + name ], doc[ "offset" + name ],
+						doc[ "client" + name ]
+					);
+				}
+
+				return value === undefined ?
+
+					// Get width or height on the element, requesting but not forcing parseFloat
+					jQuery.css( elem, type, extra ) :
+
+					// Set width or height on the element
+					jQuery.style( elem, type, value, extra );
+			}, type, chainable ? margin : undefined, chainable, null );
+		};
+	} );
+} );
+
+
+jQuery.fn.extend( {
+
+	bind: function( types, data, fn ) {
+		return this.on( types, null, data, fn );
+	},
+	unbind: function( types, fn ) {
+		return this.off( types, null, fn );
+	},
+
+	delegate: function( selector, types, data, fn ) {
+		return this.on( types, selector, data, fn );
+	},
+	undelegate: function( selector, types, fn ) {
+
+		// ( namespace ) or ( selector, types [, fn] )
+		return arguments.length === 1 ?
+			this.off( selector, "**" ) :
+			this.off( types, selector || "**", fn );
+	},
+	size: function() {
+		return this.length;
+	}
+} );
+
+jQuery.fn.andSelf = jQuery.fn.addBack;
+
+
+
+
+// Register as a named AMD module, since jQuery can be concatenated with other
+// files that may use define, but not via a proper concatenation script that
+// understands anonymous AMD modules. A named AMD is safest and most robust
+// way to register. Lowercase jquery is used because AMD module names are
+// derived from file names, and jQuery is normally delivered in a lowercase
+// file name. Do this after creating the global so that if an AMD module wants
+// to call noConflict to hide this version of jQuery, it will work.
+
+// Note that for maximum portability, libraries that are not jQuery should
+// declare themselves as anonymous modules, and avoid setting a global if an
+// AMD loader is present. jQuery is a special case. For more information, see
+// https://github.com/jrburke/requirejs/wiki/Updating-existing-libraries#wiki-anon
+
+if ( typeof define === "function" && define.amd ) {
+	define( "jquery", [], function() {
+		return jQuery;
+	} );
+}
+
+
+
+var
+
+	// Map over jQuery in case of overwrite
+	_jQuery = window.jQuery,
+
+	// Map over the $ in case of overwrite
+	_$ = window.$;
+
+jQuery.noConflict = function( deep ) {
+	if ( window.$ === jQuery ) {
+		window.$ = _$;
+	}
+
+	if ( deep && window.jQuery === jQuery ) {
+		window.jQuery = _jQuery;
+	}
+
+	return jQuery;
+};
+
+// Expose jQuery and $ identifiers, even in AMD
+// (#7102#comment:10, https://github.com/jquery/jquery/pull/557)
+// and CommonJS for browser emulators (#13566)
+if ( !noGlobal ) {
+	window.jQuery = window.$ = jQuery;
+}
+
+return jQuery;
+}));
+
+},{}],340:[function(require,module,exports){
+'use strict';
+
+Object.defineProperty(exports, "__esModule", {
+    value: true
+});
+
+var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol ? "symbol" : typeof obj; };
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); /**
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      * Created by gavorhes on 12/14/2015.
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      */
+
+var _LayerItsInventory = require('../layers/LayerItsInventory');
+
+var _LayerItsInventory2 = _interopRequireDefault(_LayerItsInventory);
+
+var _colors = require('../util/colors');
+
+var colors = _interopRequireWildcard(_colors);
+
+var _provide = require('../util/provide');
+
+var _provide2 = _interopRequireDefault(_provide);
+
+function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+var nm = (0, _provide2.default)('collections');
+
+var itsConfig = [{ name: 'Camera', itsType: 'cctv', minZoom: 11, itsIcon: 'cctv.png' }, {
+    name: 'Message Signs',
+    itsType: 'DMS',
+    minZoom: 11,
+    itsIconConfig: {
+        prop: 'dmsType',
+        defaultName: 'DMS',
+        defaultIcon: 'dms.png',
+        iconArray: [['pcms', 'PCMS', 'pcms.png']]
+    }
+}, { name: 'Lighting', itsType: 'light', minZoom: 16, itsIcon: 'streetlight.png', visible: false, onDemand: true }, { name: 'Bluetooth', itsType: 'blue', minZoom: 10, itsIcon: 'bluetooth.png', visible: false }, { name: 'Cabinets', itsType: 'cabinet', minZoom: 10, itsIcon: 'cabinet.png', visible: false }, { name: 'Hut', itsType: 'hut', minZoom: 10, itsIcon: 'hut.png', visible: false }, { name: 'Vault', itsType: 'vault', minZoom: 13, itsIcon: 'vault.png', visible: false }, { name: 'Advisory Radio', itsType: 'har', minZoom: 10, itsIcon: 'har.png', visible: false }, {
+    name: 'Loop Detectors',
+    itsType: 'loop',
+    legendCollapse: true,
+    minZoom: 14,
+    visible: false,
+    itsIconConfig: {
+        prop: 'dtctrType',
+        defaultName: 'Other',
+        defaultIcon: 'loopdetectorother.png',
+        iconArray: [['detector', 'Detector', 'loopdetector.png'], ['long', 'Long', 'loopdetectorlong.png'], ['zone', 'Zone', 'loopdetectorzone.png']]
+    },
+    onDemand: true
+}, { name: 'Microwave', itsType: 'microwave', minZoom: 14, itsIcon: 'microwave.png', visible: false }, { name: 'Pull Box', itsType: 'pull', minZoom: 14, itsIcon: 'pullbox.png', visible: false, onDemand: true }, { name: 'RWIS', itsType: 'rwis', minZoom: 7, itsIcon: 'rwis.png', visible: false }, { name: 'Ramp Gates', itsType: 'gate', minZoom: 10, itsIcon: 'rampgate.png', visible: false }, { name: 'Ramp Meter', itsType: 'meter', minZoom: 10, itsIcon: 'rampmeter.png', visible: false }, { name: 'Signal', itsType: 'signal', minZoom: 13, itsIcon: 'signal.png', visible: false, onDemand: true }, { name: 'Tower', itsType: 'tower', minZoom: 10, itsIcon: 'tower.png', visible: false }, {
+    name: 'Trench',
+    itsType: 'trench',
+    onDemand: true,
+    visible: false,
+    onDemandDelay: 500,
+    minZoom: 15,
+    legendCollapse: true,
+    itsLineConfig: {
+        prop: 'owner',
+        //defaultName: 'Other',
+        //defaultWidth: 7,
+        defaultColor: colors.hexAlphaToRgbOrRgba('#747474', 0.8),
+        lineArray: [['WisDOT', 'WisDOT', colors.hexAlphaToRgbOrRgba('#FF032F', 0.7)], ['WIN', 'WIN', colors.hexAlphaToRgbOrRgba('#FFC632', 0.7)], ['USXchange', 'USXchange', colors.hexAlphaToRgbOrRgba('#2DFF46', 0.7)], ['AT&T', 'AT&T', colors.hexAlphaToRgbOrRgba('#ff2be5', 0.7)], ['Touch America', 'Touch America', colors.hexAlphaToRgbOrRgba('#52f3ff', 0.7)], ['Qwest', 'Qwest', colors.hexAlphaToRgbOrRgba('#9278ff', 0.7)], ['McLeodUSA', 'McLeodUSA', colors.hexAlphaToRgbOrRgba('#2926FF', 0.7)], ['CINC', 'CINC', colors.hexAlphaToRgbOrRgba('#CB00FF', 0.7)], ['City of Madison', 'Madison', colors.hexAlphaToRgbOrRgba('#000380', 0.7)]]
+    }
+}];
+
+var ItsLayerCollection = function () {
+
+    /**
+     * Create a collection of all ITS layers
+     * @param {ol.Map} theMap the openlayers map
+     * @param {Array} [exclude=[]] array of Its layer identifiers to exclude
+     *
+     * BLUE Bluetooth Detector - Bluetooth Detector
+     * CABINET Cabinets - The cabinets
+     * CCTV Camera - Traffic Cameras
+     * HUT Communication Hut - Communication Hut
+     * VAULT Communication Vault - The communication vaults
+     * HAR Highway Advisory Radio - Advisory Radios
+     * LIGHT Lighting - Lighting
+     * LOOP Loop Detectors - Loop Detectors
+     * DMS Message Board - Message Boards and Signs
+     * MICROWAVE Microwave Detector - Microwave Detectors
+     * PULL Pull Box - A pull box
+     * RWIS RWIS - Road weather information system
+     * GATE Ramp Gate - The ramp Gates
+     * METER Ramp Meter - The ramp meters
+     * SIGNAL Signal - Traffic Signal
+     * TOWER Tower - The towers
+     * TRENCH
+     */
+
+    function ItsLayerCollection(theMap, exclude) {
+        _classCallCheck(this, ItsLayerCollection);
+
+        this.map = theMap;
+        this._layers = [];
+
+        exclude = (typeof exclude === 'undefined' ? 'undefined' : _typeof(exclude)) == 'object' ? exclude : [];
+
+        for (var i = 0; i < itsConfig.length; i++) {
+            var lyrConfig = itsConfig[i];
+            var addLayer = true;
+
+            for (var j = 0; j < exclude.length; j++) {
+                if (exclude[j] == lyrConfig.itsType) {
+                    addLayer = false;
+                    break;
+                }
+            }
+
+            if (addLayer) {
+                var inventLyr = new _LayerItsInventory2.default(lyrConfig);
+                this['map'].addLayer(inventLyr.olLayer);
+                this._layers.push(inventLyr);
+            }
+        }
+    }
+
+    /**
+     * Return the array of layers in this collection
+     * @returns {Array<LayerItsInventory>} an array of layers
+     */
+
+
+    _createClass(ItsLayerCollection, [{
+        key: 'layers',
+        get: function get() {
+            return this._layers;
+        }
+    }]);
+
+    return ItsLayerCollection;
+}();
+
+nm.ItsLayerCollection = ItsLayerCollection;
+exports.default = ItsLayerCollection;
+
+},{"../layers/LayerItsInventory":348,"../util/colors":362,"../util/provide":364}],341:[function(require,module,exports){
+'use strict';
+
+Object.defineProperty(exports, "__esModule", {
+    value: true
+});
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); /**
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      * Created by gavorhes on 12/16/2015.
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      */
+
+
+var _jquery = require('../jquery');
+
+var _jquery2 = _interopRequireDefault(_jquery);
+
+var _provide = require('../util/provide');
+
+var _provide2 = _interopRequireDefault(_provide);
+
+var _makeGuid = require('../util/makeGuid');
+
+var _makeGuid2 = _interopRequireDefault(_makeGuid);
+
+var _mapMove = require('../olHelpers/mapMove');
+
+var _mapMove2 = _interopRequireDefault(_mapMove);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+var nm = (0, _provide2.default)('collections');
+
+var LayerGroup = function () {
+
+    /**
+     *
+     * @param {object} [groupConfig={}] - group configuration object
+     * @param {string} groupConfig.groupName - the group name
+     * @param {boolean} [groupConfig.collapse=false] - if the group should be collapsed initially
+     * @param {boolean} [groupConfig.addCheck=true] - if the group should have a checkbox controlling visibility of all layers
+     * @param {LayerGroup} [parent=undefined] - the parent group
+     */
+
+    function LayerGroup(groupConfig, parent) {
+        _classCallCheck(this, LayerGroup);
+
+        this.groupLayers = [];
+        this.groupLayersLookup = {};
+        this.groupGroups = [];
+        this.groupGroupsLookup = {};
+        this.itemIdArray = [];
+
+        if (typeof groupConfig == 'undefined') {
+            this.parent = null;
+            this.groupId = 'root';
+            this.groupName = 'root';
+            this.allGroupLookup = { root: this };
+            this.allGroupArray = [this];
+            this.allLayerArray = [];
+            this.allLayerLookup = {};
+            this.layerParentLookup = {};
+            this.collapse = false;
+            this.addCheck = false;
+        } else {
+            this.groupId = (0, _makeGuid2.default)();
+            this.parent = parent;
+            this.groupName = groupConfig.groupName;
+            this.collapse = typeof groupConfig.collapse == 'boolean' ? groupConfig.collapse : false;
+            this.addCheck = typeof groupConfig.addCheck == 'boolean' ? groupConfig.addCheck : true;
+        }
+    }
+
+    /**
+     *
+     * @param {object} groupConfig - configuration object
+     * @param {string} groupConfig.groupName - the group name
+     * @param {boolean} groupConfig.collapse if the group should be collapsed initially
+     * @param {boolean} groupConfig.addCheck if the group should have a checkbox controlling visibility of all layers
+     * @param {Array<LayerGroup>} parents parent groups
+     * @returns {LayerGroup} the layer group just added
+     */
+
+
+    _createClass(LayerGroup, [{
+        key: 'addGroup',
+        value: function addGroup(groupConfig, parents) {
+            var parent = void 0;
+            if (parents.length > 0) {
+                parent = parents[parents.length - 1];
+            } else {
+                parent = 'root';
+            }
+
+            /**
+             * @type {LayerGroup}
+             */
+            var parentGroup = this.allGroupLookup[parent];
+            var newGroup = new LayerGroup(groupConfig, parentGroup);
+            this.allGroupLookup[newGroup.groupId] = newGroup;
+            this.allGroupArray.push(newGroup);
+
+            parentGroup.groupGroups.push(newGroup);
+            parentGroup.groupGroupsLookup[newGroup.groupId] = newGroup;
+
+            if (parentGroup.itemIdArray.indexOf(newGroup.groupId) > 0) {
+                console.log(newGroup.groupId);
+                throw 'layer and group ids must be unique';
+            }
+            parentGroup.itemIdArray.push(newGroup.groupId);
+
+            return newGroup;
+        }
+
+        /**
+         *
+         * @param {LayerBase} newLayer the layer to be added
+         * @param {Array} parents array
+         */
+
+    }, {
+        key: 'addLegendLayer',
+        value: function addLegendLayer(newLayer, parents) {
+            var parent = void 0;
+            if (parents.length > 0) {
+                parent = parents[parents.length - 1];
+            } else {
+                parent = 'root';
+            }
+
+            this.allLayerLookup[newLayer.id] = newLayer;
+            this.allLayerArray.push(newLayer);
+
+            /**
+             * @type {LayerGroup}
+             */
+            var parentGroup = this.allGroupLookup[parent];
+
+            parentGroup.groupLayers.push(newLayer);
+            parentGroup.groupLayersLookup[newLayer.id] = newLayer;
+            if (parentGroup.itemIdArray.indexOf(newLayer.id) > 0) {
+                console.log(newLayer.id);
+                throw 'layer and group ids must be unique';
+            }
+            parentGroup.itemIdArray.push(newLayer.id);
+
+            this.layerParentLookup[newLayer.id] = parentGroup;
+        }
+    }, {
+        key: 'getLegendHtml',
+        value: function getLegendHtml(legendId, options) {
+
+            var legendHtml = '<ul id="' + legendId + '" class="legend-container">';
+
+            legendHtml += '<li>' + options.legendTitle + '<input type="checkbox" checked id="suppress-by-extent-' + legendId + '" class="suppress-by-extent">' + ('<label title="Suppress layers not visible at this zoom level" for="suppress-by-extent-' + legendId + '">') + '<span></span>' + '</label></li>';
+
+            legendHtml += this._buildLegend(this.itemIdArray, this, options.layerDivClasses) + '</ul>';
+
+            return legendHtml;
+        }
+
+        /**
+         * @param {Array} itemIds the items to process
+         * @param {LayerGroup} theGroup new group
+         * @param {Array} [layerDivClasses=[]] optional classes to apply to the layer divs
+         * @static
+         * @returns {string} html string
+         */
+
+    }, {
+        key: '_buildLegend',
+        value: function _buildLegend(itemIds, theGroup, layerDivClasses) {
+
+            if (itemIds.length == 0) {
+                return '';
+            }
+
+            var theHml = '';
+
+            var itemId = itemIds[0];
+
+            if (theGroup.groupLayersLookup[itemId]) {
+
+                /**
+                 * @type {LayerBase}
+                 */
+                var lyr = theGroup.groupLayersLookup[itemId];
+                theHml += '<li id="' + lyr.id + '-layer-li" class="legend-layer-li ' + layerDivClasses.join(' ') + '">' + lyr.getLegendDiv() + '</li>';
+            } else if (theGroup.groupGroupsLookup[itemId]) {
+                /**
+                 * type {LayerGroup}
+                 */
+                var otherGroup = theGroup.groupGroupsLookup[itemId];
+
+                theHml += '<li>';
+                theHml += '<div id="' + otherGroup.groupId + '-legend-layer-div" ' + ('class="legend-layer-group  ' + layerDivClasses.join(' ') + '">');
+
+                if (otherGroup.addCheck) {
+                    theHml += '<input type="checkbox" checked id="' + otherGroup.groupId + '-group-chck">' + ('<label for="' + otherGroup.groupId + '-group-chck" title="Click arrow to expand or collapse">' + otherGroup.groupName + '</label>');
+                } else {
+                    theHml += '<label title="Click arrow to expand or collapse">' + otherGroup.groupName + '</label>';
+                }
+
+                theHml += '<span title="Expand/Collapse" class="layer-group-expander';
+                theHml += (otherGroup.collapse ? ' legend-layer-group-initial-collapse' : '') + '">';
+                theHml += otherGroup.collapse ? '&#9654;' : '&#9660;';
+                theHml += '</span>';
+
+                //parents.push(groupId);
+                theHml += '<ul>' + this._buildLegend(otherGroup.itemIdArray, otherGroup, layerDivClasses) + '</ul>';
+                theHml += '</div>';
+                theHml += '</li>';
+            }
+
+            return theHml + this._buildLegend(itemIds.slice(1), theGroup, layerDivClasses);
+        }
+    }]);
+
+    return LayerGroup;
+}();
+
+/**
+ * a wrapper to make a legend
+ */
+
+
+var LayerLegend = function () {
+
+    /**
+     *
+     * @param {Array} legendItems array of layers or objects with {groupName:  {string}, collapse: {boolean}, addCheck: {boolean}, items: {Array}}
+     * @param {string} divId the div where the legend should be added
+     * @param {object} options for legend
+     * @param {Array} [options.layerDivClasses=[]] optional array of classes to be applied to the layer legend divs for custom styling
+     * @param {string} [options.legendTitle=Legend] the legend title
+     * @param {bool} [options.scaleDependent=true] if legend display is scale dependent
+     */
+
+    function LayerLegend(legendItems, divId, options) {
+        _classCallCheck(this, LayerLegend);
+
+        var _iteratorNormalCompletion = true;
+        var _didIteratorError = false;
+        var _iteratorError = undefined;
+
+        try {
+            for (var _iterator = legendItems[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
+                var i = _step.value;
+
+                if (typeof i == 'undefined') {
+                    throw 'undefined item passed in array to legend constructor';
+                }
+            }
+        } catch (err) {
+            _didIteratorError = true;
+            _iteratorError = err;
+        } finally {
+            try {
+                if (!_iteratorNormalCompletion && _iterator.return) {
+                    _iterator.return();
+                }
+            } finally {
+                if (_didIteratorError) {
+                    throw _iteratorError;
+                }
+            }
+        }
+
+        options = options || {};
+
+        options.legendTitle = typeof options.legendTitle == 'string' ? options.legendTitle : 'Legend';
+        options.scaleDependent = typeof options.scaleDependent == 'boolean' ? options.scaleDependent : true;
+        options.layerDivClasses = options.layerDivClasses || [];
+
+        // if legend display is scale dependent, make sure the mapMove object is initialized first
+        if (options.scaleDependent) {
+            _mapMove2.default.checkInit();
+        }
+
+        this.$divElement = (0, _jquery2.default)('#' + divId);
+
+        this._legendItems = legendItems;
+
+        this.layerGroup = new LayerGroup();
+
+        this._buildTree(legendItems);
+
+        this.legendId = (0, _makeGuid2.default)();
+
+        this.$divElement.append(this.layerGroup.getLegendHtml(this.legendId, options));
+
+        var _iteratorNormalCompletion2 = true;
+        var _didIteratorError2 = false;
+        var _iteratorError2 = undefined;
+
+        try {
+            for (var _iterator2 = this.layerGroup.allLayerArray[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {
+                var l = _step2.value;
+
+                l.applyCollapse();
+            }
+        } catch (err) {
+            _didIteratorError2 = true;
+            _iteratorError2 = err;
+        } finally {
+            try {
+                if (!_iteratorNormalCompletion2 && _iterator2.return) {
+                    _iterator2.return();
+                }
+            } finally {
+                if (_didIteratorError2) {
+                    throw _iteratorError2;
+                }
+            }
+        }
+
+        var _this = this;
+
+        //// if legend display is scale dependent, make sure the mapMove object is initialized first
+        if (options.scaleDependent) {
+            _mapMove2.default.checkInit();
+
+            _mapMove2.default.addCallback(function (ext, zoom, evt) {
+                if (typeof evt == 'undefined' || evt == 'change:resolution') {
+                    var _iteratorNormalCompletion3 = true;
+                    var _didIteratorError3 = false;
+                    var _iteratorError3 = undefined;
+
+                    try {
+                        for (var _iterator3 = this.layerGroup.allLayerArray[Symbol.iterator](), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) {
+                            var lyr = _step3.value;
+
+                            var $lyrLi = (0, _jquery2.default)('#' + lyr.id + '-layer-li');
+                            if (zoom > lyr.maxZoom || zoom < lyr.minZoom) {
+                                $lyrLi.addClass('layer-not-visible');
+                            } else {
+                                $lyrLi.removeClass('layer-not-visible');
+                            }
+                        }
+                    } catch (err) {
+                        _didIteratorError3 = true;
+                        _iteratorError3 = err;
+                    } finally {
+                        try {
+                            if (!_iteratorNormalCompletion3 && _iterator3.return) {
+                                _iterator3.return();
+                            }
+                        } finally {
+                            if (_didIteratorError3) {
+                                throw _iteratorError3;
+                            }
+                        }
+                    }
+                }
+            }, this, 100, true, 'legend1');
+        }
+
+        // <editor-fold desc="add event listeners">
+
+        this.$divElement.find(".suppress-by-extent").change(function () {
+            var legendLayerLis = (0, _jquery2.default)('.legend-layer-li');
+            if (this.checked) {
+                legendLayerLis.removeClass('layer-force-show');
+            } else {
+                legendLayerLis.addClass('layer-force-show');
+            }
+        });
+
+        this.$divElement.find('.legend-check').change(function () {
+            var lyrId = this.id.replace('-legend-layer-check', '');
+            _this.layerGroup.allLayerLookup[lyrId].visible = this.checked;
+        });
+
+        this.$divElement.find('.legend-layer-group > input[type=checkbox]').change(function () {
+            (0, _jquery2.default)(this).siblings('ul').find('input[type=checkbox]').prop('checked', this.checked).trigger('change');
+        });
+
+        this.$divElement.find('.layer-group-expander').click(function () {
+            var $this = (0, _jquery2.default)(this);
+            $this.removeClass('legend-layer-group-initial-collapse');
+
+            $this.siblings('ul').slideToggle();
+
+            if ($this.hasClass('legend-layer-group-collapsed')) {
+                $this.removeClass('legend-layer-group-collapsed');
+                $this.html('&#9660;');
+            } else {
+                $this.addClass('legend-layer-group-collapsed');
+                $this.html('&#9654;');
+            }
+        });
+
+        this.$divElement.find('.legend-layer-group-initial-collapse').trigger('click');
+        // </editor-fold>
+    }
+
+    /**
+     * @param {Array} [legendItems=this._layerConfig] the legend items
+     * @param {Array} [parents=[]] the ordered list of groups in which this item is a member
+     * @private
+     */
+
+
+    _createClass(LayerLegend, [{
+        key: '_buildTree',
+        value: function _buildTree(legendItems, parents) {
+
+            if (legendItems.length == 0) {
+                return;
+            }
+
+            var oneItem = legendItems[0];
+
+            //reset the parent if the item is in the base array
+            if (this._legendItems.indexOf(oneItem) > -1 || typeof parents == 'undefined') {
+                parents = [];
+            }
+
+            if (typeof oneItem['groupName'] !== 'undefined') {
+                var groupItem = legendItems[0];
+                var newGroup = this.layerGroup.addGroup(groupItem, parents);
+                parents.push(newGroup.groupId);
+                this._buildTree(groupItem.items, parents);
+            } else {
+                /**
+                 * @type {LayerBase}
+                 */
+                var layerItem = legendItems[0];
+
+                this.layerGroup.addLegendLayer(layerItem, parents);
+            }
+
+            this._buildTree(legendItems.slice(1), parents);
+        }
+    }, {
+        key: 'showAll',
+        set: function set(val) {}
+    }]);
+
+    return LayerLegend;
+}();
+
+nm.LayerLegend = LayerLegend;
+exports.default = LayerLegend;
+
+},{"../jquery":342,"../olHelpers/mapMove":351,"../util/makeGuid":363,"../util/provide":364}],342:[function(require,module,exports){
+(function (global){
+'use strict';
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+/**
+ * Created by gavorhes on 5/3/2016.
+ */
+global.jQuery = require('jquery');
+
+exports.default = global.jQuery;
+
+}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
+
+},{"jquery":339}],343:[function(require,module,exports){
+'use strict';
+
+Object.defineProperty(exports, "__esModule", {
+    value: true
+});
+
+var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol ? "symbol" : typeof obj; };
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+var _jquery = require('../jquery');
+
+var _jquery2 = _interopRequireDefault(_jquery);
+
+var _makeGuid = require('../util/makeGuid');
+
+var _makeGuid2 = _interopRequireDefault(_makeGuid);
+
+var _zoomResolutionConvert = require('../olHelpers/zoomResolutionConvert');
+
+var zoomResolutionConvert = _interopRequireWildcard(_zoomResolutionConvert);
+
+var _provide = require('../util/provide');
+
+var _provide2 = _interopRequireDefault(_provide);
+
+function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+var nm = (0, _provide2.default)('layers');
+
+/**
+ * The base layer class
+ * @abstract
+ */
+
+var LayerBase = function () {
+    /**
+     * The base layer for all others
+     * @param {string} url - url for source
+     * @param {object} options - config
+     * @param {string} [options.id=makeGuid()] - layer id
+     * @param {string} [options.name=Unnamed Layer] - layer name
+     * @param {number} [options.opacity=1] - opacity
+     * @param {boolean} [options.visible=true] - default visible
+     * @param {number} [options.minZoom=undefined] - min zoom level, 0 - 28
+     * @param {number} [options.maxZoom=undefined] - max zoom level, 0 - 28
+     * @param {object} [options.params={}] - the get parameters to include to retrieve the layer
+     * @param {number} [options.zIndex=0] - the z index for the layer
+     * @param {function} [options.loadCallback] - function to call on load, context this is the layer object
+     * @param {boolean} [options.legendCollapse=false] - if the legend item should be initially collapsed
+     * @param {boolean} [options.legendCheckbox=true] - if the legend item should have a checkbox for visibility
+     * @param {boolean} [options.legendContent=undefined] - additional content to add to the legend
+     */
+
+    function LayerBase(url, options) {
+        _classCallCheck(this, LayerBase);
+
+        options = options || {};
+
+        if (typeof url !== 'string') {
+            throw 'Invalid URL';
+        }
+        this._url = url;
+
+        this._params = _typeof(options.params) == 'object' ? options.params : {};
+        this._legendCollapse = typeof options.legendCollapse == 'boolean' ? options.legendCollapse : false;
+        this._legendCheckbox = typeof options.legendCheckbox == 'boolean' ? options.legendCheckbox : true;
+
+        this.id = options.id || (0, _makeGuid2.default)();
+        this._name = options.name || 'Unnamed Layer';
+        this.animate = false;
+        this._opacity = typeof options.opacity == 'number' ? options.opacity : 1;
+
+        if (this._opacity > 1) {
+            this._opacity = 1;
+        } else if (this._opacity < 0) {
+            this._opacity = 0;
+        }
+
+        this._visible = typeof options.visible === 'boolean' ? options.visible : true;
+
+        this._source = undefined;
+        this.olLayer = undefined;
+        this._loaded = false;
+
+        this._maxResolution = zoomResolutionConvert.zoomToResolution(options.minZoom);
+        if (typeof this._maxResolution !== 'undefined') {
+            this._maxResolution += 0.00001;
+        }
+        this._minResolution = zoomResolutionConvert.zoomToResolution(options.maxZoom);
+
+        this._minZoom = typeof options.minZoom == 'number' ? options.minZoom : undefined;
+        this._maxZoom = typeof options.maxZoom == 'number' ? options.maxZoom : undefined;
+        this._zIndex = typeof options.zIndex == 'number' ? options.zIndex : 0;
+
+        this.loadCallback = typeof options.loadCallback == 'function' ? options.loadCallback : function () {};
+
+        this._legendContent = '';
+
+        if (this._legendCheckbox) {
+            this._legendContent += '<input type="checkbox" ' + (this.visible ? 'checked' : '') + ' ' + ('class="legend-check" id="' + this.id + '-legend-layer-check"><span></span>');
+            this._legendContent += '<label for="' + this.id + '-legend-layer-check" class="legend-layer-name">' + this.name + '</label>';
+        } else {
+            this._legendContent += '<label class="legend-layer-name">' + this.name + '</label>';
+        }
+
+        this._$legendDiv = null;
+        this._applyCollapseCalled = false;
+        this._addLegendContent(typeof options.legendContent === 'string' ? options.legendContent : undefined);
+    }
+
+    /**
+     * base load function, sets _loaded = true if it is not already
+     * @protected
+     * @returns {boolean} if already loaded
+     */
+
+
+    _createClass(LayerBase, [{
+        key: '_load',
+        value: function _load() {
+            if (this.loaded == true) {
+                return true;
+            } else {
+                this._loaded = true;
+
+                return false;
+            }
+        }
+
+        /**
+         * Get the legend html, be sure to only add to the DOM once
+         * @returns {string} html for layer wrapped in a div
+         */
+
+    }, {
+        key: 'getLegendDiv',
+        value: function getLegendDiv() {
+            return '<div class="legend-layer-div" id="' + this.id + '-legend-layer-div">' + this._legendContent + '</div>';
+        }
+
+        /**
+         *
+         * @param {string|undefined} additionalContent - additional content to add to legend
+         * @private
+         */
+
+    }, {
+        key: '_addLegendContent',
+        value: function _addLegendContent(additionalContent) {
+            additionalContent = typeof additionalContent == 'string' ? additionalContent : '';
+
+            var addCollapse = additionalContent.indexOf('<ul>') > -1;
+
+            if (addCollapse) {
+                additionalContent = '<span class="legend-items-expander" title="Expand/Collapse">&#9660;</span>' + additionalContent;
+            }
+
+            this._legendContent += additionalContent;
+
+            this._$legendDiv = (0, _jquery2.default)('#' + this.id + '-legend-layer-div');
+
+            if (this._$legendDiv.length > 0) {
+                this._$legendDiv.append(additionalContent);
+                this.applyCollapse();
+            }
+        }
+
+        /**
+         * add additional content to the legend
+         * @param {string} [additionalContent=] - additonal content to add
+         */
+
+    }, {
+        key: 'addLegendContent',
+        value: function addLegendContent(additionalContent) {
+            this._addLegendContent(additionalContent);
+        }
+    }, {
+        key: 'applyCollapse',
+        value: function applyCollapse() {
+            if (this._applyCollapseCalled) {
+                console.log('collapse already applied');
+
+                return undefined;
+            }
+
+            this._$legendDiv = (0, _jquery2.default)('#' + this.id + '-legend-layer-div');
+
+            if (this._$legendDiv.length > 0) {
+
+                var $expander = this._$legendDiv.find('.legend-items-expander');
+
+                if ($expander.length > 0) {
+                    this._applyCollapseCalled = true;
+
+                    $expander.click(function () {
+                        var $this = (0, _jquery2.default)(this);
+
+                        $this.siblings('ul').slideToggle();
+
+                        if ($this.hasClass('legend-layer-group-collapsed')) {
+                            $this.removeClass('legend-layer-group-collapsed');
+                            $this.html('&#9660;');
+                        } else {
+                            $this.addClass('legend-layer-group-collapsed');
+                            $this.html('&#9654;');
+                        }
+                    });
+
+                    if (this._legendCollapse) {
+                        $expander.trigger('click');
+                    }
+                }
+            }
+        }
+
+        /**
+         * trick to refresh the layer
+         */
+
+    }, {
+        key: 'refresh',
+        value: function refresh() {
+            if (this.source) {
+                this.source.refresh();
+                //let src = this.source;
+                //this.olLayer.setSource(undefined);
+                //this.olLayer.setSource(src);
+            }
+        }
+
+        /**
+         * get the legend content
+         * @type {string}
+         */
+
+    }, {
+        key: 'legendContent',
+        get: function get() {
+            return this._legendContent;
+        }
+
+        /**
+         * set the legend content directly
+         * @param {string} newVal - new content
+         * @protected
+         */
+        ,
+        set: function set(newVal) {
+            this._legendContent = newVal;
+        }
+
+        /**
+         * get the map get params
+         * @type {object}
+         */
+
+    }, {
+        key: 'params',
+        get: function get() {
+            return this._params;
+        }
+
+        /**
+         * set the map get params
+         * @param {object} newParams - new get params
+         * @protected
+         */
+        ,
+        set: function set(newParams) {
+            this._params = newParams;
+        }
+
+        /**
+         * get the minimum resolution
+         * @type {number|*}
+         */
+
+    }, {
+        key: 'minResolution',
+        get: function get() {
+            return this._minResolution;
+        }
+
+        /**
+         * get the maximum resolution
+         * @type {number|*}
+         */
+
+    }, {
+        key: 'maxResolution',
+        get: function get() {
+            return this._maxResolution;
+        }
+
+        /**
+         * get min zoom
+         * @type {number|*}
+         */
+
+    }, {
+        key: 'minZoom',
+        get: function get() {
+            return this._minZoom;
+        }
+
+        /**
+         * get max zoom
+         * @type {number|*}
+         */
+
+    }, {
+        key: 'maxZoom',
+        get: function get() {
+            return this._maxZoom;
+        }
+
+        /**
+         * get the url
+         * @type {string}
+         */
+
+    }, {
+        key: 'url',
+        get: function get() {
+            return this._url;
+        }
+
+        /**
+         * Get the layer visibility
+         * @type {boolean}
+         */
+
+    }, {
+        key: 'visible',
+        get: function get() {
+            return this._visible;
+        }
+
+        /**
+         * Set the layer visibility
+         * @param {boolean} visibility - layer visibility
+         */
+        ,
+        set: function set(visibility) {
+            this._visible = visibility;
+            if (this.olLayer) {
+                this.olLayer.setVisible(this._visible);
+                if (visibility && !this._loaded) {
+                    this._load();
+                }
+            }
+        }
+
+        /**
+         * Get the layer opacity
+         * @type {number}
+         */
+
+    }, {
+        key: 'opacity',
+        get: function get() {
+            return this._opacity;
+        }
+
+        /**
+         * Set the layer opacity
+         * @param {number} opacity - layer opacity
+         */
+        ,
+        set: function set(opacity) {
+            this._opacity = opacity;
+            if (this.olLayer) {
+                this.olLayer.setOpacity(this._opacity);
+            }
+        }
+
+        /**
+         * Get the layer name
+         * @type {string}
+         */
+
+    }, {
+        key: 'name',
+        get: function get() {
+            return this._name;
+        }
+
+        /**
+         * set the layer name
+         * @param {string} newName - the new name
+         */
+        ,
+        set: function set(newName) {
+            this._name = newName;
+        }
+
+        /**
+         * Check if the layer is loaded
+         * @type {boolean}
+         */
+
+    }, {
+        key: 'loaded',
+        get: function get() {
+            return this._loaded;
+        }
+
+        /**
+         * get the layer source
+         * @type {*}
+         */
+
+    }, {
+        key: 'source',
+        get: function get() {
+            return this._source;
+        }
+
+        /**
+         * get the z index
+         * @type {number}
+         */
+
+    }, {
+        key: 'zIndex',
+        get: function get() {
+            return this._zIndex;
+        }
+
+        /**
+         * set the z index
+         * @param {number} newZ - new Z index
+         */
+        ,
+        set: function set(newZ) {
+            this._zIndex = newZ;
+            this.olLayer.setZIndex(this.zIndex);
+        }
+    }]);
+
+    return LayerBase;
+}();
+
+nm.LayerBase = LayerBase;
+exports.default = LayerBase;
+
+},{"../jquery":342,"../olHelpers/zoomResolutionConvert":358,"../util/makeGuid":363,"../util/provide":364}],344:[function(require,module,exports){
+'use strict';
+
+Object.defineProperty(exports, "__esModule", {
+    value: true
+});
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+var _set = function set(object, property, value, receiver) { var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent !== null) { set(parent, property, value, receiver); } } else if ("value" in desc && desc.writable) { desc.value = value; } else { var setter = desc.set; if (setter !== undefined) { setter.call(receiver, value); } } return value; };
+
+var _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if ("value" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };
+
+var _jquery = require('../jquery');
+
+var _jquery2 = _interopRequireDefault(_jquery);
+
+var _LayerBase2 = require('./LayerBase');
+
+var _LayerBase3 = _interopRequireDefault(_LayerBase2);
+
+var _mapMove = require('../olHelpers/mapMove');
+
+var _mapMove2 = _interopRequireDefault(_mapMove);
+
+var _provide = require('../util/provide');
+
+var _provide2 = _interopRequireDefault(_provide);
+
+var _ol = require('../ol/ol');
+
+var _ol2 = _interopRequireDefault(_ol);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
+
+var nm = (0, _provide2.default)('layers');
+
+/**
+ * The make mapMoveGetParams function takes the extent and the zoom level
+ * context is 'this' object, probably want to do something with this.mapMoveParams
+ * @callback mapMoveMakeGetParams
+ * @param {LayerBaseVector} lyr
+ * @param {object} extent
+ * @param {number} extent.minX
+ * @param {number} extent.minY
+ * @param {number} extent.maxX
+ * @param {number} extent.maxY
+ * @param {number} zoomLevel
+ */
+
+/**
+ * The Vector layer base
+ * @augments LayerBase
+ * @abstract
+ */
+
+var LayerBaseVector = function (_LayerBase) {
+    _inherits(LayerBaseVector, _LayerBase);
+
+    /**
+     * The base vector layer
+     * @param {string} url - pass an empty string to prevent default load and add from a json source
+     * @param {object} options - config
+     * @param {string} [options.id] - layer id
+     * @param {string} [options.name=Unnamed Layer] - layer name
+     * @param {number} [options.opacity=1] - opacity
+     * @param {boolean} [options.visible=true] - default visible
+     * @param {number} [options.minZoom=undefined] - min zoom level, 0 - 28
+     * @param {number} [options.maxZoom=undefined] - max zoom level, 0 - 28
+     * @param {object} [options.params={}] the get parameters to include to retrieve the layer
+     * @param {number} [options.zIndex=0] the z index for the layer
+     * @param {function} [options.loadCallback] function to call on load, context this is the layer object
+     * @param {boolean} [options.legendCollapse=false] if the legend item should be initially collapsed
+     * @param {boolean} [options.legendCheckbox=true] if the legend item should have a checkbox for visibility
+     * @param {boolean} [options.legendContent] additional content to add to the legend
+     *
+     * @param {boolean} [options.autoLoad=false] if the layer should auto load if not visible
+     * @param {object} [options.style=undefined] the layer style, use openlayers default style if not defined
+     * @param {boolean} [options.onDemand=false] if the layer should be loaded by extent on map move
+     * @param {number} [options.onDemandDelay=300] delay before the map move callback should be called
+     * @param {mapMoveMakeGetParams} [options.mapMoveMakeGetParams=function(lyr, extent, zoomLevel){}] function to create additional map move params
+     * @param {MapMoveCls} [options.mapMoveObj=mapMove] alternate map move object for use with multi map pages
+     *
+     */
+
+    function LayerBaseVector(url, options) {
+        _classCallCheck(this, LayerBaseVector);
+
+        //prevent regular load if no url has been provided
+
+        var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(LayerBaseVector).call(this, url, options));
+
+        if (_this.url.trim() == '') {
+            _this._loaded = true;
+        }
+
+        _this._style = typeof options.style == 'undefined' ? undefined : options.style;
+
+        if (_this.visible) {
+            _this._autoLoad = true;
+        } else {
+            _this._autoLoad = typeof options['autoLoad'] == 'boolean' ? options['autoLoad'] : false;
+        }
+
+        _this._onDemand = typeof options.onDemand == 'boolean' ? options.onDemand : false;
+        _this._onDemandDelay = typeof options.onDemandDelay == 'number' ? options.onDemandDelay : 300;
+
+        if (options.mapMoveObj) {
+            _this._mapMove = options.mapMoveObj;
+        } else {
+            _this._mapMove = _this._onDemand ? _mapMove2.default : undefined;
+        }
+
+        _this._mapMoveMakeGetParams = typeof options.mapMoveMakeGetParams == 'function' ? options.mapMoveMakeGetParams : function (lyr, extent, zoomLevel) {
+            return {};
+        };
+
+        if (_this._onDemand) {
+            _this._loaded = true;
+            _this._mapMoveParams = {};
+            _this._mapMove.checkInit();
+            _this._mapMove.addVectorLayer(_this);
+        }
+
+        _this._source = new _ol2.default.source.Vector();
+
+        /**
+         *
+         * @type {ol.layer.Vector|ol.layer.Base}
+         */
+        _this.olLayer = new _ol2.default.layer.Vector({
+            source: _this._source,
+            visible: _this.visible,
+            style: _this.style,
+            minResolution: _this._minResolution,
+            maxResolution: _this._maxResolution,
+            zIndex: _this._zIndex
+        });
+        return _this;
+    }
+
+    /**
+     * dummy to be overridden
+     * @param {object} featureCollection - geojson or esrijson object
+     */
+
+
+    _createClass(LayerBaseVector, [{
+        key: 'addFeatures',
+        value: function addFeatures(featureCollection) {
+            console.log('Layer vector base addFeatures is a placeholder and does nothing');
+        }
+
+        /**
+         * Before call to map move callback, can prevent call by returning false
+         * @param {number} zoom - zoom level
+         * @param {string} [evtType=undefined] undefined for initial load, otherwise one of 'change:center', 'change:resolution'
+         * @returns {boolean} if the call should proceed
+         */
+
+    }, {
+        key: 'mapMoveBefore',
+        value: function mapMoveBefore(zoom, evtType) {
+            if (this.minZoom !== undefined) {
+                if (zoom < this.minZoom) {
+                    return false;
+                }
+            }
+
+            if (this.maxZoom !== undefined) {
+                if (zoom > this.maxZoom) {
+                    return false;
+                }
+            }
+
+            return this.visible;
+        }
+
+        /**
+         * callback to generate the parameters passed in the get request
+         * @param {object} extent - extent object
+         * @param {number} extent.minX - minX
+         * @param {number} extent.minY - minY
+         * @param {number} extent.maxX - maxX
+         * @param {number} extent.maxY - maxY
+         * @param {number} zoomLevel - zoom level
+         */
+
+    }, {
+        key: 'mapMoveMakeGetParams',
+        value: function mapMoveMakeGetParams(extent, zoomLevel) {
+            this._mapMoveParams = {};
+            _jquery2.default.extend(this._mapMoveParams, this.params);
+            _jquery2.default.extend(this._mapMoveParams, this._mapMoveMakeGetParams(this, extent, zoomLevel));
+        }
+
+        /**
+         * callback function on map move
+         * @param {object} d - the json response
+         */
+
+    }, {
+        key: 'mapMoveCallback',
+        value: function mapMoveCallback(d) {
+            if (this.source) {
+                this._source.clear();
+            }
+        }
+
+        /**
+         * clear features in the layer
+         */
+
+    }, {
+        key: 'clear',
+        value: function clear() {
+            if (this._source) {
+                this._source.clear();
+            }
+        }
+
+        /**
+         * get on demand delay in miliseconds
+         * @type {number|*}
+         */
+
+    }, {
+        key: 'onDemandDelay',
+        get: function get() {
+            return this._onDemandDelay;
+        }
+
+        /**
+         * get if the layer is autoloaded
+         * @type {boolean}
+         */
+
+    }, {
+        key: 'autoLoad',
+        get: function get() {
+            return this._autoLoad;
+        }
+
+        /**
+         * get the style definition
+         * @type {ol.Style|styleFunc}
+         */
+
+    }, {
+        key: 'style',
+        get: function get() {
+            return this._style;
+        }
+
+        /**
+         * set the style
+         * @param {ol.Style|styleFunc} style - the style or function
+         */
+        ,
+        set: function set(style) {
+            this._style = style;
+            this.olLayer.setStyle(this._style);
+        }
+
+        /**
+         * get the map CRS if it is defined by the map move object
+         * @type {string|*}
+         */
+
+    }, {
+        key: 'mapCrs',
+        get: function get() {
+            if (this._mapMove) {
+                return this._mapMove.map.getView().getProjection().getCode();
+            } else {
+                return undefined;
+            }
+        }
+
+        /**
+         * get the map move object
+         * @type {MapMoveCls|*}
+         */
+
+    }, {
+        key: 'mapMove',
+        get: function get() {
+            return this._mapMove;
+        }
+
+        /**
+         * map move params
+         * @type {object}
+         */
+
+    }, {
+        key: 'mapMoveParams',
+        get: function get() {
+            return this._mapMoveParams;
+        }
+
+        /**
+        * Get the layer visibility
+        * @type {boolean}
+        */
+
+    }, {
+        key: 'visible',
+        get: function get() {
+            return _get(Object.getPrototypeOf(LayerBaseVector.prototype), 'visible', this);
+        }
+
+        /**
+         * Set the layer visibility
+         * @type {boolean}
+         * @override
+         */
+        ,
+        set: function set(visibility) {
+            _set(Object.getPrototypeOf(LayerBaseVector.prototype), 'visible', visibility, this);
+
+            if (this._onDemand) {
+                this.mapMove.triggerLyrLoad(this);
+            }
+        }
+
+        /**
+         * get the layer vector source
+         * @override
+         * @type {ol.source.Vector}
+         */
+
+    }, {
+        key: 'source',
+        get: function get() {
+            return _get(Object.getPrototypeOf(LayerBaseVector.prototype), 'source', this);
+        }
+
+        /**
+         * array of ol features
+         * @type {Array.<ol.Feature>}
+         */
+
+    }, {
+        key: 'features',
+        get: function get() {
+            return this.source.getFeatures();
+        }
+    }]);
+
+    return LayerBaseVector;
+}(_LayerBase3.default);
+
+nm.LayerBaseVector = LayerBaseVector;
+exports.default = LayerBaseVector;
+
+},{"../jquery":342,"../ol/ol":360,"../olHelpers/mapMove":351,"../util/provide":364,"./LayerBase":343}],345:[function(require,module,exports){
+'use strict';
+
+Object.defineProperty(exports, "__esModule", {
+    value: true
+});
+
+var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol ? "symbol" : typeof obj; };
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+var _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if ("value" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };
+
+var _jquery = require('../jquery');
+
+var _jquery2 = _interopRequireDefault(_jquery);
+
+var _LayerBaseVector2 = require('./LayerBaseVector');
+
+var _LayerBaseVector3 = _interopRequireDefault(_LayerBaseVector2);
+
+var _esriToOlStyle = require('../olHelpers/esriToOlStyle');
+
+var esriToOl = _interopRequireWildcard(_esriToOlStyle);
+
+var _mapMove = require('../olHelpers/mapMove');
+
+var _mapMove2 = _interopRequireDefault(_mapMove);
+
+var _provide = require('../util/provide');
+
+var _provide2 = _interopRequireDefault(_provide);
+
+var _ol = require('../ol/ol');
+
+var _ol2 = _interopRequireDefault(_ol);
+
+function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /**
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                * Created by gavorhes on 11/2/2015.
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                */
+
+var nm = (0, _provide2.default)('layers');
+
+/**
+ * Base layer for esri vector layers
+ * @augments LayerBaseVector
+ */
+
+var LayerBaseVectorEsri = function (_LayerBaseVector) {
+    _inherits(LayerBaseVectorEsri, _LayerBaseVector);
+
+    /**
+     * The base vector layer
+     * @param {string} url - url for source
+     * @param {object} options - config
+     * @param {string} [options.id] - layer id
+     * @param {string} [options.name=Unnamed Layer] - layer name
+     * @param {number} [options.opacity=1] - opacity
+     * @param {boolean} [options.visible=true] - default visible
+     * @param {number} [options.minZoom=undefined] - min zoom level, 0 - 28
+     * @param {number} [options.maxZoom=undefined] - max zoom level, 0 - 28
+     * @param {object} [options.params={}] the get parameters to include to retrieve the layer
+     * @param {number} [options.zIndex=0] the z index for the layer
+     * @param {function} [options.loadCallback] function to call on load, context this is the layer object
+     * @param {boolean} [options.legendCollapse=false] if the legend item should be initially collapsed
+     * @param {boolean} [options.legendCheckbox=true] if the legend item should have a checkbox for visibility
+     * @param {boolean} [options.legendContent] additional content to add to the legend
+     *
+     * @param {boolean} [options.autoLoad=false] if the layer should auto load if not visible
+     * @param {object} [options.style=undefined] the layer style, use openlayers default style if not defined
+     * @param {boolean} [options.onDemand=false] if the layer should be loaded by extent on map move
+     * @param {number} [options.onDemandDelay=300] delay before the map move callback should be called
+     * @param {MapMoveCls} [options.mapMoveObj=mapMove] alternate map move object for use with multi map pages
+     *
+     * @param {string} [options.where=1=1] the layer filter clause
+     * @param {string} [options.outFields=*] comma separated list of output fields, defaults to all
+     * @param {string} [options.format=pjson] the format the retrieve the data
+     * @param {number} [options.outSR=3857] the output spatial reference, defaults to web mercator
+     * @param {boolean} [options.useEsriStyle=false] if the map service style should be used
+     * @param {boolean} [options.collapseLegend=false] if the legend should be initially collapsed
+     * @param {number} [options.mapMoveMakeGetParams=function(extent, zoomLevel){}] function to create additional map move params
+     */
+
+    function LayerBaseVectorEsri(url, options) {
+        _classCallCheck(this, LayerBaseVectorEsri);
+
+        if (_typeof(options.params) != 'object') {
+            options.params = {};
+        }
+        options.params['where'] = options.where || '1=1';
+        options.params['outFields'] = options.outFields || '*';
+        options.params['f'] = options.format || 'pjson';
+        options.params['outSR'] = options.outSR || 3857;
+
+        var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(LayerBaseVectorEsri).call(this, url, options));
+
+        _this._outSR = _this.params['outSR'];
+        _this._esriFormat = new _ol2.default.format.EsriJSON();
+
+        if (_this._url[_this._url.length - 1] !== '/') {
+            _this._url += '/';
+        }
+
+        _this._urlCopy = _this.url;
+        _this._url += 'query?callback=?';
+
+        if (_this.autoLoad || _this.visible) {
+            _this._load();
+        }
+
+        _this._useEsriStyle = typeof options.useEsriStyle == 'boolean' ? options.useEsriStyle : false;
+
+        if (_this._useEsriStyle) {
+            _this.addLegendContent();
+        }
+        return _this;
+    }
+
+    /**
+     * add additional content to the legend
+     * @param {string} [additionalContent=''] additional content to add to legend
+     */
+
+
+    _createClass(LayerBaseVectorEsri, [{
+        key: 'addLegendContent',
+        value: function addLegendContent(additionalContent) {
+            var _this2 = this;
+
+            if (!this._useEsriStyle) {
+                _get(Object.getPrototypeOf(LayerBaseVectorEsri.prototype), 'addLegendContent', this).call(this, additionalContent);
+            } else {
+                _jquery2.default.get(this._urlCopy + '?f=pjson&callback=?', {}, function (d) {
+                    if (d['subLayers'].length > 0) {
+                        alert('should only use single feature layers, not groups');
+
+                        return;
+                    }
+
+                    var newStyleAndLegend = esriToOl.makeFeatureServiceLegendAndSymbol(d);
+                    _this2.style = newStyleAndLegend.style;
+                    _get(Object.getPrototypeOf(LayerBaseVectorEsri.prototype), 'addLegendContent', _this2).call(_this2, newStyleAndLegend.legend);
+                }, 'json');
+            }
+        }
+
+        /**
+         * add feature collection
+         * @param {object} featureCollection - features as esrijson
+         */
+
+    }, {
+        key: 'addFeatures',
+        value: function addFeatures(featureCollection) {
+            var feats = this._esriFormat.readFeatures(featureCollection);
+            this.source.addFeatures(feats);
+        }
+
+        /**
+         * trigger load features
+         * @protected
+         * @returns {boolean} if already loaded
+         */
+
+    }, {
+        key: '_load',
+        value: function _load() {
+            var _this3 = this;
+
+            if (_get(Object.getPrototypeOf(LayerBaseVectorEsri.prototype), '_load', this).call(this)) {
+                return true;
+            }
+            _jquery2.default.get(this._url, this.params, function (d) {
+                _this3.addFeatures(d);
+                _this3.loadCallback(_this3);
+            }, 'json').fail(function () {
+                _this3._loaded = false;
+            });
+
+            return false;
+        }
+
+        /**
+         * callback to generate the parameters passed in the get request
+         * @param {object} extent - extent object
+         * @param {number} extent.minX - minX
+         * @param {number} extent.minY - minY
+         * @param {number} extent.maxX - maxX
+         * @param {number} extent.maxY - maxY
+         * @param {number} zoomLevel - zoom level
+         */
+
+    }, {
+        key: 'mapMoveMakeGetParams',
+        value: function mapMoveMakeGetParams(extent, zoomLevel) {
+            _get(Object.getPrototypeOf(LayerBaseVectorEsri.prototype), 'mapMoveMakeGetParams', this).call(this, extent, zoomLevel);
+            this.mapMoveParams['geometry'] = extent.minX + ',' + extent.minY + ',' + extent.maxX + ',' + extent.maxY;
+            this.mapMoveParams['geometryType'] = 'esriGeometryEnvelope';
+            this.mapMoveParams['spatialRel'] = 'esriSpatialRelIntersects';
+            this.mapMoveParams['spatialRel'] = 'esriSpatialRelIntersects';
+            this.mapMoveParams['inSR'] = 3857;
+            if (this._outSR == 3857) {
+                this.mapMoveParams['geometryPrecision'] = 1;
+            }
+        }
+
+        /**
+         * Before call to map move callback, can prevent call by returning false
+         * @param {number} zoom - zoom level
+         * @param {string} [evtType=undefined] undefined for initial load, otherwise one of 'change:center', 'change:resolution'
+         * @returns {boolean} if the call should proceed
+         */
+
+    }, {
+        key: 'mapMoveBefore',
+        value: function mapMoveBefore(zoom, evtType) {
+            return _get(Object.getPrototypeOf(LayerBaseVectorEsri.prototype), 'mapMoveBefore', this).call(this, zoom, evtType);
+            //if (super.mapMoveBefore(zoom, evtType)){
+            //    //place holder for additional processing
+            //    return true;
+            //} else {
+            //    return false;
+            //}
+        }
+
+        /**
+         * callback function on map move
+         * @param {object} d - the json response
+         */
+
+    }, {
+        key: 'mapMoveCallback',
+        value: function mapMoveCallback(d) {
+            _get(Object.getPrototypeOf(LayerBaseVectorEsri.prototype), 'mapMoveCallback', this).call(this, d);
+            this.source.addFeatures(this._esriFormat.readFeatures(d));
+        }
+    }]);
+
+    return LayerBaseVectorEsri;
+}(_LayerBaseVector3.default);
+
+nm.LayerBaseVectorEsri = LayerBaseVectorEsri;
+exports.default = LayerBaseVectorEsri;
+
+},{"../jquery":342,"../ol/ol":360,"../olHelpers/esriToOlStyle":349,"../olHelpers/mapMove":351,"../util/provide":364,"./LayerBaseVector":344}],346:[function(require,module,exports){
+'use strict';
+
+Object.defineProperty(exports, "__esModule", {
+    value: true
+});
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+var _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if ("value" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };
+
+var _jquery = require('../jquery');
+
+var _jquery2 = _interopRequireDefault(_jquery);
+
+var _LayerBaseVector2 = require('./LayerBaseVector');
+
+var _LayerBaseVector3 = _interopRequireDefault(_LayerBaseVector2);
+
+var _provide = require('../util/provide');
+
+var _provide2 = _interopRequireDefault(_provide);
+
+var _ol = require('../ol/ol');
+
+var _ol2 = _interopRequireDefault(_ol);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /**
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                * Created by gavorhes on 11/2/2015.
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                */
+
+var nm = (0, _provide2.default)('layers');
+
+/**
+ * The Vector GeoJson Layer
+ * @augments LayerBaseVector
+ */
+
+var LayerBaseVectorGeoJson = function (_LayerBaseVector) {
+    _inherits(LayerBaseVectorGeoJson, _LayerBaseVector);
+
+    /**
+     * @param {string|undefined|null} url - resource url, set to '' to make blank layer
+     * @param {object} options - config
+     * @param {string} [options.id] - layer id
+     * @param {string} [options.name=Unnamed Layer] - layer name
+     * @param {number} [options.opacity=1] - opacity
+     * @param {boolean} [options.visible=true] - default visible
+     * @param {number} [options.minZoom=undefined] - min zoom level, 0 - 28
+     * @param {number} [options.maxZoom=undefined] - max zoom level, 0 - 28
+     * @param {object} [options.params={}] the get parameters to include to retrieve the layer
+     * @param {number} [options.zIndex=0] the z index for the layer
+     * @param {function} [options.loadCallback] function to call on load, context this is the layer object
+     * @param {boolean} [options.legendCollapse=false] if the legend item should be initially collapsed
+     * @param {boolean} [options.legendCheckbox=true] if the legend item should have a checkbox for visibility
+     * @param {boolean} [options.legendContent] additional content to add to the legend
+     *
+     * @param {boolean} [options.autoLoad=false] if the layer should auto load if not visible
+     * @param {object} [options.style=undefined] the layer style, use openlayers default style if not defined
+     * @param {boolean} [options.onDemand=false] if the layer should be loaded by extent on map move
+     * @param {number} [options.onDemandDelay=300] delay before the map move callback should be called
+     *
+     * @param {object} [options.transform={}] SR transform, set as false for no transform
+     * @param {string} options.transform.dataProjection=EPSG:4326 the data CRS
+     * @param {string} options.transform.featureProjection=EPSG:3857 the feature/map CRS
+     * @param {mapMoveMakeGetParams} [options.mapMoveMakeGetParams=function(lyr, extent, zoomLevel){}] function to create additional map move params
+     * @param {MapMoveCls} [options.mapMoveObj=mapMove] alternate map move object for use with multi map pages
+     */
+
+    function LayerBaseVectorGeoJson(url, options) {
+        _classCallCheck(this, LayerBaseVectorGeoJson);
+
+        url = typeof url == 'string' ? url : '';
+
+        var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(LayerBaseVectorGeoJson).call(this, url, options));
+
+        _this._geoJsonFormat = new _ol2.default.format.GeoJSON();
+
+        _this._transform = options.transform || {};
+        _this._transform.dataProjection = _this._transform.dataProjection || "EPSG:4326";
+        _this._transform.featureProjection = _this._transform.featureProjection || "EPSG:3857";
+
+        if (_this.autoLoad || _this.visible) {
+            _this._load();
+        }
+        return _this;
+    }
+
+    /**
+     * add feature collection
+     * @param {object} featureCollection - as geojson object
+     */
+
+
+    _createClass(LayerBaseVectorGeoJson, [{
+        key: 'addFeatures',
+        value: function addFeatures(featureCollection) {
+            if (this._transform.dataProjection == 'EPSG:3857' && this._transform.featureProjection == 'EPSG:3857') {
+                this._source.addFeatures(this._geoJsonFormat.readFeatures(featureCollection));
+            } else {
+                this._source.addFeatures(this._geoJsonFormat.readFeatures(featureCollection, this._transform));
+            }
+        }
+
+        /**
+         * trigger load features
+         * @protected
+         * @returns {boolean} if already loaded
+         */
+
+    }, {
+        key: '_load',
+        value: function _load() {
+            var _this2 = this;
+
+            if (_get(Object.getPrototypeOf(LayerBaseVectorGeoJson.prototype), '_load', this).call(this)) {
+                return true;
+            }
+
+            _jquery2.default.get(this._url, this._params, function (d) {
+                _this2.addFeatures(d);
+                _this2.loadCallback(_this2);
+            }, 'json').fail(function () {
+                this._loaded = false;
+            });
+
+            return false;
+        }
+
+        /**
+         * callback function on map move
+         * @param {object} d the json response
+         * @override
+         */
+
+    }, {
+        key: 'mapMoveCallback',
+        value: function mapMoveCallback(d) {
+            _get(Object.getPrototypeOf(LayerBaseVectorGeoJson.prototype), 'mapMoveCallback', this).call(this, d);
+            this._source.addFeatures(this._geoJsonFormat.readFeatures(d, this._transform));
+        }
+    }]);
+
+    return LayerBaseVectorGeoJson;
+}(_LayerBaseVector3.default);
+
+nm.LayerBaseVectorGeoJson = LayerBaseVectorGeoJson;
+exports.default = LayerBaseVectorGeoJson;
+
+},{"../jquery":342,"../ol/ol":360,"../util/provide":364,"./LayerBaseVector":344}],347:[function(require,module,exports){
+'use strict';
+
+Object.defineProperty(exports, "__esModule", {
+    value: true
+});
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+var _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if ("value" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };
+
+var _jquery = require('../jquery');
+
+var _jquery2 = _interopRequireDefault(_jquery);
+
+var _LayerBase2 = require('./LayerBase');
+
+var _LayerBase3 = _interopRequireDefault(_LayerBase2);
+
+var _esriToOlStyle = require('../olHelpers/esriToOlStyle');
+
+var esriToOl = _interopRequireWildcard(_esriToOlStyle);
+
+var _mapPopup = require('../olHelpers/mapPopup');
+
+var _mapPopup2 = _interopRequireDefault(_mapPopup);
+
+var _provide = require('../util/provide');
+
+var _provide2 = _interopRequireDefault(_provide);
+
+var _ol = require('../ol/ol');
+
+var _ol2 = _interopRequireDefault(_ol);
+
+function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /**
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                * Created by gavorhes on 12/7/2015.
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                */
+
+
+var nm = (0, _provide2.default)('layers');
+
+/**
+ * esri mapserver layer
+ * @augments LayerBase
+ */
+
+var LayerEsriMapServer = function (_LayerBase) {
+    _inherits(LayerEsriMapServer, _LayerBase);
+
+    /**
+     * The base layer for all others
+     * @param {string} url - resource url
+     * @param {object} options - config
+     * @param {string} [options.id] - layer id
+     * @param {string} [options.name=Unnamed Layer] - layer name
+     * @param {number} [options.opacity=1] - opacity
+     * @param {boolean} [options.visible=true] - default visible
+     * @param {number} [options.minZoom=undefined] - min zoom level, 0 - 28
+     * @param {number} [options.maxZoom=undefined] - max zoom level, 0 - 28
+     * @param {object} [options.params={}] the get parameters to include to retrieve the layer
+     * @param {number} [options.zIndex=0] the z index for the layer
+     * @param {function} [options.loadCallback] function to call on load, context this is the layer object
+     * @param {boolean} [options.legendCollapse=false] if the legend item should be initially collapsed
+     * @param {boolean} [options.legendCheckbox=true] if the legend item should have a checkbox for visibility
+     * @param {boolean} [options.legendContent] additional content to add to the legend
+     * @param {boolean} [options.addPopup=false] if a popup should be added
+     */
+
+    function LayerEsriMapServer(url, options) {
+        _classCallCheck(this, LayerEsriMapServer);
+
+        var _this2 = _possibleConstructorReturn(this, Object.getPrototypeOf(LayerEsriMapServer).call(this, url, options));
+
+        _this2._source = new _ol2.default.source.TileArcGISRest({ url: _this2.url == '' ? undefined : _this2.url });
+
+        _this2.olLayer = new _ol2.default.layer.Tile({
+            source: _this2._source,
+            visible: _this2.visible,
+            opacity: _this2.opacity,
+            minResolution: _this2._minResolution,
+            maxResolution: _this2._maxResolution,
+            zIndex: _this2._zIndex
+        });
+
+        options.addPopup = typeof options.addPopup == 'boolean' ? options.addPopup : false;
+
+        _this2._esriFormat = new _ol2.default.format.EsriJSON();
+        _this2._popupRequest = null;
+
+        _this2.addLegendContent();
+
+        if (options.addPopup) {
+            _mapPopup2.default.addMapServicePopup(_this2);
+        }
+        return _this2;
+    }
+
+    /**
+     * add additional content to the legend
+     * @param {string} [additionalContent=''] additional content for legend
+     */
+
+
+    _createClass(LayerEsriMapServer, [{
+        key: 'addLegendContent',
+        value: function addLegendContent(additionalContent) {
+            var urlCopy = this.url;
+
+            if (urlCopy[urlCopy.length - 1] !== '/') {
+                urlCopy += '/';
+            }
+
+            urlCopy += 'legend?f=pjson&callback=?';
+
+            var _this = this;
+            var superAddLegend = _get(Object.getPrototypeOf(LayerEsriMapServer.prototype), 'addLegendContent', this);
+
+            _jquery2.default.get(urlCopy, {}, function (d) {
+                var newHtml = esriToOl.makeMapServiceLegend(d);
+                superAddLegend.call(_this, newHtml);
+            }, 'json');
+        }
+    }, {
+        key: 'getPopupInfo',
+        value: function getPopupInfo(queryParams) {
+            if (!this.visible) {
+                return;
+            }
+
+            var urlCopy = this.url;
+
+            if (urlCopy[urlCopy.length - 1] != '/') {
+                urlCopy += '/';
+            }
+
+            urlCopy += 'identify?callback=?';
+
+            var _this = this;
+
+            if (this._popupRequest != null) {
+                this._popupRequest.abort();
+            }
+
+            this._popupRequest = _jquery2.default.get(urlCopy, queryParams, function (d) {
+                var _iteratorNormalCompletion = true;
+                var _didIteratorError = false;
+                var _iteratorError = undefined;
+
+                try {
+                    for (var _iterator = d['results'][Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
+                        var r = _step.value;
+
+
+                        var popupHtml = '<table class="esri-popup-table">';
+
+                        for (var a in r['attributes']) {
+                            if (r['attributes'].hasOwnProperty(a)) {
+                                var attrVal = r['attributes'][a];
+
+                                if (attrVal == null || attrVal.toString().toLowerCase() == 'null') {
+                                    continue;
+                                }
+
+                                var attr = a;
+                                if (attr.length > 14) {
+                                    attr = attr.slice(0, 11) + '...';
+                                }
+
+                                popupHtml += '<tr><td>' + attr + '</td><td>' + attrVal + '</td></tr>';
+                            }
+                        }
+
+                        popupHtml += '</table>';
+
+                        _mapPopup2.default.addMapServicePopupContent(_this._esriFormat.readFeature(r), _this, popupHtml, r['layerName']);
+                    }
+                } catch (err) {
+                    _didIteratorError = true;
+                    _iteratorError = err;
+                } finally {
+                    try {
+                        if (!_iteratorNormalCompletion && _iterator.return) {
+                            _iterator.return();
+                        }
+                    } finally {
+                        if (_didIteratorError) {
+                            throw _iteratorError;
+                        }
+                    }
+                }
+            }, 'json').always(function () {
+                _this._popupRequest = null;
+            });
+        }
+
+        /**
+         * overwrite the base load
+         * @protected
+         */
+
+    }, {
+        key: '_load',
+        value: function _load() {}
+
+        /**
+         *
+         * @returns {ol.source.TileArcGISRest} the vector source
+         */
+
+    }, {
+        key: 'source',
+        get: function get() {
+            return _get(Object.getPrototypeOf(LayerEsriMapServer.prototype), 'source', this);
+        }
+    }]);
+
+    return LayerEsriMapServer;
+}(_LayerBase3.default);
+
+nm.LayerEsriMapServer = LayerEsriMapServer;
+exports.default = LayerEsriMapServer;
+
+},{"../jquery":342,"../ol/ol":360,"../olHelpers/esriToOlStyle":349,"../olHelpers/mapPopup":353,"../util/provide":364,"./LayerBase":343}],348:[function(require,module,exports){
+'use strict';
+
+Object.defineProperty(exports, "__esModule", {
+    value: true
+});
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+var _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if ("value" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };
+
+var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol ? "symbol" : typeof obj; }; /**
+                                                                                                                                                                                                                                                   * Created by gavorhes on 12/8/2015.
+                                                                                                                                                                                                                                                   */
+
+var _jquery = require('../jquery');
+
+var _jquery2 = _interopRequireDefault(_jquery);
+
+var _LayerBaseVectorGeoJson = require('./LayerBaseVectorGeoJson');
+
+var _LayerBaseVectorGeoJson2 = _interopRequireDefault(_LayerBaseVectorGeoJson);
+
+var _mapMove = require('../olHelpers/mapMove');
+
+var _mapMove2 = _interopRequireDefault(_mapMove);
+
+var _mapPopup = require('../olHelpers/mapPopup');
+
+var _mapPopup2 = _interopRequireDefault(_mapPopup);
+
+var _provide = require('../util/provide');
+
+var _provide2 = _interopRequireDefault(_provide);
+
+var _ol = require('../ol/ol');
+
+var _ol2 = _interopRequireDefault(_ol);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
+
+var nm = (0, _provide2.default)('layers');
+
+function checkStyleNumber(itsIcon, itsLineStyle, itsIconConfig, itsLineConfig) {
+    "use strict";
+
+    //make sure one and only one configuration is defined;
+
+    var configCount = 0;
+    if (typeof itsIcon == 'string') {
+        configCount++;
+    }
+
+    if ((typeof itsLineStyle === 'undefined' ? 'undefined' : _typeof(itsLineStyle)) == 'object') {
+        itsLineStyle.width = typeof itsLineStyle.width == 'number' ? itsLineStyle.width : 5;
+        itsLineStyle.color = typeof itsLineStyle.color == 'string' ? itsLineStyle.color : 'red';
+        configCount++;
+    }
+
+    if ((typeof itsIconConfig === 'undefined' ? 'undefined' : _typeof(itsIconConfig)) == 'object') {
+        itsIconConfig.defaultName = itsIconConfig.defaultName || 'Other';
+
+        if (typeof itsIconConfig.iconArray == 'undefined') {
+            itsIconConfig.iconArray = [];
+        }
+
+        configCount++;
+    }
+
+    if ((typeof itsLineConfig === 'undefined' ? 'undefined' : _typeof(itsLineConfig)) == 'object') {
+        itsLineConfig.defaultName = itsLineConfig.defaultName || 'Other';
+        itsLineConfig.defaultWidth = itsLineConfig.defaultWidth || 5;
+        itsLineConfig.defaultColor = itsLineConfig.defaultColor || 'red';
+
+        if (typeof itsLineConfig.lineArray == 'undefined') {
+            itsLineConfig.lineArray = [];
+        }
+
+        // set the width if not defined
+        for (var i = 0; i < itsLineConfig.lineArray.length; i++) {
+            if (itsLineConfig.lineArray[i].length == 3) {
+                itsLineConfig.lineArray[i].push(5);
+            }
+        }
+
+        configCount++;
+    }
+
+    if (configCount > 1) {
+        throw 'Only one style config can be defined';
+    }
+}
+
+/**
+ *
+ * @param {string} [itsIcon=undefined] the ITS device type icon image see http://transportal.cee.wisc.edu/its/inventory/icons/
+ *
+ * @param {object} [itsLineStyle=undefined] A single line style
+ * @param {string} itsLineStyle.color the line color as rgb or hex
+ * @param {number} [itsLineStyle.width=5] the line width
+ *
+ * @param {object} [itsIconConfig=undefined] The icon subtype configuration
+ * @param {string} itsIconConfig.prop The property used to define icon attribute symbolization
+ * @param {string} itsIconConfig.defaultName The default name to be used if no other match is found
+ * @param {string} itsIconConfig.defaultIcon The default icon to be used for no other matches
+ * @param {object} [itsIconConfig.iconArray=[]] an array, items with format [property, name, img]
+ *
+ * @param {object} [itsLineConfig=undefined] The property used to define icon attribute symbolization
+ * @param {string} itsLineConfig.prop The property used to define icon attribute symbolization
+ * @param {string} [itsLineConfig.defaultName=Other] The default name to be used if no other match is found
+ * @param {string} [itsLineConfig.defaultColor=red] The default line color to be used for no other matches
+ * @param {number} [itsLineConfig.defaultWidth=5] The default line width to be used for no other matches
+ * @param {object} [itsLineConfig.lineArray=[]] an array, items with format [property, name, color, optional width]
+ * @returns {*} undefined, style, or style function
+ */
+function defineStyle(itsIcon, itsLineStyle, itsIconConfig, itsLineConfig) {
+    "use strict";
+
+    checkStyleNumber(itsIcon, itsLineStyle, itsIconConfig, itsLineConfig);
+
+    var _iconUrlRoot = 'http://transportal.cee.wisc.edu/its/inventory/icons/';
+
+    if (itsIcon) {
+        return new _ol2.default.style.Style({
+            image: new _ol2.default.style.Icon({ src: _iconUrlRoot + itsIcon })
+        });
+    } else if (itsLineStyle) {
+        return new _ol2.default.style.Style({
+            stroke: new _ol2.default.style.Stroke({
+                color: itsLineStyle.color,
+                width: itsLineStyle.width
+            })
+        });
+    } else if (itsIconConfig) {
+        return function (feature) {
+            var symbolProp = feature.getProperties()[itsIconConfig.prop];
+            var iconUrl = _iconUrlRoot + itsIconConfig.defaultIcon;
+
+            for (var i = 0; i < itsIconConfig.iconArray.length; i++) {
+                var thisProp = itsIconConfig.iconArray[i];
+
+                if (symbolProp.trim().toLocaleLowerCase() == thisProp[0].trim().toLocaleLowerCase()) {
+                    iconUrl = _iconUrlRoot + thisProp[2];
+                    break;
+                }
+            }
+
+            return [new _ol2.default.style.Style({
+                image: new _ol2.default.style.Icon({ src: iconUrl })
+            })];
+        };
+    } else if (itsLineConfig) {
+        return function (feature) {
+            var symbolProp = feature.getProperties()[itsLineConfig.prop];
+            var colr = itsLineConfig.defaultColor || 'red';
+            var width = itsLineConfig.defaultWidth || 5;
+
+            for (var i = 0; i < itsLineConfig.lineArray.length; i++) {
+                var thisProp = itsLineConfig.lineArray[i];
+
+                if (symbolProp.trim().toLocaleLowerCase() == thisProp[0].trim().toLocaleLowerCase()) {
+                    colr = thisProp[2];
+                    width = thisProp[3];
+                    break;
+                }
+            }
+
+            return [new _ol2.default.style.Style({
+                stroke: new _ol2.default.style.Stroke({
+                    color: colr,
+                    width: width
+                })
+            })];
+        };
+    } else {
+        return undefined;
+    }
+}
+
+/**
+ *
+ * @param {string} [itsIcon=undefined] the ITS device type icon image see http://transportal.cee.wisc.edu/its/inventory/icons/
+ *
+ * @param {object} [itsLineStyle=undefined] A single line style
+ * @param {string} itsLineStyle.color the line color as rgb or hex
+ * @param {number} [itsLineStyle.width=5] the line width
+ *
+ * @param {object} [itsIconConfig=undefined] The icon subtype configuration
+ * @param {string} itsIconConfig.prop The property used to define icon attribute symbolization
+ * @param {string} itsIconConfig.defaultName The default name to be used if no other match is found
+ * @param {string} itsIconConfig.defaultIcon The default icon to be used for no other matches
+ * @param {object} [itsIconConfig.iconArray=[]] an array, items with format [property, name, img]
+ *
+ * @param {object} [itsLineConfig=undefined] The property used to define icon attribute symbolization
+ * @param {string} itsLineConfig.prop The property used to define icon attribute symbolization
+ * @param {string} [itsLineConfig.defaultName=Other] The default name to be used if no other match is found
+ * @param {string} [itsLineConfig.defaultColor=red] The default line color to be used for no other matches
+ * @param {number} [itsLineConfig.defaultWidth=5] The default line width to be used for no other matches
+ * @param {object} [itsLineConfig.lineArray=[]] an array, items with format [property, name, color, optional width]
+ * @returns {string} html to be added to the legend
+ */
+function defineLegend(itsIcon, itsLineStyle, itsIconConfig, itsLineConfig) {
+    "use strict";
+
+    var iconHeight = 17;
+
+    checkStyleNumber(itsIcon, itsLineStyle, itsIconConfig, itsLineConfig);
+
+    var _iconUrlRoot = 'http://transportal.cee.wisc.edu/its/inventory/icons/';
+
+    if (itsIcon) {
+        return '<img src="' + (_iconUrlRoot + itsIcon) + '" class="legend-layer-icon" height="' + iconHeight + '">';
+    } else if (itsLineStyle) {
+        return '<hr style="height: ' + itsLineStyle.width + 'px; background-color: ' + itsLineStyle.color + '">';
+    } else if (itsIconConfig) {
+        var outHtml = '';
+        outHtml += '<ul>';
+
+        var _iteratorNormalCompletion = true;
+        var _didIteratorError = false;
+        var _iteratorError = undefined;
+
+        try {
+            for (var _iterator = itsIconConfig.iconArray[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
+                var a = _step.value;
+
+                outHtml += '<li><span class="legend-layer-subitem">' + a[1] + '</span><img src="' + (_iconUrlRoot + a[2]) + '" class="legend-layer-icon" height="' + iconHeight + '">';
+            }
+        } catch (err) {
+            _didIteratorError = true;
+            _iteratorError = err;
+        } finally {
+            try {
+                if (!_iteratorNormalCompletion && _iterator.return) {
+                    _iterator.return();
+                }
+            } finally {
+                if (_didIteratorError) {
+                    throw _iteratorError;
+                }
+            }
+        }
+
+        outHtml += '<li><span class="legend-layer-subitem">' + itsIconConfig.defaultName + '</span>' + ('<img src="' + (_iconUrlRoot + itsIconConfig.defaultIcon) + '" class="legend-layer-icon" height="' + iconHeight + '"></li>');
+        outHtml += '</ul>';
+
+        return outHtml;
+    } else if (itsLineConfig) {
+        var _outHtml = '';
+        _outHtml += '<ul>';
+        var _iteratorNormalCompletion2 = true;
+        var _didIteratorError2 = false;
+        var _iteratorError2 = undefined;
+
+        try {
+            for (var _iterator2 = itsLineConfig.lineArray[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {
+                var ls = _step2.value;
+
+                _outHtml += '<li><span class="legend-layer-subitem">' + ls[1] + '</span>' + ('<hr style="height: ' + ls[3] + 'px; background-color: ' + ls[2] + '">');
+            }
+        } catch (err) {
+            _didIteratorError2 = true;
+            _iteratorError2 = err;
+        } finally {
+            try {
+                if (!_iteratorNormalCompletion2 && _iterator2.return) {
+                    _iterator2.return();
+                }
+            } finally {
+                if (_didIteratorError2) {
+                    throw _iteratorError2;
+                }
+            }
+        }
+
+        _outHtml += '<li><span class="legend-layer-subitem">' + itsLineConfig.defaultName + '</span>' + ('<hr style="height: ' + itsLineConfig.defaultWidth + 'px; background-color: ' + itsLineConfig.defaultColor + '"></li>');
+        _outHtml += '</ul>';
+
+        return _outHtml;
+    } else {
+        return '';
+    }
+}
+
+/**
+ * Its Layer class
+ * @augments LayerBaseVectorGeoJson
+ */
+
+var LayerItsInventory = function (_LayerBaseVectorGeoJs) {
+    _inherits(LayerItsInventory, _LayerBaseVectorGeoJs);
+
+    /**
+     * ITS device layer, types available at http://transportal.cee.wisc.edu/its/inventory/
+     * @param {object} options - config
+     * @param {string} [options.id] - layer id
+     * @param {string} [options.name=Unnamed Layer] - layer name
+     * @param {number} [options.opacity=1] - opacity
+     * @param {boolean} [options.visible=true] - default visible
+     * @param {number} [options.minZoom=undefined] - min zoom level, 0 - 28
+     * @param {number} [options.maxZoom=undefined] - max zoom level, 0 - 28
+     * @param {object} [options.params={}] the get parameters to include to retrieve the layer
+     * @param {number} [options.zIndex=0] the z index for the layer
+     * @param {function} [options.loadCallback] function to call on load, context this is the layer object
+     * @param {boolean} [options.legendCollapse=false] if the legend item should be initially collapsed
+     * @param {boolean} [options.legendCheckbox=true] if the legend item should have a checkbox for visibility
+     * @param {boolean} [options.legendContent] additional content to add to the legend
+     *
+     * @param {boolean} [options.autoLoad=false] if the layer should auto load if not visible
+     * @param {object|*} [options.style=undefined] the layer style, use openlayers default style if not defined
+     * @param {boolean} [options.onDemand=false] if the layer should be loaded by extent on map move
+     * @param {number} [options.onDemandDelay=300] delay before the map move callback should be called
+     * @param {MapMoveCls} [options.mapMoveObj=mapMove] alternate map move object for use with multi map pages
+     *
+     * @param {string} options.itsType the ITS device type, use the url flag at http://transportal.cee.wisc.edu/its/inventory/
+     * @param {boolean} [options.addPopup=true] if the popup should be added automatically
+     *
+     * @param {string} [options.itsIcon=undefined] the ITS device type icon image see http://transportal.cee.wisc.edu/its/inventory/icons/
+     *
+     * @param {object} [options.itsLineStyle=undefined] A single line style
+     * @param {string} options.itsLineStyle.color the line color as rgb or hex
+     * @param {number} [options.itsLineStyle.width=5] the line width
+     *
+     * @param {object} [options.itsIconConfig=undefined] The icon subtype configuration
+     * @param {string} options.itsIconConfig.prop The property used to define icon attribute symbolization
+     * @param {string} options.itsIconConfig.defaultName The default name to be used if no other match is found
+     * @param {string} options.itsIconConfig.defaultIcon The default icon to be used for no other matches
+     * @param {object} [options.itsIconConfig.iconArray=[]] an array, items with format [property, name, img]
+     *
+     * @param {object} [options.itsLineConfig=undefined] The property used to define icon attribute symbolization
+     * @param {string} options.itsLineConfig.prop The property used to define icon attribute symbolization
+     * @param {string} [options.itsLineConfig.defaultName=Other] The default name to be used if no other match is found
+     * @param {string} [options.itsLineConfig.defaultColor=red] The default line color to be used for no other matches
+     * @param {number} [options.itsLineConfig.defaultWidth] The default line width to be used for no other matches
+     * @param {object} [options.itsLineConfig.lineArray=[]] an array, items with format [property, name, color, optional width = 5]
+     */
+
+    function LayerItsInventory(options) {
+        _classCallCheck(this, LayerItsInventory);
+
+        if (typeof options.itsType !== 'string') {
+            throw 'its type must be defined';
+        }
+
+        var addToLegend = '';
+
+        // define a style with the helper function if it is not explicitly defined
+        if (typeof options.style == 'undefined') {
+            options.style = defineStyle(options.itsIcon, options.itsLineStyle, options.itsIconConfig, options.itsLineConfig);
+            addToLegend = defineLegend(options.itsIcon, options.itsLineStyle, options.itsIconConfig, options.itsLineConfig);
+        }
+
+        options.params = _typeof(options.params) == 'object' ? options.params : {};
+        _jquery2.default.extend(options.params, { format: 'JSON', resource: options.itsType });
+
+        //add any additional content to the legend
+
+        var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(LayerItsInventory).call(this, 'http://transportal.cee.wisc.edu/its/inventory/', options));
+
+        _this.addLegendContent(addToLegend);
+
+        options.addPopup = typeof options.addPopup == 'boolean' ? options.addPopup : true;
+
+        if (options.addPopup) {
+            _mapPopup2.default.addVectorPopup(_this, function (props) {
+                return '<iframe src="http://transportal.cee.wisc.edu/its/inventory/?feature=' + props['featureGuid'] + '" ' + 'height="250" width="350"></iframe>';
+            });
+        }
+        return _this;
+    }
+
+    /**
+     * callback to generate the parameters passed in the get request
+     * @callback makeGetParams
+     * @param {object} extent - extent object
+     * @param {number} extent.minX - minX
+     * @param {number} extent.minY - minY
+     * @param {number} extent.maxX - maxX
+     * @param {number} extent.maxY - maxY
+     * @param {number} zoomLevel - zoom level
+     */
+
+
+    _createClass(LayerItsInventory, [{
+        key: 'mapMoveMakeGetParams',
+        value: function mapMoveMakeGetParams(extent, zoomLevel) {
+            _get(Object.getPrototypeOf(LayerItsInventory.prototype), 'mapMoveMakeGetParams', this).call(this, extent, zoomLevel);
+            var lowerLeft = new _ol2.default.geom.Point([extent.minX, extent.minY]);
+            lowerLeft.transform(this.mapCrs, "EPSG:4326");
+            var lowerLeftCoordinates = lowerLeft.getCoordinates();
+            var upperRight = new _ol2.default.geom.Point([extent.maxX, extent.maxY]);
+            upperRight.transform(this.mapCrs, "EPSG:4326");
+            var upperRightCoordinates = upperRight.getCoordinates();
+
+            _jquery2.default.extend(this.mapMoveParams, {
+                L: lowerLeftCoordinates[0],
+                R: upperRightCoordinates[0],
+                B: lowerLeftCoordinates[1],
+                T: upperRightCoordinates[1]
+            });
+        }
+    }]);
+
+    return LayerItsInventory;
+}(_LayerBaseVectorGeoJson2.default);
+
+nm.LayerItsInventory = LayerItsInventory;
+exports.default = LayerItsInventory;
+
+},{"../jquery":342,"../ol/ol":360,"../olHelpers/mapMove":351,"../olHelpers/mapPopup":353,"../util/provide":364,"./LayerBaseVectorGeoJson":346}],349:[function(require,module,exports){
+'use strict';
+
+Object.defineProperty(exports, "__esModule", {
+    value: true
+});
+exports.makeFeatureServiceLegendAndSymbol = makeFeatureServiceLegendAndSymbol;
+exports.makeMapServiceLegend = makeMapServiceLegend;
+
+var _provide = require('../util/provide');
+
+var _provide2 = _interopRequireDefault(_provide);
+
+var _ol = require('../ol/ol');
+
+var _ol2 = _interopRequireDefault(_ol);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } /**
+                                                                                                                                                           * Created by gavorhes on 1/4/2016.
+                                                                                                                                                           */
+
+
+var nm = (0, _provide2.default)('olHelpers.esriToOlStyle');
+
+/**
+ * This callback is displayed as part of the Requester class.
+ * @callback styleFunc
+ * @param {ol.Feature} feat - openlayers feature
+ * @param {number} resolution - map resolution
+ */
+
+/**
+ *
+ * @param {Array<number>} colorArray - input color array
+ * @param {number} opacity - the opacity 0 to 1
+ * @returns {string} rgba string
+ * @private
+ */
+function _colorArrayToRgba(colorArray, opacity) {
+    "use strict";
+
+    return 'rgba(' + colorArray[0] + ',' + colorArray[1] + ',' + colorArray[2] + ',' + opacity + ')';
+}
+
+/**
+ * escape html charcters
+ * @param {string} str - input string
+ * @returns {string} escaped string
+ */
+function htmlEscape(str) {
+    return String(str).replace(/&/g, '&amp;').replace(/"/g, '&quot;').replace(/'/g, '&#39;').replace(/</g, '&lt;').replace(/>/g, '&gt;');
+}
+
+nm.htmlEscape = htmlEscape;
+
+var CommonSymbol =
+
+/**
+ * 
+ * @param symbolObj
+ * @param {number} opacity
+ */
+function CommonSymbol(symbolObj, opacity) {
+    _classCallCheck(this, CommonSymbol);
+
+    this.symbolObj = symbolObj;
+    this.opacity = opacity;
+    this.olStyle = undefined;
+    this.legendHtml = '';
+};
+
+var PointSymbol = function (_CommonSymbol) {
+    _inherits(PointSymbol, _CommonSymbol);
+
+    function PointSymbol(symbolObj, opacity) {
+        _classCallCheck(this, PointSymbol);
+
+        var _this2 = _possibleConstructorReturn(this, Object.getPrototypeOf(PointSymbol).call(this, symbolObj, opacity));
+
+        switch (_this2.symbolObj['type']) {
+            case 'esriSMS':
+                var innerColor = _colorArrayToRgba(_this2.symbolObj.color, _this2.opacity);
+                var outerColor = _colorArrayToRgba(_this2.symbolObj.outline.color, _this2.opacity);
+                var outlineWidth = _this2.symbolObj.outline.width;
+                var radius = _this2.symbolObj.size;
+
+                _this2.olStyle = new _ol2.default.style.Style({
+                    image: new _ol2.default.style.Circle({
+                        radius: radius,
+                        fill: new _ol2.default.style.Fill({
+                            color: innerColor
+                        }),
+                        stroke: new _ol2.default.style.Stroke({ color: outerColor, width: outlineWidth })
+                    })
+                });
+                _this2.legendHtml = '<span class="legend-layer-icon" style="color: ' + innerColor + '">&#9679;</span>';
+                break;
+            case 'esriPMS':
+                _this2.olStyle = new _ol2.default.style.Style({
+                    image: new _ol2.default.style.Icon({ src: 'data:image/png;base64,' + _this2.symbolObj['imageData'] })
+                });
+                _this2.legendHtml = '<img class="legend-layer-icon" height="17" src="data:image/png;base64,' + _this2.symbolObj['imageData'] + '">';
+                break;
+            default:
+                console.log(_this2.symbolObj);
+                alert('Point symbol does not handle symbol type: ' + _this2.symbolObj['type']);
+        }
+        return _this2;
+    }
+
+    return PointSymbol;
+}(CommonSymbol);
+
+var LineSymbol = function (_CommonSymbol2) {
+    _inherits(LineSymbol, _CommonSymbol2);
+
+    function LineSymbol(symbolObj, opacity) {
+        _classCallCheck(this, LineSymbol);
+
+        var _this3 = _possibleConstructorReturn(this, Object.getPrototypeOf(LineSymbol).call(this, symbolObj, opacity));
+
+        switch (_this3.symbolObj['type']) {
+            case 'esriSLS':
+                var innerColor = _colorArrayToRgba(_this3.symbolObj.color, _this3.opacity);
+                var lineWidth = _this3.symbolObj.width;
+
+                _this3.olStyle = new _ol2.default.style.Style({
+                    stroke: new _ol2.default.style.Stroke({
+                        color: innerColor,
+                        //lineDash: [4],
+                        width: lineWidth
+                    })
+                });
+
+                _this3.legendHtml = '<span class="legend-layer-icon" ';
+                _this3.legendHtml += 'style="';
+                _this3.legendHtml += 'background-color: ' + innerColor + ';';
+                _this3.legendHtml += 'width: 40px;';
+                _this3.legendHtml += 'height: 4px;';
+                _this3.legendHtml += 'position: relative;';
+                _this3.legendHtml += 'display: inline-block;';
+                _this3.legendHtml += 'top: -1px;';
+                _this3.legendHtml += '"></span>';
+                break;
+            default:
+                console.log(_this3.symbolObj);
+                alert('Line symbol does not handle symbol type: ' + _this3.symbolObj['type']);
+        }
+        return _this3;
+    }
+
+    return LineSymbol;
+}(CommonSymbol);
+
+var PolygonSymbol = function (_CommonSymbol3) {
+    _inherits(PolygonSymbol, _CommonSymbol3);
+
+    function PolygonSymbol(symbolObj, opacity) {
+        _classCallCheck(this, PolygonSymbol);
+
+        var _this4 = _possibleConstructorReturn(this, Object.getPrototypeOf(PolygonSymbol).call(this, symbolObj, opacity));
+
+        switch (_this4.symbolObj['type']) {
+            case 'esriSFS':
+                var innerColor = _colorArrayToRgba(_this4.symbolObj.color, _this4.opacity);
+                var outerColor = _colorArrayToRgba(_this4.symbolObj.outline.color, _this4.opacity);
+                var outlineWidth = _this4.symbolObj.outline.width;
+
+                _this4.olStyle = new _ol2.default.style.Style({
+                    stroke: new _ol2.default.style.Stroke({
+                        color: outerColor,
+                        //lineDash: [4],
+                        width: outlineWidth
+                    }),
+                    fill: new _ol2.default.style.Fill({
+                        color: innerColor
+                    })
+                });
+
+                _this4.legendHtml = '<span class="legend-layer-icon" ';
+                _this4.legendHtml += 'style="';
+                _this4.legendHtml += 'background-color: ' + innerColor + ';';
+                _this4.legendHtml += 'border: solid ' + outerColor + ' 1px;';
+                _this4.legendHtml += 'width: 40px;';
+                _this4.legendHtml += 'height: 9px;';
+                _this4.legendHtml += 'position: relative;';
+                _this4.legendHtml += 'display: inline-block;';
+                _this4.legendHtml += 'top: 2px;';
+                _this4.legendHtml += '"></span>';
+                break;
+
+            default:
+                console.log(_this4.symbolObj);
+                alert('Polygon symbol does handle symbol type: ' + _this4.symbolObj['type']);
+        }
+        return _this4;
+    }
+
+    return PolygonSymbol;
+}(CommonSymbol);
+
+var SymbolGenerator = function SymbolGenerator(esriResponse) {
+    _classCallCheck(this, SymbolGenerator);
+
+    this.opacity = (100 - (esriResponse['drawingInfo']['transparency'] || 0)) / 100;
+    this.renderer = esriResponse['drawingInfo']['renderer'];
+    this.olStyle = undefined;
+    this.legendHtml = '';
+};
+
+var SingleSymbol = function (_SymbolGenerator) {
+    _inherits(SingleSymbol, _SymbolGenerator);
+
+    /**
+     *
+     * @param {object} esriResponse - layer info
+     * @param {Constructor|*} SymbolClass - the symbol class to use
+     */
+
+    function SingleSymbol(esriResponse, SymbolClass) {
+        _classCallCheck(this, SingleSymbol);
+
+        var _this5 = _possibleConstructorReturn(this, Object.getPrototypeOf(SingleSymbol).call(this, esriResponse));
+
+        _this5.symbol = _this5.renderer['symbol'];
+        var symbolObj = new SymbolClass(_this5.symbol, _this5.opacity);
+        _this5.olStyle = symbolObj.olStyle;
+        _this5.legendHtml = symbolObj.legendHtml;
+        return _this5;
+    }
+
+    return SingleSymbol;
+}(SymbolGenerator);
+
+var UniqueValueSymbol = function (_SymbolGenerator2) {
+    _inherits(UniqueValueSymbol, _SymbolGenerator2);
+
+    /**
+     *
+     * @param {object} esriResponse - layer info
+     * @param {Constructor|*} SymbolClass - the Symbol class definition
+     */
+
+    function UniqueValueSymbol(esriResponse, SymbolClass) {
+        _classCallCheck(this, UniqueValueSymbol);
+
+        var _this6 = _possibleConstructorReturn(this, Object.getPrototypeOf(UniqueValueSymbol).call(this, esriResponse));
+
+        _this6.uniqueValueInfos = _this6.renderer['uniqueValueInfos'];
+        _this6.propertyName = _this6.renderer['field1'];
+        _this6.defaultSymbol = _this6.renderer['defaultSymbol'];
+
+        if (_this6.defaultSymbol) {
+            var symbolObj = new SymbolClass(_this6.defaultSymbol, _this6.opacity);
+            _this6.defaultStyle = symbolObj.olStyle;
+            _this6.defaultLabelHtml = '<span class="legend-layer-subitem">' + htmlEscape(_this6.renderer['defaultLabel']) + '</span>' + symbolObj.legendHtml;
+        } else {
+            _this6.defaultStyle = undefined;
+            _this6.defaultLabelHtml = 'other';
+        }
+
+        _this6.valueArray = [];
+        _this6.labelArray = [];
+        _this6.legendArray = [];
+        _this6.propertyStyleLookup = {};
+
+        var _iteratorNormalCompletion = true;
+        var _didIteratorError = false;
+        var _iteratorError = undefined;
+
+        try {
+            for (var _iterator = _this6.uniqueValueInfos[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
+                var uniqueVal = _step.value;
+
+                _this6.labelArray.push(uniqueVal['label']);
+                _this6.valueArray.push(uniqueVal['value']);
+                var uniqueSym = new SymbolClass(uniqueVal.symbol, _this6.opacity);
+                _this6.legendArray.push('<span class="legend-layer-subitem">' + htmlEscape(uniqueVal['label']) + '</span>' + uniqueSym.legendHtml);
+                _this6.propertyStyleLookup[uniqueVal['value']] = uniqueSym.olStyle;
+            }
+        } catch (err) {
+            _didIteratorError = true;
+            _iteratorError = err;
+        } finally {
+            try {
+                if (!_iteratorNormalCompletion && _iterator.return) {
+                    _iterator.return();
+                }
+            } finally {
+                if (_didIteratorError) {
+                    throw _iteratorError;
+                }
+            }
+        }
+
+        var _this = _this6;
+
+        _this6.olStyle = function (feature, resolution) {
+            var checkProperties = feature.getProperties();
+            var checkProperty = checkProperties[_this.propertyName];
+
+            var returnValue = void 0;
+            if (_this.propertyStyleLookup[checkProperty] !== undefined) {
+                returnValue = [_this.propertyStyleLookup[checkProperty]];
+            } else {
+                returnValue = [_this.defaultStyle];
+            }
+
+            return returnValue;
+        };
+
+        if (_this6.defaultLabelHtml !== null) {
+            _this6.legendArray.push(_this6.defaultLabelHtml);
+        }
+
+        _this6.legendHtml = '<ul>';
+        var _iteratorNormalCompletion2 = true;
+        var _didIteratorError2 = false;
+        var _iteratorError2 = undefined;
+
+        try {
+            for (var _iterator2 = _this6.legendArray[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {
+                var h = _step2.value;
+
+                _this6.legendHtml += '<li>' + h + '</li>';
+            }
+        } catch (err) {
+            _didIteratorError2 = true;
+            _iteratorError2 = err;
+        } finally {
+            try {
+                if (!_iteratorNormalCompletion2 && _iterator2.return) {
+                    _iterator2.return();
+                }
+            } finally {
+                if (_didIteratorError2) {
+                    throw _iteratorError2;
+                }
+            }
+        }
+
+        _this6.legendHtml += '</ul>';
+        return _this6;
+    }
+
+    return UniqueValueSymbol;
+}(SymbolGenerator);
+
+/**
+ * style and legend object
+ * @typedef {object} styleAndLegend
+ * @property {styleFunc} style - style function
+ * @property {string} legend - legend content
+ */
+
+/**
+ *
+ * @param {object} esriResponse - layer info
+ * @returns {styleAndLegend} style and legend object
+ */
+
+
+function makeFeatureServiceLegendAndSymbol(esriResponse) {
+    "use strict";
+
+    var renderer = esriResponse['drawingInfo']['renderer'];
+    var symbolLegendOut = null;
+
+    switch (renderer['type']) {
+        case 'simple':
+            switch (esriResponse['geometryType']) {
+                case 'esriGeometryPoint':
+                    symbolLegendOut = new SingleSymbol(esriResponse, PointSymbol);
+                    break;
+                case 'esriGeometryPolyline':
+                    symbolLegendOut = new SingleSymbol(esriResponse, LineSymbol);
+                    break;
+                case 'esriGeometryPolygon':
+                    symbolLegendOut = new SingleSymbol(esriResponse, PolygonSymbol);
+                    break;
+                default:
+                    console.log(esriResponse);
+                    alert(esriResponse['geometryType'] + ' not handled');
+            }
+            break;
+        case 'uniqueValue':
+            switch (esriResponse['geometryType']) {
+                case 'esriGeometryPoint':
+                    symbolLegendOut = new UniqueValueSymbol(esriResponse, PointSymbol);
+                    break;
+                case 'esriGeometryPolyline':
+                    symbolLegendOut = new UniqueValueSymbol(esriResponse, LineSymbol);
+                    break;
+                case 'esriGeometryPolygon':
+                    symbolLegendOut = new UniqueValueSymbol(esriResponse, PolygonSymbol);
+                    break;
+                default:
+                    console.log(esriResponse);
+                    alert(esriResponse['geometryType'] + ' not handled');
+            }
+            break;
+        default:
+            alert('not handled renderer type: ' + renderer['type']);
+    }
+
+    if (symbolLegendOut == null) {
+        return { style: undefined, legend: '' };
+    } else {
+        return { style: symbolLegendOut.olStyle, legend: symbolLegendOut.legendHtml };
+    }
+}
+
+nm.makeFeatureServiceLegendAndSymbol = makeFeatureServiceLegendAndSymbol;
+
+/**
+ *
+ * @param {object} lyrObject - the layer as defined in the response
+ * @param {boolean} [iconsOnly=false] use only icons
+ * @returns {string} legend html
+ */
+function mapServiceLegendItem(lyrObject, iconsOnly) {
+
+    iconsOnly = typeof iconsOnly == 'boolean' ? iconsOnly : false;
+    var layerName = lyrObject['layerName'];
+    var legendItems = lyrObject['legend'];
+    var legendHtml = '';
+
+    if (legendItems.length == 1) {
+        legendHtml = '<img class="legend-layer-icon" height="17" src="data:image/png;base64,' + legendItems[0]['imageData'] + '">';
+    } else {
+        legendHtml += '<span class="legend-items-expander" title="Expand/Collapse">&#9660;</span><ul>';
+        for (var i = 0; i < legendItems.length; i++) {
+            legendHtml += '<li>';
+            legendHtml += '<span class="legend-layer-subitem">' + htmlEscape(legendItems[i]['label']) + '</span>';
+            legendHtml += '<img class="legend-layer-icon" height="17" src="data:image/png;base64,' + legendItems[i]['imageData'] + '">';
+            legendHtml += '</li>';
+        }
+        legendHtml += '</ul>';
+    }
+
+    if (!iconsOnly) {
+        legendHtml = '<span class="legend-layer-subitem">' + layerName + '</span>' + legendHtml;
+    }
+
+    return legendHtml;
+}
+
+/**
+ * make map service legent
+ * @param {object} esriResponse - layer info
+ * @returns {string} legend content
+ */
+function makeMapServiceLegend(esriResponse) {
+    "use strict";
+
+    var newLegendHtml = '';
+
+    var layers = esriResponse['layers'];
+
+    if (layers.length == 1) {
+        newLegendHtml += mapServiceLegendItem(layers[0], true);
+    } else {
+        newLegendHtml += '<ul>';
+        for (var i = 0; i < layers.length; i++) {
+            newLegendHtml += '<li>' + mapServiceLegendItem(layers[i]) + '</li>';
+        }
+        newLegendHtml += '</ul>';
+    }
+
+    return newLegendHtml;
+}
+
+nm.makeMapServiceLegend = makeMapServiceLegend;
+
+},{"../ol/ol":360,"../util/provide":364}],350:[function(require,module,exports){
+'use strict';
+
+Object.defineProperty(exports, "__esModule", {
+    value: true
+});
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); /**
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      * Created by gavorhes on 12/8/2015.
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      */
+
+
+var _provide = require('../util/provide');
+
+var _provide2 = _interopRequireDefault(_provide);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+var nm = (0, _provide2.default)('olHelpers');
+
+/**
+ * base interaction
+ */
+
+var MapInteractionBase = function () {
+
+    /**
+     * map interaction base
+     * @param {string} subtype - the interaction subtype
+     */
+
+    function MapInteractionBase(subtype) {
+        _classCallCheck(this, MapInteractionBase);
+
+        this._map = undefined;
+        this._initialized = false;
+        this._subtype = subtype;
+    }
+
+    /**
+     * base initializer, returns true for already initialized
+     * @param {ol.Map} theMap - the ol Map
+     * @returns {boolean} true for already initialized
+     */
+
+
+    _createClass(MapInteractionBase, [{
+        key: 'init',
+        value: function init(theMap) {
+            if (!this._initialized) {
+                this._map = theMap;
+                this._initialized = true;
+
+                return false;
+            }
+
+            return true;
+        }
+
+        /**
+         * get reference to the ol map object
+         * @returns {ol.Map} the map object
+         */
+
+    }, {
+        key: '_checkInit',
+
+
+        /**
+         * Check the initialization status and throw exception if not valid yet
+         * @protected
+         */
+        value: function _checkInit() {
+            if (!this.initialized) {
+                var msg = this._subtype + ' object not initialized';
+                alert(msg);
+                console.log(msg);
+                throw msg;
+            }
+        }
+
+        /**
+         * Check the initialization status and throw exception if not valid yet
+         */
+
+    }, {
+        key: 'checkInit',
+        value: function checkInit() {
+            this._checkInit();
+        }
+    }, {
+        key: 'map',
+        get: function get() {
+            return this._map;
+        }
+
+        /**
+         * get if is initialized
+         * @returns {boolean} is initialized
+         */
+
+    }, {
+        key: 'initialized',
+        get: function get() {
+            return this._initialized;
+        }
+    }]);
+
+    return MapInteractionBase;
+}();
+
+nm.MapInteractionBase = MapInteractionBase;
+exports.default = MapInteractionBase;
+
+},{"../util/provide":364}],351:[function(require,module,exports){
+'use strict';
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+var _mapMoveCls = require('./mapMoveCls');
+
+var _mapMoveCls2 = _interopRequireDefault(_mapMoveCls);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+/**
+ * The single map move object catch is that it is common to multimap pages
+ * @type {MapMoveCls}
+ */
+exports.default = new _mapMoveCls2.default(); /**
+                                               * Created by gavorhes on 11/3/2015.
+                                               */
+
+},{"./mapMoveCls":352}],352:[function(require,module,exports){
+'use strict';
+
+Object.defineProperty(exports, "__esModule", {
+    value: true
+});
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+var _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if ("value" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };
+
+var _jquery = require('../jquery');
+
+var _jquery2 = _interopRequireDefault(_jquery);
+
+var _mapInteractionBase = require('./mapInteractionBase');
+
+var _mapInteractionBase2 = _interopRequireDefault(_mapInteractionBase);
+
+var _checkDefined = require('../util/checkDefined');
+
+var checkDefined = _interopRequireWildcard(_checkDefined);
+
+var _provide = require('../util/provide');
+
+var _provide2 = _interopRequireDefault(_provide);
+
+var _makeGuid = require('../util/makeGuid');
+
+var _makeGuid2 = _interopRequireDefault(_makeGuid);
+
+function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /**
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                * Created by gavorhes on 11/3/2015.
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                */
+
+var nm = (0, _provide2.default)('olHelpers');
+
+/**
+ * assists with map move interactions, trigger callback functions
+ * @augments MapInteractionBase
+ */
+
+var MapMoveCls = function (_MapInteractionBase) {
+    _inherits(MapMoveCls, _MapInteractionBase);
+
+    /**
+     * constructor called implicitly
+     */
+
+    function MapMoveCls() {
+        _classCallCheck(this, MapMoveCls);
+
+        var _this2 = _possibleConstructorReturn(this, Object.getPrototypeOf(MapMoveCls).call(this, 'map move'));
+
+        _this2._arrLyrRequest = [];
+        _this2._arrLyrTimeout = [];
+        _this2._arrLayer = [];
+        _this2._lookupLayer = {};
+
+        _this2._mapMoveCallbacks = [];
+        _this2._mapMoveCallbacksLookup = {};
+        _this2._mapMoveCallbackDelays = [];
+        _this2._mapMoveCallbackContext = [];
+        _this2._mapMoveCallbackTimeout = [];
+
+        _this2._mapExtent = undefined;
+        _this2._zoomLevel = undefined;
+        return _this2;
+    }
+
+    /**
+     * initialize the map move object
+     * @param {ol.Map} theMap - the ol map
+     */
+
+
+    _createClass(MapMoveCls, [{
+        key: 'init',
+        value: function init(theMap) {
+            if (_get(Object.getPrototypeOf(MapMoveCls.prototype), 'init', this).call(this, theMap)) {
+                return;
+            }
+
+            var _this = this;
+
+            this.map.getView().on(['change:center', 'change:resolution'], function (e) {
+
+                _this._updateMapExtent();
+
+                // trigger the layer updates
+                for (var i = 0; i < _this._arrLayer.length; i++) {
+                    _this.triggerLyrLoad(_this._arrLayer[i], i, e.type);
+                }
+
+                // trigger the map callbacks
+                for (var _i = 0; _i < _this._mapMoveCallbacks.length; _i++) {
+                    _this.triggerMoveCallback(_i, e.type);
+                }
+            });
+        }
+    }, {
+        key: '_updateMapExtent',
+        value: function _updateMapExtent() {
+            var theView = this.map.getView();
+            this._zoomLevel = theView.getZoom();
+
+            var extentArray = theView.calculateExtent(this.map.getSize());
+
+            this._mapExtent = {
+                minX: extentArray[0],
+                minY: extentArray[1],
+                maxX: extentArray[2],
+                maxY: extentArray[3]
+            };
+        }
+
+        /**
+         * return the map extent
+         */
+
+    }, {
+        key: 'triggerLyrLoad',
+
+
+        /**
+         * Trigger the layer load
+         * @param {LayerBaseVector|*} lyr - the layer being acted on
+         * @param {number} [index=undefined] - index of the layer
+         * @param {string|*} [eventType=undefined] the event triggering the load, as 'change:center' or 'change:resolution'
+         */
+        value: function triggerLyrLoad(lyr, index, eventType) {
+            var _this3 = this;
+
+            if (checkDefined.undefinedOrNull(lyr) && checkDefined.undefinedOrNull(index)) {
+                throw 'need to define lyr or index';
+            } else if (checkDefined.definedAndNotNull(lyr) && checkDefined.undefinedOrNull(index)) {
+                index = this._arrLayer.indexOf(lyr);
+            } else if (checkDefined.undefinedOrNull(lyr) && checkDefined.definedAndNotNull(index)) {
+                lyr = this._arrLayer[index];
+            }
+
+            // clear the timeout
+            if (this._arrLyrTimeout[index] != null) {
+                clearTimeout(this._arrLyrTimeout[index]);
+                this._arrLyrTimeout[index] = null;
+            }
+
+            // abort if necessary and clear the request
+            if (this._arrLyrRequest[index] != null && this._arrLyrRequest[index] != 4) {
+                this._arrLyrRequest[index].abort();
+                this._arrLyrRequest[index] = null;
+            }
+
+            // dummy callback used if before load returns false
+            var callbackFunc = function callbackFunc() {};
+
+            if (lyr.mapMoveBefore(this._zoomLevel, eventType)) {
+                (function () {
+                    lyr.mapMoveMakeGetParams(_this3._mapExtent, _this3._zoomLevel);
+
+                    var _this = _this3;
+
+                    callbackFunc = function callbackFunc() {
+                        function innerFunction(theLayer, theIndex) {
+                            var _innerThis = this;
+                            this._arrLyrRequest[theIndex] = _jquery2.default.get(theLayer.url, theLayer.mapMoveParams, function (d) {
+                                /**
+                                 * @type {LayerBaseVector}
+                                 */
+                                theLayer.mapMoveCallback(d);
+                                theLayer.loadCallback();
+                            }, 'json').fail(function (jqXHR) {
+                                if (jqXHR.statusText != 'abort') {
+                                    console.log('failed');
+                                    console.log(theLayer.url);
+                                    console.log(theLayer.mapMoveParams);
+                                }
+                            }).always(function () {
+                                _innerThis._arrLyrTimeout[theIndex] = null;
+                                _innerThis._arrLyrRequest[theIndex] = null;
+                            });
+                        }
+                        innerFunction.call(_this, lyr, index);
+                    };
+                })();
+            } else {
+                lyr.clear();
+            }
+            this._arrLyrTimeout[index] = setTimeout(callbackFunc, lyr.onDemandDelay);
+        }
+
+        /**
+         * trigger the map move call back at the given index
+         * @param {number} ind - the index of the layer
+         * @param {string|*} [eventType=undefined] the event triggering the load as 'change:center' or 'change:resolution'
+         * @param {string} [functionId=undefined] the function id used to reference the added callback function
+         */
+
+    }, {
+        key: 'triggerMoveCallback',
+        value: function triggerMoveCallback(ind, eventType, functionId) {
+
+            if (typeof ind == 'undefined' && typeof functionId == 'undefined') {
+                throw 'either the function index or the id must be defined';
+            }
+
+            if (typeof ind !== 'number') {
+                ind = this._mapMoveCallbacks.indexOf(this._mapMoveCallbacksLookup[functionId]);
+            }
+
+            if (ind < 0) {
+                console.log('function not found');
+
+                return;
+            }
+
+            // clear the timeout
+            if (this._mapMoveCallbackTimeout[ind] != null) {
+                clearTimeout(this._mapMoveCallbackTimeout[ind]);
+                this._mapMoveCallbackTimeout[ind] = null;
+            }
+
+            var ctx = this._mapMoveCallbackContext[ind];
+            var theFunc = this._mapMoveCallbacks[ind];
+
+            var _this = this;
+
+            var f = function f() {
+                if (ctx !== null) {
+                    theFunc.call(ctx, _this._mapExtent, _this._zoomLevel, eventType);
+                } else {
+                    theFunc(_this._mapExtent, _this._zoomLevel, eventType);
+                }
+            };
+
+            this._mapMoveCallbackTimeout[ind] = setTimeout(f, this._mapMoveCallbackDelays[ind]);
+        }
+
+        /**
+         * Add a layer to the interaction
+         * @param {LayerBaseVector|*} lyr - layer to add
+         * @param {boolean} [triggerOnAdd=true] - if the layer should be loaded on add
+         */
+
+    }, {
+        key: 'addVectorLayer',
+        value: function addVectorLayer(lyr, triggerOnAdd) {
+            if (this._arrLayer.indexOf(lyr) > -1) {
+                console.log('already added ' + lyr.name + ' to map move');
+
+                return;
+            }
+            this._checkInit();
+
+            this._arrLyrRequest.push(null);
+            this._arrLyrTimeout.push(null);
+            this._arrLayer.push(lyr);
+            this._lookupLayer[lyr.id] = lyr;
+
+            triggerOnAdd = typeof triggerOnAdd == 'boolean' ? triggerOnAdd : true;
+
+            if (triggerOnAdd) {
+                if (this._mapExtent === undefined) {
+                    this._updateMapExtent();
+                }
+                this.triggerLyrLoad(lyr, this._arrLayer.length - 1);
+            }
+        }
+
+        /**
+         * This callback is displayed as a global member.
+         * @callback mapMoveCallbackFunction
+         * @param {object} extent - extent object
+         * @param {number} extent.minX - minX
+         * @param {number} extent.minY - minY
+         * @param {number} extent.maxX - maxX
+         * @param {number} extent.maxY - maxY
+         * @param {number} zoomLevel - zoom level
+         * @param {string} [evtType=undefined] undefined for initial load, otherwise one of 'change:center', 'change:resolution'
+         */
+
+        /**
+         * add a callback to the map move event
+         * @param {mapMoveCallbackFunction} func - callback function
+         * @param {*} context - the context to use for this function
+         * @param {number} [delay=50] the delay before call load
+         * @param {boolean} [triggerOnAdd=true] if the layer should be loaded on add to mapMove
+         * @param {string} [functionId=undefined] optional id to reference the function later for outside triggering
+         */
+
+    }, {
+        key: 'addCallback',
+        value: function addCallback(func, context, delay, triggerOnAdd, functionId) {
+
+            if (this._mapMoveCallbacks.indexOf(func) > -1) {
+                console.log('this function already added to map move');
+
+                return;
+            }
+            this._checkInit();
+            if (!functionId) {
+                functionId = (0, _makeGuid2.default)();
+            }
+
+            this._mapMoveCallbacks.push(func);
+            this._mapMoveCallbacksLookup[functionId] = func;
+            this._mapMoveCallbackDelays.push(typeof delay == 'number' ? delay : 50);
+            this._mapMoveCallbackContext.push(checkDefined.definedAndNotNull(context) ? context : null);
+            this._mapMoveCallbackTimeout.push(null);
+
+            triggerOnAdd = typeof triggerOnAdd == 'boolean' ? triggerOnAdd : true;
+
+            if (triggerOnAdd) {
+                if (this._mapExtent === undefined) {
+                    this._updateMapExtent();
+                }
+                this.triggerMoveCallback(this._mapMoveCallbacks.length - 1);
+            }
+        }
+    }, {
+        key: 'mapExtent',
+        get: function get() {
+            if (!this._mapExtent) {
+                this._updateMapExtent();
+            }
+
+            return this._mapExtent;
+        }
+    }]);
+
+    return MapMoveCls;
+}(_mapInteractionBase2.default);
+
+nm.MapMoveCls = MapMoveCls;
+exports.default = MapMoveCls;
+
+},{"../jquery":342,"../util/checkDefined":361,"../util/makeGuid":363,"../util/provide":364,"./mapInteractionBase":350}],353:[function(require,module,exports){
+'use strict';
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+var _mapPopupCls = require('./mapPopupCls');
+
+var _mapPopupCls2 = _interopRequireDefault(_mapPopupCls);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+/**
+ * The single popup object catch is that it is common to multimap pages
+ * @type {MapPopupCls}
+ */
+exports.default = new _mapPopupCls2.default(); /**
+                                                * Created by gavorhes on 11/3/2015.
+                                                */
+
+},{"./mapPopupCls":354}],354:[function(require,module,exports){
+'use strict';
+
+Object.defineProperty(exports, "__esModule", {
+    value: true
+});
+
+var _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if ("value" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); /**
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      * Created by gavorhes on 11/3/2015.
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      */
+
+var _jquery = require('../jquery');
+
+var _jquery2 = _interopRequireDefault(_jquery);
+
+var _mapInteractionBase = require('./mapInteractionBase');
+
+var _mapInteractionBase2 = _interopRequireDefault(_mapInteractionBase);
+
+var _propertiesZoomStyle = require('../olHelpers/propertiesZoomStyle');
+
+var _propertiesZoomStyle2 = _interopRequireDefault(_propertiesZoomStyle);
+
+var _provide = require('../util/provide');
+
+var _provide2 = _interopRequireDefault(_provide);
+
+var _ol = require('../ol/ol');
+
+var _ol2 = _interopRequireDefault(_ol);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+var nm = (0, _provide2.default)('olHelpers');
+
+var _FeatureLayerProperties = function () {
+
+    /**
+     *
+     * @param {ol.Feature} feature the feature
+     * @param {LayerBaseVector|*} layer - the layer in the popup
+     * @param {number} layerIndex - index of the layer
+     * @param {ol.layer.Vector} selectionLayer - the ol selection layer
+     * @param {string} [esriLayerName=undefined] - esri layer name
+     */
+
+    function _FeatureLayerProperties(feature, layer, layerIndex, selectionLayer, esriLayerName) {
+        _classCallCheck(this, _FeatureLayerProperties);
+
+        this.feature = feature;
+        this.layer = layer;
+        this.layerIndex = layerIndex;
+        this.selectionLayer = selectionLayer;
+        this.popupContent = '';
+        this.esriLayerName = typeof esriLayerName == 'string' ? esriLayerName : undefined;
+    }
+
+    _createClass(_FeatureLayerProperties, [{
+        key: 'layerName',
+        get: function get() {
+            if (typeof this.esriLayerName == 'string') {
+                return this.esriLayerName;
+            } else {
+                return this.layer.name;
+            }
+        }
+    }]);
+
+    return _FeatureLayerProperties;
+}();
+
+/**
+ * map popup class
+ * @augments MapInteractionBase
+ */
+
+
+var MapPopupCls = function (_MapInteractionBase) {
+    _inherits(MapPopupCls, _MapInteractionBase);
+
+    /**
+     * Definition for openlayers style function
+     * @callback olStyleFunction
+     * &param feature the openlayers vector feature
+     * $param
+     */
+
+    /**
+     * Definition for popup changed callback functions
+     * @callback popupChangedFunction
+     * @param $popContent jquery reference to the popup content
+     */
+
+    /**
+     * map popup constructor
+     */
+
+    function MapPopupCls() {
+        _classCallCheck(this, MapPopupCls);
+
+        var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(MapPopupCls).call(this, 'map popup'));
+
+        _this._arrPopupLayerIds = [];
+        _this._arrPopupLayerNames = [];
+        /**
+         *
+         * @type {Array<LayerBaseVector>}
+         * @private
+         */
+        _this._arrPopupLayers = [];
+        _this._arrPopupOlLayers = [];
+        _this._arrPopupContentFunction = [];
+        _this._$popupContainer = undefined;
+        _this._$popupContent = undefined;
+        _this._$popupCloser = undefined;
+        _this._popupOverlay = undefined;
+        _this._selectionLayers = [];
+        _this._selectionLayerLookup = {};
+        _this._mapClickFunctions = [];
+
+        //let a = function($jqueryContent){console.log($jqueryContent)};
+        //this._popupChangedLookup = {'a': a};
+        _this._popupChangedFunctions = [];
+        /**
+         *
+         * @type {Array<LayerEsriMapServer>}
+         * @private
+         */
+        _this._esriMapServiceLayers = [];
+
+        _this._popupOpen = false;
+        _this._popupCoordinate = null;
+
+        /**
+         *
+         * @type {Array.<_FeatureLayerProperties>}
+         */
+        _this._passThroughLayerFeatureArray = [];
+
+        _this._currentPopupIndex = -1;
+        _this._popupContentLength = 0;
+
+        return _this;
+    }
+
+    /**
+     * map popup initialization
+     * @param {ol.Map} theMap - the ol map
+     */
+
+
+    _createClass(MapPopupCls, [{
+        key: 'init',
+        value: function init(theMap) {
+            var _this2 = this;
+
+            if (_get(Object.getPrototypeOf(MapPopupCls.prototype), 'init', this).call(this, theMap)) {
+                return;
+            }
+            var $map = (0, _jquery2.default)('#' + this.map.getTarget());
+
+            $map.append('<div class="ol-popup">' + '<a href="#" class="ol-popup-closer"></a>' + '<div class="popup-content"></div>' + '</div>');
+
+            this._$popupContainer = $map.find('.ol-popup');
+            this._$popupContent = $map.find('.popup-content');
+            this._$popupCloser = $map.find('.ol-popup-closer');
+
+            this._popupOverlay = new _ol2.default.Overlay({
+                element: this._$popupContainer[0],
+                autoPan: true,
+                autoPanAnimation: {
+                    duration: 250
+                }
+            });
+
+            this._map.addOverlay(this._popupOverlay);
+
+            this._$popupCloser.click(function () {
+                _this2.closePopup();
+            });
+
+            // display popup on click
+            this._map.on('singleclick', function (evt) {
+                _this2.closePopup();
+                _this2._popupCoordinate = evt.coordinate;
+
+                if (_this2._esriMapServiceLayers.length > 0) {
+                    var queryParams = {
+                        geometry: evt.coordinate.join(','),
+                        geometryType: 'esriGeometryPoint',
+                        layers: 'all',
+                        sr: _this2._map.getView().getProjection().getCode().split(':')[1],
+                        mapExtent: _this2._map.getView().calculateExtent(_this2._map.getSize()).join(','),
+                        imageDisplay: _this2._map.getSize().join(',') + ',96',
+                        returnGeometry: true,
+                        tolerance: 15,
+                        f: 'pjson'
+                    };
+
+                    var _iteratorNormalCompletion = true;
+                    var _didIteratorError = false;
+                    var _iteratorError = undefined;
+
+                    try {
+                        for (var _iterator = _this2._esriMapServiceLayers[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
+                            var l = _step.value;
+
+                            l.getPopupInfo(queryParams, _this2._selectionLayerLookup[l.id]);
+                        }
+                    } catch (err) {
+                        _didIteratorError = true;
+                        _iteratorError = err;
+                    } finally {
+                        try {
+                            if (!_iteratorNormalCompletion && _iterator.return) {
+                                _iterator.return();
+                            }
+                        } finally {
+                            if (_didIteratorError) {
+                                throw _iteratorError;
+                            }
+                        }
+                    }
+                }
+
+                var layerFeatureObjectArray = _this2._featuresAtPixel(evt.pixel);
+
+                /**
+                 *
+                 * @type {Array.<_FeatureLayerProperties>}
+                 */
+                _this2._passThroughLayerFeatureArray = [];
+                _this2._currentPopupIndex = -1;
+
+                for (var i = 0; i < layerFeatureObjectArray.length; i++) {
+                    var featObj = layerFeatureObjectArray[i];
+
+                    var props = featObj.feature.getProperties();
+
+                    var popupContentResponse = _this2._arrPopupContentFunction[featObj.layerIndex](props, _this2._$popupContent);
+
+                    //skip if return was false
+                    if (popupContentResponse === false) {
+                        //continue;
+                    } else if (typeof popupContentResponse == 'string') {
+                            featObj.popupContent = popupContentResponse;
+                            _this2._passThroughLayerFeatureArray.push(featObj);
+                        } else {
+                            featObj.selectionLayer.getSource().addFeature(featObj.feature);
+                        }
+                }
+
+                _this2._popupContentLength = _this2._passThroughLayerFeatureArray.length;
+
+                _this2._currentPopupIndex = -1;
+
+                var popupHtml = '<div class="ol-popup-nav">';
+                popupHtml += '<span class="previous-popup ol-popup-nav-arrow">&#9664;</span>';
+                popupHtml += '<span class="next-popup ol-popup-nav-arrow">&#9654;</span>';
+                popupHtml += '<span class="current-popup-item-number" style="font-weight: bold;"></span>';
+                popupHtml += '<span>&nbsp;of&nbsp;</span>';
+                popupHtml += '<span class="popup-content-length" style="font-weight: bold;">' + _this2._popupContentLength + '</span>';
+                popupHtml += '<span>&nbsp;&nbsp;-&nbsp;&nbsp;</span>';
+                popupHtml += '<span class="current-popup-layer-name"></span>';
+                popupHtml += '</div>';
+                popupHtml += '<div class="ol-popup-inner">';
+
+                popupHtml += '</div>';
+
+                _this2._$popupContent.html(popupHtml);
+
+                _this2._$popupContent.find('.previous-popup').click(function () {
+                    if (_this2._popupContentLength == 1) {
+                        return;
+                    }
+
+                    if (_this2._currentPopupIndex == 0) {
+                        _this2._currentPopupIndex = _this2._popupContentLength - 1;
+                    } else {
+                        _this2._currentPopupIndex--;
+                    }
+                    _this2._triggerFeatSelect();
+                });
+
+                var nextPopup = _this2._$popupContent.find('.next-popup');
+
+                nextPopup.click(function () {
+                    if (_this2._popupContentLength == 1 && _this2._currentPopupIndex > -1) {
+                        return;
+                    }
+
+                    if (_this2._currentPopupIndex == _this2._popupContentLength - 1) {
+                        _this2._currentPopupIndex = 0;
+                    } else {
+                        _this2._currentPopupIndex++;
+                    }
+                    _this2._triggerFeatSelect();
+                });
+
+                if (_this2._popupContentLength > 0) {
+                    nextPopup.trigger('click');
+                    _this2._popupOverlay.setPosition(_this2._popupCoordinate);
+                    _this2._$popupContent.scrollTop(0);
+                    _this2._popupOpen = true;
+                }
+            });
+
+            //change mouse cursor when over marker
+            this._map.on('pointermove', function (e) {
+                if (e.dragging) {
+                    return;
+                }
+                var pixel = _this2.map.getEventPixel(e.originalEvent);
+                var hit = _this2.map.hasFeatureAtPixel(pixel, function (lyrCandidate) {
+                    var _iteratorNormalCompletion2 = true;
+                    var _didIteratorError2 = false;
+                    var _iteratorError2 = undefined;
+
+                    try {
+                        for (var _iterator2 = _this2._arrPopupOlLayers[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {
+                            var olLayer = _step2.value;
+
+                            if (lyrCandidate == olLayer) {
+                                return true;
+                            }
+                        }
+                    } catch (err) {
+                        _didIteratorError2 = true;
+                        _iteratorError2 = err;
+                    } finally {
+                        try {
+                            if (!_iteratorNormalCompletion2 && _iterator2.return) {
+                                _iterator2.return();
+                            }
+                        } finally {
+                            if (_didIteratorError2) {
+                                throw _iteratorError2;
+                            }
+                        }
+                    }
+
+                    return false;
+                });
+                _this2.map.getTargetElement().style.cursor = hit ? 'pointer' : '';
+            });
+        }
+
+        /**
+         * helper to select features
+         * @private
+         */
+
+    }, {
+        key: '_triggerFeatSelect',
+        value: function _triggerFeatSelect() {
+            var $currentPopupItemNumber = this._$popupContent.find('.current-popup-item-number');
+            var $innerPopup = this._$popupContent.find('.ol-popup-inner');
+            var $layerNameSpan = this._$popupContent.find('.current-popup-layer-name');
+            this.clearSelection();
+            var lyrFeatObj = this._passThroughLayerFeatureArray[this._currentPopupIndex];
+            $currentPopupItemNumber.html((this._currentPopupIndex + 1).toFixed());
+            $layerNameSpan.html(lyrFeatObj.layerName);
+            $innerPopup.html(lyrFeatObj.popupContent);
+            lyrFeatObj.selectionLayer.getSource().addFeature(lyrFeatObj.feature);
+            var _iteratorNormalCompletion3 = true;
+            var _didIteratorError3 = false;
+            var _iteratorError3 = undefined;
+
+            try {
+                for (var _iterator3 = this._popupChangedFunctions[Symbol.iterator](), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) {
+                    var f = _step3.value;
+
+                    f(this._$popupContent);
+                }
+            } catch (err) {
+                _didIteratorError3 = true;
+                _iteratorError3 = err;
+            } finally {
+                try {
+                    if (!_iteratorNormalCompletion3 && _iterator3.return) {
+                        _iterator3.return();
+                    }
+                } finally {
+                    if (_didIteratorError3) {
+                        throw _iteratorError3;
+                    }
+                }
+            }
+        }
+
+        /**
+         *
+         * @param {ol.Feature} feature - the ol feature
+         * @param {LayerEsriMapServer} lyr - the map server layer
+         * @param {string} popupContent - popup content
+         * @param {string} esriName - esri layer name
+         */
+
+    }, {
+        key: 'addMapServicePopupContent',
+        value: function addMapServicePopupContent(feature, lyr, popupContent, esriName) {
+
+            var featLayerObject = new _FeatureLayerProperties(feature, lyr, this._popupContentLength, this._selectionLayerLookup[lyr.id], esriName);
+            featLayerObject.popupContent = popupContent;
+
+            this._passThroughLayerFeatureArray.push(featLayerObject);
+            this._popupContentLength++;
+
+            (0, _jquery2.default)('.popup-content-length').html(this._popupContentLength.toFixed());
+
+            if (!this._popupOpen) {
+                this._$popupContent.find('.next-popup').trigger('click');
+
+                this._popupOverlay.setPosition(this._popupCoordinate);
+                this._$popupContent.scrollTop(0);
+                this._popupOpen = true;
+            }
+        }
+
+        /**
+         *
+         * @param {ol.Pixel} pixel - the ol pixel
+         * @returns {Array.<_FeatureLayerProperties>} - feature layer properties
+         * @private
+         */
+
+    }, {
+        key: '_featuresAtPixel',
+        value: function _featuresAtPixel(pixel) {
+            var _this3 = this;
+
+            var layerFeatureObjectArray = [];
+            this.map.forEachFeatureAtPixel(pixel, function (feature, layer) {
+                var lyrIndex = _this3._arrPopupOlLayers.indexOf(layer);
+
+                if (lyrIndex > -1) {
+                    layerFeatureObjectArray.push(new _FeatureLayerProperties(feature, _this3._arrPopupLayers[lyrIndex], lyrIndex, _this3._selectionLayers[lyrIndex]));
+                }
+            });
+
+            return layerFeatureObjectArray;
+        }
+    }, {
+        key: 'closePopup',
+        value: function closePopup() {
+            this._checkInit();
+            this._popupOpen = false;
+            this._popupOverlay.setPosition(undefined);
+            this._$popupCloser[0].blur();
+            this.clearSelection();
+            this._$popupContent.html('');
+
+            return false;
+        }
+    }, {
+        key: 'addPopupChangedFunction',
+
+
+        /**
+         *
+         * @param {popupChangedFunction} chgFunction - popup change function
+         */
+        value: function addPopupChangedFunction(chgFunction) {
+            this._popupChangedFunctions.push(chgFunction);
+        }
+
+        /**
+         *
+         * @param {LayerBase|*} lyr - the layer being acted on
+         * @param {object} [selectionStyle={}] the selection style configuration
+         * @param {string} [selectionStyle.color=rgba(255,170,0,0.5)] the selection color
+         * @param {number} [selectionStyle.width=10] the selection width for linear features
+         * @param {object|function} [selectionStyle.olStyle=undefined] an openlayers style object or function
+         * @returns {ol.layer.Vector} the new selection layer
+         * @private
+         */
+
+    }, {
+        key: '_addPopupLayer',
+        value: function _addPopupLayer(lyr, selectionStyle) {
+            this._checkInit();
+
+            selectionStyle = selectionStyle || {};
+            selectionStyle.color = selectionStyle.color || 'rgba(255,170,0,0.5)';
+            selectionStyle.width = selectionStyle.width || 10;
+
+            var theStyle = void 0;
+
+            if (selectionStyle.olStyle) {
+                theStyle = selectionStyle.olStyle;
+            } else {
+                theStyle = new _ol2.default.style.Style({
+                    stroke: new _ol2.default.style.Stroke({
+                        color: selectionStyle.color,
+                        width: selectionStyle.width
+                    }),
+                    image: new _ol2.default.style.Circle({
+                        radius: 7,
+                        fill: new _ol2.default.style.Fill({ color: selectionStyle.color }),
+                        stroke: new _ol2.default.style.Stroke({ color: selectionStyle.color, width: 1 })
+                    }),
+                    fill: new _ol2.default.style.Fill({
+                        color: selectionStyle.color
+                    })
+                });
+            }
+
+            var selectionLayer = new _ol2.default.layer.Vector({
+                source: new _ol2.default.source.Vector(),
+                style: theStyle,
+                zIndex: 100
+            });
+
+            this._selectionLayers.push(selectionLayer);
+            this._selectionLayerLookup[lyr.id] = selectionLayer;
+            this.map.addLayer(selectionLayer);
+
+            return selectionLayer;
+        }
+
+        /**
+         * The popup callback function
+         * @callback popupCallback
+         * @param {object} featureProperties - the feature properties
+         * @param {jQuery} jqRef reference to the div content to do some async stuff inside the div
+         * @returns {string} the html content to be added to the popup
+         */
+
+        /**
+         * Add popup to the map
+         * @param {LayerBase|*} lyr The layer that the popup with act on
+         * @param {popupCallback} popupContentFunction - popup content function that makes popup info
+         * @param {object} [selectionStyle={}] the selection style configuration
+         * @param {string} [selectionStyle.color=rgba(255,170,0,0.5)] the selection color
+         * @param {number} [selectionStyle.width=10] the selection width for linear features
+         * @param {object|function} [selectionStyle.olStyle=undefined] an openlayers style object or function
+         * @returns {object} a reference to the ol selection layer
+         */
+
+    }, {
+        key: 'addVectorPopup',
+        value: function addVectorPopup(lyr, popupContentFunction, selectionStyle) {
+            var selectionLayer = this._addPopupLayer(lyr, selectionStyle);
+            this._arrPopupLayerIds.push(lyr.id);
+            this._arrPopupLayerNames.push(lyr.name);
+            this._arrPopupLayers.push(lyr);
+            this._arrPopupOlLayers.push(lyr.olLayer);
+            this._arrPopupContentFunction.push(popupContentFunction);
+
+            return selectionLayer;
+        }
+    }, {
+        key: 'removeVectorPopup',
+
+
+        /**
+         *
+         * @param {LayerBase} lyr - layer
+         */
+        value: function removeVectorPopup(lyr) {
+            var idx = this._arrPopupLayerIds.indexOf(lyr.id);
+
+            if (idx > -1) {
+                this._arrPopupLayerIds.splice(idx, 1);
+                this._arrPopupLayerNames.splice(idx, 1);
+                this._arrPopupLayers.splice(idx, 1);
+                this._arrPopupOlLayers.splice(idx, 1);
+                this._arrPopupContentFunction.splice(idx, 1);
+                this._selectionLayers.splice(idx, 1);
+                delete this._selectionLayerLookup[lyr.id];
+            }
+        }
+
+        /**
+         *
+         * @param {LayerEsriMapServer} lyr - map server layer
+         * @param {object} [selectionStyle={}] the selection style configuration
+         * @param {string} [selectionStyle.color=rgba(255,170,0,0.5)] the selection color
+         * @param {number} [selectionStyle.width=10] the selection width for linear features
+         * @param {object|function} [selectionStyle.olStyle=undefined] an openlayers style object or function
+         * @returns {object} a reference to the ol selection layer
+         */
+
+    }, {
+        key: 'addMapServicePopup',
+        value: function addMapServicePopup(lyr, selectionStyle) {
+            var selectionLayer = this._addPopupLayer(lyr, selectionStyle);
+            this._esriMapServiceLayers.push(lyr);
+
+            return selectionLayer;
+        }
+    }, {
+        key: 'clearSelection',
+        value: function clearSelection() {
+            this._checkInit();
+            for (var i = 0; i < this._selectionLayers.length; i++) {
+                this._selectionLayers[i].getSource().clear();
+            }
+            var _iteratorNormalCompletion4 = true;
+            var _didIteratorError4 = false;
+            var _iteratorError4 = undefined;
+
+            try {
+                for (var _iterator4 = this._mapClickFunctions[Symbol.iterator](), _step4; !(_iteratorNormalCompletion4 = (_step4 = _iterator4.next()).done); _iteratorNormalCompletion4 = true) {
+                    var f = _step4.value;
+
+                    f();
+                }
+            } catch (err) {
+                _didIteratorError4 = true;
+                _iteratorError4 = err;
+            } finally {
+                try {
+                    if (!_iteratorNormalCompletion4 && _iterator4.return) {
+                        _iterator4.return();
+                    }
+                } finally {
+                    if (_didIteratorError4) {
+                        throw _iteratorError4;
+                    }
+                }
+            }
+        }
+    }, {
+        key: 'addMapClickFunction',
+
+
+        /**
+         * Add a function to be called when the map is clicked but before any popups are implemented
+         * @param {function} func - the map click function
+         */
+        value: function addMapClickFunction(func) {
+            this._mapClickFunctions.push(func);
+        }
+    }]);
+
+    return MapPopupCls;
+}(_mapInteractionBase2.default);
+
+nm.MapPopupCls = MapPopupCls;
+exports.default = MapPopupCls;
+
+},{"../jquery":342,"../ol/ol":360,"../olHelpers/propertiesZoomStyle":355,"../util/provide":364,"./mapInteractionBase":350}],355:[function(require,module,exports){
+'use strict';
+
+Object.defineProperty(exports, "__esModule", {
+    value: true
+});
+
+var _provide = require('../util/provide');
+
+var _provide2 = _interopRequireDefault(_provide);
+
+var _zoomResolutionConvert = require('./zoomResolutionConvert');
+
+var zoomResolutionConvert = _interopRequireWildcard(_zoomResolutionConvert);
+
+function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+/**
+ * Created by gavorhes on 12/14/2015.
+ */
+
+var nm = (0, _provide2.default)('olHelpers');
+
+/**
+ * A style function based on properties and zoom level, wraps normal feature, resolution function
+ * @callback propertiesZoomStyle
+ * @param {object} properties the feature properties
+ * @param {number} zoom level
+ *
+ */
+
+/**
+ * wrapper to define a style function by properties and zoom level
+ * @param {propertiesZoomStyle|*} styleFunc - style function
+ * @returns {function|*} new function
+ */
+function propertiesZoomStyle(styleFunc) {
+    if (styleFunc == undefined) {
+        return undefined;
+    }
+
+    return function (feature, resolution) {
+        styleFunc(feature.getProperties(), zoomResolutionConvert.resolutionToZoom(resolution));
+    };
+}
+
+nm.propertiesZoomStyle = propertiesZoomStyle;
+exports.default = propertiesZoomStyle;
+
+},{"../util/provide":364,"./zoomResolutionConvert":358}],356:[function(require,module,exports){
+'use strict';
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+var _quickMapBase = require('./quickMapBase');
+
+var _quickMapBase2 = _interopRequireDefault(_quickMapBase);
+
+var _provide = require('../util/provide');
+
+var _provide2 = _interopRequireDefault(_provide);
+
+var _mapMove = require('./mapMove');
+
+var _mapMove2 = _interopRequireDefault(_mapMove);
+
+var _mapPopup = require('./mapPopup');
+
+var _mapPopup2 = _interopRequireDefault(_mapPopup);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+/**
+ * Created by gavorhes on 12/15/2015.
+ */
+
+var nm = (0, _provide2.default)('olHelpers');
+
+/**
+ * Sets up a map with some default parameters and initializes
+ * mapMove and mapPopup
+ *
+ * @param {object} [options={}] config options
+ * @param {string} [options.divId=map] map div id
+ * @param {object} [options.center={}] center config object
+ * @param {number} [options.center.x=-10018378] center x, web mercator x or lon
+ * @param {number} [options.center.y=5574910] center y, web mercator y or lat
+ * @param {number} [options.zoom=7] zoom level
+ * @param {number} [options.minZoom=undefined] min zoom
+ * @param {number} [options.maxZoom=undefined] max zoom
+ * @param {boolean} [options.baseSwitcher=true] if add base map switcher
+ * @param {boolean} [options.fullScreen=false] if add base map switcher
+ * @returns {ol.Map} the ol map
+ */
+function quickMap(options) {
+  var m = (0, _quickMapBase2.default)(options);
+  _mapMove2.default.init(m);
+  _mapPopup2.default.init(m);
+
+  return m;
+}
+
+nm.quickMap = quickMap;
+exports.default = quickMap;
+
+},{"../util/provide":364,"./mapMove":351,"./mapPopup":353,"./quickMapBase":357}],357:[function(require,module,exports){
+'use strict';
+
+Object.defineProperty(exports, "__esModule", {
+    value: true
+});
+
+var _jquery = require('../jquery');
+
+var _jquery2 = _interopRequireDefault(_jquery);
+
+var _provide = require('../util/provide');
+
+var _provide2 = _interopRequireDefault(_provide);
+
+var _ol = require('../ol/ol');
+
+var _ol2 = _interopRequireDefault(_ol);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+var nm = (0, _provide2.default)('olHelpers');
+
+/**
+ * Sets up a map with some default parameters and initializes
+ * mapMove and mapPopup
+ *
+ * @param {object} [options={}] config options
+ * @param {string} [options.divId=map] map div id
+ * @param {object} [options.center={}] center config object
+ * @param {number} [options.center.x=-10018378] center x, web mercator x or lon
+ * @param {number} [options.center.y=5574910] center y, web mercator y or lat
+ * @param {number} [options.zoom=7] zoom level
+ * @param {number} [options.minZoom=undefined] min zoom
+ * @param {number} [options.maxZoom=undefined] max zoom
+ * @param {boolean} [options.baseSwitcher=true] if add base map switcher
+ * @param {boolean} [options.fullScreen=false] if add base map switcher
+ * @returns {ol.Map} the ol map
+ */
+/**
+ * Created by gavorhes on 3/25/2016.
+ */
+
+/**
+ * Created by gavorhes on 12/15/2015.
+ */
+
+function quickMapBase(options) {
+    options = options || {};
+    options.divId = options.divId || 'map';
+    options.center = options.center || {};
+    options.center.x = typeof options.center.x == 'number' ? options.center.x : -10018378;
+    options.center.y = typeof options.center.y == 'number' ? options.center.y : 5574910;
+    options.zoom = typeof options.zoom == 'number' ? options.zoom : 7;
+    options.baseSwitcher = typeof options.baseSwitcher == 'boolean' ? options.baseSwitcher : true;
+    options.fullScreen = typeof options.fullScreen == 'boolean' ? options.fullScreen : false;
+
+    var $mapDiv = (0, _jquery2.default)('#' + options.divId);
+    $mapDiv.css('position', 'relative');
+
+    var osmLayer = new _ol2.default.layer.Tile({ source: new _ol2.default.source.OSM() });
+    var satLayer = new _ol2.default.layer.Tile({ visible: false, source: new _ol2.default.source.MapQuest({ layer: 'sat' }) });
+
+    var osmCss = "url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAMAAABg3Am1AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAMAUExURQAAADQ1NDk5OURFREtLS1FHSFlZWGJRVGJiYWdmZWxsbHRmaXBpanN0c3V0dHp5eX5+fIVzd4F3eeV0jud5juZ8k4aHhomHhoyGh5eGj5OVlJiVlZiYl5qZmJydnKOTlaKZmqKdnaOioaqqqKuzsbOvrrSysLa3tbW4uLm6ub27ub+/vbGXwbCZwbCgxLKlxrOqyLStybO3yrSxyrWzzbW2y7a1zbK4y7W6zbW8y760yrTAzbTFzrPKzrLOzrTJzrTOzr7CwbXC0LXK0LTO0L3I0bPQz7TQz7PS0bXQ0LnR0brW1bzT0r7U077V1Lzc2dqNqteUsdyXscaquuOHneaGmueHnOeJnuiBleiKn+eNoOiOoOWUpOiRo+iSpeiUpeqYpumaqOmdrPSynemgruSqtOmisOmlsuuqtequuOW1vOuxu+uxvOq1ve+xvPK0pvW3o/W5pfO5qvS7qfCwvMOuwc2/wNenxNyyzNe/0Nq31Nq51dy72Oy3wOu4wOu+xey4wO+6xO2+xfTAr/TCsvfFtPHLvvTJuMPDwMfHxcXKyc3DxMvFyMvLyM3PzcDV08DV1MTX1cbY1s7X1sjZ1sra2Mnd3M7b2c7c2tfH1tnB1t7F2d7M29fX1tLY1tDd2tHe3NTf3NnS19rZ1tva2Nnf3t3d28rh3tXg3Nnh3tzj393k39ni4N7k4N7n5uXDyOfLz+zAxu3CyOzEyezKzeDJ3eLM3uvP0u3P0ePf2+7R0u7Q1u/U0+7U1ezc0+7a2e/d2+3f3vbFzvLOwfHN0PPQw/TUx/LWyvLYzPDQ1fPe0ubc4vve4uHh3+nh3+/h2u/h3vHj2vHl3uHm4eTn4uDp5ebo4+Xo5ODq6ebq6OTv6+nl4+/j4O7l4e7n5ujp4+np5Ozq5e7s5urt6O7t6Orw6u7x6u3x7vPj5PDl4fDo4vDq5fDt5vDu6PDv7PTv6fDx6vHx7fH17fXw6fXy7fb07/bz8fT18vn38vr39fr48/r59Pr6+P3++//+/gAAALNTSk0AAAEAdFJOU////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wBT9wclAAAACXBIWXMAAA7DAAAOwwHHb6hkAAAAGHRFWHRTb2Z0d2FyZQBwYWludC5uZXQgNC4wLjlsM35OAAAFNElEQVRIS1VVCZxVUxi/9l0UIUT2bMnY43bVI2c0Y01kSWIaS0j2JEtkN41piomZrPPKQ2aQ7JKImOZlnm2493TJzDufuU1Zi+v/fee+mZ//793vnPOd7zvfes5zDBEZkBBjAcIjb+Iiotqgdhat8AMK0vl7/R9N7GiWtshqIr+EZ5gYKibyUsXY1l/mfFpssvUlWQ0FkU3gy4+RB/+kwYcO8pRSnldcOU/r2lAHARSwk2ORgEmOdC1EsuRiYSqMPwwroMIraZk5V2fYJQjCKfZrRmh3gSAZi2i4b7wSylWu8EqZwS59JkFUaW96JbNSc+CEUmt4rorwuZmWdDaoc+uZETuQlTCU5xYzR7muUnVUVo+BcRhre/VwUpasgJwhH7JkYIYA0sNxhmCwUK+lw6vCKBZehw01dEiyw4Q4aE0Z4ahDhKaFQsGnJ2BgqKoTBsNjFy0SlW6whRAZTdm8DBJmkBZhDi1j4xJQBk6ywrWUTymaCxac8lROcdauRGzQSNtA7EHUYhXyEwhhgjFUqRuO+rauhF1awFpzCsmwUbjIFBR0u1bKtyGpulW/H/cVVzkyGaIWTIR9pFAV6GK2gPMXMX8gPk9zzxXgI1kimcAltEYr+cjio1imlKpEa9rOipLm+p+CZ6Bw//qd1/f/O+GwMxbSLpyoZEcwkyh2jIks+3hmdd2jWUw4scxNysnHxU7nSspTRcJjCZGL3IsjsYJMMg5mwgx7gaIOLBFCogAgBBoNa9w+DE6I+Bs7FTgwwrJbHjWDgpYo2KwtBTcYEDuloC9geQw+k2RGnPGpTaOlq7AS+YICUz4DZVaX2TiNDhuYfTtY4geLi0IoCm3XccwM9hx4kU28StQEljDs3ZEpFGA+8dKzLmV9ymIwF5FOGn2GdJM8KLHDJbXyiYVMG9MRTLiXGGg2QKaxM3khPSRrwM9zEIardxU2w/EiA0gOeYKHzDR0V7/QGV3lKIA9ktrDArxO3gdA+k6SKoBiVwcm7NjZb9+Hnztg282TuHVZ9LOISFNt9MgyCetZVczSxnyDbl17Penq6mqpg1IhRaEO2aVLUO4/r17H8tTv6f13h71dduvZI3Y+uMdWksNSauLovJw5hsqiPIUvt0ku7/iBeUR3sksmomYWtRbAjbiLfv2lX9/V7LVG4uYnUZXhQ7f2OPCZEx9wrYWTcePEQqPEML8pl4mMdr/jlXlvHiRiJ2+MSTFY4TTSYStuvz2R/JXh+PPeGXm055J+3/YDWuNu3R3DArPutyg0ZgykMVDU9Ndm22+wYalr2rse48CnsTIFcMn73vfhNrktx1EUcZnPv6ah3Yy5cDTRdBEoGoBeah71dqFyjZDJLkWk3N3v4uuktssjWpzciMPxQeHj8nMKzcGuB0tAyzFhdCKOYWv4HwOQVwIxLG99a6uvH3sJCyO3h+k4EZ+G7+xj5f4XXksoaGrdMRzSc8ARA8+cdOuk2x6fffNNt5x+Ro1omPlrT/CQDlcNlpx4NBIWXhkx7Y3Zp3ofNR7Uv89Om/beW0TLIynHv3vs1VsOFpSWSXvfuPUf9BrRFyxgXdHoKJnQFegPOovvzz59ntrzye240ig8UQ3lDI2VqwagrKIQcLXNFL3wglN2OHdBQ6/vI3kENDVBwRb3k1XtczFbjWn4EzMYi7CF3129+JTYuRSdrGuS92g5dpqn6qXoJQs5xmL8p+Wt4hLbt0mx2OLNZR2bbPy8zJNQGFM/f/CfXZekRYFjGCWjIJpM+WiCzGBPWHhoyaAsjRT/B2Gy5yzYJkwUAAAAAElFTkSuQmCC')";
+    var aerialCss = "url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAMAAABg3Am1AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAMAUExURQALBgIMDQgOBwQOEQcTBwUSCwoVDAwdBw8ZDgUREwYUGAYZFQYZGgkTFQoVGQsZFAwZHBMeDhIbFBEbHAwWIA4bIREcIQ4hCQwjFw4lHBgkDB8sDxUiExIiGhAoGxohFRshGRorHQcrKQsiIQwmKgooJA0pKQ81Jw8yLRMiIxImKxUrJREuKhslJB0rIhooKRUuMBMyLhkwJhozKh48LxUzMRM9MBwzMiUvFCMtGiMwEiwzFCgzHDI+GSIsISkvJSQxIiM2LiY5Jic+Lyk0JSo0Ky49JSs9KSU1NSM7NCs2NS8+NDM1JzU9Ljg7IDJCHS1DLSNAMitCMSxIOjREITZLIDZJKDlFIjpFKztKJT1LKzJBMzpHMD1JMjpKPD1RKjlQNC1DQj5QQEA8MEJGJkBKJUJNK0lLLEJMMkVMPEpONENSLUdZL0pTLkpaLkRUMkRSPEVZMktUM0pVOklZMklZNEpcNU1ZMk1ZNUxfMk5dNkxcOVFUM1RUOFJbNVFZOVNYPVFdOVJdPFVaOVVaPVVdOlVdPVpaNlpdO0phN01hOlBiN1NhPFNoP1piPWFbPmRjPENOQEtPSURTQkJVS0xVQk1VSkxbQkxcS0heUVFXRFRcQlJfTFxeQlpeS05lQk1kSFRjQVRjSlZpQ1tkQlxlSlxpRF1rSVVnUVtlU1llXF9tU1xoXlxwSl9ramRfQmJlQ2FhSWFlSWFlTmVlSWRmTGFoQWFpRWFsRmVpRWVtRmNsSmtlRGpqRmpsS2BmWGRsUmFrW2ptUmZyR2RxTGpxTWVyU2RyW2d5V2tzUmt0WW15VG15WXFuTHNtVnFxTXF4T3h0TnJzUnJ1XHJ4VXN6Wnp0VHx1W315VXp8XGR0YGx0YHVzZXJ0aHR9ZXV+aHl9YHOCXXqBXXeCYHyCY3iEaHyIYn+JaXqKcYB5WIN6Y4SCXoCDZIGEaYCIZoOLa4iCaImJbIOOdYuMco6OeIuVcpOKbZKPc5aQb5eXe5ufg6KjhAAAAAAAAAAAAAAAAOGCeQgAAAEAdFJOU////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wBT9wclAAAACXBIWXMAAA7DAAAOwwHHb6hkAAAAGHRFWHRTb2Z0d2FyZQBwYWludC5uZXQgNC4wLjlsM35OAAAH80lEQVRISy1WbXQUVxm+6wqnk3Zmpxl2FG2EGg92C8GDlWptVTwa+uF3xcKmDfFzCUzDsJNsunXipglJXJbrtJWmwZNSnHD3jojRgUIm2UumIZ0JZ7JByrALbMWW0IBW8aRa4+cf76TeX3Nm3uc+z/s+7/vugl4r/aMTrT4e1pPTqnnmJNn5AyUzRnrRle/qE33dsvrBtAQVoxtpZNK3zSzYjUjviWO2Ag+R77dl7W36n/1Ep9KBPG/S+Py0PkjU/gPKQGqwTHryiWYFAXSvMairsio7SjyNsnCzh0qKImV9/7mhfHQZx2yN1O+7rXUm33MUPaboOkAJHaoIdXfJj2xWeyD8jMFEXkvIu5qzpU988gWB5zl+GS+sFe55trEVPdWZB2miq8bBVkNFO2R0qnrfkiXhcJhtDNXE6tbW97/s9O9/7ZfVhx86/CwrROpfvvxboMqeLsuqPr1j44qEwDNMOBximUiYoU8sw7BC/a7T72uEnyJDlGxZ9KcglZRyuqqrv/tSZErgOI4NgRBTIw9EmHAoFGZZnp6aGaJ2GTxfxYs8kKVUQh7WB5hQeC3LsUxoxVKW14l3BX2WcoUYPiZyLLe8teZ+iuT4GGhvV5KpKWkpyzxEr2MZgQ1xdRjfRBoH+2k6lIHjKTHPPBo8CSJISqqq4wGGOcWylIGlgvgNX1Gd8vF5f+IUIwb30ng+Gg2QfBRIMvy0jG8SVkYo4N0zvUXVRztbJ/L6xL7lUZEXBEHkuZqlS6gEAUgKJurnhFtfpACOYd8b/hVbJPqwi44a6KA0sPVjIi/SIyxb3u8KlAJ0S8jRVgrlW+nVHPdrhiXCxu42d86ByksDc80P3MkJFBFQ8Ho1lQegpWJRWFGsDsRwwv7pIyvuQW0ZkrX6NDVFbqcvaQI8vbyqzt5AARrsbKx5yhQEGs+wPO56bOK+0rcwMrOKkpUbZWYxV04UeZZv/cBKFhRL6Qdv9y4LfEDA7/thg7tTmv1a5/GnO0wl0dQg80wglZaHUmxRvjwAHOfyN0mxrpqLUpcjsK3NHYMo4R1o6eho2ZyIb2FoeOC3ILK8kZ2HQMOuWywGXUkJBCeTbYFS0+ym1h2/6UgmvnrvKYZZtIEXGf75C2cIAp5LHNd71x7uPoTjakrWH9e3KFpaatjUvJUysFw0KrLMYMW2lTg4PeUQx6kJEALvxXEmCdVyPLHtCSjBhc01XCjIgafxou+PE6KC1dhxSCwoBCc+N4P3btM84pmdSSjJnjO/nvY4LQfVyz5/I+v6IwjUOMjy+MVCxIbKupTJaEktp7cTKU42Pvjh2m/8cSpC6aPsaX/MHSuUQLVVsIa4RUTs/r/BVAexNdjdnsNG7j/rV93xheLMzKnFrPeTEQchCyCcKb25aAIn7lrAertrZwyNXM8N6zfWrFo3d2SmOEcF83x/r+OOFgrAHYWF7cELjhV7UQo/6WAIUVl9JFl8a//HZ66VpbY3I9QKZqPru77lA+iOWAIr0hKxHCmmr0othSyeIl5y3qt4xT8gSNrKEZozs8Els67rgsLOZ+ygzwMfbtNhobfgzpEyGnz7htPtzUi6PuOoj7K0WF/MXiUFxwGajRD1hjYXHXI9p406qOyinp5/tiWcDHY0jIu4n64Qfq7kliB2gemag9QbOia0PbbDMbd43SHuvxFxrAocxins7MX5Kqbe1QixKBxoV4//PfAgGCu+Rlm4SvZizyDH+0reDHp92iO0BuX3bCfItl0PEwvYLqpwXG2MHlGsQ4S8pMJZv1JGmHiEoHQDdOjwmVlEP/nE9ADKjI8xLI0OOGITfy0SbeG/C2jKUDGSlDhM9I3IpK9iup6XnbRNC7yqueNsJCCIiXzdQhnaGN+46umnEdy5U5UbUJ48LFM9GkJo8BdDOiAZ7ZIQbKhYLMqvhU2wmNxjEAsS2AI7y4nWF64duePbk7YV3zvAVLEMD9AxJRNa3KDUibV7DjnkuprMEYjScFNcaR2ceP2u9R/5k1052Ryme5phAFRswlHjAudiP4dOy7CaxLgdJh9vUlU1702/+LPa1U9fvPi9qlA4XEUBJc3dFlpsR457IDl1iPqLp7o81NQgyV19iYU38uTiv975Pd3SiwQcsGjx+v4/6fl5T7EOOMTCtpbKxfemsQq/3olQZcminADAAI0cuGLHaHOFxbuGvRk/Z9u7CULqoVR6NE0yx1avj30oRhc/jWUoIALGxkz0dg1Dl9iaI7LqOOXKsXJFwjiuEAi70Jra2nW1PL08zLBhZsMABpW5csI7TPfew9ipFKcn5k1i+1KyCWKjC3W/8dF1d666+RaabBVTFTHacjoojBNDh0NDxk+IPTlwfqJkWpbnpFHXIbLbmpxEQ3ff/Z0g/mauXsoln9wDRjy/NHsQFw3P6vWuTJ43/+FZrk2cvAFRipCKdfD9y2+pjRj78s0KdCUDKJvdV91ChngV38T20TM+gghjpJaPlpFr2xbEz5g4A/NGt5rNwdwmYGeeeMXBSLHHUIc+6RsojRH9VTUm3/mLf/64b470XvoxoTKhlMBQ2jMEzo2PjxdGMppmn1RM24bWFJqaQv4BcuJa2Sam7Zokq1ldCsz06NCBHrhwqVQYpfFj42NZexz1EW9SR/kT58nEeQKJb2fPXjjp0u/YUkwHEgLeOnf2nOuf1TRTM02CLKLTPy60/x1CCztqn7Ev+BdsC3m+30decQvW/wBNTwU+CfUQAQAAAABJRU5ErkJggg==')";
+
+    if (options.baseSwitcher) {
+        var switcherContent = '<div class="base-map-switcher" title="Toggle Base Layer" style="';
+        switcherContent += 'position: absolute; top: 70px; left: 4px; border: solid black 1px; ';
+        switcherContent += 'height: 50px; width: 50px; z-index: 10; border-radius: 4px; background: ' + aerialCss + ';';
+        switcherContent += '"></div>';
+        $mapDiv.append(switcherContent);
+
+        $mapDiv.find('.base-map-switcher').click(function () {
+            "use strict";
+
+            osmLayer.setVisible(!osmLayer.getVisible());
+            satLayer.setVisible(!satLayer.getVisible());
+
+            if (osmLayer.getVisible()) {
+                (0, _jquery2.default)(this).css('background', aerialCss);
+            } else {
+                (0, _jquery2.default)(this).css('background', osmCss);
+            }
+        });
+    }
+
+    if (options.zoom < 0 || options.zoom > 28) {
+        throw 'zoom out of range';
+    }
+
+    if (options.center.x >= -180 && options.center.x <= 180 && options.center.y >= -90 && options.center.y <= 90) {
+        var p = new _ol2.default.geom.Point([options.center.x, options.center.y]);
+        p.transform("EPSG:4326", "EPSG:3857");
+        var coordinates = p.getCoordinates();
+        options.center.x = coordinates[0];
+        options.center.y = coordinates[1];
+    }
+
+    var map = new _ol2.default.Map({
+        layers: [osmLayer, satLayer],
+        target: options.divId,
+        controls: _ol2.default.control.defaults({
+            attributionOptions: { collapsible: false }
+        }),
+        view: new _ol2.default.View({
+            center: [options.center.x, options.center.y],
+            zoom: options.zoom,
+            minZoom: options.minZoom,
+            maxZoom: options.maxZoom
+        })
+    });
+
+    if (options.fullScreen) {
+        map.addControl(new _ol2.default.control.FullScreen());
+    }
+
+    return map;
+}
+
+nm.quickMapBase = quickMapBase;
+exports.default = quickMapBase;
+
+},{"../jquery":342,"../ol/ol":360,"../util/provide":364}],358:[function(require,module,exports){
+'use strict';
+
+Object.defineProperty(exports, "__esModule", {
+    value: true
+});
+exports.zoomToResolution = zoomToResolution;
+exports.resolutionToZoom = resolutionToZoom;
+
+var _provide = require('../util/provide');
+
+var _provide2 = _interopRequireDefault(_provide);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+var nm = (0, _provide2.default)('olHelpers.zoomResolutionConvert'); /**
+                                                                     * Created by gavorhes on 12/14/2015.
+                                                                     */
+
+var _zoomResLookup = [156543.03392804097, //0
+78271.51696402048, //1
+39135.75848201024, //2
+19567.87924100512, //3
+9783.93962050256, //4
+4891.96981025128, //5
+2445.98490512564, //6
+1222.99245256282, //7
+611.49622628141, //8
+305.748113140705, //9
+152.8740565703525, //10
+76.43702828517625, //11
+38.21851414258813, //12
+19.109257071294063, //13
+9.554628535647032, //14
+4.777314267823516, //15
+2.388657133911758, //16
+1.194328566955879, //17
+0.5971642834779395, //18
+0.29858214173896974, //19
+0.14929107086948487, //20
+0.07464553543474244, //21
+0.03732276771737122, //22
+0.01866138385868561, //23
+0.009330691929342804, //24
+0.004665345964671402, //25
+0.002332672982335701, //26
+0.0011663364911678506, //27
+0.0005831682455839253 //28
+];
+
+/**
+ * Get the resolution given the zoom level
+ * @param {number} zoomLevel - the zoom level
+ * @returns {number|*} the map resolution
+ */
+function zoomToResolution(zoomLevel) {
+    "use strict";
+
+    if (typeof zoomLevel == 'number') {
+        if (zoomLevel % 1 === 0 && zoomLevel >= 0 && zoomLevel <= 28) {
+            return _zoomResLookup[zoomLevel];
+        } else {
+            console.log('invalid zoom level provided: ' + zoomLevel);
+
+            return undefined;
+        }
+    } else {
+        return undefined;
+    }
+}
+nm.zoomToResolution = zoomToResolution;
+
+/**
+ * Get resolution from the zoom level
+ * @param {number} resolution - the resolution
+ * @returns {number|*} the zoom level
+ */
+function resolutionToZoom(resolution) {
+    for (var i = 0; i < _zoomResLookup.length; i++) {
+        if (resolution >= _zoomResLookup[i]) {
+            return i;
+        }
+    }
+
+    return 0;
+}
+
+nm.resolutionToZoom = resolutionToZoom;
+
+},{"../util/provide":364}],359:[function(require,module,exports){
+// OpenLayers 3. See http://openlayers.org/
+// License: https://raw.githubusercontent.com/openlayers/ol3/master/LICENSE.md
+(function (root, factory) {
+  if (typeof exports === "object") {
+    module.exports = factory();
+  } else if (typeof define === "function" && define.amd) {
+    define([], factory);
+  } else {
+    root.ol = factory();
+  }
+}(this, function () {
+  var OPENLAYERS = {};
+  var p,x=this;function F(b,c,d){b=b.split(".");d=d||x;b[0]in d||!d.execScript||d.execScript("var "+b[0]);for(var e;b.length&&(e=b.shift());)b.length||void 0===c?d[e]?d=d[e]:d=d[e]={}:d[e]=c}function aa(b){b.ua=function(){return b.Ac?b.Ac:b.Ac=new b}}
+function ba(b){var c=typeof b;if("object"==c)if(b){if(b instanceof Array)return"array";if(b instanceof Object)return c;var d=Object.prototype.toString.call(b);if("[object Window]"==d)return"object";if("[object Array]"==d||"number"==typeof b.length&&"undefined"!=typeof b.splice&&"undefined"!=typeof b.propertyIsEnumerable&&!b.propertyIsEnumerable("splice"))return"array";if("[object Function]"==d||"undefined"!=typeof b.call&&"undefined"!=typeof b.propertyIsEnumerable&&!b.propertyIsEnumerable("call"))return"function"}else return"null";
+else if("function"==c&&"undefined"==typeof b.call)return"object";return c}function ca(b){var c=ba(b);return"array"==c||"object"==c&&"number"==typeof b.length}function da(b){return"string"==typeof b}function ea(b){return"number"==typeof b}function ga(b){return"function"==ba(b)}function ha(b){var c=typeof b;return"object"==c&&null!=b||"function"==c}function I(b){return b[ia]||(b[ia]=++ja)}var ia="closure_uid_"+(1E9*Math.random()>>>0),ja=0;function ka(b,c,d){return b.call.apply(b.bind,arguments)}
+function la(b,c,d){if(!b)throw Error();if(2<arguments.length){var e=Array.prototype.slice.call(arguments,2);return function(){var d=Array.prototype.slice.call(arguments);Array.prototype.unshift.apply(d,e);return b.apply(c,d)}}return function(){return b.apply(c,arguments)}}function ma(b,c,d){ma=Function.prototype.bind&&-1!=Function.prototype.bind.toString().indexOf("native code")?ka:la;return ma.apply(null,arguments)}
+function na(b,c){var d=Array.prototype.slice.call(arguments,1);return function(){var c=d.slice();c.push.apply(c,arguments);return b.apply(this,c)}}function M(b,c){function d(){}d.prototype=c.prototype;b.X=c.prototype;b.prototype=new d;b.prototype.constructor=b;b.We=function(b,d,g){for(var h=Array(arguments.length-2),k=2;k<arguments.length;k++)h[k-2]=arguments[k];return c.prototype[d].apply(b,h)}};var oa;function pa(){};var qa;var sa=String.prototype.trim?function(b){return b.trim()}:function(b){return b.replace(/^[\s\xa0]+|[\s\xa0]+$/g,"")};function ta(b){if(!ua.test(b))return b;-1!=b.indexOf("&")&&(b=b.replace(va,"&amp;"));-1!=b.indexOf("<")&&(b=b.replace(wa,"&lt;"));-1!=b.indexOf(">")&&(b=b.replace(xa,"&gt;"));-1!=b.indexOf('"')&&(b=b.replace(ya,"&quot;"));-1!=b.indexOf("'")&&(b=b.replace(za,"&#39;"));-1!=b.indexOf("\x00")&&(b=b.replace(Aa,"&#0;"));return b}var va=/&/g,wa=/</g,xa=/>/g,ya=/"/g,za=/'/g,Aa=/\x00/g,ua=/[\x00&<>"']/;
+function Ba(b,c){return b<c?-1:b>c?1:0};function Ca(b,c,d){return Math.min(Math.max(b,c),d)}var Da=function(){var b;"cosh"in Math?b=Math.cosh:b=function(b){b=Math.exp(b);return(b+1/b)/2};return b}();function Ea(b,c){var d=b%c;return 0>d*c?d+c:d};function Fa(b){return function(c){if(c)return[Ca(c[0],b[0],b[2]),Ca(c[1],b[1],b[3])]}}function Ga(b){return b};function Ha(b,c){return b>c?1:b<c?-1:0}function Ia(b,c,d){var e=b.length;if(b[0]<=c)return 0;if(!(c<=b[e-1]))if(0<d)for(d=1;d<e;++d){if(b[d]<c)return d-1}else if(0>d)for(d=1;d<e;++d){if(b[d]<=c)return d}else for(d=1;d<e;++d){if(b[d]==c)return d;if(b[d]<c)return b[d-1]-c<c-b[d]?d-1:d}return e-1}function Ja(b){return b.reduce(function(b,d){return Array.isArray(d)?b.concat(Ja(d)):b.concat(d)},[])}function Ka(b,c){var d,e=ca(c)?c:[c],f=e.length;for(d=0;d<f;d++)b[b.length]=e[d]}
+function La(b,c){var d=b.indexOf(c),e=-1<d;e&&b.splice(d,1);return e}function Ma(b,c){var d=b.length;if(d!==c.length)return!1;for(var e=0;e<d;e++)if(b[e]!==c[e])return!1;return!0}function Na(b){var c=Oa,d=b.length,e=Array(b.length),f;for(f=0;f<d;f++)e[f]={index:f,value:b[f]};e.sort(function(b,d){return c(b.value,d.value)||b.index-d.index});for(f=0;f<b.length;f++)b[f]=e[f].value};function Pa(b){return function(c,d,e){if(void 0!==c)return c=Ia(b,c,e),c=Ca(c+d,0,b.length-1),b[c]}}function Qa(b,c,d){return function(e,f,g){if(void 0!==e)return e=Math.max(Math.floor(Math.log(c/e)/Math.log(b)+(0<g?0:0>g?1:.5))+f,0),void 0!==d&&(e=Math.min(e,d)),c/Math.pow(b,e)}};function Ra(b){if(void 0!==b)return 0}function Sa(b,c){if(void 0!==b)return b+c}function Ta(b){var c=2*Math.PI/b;return function(b,e){if(void 0!==b)return b=Math.floor((b+e)/c+.5)*c}}function Ua(){var b=5*Math.PI/180;return function(c,d){if(void 0!==c)return Math.abs(c+d)<=b?0:c+d}};function Va(b,c,d){this.center=b;this.resolution=c;this.rotation=d};var Wa="function"===typeof Object.assign?Object.assign:function(b,c){if(void 0===b||null===b)throw new TypeError("Cannot convert undefined or null to object");for(var d=Object(b),e=1,f=arguments.length;e<f;++e){var g=arguments[e];if(void 0!==g&&null!==g)for(var h in g)g.hasOwnProperty(h)&&(d[h]=g[h])}return d};function Ya(b){for(var c in b)delete b[c]}function Za(b){var c=[],d;for(d in b)c.push(b[d]);return c}function $a(b){for(var c in b)return!1;return!c};var ab="olm_"+(1E4*Math.random()|0);function bb(b){function c(c){var e=b.listener,f=b.hc||b.target;b.kc&&N(b);return e.call(f,c)}return b.ic=c}function cb(b,c,d,e){for(var f,g=0,h=b.length;g<h;++g)if(f=b[g],f.listener===c&&f.hc===d)return e&&(f.deleteIndex=g),f}function db(b,c){var d=b[ab];return d?d[c]:void 0}function eb(b){var c=b[ab];c||(c=b[ab]={});return c}
+function fb(b,c){var d=db(b,c);if(d){for(var e=0,f=d.length;e<f;++e)b.removeEventListener(c,d[e].ic),Ya(d[e]);d.length=0;if(d=b[ab])delete d[c],0===Object.keys(d).length&&delete b[ab]}}function Q(b,c,d,e,f){var g=eb(b),h=g[c];h||(h=g[c]=[]);(g=cb(h,d,e,!1))?f||(g.kc=!1):(g={hc:e,kc:!!f,listener:d,target:b,type:c},b.addEventListener(c,bb(g)),h.push(g));return g}function gb(b,c,d,e){(b=db(b,c))&&(d=cb(b,d,e,!0))&&N(d)}
+function N(b){if(b&&b.target){b.target.removeEventListener(b.type,b.ic);var c=db(b.target,b.type);if(c){var d="deleteIndex"in b?b.deleteIndex:c.indexOf(b);-1!==d&&c.splice(d,1);0===c.length&&fb(b.target,b.type)}Ya(b)}}function hb(b){var c=eb(b),d;for(d in c)fb(b,d)};function ib(){}ib.prototype.ja=!1;function jb(b){b.ja||(b.ja=!0,b.J())}ib.prototype.J=pa;function R(b,c){this.type=b;this.target=c||null}R.prototype.preventDefault=R.prototype.stopPropagation=function(){this.xe=!0};function kb(b){b.stopPropagation()}function lb(b){b.preventDefault()};function mb(){this.H={};this.A={}}M(mb,ib);mb.prototype.addEventListener=function(b,c){var d=this.A[b];d||(d=this.A[b]=[]);-1===d.indexOf(c)&&d.push(c)};function S(b,c){var d="string"===typeof c?new R(c):c,e=d.type;d.target=b;var f=b.A[e],g;if(f){e in b.H||(b.H[e]=0);for(var h=0,k=f.length;h<k;++h)if(!1===f[h].call(b,d)||d.xe){g=!1;break}d=b.H[e];for(delete b.H[e];d--;)b.removeEventListener(e,pa);return g}}mb.prototype.J=function(){hb(this)};
+function nb(b,c){return c?c in b.A:0<Object.keys(b.A).length}mb.prototype.removeEventListener=function(b,c){var d=this.A[b];if(d){var e=d.indexOf(c);b in this.H?(d[e]=pa,++this.H[b]):(d.splice(e,1),0===d.length&&delete this.A[b])}};function ob(){mb.call(this);this.f=0}M(ob,mb);ob.prototype.v=function(){++this.f;S(this,"change")};ob.prototype.ba=function(b,c,d){if(Array.isArray(b)){for(var e=b.length,f=Array(e),g=0;g<e;++g)f[g]=Q(this,b[g],c,d);return f}return Q(this,b,c,d)};function pb(b,c,d){R.call(this,b);this.key=c;this.oldValue=d}M(pb,R);function T(b){ob.call(this);I(this);this.K={};void 0!==b&&this.l(b)}M(T,ob);var qb={};function rb(b){return qb.hasOwnProperty(b)?qb[b]:qb[b]="change:"+b}T.prototype.get=function(b){var c;this.K.hasOwnProperty(b)&&(c=this.K[b]);return c};T.prototype.za=function(){return Wa({},this.K)};T.prototype.set=function(b,c,d){d?this.K[b]=c:(d=this.K[b],this.K[b]=c,d!==c&&(c=rb(b),S(this,new pb(c,b,d)),S(this,new pb("propertychange",b,d))))};
+T.prototype.l=function(b,c){for(var d in b)this.set(d,b[d],c)};function sb(b,c,d){void 0===d&&(d=[0,0]);d[0]=b[0]*c+.5|0;d[1]=b[1]*c+.5|0;return d}function tb(b,c){if(Array.isArray(b))return b;void 0===c?c=[b,b]:(c[0]=b,c[1]=b);return c};function ub(b,c){b[0]+=c[0];b[1]+=c[1]}function vb(b,c){var d=Math.cos(c),e=Math.sin(c),f=b[1]*d+b[0]*e;b[0]=b[0]*d-b[1]*e;b[1]=f};function wb(b){this.length=b.length||b;for(var c=0;c<this.length;c++)this[c]=b[c]||0}wb.prototype.BYTES_PER_ELEMENT=4;wb.prototype.set=function(b,c){c=c||0;for(var d=0;d<b.length&&c+d<this.length;d++)this[c+d]=b[d]};wb.prototype.toString=Array.prototype.join;"undefined"==typeof Float32Array&&(wb.BYTES_PER_ELEMENT=4,wb.prototype.BYTES_PER_ELEMENT=wb.prototype.BYTES_PER_ELEMENT,wb.prototype.set=wb.prototype.set,wb.prototype.toString=wb.prototype.toString,F("Float32Array",wb,void 0));function xb(b){this.length=b.length||b;for(var c=0;c<this.length;c++)this[c]=b[c]||0}xb.prototype.BYTES_PER_ELEMENT=8;xb.prototype.set=function(b,c){c=c||0;for(var d=0;d<b.length&&c+d<this.length;d++)this[c+d]=b[d]};xb.prototype.toString=Array.prototype.join;if("undefined"==typeof Float64Array){try{xb.BYTES_PER_ELEMENT=8}catch(b){}xb.prototype.BYTES_PER_ELEMENT=xb.prototype.BYTES_PER_ELEMENT;xb.prototype.set=xb.prototype.set;xb.prototype.toString=xb.prototype.toString;F("Float64Array",xb,void 0)};function yb(b,c,d,e,f){b[0]=c;b[1]=d;b[2]=e;b[3]=f};function zb(){var b=Array(16);Ab(b,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);return b}function Bb(){var b=Array(16);Ab(b,1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1);return b}function Ab(b,c,d,e,f,g,h,k,l,m,n,q,r,u,w,y,z){b[0]=c;b[1]=d;b[2]=e;b[3]=f;b[4]=g;b[5]=h;b[6]=k;b[7]=l;b[8]=m;b[9]=n;b[10]=q;b[11]=r;b[12]=u;b[13]=w;b[14]=y;b[15]=z}
+function Cb(b,c){b[0]=c[0];b[1]=c[1];b[2]=c[2];b[3]=c[3];b[4]=c[4];b[5]=c[5];b[6]=c[6];b[7]=c[7];b[8]=c[8];b[9]=c[9];b[10]=c[10];b[11]=c[11];b[12]=c[12];b[13]=c[13];b[14]=c[14];b[15]=c[15]}function Db(b){b[0]=1;b[1]=0;b[2]=0;b[3]=0;b[4]=0;b[5]=1;b[6]=0;b[7]=0;b[8]=0;b[9]=0;b[10]=1;b[11]=0;b[12]=0;b[13]=0;b[14]=0;b[15]=1}
+function Eb(b,c){var d=b[0],e=b[1],f=b[2],g=b[3],h=b[4],k=b[5],l=b[6],m=b[7],n=b[8],q=b[9],r=b[10],u=b[11],w=b[12],y=b[13],z=b[14],D=b[15],t=d*k-e*h,v=d*l-f*h,B=d*m-g*h,E=e*l-f*k,C=e*m-g*k,G=f*m-g*l,J=n*y-q*w,A=n*z-r*w,H=n*D-u*w,O=q*z-r*y,P=q*D-u*y,L=r*D-u*z,K=t*L-v*P+B*O+E*H-C*A+G*J;0!=K&&(K=1/K,c[0]=(k*L-l*P+m*O)*K,c[1]=(-e*L+f*P-g*O)*K,c[2]=(y*G-z*C+D*E)*K,c[3]=(-q*G+r*C-u*E)*K,c[4]=(-h*L+l*H-m*A)*K,c[5]=(d*L-f*H+g*A)*K,c[6]=(-w*G+z*B-D*v)*K,c[7]=(n*G-r*B+u*v)*K,c[8]=(h*P-k*H+m*J)*K,c[9]=(-d*P+
+e*H-g*J)*K,c[10]=(w*C-y*B+D*t)*K,c[11]=(-n*C+q*B-u*t)*K,c[12]=(-h*O+k*A-l*J)*K,c[13]=(d*O-e*A+f*J)*K,c[14]=(-w*E+y*v-z*t)*K,c[15]=(n*E-q*v+r*t)*K)}function Fb(b,c,d){var e=b[1]*c+b[5]*d+0*b[9]+b[13],f=b[2]*c+b[6]*d+0*b[10]+b[14],g=b[3]*c+b[7]*d+0*b[11]+b[15];b[12]=b[0]*c+b[4]*d+0*b[8]+b[12];b[13]=e;b[14]=f;b[15]=g}function Gb(b,c,d){Ab(b,b[0]*c,b[1]*c,b[2]*c,b[3]*c,b[4]*d,b[5]*d,b[6]*d,b[7]*d,1*b[8],1*b[9],1*b[10],1*b[11],b[12],b[13],b[14],b[15])}
+function Hb(b,c){var d=b[0],e=b[1],f=b[2],g=b[3],h=b[4],k=b[5],l=b[6],m=b[7],n=Math.cos(c),q=Math.sin(c);b[0]=d*n+h*q;b[1]=e*n+k*q;b[2]=f*n+l*q;b[3]=g*n+m*q;b[4]=d*-q+h*n;b[5]=e*-q+k*n;b[6]=f*-q+l*n;b[7]=g*-q+m*n}new Float64Array(3);new Float64Array(3);new Float64Array(4);new Float64Array(4);new Float64Array(4);new Float64Array(16);function Ib(b){for(var c=Jb(),d=0,e=b.length;d<e;++d)Kb(c,b[d]);return c}function Lb(b,c,d){return d?(d[0]=b[0]-c,d[1]=b[1]-c,d[2]=b[2]+c,d[3]=b[3]+c,d):[b[0]-c,b[1]-c,b[2]+c,b[3]+c]}function Mb(b,c){return c?(c[0]=b[0],c[1]=b[1],c[2]=b[2],c[3]=b[3],c):b.slice()}function Nb(b,c){return b[0]<=c[0]&&c[2]<=b[2]&&b[1]<=c[1]&&c[3]<=b[3]}function Jb(){return[Infinity,Infinity,-Infinity,-Infinity]}function Ob(b,c,d,e,f){return f?(f[0]=b,f[1]=c,f[2]=d,f[3]=e,f):[b,c,d,e]}
+function Pb(b){return Ob(Infinity,Infinity,-Infinity,-Infinity,b)}function Qb(b,c){var d=b[0],e=b[1];return Ob(d,e,d,e,c)}function Rb(b,c){return b[0]==c[0]&&b[2]==c[2]&&b[1]==c[1]&&b[3]==c[3]}function Sb(b,c){c[0]<b[0]&&(b[0]=c[0]);c[2]>b[2]&&(b[2]=c[2]);c[1]<b[1]&&(b[1]=c[1]);c[3]>b[3]&&(b[3]=c[3])}function Kb(b,c){c[0]<b[0]&&(b[0]=c[0]);c[0]>b[2]&&(b[2]=c[0]);c[1]<b[1]&&(b[1]=c[1]);c[1]>b[3]&&(b[3]=c[1])}
+function Tb(b,c,d,e,f){for(;d<e;d+=f){var g=b,h=c[d],k=c[d+1];g[0]=Math.min(g[0],h);g[1]=Math.min(g[1],k);g[2]=Math.max(g[2],h);g[3]=Math.max(g[3],k)}return b}function Ub(b){var c=0;b[2]<b[0]||b[3]<b[1]||(c=Vb(b)*Wb(b));return c}function Xb(b){return[b[0],b[1]]}function Yb(b){return[(b[0]+b[2])/2,(b[1]+b[3])/2]}
+function Zb(b,c,d,e){var f=c*e[0]/2;e=c*e[1]/2;c=Math.cos(d);var g=Math.sin(d);d=f*c;f*=g;c*=e;var h=e*g,k=b[0],l=b[1];b=k-d+h;e=k-d-h;g=k+d-h;d=k+d+h;var h=l-f-c,k=l-f+c,m=l+f+c,f=l+f-c;return Ob(Math.min(b,e,g,d),Math.min(h,k,m,f),Math.max(b,e,g,d),Math.max(h,k,m,f),void 0)}function Wb(b){return b[3]-b[1]}function $b(b,c){var d=Jb();ac(b,c)&&(d[0]=b[0]>c[0]?b[0]:c[0],d[1]=b[1]>c[1]?b[1]:c[1],d[2]=b[2]<c[2]?b[2]:c[2],d[3]=b[3]<c[3]?b[3]:c[3]);return d}function bc(b){return[b[0],b[3]]}
+function Vb(b){return b[2]-b[0]}function ac(b,c){return b[0]<=c[2]&&b[2]>=c[0]&&b[1]<=c[3]&&b[3]>=c[1]};function cc(){return!0}function dc(){return!1};/*
+
+ Latitude/longitude spherical geodesy formulae taken from
+ http://www.movable-type.co.uk/scripts/latlong.html
+ Licensed under CC-BY-3.0.
+*/
+function ec(b){this.radius=b}function fc(b,c){var d=b[1]*Math.PI/180,e=c[1]*Math.PI/180,f=(e-d)/2,g=(c[0]-b[0])*Math.PI/180/2,d=Math.sin(f)*Math.sin(f)+Math.sin(g)*Math.sin(g)*Math.cos(d)*Math.cos(e);return 2*gc.radius*Math.atan2(Math.sqrt(d),Math.sqrt(1-d))}
+ec.prototype.offset=function(b,c,d){var e=b[1]*Math.PI/180;c/=this.radius;var f=Math.asin(Math.sin(e)*Math.cos(c)+Math.cos(e)*Math.sin(c)*Math.cos(d));return[180*(b[0]*Math.PI/180+Math.atan2(Math.sin(d)*Math.sin(c)*Math.cos(e),Math.cos(c)-Math.sin(e)*Math.sin(f)))/Math.PI,180*f/Math.PI]};var gc=new ec(6370997);var hc={};hc.degrees=2*Math.PI*gc.radius/360;hc.ft=.3048;hc.m=1;hc["us-ft"]=1200/3937;
+function ic(b){this.qa=b.code;this.b=b.units;this.h=void 0!==b.extent?b.extent:null;this.f=void 0!==b.global?b.global:!1;this.a=!(!this.f||!this.h);this.i=void 0!==b.getPointResolution?b.getPointResolution:this.j;this.c=null;this.g=b.metersPerUnit;var c=jc,d=b.code,e=kc||x.proj4;if("function"==typeof e&&void 0===c[d]){var f=e.defs(d);if(void 0!==f){void 0===b.metersPerUnit&&(this.g=f.to_meter);void 0===b.units&&(this.b=f.units);var g,h;for(g in c)if(b=e.defs(g),void 0!==b)if(c=lc(g),b===f)mc([c,this]);
+else{h=e(g,d);b=h.forward;h=h.inverse;var c=lc(c),k=lc(this);nc(c,k,oc(b));nc(k,c,oc(h))}}}}ic.prototype.l=function(){return this.qa};ic.prototype.C=function(){return this.h};function pc(b){return b.g||hc[b.b]}ic.prototype.j=function(b,c){if("degrees"==this.b)return b;var d=qc(this,lc("EPSG:4326")),e=[c[0]-b/2,c[1],c[0]+b/2,c[1],c[0],c[1]-b/2,c[0],c[1]+b/2],e=d(e,e,2),d=(fc(e.slice(0,2),e.slice(2,4))+fc(e.slice(4,6),e.slice(6,8)))/2,e=pc(this);void 0!==e&&(d/=e);return d};
+ic.prototype.getPointResolution=function(b,c){return this.i(b,c)};var jc={},rc={},kc=null;function mc(b){sc(b);b.forEach(function(c){b.forEach(function(b){c!==b&&nc(c,b,tc)})})}function uc(b){jc[b.qa]=b;nc(b,b,tc)}function sc(b){var c=[];b.forEach(function(b){c.push(uc(b))})}function vc(b){return b?"string"===typeof b?lc(b):b:lc("EPSG:3857")}function nc(b,c,d){b=b.qa;c=c.qa;b in rc||(rc[b]={});rc[b][c]=d}
+function oc(b){return function(c,d,e){var f=c.length;e=void 0!==e?e:2;d=void 0!==d?d:Array(f);var g,h;for(h=0;h<f;h+=e)for(g=b([c[h],c[h+1]]),d[h]=g[0],d[h+1]=g[1],g=e-1;2<=g;--g)d[h+g]=c[h+g];return d}}function lc(b){var c;if(b instanceof ic)c=b;else if("string"===typeof b){c=jc[b];var d=kc||x.proj4;void 0===c&&"function"==typeof d&&void 0!==d.defs(b)&&(c=new ic({code:b}),uc(c))}else c=null;return c}function wc(b,c){if(b===c)return!0;var d=b.b===c.b;return b.qa===c.qa?d:qc(b,c)===tc&&d}
+function xc(b,c){var d=lc(b),e=lc(c);return qc(d,e)}function qc(b,c){var d=b.qa,e=c.qa,f;d in rc&&e in rc[d]&&(f=rc[d][e]);void 0===f&&(f=yc);return f}function yc(b,c){if(void 0!==c&&b!==c){for(var d=0,e=b.length;d<e;++d)c[d]=b[d];b=c}return b}function tc(b,c){var d;if(void 0!==c){d=0;for(var e=b.length;d<e;++d)c[d]=b[d];d=c}else d=b.slice();return d};function zc(){T.call(this);this.u=Jb();this.w=-1;this.h={};this.s=this.i=0}M(zc,T);zc.prototype.C=function(b){this.w!=this.f&&(this.u=this.ib(this.u),this.w=this.f);var c=this.u;b?(b[0]=c[0],b[1]=c[1],b[2]=c[2],b[3]=c[3]):b=c;return b};zc.prototype.o=function(b,c){this.Eb(xc(b,c));return this};function Ac(b,c,d,e,f,g){var h=f[0],k=f[1],l=f[4],m=f[5],n=f[12];f=f[13];for(var q=g?g:[],r=0;c<d;c+=e){var u=b[c],w=b[c+1];q[r++]=h*u+l*w+n;q[r++]=k*u+m*w+f}g&&q.length!=r&&(q.length=r);return q};function Bc(){zc.call(this);this.g="XY";this.b=2;this.a=null}M(Bc,zc);function Cc(b){if("XY"==b)return 2;if("XYZ"==b||"XYM"==b)return 3;if("XYZM"==b)return 4}p=Bc.prototype;p.ib=function(b){var c=this.a,d=this.a.length,e=this.b;b=Pb(b);return Tb(b,c,0,d,e)};
+p.Ob=function(b){this.s!=this.f&&(Ya(this.h),this.i=0,this.s=this.f);if(0>b||0!==this.i&&b<=this.i)return this;var c=b.toString();if(this.h.hasOwnProperty(c))return this.h[c];var d=this.Ma(b);if(d.a.length<this.a.length)return this.h[c]=d;this.i=b;return this};p.Ma=function(){return this};function U(b,c,d){b.b=Cc(c);b.g=c;b.a=d}function Dc(b,c,d,e){if(c)d=Cc(c);else{for(c=0;c<e;++c){if(0===d.length){b.g="XY";b.b=2;return}d=d[0]}d=d.length;c=2==d?"XY":3==d?"XYZ":4==d?"XYZM":void 0}b.g=c;b.b=d}
+p.Eb=function(b){this.a&&(b(this.a,this.a,this.b),this.v())};p.rotate=function(b,c){var d=this.a;if(d){for(var e=d.length,f=this.b,g=d?d:[],h=Math.cos(b),k=Math.sin(b),l=c[0],m=c[1],n=0,q=0;q<e;q+=f){var r=d[q]-l,u=d[q+1]-m;g[n++]=l+r*h-u*k;g[n++]=m+r*k+u*h;for(r=q+2;r<q+f;++r)g[n++]=d[r]}d&&g.length!=n&&(g.length=n);this.v()}};function Ec(b,c){var d=0,e,f;e=0;for(f=c.length;e<f;++e)b[d++]=c[e];return d}function Fc(b,c,d,e){var f,g;f=0;for(g=d.length;f<g;++f){var h=d[f],k;for(k=0;k<e;++k)b[c++]=h[k]}return c}function Gc(b,c,d,e,f){f=f?f:[];var g=0,h,k;h=0;for(k=d.length;h<k;++h)c=Fc(b,c,d[h],e),f[g++]=c;f.length=g;return f};function Hc(b,c,d,e,f){f=void 0!==f?f:[];for(var g=0;c<d;c+=e)f[g++]=b.slice(c,c+e);f.length=g;return f}function Ic(b,c,d,e,f){f=void 0!==f?f:[];var g=0,h,k;h=0;for(k=d.length;h<k;++h){var l=d[h];f[g++]=Hc(b,c,l,e,f[g]);c=l}f.length=g;return f};function Jc(b,c,d,e,f,g,h){var k=(d-c)/e;if(3>k){for(;c<d;c+=e)g[h++]=b[c],g[h++]=b[c+1];return h}var l=Array(k);l[0]=1;l[k-1]=1;d=[c,d-e];for(var m=0,n;0<d.length;){var q=d.pop(),r=d.pop(),u=0,w=b[r],y=b[r+1],z=b[q],D=b[q+1];for(n=r+e;n<q;n+=e){var t,v=b[n];t=b[n+1];var B=w,E=y,C=z-B,G=D-E;if(0!==C||0!==G){var J=((v-B)*C+(t-E)*G)/(C*C+G*G);1<J?(B=z,E=D):0<J&&(B+=C*J,E+=G*J)}v=B-v;t=E-t;t=v*v+t*t;t>u&&(m=n,u=t)}u>f&&(l[(m-c)/e]=1,r+e<m&&d.push(r,m),m+e<q&&d.push(m,q))}for(n=0;n<k;++n)l[n]&&(g[h++]=
+b[c+n*e],g[h++]=b[c+n*e+1]);return h}
+function Kc(b,c,d,e,f,g,h,k){var l,m;l=0;for(m=d.length;l<m;++l){var n=d[l];a:{var q=b,r=n,u=e,w=f,y=g;if(c!=r){var z=w*Math.round(q[c]/w),D=w*Math.round(q[c+1]/w);c+=u;y[h++]=z;y[h++]=D;var t=void 0,v=void 0;do if(t=w*Math.round(q[c]/w),v=w*Math.round(q[c+1]/w),c+=u,c==r){y[h++]=t;y[h++]=v;break a}while(t==z&&v==D);for(;c<r;){var B,E;B=w*Math.round(q[c]/w);E=w*Math.round(q[c+1]/w);c+=u;if(B!=t||E!=v){var C=t-z,G=v-D,J=B-z,A=E-D;C*A==G*J&&(0>C&&J<C||C==J||0<C&&J>C)&&(0>G&&A<G||G==A||0<G&&A>G)||(y[h++]=
+t,y[h++]=v,z=t,D=v);t=B;v=E}}y[h++]=t;y[h++]=v}}k.push(h);c=n}return h};function Lc(b,c){Bc.call(this);this.W(b,c)}M(Lc,Bc);p=Lc.prototype;p.clone=function(){var b=new Lc(null);U(b,this.g,this.a.slice());b.v();return b};p.ra=function(){return Hc(this.a,0,this.a.length,this.b)};p.Ma=function(b){var c=[];c.length=Jc(this.a,0,this.a.length,this.b,b,c,0);b=new Lc(null);U(b,"XY",c);b.v();return b};p.U=function(){return"LinearRing"};p.W=function(b,c){b?(Dc(this,c,b,1),this.a||(this.a=[]),this.a.length=Fc(this.a,0,b,this.b)):U(this,"XY",null);this.v()};function Mc(b,c){Bc.call(this);this.W(b,c)}M(Mc,Bc);p=Mc.prototype;p.clone=function(){var b=new Mc(null);U(b,this.g,this.a.slice());b.v();return b};p.ra=function(){return this.a?this.a.slice():[]};p.ib=function(b){return Qb(this.a,b)};p.U=function(){return"Point"};p.W=function(b,c){b?(Dc(this,c,b,0),this.a||(this.a=[]),this.a.length=Ec(this.a,b)):U(this,"XY",null);this.v()};function Nc(b,c,d,e,f,g){for(var h=!1,k=b[d-e],l=b[d-e+1];c<d;c+=e){var m=b[c],n=b[c+1];l>g!=n>g&&f<(m-k)*(g-l)/(n-l)+k&&(h=!h);k=m;l=n}return h};function Oc(b,c,d,e,f,g,h){var k,l,m,n,q,r=f[g+1],u=[],w=d[0];m=b[w-e];q=b[w-e+1];for(k=c;k<w;k+=e){n=b[k];l=b[k+1];if(r<=q&&l<=r||q<=r&&r<=l)m=(r-q)/(l-q)*(n-m)+m,u.push(m);m=n;q=l}w=NaN;q=-Infinity;u.sort(Ha);m=u[0];k=1;for(l=u.length;k<l;++k){n=u[k];var y=Math.abs(n-m);if(y>q){m=(m+n)/2;var z;a:if(0!==d.length&&Nc(b,c,d[0],e,m,r)){var D=z=void 0;z=1;for(D=d.length;z<D;++z)if(Nc(b,d[z-1],d[z],e,m,r)){z=!1;break a}z=!0}else z=!1;z&&(w=m,q=y)}m=n}isNaN(w)&&(w=f[g]);return h?(h.push(w,r),h):[w,r]}
+;function Pc(b,c,d,e){for(var f=0,g=b[d-e],h=b[d-e+1];c<d;c+=e)var k=b[c],l=b[c+1],f=f+(k-g)*(l+h),g=k,h=l;return 0<f}function Qc(b,c,d,e){var f=0;e=void 0!==e?e:!1;var g,h;g=0;for(h=c.length;g<h;++g){var k=c[g],f=Pc(b,f,k,d);if(0===g){if(e&&f||!e&&!f)return!1}else if(e&&!f||!e&&f)return!1;f=k}return!0}
+function Rc(b,c,d,e,f){f=void 0!==f?f:!1;var g,h;g=0;for(h=d.length;g<h;++g){var k=d[g],l=Pc(b,c,k,e);if(0===g?f&&l||!f&&!l:f&&!l||!f&&l)for(var l=b,m=k,n=e;c<m-n;){var q;for(q=0;q<n;++q){var r=l[c+q];l[c+q]=l[m-n+q];l[m-n+q]=r}c+=n;m-=n}c=k}return c}function Sc(b,c,d,e){var f=0,g,h;g=0;for(h=c.length;g<h;++g)f=Rc(b,f,c[g],d,e);return f};function Tc(b,c){Bc.call(this);this.c=[];this.B=-1;this.D=null;this.G=-1;this.j=null;this.W(b,c)}M(Tc,Bc);p=Tc.prototype;p.clone=function(){var b=new Tc(null);Uc(b,this.g,this.a.slice(),this.c.slice());return b};p.ra=function(b){var c;void 0!==b?(c=Vc(this).slice(),Rc(c,0,this.c,this.b,b)):c=this.a;return Ic(c,0,this.c,this.b)};p.ab=function(){return this.c};function Wc(b){if(b.B!=b.f){var c=Yb(b.C());b.D=Oc(Vc(b),0,b.c,b.b,c,0);b.B=b.f}return b.D}
+function Vc(b){if(b.G!=b.f){var c=b.a;Qc(c,b.c,b.b)?b.j=c:(b.j=c.slice(),b.j.length=Rc(b.j,0,b.c,b.b));b.G=b.f}return b.j}p.Ma=function(b){var c=[],d=[];c.length=Kc(this.a,0,this.c,this.b,Math.sqrt(b),c,0,d);b=new Tc(null);Uc(b,"XY",c,d);return b};p.U=function(){return"Polygon"};p.W=function(b,c){if(b){Dc(this,c,b,2);this.a||(this.a=[]);var d=Gc(this.a,0,b,this.b,this.c);this.a.length=0===d.length?0:d[d.length-1];this.v()}else Uc(this,"XY",null,this.c)};function Uc(b,c,d,e){U(b,c,d);b.c=e;b.v()};function V(b){T.call(this);b=b||{};this.g=[0,0];var c={};c.center=void 0!==b.center?b.center:null;this.h=vc(b.projection);var d,e,f,g=void 0!==b.minZoom?b.minZoom:0;d=void 0!==b.maxZoom?b.maxZoom:28;var h=void 0!==b.zoomFactor?b.zoomFactor:2;if(void 0!==b.resolutions)d=b.resolutions,e=d[0],f=d[d.length-1],d=Pa(d);else{e=vc(b.projection);f=e.C();var k=(f?Math.max(Vb(f),Wb(f)):360*hc.degrees/pc(e))/256/Math.pow(2,0),l=k/Math.pow(2,28);e=b.maxResolution;void 0!==e?g=0:e=k/Math.pow(h,g);f=b.minResolution;
+void 0===f&&(f=void 0!==b.maxZoom?void 0!==b.maxResolution?e/Math.pow(h,d):k/Math.pow(h,d):l);d=g+Math.floor(Math.log(e/f)/Math.log(h));f=e/Math.pow(h,d-g);d=Qa(h,e,d-g)}this.b=e;this.i=f;this.c=g;g=void 0!==b.extent?Fa(b.extent):Ga;(void 0!==b.enableRotation?b.enableRotation:1)?(e=b.constrainRotation,e=void 0===e||!0===e?Ua():!1===e?Sa:ea(e)?Ta(e):Sa):e=Ra;this.a=new Va(g,d,e);void 0!==b.resolution?c.resolution=b.resolution:void 0!==b.zoom&&(c.resolution=this.constrainResolution(this.b,b.zoom-this.c));
+c.rotation=void 0!==b.rotation?b.rotation:0;this.l(c)}M(V,T);p=V.prototype;p.constrainResolution=function(b,c,d){return this.a.resolution(b,c||0,d||0)};p.constrainRotation=function(b,c){return this.a.rotation(b,c||0)};p.ia=function(){return this.get("center")};p.jc=function(b){var c=this.ia(),d=this.I(),e=this.Z();return Zb(c,d,e,b)};p.le=function(){return this.h};p.I=function(){return this.get("resolution")};function Xc(b,c){return Math.max(Vb(b)/c[0],Wb(b)/c[1])}p.Z=function(){return this.get("rotation")};
+p.N=function(){var b=this.ia(),c=this.h,d=this.I(),e=this.Z();return{center:[Math.round(b[0]/d)*d,Math.round(b[1]/d)*d],projection:void 0!==c?c:null,resolution:d,rotation:e}};p.wd=function(){var b,c=this.I();if(void 0!==c){var d,e=0;do{d=this.constrainResolution(this.b,e);if(d==c){b=e;break}++e}while(d>this.i)}return void 0!==b?this.c+b:b};
+p.nd=function(b,c,d){if(!(b instanceof Bc)){var e=b[0],f=b[1],g=b[2],h=b[3],e=[e,f,e,h,g,h,g,f,e,f],f=new Tc(null);Uc(f,"XY",e,[e.length]);b=f}e=d||{};d=void 0!==e.padding?e.padding:[0,0,0,0];var h=void 0!==e.constrainResolution?e.constrainResolution:!0,f=void 0!==e.nearest?e.nearest:!1,k;void 0!==e.minResolution?k=e.minResolution:void 0!==e.maxZoom?k=this.constrainResolution(this.b,e.maxZoom-this.c,0):k=0;var l=b.a,g=this.Z(),e=Math.cos(-g),g=Math.sin(-g),m=Infinity,n=Infinity,q=-Infinity,r=-Infinity;
+b=b.b;for(var u=0,w=l.length;u<w;u+=b)var y=l[u]*e-l[u+1]*g,z=l[u]*g+l[u+1]*e,m=Math.min(m,y),n=Math.min(n,z),q=Math.max(q,y),r=Math.max(r,z);c=Xc([m,n,q,r],[c[0]-d[1]-d[3],c[1]-d[0]-d[2]]);c=isNaN(c)?k:Math.max(c,k);h&&(k=this.constrainResolution(c,0,0),!f&&k<c&&(k=this.constrainResolution(k,-1,0)),c=k);Yc(this,c);g=-g;k=(m+q)/2+(d[1]-d[3])/2*c;c=(n+r)/2+(d[0]-d[2])/2*c;this.oa([k*e-c*g,c*e+k*g])};
+p.rotate=function(b,c){if(void 0!==c){var d,e=this.ia();void 0!==e&&(d=[e[0]-c[0],e[1]-c[1]],vb(d,b-this.Z()),ub(d,c));this.oa(d)}this.set("rotation",b)};p.oa=function(b){this.set("center",b)};function Zc(b,c){b.g[1]+=c}function Yc(b,c){b.set("resolution",c)}p.Ee=function(b){b=this.constrainResolution(this.b,b-this.c,0);Yc(this,b)};function $c(b){return 1-Math.pow(1-b,3)}function ad(b){return 3*b*b-2*b*b*b}function bd(b){return b};function cd(b){var c=b.source,d=b.start?b.start:Date.now(),e=c[0],f=c[1],g=void 0!==b.duration?b.duration:1E3,h=b.easing?b.easing:ad;return function(b,c){if(c.time<d)return c.animate=!0,c.viewHints[0]+=1,!0;if(c.time<d+g){var m=1-h((c.time-d)/g),n=e-c.viewState.center[0],q=f-c.viewState.center[1];c.animate=!0;c.viewState.center[0]+=m*n;c.viewState.center[1]+=m*q;c.viewHints[0]+=1;return!0}return!1}}
+function dd(b){var c=b.rotation?b.rotation:0,d=b.start?b.start:Date.now(),e=void 0!==b.duration?b.duration:1E3,f=b.easing?b.easing:ad,g=b.anchor?b.anchor:null;return function(b,k){if(k.time<d)return k.animate=!0,k.viewHints[0]+=1,!0;if(k.time<d+e){var l=1-f((k.time-d)/e),l=(c-k.viewState.rotation)*l;k.animate=!0;k.viewState.rotation+=l;if(g){var m=k.viewState.center;m[0]-=g[0];m[1]-=g[1];vb(m,l);ub(m,g)}k.viewHints[0]+=1;return!0}return!1}}
+function ed(b){var c=b.resolution,d=b.start?b.start:Date.now(),e=void 0!==b.duration?b.duration:1E3,f=b.easing?b.easing:ad;return function(b,h){if(h.time<d)return h.animate=!0,h.viewHints[0]+=1,!0;if(h.time<d+e){var k=1-f((h.time-d)/e),l=c-h.viewState.resolution;h.animate=!0;h.viewState.resolution+=k*l;h.viewHints[0]+=1;return!0}return!1}};function fd(b,c,d,e){this.a=b;this.f=c;this.b=d;this.c=e}function gd(b,c,d){return b.a<=c&&c<=b.f&&b.b<=d&&d<=b.c}function hd(b,c){return b.a==c.a&&b.b==c.b&&b.f==c.f&&b.c==c.c}fd.prototype.ha=function(){return this.f-this.a+1};function id(b,c){return b.a<=c.f&&b.f>=c.a&&b.b<=c.c&&b.c>=c.b};function jd(b){this.b=b.html;this.a=b.tileRanges?b.tileRanges:null};function kd(b,c,d){R.call(this,b,d);this.element=c}M(kd,R);function ld(b){T.call(this);this.a=b?b:[];md(this)}M(ld,T);p=ld.prototype;p.clear=function(){for(;0<this.get("length");)this.pop()};function nd(b,c,d){b.a.forEach(c,d)}p.item=function(b){return this.a[b]};p.pop=function(){return od(this,this.get("length")-1)};p.push=function(b){var c=this.a.length;this.a.splice(c,0,b);md(this);S(this,new kd("add",b,this));return c};
+p.remove=function(b){var c=this.a,d,e;d=0;for(e=c.length;d<e;++d)if(c[d]===b)return od(this,d)};function od(b,c){var d=b.a[c];b.a.splice(c,1);md(b);S(b,new kd("remove",d,b));return d}function md(b){b.set("length",b.a.length)};function pd(b,c){Array.prototype.forEach.call(b,c,void 0)}function qd(b){var c=b.length;if(0<c){for(var d=Array(c),e=0;e<c;e++)d[e]=b[e];return d}return[]}function rd(b,c,d){return 2>=arguments.length?Array.prototype.slice.call(b,c):Array.prototype.slice.call(b,c,d)};var sd=/^#(?:[0-9a-f]{3}){1,2}$/i,td=/^(?:rgb)?\((0|[1-9]\d{0,2}),\s?(0|[1-9]\d{0,2}),\s?(0|[1-9]\d{0,2})\)$/i,ud=/^(?:rgba)?\((0|[1-9]\d{0,2}),\s?(0|[1-9]\d{0,2}),\s?(0|[1-9]\d{0,2}),\s?(0|1|0\.\d{0,10})\)$/i;function vd(b){if("string"!==typeof b){var c=b[0];c!=(c|0)&&(c=c+.5|0);var d=b[1];d!=(d|0)&&(d=d+.5|0);var e=b[2];e!=(e|0)&&(e=e+.5|0);b="rgba("+c+","+d+","+e+","+(void 0===b[3]?1:b[3])+")"}return b}
+var xd=function(){var b={},c=0;return function(d){var e;if(b.hasOwnProperty(d))e=b[d];else{if(1024<=c){e=0;for(var f in b)0===(e++&3)&&(delete b[f],--c)}var g,h;sd.exec(d)?(h=3==d.length-1?1:2,e=parseInt(d.substr(1+0*h,h),16),f=parseInt(d.substr(1+1*h,h),16),g=parseInt(d.substr(1+2*h,h),16),1==h&&(e=(e<<4)+e,f=(f<<4)+f,g=(g<<4)+g),e=[e,f,g,1]):(h=ud.exec(d))?(e=Number(h[1]),f=Number(h[2]),g=Number(h[3]),h=Number(h[4]),e=[e,f,g,h],e=wd(e,e)):(h=td.exec(d))?(e=Number(h[1]),f=Number(h[2]),g=Number(h[3]),
+e=[e,f,g,1],e=wd(e,e)):e=void 0;b[d]=e;++c}return e}}();function wd(b,c){var d=c||[];d[0]=Ca(b[0]+.5|0,0,255);d[1]=Ca(b[1]+.5|0,0,255);d[2]=Ca(b[2]+.5|0,0,255);d[3]=Ca(b[3],0,1);return d};function yd(b){return"string"===typeof b||b instanceof CanvasPattern||b instanceof CanvasGradient?b:vd(b)};var zd;a:{var Ad=x.navigator;if(Ad){var Bd=Ad.userAgent;if(Bd){zd=Bd;break a}}zd=""}function W(b){return-1!=zd.indexOf(b)};function Cd(b,c){for(var d in b)c.call(void 0,b[d],d,b)}var Dd="constructor hasOwnProperty isPrototypeOf propertyIsEnumerable toLocaleString toString valueOf".split(" ");function Ed(b,c){for(var d,e,f=1;f<arguments.length;f++){e=arguments[f];for(d in e)b[d]=e[d];for(var g=0;g<Dd.length;g++)d=Dd[g],Object.prototype.hasOwnProperty.call(e,d)&&(b[d]=e[d])}};var Fd=W("Opera")||W("OPR"),Gd=W("Trident")||W("MSIE"),Hd=W("Edge"),Id=W("Gecko")&&!(-1!=zd.toLowerCase().indexOf("webkit")&&!W("Edge"))&&!(W("Trident")||W("MSIE"))&&!W("Edge"),Jd=-1!=zd.toLowerCase().indexOf("webkit")&&!W("Edge");function Kd(){var b=x.document;return b?b.documentMode:void 0}var Ld;
+a:{var Md="",Nd=function(){var b=zd;if(Id)return/rv\:([^\);]+)(\)|;)/.exec(b);if(Hd)return/Edge\/([\d\.]+)/.exec(b);if(Gd)return/\b(?:MSIE|rv)[: ]([^\);]+)(\)|;)/.exec(b);if(Jd)return/WebKit\/(\S+)/.exec(b);if(Fd)return/(?:Version)[ \/]?(\S+)/.exec(b)}();Nd&&(Md=Nd?Nd[1]:"");if(Gd){var Od=Kd();if(null!=Od&&Od>parseFloat(Md)){Ld=String(Od);break a}}Ld=Md}var Pd={};
+function Qd(b){var c;if(!(c=Pd[b])){c=0;for(var d=sa(String(Ld)).split("."),e=sa(String(b)).split("."),f=Math.max(d.length,e.length),g=0;0==c&&g<f;g++){var h=d[g]||"",k=e[g]||"",l=RegExp("(\\d*)(\\D*)","g"),m=RegExp("(\\d*)(\\D*)","g");do{var n=l.exec(h)||["","",""],q=m.exec(k)||["","",""];if(0==n[0].length&&0==q[0].length)break;c=Ba(0==n[1].length?0:parseInt(n[1],10),0==q[1].length?0:parseInt(q[1],10))||Ba(0==n[2].length,0==q[2].length)||Ba(n[2],q[2])}while(0==c)}c=Pd[b]=0<=c}return c}
+var Rd=x.document,Sd=Rd&&Gd?Kd()||("CSS1Compat"==Rd.compatMode?parseInt(Ld,10):5):void 0;var Td=!Gd||9<=Number(Sd);!Id&&!Gd||Gd&&9<=Number(Sd)||Id&&Qd("1.9.1");Gd&&Qd("9");function Ud(b,c){this.x=void 0!==b?b:0;this.y=void 0!==c?c:0}p=Ud.prototype;p.clone=function(){return new Ud(this.x,this.y)};p.ceil=function(){this.x=Math.ceil(this.x);this.y=Math.ceil(this.y);return this};p.floor=function(){this.x=Math.floor(this.x);this.y=Math.floor(this.y);return this};p.round=function(){this.x=Math.round(this.x);this.y=Math.round(this.y);return this};p.scale=function(b,c){var d=ea(c)?c:b;this.x*=b;this.y*=d;return this};function Vd(b,c){this.width=b;this.height=c}p=Vd.prototype;p.clone=function(){return new Vd(this.width,this.height)};p.ceil=function(){this.width=Math.ceil(this.width);this.height=Math.ceil(this.height);return this};p.floor=function(){this.width=Math.floor(this.width);this.height=Math.floor(this.height);return this};p.round=function(){this.width=Math.round(this.width);this.height=Math.round(this.height);return this};p.scale=function(b,c){var d=ea(c)?c:b;this.width*=b;this.height*=d;return this};function Wd(b){return b?new Xd(Yd(b)):qa||(qa=new Xd)}function Zd(b){var c=document;return da(b)?c.getElementById(b):b}function $d(b,c){Cd(c,function(c,e){"style"==e?b.style.cssText=c:"class"==e?b.className=c:"for"==e?b.htmlFor=c:ae.hasOwnProperty(e)?b.setAttribute(ae[e],c):0==e.lastIndexOf("aria-",0)||0==e.lastIndexOf("data-",0)?b.setAttribute(e,c):b[e]=c})}
+var ae={cellpadding:"cellPadding",cellspacing:"cellSpacing",colspan:"colSpan",frameborder:"frameBorder",height:"height",maxlength:"maxLength",nonce:"nonce",role:"role",rowspan:"rowSpan",type:"type",usemap:"useMap",valign:"vAlign",width:"width"};
+function be(b,c,d){var e=arguments,f=document,g=e[0],h=e[1];if(!Td&&h&&(h.name||h.type)){g=["<",g];h.name&&g.push(' name="',ta(h.name),'"');if(h.type){g.push(' type="',ta(h.type),'"');var k={};Ed(k,h);delete k.type;h=k}g.push(">");g=g.join("")}g=f.createElement(g);h&&(da(h)?g.className=h:"array"==ba(h)?g.className=h.join(" "):$d(g,h));2<e.length&&ce(f,g,e);return g}
+function ce(b,c,d){function e(d){d&&c.appendChild(da(d)?b.createTextNode(d):d)}for(var f=2;f<d.length;f++){var g=d[f];!ca(g)||ha(g)&&0<g.nodeType?e(g):pd(de(g)?qd(g):g,e)}}function ee(b){for(var c;c=b.firstChild;)b.removeChild(c)}function fe(b,c,d){b.insertBefore(c,b.childNodes[d]||null)}function ge(b){b&&b.parentNode&&b.parentNode.removeChild(b)}function he(b,c){var d=c.parentNode;d&&d.replaceChild(b,c)}
+function ie(b,c){if(!b||!c)return!1;if(b.contains&&1==c.nodeType)return b==c||b.contains(c);if("undefined"!=typeof b.compareDocumentPosition)return b==c||!!(b.compareDocumentPosition(c)&16);for(;c&&b!=c;)c=c.parentNode;return c==b}function Yd(b){return 9==b.nodeType?b:b.ownerDocument||b.document}function de(b){if(b&&"number"==typeof b.length){if(ha(b))return"function"==typeof b.item||"string"==typeof b.item;if(ga(b))return"function"==typeof b.item}return!1}
+function Xd(b){this.a=b||x.document||document}Xd.prototype.appendChild=function(b,c){b.appendChild(c)};function je(b,c,d,e){this.top=b;this.right=c;this.bottom=d;this.left=e}p=je.prototype;p.ha=function(){return this.right-this.left};p.clone=function(){return new je(this.top,this.right,this.bottom,this.left)};p.ceil=function(){this.top=Math.ceil(this.top);this.right=Math.ceil(this.right);this.bottom=Math.ceil(this.bottom);this.left=Math.ceil(this.left);return this};
+p.floor=function(){this.top=Math.floor(this.top);this.right=Math.floor(this.right);this.bottom=Math.floor(this.bottom);this.left=Math.floor(this.left);return this};p.round=function(){this.top=Math.round(this.top);this.right=Math.round(this.right);this.bottom=Math.round(this.bottom);this.left=Math.round(this.left);return this};p.scale=function(b,c){var d=ea(c)?c:b;this.left*=b;this.right*=b;this.top*=d;this.bottom*=d;return this};function ke(b,c){var d=Yd(b);return d.defaultView&&d.defaultView.getComputedStyle&&(d=d.defaultView.getComputedStyle(b,null))?d[c]||d.getPropertyValue(c)||"":""}function le(b){var c;try{c=b.getBoundingClientRect()}catch(d){return{left:0,top:0,right:0,bottom:0}}Gd&&b.ownerDocument.body&&(b=b.ownerDocument,c.left-=b.documentElement.clientLeft+b.body.clientLeft,c.top-=b.documentElement.clientTop+b.body.clientTop);return c}
+function me(b){var c=ne;if("none"!=(ke(b,"display")||(b.currentStyle?b.currentStyle.display:null)||b.style&&b.style.display))return c(b);var d=b.style,e=d.display,f=d.visibility,g=d.position;d.visibility="hidden";d.position="absolute";d.display="inline";b=c(b);d.display=e;d.position=g;d.visibility=f;return b}function ne(b){var c=b.offsetWidth,d=b.offsetHeight,e=Jd&&!c&&!d;return(void 0===c||e)&&b.getBoundingClientRect?(b=le(b),new Vd(b.right-b.left,b.bottom-b.top)):new Vd(c,d)}
+function oe(b,c){b.style.display=c?"":"none"}function pe(b,c,d,e){if(/^\d+px?$/.test(c))return parseInt(c,10);var f=b.style[d],g=b.runtimeStyle[d];b.runtimeStyle[d]=b.currentStyle[d];b.style[d]=c;c=b.style[e];b.style[d]=f;b.runtimeStyle[d]=g;return c}function qe(b,c){var d=b.currentStyle?b.currentStyle[c]:null;return d?pe(b,d,"left","pixelLeft"):0}var re={thin:2,medium:4,thick:6};
+function se(b,c){if("none"==(b.currentStyle?b.currentStyle[c+"Style"]:null))return 0;var d=b.currentStyle?b.currentStyle[c+"Width"]:null;return d in re?re[d]:pe(b,d,"left","pixelLeft")};function te(b,c,d){R.call(this,b);this.map=c;this.frameState=void 0!==d?d:null}M(te,R);function ue(b){T.call(this);this.element=b.element?b.element:null;this.c=this.B=null;this.h=[];this.render=b.render?b.render:pa;b.target&&(this.B=Zd(b.target))}M(ue,T);ue.prototype.J=function(){ge(this.element);ue.X.J.call(this)};ue.prototype.setMap=function(b){this.c&&ge(this.element);for(var c=0,d=this.h.length;c<d;++c)N(this.h[c]);this.h.length=0;if(this.c=b)(this.B?this.B:b.j).appendChild(this.element),this.render!==pa&&this.h.push(Q(b,"postrender",this.render,this)),b.render()};function ve(){this.f=0;this.c={};this.b=this.a=null}p=ve.prototype;p.clear=function(){this.f=0;this.c={};this.b=this.a=null};function we(b,c){return b.c.hasOwnProperty(c)}function xe(b,c){for(var d=b.a;d;)c.call(void 0,d.Ia,d.Rb,b),d=d.ma}p.get=function(b){b=this.c[b];if(b===this.b)return b.Ia;b===this.a?(this.a=this.a.ma,this.a.Ra=null):(b.ma.Ra=b.Ra,b.Ra.ma=b.ma);b.ma=null;b.Ra=this.b;this.b=this.b.ma=b;return b.Ia};
+p.pop=function(){var b=this.a;delete this.c[b.Rb];b.ma&&(b.ma.Ra=null);this.a=b.ma;this.a||(this.b=null);--this.f;return b.Ia};p.replace=function(b,c){this.get(b);this.c[b].Ia=c};p.set=function(b,c){var d={Rb:b,ma:null,Ra:this.b,Ia:c};this.b?this.b.ma=d:this.a=d;this.b=d;this.c[b]=d;++this.f};function ye(b){ve.call(this);this.g=void 0!==b?b:2048}M(ye,ve);function ze(b){return b.f>b.g}function Ae(b,c){for(var d,e;ze(b);){d=b.a.Ia;e=d.L[0].toString();var f;if(f=e in c)d=d.L,f=gd(c[e],d[1],d[2]);if(f)break;else jb(b.pop())}};function Be(b,c){mb.call(this);this.L=b;this.state=c;this.a=null;this.key=""}M(Be,mb);function Ce(b){S(b,"change")}Be.prototype.getKey=function(){return I(this).toString()};Be.prototype.N=function(){return this.state};function De(b){T.call(this);this.c=lc(b.projection);this.i=Ee(b.attributions);this.w=b.logo;this.B=void 0!==b.state?b.state:"ready";this.j=void 0!==b.wrapX?b.wrapX:!1}M(De,T);function Ee(b){if("string"===typeof b)return[new jd({html:b})];if(b instanceof jd)return[b];if(Array.isArray(b)){for(var c=b.length,d=Array(c),e=0;e<c;e++){var f=b[e];d[e]="string"===typeof f?new jd({html:f}):f}return d}return null}De.prototype.N=function(){return this.B};De.prototype.wa=function(){this.v()};function Fe(b){this.minZoom=void 0!==b.minZoom?b.minZoom:0;this.b=b.resolutions;this.maxZoom=this.b.length-1;this.f=void 0!==b.origin?b.origin:null;this.g=null;void 0!==b.origins&&(this.g=b.origins);var c=b.extent;void 0===c||this.f||this.g||(this.f=bc(c));this.h=null;void 0!==b.tileSizes&&(this.h=b.tileSizes);this.l=void 0!==b.tileSize?b.tileSize:this.h?null:256;this.i=void 0!==c?c:null;this.a=null;void 0!==b.sizes?this.a=b.sizes.map(function(b){return new fd(Math.min(0,b[0]),Math.max(b[0]-1,-1),
+Math.min(0,b[1]),Math.max(b[1]-1,-1))},this):c&&Ge(this,c);this.c=[0,0]}var He=[0,0,0];function Ie(b,c,d,e,f){f=Je(b,c,f);for(c=c[0]-1;c>=b.minZoom;){if(d.call(null,c,Ke(b,f,c,e)))return!0;--c}return!1}Fe.prototype.C=function(){return this.i};Fe.prototype.ka=function(b){return this.f?this.f:this.g[b]};Fe.prototype.I=function(b){return this.b[b]};Fe.prototype.Nb=function(){return this.b};function Le(b,c,d,e){return c[0]<b.maxZoom?(e=Je(b,c,e),Ke(b,e,c[0]+1,d)):null}
+function Me(b,c,d,e){Ne(b,c[0],c[1],d,!1,He);var f=He[1],g=He[2];Ne(b,c[2],c[3],d,!0,He);b=He[1];c=He[2];void 0!==e?(e.a=f,e.f=b,e.b=g,e.c=c):e=new fd(f,b,g,c);return e}function Ke(b,c,d,e){d=b.I(d);return Me(b,c,d,e)}function Oe(b,c){var d=b.ka(c[0]),e=b.I(c[0]),f=tb(Pe(b,c[0]),b.c);return[d[0]+(c[1]+.5)*f[0]*e,d[1]+(c[2]+.5)*f[1]*e]}function Je(b,c,d){var e=b.ka(c[0]),f=b.I(c[0]);b=tb(Pe(b,c[0]),b.c);var g=e[0]+c[1]*b[0]*f;c=e[1]+c[2]*b[1]*f;return Ob(g,c,g+b[0]*f,c+b[1]*f,d)}
+function Ne(b,c,d,e,f,g){var h=Qe(b,e),k=e/b.I(h),l=b.ka(h);b=tb(Pe(b,h),b.c);c=k*Math.floor((c-l[0])/e+(f?.5:0))/b[0];d=k*Math.floor((d-l[1])/e+(f?0:.5))/b[1];f?(c=Math.ceil(c)-1,d=Math.ceil(d)-1):(c=Math.floor(c),d=Math.floor(d));f=c;void 0!==g?(g[0]=h,g[1]=f,g[2]=d):g=[h,f,d];return g}function Re(b,c,d){d=b.I(d);return Ne(b,c[0],c[1],d,!1,void 0)}function Pe(b,c){return b.l?b.l:b.h[c]}function Qe(b,c){var d=Ia(b.b,c,0);return Ca(d,b.minZoom,b.maxZoom)}
+function Ge(b,c){for(var d=b.b.length,e=Array(d),f=b.minZoom;f<d;++f)e[f]=Ke(b,c,f);b.a=e}function Se(b){var c=b.c;if(!c){var c=Te(b),d=Ue(c,void 0,void 0),c=new Fe({extent:c,origin:bc(c),resolutions:d,tileSize:void 0});b.c=c}return c}function Ue(b,c,d){c=void 0!==c?c:42;var e=Wb(b);b=Vb(b);d=tb(void 0!==d?d:256);d=Math.max(b/d[0],e/d[1]);c+=1;e=Array(c);for(b=0;b<c;++b)e[b]=d/Math.pow(2,b);return e}function Te(b){b=lc(b);var c=b.C();c||(b=180*hc.degrees/pc(b),c=Ob(-b,-b,b,b));return c};function Ve(b){De.call(this,{attributions:b.attributions,extent:b.extent,logo:b.logo,projection:b.projection,state:b.state,wrapX:b.wrapX});this.G=void 0!==b.opaque?b.opaque:!1;this.Y=void 0!==b.tilePixelRatio?b.tilePixelRatio:1;this.tileGrid=void 0!==b.tileGrid?b.tileGrid:null;this.a=new ye(b.cacheSize);this.h=[0,0]}M(Ve,De);p=Ve.prototype;p.Qc=function(){return ze(this.a)};p.Rc=function(b,c){var d=this.bb(b);d&&Ae(d,c)};
+function We(b,c,d,e,f){c=b.bb(c);if(!c)return!1;for(var g=!0,h,k,l=e.a;l<=e.f;++l)for(var m=e.b;m<=e.c;++m)h=b.lb(d,l,m),k=!1,we(c,h)&&(h=c.get(h),(k=2===h.N())&&(k=!1!==f(h))),k||(g=!1);return g}p.kb=function(){return 0};p.lb=function(b,c,d){return b+"/"+c+"/"+d};p.Mb=function(){return this.G};p.Nb=function(){return this.tileGrid.Nb()};p.la=function(b){return this.tileGrid?this.tileGrid:Se(b)};p.bb=function(b){var c=this.c;return c&&!wc(c,b)?null:this.a};p.mb=function(){return this.Y};
+function Xe(b,c,d,e){e=b.la(e);d=b.mb(d);c=tb(Pe(e,c),b.h);return 1==d?c:sb(c,d,b.h)}function Ye(b,c,d){var e=void 0!==d?d:b.c;d=b.la(e);if(b.j&&e.f){var f=c;c=f[0];b=Oe(d,f);var e=Te(e),g=b[0],h=b[1];e[0]<=g&&g<=e[2]&&e[1]<=h&&h<=e[3]?c=f:(f=Vb(e),b[0]+=f*Math.ceil((e[0]-b[0])/f),c=Re(d,b,c))}e=c[0];b=c[1];f=c[2];d=d.minZoom>e||e>d.maxZoom?!1:(d=(g=d.C())?Ke(d,g,e):d.a?d.a[e]:null)?gd(d,b,f):!0;return d?c:null}p.wa=function(){this.a.clear();this.v()};p.Yc=pa;
+function Ze(b,c){R.call(this,b);this.tile=c}M(Ze,R);function $e(b){b=b?b:{};this.s=document.createElement("UL");this.j=document.createElement("LI");this.s.appendChild(this.j);oe(this.j,!1);this.g=void 0!==b.collapsed?b.collapsed:!0;this.i=void 0!==b.collapsible?b.collapsible:!0;this.i||(this.g=!1);var c=void 0!==b.className?b.className:"ol-attribution",d=void 0!==b.tipLabel?b.tipLabel:"Attributions",e=void 0!==b.collapseLabel?b.collapseLabel:"\u00bb";this.u="string"===typeof e?be("SPAN",{},e):e;e=void 0!==b.label?b.label:"i";this.w="string"===typeof e?
+be("SPAN",{},e):e;d=be("BUTTON",{type:"button",title:d},this.i&&!this.g?this.u:this.w);Q(d,"click",this.G,this);c=be("DIV",c+" ol-unselectable ol-control"+(this.g&&this.i?" ol-collapsed":"")+(this.i?"":" ol-uncollapsible"),this.s,d);ue.call(this,{element:c,render:b.render?b.render:af,target:b.target});this.o=!0;this.b={};this.a={};this.D={}}M($e,ue);
+function af(b){if(b=b.frameState){var c,d,e,f,g,h,k,l,m,n,q,r=b.layerStatesArray,u=Wa({},b.attributions),w={},y=b.viewState.projection;d=0;for(c=r.length;d<c;d++)if(h=r[d].layer.V())if(n=I(h).toString(),m=h.i)for(e=0,f=m.length;e<f;e++)if(k=m[e],l=I(k).toString(),!(l in u)){if(g=b.usedTiles[n]){var z=h.la(y);a:{q=k;var D=y;if(q.a){var t=void 0,v=void 0,B=void 0,E=void 0;for(E in g)if(E in q.a)for(var B=g[E],C,t=0,v=q.a[E].length;t<v;++t){C=q.a[E][t];if(id(C,B)){q=!0;break a}var G=Ke(z,Te(D),parseInt(E,
+10)),J=G.ha();if(B.a<G.a||B.f>G.f)if(id(C,new fd(Ea(B.a,J),Ea(B.f,J),B.b,B.c))||B.ha()>J&&id(C,G)){q=!0;break a}}q=!1}else q=!0}}else q=!1;q?(l in w&&delete w[l],u[l]=k):w[l]=k}c=[u,w];d=c[0];c=c[1];for(var A in this.b)A in d?(this.a[A]||(oe(this.b[A],!0),this.a[A]=!0),delete d[A]):A in c?(this.a[A]&&(oe(this.b[A],!1),delete this.a[A]),delete c[A]):(ge(this.b[A]),delete this.b[A],delete this.a[A]);for(A in d)e=document.createElement("LI"),e.innerHTML=d[A].b,this.s.appendChild(e),this.b[A]=e,this.a[A]=
+!0;for(A in c)e=document.createElement("LI"),e.innerHTML=c[A].b,oe(e,!1),this.s.appendChild(e),this.b[A]=e;A=!$a(this.a)||!$a(b.logos);this.o!=A&&(oe(this.element,A),this.o=A);A&&$a(this.a)?this.element.classList.add("ol-logo-only"):this.element.classList.remove("ol-logo-only");var H;b=b.logos;A=this.D;for(H in A)H in b||(ge(A[H]),delete A[H]);for(var O in b)O in A||(H=new Image,H.src=O,d=b[O],""===d?d=H:(d=be("A",{href:d}),d.appendChild(H)),this.j.appendChild(d),A[O]=d);oe(this.j,!$a(b))}else this.o&&
+(oe(this.element,!1),this.o=!1)}$e.prototype.G=function(b){b.preventDefault();this.element.classList.toggle("ol-collapsed");this.g?he(this.u,this.w):he(this.w,this.u);this.g=!this.g};function bf(b){b=b?b:{};var c=void 0!==b.className?b.className:"ol-rotate",d=void 0!==b.label?b.label:"\u21e7";this.a=null;"string"===typeof d?this.a=be("SPAN","ol-compass",d):(this.a=d,this.a.classList.add(this.a,"ol-compass"));d=be("BUTTON",{"class":c+"-reset",type:"button",title:b.tipLabel?b.tipLabel:"Reset rotation"},this.a);Q(d,"click",bf.prototype.o,this);c=be("DIV",c+" ol-unselectable ol-control",d);d=b.render?b.render:cf;this.g=b.resetNorth?b.resetNorth:void 0;ue.call(this,{element:c,render:d,
+target:b.target});this.i=void 0!==b.duration?b.duration:250;this.b=void 0!==b.autoHide?b.autoHide:!0;this.j=void 0;this.b&&this.element.classList.add("ol-hidden")}M(bf,ue);bf.prototype.o=function(b){b.preventDefault();if(void 0!==this.g)this.g();else{b=this.c;var c=b.O();if(c){var d=c.Z();void 0!==d&&(0<this.i&&(d%=2*Math.PI,d<-Math.PI&&(d+=2*Math.PI),d>Math.PI&&(d-=2*Math.PI),b.fa(dd({rotation:d,duration:this.i,easing:$c}))),c.set("rotation",0))}}};
+function cf(b){if(b=b.frameState){b=b.viewState.rotation;if(b!=this.j){var c="rotate("+b+"rad)";if(this.b){var d=this.element.classList.contains("ol-hidden");d||0!==b?d&&0!==b&&this.element.classList.remove("ol-hidden"):this.element.classList.add("ol-hidden")}this.a.style.msTransform=c;this.a.style.webkitTransform=c;this.a.style.transform=c}this.j=b}};function df(b){b=b?b:{};var c=void 0!==b.className?b.className:"ol-zoom",d=void 0!==b.delta?b.delta:1,e=void 0!==b.zoomOutLabel?b.zoomOutLabel:"\u2212",f=void 0!==b.zoomOutTipLabel?b.zoomOutTipLabel:"Zoom out",g=be("BUTTON",{"class":c+"-in",type:"button",title:void 0!==b.zoomInTipLabel?b.zoomInTipLabel:"Zoom in"},void 0!==b.zoomInLabel?b.zoomInLabel:"+");Q(g,"click",na(df.prototype.b,d),this);e=be("BUTTON",{"class":c+"-out",type:"button",title:f},e);Q(e,"click",na(df.prototype.b,-d),this);c=be("DIV",
+c+" ol-unselectable ol-control",g,e);ue.call(this,{element:c,target:b.target});this.a=void 0!==b.duration?b.duration:250}M(df,ue);df.prototype.b=function(b,c){c.preventDefault();var d=this.c,e=d.O();if(e){var f=e.I();f&&(0<this.a&&d.fa(ed({resolution:f,duration:this.a,easing:$c})),d=e.constrainResolution(f,b),Yc(e,d))}};function ef(b){b=b?b:{};var c=new ld;(void 0!==b.zoom?b.zoom:1)&&c.push(new df(b.zoomOptions));(void 0!==b.rotate?b.rotate:1)&&c.push(new bf(b.rotateOptions));(void 0!==b.attribution?b.attribution:1)&&c.push(new $e(b.attributionOptions));return c};var ff=Jd?"webkitfullscreenchange":Id?"mozfullscreenchange":Gd?"MSFullscreenChange":"fullscreenchange";function gf(){var b=Wd().a,c=b.body;return!!(c.webkitRequestFullscreen||c.mozRequestFullScreen&&b.mozFullScreenEnabled||c.msRequestFullscreen&&b.msFullscreenEnabled||c.requestFullscreen&&b.fullscreenEnabled)}
+function hf(b){b.webkitRequestFullscreen?b.webkitRequestFullscreen():b.mozRequestFullScreen?b.mozRequestFullScreen():b.msRequestFullscreen?b.msRequestFullscreen():b.requestFullscreen&&b.requestFullscreen()}function jf(){var b=Wd().a;return!!(b.webkitIsFullScreen||b.mozFullScreen||b.msFullscreenElement||b.fullscreenElement)};function kf(b){b=b?b:{};this.a=void 0!==b.className?b.className:"ol-full-screen";var c=void 0!==b.label?b.label:"\u2922";this.b="string"===typeof c?document.createTextNode(c):c;c=void 0!==b.labelActive?b.labelActive:"\u00d7";this.g="string"===typeof c?document.createTextNode(c):c;c=b.tipLabel?b.tipLabel:"Toggle full-screen";c=be("BUTTON",{"class":this.a+"-"+jf(),type:"button",title:c},this.b);Q(c,"click",this.s,this);var d=this.a+" ol-unselectable ol-control "+(gf()?"":"ol-unsupported"),c=be("DIV",
+d,c);ue.call(this,{element:c,target:b.target});this.o=void 0!==b.keys?b.keys:!1;this.i=b.source}M(kf,ue);
+kf.prototype.s=function(b){b.preventDefault();gf()&&(b=this.c)&&(jf()?(b=Wd().a,b.webkitCancelFullScreen?b.webkitCancelFullScreen():b.mozCancelFullScreen?b.mozCancelFullScreen():b.msExitFullscreen?b.msExitFullscreen():b.exitFullscreen&&b.exitFullscreen()):(b=this.i?Zd(this.i):b.Na(),this.o?b.mozRequestFullScreenWithKeys?b.mozRequestFullScreenWithKeys():b.webkitRequestFullscreen?b.webkitRequestFullscreen():hf(b):hf(b)))};
+kf.prototype.j=function(){var b=this.element.firstElementChild,c=this.c;jf()?(b.className=this.a+"-true",he(this.g,this.b)):(b.className=this.a+"-false",he(this.b,this.g));c&&c.vb()};kf.prototype.setMap=function(b){kf.X.setMap.call(this,b);b&&this.h.push(Q(x.document,ff,this.j,this))};var lf;
+function mf(){var b=x.MessageChannel;"undefined"===typeof b&&"undefined"!==typeof window&&window.postMessage&&window.addEventListener&&!W("Presto")&&(b=function(){var b=document.createElement("IFRAME");b.style.display="none";b.src="";document.documentElement.appendChild(b);var c=b.contentWindow,b=c.document;b.open();b.write("");b.close();var d="callImmediate"+Math.random(),e="file:"==c.location.protocol?"*":c.location.protocol+"//"+c.location.host,b=ma(function(b){if(("*"==e||b.origin==e)&&b.data==
+d)this.port1.onmessage()},this);c.addEventListener("message",b,!1);this.port1={};this.port2={postMessage:function(){c.postMessage(d,e)}}});if("undefined"!==typeof b&&!W("Trident")&&!W("MSIE")){var c=new b,d={},e=d;c.port1.onmessage=function(){if(void 0!==d.next){d=d.next;var b=d.lc;d.lc=null;b()}};return function(b){e.next={lc:b};e=e.next;c.port2.postMessage(0)}}return"undefined"!==typeof document&&"onreadystatechange"in document.createElement("SCRIPT")?function(b){var c=document.createElement("SCRIPT");
+c.onreadystatechange=function(){c.onreadystatechange=null;c.parentNode.removeChild(c);c=null;b();b=null};document.documentElement.appendChild(c)}:function(b){x.setTimeout(b,0)}};function nf(b,c,d){R.call(this,b);this.a=c;b=d?d:{};this.buttons=of(b);this.pressure=pf(b,this.buttons);this.bubbles="bubbles"in b?b.bubbles:!1;this.cancelable="cancelable"in b?b.cancelable:!1;this.view="view"in b?b.view:null;this.detail="detail"in b?b.detail:null;this.screenX="screenX"in b?b.screenX:0;this.screenY="screenY"in b?b.screenY:0;this.clientX="clientX"in b?b.clientX:0;this.clientY="clientY"in b?b.clientY:0;this.button="button"in b?b.button:0;this.relatedTarget="relatedTarget"in b?b.relatedTarget:
+null;this.pointerId="pointerId"in b?b.pointerId:0;this.width="width"in b?b.width:0;this.height="height"in b?b.height:0;this.pointerType="pointerType"in b?b.pointerType:"";this.isPrimary="isPrimary"in b?b.isPrimary:!1;c.preventDefault&&(this.preventDefault=function(){c.preventDefault()})}M(nf,R);function of(b){if(b.buttons||qf)b=b.buttons;else switch(b.which){case 1:b=1;break;case 2:b=4;break;case 3:b=2;break;default:b=0}return b}function pf(b,c){var d=0;b.pressure?d=b.pressure:d=c?.5:0;return d}
+var qf=!1;try{qf=1===(new MouseEvent("click",{buttons:1})).buttons}catch(b){};function rf(b,c){var d=document.createElement("CANVAS");b&&(d.width=b);c&&(d.height=c);return d.getContext("2d")}
+var sf=function(){var b;return function(){if(void 0===b){var c=document.createElement("P"),d,e={webkitTransform:"-webkit-transform",OTransform:"-o-transform",msTransform:"-ms-transform",MozTransform:"-moz-transform",transform:"transform"};document.body.appendChild(c);for(var f in e)f in c.style&&(c.style[f]="translate(1px,1px)",d=x.getComputedStyle(c).getPropertyValue(e[f]));document.body.removeChild(c);b=d&&"none"!==d}return b}}(),tf=function(){var b;return function(){if(void 0===b){var c=document.createElement("P"),
+d,e={webkitTransform:"-webkit-transform",OTransform:"-o-transform",msTransform:"-ms-transform",MozTransform:"-moz-transform",transform:"transform"};document.body.appendChild(c);for(var f in e)f in c.style&&(c.style[f]="translate3d(1px,1px,1px)",d=x.getComputedStyle(c).getPropertyValue(e[f]));document.body.removeChild(c);b=d&&"none"!==d}return b}}();
+function uf(b,c){var d=b.style;d.WebkitTransform=c;d.MozTransform=c;d.a=c;d.msTransform=c;d.transform=c;Gd&&Qd("9.0")&&(b.style.transformOrigin="0 0")}function vf(b,c){var d;if(tf()){var e=Array(16);for(d=0;16>d;++d)e[d]=c[d].toFixed(6);uf(b,"matrix3d("+e.join(",")+")")}else if(sf()){var e=[c[0],c[1],c[4],c[5],c[12],c[13]],f=Array(6);for(d=0;6>d;++d)f[d]=e[d].toFixed(6);uf(b,"matrix("+f.join(",")+")")}else b.style.left=Math.round(c[12])+"px",b.style.top=Math.round(c[13])+"px"};var wf=["experimental-webgl","webgl","webkit-3d","moz-webgl"];function xf(b,c){var d,e,f=wf.length;for(e=0;e<f;++e)try{if(d=b.getContext(wf[e],c))return d}catch(g){}return null};var yf,zf="undefined"!==typeof navigator?navigator.userAgent.toLowerCase():"",Af=-1!==zf.indexOf("firefox"),Bf=-1!==zf.indexOf("safari")&&-1===zf.indexOf("chrom"),Cf=-1!==zf.indexOf("macintosh"),Df=x.devicePixelRatio||1,Ef=!1,Ff=function(){if(!("HTMLCanvasElement"in x))return!1;try{var b=rf();return b?(void 0!==b.setLineDash&&(Ef=!0),!0):!1}catch(c){return!1}}(),Gf="ontouchstart"in x,Hf="PointerEvent"in x,If=!!x.navigator.msPointerEnabled,Jf=!1,Kf=[];
+if("WebGLRenderingContext"in x)try{var Lf=xf(document.createElement("CANVAS"),{failIfMajorPerformanceCaveat:!0});Lf&&(Jf=!0,Kf=Lf.getSupportedExtensions())}catch(b){}yf=Jf;oa=Kf;function Mf(b,c){this.a=b;this.g=c};function Nf(b){Mf.call(this,b,{mousedown:this.Vd,mousemove:this.Wd,mouseup:this.Zd,mouseover:this.Yd,mouseout:this.Xd});this.b=b.b;this.f=[]}M(Nf,Mf);function Of(b,c){for(var d=b.f,e=c.clientX,f=c.clientY,g=0,h=d.length,k;g<h&&(k=d[g]);g++){var l=Math.abs(f-k[1]);if(25>=Math.abs(e-k[0])&&25>=l)return!0}return!1}function Pf(b){var c=Qf(b,b),d=c.preventDefault;c.preventDefault=function(){b.preventDefault();d()};c.pointerId=1;c.isPrimary=!0;c.pointerType="mouse";return c}p=Nf.prototype;
+p.Vd=function(b){if(!Of(this,b)){if((1).toString()in this.b){var c=Pf(b);Rf(this.a,Sf,c,b);delete this.b[(1).toString()]}c=Pf(b);this.b[(1).toString()]=b;Rf(this.a,Tf,c,b)}};p.Wd=function(b){if(!Of(this,b)){var c=Pf(b);Rf(this.a,Uf,c,b)}};p.Zd=function(b){if(!Of(this,b)){var c=this.b[(1).toString()];c&&c.button===b.button&&(c=Pf(b),Rf(this.a,Vf,c,b),delete this.b[(1).toString()])}};p.Yd=function(b){if(!Of(this,b)){var c=Pf(b);Wf(this.a,c,b)}};
+p.Xd=function(b){if(!Of(this,b)){var c=Pf(b);Xf(this.a,c,b)}};function Yf(b){Mf.call(this,b,{MSPointerDown:this.de,MSPointerMove:this.ee,MSPointerUp:this.he,MSPointerOut:this.fe,MSPointerOver:this.ge,MSPointerCancel:this.ce,MSGotPointerCapture:this.ae,MSLostPointerCapture:this.be});this.b=b.b;this.f=["","unavailable","touch","pen","mouse"]}M(Yf,Mf);function Zf(b,c){var d=c;ea(c.pointerType)&&(d=Qf(c,c),d.pointerType=b.f[c.pointerType]);return d}p=Yf.prototype;p.de=function(b){this.b[b.pointerId.toString()]=b;var c=Zf(this,b);Rf(this.a,Tf,c,b)};
+p.ee=function(b){var c=Zf(this,b);Rf(this.a,Uf,c,b)};p.he=function(b){var c=Zf(this,b);Rf(this.a,Vf,c,b);delete this.b[b.pointerId.toString()]};p.fe=function(b){var c=Zf(this,b);Xf(this.a,c,b)};p.ge=function(b){var c=Zf(this,b);Wf(this.a,c,b)};p.ce=function(b){var c=Zf(this,b);Rf(this.a,Sf,c,b);delete this.b[b.pointerId.toString()]};p.be=function(b){S(this.a,new nf("lostpointercapture",b,b))};p.ae=function(b){S(this.a,new nf("gotpointercapture",b,b))};function $f(b){Mf.call(this,b,{pointerdown:this.se,pointermove:this.te,pointerup:this.we,pointerout:this.ue,pointerover:this.ve,pointercancel:this.re,gotpointercapture:this.xd,lostpointercapture:this.Ud})}M($f,Mf);p=$f.prototype;p.se=function(b){ag(this.a,b)};p.te=function(b){ag(this.a,b)};p.we=function(b){ag(this.a,b)};p.ue=function(b){ag(this.a,b)};p.ve=function(b){ag(this.a,b)};p.re=function(b){ag(this.a,b)};p.Ud=function(b){ag(this.a,b)};p.xd=function(b){ag(this.a,b)};function bg(b,c){Mf.call(this,b,{touchstart:this.Ie,touchmove:this.He,touchend:this.Ge,touchcancel:this.Fe});this.b=b.b;this.l=c;this.f=void 0;this.h=0;this.c=void 0}M(bg,Mf);p=bg.prototype;p.Vc=function(){this.h=0;this.c=void 0};
+function cg(b,c,d){c=Qf(c,d);c.pointerId=d.identifier+2;c.bubbles=!0;c.cancelable=!0;c.detail=b.h;c.button=0;c.buttons=1;c.width=d.webkitRadiusX||d.radiusX||0;c.height=d.webkitRadiusY||d.radiusY||0;c.pressure=d.webkitForce||d.force||.5;c.isPrimary=b.f===d.identifier;c.pointerType="touch";c.clientX=d.clientX;c.clientY=d.clientY;c.screenX=d.screenX;c.screenY=d.screenY;return c}
+function dg(b,c,d){function e(){c.preventDefault()}var f=Array.prototype.slice.call(c.changedTouches),g=f.length,h,k;for(h=0;h<g;++h)k=cg(b,c,f[h]),k.preventDefault=e,d.call(b,c,k)}
+p.Ie=function(b){var c=b.touches,d=Object.keys(this.b),e=d.length;if(e>=c.length){var f=[],g,h,k;for(g=0;g<e;++g){h=d[g];k=this.b[h];var l;if(!(l=1==h))a:{l=c.length;for(var m=void 0,n=0;n<l;n++)if(m=c[n],m.identifier===h-2){l=!0;break a}l=!1}l||f.push(k.out)}for(g=0;g<f.length;++g)this.Fb(b,f[g])}c=b.changedTouches[0];d=Object.keys(this.b).length;if(0===d||1===d&&(1).toString()in this.b)this.f=c.identifier,void 0!==this.c&&x.clearTimeout(this.c);eg(this,b);this.h++;dg(this,b,this.qe)};
+p.qe=function(b,c){this.b[c.pointerId]={target:c.target,out:c,Sc:c.target};var d=this.a;c.bubbles=!0;Rf(d,fg,c,b);d=this.a;c.bubbles=!1;Rf(d,gg,c,b);Rf(this.a,Tf,c,b)};p.He=function(b){b.preventDefault();dg(this,b,this.$d)};p.$d=function(b,c){var d=this.b[c.pointerId];if(d){var e=d.out,f=d.Sc;Rf(this.a,Uf,c,b);e&&f!==c.target&&(e.relatedTarget=c.target,c.relatedTarget=f,e.target=f,c.target?(Xf(this.a,e,b),Wf(this.a,c,b)):(c.target=f,c.relatedTarget=null,this.Fb(b,c)));d.out=c;d.Sc=c.target}};
+p.Ge=function(b){eg(this,b);dg(this,b,this.Je)};p.Je=function(b,c){Rf(this.a,Vf,c,b);this.a.out(c,b);var d=this.a;c.bubbles=!1;Rf(d,hg,c,b);delete this.b[c.pointerId];c.isPrimary&&(this.f=void 0,this.c=x.setTimeout(this.Vc.bind(this),200))};p.Fe=function(b){dg(this,b,this.Fb)};p.Fb=function(b,c){Rf(this.a,Sf,c,b);this.a.out(c,b);var d=this.a;c.bubbles=!1;Rf(d,hg,c,b);delete this.b[c.pointerId];c.isPrimary&&(this.f=void 0,this.c=x.setTimeout(this.Vc.bind(this),200))};
+function eg(b,c){var d=b.l.f,e=c.changedTouches[0];if(b.f===e.identifier){var f=[e.clientX,e.clientY];d.push(f);x.setTimeout(function(){La(d,f)},2500)}};function ig(b){mb.call(this);this.g=b;this.b={};this.c={};this.a=[];Hf?jg(this,new $f(this)):If?jg(this,new Yf(this)):(b=new Nf(this),jg(this,b),Gf&&jg(this,new bg(this,b)));b=this.a.length;for(var c,d=0;d<b;d++)c=this.a[d],kg(this,Object.keys(c.g))}M(ig,mb);function jg(b,c){var d=Object.keys(c.g);d&&(d.forEach(function(b){var d=c.g[b];d&&(this.c[b]=d.bind(c))},b),b.a.push(c))}ig.prototype.f=function(b){var c=this.c[b.type];c&&c(b)};
+function kg(b,c){c.forEach(function(b){Q(this.g,b,this.f,this)},b)}function lg(b,c){c.forEach(function(b){gb(this.g,b,this.f,this)},b)}function Qf(b,c){for(var d={},e,f=0,g=mg.length;f<g;f++)e=mg[f][0],d[e]=b[e]||c[e]||mg[f][1];return d}ig.prototype.out=function(b,c){b.bubbles=!0;Rf(this,ng,b,c)};function Xf(b,c,d){b.out(c,d);var e=c.relatedTarget;e&&ie(c.target,e)||(c.bubbles=!1,Rf(b,hg,c,d))}
+function Wf(b,c,d){c.bubbles=!0;Rf(b,fg,c,d);var e=c.relatedTarget;e&&ie(c.target,e)||(c.bubbles=!1,Rf(b,gg,c,d))}function Rf(b,c,d,e){S(b,new nf(c,e,d))}function ag(b,c){S(b,new nf(c.type,c,c))}ig.prototype.J=function(){for(var b=this.a.length,c,d=0;d<b;d++)c=this.a[d],lg(this,Object.keys(c.g));ig.X.J.call(this)};
+var Uf="pointermove",Tf="pointerdown",Vf="pointerup",fg="pointerover",ng="pointerout",gg="pointerenter",hg="pointerleave",Sf="pointercancel",mg=[["bubbles",!1],["cancelable",!1],["view",null],["detail",null],["screenX",0],["screenY",0],["clientX",0],["clientY",0],["ctrlKey",!1],["altKey",!1],["shiftKey",!1],["metaKey",!1],["button",0],["relatedTarget",null],["buttons",0],["pointerId",0],["width",0],["height",0],["pressure",0],["tiltX",0],["tiltY",0],["pointerType",""],["hwTimestamp",0],["isPrimary",
+!1],["type",""],["target",null],["currentTarget",null],["which",0]];function og(b,c,d,e,f){te.call(this,b,c,f);this.originalEvent=d;this.pixel=c.vc(d);this.coordinate=c.ta(this.pixel);this.dragging=void 0!==e?e:!1}M(og,te);og.prototype.preventDefault=function(){og.X.preventDefault.call(this);this.originalEvent.preventDefault()};og.prototype.stopPropagation=function(){og.X.stopPropagation.call(this);this.originalEvent.stopPropagation()};function pg(b,c,d,e,f){og.call(this,b,c,d.a,e,f);this.a=d}M(pg,og);
+function qg(b){mb.call(this);this.f=b;this.h=0;this.l=!1;this.c=[];this.b=null;b=this.f.a;this.s=0;this.o={};this.g=new ig(b);this.a=null;this.i=Q(this.g,Tf,this.Jd,this);this.j=Q(this.g,Uf,this.ye,this)}M(qg,mb);function rg(b,c){var d;d=new pg(sg,b.f,c);S(b,d);0!==b.h?(x.clearTimeout(b.h),b.h=0,d=new pg(tg,b.f,c),S(b,d)):b.h=x.setTimeout(function(){this.h=0;var b=new pg(ug,this.f,c);S(this,b)}.bind(b),250)}
+function vg(b,c){c.type==wg||c.type==xg?delete b.o[c.pointerId]:c.type==yg&&(b.o[c.pointerId]=!0);b.s=Object.keys(b.o).length}p=qg.prototype;p.zc=function(b){vg(this,b);var c=new pg(wg,this.f,b);S(this,c);!this.l&&0===b.button&&rg(this,this.b);0===this.s&&(this.c.forEach(N),this.c.length=0,this.l=!1,this.b=null,jb(this.a),this.a=null)};
+p.Jd=function(b){vg(this,b);var c=new pg(yg,this.f,b);S(this,c);this.b=b;0===this.c.length&&(this.a=new ig(document),this.c.push(Q(this.a,zg,this.ke,this),Q(this.a,wg,this.zc,this),Q(this.g,xg,this.zc,this)))};p.ke=function(b){if(b.clientX!=this.b.clientX||b.clientY!=this.b.clientY){this.l=!0;var c=new pg(Ag,this.f,b,this.l);S(this,c)}b.preventDefault()};p.ye=function(b){S(this,new pg(b.type,this.f,b,!(!this.b||b.clientX==this.b.clientX&&b.clientY==this.b.clientY)))};
+p.J=function(){this.j&&(N(this.j),this.j=null);this.i&&(N(this.i),this.i=null);this.c.forEach(N);this.c.length=0;this.a&&(jb(this.a),this.a=null);this.g&&(jb(this.g),this.g=null);qg.X.J.call(this)};var ug="singleclick",sg="click",tg="dblclick",Ag="pointerdrag",zg="pointermove",yg="pointerdown",wg="pointerup",xg="pointercancel",Bg={Ve:ug,Ke:sg,Le:tg,Oe:Ag,Re:zg,Ne:yg,Ue:wg,Te:"pointerover",Se:"pointerout",Pe:"pointerenter",Qe:"pointerleave",Me:xg};function Cg(b){T.call(this);var c=Wa({},b);c.opacity=void 0!==b.opacity?b.opacity:1;c.visible=void 0!==b.visible?b.visible:!0;c.zIndex=void 0!==b.zIndex?b.zIndex:0;c.maxResolution=void 0!==b.maxResolution?b.maxResolution:Infinity;c.minResolution=void 0!==b.minResolution?b.minResolution:0;this.l(c)}M(Cg,T);
+function Dg(b){var c=b.Ub(),d=b.Pb(),e=b.cb(),f=b.C(),g=b.Vb(),h=b.get("maxResolution"),k=b.get("minResolution");return{layer:b,opacity:Ca(c,0,1),$b:d,visible:e,eb:!0,extent:f,zIndex:g,maxResolution:h,minResolution:Math.max(k,0)}}p=Cg.prototype;p.C=function(){return this.get("extent")};p.Ub=function(){return this.get("opacity")};p.cb=function(){return this.get("visible")};p.Vb=function(){return this.get("zIndex")};p.Fc=function(b){this.set("opacity",b)};p.Gc=function(b){this.set("visible",b)};
+p.Hc=function(b){this.set("zIndex",b)};function Eg(){};function Fg(b,c,d,e,f,g){R.call(this,b,c);this.vectorContext=d;this.frameState=e;this.context=f;this.glContext=g}M(Fg,R);function Gg(b){var c=Wa({},b);delete c.source;Cg.call(this,c);this.h=this.c=this.b=null;b.map&&this.setMap(b.map);Q(this,rb("source"),this.Od,this);this.Zb(b.source?b.source:null)}M(Gg,Cg);function Hg(b,c){return b.visible&&c>=b.minResolution&&c<b.maxResolution}p=Gg.prototype;p.Lb=function(b){b=b?b:[];b.push(Dg(this));return b};p.V=function(){return this.get("source")||null};p.Pb=function(){var b=this.V();return b?b.N():"undefined"};p.me=function(){this.v()};
+p.Od=function(){this.h&&(N(this.h),this.h=null);var b=this.V();b&&(this.h=Q(b,"change",this.me,this));this.v()};p.setMap=function(b){this.b&&(N(this.b),this.b=null);b||this.v();this.c&&(N(this.c),this.c=null);b&&(this.b=Q(b,"precompose",function(b){var d=Dg(this);d.eb=!1;d.zIndex=Infinity;b.frameState.layerStatesArray.push(d);b.frameState.layerStates[I(this)]=d},this),this.c=Q(this,"change",b.render,b),this.v())};p.Zb=function(b){this.set("source",b)};function Ig(b,c,d,e,f,g,h,k){Db(b);0===c&&0===d||Fb(b,c,d);1==e&&1==f||Gb(b,e,f);0!==g&&Hb(b,g);0===h&&0===k||Fb(b,h,k);return b}function Jg(b,c){return b[0]==c[0]&&b[1]==c[1]&&b[4]==c[4]&&b[5]==c[5]&&b[12]==c[12]&&b[13]==c[13]}function Kg(b,c,d){var e=b[1],f=b[5],g=b[13],h=c[0];c=c[1];d[0]=b[0]*h+b[4]*c+b[12];d[1]=e*h+f*c+g;return d};function Lg(b){ob.call(this);this.a=b}M(Lg,ob);Lg.prototype.fb=pa;Lg.prototype.Ic=dc;Lg.prototype.l=function(b,c,d){return function(e,f){return We(b,c,e,f,function(b){d[e]||(d[e]={});d[e][b.L.toString()]=b})}};function Mg(b){var c=b.a;c.cb()&&"ready"==c.Pb()&&b.v()}function Ng(b,c){c.Qc()&&b.postRenderFunctions.push(na(function(b,c,f){c=I(b).toString();b.Rc(f.viewState.projection,f.usedTiles[c])},c))}function Og(b,c){if(c){var d,e,f;e=0;for(f=c.length;e<f;++e)d=c[e],b[I(d).toString()]=d}}
+function Pg(b,c){var d=c.w;void 0!==d&&("string"===typeof d?b.logos[d]="":ha(d)&&(b.logos[d.src]=d.href))}function Qg(b,c,d,e){c=I(c).toString();d=d.toString();c in b?d in b[c]?(b=b[c][d],e.a<b.a&&(b.a=e.a),e.f>b.f&&(b.f=e.f),e.b<b.b&&(b.b=e.b),e.c>b.c&&(b.c=e.c)):b[c][d]=e:(b[c]={},b[c][d]=e)}function Rg(b,c,d){return[c*(Math.round(b[0]/c)+d[0]%2/2),c*(Math.round(b[1]/c)+d[1]%2/2)]}
+function Sg(b,c,d,e,f,g,h,k,l,m){var n=I(c).toString();n in b.wantedTiles||(b.wantedTiles[n]={});var q=b.wantedTiles[n];b=b.tileQueue;var r=d.minZoom,u,w,y,z,D,t;for(t=h;t>=r;--t)for(w=Ke(d,g,t,w),y=d.I(t),z=w.a;z<=w.f;++z)for(D=w.b;D<=w.c;++D)h-t<=k?(u=Tg(c,t,z,D,e,f),0==u.N()&&(q[u.L.toString()]=!0,u.getKey()in b.f||b.c([u,n,Oe(d,u.L),y])),void 0!==l&&l.call(m,u)):c.Yc(t,z,D,f)};function Ug(b){this.l=b.opacity;this.i=b.rotateWithView;this.H=b.rotation;this.gb=b.scale;this.u=b.snapToPixel}Ug.prototype.Z=function(){return this.H};function Vg(b){b=b||{};this.g=void 0!==b.anchor?b.anchor:[.5,.5];this.c=null;this.b=void 0!==b.anchorOrigin?b.anchorOrigin:"top-left";this.j=void 0!==b.anchorXUnits?b.anchorXUnits:"fraction";this.A=void 0!==b.anchorYUnits?b.anchorYUnits:"fraction";var c=void 0!==b.crossOrigin?b.crossOrigin:null,d=void 0!==b.img?b.img:null,e=void 0!==b.imgSize?b.imgSize:null,f=b.src;void 0!==f&&0!==f.length||!d||(f=d.src||I(d).toString());var g=void 0!==b.src?0:2,h;void 0!==b.color?(h=b.color,h=Array.isArray(h)?h:
+xd(h)):h=null;var k=Wg.ua(),l=k.get(f,c,h);l||(l=new Xg(d,f,e,c,g,h),k.set(f,c,h,l));this.a=l;this.s=void 0!==b.offset?b.offset:[0,0];this.f=void 0!==b.offsetOrigin?b.offsetOrigin:"top-left";this.h=null;this.o=void 0!==b.size?b.size:null;Ug.call(this,{opacity:void 0!==b.opacity?b.opacity:1,rotation:void 0!==b.rotation?b.rotation:0,scale:void 0!==b.scale?b.scale:1,snapToPixel:void 0!==b.snapToPixel?b.snapToPixel:!0,rotateWithView:void 0!==b.rotateWithView?b.rotateWithView:!1})}M(Vg,Ug);p=Vg.prototype;
+p.jb=function(){if(this.c)return this.c;var b=this.g,c=this.Qa();if("fraction"==this.j||"fraction"==this.A){if(!c)return null;b=this.g.slice();"fraction"==this.j&&(b[0]*=c[0]);"fraction"==this.A&&(b[1]*=c[1])}if("top-left"!=this.b){if(!c)return null;b===this.g&&(b=this.g.slice());if("top-right"==this.b||"bottom-right"==this.b)b[0]=-b[0]+c[0];if("bottom-left"==this.b||"bottom-right"==this.b)b[1]=-b[1]+c[1]}return this.c=b};p.T=function(b){return this.a.T(b)};p.wc=function(){return this.a.b};p.rb=function(){return this.a.f};
+p.Xb=function(){var b=this.a;if(!b.l)if(b.i){var c=b.b[0],d=b.b[1],e=rf(c,d);e.fillRect(0,0,c,d);b.l=e.canvas}else b.l=b.a;return b.l};p.ka=function(){if(this.h)return this.h;var b=this.s;if("top-left"!=this.f){var c=this.Qa(),d=this.a.b;if(!c||!d)return null;b=b.slice();if("top-right"==this.f||"bottom-right"==this.f)b[0]=d[0]-c[0]-b[0];if("bottom-left"==this.f||"bottom-right"==this.f)b[1]=d[1]-c[1]-b[1]}return this.h=b};p.Qa=function(){return this.o?this.o:this.a.b};
+p.Bc=function(b,c){return Q(this.a,"change",b,c)};p.load=function(){this.a.load()};p.Xc=function(b,c){gb(this.a,"change",b,c)};function Xg(b,c,d,e,f,g){mb.call(this);this.l=null;this.a=b?b:new Image;null!==e&&(this.a.crossOrigin=e);this.c=g?document.createElement("CANVAS"):null;this.h=g;this.g=null;this.f=f;this.b=d;this.o=c;this.i=!1;2==this.f&&Yg(this)}M(Xg,mb);function Yg(b){var c=rf(1,1);try{c.drawImage(b.a,0,0),c.getImageData(0,0,1,1)}catch(d){b.i=!0}}
+Xg.prototype.j=function(){this.f=3;this.g.forEach(N);this.g=null;S(this,"change")};
+Xg.prototype.s=function(){this.f=2;this.b&&(this.a.width=this.b[0],this.a.height=this.b[1]);this.b=[this.a.width,this.a.height];this.g.forEach(N);this.g=null;Yg(this);if(!this.i&&null!==this.h){this.c.width=this.a.width;this.c.height=this.a.height;var b=this.c.getContext("2d");b.drawImage(this.a,0,0);for(var c=b.getImageData(0,0,this.a.width,this.a.height),d=c.data,e=this.h[0]/255,f=this.h[1]/255,g=this.h[2]/255,h=0,k=d.length;h<k;h+=4)d[h]*=e,d[h+1]*=f,d[h+2]*=g;b.putImageData(c,0,0)}S(this,"change")};
+Xg.prototype.T=function(){return this.c?this.c:this.a};Xg.prototype.load=function(){if(0==this.f){this.f=1;this.g=[Q(this.a,"error",this.j,this,!0),Q(this.a,"load",this.s,this,!0)];try{this.a.src=this.o}catch(b){this.j()}}};function Wg(){this.a={};this.b=0}aa(Wg);Wg.prototype.clear=function(){this.a={};this.b=0};Wg.prototype.get=function(b,c,d){b=c+":"+b+":"+(d?vd(d):"null");return b in this.a?this.a[b]:null};Wg.prototype.set=function(b,c,d,e){this.a[c+":"+b+":"+(d?vd(d):"null")]=e;++this.b};function Zg(b,c){this.h=c;this.f={};this.A={}}M(Zg,ib);function $g(b){var c=b.viewState,d=b.coordinateToPixelMatrix;Ig(d,b.size[0]/2,b.size[1]/2,1/c.resolution,-1/c.resolution,-c.rotation,-c.center[0],-c.center[1]);Eb(d,b.pixelToCoordinateMatrix)}p=Zg.prototype;p.J=function(){for(var b in this.f)jb(this.f[b])};function ah(){var b=Wg.ua();if(32<b.b){var c=0,d,e;for(d in b.a)e=b.a[d],0!==(c++&3)||nb(e)||(delete b.a[d],--b.b)}}
+p.Wb=function(b,c,d,e,f,g){function h(b,f){var g=I(b).toString(),h=c.layerStates[I(f)].eb;if(!(g in c.skippedFeatureUids)||h)return d.call(e,b,h?f:null)}var k,l=c.viewState,m=l.resolution,n=l.projection,l=b;if(n.a){var n=n.C(),q=Vb(n),r=b[0];if(r<n[0]||r>n[2])l=[r+q*Math.ceil((n[0]-r)/q),b[1]]}n=c.layerStatesArray;for(q=n.length-1;0<=q;--q){var u=n[q],r=u.layer;if(Hg(u,m)&&f.call(g,r)&&(u=bh(this,r),r.V()&&(k=u.fb(r.V().j?l:b,c,h,e)),k))return k}};
+p.Jc=function(b,c,d,e){return void 0!==this.Wb(b,c,cc,this,d,e)};function bh(b,c){var d=I(c).toString();if(d in b.f)return b.f[d];var e=b.Jb(c);b.f[d]=e;b.A[d]=Q(e,"change",b.Dd,b);return e}p.Dd=function(){this.h.render()};p.sb=pa;p.Be=function(b,c){for(var d in this.f)if(!(c&&d in c.layerStates)){var e=d,f=this.f[e];delete this.f[e];N(this.A[e]);delete this.A[e];jb(f)}};function ch(b,c){for(var d in b.f)if(!(d in c.layerStates)){c.postRenderFunctions.push(b.Be.bind(b));break}}
+function Oa(b,c){return b.zIndex-c.zIndex};function dh(b,c){this.j=b;this.l=c;this.a=[];this.b=[];this.f={}}dh.prototype.clear=function(){this.a.length=0;this.b.length=0;Ya(this.f)};function eh(b){var c=b.a,d=b.b,e=c[0];1==c.length?(c.length=0,d.length=0):(c[0]=c.pop(),d[0]=d.pop(),fh(b,0));c=b.l(e);delete b.f[c];return e}dh.prototype.c=function(b){var c=this.j(b);return Infinity!=c?(this.a.push(b),this.b.push(c),this.f[this.l(b)]=!0,gh(this,0,this.a.length-1),!0):!1};
+function fh(b,c){for(var d=b.a,e=b.b,f=d.length,g=d[c],h=e[c],k=c;c<f>>1;){var l=2*c+1,m=2*c+2,l=m<f&&e[m]<e[l]?m:l;d[c]=d[l];e[c]=e[l];c=l}d[c]=g;e[c]=h;gh(b,k,c)}function gh(b,c,d){var e=b.a;b=b.b;for(var f=e[d],g=b[d];d>c;){var h=d-1>>1;if(b[h]>g)e[d]=e[h],b[d]=b[h],d=h;else break}e[d]=f;b[d]=g}function hh(b){var c=b.j,d=b.a,e=b.b,f=0,g=d.length,h,k,l;for(k=0;k<g;++k)h=d[k],l=c(h),Infinity==l?delete b.f[b.l(h)]:(e[f]=l,d[f++]=h);d.length=f;e.length=f;for(c=(b.a.length>>1)-1;0<=c;c--)fh(b,c)};function ih(b,c){dh.call(this,function(c){return b.apply(null,c)},function(b){return b[0].getKey()});this.A=c;this.h=0;this.g={}}M(ih,dh);ih.prototype.c=function(b){var c=ih.X.c.call(this,b);c&&Q(b[0],"change",this.i,this);return c};ih.prototype.i=function(b){b=b.target;var c=b.N();if(2===c||3===c||4===c||5===c)gb(b,"change",this.i,this),b=b.getKey(),b in this.g&&(delete this.g[b],--this.h),this.A()};function jh(){this.a=[];this.b=this.f=0}function kh(b,c){var d=b.b,e=.05-d,f=Math.log(.05/b.b)/-.005;return cd({source:c,duration:f,easing:function(b){return d*(Math.exp(-.005*b*f)-1)/e}})};function lh(b){T.call(this);this.S=null;this.set("active",!0);this.handleEvent=b.handleEvent}M(lh,T);lh.prototype.setMap=function(b){this.S=b};function mh(b,c,d,e,f){if(void 0!==d){var g=c.Z(),h=c.ia();void 0!==g&&h&&f&&0<f&&(b.fa(dd({rotation:g,duration:f,easing:$c})),e&&b.fa(cd({source:h,duration:f,easing:$c})));c.rotate(d,e)}}function nh(b,c,d,e,f){var g=c.I();d=c.constrainResolution(g,d,0);oh(b,c,d,e,f)}
+function oh(b,c,d,e,f){if(d){var g=c.I(),h=c.ia();void 0!==g&&h&&d!==g&&f&&0<f&&(b.fa(ed({resolution:g,duration:f,easing:$c})),e&&b.fa(cd({source:h,duration:f,easing:$c})));if(e){var k;b=c.ia();f=c.I();void 0!==b&&void 0!==f&&(k=[e[0]-d*(e[0]-b[0])/f,e[1]-d*(e[1]-b[1])/f]);c.oa(k)}Yc(c,d)}};function ph(b){b=b?b:{};this.a=b.delta?b.delta:1;lh.call(this,{handleEvent:qh});this.b=void 0!==b.duration?b.duration:250}M(ph,lh);function qh(b){var c=!1,d=b.originalEvent;if(b.type==tg){var c=b.map,e=b.coordinate,d=d.shiftKey?-this.a:this.a,f=c.O();nh(c,f,d,e,this.b);b.preventDefault();c=!0}return!c};function rh(b){b=b.originalEvent;return b.altKey&&!(b.metaKey||b.ctrlKey)&&b.shiftKey}function sh(b){b=b.originalEvent;return 0==b.button&&!(Jd&&Cf&&b.ctrlKey)}function th(b){b=b.originalEvent;return!b.altKey&&!(b.metaKey||b.ctrlKey)&&!b.shiftKey}function uh(b){b=b.originalEvent;return!b.altKey&&!(b.metaKey||b.ctrlKey)&&b.shiftKey}function vh(b){b=b.originalEvent.target.tagName;return"INPUT"!==b&&"SELECT"!==b&&"TEXTAREA"!==b}function wh(b){return"mouse"==b.a.pointerType};function xh(b){b=b?b:{};lh.call(this,{handleEvent:b.handleEvent?b.handleEvent:yh});this.wb=b.handleDownEvent?b.handleDownEvent:dc;this.xb=b.handleDragEvent?b.handleDragEvent:pa;this.yb=b.handleMoveEvent?b.handleMoveEvent:pa;this.zb=b.handleUpEvent?b.handleUpEvent:dc;this.s=!1;this.G={};this.c=[]}M(xh,lh);function zh(b){for(var c=b.length,d=0,e=0,f=0;f<c;f++)d+=b[f].clientX,e+=b[f].clientY;return[d/c,e/c]}
+function yh(b){if(!(b instanceof pg))return!0;var c=!1,d=b.type;if(d===yg||d===Ag||d===wg)d=b.a,b.type==wg?delete this.G[d.pointerId]:b.type==yg?this.G[d.pointerId]=d:d.pointerId in this.G&&(this.G[d.pointerId]=d),this.c=Za(this.G);this.s&&(b.type==Ag?this.xb(b):b.type==wg&&(this.s=this.zb(b)));b.type==yg?(this.s=b=this.wb(b),c=this.w(b)):b.type==zg&&this.yb(b);return!c}xh.prototype.w=function(b){return b};function Ah(b){xh.call(this,{handleDownEvent:Bh,handleDragEvent:Ch,handleUpEvent:Dh});b=b?b:{};this.a=b.kinetic;this.b=this.g=null;this.i=b.condition?b.condition:th;this.h=!1}M(Ah,xh);function Ch(b){var c=zh(this.c);this.a&&this.a.a.push(c[0],c[1],Date.now());if(this.b){var d=this.b[0]-c[0],e=c[1]-this.b[1];b=b.map;var f=b.O(),g=f.N(),e=d=[d,e],h=g.resolution;e[0]*=h;e[1]*=h;vb(d,g.rotation);ub(d,g.center);d=f.a.center(d);b.render();f.oa(d)}this.b=c}
+function Dh(b){b=b.map;var c=b.O();if(0===this.c.length){var d;if(d=!this.h&&this.a)if(d=this.a,6>d.a.length)d=!1;else{var e=Date.now()-100,f=d.a.length-3;if(d.a[f+2]<e)d=!1;else{for(var g=f-3;0<g&&d.a[g+2]>e;)g-=3;var e=d.a[f+2]-d.a[g+2],h=d.a[f]-d.a[g],f=d.a[f+1]-d.a[g+1];d.f=Math.atan2(f,h);d.b=Math.sqrt(h*h+f*f)/e;d=.05<d.b}}d&&(d=(.05-this.a.b)/-.005,f=this.a.f,g=c.ia(),this.g=kh(this.a,g),b.fa(this.g),g=Eh(b,g),d=b.ta([g[0]-d*Math.cos(f),g[1]-d*Math.sin(f)]),d=c.a.center(d),c.oa(d));Zc(c,-1);
+b.render();return!1}this.b=null;return!0}function Bh(b){if(0<this.c.length&&this.i(b)){var c=b.map,d=c.O();this.b=null;this.s||Zc(d,1);c.render();this.g&&La(c.B,this.g)&&(d.oa(b.frameState.viewState.center),this.g=null);this.a&&(b=this.a,b.a.length=0,b.f=0,b.b=0);this.h=1<this.c.length;return!0}return!1}Ah.prototype.w=dc;function Fh(b){b=b?b:{};xh.call(this,{handleDownEvent:Gh,handleDragEvent:Hh,handleUpEvent:Ih});this.b=b.condition?b.condition:rh;this.a=void 0;this.g=void 0!==b.duration?b.duration:250}M(Fh,xh);function Hh(b){if(wh(b)){var c=b.map,d=c.Pa();b=b.pixel;d=Math.atan2(d[1]/2-b[1],b[0]-d[0]/2);if(void 0!==this.a){b=d-this.a;var e=c.O(),f=e.Z();c.render();mh(c,e,f-b)}this.a=d}}
+function Ih(b){if(!wh(b))return!0;b=b.map;var c=b.O();Zc(c,-1);var d=c.Z(),e=this.g,d=c.constrainRotation(d,0);mh(b,c,d,void 0,e);return!1}function Gh(b){return wh(b)&&sh(b)&&this.b(b)?(b=b.map,Zc(b.O(),1),b.render(),this.a=void 0,!0):!1}Fh.prototype.w=dc;function Jh(b){this.c=null;this.b=document.createElement("div");this.b.style.position="absolute";this.b.className="ol-box "+b;this.f=this.g=this.a=null}M(Jh,ib);Jh.prototype.J=function(){this.setMap(null)};function Kh(b){var c=b.g,d=b.f;b=b.b.style;b.left=Math.min(c[0],d[0])+"px";b.top=Math.min(c[1],d[1])+"px";b.width=Math.abs(d[0]-c[0])+"px";b.height=Math.abs(d[1]-c[1])+"px"}
+Jh.prototype.setMap=function(b){if(this.a){this.a.o.removeChild(this.b);var c=this.b.style;c.left=c.top=c.width=c.height="inherit"}(this.a=b)&&this.a.o.appendChild(this.b)};function Lh(b){var c=b.g,d=b.f,c=[c,[c[0],d[1]],d,[d[0],c[1]]].map(b.a.ta,b.a);c[4]=c[0].slice();b.c?b.c.W([c]):b.c=new Tc([c])}Jh.prototype.M=function(){return this.c};function Mh(b,c,d){R.call(this,b);this.coordinate=c;this.mapBrowserEvent=d}M(Mh,R);function Nh(b){xh.call(this,{handleDownEvent:Oh,handleDragEvent:Ph,handleUpEvent:Qh});b=b?b:{};this.a=new Jh(b.className||"ol-dragbox");this.b=null;this.j=b.condition?b.condition:cc;this.i=b.boxEndCondition?b.boxEndCondition:Rh}M(Nh,xh);function Rh(b,c,d){b=d[0]-c[0];c=d[1]-c[1];return 64<=b*b+c*c}
+function Ph(b){if(wh(b)){var c=this.a,d=b.pixel;c.g=this.b;c.f=d;Lh(c);Kh(c);S(this,new Mh("boxdrag",b.coordinate,b))}}Nh.prototype.M=function(){return this.a.M()};Nh.prototype.h=pa;function Qh(b){if(!wh(b))return!0;this.a.setMap(null);this.i(b,this.b,b.pixel)&&(this.h(b),S(this,new Mh("boxend",b.coordinate,b)));return!1}
+function Oh(b){if(wh(b)&&sh(b)&&this.j(b)){this.b=b.pixel;this.a.setMap(b.map);var c=this.a,d=this.b;c.g=this.b;c.f=d;Lh(c);Kh(c);S(this,new Mh("boxstart",b.coordinate,b));return!0}return!1};function Sh(b){b=b?b:{};var c=b.condition?b.condition:uh;this.g=void 0!==b.duration?b.duration:200;this.o=void 0!==b.out?b.out:!1;Nh.call(this,{condition:c,className:b.className||"ol-dragzoom"})}M(Sh,Nh);
+Sh.prototype.h=function(){var b=this.S,c=b.O(),d=b.Pa(),e=this.M().C();if(this.o){var f=c.jc(d),e=[Eh(b,Xb(e)),Eh(b,[e[2],e[3]])],g=Pb(void 0),h,k;h=0;for(k=e.length;h<k;++h)Kb(g,e[h]);g=1/Xc(g,d);e=(f[2]-f[0])/2*(g-1);g=(f[3]-f[1])/2*(g-1);f[0]-=e;f[2]+=e;f[1]-=g;f[3]+=g;e=f}d=c.constrainResolution(Xc(e,d));f=c.I();g=c.ia();b.fa(ed({resolution:f,duration:this.g,easing:$c}));b.fa(cd({source:g,duration:this.g,easing:$c}));c.oa(Yb(e));Yc(c,d)};function Th(b){lh.call(this,{handleEvent:Uh});b=b||{};this.a=function(b){return th.call(this,b)&&vh.call(this,b)};this.b=void 0!==b.condition?b.condition:this.a;this.c=void 0!==b.duration?b.duration:100;this.g=void 0!==b.pixelDelta?b.pixelDelta:128}M(Th,lh);
+function Uh(b){var c=!1;if("keydown"==b.type){var d=b.originalEvent.keyCode;if(this.b(b)&&(40==d||37==d||39==d||38==d)){var e=b.map,c=e.O(),f=c.I()*this.g,g=0,h=0;40==d?h=-f:37==d?g=-f:39==d?g=f:h=f;d=[g,h];vb(d,c.Z());f=this.c;if(g=c.ia())f&&0<f&&e.fa(cd({source:g,duration:f,easing:bd})),e=c.a.center([g[0]+d[0],g[1]+d[1]]),c.oa(e);b.preventDefault();c=!0}}return!c};function Vh(b){lh.call(this,{handleEvent:Wh});b=b?b:{};this.b=b.condition?b.condition:vh;this.a=b.delta?b.delta:1;this.c=void 0!==b.duration?b.duration:100}M(Vh,lh);function Wh(b){var c=!1;if("keydown"==b.type||"keypress"==b.type){var d=b.originalEvent.charCode;if(this.b(b)&&(43==d||45==d)){c=b.map;d=43==d?this.a:-this.a;c.render();var e=c.O();nh(c,e,d,void 0,this.c);b.preventDefault();c=!0}}return!c};function Xh(b){lh.call(this,{handleEvent:Yh});b=b||{};this.a=0;this.i=void 0!==b.duration?b.duration:250;this.j=void 0!==b.useAnchor?b.useAnchor:!0;this.c=null;this.g=this.b=void 0}M(Xh,lh);
+function Yh(b){var c=!1;if("wheel"==b.type||"mousewheel"==b.type){var c=b.map,d=b.originalEvent;this.j&&(this.c=b.coordinate);var e;"wheel"==b.type?(e=d.deltaY,Af&&d.deltaMode===x.WheelEvent.DOM_DELTA_PIXEL&&(e/=Df),d.deltaMode===x.WheelEvent.DOM_DELTA_LINE&&(e*=40)):"mousewheel"==b.type&&(e=-d.wheelDeltaY,Bf&&(e/=3));this.a+=e;void 0===this.b&&(this.b=Date.now());e=Math.max(80-(Date.now()-this.b),0);x.clearTimeout(this.g);this.g=x.setTimeout(this.h.bind(this,c),e);b.preventDefault();c=!0}return!c}
+Xh.prototype.h=function(b){var c=Ca(this.a,-1,1),d=b.O();b.render();nh(b,d,-c,this.c,this.i);this.a=0;this.c=null;this.g=this.b=void 0};function Zh(b){xh.call(this,{handleDownEvent:$h,handleDragEvent:ai,handleUpEvent:bi});b=b||{};this.b=null;this.g=void 0;this.a=!1;this.h=0;this.j=void 0!==b.threshold?b.threshold:.3;this.i=void 0!==b.duration?b.duration:250}M(Zh,xh);
+function ai(b){var c=0,d=this.c[0],e=this.c[1],d=Math.atan2(e.clientY-d.clientY,e.clientX-d.clientX);void 0!==this.g&&(c=d-this.g,this.h+=c,!this.a&&Math.abs(this.h)>this.j&&(this.a=!0));this.g=d;b=b.map;d=b.a.getBoundingClientRect();e=zh(this.c);e[0]-=d.left;e[1]-=d.top;this.b=b.ta(e);this.a&&(d=b.O(),e=d.Z(),b.render(),mh(b,d,e+c,this.b))}
+function bi(b){if(2>this.c.length){b=b.map;var c=b.O();Zc(c,-1);if(this.a){var d=c.Z(),e=this.b,f=this.i,d=c.constrainRotation(d,0);mh(b,c,d,e,f)}return!1}return!0}function $h(b){return 2<=this.c.length?(b=b.map,this.b=null,this.g=void 0,this.a=!1,this.h=0,this.s||Zc(b.O(),1),b.render(),!0):!1}Zh.prototype.w=dc;function ci(b){xh.call(this,{handleDownEvent:di,handleDragEvent:ei,handleUpEvent:fi});b=b?b:{};this.b=null;this.h=void 0!==b.duration?b.duration:400;this.a=void 0;this.g=1}M(ci,xh);function ei(b){var c=1,d=this.c[0],e=this.c[1],f=d.clientX-e.clientX,d=d.clientY-e.clientY,f=Math.sqrt(f*f+d*d);void 0!==this.a&&(c=this.a/f);this.a=f;1!=c&&(this.g=c);b=b.map;var f=b.O(),d=f.I(),e=b.a.getBoundingClientRect(),g=zh(this.c);g[0]-=e.left;g[1]-=e.top;this.b=b.ta(g);b.render();oh(b,f,d*c,this.b)}
+function fi(b){if(2>this.c.length){b=b.map;var c=b.O();Zc(c,-1);var d=c.I(),e=this.b,f=this.h,d=c.constrainResolution(d,0,this.g-1);oh(b,c,d,e,f);return!1}return!0}function di(b){return 2<=this.c.length?(b=b.map,this.b=null,this.a=void 0,this.g=1,this.s||Zc(b.O(),1),b.render(),!0):!1}ci.prototype.w=dc;function gi(b){var c=b||{};b=Wa({},c);delete b.layers;c=c.layers;Cg.call(this,b);this.b=[];this.a={};Q(this,rb("layers"),this.Fd,this);c?Array.isArray(c)&&(c=new ld(c.slice())):c=new ld;this.set("layers",c)}M(gi,Cg);p=gi.prototype;p.ob=function(){this.cb()&&this.v()};
+p.Fd=function(){this.b.forEach(N);this.b.length=0;var b=this.get("layers");this.b.push(Q(b,"add",this.Ed,this),Q(b,"remove",this.Gd,this));for(var c in this.a)this.a[c].forEach(N);Ya(this.a);var b=b.a,d,e;c=0;for(d=b.length;c<d;c++)e=b[c],this.a[I(e).toString()]=[Q(e,"propertychange",this.ob,this),Q(e,"change",this.ob,this)];this.v()};p.Ed=function(b){b=b.element;var c=I(b).toString();this.a[c]=[Q(b,"propertychange",this.ob,this),Q(b,"change",this.ob,this)];this.v()};
+p.Gd=function(b){b=I(b.element).toString();this.a[b].forEach(N);delete this.a[b];this.v()};p.Lb=function(b){var c=void 0!==b?b:[],d=c.length;nd(this.get("layers"),function(b){b.Lb(c)});b=Dg(this);var e,f;for(e=c.length;d<e;d++)f=c[d],f.opacity*=b.opacity,f.visible=f.visible&&b.visible,f.maxResolution=Math.min(f.maxResolution,b.maxResolution),f.minResolution=Math.max(f.minResolution,b.minResolution),void 0!==b.extent&&(f.extent=void 0!==f.extent?$b(f.extent,b.extent):b.extent);return c};p.Pb=function(){return"ready"};function hi(b){ic.call(this,{code:b,units:"m",extent:ii,global:!0,worldExtent:ji})}M(hi,ic);hi.prototype.getPointResolution=function(b,c){return b/Da(c[1]/6378137)};var ki=6378137*Math.PI,ii=[-ki,-ki,ki,ki],ji=[-180,-85,180,85],li="EPSG:3857 EPSG:102100 EPSG:102113 EPSG:900913 urn:ogc:def:crs:EPSG:6.18:3:3857 urn:ogc:def:crs:EPSG::3857 http://www.opengis.net/gml/srs/epsg.xml#3857".split(" ").map(function(b){return new hi(b)});
+function mi(b,c,d){var e=b.length;d=1<d?d:2;void 0===c&&(2<d?c=b.slice():c=Array(e));for(var f=0;f<e;f+=d)c[f]=6378137*Math.PI*b[f]/180,c[f+1]=6378137*Math.log(Math.tan(Math.PI*(b[f+1]+90)/360));return c}function ni(b,c,d){var e=b.length;d=1<d?d:2;void 0===c&&(2<d?c=b.slice():c=Array(e));for(var f=0;f<e;f+=d)c[f]=180*b[f]/(6378137*Math.PI),c[f+1]=360*Math.atan(Math.exp(b[f+1]/6378137))/Math.PI-90;return c};var oi=new ec(6378137);function pi(b,c){ic.call(this,{code:b,units:"degrees",extent:qi,axisOrientation:c,global:!0,metersPerUnit:ri,worldExtent:qi})}M(pi,ic);pi.prototype.getPointResolution=function(b){return b};
+var qi=[-180,-90,180,90],ri=Math.PI*oi.radius/180,si=[new pi("CRS:84"),new pi("EPSG:4326","neu"),new pi("urn:ogc:def:crs:EPSG::4326","neu"),new pi("urn:ogc:def:crs:EPSG:6.6:4326","neu"),new pi("urn:ogc:def:crs:OGC:1.3:CRS84"),new pi("urn:ogc:def:crs:OGC:2:84"),new pi("http://www.opengis.net/gml/srs/epsg.xml#4326","neu"),new pi("urn:x-ogc:def:crs:EPSG:4326","neu")];function X(b){b=b?b:{};var c=Wa({},b);delete c.preload;delete c.useInterimTilesOnError;Gg.call(this,c);this.set("preload",void 0!==b.preload?b.preload:0);this.set("useInterimTilesOnError",void 0!==b.useInterimTilesOnError?b.useInterimTilesOnError:!0)}M(X,Gg);function ti(b){return b.get("useInterimTilesOnError")};var ui=[0,0,0,1],vi=[],wi=[0,0,0,1];function xi(b,c,d,e){0!==c&&(b.translate(d,e),b.rotate(c),b.translate(-d,-e))};function yi(b){b=b||{};this.a=void 0!==b.color?b.color:null;this.b=void 0}yi.prototype.ga=function(){return this.a};function zi(){this.b=-1};function Ai(){this.b=-1;this.b=64;this.a=Array(4);this.g=Array(this.b);this.c=this.f=0;this.a[0]=1732584193;this.a[1]=4023233417;this.a[2]=2562383102;this.a[3]=271733878;this.c=this.f=0}M(Ai,zi);
+function Bi(b,c,d){d||(d=0);var e=Array(16);if(da(c))for(var f=0;16>f;++f)e[f]=c.charCodeAt(d++)|c.charCodeAt(d++)<<8|c.charCodeAt(d++)<<16|c.charCodeAt(d++)<<24;else for(f=0;16>f;++f)e[f]=c[d++]|c[d++]<<8|c[d++]<<16|c[d++]<<24;c=b.a[0];d=b.a[1];var f=b.a[2],g=b.a[3],h=0,h=c+(g^d&(f^g))+e[0]+3614090360&4294967295;c=d+(h<<7&4294967295|h>>>25);h=g+(f^c&(d^f))+e[1]+3905402710&4294967295;g=c+(h<<12&4294967295|h>>>20);h=f+(d^g&(c^d))+e[2]+606105819&4294967295;f=g+(h<<17&4294967295|h>>>15);h=d+(c^f&(g^
+c))+e[3]+3250441966&4294967295;d=f+(h<<22&4294967295|h>>>10);h=c+(g^d&(f^g))+e[4]+4118548399&4294967295;c=d+(h<<7&4294967295|h>>>25);h=g+(f^c&(d^f))+e[5]+1200080426&4294967295;g=c+(h<<12&4294967295|h>>>20);h=f+(d^g&(c^d))+e[6]+2821735955&4294967295;f=g+(h<<17&4294967295|h>>>15);h=d+(c^f&(g^c))+e[7]+4249261313&4294967295;d=f+(h<<22&4294967295|h>>>10);h=c+(g^d&(f^g))+e[8]+1770035416&4294967295;c=d+(h<<7&4294967295|h>>>25);h=g+(f^c&(d^f))+e[9]+2336552879&4294967295;g=c+(h<<12&4294967295|h>>>20);h=f+
+(d^g&(c^d))+e[10]+4294925233&4294967295;f=g+(h<<17&4294967295|h>>>15);h=d+(c^f&(g^c))+e[11]+2304563134&4294967295;d=f+(h<<22&4294967295|h>>>10);h=c+(g^d&(f^g))+e[12]+1804603682&4294967295;c=d+(h<<7&4294967295|h>>>25);h=g+(f^c&(d^f))+e[13]+4254626195&4294967295;g=c+(h<<12&4294967295|h>>>20);h=f+(d^g&(c^d))+e[14]+2792965006&4294967295;f=g+(h<<17&4294967295|h>>>15);h=d+(c^f&(g^c))+e[15]+1236535329&4294967295;d=f+(h<<22&4294967295|h>>>10);h=c+(f^g&(d^f))+e[1]+4129170786&4294967295;c=d+(h<<5&4294967295|
+h>>>27);h=g+(d^f&(c^d))+e[6]+3225465664&4294967295;g=c+(h<<9&4294967295|h>>>23);h=f+(c^d&(g^c))+e[11]+643717713&4294967295;f=g+(h<<14&4294967295|h>>>18);h=d+(g^c&(f^g))+e[0]+3921069994&4294967295;d=f+(h<<20&4294967295|h>>>12);h=c+(f^g&(d^f))+e[5]+3593408605&4294967295;c=d+(h<<5&4294967295|h>>>27);h=g+(d^f&(c^d))+e[10]+38016083&4294967295;g=c+(h<<9&4294967295|h>>>23);h=f+(c^d&(g^c))+e[15]+3634488961&4294967295;f=g+(h<<14&4294967295|h>>>18);h=d+(g^c&(f^g))+e[4]+3889429448&4294967295;d=f+(h<<20&4294967295|
+h>>>12);h=c+(f^g&(d^f))+e[9]+568446438&4294967295;c=d+(h<<5&4294967295|h>>>27);h=g+(d^f&(c^d))+e[14]+3275163606&4294967295;g=c+(h<<9&4294967295|h>>>23);h=f+(c^d&(g^c))+e[3]+4107603335&4294967295;f=g+(h<<14&4294967295|h>>>18);h=d+(g^c&(f^g))+e[8]+1163531501&4294967295;d=f+(h<<20&4294967295|h>>>12);h=c+(f^g&(d^f))+e[13]+2850285829&4294967295;c=d+(h<<5&4294967295|h>>>27);h=g+(d^f&(c^d))+e[2]+4243563512&4294967295;g=c+(h<<9&4294967295|h>>>23);h=f+(c^d&(g^c))+e[7]+1735328473&4294967295;f=g+(h<<14&4294967295|
+h>>>18);h=d+(g^c&(f^g))+e[12]+2368359562&4294967295;d=f+(h<<20&4294967295|h>>>12);h=c+(d^f^g)+e[5]+4294588738&4294967295;c=d+(h<<4&4294967295|h>>>28);h=g+(c^d^f)+e[8]+2272392833&4294967295;g=c+(h<<11&4294967295|h>>>21);h=f+(g^c^d)+e[11]+1839030562&4294967295;f=g+(h<<16&4294967295|h>>>16);h=d+(f^g^c)+e[14]+4259657740&4294967295;d=f+(h<<23&4294967295|h>>>9);h=c+(d^f^g)+e[1]+2763975236&4294967295;c=d+(h<<4&4294967295|h>>>28);h=g+(c^d^f)+e[4]+1272893353&4294967295;g=c+(h<<11&4294967295|h>>>21);h=f+(g^
+c^d)+e[7]+4139469664&4294967295;f=g+(h<<16&4294967295|h>>>16);h=d+(f^g^c)+e[10]+3200236656&4294967295;d=f+(h<<23&4294967295|h>>>9);h=c+(d^f^g)+e[13]+681279174&4294967295;c=d+(h<<4&4294967295|h>>>28);h=g+(c^d^f)+e[0]+3936430074&4294967295;g=c+(h<<11&4294967295|h>>>21);h=f+(g^c^d)+e[3]+3572445317&4294967295;f=g+(h<<16&4294967295|h>>>16);h=d+(f^g^c)+e[6]+76029189&4294967295;d=f+(h<<23&4294967295|h>>>9);h=c+(d^f^g)+e[9]+3654602809&4294967295;c=d+(h<<4&4294967295|h>>>28);h=g+(c^d^f)+e[12]+3873151461&4294967295;
+g=c+(h<<11&4294967295|h>>>21);h=f+(g^c^d)+e[15]+530742520&4294967295;f=g+(h<<16&4294967295|h>>>16);h=d+(f^g^c)+e[2]+3299628645&4294967295;d=f+(h<<23&4294967295|h>>>9);h=c+(f^(d|~g))+e[0]+4096336452&4294967295;c=d+(h<<6&4294967295|h>>>26);h=g+(d^(c|~f))+e[7]+1126891415&4294967295;g=c+(h<<10&4294967295|h>>>22);h=f+(c^(g|~d))+e[14]+2878612391&4294967295;f=g+(h<<15&4294967295|h>>>17);h=d+(g^(f|~c))+e[5]+4237533241&4294967295;d=f+(h<<21&4294967295|h>>>11);h=c+(f^(d|~g))+e[12]+1700485571&4294967295;c=d+
+(h<<6&4294967295|h>>>26);h=g+(d^(c|~f))+e[3]+2399980690&4294967295;g=c+(h<<10&4294967295|h>>>22);h=f+(c^(g|~d))+e[10]+4293915773&4294967295;f=g+(h<<15&4294967295|h>>>17);h=d+(g^(f|~c))+e[1]+2240044497&4294967295;d=f+(h<<21&4294967295|h>>>11);h=c+(f^(d|~g))+e[8]+1873313359&4294967295;c=d+(h<<6&4294967295|h>>>26);h=g+(d^(c|~f))+e[15]+4264355552&4294967295;g=c+(h<<10&4294967295|h>>>22);h=f+(c^(g|~d))+e[6]+2734768916&4294967295;f=g+(h<<15&4294967295|h>>>17);h=d+(g^(f|~c))+e[13]+1309151649&4294967295;
+d=f+(h<<21&4294967295|h>>>11);h=c+(f^(d|~g))+e[4]+4149444226&4294967295;c=d+(h<<6&4294967295|h>>>26);h=g+(d^(c|~f))+e[11]+3174756917&4294967295;g=c+(h<<10&4294967295|h>>>22);h=f+(c^(g|~d))+e[2]+718787259&4294967295;f=g+(h<<15&4294967295|h>>>17);h=d+(g^(f|~c))+e[9]+3951481745&4294967295;b.a[0]=b.a[0]+c&4294967295;b.a[1]=b.a[1]+(f+(h<<21&4294967295|h>>>11))&4294967295;b.a[2]=b.a[2]+f&4294967295;b.a[3]=b.a[3]+g&4294967295}
+function Ci(b,c){var d;void 0===d&&(d=c.length);for(var e=d-b.b,f=b.g,g=b.f,h=0;h<d;){if(0==g)for(;h<=e;)Bi(b,c,h),h+=b.b;if(da(c))for(;h<d;){if(f[g++]=c.charCodeAt(h++),g==b.b){Bi(b,f);g=0;break}}else for(;h<d;)if(f[g++]=c[h++],g==b.b){Bi(b,f);g=0;break}}b.f=g;b.c+=d};function Di(b){b=b||{};this.f=void 0!==b.color?b.color:null;this.Da=b.lineCap;this.a=void 0!==b.lineDash?b.lineDash:null;this.Ea=b.lineJoin;this.Fa=b.miterLimit;this.c=b.width;this.b=void 0}Di.prototype.ga=function(){return this.f};Di.prototype.getLineDash=function(){return this.a};Di.prototype.ha=function(){return this.c};function Ei(b){b=b||{};this.h=this.a=this.g=null;this.f=void 0!==b.fill?b.fill:null;this.b=void 0!==b.stroke?b.stroke:null;this.c=b.radius;this.o=[0,0];this.j=this.s=this.A=null;var c=b.atlasManager,d,e=null,f,g=0;this.b&&(f=vd(this.b.ga()),g=this.b.ha(),void 0===g&&(g=1),e=this.b.getLineDash(),Ef||(e=null));var h=2*(this.c+g)+1;f={strokeStyle:f,Wc:g,size:h,lineDash:e};if(void 0===c)this.a=document.createElement("CANVAS"),this.a.height=h,this.a.width=h,d=h=this.a.width,c=this.a.getContext("2d"),this.tc(f,
+c,0,0),this.f?this.h=this.a:(c=this.h=document.createElement("CANVAS"),c.height=f.size,c.width=f.size,c=c.getContext("2d"),this.oc(f,c,0,0));else{h=Math.round(h);(e=!this.f)&&(d=this.oc.bind(this,f));if(this.b){g=this.b;if(void 0===g.b){var k="s"+(g.f?vd(g.f):"-")+","+(void 0!==g.Da?g.Da.toString():"-")+","+(g.a?g.a.toString():"-")+","+(void 0!==g.Ea?g.Ea:"-")+","+(void 0!==g.Fa?g.Fa.toString():"-")+","+(void 0!==g.c?g.c.toString():"-"),l=new Ai;Ci(l,k);var m=Array((56>l.f?l.b:2*l.b)-l.f);m[0]=128;
+for(k=1;k<m.length-8;++k)m[k]=0;for(var n=8*l.c,k=m.length-8;k<m.length;++k)m[k]=n&255,n/=256;Ci(l,m);m=Array(16);for(k=n=0;4>k;++k)for(var q=0;32>q;q+=8)m[n++]=l.a[k]>>>q&255;if(8192>=m.length)l=String.fromCharCode.apply(null,m);else for(l="",k=0;k<m.length;k+=8192)l+=String.fromCharCode.apply(null,rd(m,k,k+8192));g.b=l}g=g.b}else g="-";this.f?(l=this.f,void 0===l.b&&(l.b=l.a instanceof CanvasPattern||l.a instanceof CanvasGradient?I(l.a).toString():"f"+(l.a?vd(l.a):"-")),l=l.b):l="-";this.g&&g==
+this.g[1]&&l==this.g[2]&&this.c==this.g[3]||(this.g=["c"+g+l+(void 0!==this.c?this.c.toString():"-"),g,l,this.c]);f=c.add(this.g[0],h,h,this.tc.bind(this,f),d);this.a=f.image;this.o=[f.offsetX,f.offsetY];d=f.image.width;e?this.h=f.Ye:this.h=this.a}this.A=[h/2,h/2];this.s=[h,h];this.j=[d,d];Ug.call(this,{opacity:1,rotateWithView:!1,rotation:0,scale:1,snapToPixel:void 0!==b.snapToPixel?b.snapToPixel:!0})}M(Ei,Ug);p=Ei.prototype;p.jb=function(){return this.A};p.Ka=function(){return this.f};p.Xb=function(){return this.h};
+p.T=function(){return this.a};p.rb=function(){return 2};p.wc=function(){return this.j};p.ka=function(){return this.o};p.Qa=function(){return this.s};p.va=function(){return this.b};p.Bc=pa;p.load=pa;p.Xc=pa;p.tc=function(b,c,d,e){c.setTransform(1,0,0,1,0,0);c.translate(d,e);c.beginPath();c.arc(b.size/2,b.size/2,this.c,0,2*Math.PI,!0);this.f&&(c.fillStyle=yd(this.f.ga()),c.fill());this.b&&(c.strokeStyle=b.strokeStyle,c.lineWidth=b.Wc,b.lineDash&&c.setLineDash(b.lineDash),c.stroke());c.closePath()};
+p.oc=function(b,c,d,e){c.setTransform(1,0,0,1,0,0);c.translate(d,e);c.beginPath();c.arc(b.size/2,b.size/2,this.c,0,2*Math.PI,!0);c.fillStyle=vd(ui);c.fill();this.b&&(c.strokeStyle=b.strokeStyle,c.lineWidth=b.Wc,b.lineDash&&c.setLineDash(b.lineDash),c.stroke());c.closePath()};function Fi(b){b=b||{};this.f=null;this.b=Gi;void 0!==b.geometry&&Hi(this,b.geometry);this.c=void 0!==b.fill?b.fill:null;this.g=void 0!==b.image?b.image:null;this.h=void 0!==b.stroke?b.stroke:null;this.sa=void 0!==b.text?b.text:null;this.a=b.zIndex}Fi.prototype.M=function(){return this.f};Fi.prototype.Ka=function(){return this.c};Fi.prototype.T=function(){return this.g};Fi.prototype.va=function(){return this.h};
+function Hi(b,c){ga(c)?b.b=c:"string"===typeof c?b.b=function(b){return b.get(c)}:c?void 0!==c&&(b.b=function(){return c}):b.b=Gi;b.f=c}function Ii(b){if(!ga(b)){var c;c=Array.isArray(b)?b:[b];b=function(){return c}}return b}var Ji=null;function Ki(){if(!Ji){var b=new yi({color:"rgba(255,255,255,0.4)"}),c=new Di({color:"#3399CC",width:1.25});Ji=[new Fi({image:new Ei({fill:b,stroke:c,radius:5}),fill:b,stroke:c})]}return Ji}
+function Li(){var b={},c=[255,255,255,1],d=[0,153,255,1];b.Polygon=[new Fi({fill:new yi({color:[255,255,255,.5]})})];b.MultiPolygon=b.Polygon;b.LineString=[new Fi({stroke:new Di({color:c,width:5})}),new Fi({stroke:new Di({color:d,width:3})})];b.MultiLineString=b.LineString;b.Circle=b.Polygon.concat(b.LineString);b.Point=[new Fi({image:new Ei({radius:6,fill:new yi({color:d}),stroke:new Di({color:c,width:1.5})}),zIndex:Infinity})];b.MultiPoint=b.Point;b.GeometryCollection=b.Polygon.concat(b.LineString,
+b.Point);return b}function Gi(b){return b.M()};function Y(b){b=b?b:{};var c=Wa({},b);delete c.style;delete c.renderBuffer;delete c.updateWhileAnimating;delete c.updateWhileInteracting;Gg.call(this,c);this.a=void 0!==b.renderBuffer?b.renderBuffer:100;this.o=null;this.g=void 0;this.s(b.style);this.i=void 0!==b.updateWhileAnimating?b.updateWhileAnimating:!1;this.j=void 0!==b.updateWhileInteracting?b.updateWhileInteracting:!1}M(Y,Gg);Y.prototype.s=function(b){this.o=void 0!==b?b:Ki;this.g=null===b?void 0:Ii(this.o);this.v()};function Mi(b,c,d,e,f){this.c=b;this.u=c;this.l=d;this.w=e;this.Ja=f;this.g=this.a=this.b=this.Y=this.ba=this.S=null;this.aa=this.ja=this.o=this.D=this.K=this.B=0;this.ea=!1;this.h=this.na=0;this.za=!1;this.G=0;this.f="";this.j=this.H=this.Aa=this.pa=0;this.P=this.A=this.i=null;this.s=[];this.Ba=zb()}M(Mi,Eg);
+function Ni(b,c,d){if(b.g){c=Ac(c,0,d,2,b.w,b.s);d=b.c;var e=b.Ba,f=d.globalAlpha;1!=b.o&&(d.globalAlpha=f*b.o);var g=b.na;b.ea&&(g+=b.Ja);var h,k;h=0;for(k=c.length;h<k;h+=2){var l=c[h]-b.B,m=c[h+1]-b.K;b.za&&(l=Math.round(l),m=Math.round(m));if(0!==g||1!=b.h){var n=l+b.B,q=m+b.K;Ig(e,n,q,b.h,b.h,g,-n,-q);d.setTransform(e[0],e[1],e[4],e[5],e[12],e[13])}d.drawImage(b.g,b.ja,b.aa,b.G,b.D,l,m,b.G,b.D)}0===g&&1==b.h||d.setTransform(1,0,0,1,0,0);1!=b.o&&(d.globalAlpha=f)}}
+function Oi(b,c,d,e){var f=0;if(b.P&&""!==b.f){b.i&&Pi(b,b.i);b.A&&Qi(b,b.A);var g=b.P,h=b.c,k=b.Y;k?(k.font!=g.font&&(k.font=h.font=g.font),k.textAlign!=g.textAlign&&(k.textAlign=h.textAlign=g.textAlign),k.textBaseline!=g.textBaseline&&(k.textBaseline=h.textBaseline=g.textBaseline)):(h.font=g.font,h.textAlign=g.textAlign,h.textBaseline=g.textBaseline,b.Y={font:g.font,textAlign:g.textAlign,textBaseline:g.textBaseline});c=Ac(c,f,d,e,b.w,b.s);for(g=b.c;f<d;f+=e){h=c[f]+b.pa;k=c[f+1]+b.Aa;if(0!==b.H||
+1!=b.j){var l=Ig(b.Ba,h,k,b.j,b.j,b.H,-h,-k);g.setTransform(l[0],l[1],l[4],l[5],l[12],l[13])}b.A&&g.strokeText(b.f,h,k);b.i&&g.fillText(b.f,h,k)}0===b.H&&1==b.j||g.setTransform(1,0,0,1,0,0)}}function Ri(b,c,d,e,f,g){var h=b.c;b=Ac(c,d,e,f,b.w,b.s);h.moveTo(b[0],b[1]);c=b.length;g&&(c-=2);for(d=2;d<c;d+=2)h.lineTo(b[d],b[d+1]);g&&h.closePath();return e}function Si(b,c,d,e,f){var g,h;g=0;for(h=e.length;g<h;++g)d=Ri(b,c,d,e[g],f,!0);return d}p=Mi.prototype;
+p.nc=function(b){if(ac(this.l,b.C())){if(this.b||this.a){this.b&&Pi(this,this.b);this.a&&Qi(this,this.a);var c;c=this.w;var d=this.s,e=b.a;c=e?Ac(e,0,e.length,b.b,c,d):null;d=c[2]-c[0];e=c[3]-c[1];d=Math.sqrt(d*d+e*e);e=this.c;e.beginPath();e.arc(c[0],c[1],d,0,2*Math.PI);this.b&&e.fill();this.a&&e.stroke()}""!==this.f&&Oi(this,b.a.slice(0,b.b),2,2)}};p.$a=function(b){var c=b.a;b=b.b;this.g&&Ni(this,c,c.length);""!==this.f&&Oi(this,c,c.length,b)};
+p.Za=function(b){var c=b.a;b=b.b;this.g&&Ni(this,c,c.length);""!==this.f&&Oi(this,c,c.length,b)};p.pc=function(b){if(ac(this.l,b.C())){if(this.a){Qi(this,this.a);var c=this.c,d=b.a;c.beginPath();Ri(this,d,0,d.length,b.b,!1);c.stroke()}""!==this.f&&(b=Ti(b),Oi(this,b,2,2))}};
+p.qc=function(b){var c=b.C();if(ac(this.l,c)){if(this.a){Qi(this,this.a);var c=this.c,d=b.a,e=0,f=b.ab(),g=b.b;c.beginPath();var h,k;h=0;for(k=f.length;h<k;++h)e=Ri(this,d,e,f[h],g,!1);c.stroke()}""!==this.f&&(b=Ui(b),Oi(this,b,b.length,2))}};p.sc=function(b){if(ac(this.l,b.C())){if(this.a||this.b){this.b&&Pi(this,this.b);this.a&&Qi(this,this.a);var c=this.c;c.beginPath();Si(this,Vc(b),0,b.ab(),b.b);this.b&&c.fill();this.a&&c.stroke()}""!==this.f&&(b=Wc(b),Oi(this,b,2,2))}};
+p.rc=function(b){if(ac(this.l,b.C())){if(this.a||this.b){this.b&&Pi(this,this.b);this.a&&Qi(this,this.a);var c=this.c,d=Vi(b),e=0,f=b.c,g=b.b,h,k;h=0;for(k=f.length;h<k;++h){var l=f[h];c.beginPath();e=Si(this,d,e,l,g);this.b&&c.fill();this.a&&c.stroke()}}""!==this.f&&(b=Wi(b),Oi(this,b,b.length,2))}};function Pi(b,c){var d=b.c,e=b.S;e?e.fillStyle!=c.fillStyle&&(e.fillStyle=d.fillStyle=c.fillStyle):(d.fillStyle=c.fillStyle,b.S={fillStyle:c.fillStyle})}
+function Qi(b,c){var d=b.c,e=b.ba;e?(e.lineCap!=c.lineCap&&(e.lineCap=d.lineCap=c.lineCap),Ef&&!Ma(e.lineDash,c.lineDash)&&d.setLineDash(e.lineDash=c.lineDash),e.lineJoin!=c.lineJoin&&(e.lineJoin=d.lineJoin=c.lineJoin),e.lineWidth!=c.lineWidth&&(e.lineWidth=d.lineWidth=c.lineWidth),e.miterLimit!=c.miterLimit&&(e.miterLimit=d.miterLimit=c.miterLimit),e.strokeStyle!=c.strokeStyle&&(e.strokeStyle=d.strokeStyle=c.strokeStyle)):(d.lineCap=c.lineCap,Ef&&d.setLineDash(c.lineDash),d.lineJoin=c.lineJoin,d.lineWidth=
+c.lineWidth,d.miterLimit=c.miterLimit,d.strokeStyle=c.strokeStyle,b.ba={lineCap:c.lineCap,lineDash:c.lineDash,lineJoin:c.lineJoin,lineWidth:c.lineWidth,miterLimit:c.miterLimit,strokeStyle:c.strokeStyle})}
+p.Ga=function(b,c){if(b){var d=b.ga();this.b={fillStyle:yd(d?d:ui)}}else this.b=null;if(c){var d=c.ga(),e=c.Da,f=c.getLineDash(),g=c.Ea,h=c.ha(),k=c.Fa;this.a={lineCap:void 0!==e?e:"round",lineDash:f?f:vi,lineJoin:void 0!==g?g:"round",lineWidth:this.u*(void 0!==h?h:1),miterLimit:void 0!==k?k:10,strokeStyle:vd(d?d:wi)}}else this.a=null};
+p.Ha=function(b){if(b){var c=b.jb(),d=b.T(1),e=b.ka(),f=b.Qa();this.B=c[0];this.K=c[1];this.D=f[1];this.g=d;this.o=b.l;this.ja=e[0];this.aa=e[1];this.ea=b.i;this.na=b.Z();this.h=b.gb;this.za=b.u;this.G=f[0]}else this.g=null};
+p.xa=function(b){if(b){var c=b.Ka();c?(c=c.ga(),this.i={fillStyle:yd(c?c:ui)}):this.i=null;var d=b.va();if(d){var c=d.ga(),e=d.Da,f=d.getLineDash(),g=d.Ea,h=d.ha(),d=d.Fa;this.A={lineCap:void 0!==e?e:"round",lineDash:f?f:vi,lineJoin:void 0!==g?g:"round",lineWidth:void 0!==h?h:1,miterLimit:void 0!==d?d:10,strokeStyle:vd(c?c:wi)}}else this.A=null;var c=b.qd(),e=b.rd(),f=b.sd(),g=b.Z(),h=b.gb,d=b.sa,k=b.td();b=b.ud();this.P={font:void 0!==c?c:"10px sans-serif",textAlign:void 0!==k?k:"center",textBaseline:void 0!==
+b?b:"middle"};this.f=void 0!==d?d:"";this.pa=void 0!==e?this.u*e:0;this.Aa=void 0!==f?this.u*f:0;this.H=void 0!==g?g:0;this.j=this.u*(void 0!==h?h:1)}else this.f=""};function Xi(b){Lg.call(this,b);this.K=zb()}M(Xi,Lg);
+Xi.prototype.g=function(b,c,d){Yi(this,"precompose",d,b,void 0);var e=this.T();if(e){var f=c.extent,g=void 0!==f;if(g){var h=b.pixelRatio,k=b.size[0]*h,l=b.size[1]*h,m=b.viewState.rotation,n=bc(f),q=[f[2],f[3]],r=[f[2],f[1]],f=Xb(f);Kg(b.coordinateToPixelMatrix,n,n);Kg(b.coordinateToPixelMatrix,q,q);Kg(b.coordinateToPixelMatrix,r,r);Kg(b.coordinateToPixelMatrix,f,f);d.save();xi(d,-m,k/2,l/2);d.beginPath();d.moveTo(n[0]*h,n[1]*h);d.lineTo(q[0]*h,q[1]*h);d.lineTo(r[0]*h,r[1]*h);d.lineTo(f[0]*h,f[1]*
+h);d.clip();xi(d,m,k/2,l/2)}h=this.D;k=d.globalAlpha;d.globalAlpha=c.opacity;d.drawImage(e,0,0,+e.width,+e.height,Math.round(h[12]),Math.round(h[13]),Math.round(e.width*h[0]),Math.round(e.height*h[5]));d.globalAlpha=k;g&&d.restore()}Yi(this,"postcompose",d,b,void 0)};
+function Yi(b,c,d,e,f){var g=b.a;if(nb(g,c)){var h=e.size[0]*e.pixelRatio,k=e.size[1]*e.pixelRatio,l=e.viewState.rotation;xi(d,-l,h/2,k/2);b=void 0!==f?f:Zi(b,e,0);b=new Mi(d,e.pixelRatio,e.extent,b,e.viewState.rotation);S(g,new Fg(c,g,b,e,d,null));xi(d,l,h/2,k/2)}}function Zi(b,c,d){var e=c.viewState,f=c.pixelRatio;return Ig(b.K,f*c.size[0]/2,f*c.size[1]/2,f/e.resolution,-f/e.resolution,-e.rotation,-e.center[0]+d,-e.center[1])};var $i=["Polygon","LineString","Image","Text"];function aj(b,c,d){this.aa=b;this.P=c;this.c=null;this.g=0;this.resolution=d;this.D=this.K=null;this.b=[];this.coordinates=[];this.ba=zb();this.a=[];this.S=[];this.Y=zb();this.ja=zb()}M(aj,Eg);
+function bj(b,c,d,e,f,g){var h=b.coordinates.length,k=b.Kb(),l=[c[d],c[d+1]],m=[NaN,NaN],n=!0,q,r,u;for(q=d+f;q<e;q+=f){m[0]=c[q];m[1]=c[q+1];u=k[1];var w=k[2],y=k[3],z=m[0],D=m[1],t=0;z<k[0]?t=t|16:z>w&&(t=t|4);D<u?t|=8:D>y&&(t|=2);0===t&&(t=1);u=t;u!==r?(n&&(b.coordinates[h++]=l[0],b.coordinates[h++]=l[1]),b.coordinates[h++]=m[0],b.coordinates[h++]=m[1],n=!1):1===u?(b.coordinates[h++]=m[0],b.coordinates[h++]=m[1],n=!1):n=!0;l[0]=m[0];l[1]=m[1];r=u}q===d+f&&(b.coordinates[h++]=l[0],b.coordinates[h++]=
+l[1]);g&&(b.coordinates[h++]=c[d],b.coordinates[h++]=c[d+1]);return h}function cj(b,c){b.K=[0,c,0];b.b.push(b.K);b.D=[0,c,0];b.a.push(b.D)}
+function dj(b,c,d,e,f,g,h,k,l){var m;Jg(e,b.ba)?m=b.S:(m=Ac(b.coordinates,0,b.coordinates.length,2,e,b.S),Cb(b.ba,e));e=!$a(g);var n=0,q=h.length,r=0,u,w=b.Y;b=b.ja;for(var y,z,D,t;n<q;){var v=h[n],B,E,C,G;switch(v[0]){case 0:r=v[1];e&&g[I(r).toString()]||!r.M()?n=v[2]:void 0===l||ac(l,r.M().C())?++n:n=v[2];break;case 1:c.beginPath();++n;break;case 2:r=v[1];u=m[r];v=m[r+1];D=m[r+2]-u;r=m[r+3]-v;c.arc(u,v,Math.sqrt(D*D+r*r),0,2*Math.PI,!0);++n;break;case 3:c.closePath();++n;break;case 4:r=v[1];u=v[2];
+B=v[3];C=v[4]*d;var J=v[5]*d,A=v[6];E=v[7];var H=v[8],O=v[9];D=v[11];t=v[12];var P=v[13],L=v[14];for(v[10]&&(D+=f);r<u;r+=2){v=m[r]-C;G=m[r+1]-J;P&&(v=Math.round(v),G=Math.round(G));if(1!=t||0!==D){var K=v+C,fa=G+J;Ig(w,K,fa,t,t,D,-K,-fa);c.transform(w[0],w[1],w[4],w[5],w[12],w[13])}K=c.globalAlpha;1!=E&&(c.globalAlpha=K*E);var fa=L+H>B.width?B.width-H:L,ra=A+O>B.height?B.height-O:A;c.drawImage(B,H,O,fa,ra,v,G,fa*d,ra*d);1!=E&&(c.globalAlpha=K);if(1!=t||0!==D)Eb(w,b),c.transform(b[0],b[1],b[4],b[5],
+b[12],b[13])}++n;break;case 5:r=v[1];u=v[2];C=v[3];J=v[4]*d;A=v[5]*d;D=v[6];t=v[7]*d;B=v[8];for(E=v[9];r<u;r+=2){v=m[r]+J;G=m[r+1]+A;if(1!=t||0!==D)Ig(w,v,G,t,t,D,-v,-G),c.transform(w[0],w[1],w[4],w[5],w[12],w[13]);H=C.split("\n");O=H.length;1<O?(P=Math.round(1.5*c.measureText("M").width),G-=(O-1)/2*P):P=0;for(L=0;L<O;L++)K=H[L],E&&c.strokeText(K,v,G),B&&c.fillText(K,v,G),G+=P;if(1!=t||0!==D)Eb(w,b),c.transform(b[0],b[1],b[4],b[5],b[12],b[13])}++n;break;case 6:if(void 0!==k&&(r=v[1],r=k(r)))return r;
+++n;break;case 7:c.fill();++n;break;case 8:r=v[1];u=v[2];v=m[r];G=m[r+1];D=v+.5|0;t=G+.5|0;if(D!==y||t!==z)c.moveTo(v,G),y=D,z=t;for(r+=2;r<u;r+=2)if(v=m[r],G=m[r+1],D=v+.5|0,t=G+.5|0,D!==y||t!==z)c.lineTo(v,G),y=D,z=t;++n;break;case 9:c.fillStyle=v[1];++n;break;case 10:y=void 0!==v[7]?v[7]:!0;z=v[2];c.strokeStyle=v[1];c.lineWidth=y?z*d:z;c.lineCap=v[3];c.lineJoin=v[4];c.miterLimit=v[5];Ef&&c.setLineDash(v[6]);z=y=NaN;++n;break;case 11:c.font=v[1];c.textAlign=v[2];c.textBaseline=v[3];++n;break;case 12:c.stroke();
+++n;break;default:++n}}}function ej(b){var c=b.a;c.reverse();var d,e=c.length,f,g,h=-1;for(d=0;d<e;++d)if(f=c[d],g=f[0],6==g)h=d;else if(0==g){f[2]=d;f=b.a;for(g=d;h<g;){var k=f[h];f[h]=f[g];f[g]=k;++h;--g}h=-1}}function fj(b,c){b.K[2]=b.b.length;b.K=null;b.D[2]=b.a.length;b.D=null;var d=[6,c];b.b.push(d);b.a.push(d)}aj.prototype.qb=pa;aj.prototype.Kb=function(){return this.P};
+function gj(b,c,d){aj.call(this,b,c,d);this.i=this.G=null;this.B=this.w=this.H=this.u=this.s=this.o=this.A=this.j=this.l=this.h=this.f=void 0}M(gj,aj);gj.prototype.$a=function(b,c){if(this.i){cj(this,c);var d=b.a,e=this.coordinates.length,d=bj(this,d,0,d.length,b.b,!1);this.b.push([4,e,d,this.i,this.f,this.h,this.l,this.j,this.A,this.o,this.s,this.u,this.H,this.w,this.B]);this.a.push([4,e,d,this.G,this.f,this.h,this.l,this.j,this.A,this.o,this.s,this.u,this.H,this.w,this.B]);fj(this,c)}};
+gj.prototype.Za=function(b,c){if(this.i){cj(this,c);var d=b.a,e=this.coordinates.length,d=bj(this,d,0,d.length,b.b,!1);this.b.push([4,e,d,this.i,this.f,this.h,this.l,this.j,this.A,this.o,this.s,this.u,this.H,this.w,this.B]);this.a.push([4,e,d,this.G,this.f,this.h,this.l,this.j,this.A,this.o,this.s,this.u,this.H,this.w,this.B]);fj(this,c)}};gj.prototype.qb=function(){ej(this);this.h=this.f=void 0;this.i=this.G=null;this.B=this.w=this.u=this.s=this.o=this.A=this.j=this.H=this.l=void 0};
+gj.prototype.Ha=function(b){var c=b.jb(),d=b.Qa(),e=b.Xb(1),f=b.T(1),g=b.ka();this.f=c[0];this.h=c[1];this.G=e;this.i=f;this.l=d[1];this.j=b.l;this.A=g[0];this.o=g[1];this.s=b.i;this.u=b.Z();this.H=b.gb;this.w=b.u;this.B=d[0]};function hj(b,c,d){aj.call(this,b,c,d);this.f={Ya:void 0,Ta:void 0,Ua:null,Va:void 0,Wa:void 0,Xa:void 0,Sb:0,strokeStyle:void 0,lineCap:void 0,lineDash:null,lineJoin:void 0,lineWidth:void 0,miterLimit:void 0}}M(hj,aj);
+function ij(b,c,d,e,f){var g=b.coordinates.length;c=bj(b,c,d,e,f,!1);g=[8,g,c];b.b.push(g);b.a.push(g);return e}p=hj.prototype;p.Kb=function(){this.c||(this.c=Mb(this.P),0<this.g&&Lb(this.c,this.resolution*(this.g+1)/2,this.c));return this.c};
+function jj(b){var c=b.f,d=c.strokeStyle,e=c.lineCap,f=c.lineDash,g=c.lineJoin,h=c.lineWidth,k=c.miterLimit;c.Ya==d&&c.Ta==e&&Ma(c.Ua,f)&&c.Va==g&&c.Wa==h&&c.Xa==k||(c.Sb!=b.coordinates.length&&(b.b.push([12]),c.Sb=b.coordinates.length),b.b.push([10,d,h,e,g,k,f],[1]),c.Ya=d,c.Ta=e,c.Ua=f,c.Va=g,c.Wa=h,c.Xa=k)}
+p.pc=function(b,c){var d=this.f,e=d.lineWidth;void 0!==d.strokeStyle&&void 0!==e&&(jj(this),cj(this,c),this.a.push([10,d.strokeStyle,d.lineWidth,d.lineCap,d.lineJoin,d.miterLimit,d.lineDash],[1]),d=b.a,ij(this,d,0,d.length,b.b),this.a.push([12]),fj(this,c))};
+p.qc=function(b,c){var d=this.f,e=d.lineWidth;if(void 0!==d.strokeStyle&&void 0!==e){jj(this);cj(this,c);this.a.push([10,d.strokeStyle,d.lineWidth,d.lineCap,d.lineJoin,d.miterLimit,d.lineDash],[1]);var d=b.ab(),e=b.a,f=b.b,g=0,h,k;h=0;for(k=d.length;h<k;++h)g=ij(this,e,g,d[h],f);this.a.push([12]);fj(this,c)}};p.qb=function(){this.f.Sb!=this.coordinates.length&&this.b.push([12]);ej(this);this.f=null};
+p.Ga=function(b,c){var d=c.ga();this.f.strokeStyle=vd(d?d:wi);d=c.Da;this.f.lineCap=void 0!==d?d:"round";d=c.getLineDash();this.f.lineDash=d?d:vi;d=c.Ea;this.f.lineJoin=void 0!==d?d:"round";d=c.ha();this.f.lineWidth=void 0!==d?d:1;d=c.Fa;this.f.miterLimit=void 0!==d?d:10;this.f.lineWidth>this.g&&(this.g=this.f.lineWidth,this.c=null)};
+function kj(b,c,d){aj.call(this,b,c,d);this.f={mc:void 0,Ya:void 0,Ta:void 0,Ua:null,Va:void 0,Wa:void 0,Xa:void 0,fillStyle:void 0,strokeStyle:void 0,lineCap:void 0,lineDash:null,lineJoin:void 0,lineWidth:void 0,miterLimit:void 0}}M(kj,aj);
+function lj(b,c,d,e,f){var g=b.f,h=[1];b.b.push(h);b.a.push(h);var k,h=0;for(k=e.length;h<k;++h){var l=e[h],m=b.coordinates.length;d=bj(b,c,d,l,f,!0);d=[8,m,d];m=[3];b.b.push(d,m);b.a.push(d,m);d=l}c=[7];b.a.push(c);void 0!==g.fillStyle&&b.b.push(c);void 0!==g.strokeStyle&&(g=[12],b.b.push(g),b.a.push(g));return d}p=kj.prototype;
+p.nc=function(b,c){var d=this.f,e=d.strokeStyle;if(void 0!==d.fillStyle||void 0!==e){mj(this);cj(this,c);this.a.push([9,vd(ui)]);void 0!==d.strokeStyle&&this.a.push([10,d.strokeStyle,d.lineWidth,d.lineCap,d.lineJoin,d.miterLimit,d.lineDash]);var f=b.a,e=this.coordinates.length;bj(this,f,0,f.length,b.b,!1);f=[1];e=[2,e];this.b.push(f,e);this.a.push(f,e);e=[7];this.a.push(e);void 0!==d.fillStyle&&this.b.push(e);void 0!==d.strokeStyle&&(d=[12],this.b.push(d),this.a.push(d));fj(this,c)}};
+p.sc=function(b,c){var d=this.f,e=d.strokeStyle;if(void 0!==d.fillStyle||void 0!==e)mj(this),cj(this,c),this.a.push([9,vd(ui)]),void 0!==d.strokeStyle&&this.a.push([10,d.strokeStyle,d.lineWidth,d.lineCap,d.lineJoin,d.miterLimit,d.lineDash]),d=b.ab(),e=Vc(b),lj(this,e,0,d,b.b),fj(this,c)};
+p.rc=function(b,c){var d=this.f,e=d.strokeStyle;if(void 0!==d.fillStyle||void 0!==e){mj(this);cj(this,c);this.a.push([9,vd(ui)]);void 0!==d.strokeStyle&&this.a.push([10,d.strokeStyle,d.lineWidth,d.lineCap,d.lineJoin,d.miterLimit,d.lineDash]);var d=b.c,e=Vi(b),f=b.b,g=0,h,k;h=0;for(k=d.length;h<k;++h)g=lj(this,e,g,d[h],f);fj(this,c)}};p.qb=function(){ej(this);this.f=null;var b=this.aa;if(0!==b){var c=this.coordinates,d,e;d=0;for(e=c.length;d<e;++d)c[d]=b*Math.round(c[d]/b)}};
+p.Kb=function(){this.c||(this.c=Mb(this.P),0<this.g&&Lb(this.c,this.resolution*(this.g+1)/2,this.c));return this.c};
+p.Ga=function(b,c){var d=this.f;if(b){var e=b.ga();d.fillStyle=yd(e?e:ui)}else d.fillStyle=void 0;c?(e=c.ga(),d.strokeStyle=vd(e?e:wi),e=c.Da,d.lineCap=void 0!==e?e:"round",e=c.getLineDash(),d.lineDash=e?e.slice():vi,e=c.Ea,d.lineJoin=void 0!==e?e:"round",e=c.ha(),d.lineWidth=void 0!==e?e:1,e=c.Fa,d.miterLimit=void 0!==e?e:10,d.lineWidth>this.g&&(this.g=d.lineWidth,this.c=null)):(d.strokeStyle=void 0,d.lineCap=void 0,d.lineDash=null,d.lineJoin=void 0,d.lineWidth=void 0,d.miterLimit=void 0)};
+function mj(b){var c=b.f,d=c.fillStyle,e=c.strokeStyle,f=c.lineCap,g=c.lineDash,h=c.lineJoin,k=c.lineWidth,l=c.miterLimit;void 0!==d&&c.mc!=d&&(b.b.push([9,d]),c.mc=c.fillStyle);void 0===e||c.Ya==e&&c.Ta==f&&c.Ua==g&&c.Va==h&&c.Wa==k&&c.Xa==l||(b.b.push([10,e,k,f,h,l,g]),c.Ya=e,c.Ta=f,c.Ua=g,c.Va=h,c.Wa=k,c.Xa=l)}function nj(b,c,d){aj.call(this,b,c,d);this.w=this.H=this.u=null;this.i="";this.s=this.o=this.A=this.j=0;this.l=this.h=this.f=null}M(nj,aj);
+function oj(b,c,d,e,f){if(""!==b.i&&b.l&&(b.f||b.h)){if(b.f){var g=b.f,h=b.u;if(!h||h.fillStyle!=g.fillStyle){var k=[9,g.fillStyle];b.b.push(k);b.a.push(k);h?h.fillStyle=g.fillStyle:b.u={fillStyle:g.fillStyle}}}b.h&&(g=b.h,h=b.H,h&&h.lineCap==g.lineCap&&h.lineDash==g.lineDash&&h.lineJoin==g.lineJoin&&h.lineWidth==g.lineWidth&&h.miterLimit==g.miterLimit&&h.strokeStyle==g.strokeStyle||(k=[10,g.strokeStyle,g.lineWidth,g.lineCap,g.lineJoin,g.miterLimit,g.lineDash,!1],b.b.push(k),b.a.push(k),h?(h.lineCap=
+g.lineCap,h.lineDash=g.lineDash,h.lineJoin=g.lineJoin,h.lineWidth=g.lineWidth,h.miterLimit=g.miterLimit,h.strokeStyle=g.strokeStyle):b.H={lineCap:g.lineCap,lineDash:g.lineDash,lineJoin:g.lineJoin,lineWidth:g.lineWidth,miterLimit:g.miterLimit,strokeStyle:g.strokeStyle}));g=b.l;h=b.w;h&&h.font==g.font&&h.textAlign==g.textAlign&&h.textBaseline==g.textBaseline||(k=[11,g.font,g.textAlign,g.textBaseline],b.b.push(k),b.a.push(k),h?(h.font=g.font,h.textAlign=g.textAlign,h.textBaseline=g.textBaseline):b.w=
+{font:g.font,textAlign:g.textAlign,textBaseline:g.textBaseline});cj(b,f);g=b.coordinates.length;c=bj(b,c,0,d,e,!1);c=[5,g,c,b.i,b.j,b.A,b.o,b.s,!!b.f,!!b.h];b.b.push(c);b.a.push(c);fj(b,f)}}
+nj.prototype.xa=function(b){if(b){var c=b.Ka();c?(c=c.ga(),c=yd(c?c:ui),this.f?this.f.fillStyle=c:this.f={fillStyle:c}):this.f=null;var d=b.va();if(d){var c=d.ga(),e=d.Da,f=d.getLineDash(),g=d.Ea,h=d.ha(),d=d.Fa,e=void 0!==e?e:"round",f=f?f.slice():vi,g=void 0!==g?g:"round",h=void 0!==h?h:1,d=void 0!==d?d:10,c=vd(c?c:wi);if(this.h){var k=this.h;k.lineCap=e;k.lineDash=f;k.lineJoin=g;k.lineWidth=h;k.miterLimit=d;k.strokeStyle=c}else this.h={lineCap:e,lineDash:f,lineJoin:g,lineWidth:h,miterLimit:d,strokeStyle:c}}else this.h=
+null;var l=b.qd(),c=b.rd(),e=b.sd(),f=b.Z(),h=b.gb,d=b.sa,g=b.td(),k=b.ud();b=void 0!==l?l:"10px sans-serif";g=void 0!==g?g:"center";k=void 0!==k?k:"middle";this.l?(l=this.l,l.font=b,l.textAlign=g,l.textBaseline=k):this.l={font:b,textAlign:g,textBaseline:k};this.i=void 0!==d?d:"";this.j=void 0!==c?c:0;this.A=void 0!==e?e:0;this.o=void 0!==f?f:0;this.s=void 0!==h?h:1}else this.i=""};function pj(b,c,d,e){this.o=b;this.h=c;this.A=d;this.l=e;this.b={};this.i=rf(1,1);this.j=zb()}
+function qj(b){for(var c in b.b){var d=b.b[c],e;for(e in d)d[e].qb()}}pj.prototype.g=function(b,c,d,e,f){var g=this.j;Ig(g,.5,.5,1/c,-1/c,-d,-b[0],-b[1]);var h=this.i;h.clearRect(0,0,1,1);var k;void 0!==this.l&&(k=Jb(),Kb(k,b),Lb(k,c*this.l,k));return rj(this,h,g,d,e,function(b){if(0<h.getImageData(0,0,1,1).data[3]){if(b=f(b))return b;h.clearRect(0,0,1,1)}},k)};
+pj.prototype.a=function(b,c){var d=void 0!==b?b.toString():"0",e=this.b[d];void 0===e&&(e={},this.b[d]=e);d=e[c];void 0===d&&(d=new sj[c](this.o,this.h,this.A),e[c]=d);return d};pj.prototype.c=function(){return $a(this.b)};
+pj.prototype.f=function(b,c,d,e,f,g){var h=Object.keys(this.b).map(Number);h.sort(Ha);if(!1!==g){var k=this.h;g=k[0];var l=k[1],m=k[2],k=k[3];g=[g,l,g,k,m,k,m,l];Ac(g,0,8,2,d,g);b.save();b.beginPath();b.moveTo(g[0],g[1]);b.lineTo(g[2],g[3]);b.lineTo(g[4],g[5]);b.lineTo(g[6],g[7]);b.closePath();b.clip()}var n,q;g=0;for(l=h.length;g<l;++g)for(n=this.b[h[g].toString()],m=0,k=$i.length;m<k;++m)q=n[$i[m]],void 0!==q&&dj(q,b,c,d,e,f,q.b,void 0);b.restore()};
+function rj(b,c,d,e,f,g,h){var k=Object.keys(b.b).map(Number);k.sort(function(b,c){return c-b});var l,m,n,q,r;l=0;for(m=k.length;l<m;++l)for(q=b.b[k[l].toString()],n=$i.length-1;0<=n;--n)if(r=q[$i[n]],void 0!==r&&(r=dj(r,c,1,d,e,f,r.a,g,h)))return r}var sj={Image:gj,LineString:hj,Polygon:kj,Text:nj};function tj(b,c){return I(b)-I(c)}function uj(b,c){var d=.5*b/c;return d*d}function vj(b,c,d,e,f,g){var h=!1,k,l;if(k=d.T())l=k.rb(),2==l||3==l?k.Xc(f,g):(0==l&&k.load(),k.Bc(f,g),h=!0);if(f=(0,d.b)(c))e=f.Ob(e),(0,wj[e.U()])(b,e,d,c);return h}
+var wj={Point:function(b,c,d,e){var f=d.T();if(f){if(2!=f.rb())return;var g=b.a(d.a,"Image");g.Ha(f);g.$a(c,e)}if(f=d.sa)b=b.a(d.a,"Text"),b.xa(f),oj(b,c.a,2,2,e)},LineString:function(b,c,d,e){var f=d.va();if(f){var g=b.a(d.a,"LineString");g.Ga(null,f);g.pc(c,e)}if(f=d.sa)b=b.a(d.a,"Text"),b.xa(f),oj(b,Ti(c),2,2,e)},Polygon:function(b,c,d,e){var f=d.Ka(),g=d.va();if(f||g){var h=b.a(d.a,"Polygon");h.Ga(f,g);h.sc(c,e)}if(f=d.sa)b=b.a(d.a,"Text"),b.xa(f),oj(b,Wc(c),2,2,e)},MultiPoint:function(b,c,d,
+e){var f=d.T();if(f){if(2!=f.rb())return;var g=b.a(d.a,"Image");g.Ha(f);g.Za(c,e)}if(f=d.sa)b=b.a(d.a,"Text"),b.xa(f),d=c.a,oj(b,d,d.length,c.b,e)},MultiLineString:function(b,c,d,e){var f=d.va();if(f){var g=b.a(d.a,"LineString");g.Ga(null,f);g.qc(c,e)}if(f=d.sa)b=b.a(d.a,"Text"),b.xa(f),c=Ui(c),oj(b,c,c.length,2,e)},MultiPolygon:function(b,c,d,e){var f=d.Ka(),g=d.va();if(g||f){var h=b.a(d.a,"Polygon");h.Ga(f,g);h.rc(c,e)}if(f=d.sa)b=b.a(d.a,"Text"),b.xa(f),c=Wi(c),oj(b,c,c.length,2,e)},GeometryCollection:function(b,
+c,d,e){c=c.a;var f,g;f=0;for(g=c.length;f<g;++f)(0,wj[c[f].U()])(b,c[f],d,e)},Circle:function(b,c,d,e){var f=d.Ka(),g=d.va();if(f||g){var h=b.a(d.a,"Polygon");h.Ga(f,g);h.nc(c,e)}if(f=d.sa)b=b.a(d.a,"Text"),b.xa(f),oj(b,c.a.slice(0,c.b),2,2,e)}};var xj=!((W("Chrome")||W("CriOS"))&&!W("Opera")&&!W("OPR")&&!W("Edge"))||W("iPhone")&&!W("iPod")&&!W("iPad")||W("iPad")||W("iPod");function yj(b,c,d,e){b=d-b;c=e-c;var f=Math.sqrt(b*b+c*c);return[Math.round(d+b/f),Math.round(e+c/f)]}
+function zj(b,c,d,e,f,g,h,k,l,m,n){var q=rf(Math.round(d*b),Math.round(d*c));if(0===l.length)return q.canvas;q.scale(d,d);var r=Jb();l.forEach(function(b){Sb(r,b.extent)});var u=rf(Math.round(d*Vb(r)/e),Math.round(d*Wb(r)/e)),w=d/e;l.forEach(function(b){u.drawImage(b.image,m,m,b.image.width-2*m,b.image.height-2*m,(b.extent[0]-r[0])*w,-(b.extent[3]-r[3])*w,Vb(b.extent)*w,Wb(b.extent)*w)});var y=bc(h);k.c.forEach(function(b){var c=b.source,f=b.target,h=c[1][0],k=c[1][1],l=c[2][0],m=c[2][1];b=(f[0][0]-
+y[0])/g;var w=-(f[0][1]-y[1])/g,n=(f[1][0]-y[0])/g,A=-(f[1][1]-y[1])/g,H=(f[2][0]-y[0])/g,O=-(f[2][1]-y[1])/g,f=c[0][0],c=c[0][1],h=h-f,k=k-c,l=l-f,m=m-c;a:{h=[[h,k,0,0,n-b],[l,m,0,0,H-b],[0,0,h,k,A-w],[0,0,l,m,O-w]];k=h.length;for(l=0;l<k;l++){for(var m=l,P=Math.abs(h[l][l]),L=l+1;L<k;L++){var K=Math.abs(h[L][l]);K>P&&(P=K,m=L)}if(0===P){h=null;break a}P=h[m];h[m]=h[l];h[l]=P;for(m=l+1;m<k;m++)for(P=-h[m][l]/h[l][l],L=l;L<k+1;L++)h[m][L]=l==L?0:h[m][L]+P*h[l][L]}l=Array(k);for(m=k-1;0<=m;m--)for(l[m]=
+h[m][k]/h[m][m],P=m-1;0<=P;P--)h[P][k]-=h[P][m]*l[m];h=l}h&&(q.save(),q.beginPath(),xj?(l=(b+n+H)/3,m=(w+A+O)/3,k=yj(l,m,b,w),n=yj(l,m,n,A),H=yj(l,m,H,O),q.moveTo(k[0],k[1]),q.lineTo(n[0],n[1]),q.lineTo(H[0],H[1])):(q.moveTo(b,w),q.lineTo(n,A),q.lineTo(H,O)),q.closePath(),q.clip(),q.transform(h[0],h[2],h[1],h[3],b,w),q.translate(r[0]-f,r[3]-c),q.scale(e/d,-e/d),q.drawImage(u.canvas,0,0),q.restore())});n&&(q.save(),q.strokeStyle="black",q.lineWidth=1,k.c.forEach(function(b){var c=b.target;b=(c[0][0]-
+y[0])/g;var d=-(c[0][1]-y[1])/g,e=(c[1][0]-y[0])/g,f=-(c[1][1]-y[1])/g,h=(c[2][0]-y[0])/g,c=-(c[2][1]-y[1])/g;q.beginPath();q.moveTo(b,d);q.lineTo(e,f);q.lineTo(h,c);q.closePath();q.stroke()}),q.restore());return q.canvas};function Aj(b,c,d,e,f){this.f=b;this.g=c;var g={},h=xc(this.g,this.f);this.b=function(b){var c=b[0]+"/"+b[1];g[c]||(g[c]=h(b));return g[c]};this.h=e;this.A=f*f;this.c=[];this.i=!1;this.j=this.f.a&&!!e&&!!this.f.C()&&Vb(e)==Vb(this.f.C());this.a=this.f.C()?Vb(this.f.C()):null;this.l=this.g.C()?Vb(this.g.C()):null;b=bc(d);c=[d[2],d[3]];e=[d[2],d[1]];d=Xb(d);f=this.b(b);var k=this.b(c),l=this.b(e),m=this.b(d);Bj(this,b,c,e,d,f,k,l,m,10);if(this.i){var n=Infinity;this.c.forEach(function(b){n=Math.min(n,
+b.source[0][0],b.source[1][0],b.source[2][0])});this.c.forEach(function(b){if(Math.max(b.source[0][0],b.source[1][0],b.source[2][0])-n>this.a/2){var c=[[b.source[0][0],b.source[0][1]],[b.source[1][0],b.source[1][1]],[b.source[2][0],b.source[2][1]]];c[0][0]-n>this.a/2&&(c[0][0]-=this.a);c[1][0]-n>this.a/2&&(c[1][0]-=this.a);c[2][0]-n>this.a/2&&(c[2][0]-=this.a);Math.max(c[0][0],c[1][0],c[2][0])-Math.min(c[0][0],c[1][0],c[2][0])<this.a/2&&(b.source=c)}},this)}g={}}
+function Bj(b,c,d,e,f,g,h,k,l,m){var n=Ib([g,h,k,l]),q=b.a?Vb(n)/b.a:null,r=b.f.a&&.5<q&&1>q,u=!1;if(0<m){if(b.g.f&&b.l)var w=Ib([c,d,e,f]),u=u|.25<Vb(w)/b.l;!r&&b.f.f&&q&&(u|=.25<q)}if(u||!b.h||ac(n,b.h)){if(!(u||isFinite(g[0])&&isFinite(g[1])&&isFinite(h[0])&&isFinite(h[1])&&isFinite(k[0])&&isFinite(k[1])&&isFinite(l[0])&&isFinite(l[1])))if(0<m)u=!0;else return;if(0<m&&(u||(q=b.b([(c[0]+e[0])/2,(c[1]+e[1])/2]),n=r?(Ea(g[0],b.a)+Ea(k[0],b.a))/2-Ea(q[0],b.a):(g[0]+k[0])/2-q[0],q=(g[1]+k[1])/2-q[1],
+u=n*n+q*q>b.A),u)){Math.abs(c[0]-e[0])<=Math.abs(c[1]-e[1])?(r=[(d[0]+e[0])/2,(d[1]+e[1])/2],n=b.b(r),q=[(f[0]+c[0])/2,(f[1]+c[1])/2],u=b.b(q),Bj(b,c,d,r,q,g,h,n,u,m-1),Bj(b,q,r,e,f,u,n,k,l,m-1)):(r=[(c[0]+d[0])/2,(c[1]+d[1])/2],n=b.b(r),q=[(e[0]+f[0])/2,(e[1]+f[1])/2],u=b.b(q),Bj(b,c,r,q,f,g,n,u,l,m-1),Bj(b,r,d,e,q,n,h,k,u,m-1));return}if(r){if(!b.j)return;b.i=!0}b.c.push({source:[g,k,l],target:[c,e,f]});b.c.push({source:[g,h,k],target:[c,d,e]})}}
+function Cj(b){var c=Jb();b.c.forEach(function(b){b=b.source;Kb(c,b[0]);Kb(c,b[1]);Kb(c,b[2])});return c};function Dj(b){T.call(this);this.g=void 0;this.a="geometry";this.h=null;this.c=void 0;this.b=null;Q(this,rb(this.a),this.nb,this);void 0!==b&&(b instanceof zc||!b?Ej(this,b):this.l(b))}M(Dj,T);p=Dj.prototype;p.clone=function(){var b=new Dj(this.za());Fj(b,this.a);var c=this.M();c&&Ej(b,c.clone());if(c=this.h)b.h=c,b.c=c?Gj(c):void 0,b.v();return b};p.M=function(){return this.get(this.a)};p.La=function(){return this.g};p.zd=function(){this.v()};
+p.nb=function(){this.b&&(N(this.b),this.b=null);var b=this.M();b&&(this.b=Q(b,"change",this.zd,this));this.v()};function Ej(b,c){b.set(b.a,c)}function Fj(b,c){gb(b,rb(b.a),b.nb,b);b.a=c;Q(b,rb(b.a),b.nb,b);b.nb()}function Gj(b){if(!ga(b)){var c;c=Array.isArray(b)?b:[b];b=function(){return c}}return b};function Hj(b,c,d){return function(e,f,g){var h=new XMLHttpRequest;h.open("GET",ga(b)?b(e,f,g):b,!0);"arraybuffer"==c.U()&&(h.responseType="arraybuffer");h.onload=function(){if(200<=h.status&&300>h.status){var b=c.U(),e;"json"==b||"text"==b?e=h.responseText:"xml"==b?(e=h.responseXML,e||(b=h.responseText,e=(new DOMParser).parseFromString(b,"application/xml"))):"arraybuffer"==b&&(e=h.response);e&&d.call(this,c.b(e,{featureProjection:g}),c.f(Ij(e)))}}.bind(this);h.send()}}
+function Jj(b,c){return Hj(b,c,function(b){this.Db(b)})};function Kj(){return[[-Infinity,-Infinity,Infinity,Infinity]]};var Lj;
+(function(){var b={uc:{}};(function(){function c(b,d){if(!(this instanceof c))return new c(b,d);this.Bb=Math.max(4,b||9);this.ec=Math.max(2,Math.ceil(.4*this.Bb));d&&this.ed(d);this.clear()}function d(b,c){b.bbox=e(b,0,b.children.length,c)}function e(b,c,d,e){for(var g=[Infinity,Infinity,-Infinity,-Infinity],h;c<d;c++)h=b.children[c],f(g,b.$?e(h):h.bbox);return g}function f(b,c){b[0]=Math.min(b[0],c[0]);b[1]=Math.min(b[1],c[1]);b[2]=Math.max(b[2],c[2]);b[3]=Math.max(b[3],c[3])}function g(b,c){return b.bbox[0]-
+c.bbox[0]}function h(b,c){return b.bbox[1]-c.bbox[1]}function k(b){return(b[2]-b[0])*(b[3]-b[1])}function l(b){return b[2]-b[0]+(b[3]-b[1])}function m(b,c){return b[0]<=c[0]&&b[1]<=c[1]&&c[2]<=b[2]&&c[3]<=b[3]}function n(b,c){return c[0]<=b[2]&&c[1]<=b[3]&&c[2]>=b[0]&&c[3]>=b[1]}function q(b,c,d,e,f){for(var g=[c,d],h;g.length;)d=g.pop(),c=g.pop(),d-c<=e||(h=c+Math.ceil((d-c)/e/2)*e,r(b,c,d,h,f),g.push(c,h,h,d))}function r(b,c,d,e,f){for(var g,h,k,l,m;d>c;){600<d-c&&(g=d-c+1,h=e-c+1,k=Math.log(g),
+l=.5*Math.exp(2*k/3),m=.5*Math.sqrt(k*l*(g-l)/g)*(0>h-g/2?-1:1),k=Math.max(c,Math.floor(e-h*l/g+m)),h=Math.min(d,Math.floor(e+(g-h)*l/g+m)),r(b,k,h,e,f));g=b[e];h=c;l=d;u(b,c,e);for(0<f(b[d],g)&&u(b,c,d);h<l;){u(b,h,l);h++;for(l--;0>f(b[h],g);)h++;for(;0<f(b[l],g);)l--}0===f(b[c],g)?u(b,c,l):(l++,u(b,l,d));l<=e&&(c=l+1);e<=l&&(d=l-1)}}function u(b,c,d){var e=b[c];b[c]=b[d];b[d]=e}c.prototype={all:function(){return this.ac(this.data,[])},search:function(b){var c=this.data,d=[],e=this.da;if(!n(b,c.bbox))return d;
+for(var f=[],g,h,k,l;c;){g=0;for(h=c.children.length;g<h;g++)k=c.children[g],l=c.$?e(k):k.bbox,n(b,l)&&(c.$?d.push(k):m(b,l)?this.ac(k,d):f.push(k));c=f.pop()}return d},load:function(b){if(!b||!b.length)return this;if(b.length<this.ec){for(var c=0,d=b.length;c<d;c++)this.Ca(b[c]);return this}b=this.cc(b.slice(),0,b.length-1,0);this.data.children.length?this.data.height===b.height?this.fc(this.data,b):(this.data.height<b.height&&(c=this.data,this.data=b,b=c),this.dc(b,this.data.height-b.height-1,!0)):
+this.data=b;return this},Ca:function(b){b&&this.dc(b,this.data.height-1);return this},clear:function(){this.data={children:[],height:1,bbox:[Infinity,Infinity,-Infinity,-Infinity],$:!0};return this},remove:function(b){if(!b)return this;for(var c=this.data,d=this.da(b),e=[],f=[],g,h,k,l;c||e.length;){c||(c=e.pop(),h=e[e.length-1],g=f.pop(),l=!0);if(c.$&&(k=c.children.indexOf(b),-1!==k)){c.children.splice(k,1);e.push(c);this.dd(e);break}l||c.$||!m(c.bbox,d)?h?(g++,c=h.children[g],l=!1):c=null:(e.push(c),
+f.push(g),g=0,h=c,c=c.children[0])}return this},da:function(b){return b},Hb:function(b,c){return b[0]-c[0]},Ib:function(b,c){return b[1]-c[1]},toJSON:function(){return this.data},ac:function(b,c){for(var d=[];b;)b.$?c.push.apply(c,b.children):d.push.apply(d,b.children),b=d.pop();return c},cc:function(b,c,e,f){var g=e-c+1,h=this.Bb,k;if(g<=h)return k={children:b.slice(c,e+1),height:1,bbox:null,$:!0},d(k,this.da),k;f||(f=Math.ceil(Math.log(g)/Math.log(h)),h=Math.ceil(g/Math.pow(h,f-1)));k={children:[],
+height:f,bbox:null,$:!1};var g=Math.ceil(g/h),h=g*Math.ceil(Math.sqrt(h)),l,m,n;for(q(b,c,e,h,this.Hb);c<=e;c+=h)for(m=Math.min(c+h-1,e),q(b,c,m,g,this.Ib),l=c;l<=m;l+=g)n=Math.min(l+g-1,m),k.children.push(this.cc(b,l,n,f-1));d(k,this.da);return k},cd:function(b,c,d,e){for(var f,g,h,l,m,n,q,r;;){e.push(c);if(c.$||e.length-1===d)break;q=r=Infinity;f=0;for(g=c.children.length;f<g;f++)h=c.children[f],m=k(h.bbox),n=h.bbox,n=(Math.max(n[2],b[2])-Math.min(n[0],b[0]))*(Math.max(n[3],b[3])-Math.min(n[1],
+b[1]))-m,n<r?(r=n,q=m<q?m:q,l=h):n===r&&m<q&&(q=m,l=h);c=l}return c},dc:function(b,c,d){var e=this.da;d=d?b.bbox:e(b);var e=[],g=this.cd(d,this.data,c,e);g.children.push(b);for(f(g.bbox,d);0<=c;)if(e[c].children.length>this.Bb)this.fd(e,c),c--;else break;this.$c(d,e,c)},fd:function(b,c){var e=b[c],f=e.children.length,g=this.ec;this.ad(e,g,f);f=this.bd(e,g,f);f={children:e.children.splice(f,e.children.length-f),height:e.height,bbox:null,$:!1};e.$&&(f.$=!0);d(e,this.da);d(f,this.da);c?b[c-1].children.push(f):
+this.fc(e,f)},fc:function(b,c){this.data={children:[b,c],height:b.height+1,bbox:null,$:!1};d(this.data,this.da)},bd:function(b,c,d){var f,g,h,l,m,n,q;m=n=Infinity;for(f=c;f<=d-c;f++)g=e(b,0,f,this.da),h=e(b,f,d,this.da),l=Math.max(0,Math.min(g[2],h[2])-Math.max(g[0],h[0]))*Math.max(0,Math.min(g[3],h[3])-Math.max(g[1],h[1])),g=k(g)+k(h),l<m?(m=l,q=f,n=g<n?g:n):l===m&&g<n&&(n=g,q=f);return q},ad:function(b,c,d){var e=b.$?this.Hb:g,f=b.$?this.Ib:h,k=this.bc(b,c,d,e);c=this.bc(b,c,d,f);k<c&&b.children.sort(e)},
+bc:function(b,c,d,g){b.children.sort(g);g=this.da;var h=e(b,0,c,g),k=e(b,d-c,d,g),m=l(h)+l(k),n,q;for(n=c;n<d-c;n++)q=b.children[n],f(h,b.$?g(q):q.bbox),m+=l(h);for(n=d-c-1;n>=c;n--)q=b.children[n],f(k,b.$?g(q):q.bbox),m+=l(k);return m},$c:function(b,c,d){for(;0<=d;d--)f(c[d].bbox,b)},dd:function(b){for(var c=b.length-1,e;0<=c;c--)0===b[c].children.length?0<c?(e=b[c-1].children,e.splice(e.indexOf(b[c]),1)):this.clear():d(b[c],this.da)},ed:function(b){var c=["return a"," - b",";"];this.Hb=new Function("a",
+"b",c.join(b[0]));this.Ib=new Function("a","b",c.join(b[1]));this.da=new Function("a","return [a"+b.join(", a")+"];")}};"undefined"!==typeof b?b.uc=c:"undefined"!==typeof self?self.a=c:window.a=c})();Lj=b.uc})();function Mj(b){this.a=Lj(b);this.b={}}p=Mj.prototype;p.Ca=function(b,c){var d=[b[0],b[1],b[2],b[3],c];this.a.Ca(d);this.b[I(c)]=d};p.load=function(b,c){for(var d=Array(c.length),e=0,f=c.length;e<f;e++){var g=b[e],h=c[e],g=[g[0],g[1],g[2],g[3],h];d[e]=g;this.b[I(h)]=g}this.a.load(d)};p.remove=function(b){b=I(b);var c=this.b[b];delete this.b[b];return null!==this.a.remove(c)};function Nj(b){return b.a.all().map(function(b){return b[4]})}
+function Oj(b,c){return b.a.search(c).map(function(b){return b[4]})}function Pj(b,c,d,e){return Qj(Oj(b,c),d,e)}function Qj(b,c,d){for(var e,f=0,g=b.length;f<g&&!(e=c.call(d,b[f]));f++);return e}p.clear=function(){this.a.clear();this.b={}};p.C=function(){return this.a.data.bbox};function Rj(b){b=b||{};De.call(this,{attributions:b.attributions,logo:b.logo,projection:void 0,state:"ready",wrapX:void 0!==b.wrapX?b.wrapX:!0});this.o=pa;this.D=b.format;this.u=b.url;void 0!==b.loader?this.o=b.loader:void 0!==this.u&&(this.o=Jj(this.u,this.D));this.G=void 0!==b.strategy?b.strategy:Kj;var c=void 0!==b.useSpatialIndex?b.useSpatialIndex:!0;this.R=c?new Mj:null;this.s=new Mj;this.ca={};this.b={};this.g={};this.h={};this.a=null;var d,e;b.features instanceof ld?(d=b.features,e=d.a):Array.isArray(b.features)&&
+(e=b.features);c||void 0!==d||(d=new ld(e));void 0!==e&&Sj(this,e);void 0!==d&&Tj(this,d)}M(Rj,De);p=Rj.prototype;p.Cb=function(b){var c=I(b).toString();if(Uj(this,c,b)){Vj(this,c,b);var d=b.M();d?(c=d.C(),this.R&&this.R.Ca(c,b)):this.ca[c]=b;S(this,new Wj("addfeature",b))}this.v()};function Vj(b,c,d){b.h[c]=[Q(d,"change",b.xc,b),Q(d,"propertychange",b.xc,b)]}function Uj(b,c,d){var e=!0,f=d.La();void 0!==f?f.toString()in b.b?e=!1:b.b[f.toString()]=d:b.g[c]=d;return e}p.Db=function(b){Sj(this,b);this.v()};
+function Sj(b,c){var d,e,f,g,h=[],k=[],l=[];e=0;for(f=c.length;e<f;e++)g=c[e],d=I(g).toString(),Uj(b,d,g)&&k.push(g);e=0;for(f=k.length;e<f;e++){g=k[e];d=I(g).toString();Vj(b,d,g);var m=g.M();m?(d=m.C(),h.push(d),l.push(g)):b.ca[d]=g}b.R&&b.R.load(h,l);e=0;for(f=k.length;e<f;e++)S(b,new Wj("addfeature",k[e]))}
+function Tj(b,c){var d=!1;Q(b,"addfeature",function(b){d||(d=!0,c.push(b.feature),d=!1)});Q(b,"removefeature",function(b){d||(d=!0,c.remove(b.feature),d=!1)});Q(c,"add",function(b){d||(b=b.element,d=!0,this.Cb(b),d=!1)},b);Q(c,"remove",function(b){if(!d){b=b.element;d=!0;var c=I(b).toString();c in this.ca?delete this.ca[c]:this.R&&this.R.remove(b);this.Yb(b);this.v();d=!1}},b);b.a=c}
+p.clear=function(b){if(b){for(var c in this.h)this.h[c].forEach(N);this.a||(this.h={},this.b={},this.g={})}else if(this.R){b=this.Yb;Qj(Nj(this.R),b,this);for(var d in this.ca)this.Yb(this.ca[d])}this.a&&this.a.clear();this.R&&this.R.clear();this.s.clear();this.ca={};S(this,new Wj("clear"));this.v()};p.od=function(b,c){if(this.R)return Qj(Nj(this.R),b,c);if(this.a)return nd(this.a,b,c)};function Xj(b,c,d,e){b.R?Pj(b.R,c,d,e):b.a&&nd(b.a,d,e)}
+p.pe=function(){var b;this.a?b=this.a.a:this.R&&(b=Nj(this.R),$a(this.ca)||Ka(b,Za(this.ca)));return b};p.C=function(){return this.R.C()};
+p.xc=function(b){b=b.target;var c=I(b).toString(),d=b.M();if(d)if(d=d.C(),c in this.ca)delete this.ca[c],this.R&&this.R.Ca(d,b);else{if(this.R){var e=this.R,f=I(b);Rb(e.b[f].slice(0,4),d)||(e.remove(b),e.Ca(d,b))}}else c in this.ca||(this.R&&this.R.remove(b),this.ca[c]=b);d=b.La();void 0!==d?(d=d.toString(),c in this.g?(delete this.g[c],this.b[d]=b):this.b[d]!==b&&(Yj(this,b),this.b[d]=b)):c in this.g||(Yj(this,b),this.g[c]=b);this.v();S(this,new Wj("changefeature",b))};
+function Zj(b,c,d,e){var f=b.s;c=b.G(c,d);var g,h;g=0;for(h=c.length;g<h;++g){var k=c[g];Pj(f,k,function(b){return Nb(b.extent,k)})||(b.o.call(b,k,d,e),f.Ca(k,{extent:k.slice()}))}}p.Yb=function(b){var c=I(b).toString();this.h[c].forEach(N);delete this.h[c];var d=b.La();void 0!==d?delete this.b[d.toString()]:delete this.g[c];S(this,new Wj("removefeature",b))};function Yj(b,c){for(var d in b.b)if(b.b[d]===c){delete b.b[d];break}}function Wj(b,c){R.call(this,b);this.feature=c}M(Wj,R);function ak(b){Xi.call(this,b);this.c=rf();this.b=null;this.j=Jb();this.h=zb()}M(ak,Xi);
+ak.prototype.g=function(b,c,d){var e=b.pixelRatio,f=b.viewState,g=f.center,h=f.projection,k=f.rotation,l=b.size,m=Math.round(e*l[0]/2),n=Math.round(e*l[1]/2),q=e/f.resolution,r=this.a,u=r.V(),w=u.kb(h),f=Zi(this,b,0);Yi(this,"precompose",d,b,f);var l=d,r=nb(r,"render"),y,z,D,t;if(k||r){l=this.c;y=l.canvas;D=u.mb(e)/e;var v=d.canvas.width*D;z=d.canvas.height*D;t=Math.round(Math.sqrt(v*v+z*z));y.width!=t?y.width=y.height=t:l.clearRect(0,0,t,t);y=(t-v)/2/D;z=(t-z)/2/D;q*=D;m=Math.round(D*(m+y));n=Math.round(D*
+(n+z))}v=l.globalAlpha;l.globalAlpha=c.opacity;var B=u.la(h),E=this.b,C;c=u.Mb(h)&&1==c.opacity;c||(E.reverse(),C=[]);for(var G=0,J=E.length;G<J;++G){var A=E[G],H=A.L,O=Je(B,H,this.j),P=H[0],L=Xb(Je(B,Re(B,g,P))),H=Math.round(Vb(O)*q),K=Math.round(Wb(O)*q),fa=Math.round((O[0]-L[0])*q/H)*H+m+Math.round((L[0]-g[0])*q),O=Math.round((L[1]-O[3])*q/K)*K+n+Math.round((g[1]-L[1])*q);if(!c){L=[fa,O,fa+H,O+K];l.save();for(var ra=0,Wl=C.length;ra<Wl;++ra){var Xa=C[ra];ac(L,Xa)&&(l.beginPath(),l.moveTo(L[0],
+L[1]),l.lineTo(L[0],L[3]),l.lineTo(L[2],L[3]),l.lineTo(L[2],L[1]),l.moveTo(Xa[0],Xa[1]),l.lineTo(Xa[2],Xa[1]),l.lineTo(Xa[2],Xa[3]),l.lineTo(Xa[0],Xa[3]),l.closePath(),l.clip())}C.push(L)}P=Xe(u,P,e,h);l.drawImage(A.T(),w,w,P[0],P[1],fa,O,H,K);c||l.restore()}r&&(e=y-m/D+m,h=z-n/D+n,g=Ig(this.h,t/2-e,t/2-h,q,-q,-k,-g[0]+e/q,-g[1]-h/q),Yi(this,"render",l,b,g));(k||r)&&d.drawImage(l.canvas,-Math.round(y),-Math.round(z),t/D,t/D);l.globalAlpha=v;Yi(this,"postcompose",d,b,f)};
+ak.prototype.i=function(b,c){function d(b){b=b.N();return 2==b||4==b||3==b&&!u}var e=b.pixelRatio,f=b.viewState,g=f.projection,h=this.a,k=h.V(),l=k.la(g),m=Qe(l,f.resolution),n=l.I(m),q=f.center;n==f.resolution?(q=Rg(q,n,b.size),f=Zb(q,n,f.rotation,b.size)):f=b.extent;void 0!==c.extent&&(f=$b(f,c.extent));if(f[2]<f[0]||f[3]<f[1])return!1;n=Me(l,f,n);q={};q[m]={};var r=this.l(k,g,q),u=ti(h),w=Jb(),y=new fd(0,0,0,0),z,D,t,v;for(t=n.a;t<=n.f;++t)for(v=n.b;v<=n.c;++v)z=Tg(k,m,t,v,e,g),!d(z)&&z.a&&(z=
+z.a),d(z)?q[m][z.L.toString()]=z:(D=Ie(l,z.L,r,y,w),D||(z=Le(l,z.L,y,w))&&r(m+1,z));r=Object.keys(q).map(Number);r.sort(Ha);var w=[],B,y=0;for(t=r.length;y<t;++y)for(B in z=r[y],v=q[z],v)z=v[B],2==z.N()&&w.push(z);this.b=w;Qg(b.usedTiles,k,m,n);Sg(b,k,l,e,g,f,m,h.get("preload"));Ng(b,k);Pg(b,k);return!0};function bk(b){Xi.call(this,b);this.b=!1;this.w=-1;this.u=NaN;this.j=Jb();this.c=this.o=null;this.h=rf()}M(bk,Xi);
+bk.prototype.g=function(b,c,d){var e=b.extent,f=b.pixelRatio,g=c.eb?b.skippedFeatureUids:{},h=b.viewState,k=h.projection,h=h.rotation,l=k.C(),m=this.a.V(),n=Zi(this,b,0);Yi(this,"precompose",d,b,n);var q=this.c;if(q&&!q.c()){var r;nb(this.a,"render")?(this.h.canvas.width=d.canvas.width,this.h.canvas.height=d.canvas.height,r=this.h):r=d;var u=r.globalAlpha;r.globalAlpha=c.opacity;c=b.size[0]*f;var w=b.size[1]*f;xi(r,-h,c/2,w/2);q.f(r,f,n,h,g);if(m.j&&k.a&&!Nb(l,e)){for(var k=e[0],m=Vb(l),y=0;k<l[0];)--y,
+n=m*y,n=Zi(this,b,n),q.f(r,f,n,h,g),k+=m;y=0;for(k=e[2];k>l[2];)++y,n=m*y,n=Zi(this,b,n),q.f(r,f,n,h,g),k-=m;n=Zi(this,b,0)}xi(r,h,c/2,w/2);r!=d&&(Yi(this,"render",r,b,n),d.drawImage(r.canvas,0,0));r.globalAlpha=u}Yi(this,"postcompose",d,b,n)};bk.prototype.fb=function(b,c,d,e){if(this.c){var f=this.a,g={};return this.c.g(b,c.viewState.resolution,c.viewState.rotation,{},function(b){var c=I(b).toString();if(!(c in g))return g[c]=!0,d.call(e,b,f)})}};bk.prototype.B=function(){Mg(this)};
+bk.prototype.i=function(b){function c(b){var c,e=b.c;e?c=e.call(b,m):(e=d.g)&&(c=e(b,m));if(c){if(c){e=!1;if(Array.isArray(c))for(var f=0,g=c.length;f<g;++f)e=vj(r,b,c[f],uj(m,n),this.B,this)||e;else e=vj(r,b,c,uj(m,n),this.B,this)||e;b=e}else b=!1;this.b=this.b||b}}var d=this.a,e=d.V();Og(b.attributions,e.i);Pg(b,e);var f=b.viewHints[0],g=b.viewHints[1],h=d.i,k=d.j;if(!this.b&&!h&&f||!k&&g)return!0;var l=b.extent,k=b.viewState,f=k.projection,m=k.resolution,n=b.pixelRatio,g=d.f,q=d.a,h=d.get("renderOrder");
+void 0===h&&(h=tj);l=Lb(l,q*m);q=k.projection.C();e.j&&k.projection.a&&!Nb(q,b.extent)&&(b=Math.max(Vb(l)/2,Vb(q)),l[0]=q[0]-b,l[2]=q[2]+b);if(!this.b&&this.u==m&&this.w==g&&this.o==h&&Nb(this.j,l))return!0;this.c=null;this.b=!1;var r=new pj(.5*m/n,l,m,d.a);Zj(e,l,m,f);if(h){var u=[];Xj(e,l,function(b){u.push(b)},this);u.sort(h);u.forEach(c,this)}else Xj(e,l,c,this);qj(r);this.u=m;this.w=g;this.o=h;this.j=l;this.c=r;return!0};function ck(b,c){var d=/\{z\}/g,e=/\{x\}/g,f=/\{y\}/g,g=/\{-y\}/g;return function(h){if(h)return b.replace(d,h[0].toString()).replace(e,h[1].toString()).replace(f,function(){return(-h[2]-1).toString()}).replace(g,function(){var b=c.a?c.a[h[0]]:null;return(b.c-b.b+1+h[2]).toString()})}}function dk(b,c){for(var d=b.length,e=Array(d),f=0;f<d;++f)e[f]=ck(b[f],c);return ek(e)}function ek(b){return 1===b.length?b[0]:function(c,d,e){if(c)return b[Ea((c[1]<<c[0])+c[2],b.length)](c,d,e)}}function fk(){};function gk(b){Ve.call(this,{attributions:b.attributions,cacheSize:b.cacheSize,extent:b.extent,logo:b.logo,opaque:b.opaque,projection:b.projection,state:b.state,tileGrid:b.tileGrid,tilePixelRatio:b.tilePixelRatio,wrapX:b.wrapX});this.tileLoadFunction=b.tileLoadFunction;this.tileUrlFunction=this.g?this.g.bind(this):fk;this.urls=null;if(b.urls){var c=b.urls;this.urls=c;hk(this,this.g?this.g.bind(this):dk(c,this.tileGrid))}else b.url&&this.s(b.url);b.tileUrlFunction&&hk(this,b.tileUrlFunction)}
+M(gk,Ve);gk.prototype.D=function(b){b=b.target;switch(b.N()){case 1:S(this,new Ze("tileloadstart",b));break;case 2:S(this,new Ze("tileloadend",b));break;case 3:S(this,new Ze("tileloaderror",b))}};function hk(b,c){b.a.clear();b.tileUrlFunction=c;b.v()}
+gk.prototype.s=function(b){var c=[],d=/\{(\d)-(\d)\}/.exec(b)||/\{([a-z])-([a-z])\}/.exec(b);if(d){var e=d[2].charCodeAt(0),f;for(f=d[1].charCodeAt(0);f<=e;++f)c.push(b.replace(d[0],String.fromCharCode(f)))}else c.push(b);b=this.urls=c;hk(this,this.g?this.g.bind(this):dk(b,this.tileGrid))};gk.prototype.Yc=function(b,c,d){b=this.lb(b,c,d);we(this.a,b)&&this.a.get(b)};function ik(b,c){Zg.call(this,0,c);this.c=rf();rf();this.a=this.c.canvas;this.a.style.width="100%";this.a.style.height="100%";this.a.className="ol-unselectable";fe(b,this.a,0);this.b=!0;this.g=zb()}M(ik,Zg);ik.prototype.Jb=function(b){return b instanceof X?new ak(b):b instanceof Y?new bk(b):null};
+function jk(b,c,d){var e=b.h,f=b.c;if(nb(e,c)){var g=d.extent,h=d.pixelRatio,k=d.viewState.rotation,l=d.pixelRatio,m=d.viewState,n=m.resolution;b=Ig(b.g,b.a.width/2,b.a.height/2,l/n,-l/n,-m.rotation,-m.center[0],-m.center[1]);g=new Mi(f,h,g,b,k);S(e,new Fg(c,e,g,d,f,null))}}ik.prototype.U=function(){return"canvas"};
+ik.prototype.sb=function(b){if(b){var c=this.c,d=b.pixelRatio,e=Math.round(b.size[0]*d),d=Math.round(b.size[1]*d);this.a.width!=e||this.a.height!=d?(this.a.width=e,this.a.height=d):c.clearRect(0,0,e,d);var f=b.viewState.rotation;$g(b);jk(this,"precompose",b);var g=b.layerStatesArray;Na(g);xi(c,f,e/2,d/2);var h=b.viewState.resolution,k,l,m,n;k=0;for(l=g.length;k<l;++k)n=g[k],m=n.layer,m=bh(this,m),Hg(n,h)&&"ready"==n.$b&&m.i(b,n)&&m.g(b,n,c);xi(c,-f,e/2,d/2);jk(this,"postcompose",b);this.b||(oe(this.a,
+!0),this.b=!0);ch(this,b);b.postRenderFunctions.push(ah)}else this.b&&(oe(this.a,!1),this.b=!1)};function kk(b,c){Lg.call(this,b);this.target=c}M(kk,Lg);kk.prototype.Gb=pa;kk.prototype.Kc=pa;function lk(b){var c=document.createElement("DIV");c.style.position="absolute";kk.call(this,b,c);this.c=!0;this.h=1;this.g=0;this.b={}}M(lk,kk);lk.prototype.Gb=function(){ee(this.target);this.g=0};
+lk.prototype.Lc=function(b,c){if(!c.visible)return this.c&&(oe(this.target,!1),this.c=!1),!0;var d=b.pixelRatio,e=b.viewState,f=e.projection,g=this.a,h=g.V(),k=h.la(f),l=h.kb(f),m=Qe(k,e.resolution),n=k.I(m),q=e.center,r;n==e.resolution?(q=Rg(q,n,b.size),r=Zb(q,n,e.rotation,b.size)):r=b.extent;void 0!==c.extent&&(r=$b(r,c.extent));var n=Me(k,r,n),u={};u[m]={};var w=this.l(h,f,u),y=ti(g),z=Jb(),D=new fd(0,0,0,0),t,v,B,E;for(B=n.a;B<=n.f;++B)for(E=n.b;E<=n.c;++E)t=Tg(h,m,B,E,d,f),v=t.N(),v=2==v||4==
+v||3==v&&!y,!v&&t.a&&(t=t.a),v=t.N(),2==v?u[m][t.L.toString()]=t:4==v||3==v&&!y||(v=Ie(k,t.L,w,D,z),v||(t=Le(k,t.L,D,z))&&w(m+1,t));var C;if(this.g!=h.f){for(C in this.b)y=this.b[+C],ge(y.target);this.b={};this.g=h.f}z=Object.keys(u).map(Number);z.sort(Ha);var w={},G;B=0;for(E=z.length;B<E;++B){C=z[B];C in this.b?y=this.b[C]:(y=Re(k,q,C),y=new mk(k,y),w[C]=!0,this.b[C]=y);C=u[C];for(G in C){t=y;v=C[G];var J=l,A=v.L,H=A[0],O=A[1],P=A[2],A=A.toString();if(!(A in t.b)){var H=tb(Pe(t.g,H),t.i),L=v.T(t),
+K=L.style;K.maxWidth="none";var fa=void 0,ra=void 0;0<J?(fa=document.createElement("DIV"),ra=fa.style,ra.overflow="hidden",ra.width=H[0]+"px",ra.height=H[1]+"px",K.position="absolute",K.left=-J+"px",K.top=-J+"px",K.width=H[0]+2*J+"px",K.height=H[1]+2*J+"px",fa.appendChild(L)):(K.width=H[0]+"px",K.height=H[1]+"px",fa=L,ra=K);ra.position="absolute";ra.left=(O-t.f[1])*H[0]+"px";ra.top=(t.f[2]-P)*H[1]+"px";t.a||(t.a=document.createDocumentFragment());t.a.appendChild(fa);t.b[A]=v}}y.a&&(y.target.appendChild(y.a),
+y.a=null)}l=Object.keys(this.b).map(Number);l.sort(Ha);B=zb();G=0;for(z=l.length;G<z;++G)if(C=l[G],y=this.b[C],C in u)if(t=y.I(),E=y.ka(),Ig(B,b.size[0]/2,b.size[1]/2,t/e.resolution,t/e.resolution,e.rotation,(E[0]-q[0])/t,(q[1]-E[1])/t),y.setTransform(B),C in w){for(--C;0<=C;--C)if(C in this.b){E=this.b[C].target;E.parentNode&&E.parentNode.insertBefore(y.target,E.nextSibling);break}0>C&&fe(this.target,y.target,0)}else{if(!b.viewHints[0]&&!b.viewHints[1]){v=Ke(y.g,r,y.f[0],D);C=[];t=E=void 0;for(t in y.b)E=
+y.b[t],J=E.L,gd(v,J[1],J[2])||C.push(E);J=v=void 0;v=0;for(J=C.length;v<J;++v)E=C[v],t=E.L.toString(),ge(E.T(y)),delete y.b[t]}}else ge(y.target),delete this.b[C];c.opacity!=this.h&&(this.h=this.target.style.opacity=c.opacity);c.visible&&!this.c&&(oe(this.target,!0),this.c=!0);Qg(b.usedTiles,h,m,n);Sg(b,h,k,d,f,r,m,g.get("preload"));Ng(b,h);Pg(b,h);return!0};
+function mk(b,c){this.target=document.createElement("DIV");this.target.style.position="absolute";this.target.style.width="100%";this.target.style.height="100%";this.g=b;this.f=c;this.h=bc(Je(b,c));this.l=b.I(c[0]);this.b={};this.a=null;this.c=Bb();this.i=[0,0]}mk.prototype.ka=function(){return this.h};mk.prototype.I=function(){return this.l};mk.prototype.setTransform=function(b){Jg(b,this.c)||(vf(this.target,b),Cb(this.c,b))};function nk(b){this.g=rf();var c=this.g.canvas;c.style.maxWidth="none";c.style.position="absolute";kk.call(this,b,c);this.b=!1;this.h=-1;this.o=NaN;this.i=Jb();this.c=this.j=null;this.w=zb();this.u=zb()}M(nk,kk);p=nk.prototype;p.Gb=function(){var b=this.g.canvas;b.width=b.width;this.h=0};
+p.Kc=function(b,c){var d=b.viewState,e=d.center,f=d.rotation,g=d.resolution,d=b.pixelRatio,h=b.size[0],k=b.size[1],l=h*d,m=k*d,e=Ig(this.w,d*h/2,d*k/2,d/g,-d/g,-f,-e[0],-e[1]),g=this.g;g.canvas.width=l;g.canvas.height=m;h=Ig(this.u,0,0,1/d,1/d,0,-(l-h)/2*d,-(m-k)/2*d);vf(g.canvas,h);ok(this,"precompose",b,e);(h=this.c)&&!h.c()&&(g.globalAlpha=c.opacity,h.f(g,d,e,f,c.eb?b.skippedFeatureUids:{}),ok(this,"render",b,e));ok(this,"postcompose",b,e)};
+function ok(b,c,d,e){var f=b.g;b=b.a;nb(b,c)&&(e=new Mi(f,d.pixelRatio,d.extent,e,d.viewState.rotation),S(b,new Fg(c,b,e,d,f,null)))}p.fb=function(b,c,d,e){if(this.c){var f=this.a,g={};return this.c.g(b,c.viewState.resolution,c.viewState.rotation,{},function(b){var c=I(b).toString();if(!(c in g))return g[c]=!0,d.call(e,b,f)})}};p.Mc=function(){Mg(this)};
+p.Lc=function(b){function c(b){var c,e=b.c;e?c=e.call(b,l):(e=d.g)&&(c=e(b,l));if(c){if(c){e=!1;if(Array.isArray(c))for(var f=0,g=c.length;f<g;++f)e=vj(n,b,c[f],uj(l,m),this.Mc,this)||e;else e=vj(n,b,c,uj(l,m),this.Mc,this)||e;b=e}else b=!1;this.b=this.b||b}}var d=this.a,e=d.V();Og(b.attributions,e.i);Pg(b,e);var f=b.viewHints[0],g=b.viewHints[1],h=d.i,k=d.j;if(!this.b&&!h&&f||!k&&g)return!0;var g=b.extent,h=b.viewState,f=h.projection,l=h.resolution,m=b.pixelRatio;b=d.f;k=d.a;h=d.get("renderOrder");
+void 0===h&&(h=tj);g=Lb(g,k*l);if(!this.b&&this.o==l&&this.h==b&&this.j==h&&Nb(this.i,g))return!0;this.c=null;this.b=!1;var n=new pj(.5*l/m,g,l,d.a);Zj(e,g,l,f);if(h){var q=[];Xj(e,g,function(b){q.push(b)},this);q.sort(h);q.forEach(c,this)}else Xj(e,g,c,this);qj(n);this.o=l;this.h=b;this.j=h;this.i=g;this.c=n;return!0};function pk(b,c){Zg.call(this,0,c);this.c=rf();var d=this.c.canvas;d.style.position="absolute";d.style.width="100%";d.style.height="100%";d.className="ol-unselectable";fe(b,d,0);this.g=zb();this.a=document.createElement("DIV");this.a.className="ol-unselectable";d=this.a.style;d.position="absolute";d.width="100%";d.height="100%";Q(this.a,"touchstart",lb);fe(b,this.a,0);this.b=!0}M(pk,Zg);pk.prototype.J=function(){ge(this.a);pk.X.J.call(this)};
+pk.prototype.Jb=function(b){if(b instanceof X)b=new lk(b);else if(b instanceof Y)b=new nk(b);else return null;return b};function qk(b,c,d){var e=b.h;if(nb(e,c)){var f=d.extent,g=d.pixelRatio,h=d.viewState,k=h.rotation,l=b.c,m=l.canvas;Ig(b.g,m.width/2,m.height/2,g/h.resolution,-g/h.resolution,-h.rotation,-h.center[0],-h.center[1]);b=new Mi(l,g,f,b.g,k);S(e,new Fg(c,e,b,d,l,null))}}pk.prototype.U=function(){return"dom"};
+pk.prototype.sb=function(b){if(b){var c=this.h;if(nb(c,"precompose")||nb(c,"postcompose")){var c=this.c.canvas,d=b.pixelRatio;c.width=b.size[0]*d;c.height=b.size[1]*d}qk(this,"precompose",b);c=b.layerStatesArray;Na(c);var d=b.viewState.resolution,e,f,g,h;e=0;for(f=c.length;e<f;++e)h=c[e],g=h.layer,g=bh(this,g),fe(this.a,g.target,e),Hg(h,d)&&"ready"==h.$b?g.Lc(b,h)&&g.Kc(b,h):g.Gb();var c=b.layerStates,k;for(k in this.f)k in c||(g=this.f[k],ge(g.target));this.b||(oe(this.a,!0),this.b=!0);$g(b);ch(this,
+b);b.postRenderFunctions.push(ah);qk(this,"postcompose",b)}else this.b&&(oe(this.a,!1),this.b=!1)};function rk(b){this.a=b}function sk(b){this.a=b}M(sk,rk);sk.prototype.U=function(){return 35632};function tk(b){this.a=b}M(tk,rk);tk.prototype.U=function(){return 35633};function uk(){this.a="precision mediump float;varying vec2 a;varying float b;uniform float k;uniform sampler2D l;void main(void){vec4 texColor=texture2D(l,a);gl_FragColor.rgb=texColor.rgb;float alpha=texColor.a*b*k;if(alpha==0.0){discard;}gl_FragColor.a=alpha;}"}M(uk,sk);aa(uk);
+function vk(){this.a="varying vec2 a;varying float b;attribute vec2 c;attribute vec2 d;attribute vec2 e;attribute float f;attribute float g;uniform mat4 h;uniform mat4 i;uniform mat4 j;void main(void){mat4 offsetMatrix=i;if(g==1.0){offsetMatrix=i*j;}vec4 offsets=offsetMatrix*vec4(e,0.,0.);gl_Position=h*vec4(c,0.,1.)+offsets;a=d;b=f;}"}M(vk,tk);aa(vk);
+function wk(b,c){this.i=b.getUniformLocation(c,"j");this.j=b.getUniformLocation(c,"i");this.h=b.getUniformLocation(c,"k");this.l=b.getUniformLocation(c,"h");this.a=b.getAttribLocation(c,"e");this.b=b.getAttribLocation(c,"f");this.c=b.getAttribLocation(c,"c");this.f=b.getAttribLocation(c,"g");this.g=b.getAttribLocation(c,"d")};function xk(b){this.a=void 0!==b?b:[]};function yk(b,c){this.A=b;this.a=c;this.b={};this.g={};this.c={};this.i=this.j=this.h=this.l=null;(this.f=0<=oa.indexOf("OES_element_index_uint"))&&c.getExtension("OES_element_index_uint");Q(this.A,"webglcontextlost",this.o,this);Q(this.A,"webglcontextrestored",this.s,this)}M(yk,ib);
+function zk(b,c,d){var e=b.a,f=d.a,g=String(I(d));if(g in b.b)e.bindBuffer(c,b.b[g].buffer);else{var h=e.createBuffer();e.bindBuffer(c,h);var k;34962==c?k=new Float32Array(f):34963==c&&(k=b.f?new Uint32Array(f):new Uint16Array(f));e.bufferData(c,k,35044);b.b[g]={Xe:d,buffer:h}}}function Ak(b,c){var d=b.a,e=String(I(c)),f=b.b[e];d.isContextLost()||d.deleteBuffer(f.buffer);delete b.b[e]}
+yk.prototype.J=function(){hb(this.A);var b=this.a;if(!b.isContextLost()){for(var c in this.b)b.deleteBuffer(this.b[c].buffer);for(c in this.c)b.deleteProgram(this.c[c]);for(c in this.g)b.deleteShader(this.g[c]);b.deleteFramebuffer(this.h);b.deleteRenderbuffer(this.i);b.deleteTexture(this.j)}};
+function Bk(b){if(!b.h){var c=b.a,d=c.createFramebuffer();c.bindFramebuffer(c.FRAMEBUFFER,d);var e=Ck(c,1,1),f=c.createRenderbuffer();c.bindRenderbuffer(c.RENDERBUFFER,f);c.renderbufferStorage(c.RENDERBUFFER,c.DEPTH_COMPONENT16,1,1);c.framebufferTexture2D(c.FRAMEBUFFER,c.COLOR_ATTACHMENT0,c.TEXTURE_2D,e,0);c.framebufferRenderbuffer(c.FRAMEBUFFER,c.DEPTH_ATTACHMENT,c.RENDERBUFFER,f);c.bindTexture(c.TEXTURE_2D,null);c.bindRenderbuffer(c.RENDERBUFFER,null);c.bindFramebuffer(c.FRAMEBUFFER,null);b.h=d;
+b.j=e;b.i=f}return b.h}function Dk(b,c){var d=String(I(c));if(d in b.g)return b.g[d];var e=b.a,f=e.createShader(c.U());e.shaderSource(f,c.a);e.compileShader(f);return b.g[d]=f}function Ek(b,c,d){var e=I(c)+"/"+I(d);if(e in b.c)return b.c[e];var f=b.a,g=f.createProgram();f.attachShader(g,Dk(b,c));f.attachShader(g,Dk(b,d));f.linkProgram(g);return b.c[e]=g}yk.prototype.o=function(){Ya(this.b);Ya(this.g);Ya(this.c);this.i=this.j=this.h=this.l=null};yk.prototype.s=function(){};
+function Fk(b,c){if(c==b.l)return!1;b.a.useProgram(c);b.l=c;return!0}function Gk(b,c,d){var e=b.createTexture();b.bindTexture(b.TEXTURE_2D,e);b.texParameteri(b.TEXTURE_2D,b.TEXTURE_MAG_FILTER,b.LINEAR);b.texParameteri(b.TEXTURE_2D,b.TEXTURE_MIN_FILTER,b.LINEAR);void 0!==c&&b.texParameteri(3553,10242,c);void 0!==d&&b.texParameteri(3553,10243,d);return e}function Ck(b,c,d){var e=Gk(b,void 0,void 0);b.texImage2D(b.TEXTURE_2D,0,b.RGBA,c,d,0,b.RGBA,b.UNSIGNED_BYTE,null);return e};function Hk(b,c){this.H=this.u=void 0;this.j=Yb(c);this.s=[];this.h=[];this.B=void 0;this.g=[];this.c=[];this.D=this.K=void 0;this.b=[];this.w=this.i=null;this.G=void 0;this.na=Bb();this.za=Bb();this.S=this.P=void 0;this.pa=Bb();this.ja=this.Y=this.ba=void 0;this.ea=[];this.l=[];this.a=[];this.o=null;this.f=[];this.A=[];this.aa=void 0}M(Hk,Eg);
+function Ik(b,c){var d=b.o,e=b.i,f=b.ea,g=b.l,h=c.a;return function(){if(!h.isContextLost()){var b,l;b=0;for(l=f.length;b<l;++b)h.deleteTexture(f[b]);b=0;for(l=g.length;b<l;++b)h.deleteTexture(g[b])}Ak(c,d);Ak(c,e)}}
+function Jk(b,c,d,e){var f=b.u,g=b.H,h=b.B,k=b.K,l=b.D,m=b.G,n=b.P,q=b.S,r=b.ba?1:0,u=b.Y,w=b.ja,y=b.aa,z=Math.cos(u),u=Math.sin(u),D=b.b.length,t=b.a.length,v,B,E,C,G,J;for(v=0;v<d;v+=e)G=c[v]-b.j[0],J=c[v+1]-b.j[1],B=t/8,E=-w*f,C=-w*(h-g),b.a[t++]=G,b.a[t++]=J,b.a[t++]=E*z-C*u,b.a[t++]=E*u+C*z,b.a[t++]=n/l,b.a[t++]=(q+h)/k,b.a[t++]=m,b.a[t++]=r,E=w*(y-f),C=-w*(h-g),b.a[t++]=G,b.a[t++]=J,b.a[t++]=E*z-C*u,b.a[t++]=E*u+C*z,b.a[t++]=(n+y)/l,b.a[t++]=(q+h)/k,b.a[t++]=m,b.a[t++]=r,E=w*(y-f),C=w*g,b.a[t++]=
+G,b.a[t++]=J,b.a[t++]=E*z-C*u,b.a[t++]=E*u+C*z,b.a[t++]=(n+y)/l,b.a[t++]=q/k,b.a[t++]=m,b.a[t++]=r,E=-w*f,C=w*g,b.a[t++]=G,b.a[t++]=J,b.a[t++]=E*z-C*u,b.a[t++]=E*u+C*z,b.a[t++]=n/l,b.a[t++]=q/k,b.a[t++]=m,b.a[t++]=r,b.b[D++]=B,b.b[D++]=B+1,b.b[D++]=B+2,b.b[D++]=B,b.b[D++]=B+2,b.b[D++]=B+3}Hk.prototype.Za=function(b,c){this.f.push(this.b.length);this.A.push(c);var d=b.a;Jk(this,d,d.length,b.b)};Hk.prototype.$a=function(b,c){this.f.push(this.b.length);this.A.push(c);var d=b.a;Jk(this,d,d.length,b.b)};
+function Kk(b,c){var d=c.a;b.s.push(b.b.length);b.h.push(b.b.length);b.o=new xk(b.a);zk(c,34962,b.o);b.i=new xk(b.b);zk(c,34963,b.i);var e={};Lk(b.ea,b.g,e,d);Lk(b.l,b.c,e,d);b.u=void 0;b.H=void 0;b.B=void 0;b.g=null;b.c=null;b.K=void 0;b.D=void 0;b.b=null;b.G=void 0;b.P=void 0;b.S=void 0;b.ba=void 0;b.Y=void 0;b.ja=void 0;b.a=null;b.aa=void 0}
+function Lk(b,c,d,e){var f,g,h,k,l=c.length;for(k=0;k<l;++k){g=c[k];h=I(g).toString();if(h in d)f=d[h];else{f=e;var m=Gk(f,33071,33071);f.texImage2D(f.TEXTURE_2D,0,f.RGBA,f.RGBA,f.UNSIGNED_BYTE,g);f=m;d[h]=f}b[k]=f}}
+function Mk(b,c,d,e,f,g,h,k,l,m,n){var q=c.a;zk(c,34962,b.o);zk(c,34963,b.i);var r=uk.ua(),u=vk.ua(),u=Ek(c,r,u);b.w?r=b.w:(r=new wk(q,u),b.w=r);Fk(c,u);q.enableVertexAttribArray(r.c);q.vertexAttribPointer(r.c,2,5126,!1,32,0);q.enableVertexAttribArray(r.a);q.vertexAttribPointer(r.a,2,5126,!1,32,8);q.enableVertexAttribArray(r.g);q.vertexAttribPointer(r.g,2,5126,!1,32,16);q.enableVertexAttribArray(r.b);q.vertexAttribPointer(r.b,1,5126,!1,32,24);q.enableVertexAttribArray(r.f);q.vertexAttribPointer(r.f,
+1,5126,!1,32,28);u=b.pa;Ig(u,0,0,2/(e*g[0]),2/(e*g[1]),-f,-(d[0]-b.j[0]),-(d[1]-b.j[1]));d=b.za;e=2/g[0];g=2/g[1];Db(d);d[0]=e;d[5]=g;d[10]=1;d[15]=1;g=b.na;Db(g);0!==f&&Hb(g,-f);q.uniformMatrix4fv(r.l,!1,u);q.uniformMatrix4fv(r.j,!1,d);q.uniformMatrix4fv(r.i,!1,g);q.uniform1f(r.h,h);var w;if(void 0===l)Nk(b,q,c,k,b.ea,b.s);else{if(m)a:{f=c.f?5125:5123;c=c.f?4:2;g=b.f.length-1;for(h=b.l.length-1;0<=h;--h)for(q.bindTexture(3553,b.l[h]),m=0<h?b.h[h-1]:0,u=b.h[h];0<=g&&b.f[g]>=m;){w=b.f[g];d=b.A[g];
+e=I(d).toString();if(void 0===k[e]&&d.M()&&(void 0===n||ac(n,d.M().C()))&&(q.clear(q.COLOR_BUFFER_BIT|q.DEPTH_BUFFER_BIT),q.drawElements(4,u-w,f,w*c),u=l(d))){b=u;break a}u=w;g--}b=void 0}else q.clear(q.COLOR_BUFFER_BIT|q.DEPTH_BUFFER_BIT),Nk(b,q,c,k,b.l,b.h),b=(b=l(null))?b:void 0;w=b}q.disableVertexAttribArray(r.c);q.disableVertexAttribArray(r.a);q.disableVertexAttribArray(r.g);q.disableVertexAttribArray(r.b);q.disableVertexAttribArray(r.f);return w}
+function Nk(b,c,d,e,f,g){var h=d.f?5125:5123;d=d.f?4:2;if($a(e)){var k;b=0;e=f.length;for(k=0;b<e;++b){c.bindTexture(3553,f[b]);var l=g[b];c.drawElements(4,l-k,h,k*d);k=l}}else{k=0;var m,l=0;for(m=f.length;l<m;++l){c.bindTexture(3553,f[l]);for(var n=0<l?g[l-1]:0,q=g[l],r=n;k<b.f.length&&b.f[k]<=q;){var u=I(b.A[k]).toString();void 0!==e[u]?(r!==n&&c.drawElements(4,n-r,h,r*d),n=r=k===b.f.length-1?q:b.f[k+1]):n=k===b.f.length-1?q:b.f[k+1];k++}r!==n&&c.drawElements(4,n-r,h,r*d)}}}
+Hk.prototype.Ha=function(b){var c=b.jb(),d=b.T(1),e=b.wc(),f=b.Xb(1),g=b.l,h=b.ka(),k=b.i,l=b.Z(),m=b.Qa();b=b.gb;var n;0===this.g.length?this.g.push(d):(n=this.g[this.g.length-1],I(n)!=I(d)&&(this.s.push(this.b.length),this.g.push(d)));0===this.c.length?this.c.push(f):(n=this.c[this.c.length-1],I(n)!=I(f)&&(this.h.push(this.b.length),this.c.push(f)));this.u=c[0];this.H=c[1];this.B=m[1];this.K=e[1];this.D=e[0];this.G=g;this.P=h[0];this.S=h[1];this.Y=l;this.ba=k;this.ja=b;this.aa=m[0]};
+function Ok(b,c,d){this.l=c;this.i=b;this.h=d;this.b={}}function Pk(b,c){var d=[],e;for(e in b.b)d.push(Ik(b.b[e],c));return function(){for(var b=d.length,c,e=0;e<b;e++)c=d[e].apply(this,arguments);return c}}function Qk(b,c){for(var d in b.b)Kk(b.b[d],c)}Ok.prototype.a=function(b,c){var d=this.b[c];void 0===d&&(d=new Rk[c](this.i,this.l),this.b[c]=d);return d};Ok.prototype.c=function(){return $a(this.b)};
+Ok.prototype.f=function(b,c,d,e,f,g,h,k){var l,m;g=0;for(l=$i.length;g<l;++g)m=this.b[$i[g]],void 0!==m&&Mk(m,b,c,d,e,f,h,k,void 0,!1)};function Sk(b,c,d,e,f,g,h,k,l,m){var n=Tk,q,r;for(q=$i.length-1;0<=q;--q)if(r=b.b[$i[q]],void 0!==r&&(r=Mk(r,c,d,e,f,n,g,h,k,l,m)))return r}
+Ok.prototype.g=function(b,c,d,e,f,g,h,k,l,m){var n=c.a;n.bindFramebuffer(n.FRAMEBUFFER,Bk(c));var q;void 0!==this.h&&(q=Lb(Qb(b),e*this.h));return Sk(this,c,b,e,f,k,l,function(b){var c=new Uint8Array(4);n.readPixels(0,0,1,1,n.RGBA,n.UNSIGNED_BYTE,c);if(0<c[3]&&(b=m(b)))return b},!0,q)};function Uk(b,c,d,e,f,g,h){var k=d.a;k.bindFramebuffer(k.FRAMEBUFFER,Bk(d));return void 0!==Sk(b,d,c,e,f,g,h,function(){var b=new Uint8Array(4);k.readPixels(0,0,1,1,k.RGBA,k.UNSIGNED_BYTE,b);return 0<b[3]},!1)}
+var Rk={Image:Hk},Tk=[1,1];function Vk(b,c,d,e,f,g){this.a=b;this.f=c;this.c=g;this.l=f;this.h=e;this.g=d;this.b=null}M(Vk,Eg);Vk.prototype.$a=function(b,c){var d=this.a,e=(new Ok(1,this.c)).a(0,"Image");e.Ha(this.b);e.$a(b,c);Kk(e,d);Mk(e,this.a,this.f,this.g,this.h,this.l,1,{},void 0,!1);Ik(e,d)()};Vk.prototype.Za=function(b,c){var d=this.a,e=(new Ok(1,this.c)).a(0,"Image");e.Ha(this.b);e.Za(b,c);Kk(e,d);Mk(e,this.a,this.f,this.g,this.h,this.l,1,{},void 0,!1);Ik(e,d)()};Vk.prototype.Ha=function(b){this.b=b};function Wk(){this.a="precision mediump float;varying vec2 a;uniform float f;uniform sampler2D g;void main(void){vec4 texColor=texture2D(g,a);gl_FragColor.rgb=texColor.rgb;gl_FragColor.a=texColor.a*f;}"}M(Wk,sk);aa(Wk);function Xk(){this.a="varying vec2 a;attribute vec2 b;attribute vec2 c;uniform mat4 d;uniform mat4 e;void main(void){gl_Position=e*vec4(b,0.,1.);a=(d*vec4(c,0.,1.)).st;}"}M(Xk,tk);aa(Xk);
+function Yk(b,c){this.f=b.getUniformLocation(c,"f");this.c=b.getUniformLocation(c,"e");this.h=b.getUniformLocation(c,"d");this.g=b.getUniformLocation(c,"g");this.a=b.getAttribLocation(c,"b");this.b=b.getAttribLocation(c,"c")};function Zk(b,c){Lg.call(this,c);this.c=b;this.G=new xk([-1,-1,0,0,1,-1,1,0,-1,1,0,1,1,1,1,1]);this.i=this.ya=null;this.j=void 0;this.D=zb();this.P=Bb();this.o=null}M(Zk,Lg);
+function $k(b,c,d){var e=b.c.c;if(void 0===b.j||b.j!=d){c.postRenderFunctions.push(na(function(b,c,d){b.isContextLost()||(b.deleteFramebuffer(c),b.deleteTexture(d))},e,b.i,b.ya));c=Ck(e,d,d);var f=e.createFramebuffer();e.bindFramebuffer(36160,f);e.framebufferTexture2D(36160,36064,3553,c,0);b.ya=c;b.i=f;b.j=d}else e.bindFramebuffer(36160,b.i)}
+Zk.prototype.Nc=function(b,c,d){al(this,"precompose",d,b);zk(d,34962,this.G);var e=d.a,f=Wk.ua(),g=Xk.ua(),f=Ek(d,f,g);this.o?g=this.o:this.o=g=new Yk(e,f);Fk(d,f)&&(e.enableVertexAttribArray(g.a),e.vertexAttribPointer(g.a,2,5126,!1,16,0),e.enableVertexAttribArray(g.b),e.vertexAttribPointer(g.b,2,5126,!1,16,8),e.uniform1i(g.g,0));e.uniformMatrix4fv(g.h,!1,this.D);e.uniformMatrix4fv(g.c,!1,this.P);e.uniform1f(g.f,c.opacity);e.bindTexture(3553,this.ya);e.drawArrays(5,0,4);al(this,"postcompose",d,b)};
+function al(b,c,d,e){b=b.a;if(nb(b,c)){var f=e.viewState;S(b,new Fg(c,b,new Vk(d,f.center,f.resolution,f.rotation,e.size,e.extent),e,null,d))}}Zk.prototype.s=function(){this.i=this.ya=null;this.j=void 0};function bl(){this.a="precision mediump float;varying vec2 a;uniform sampler2D e;void main(void){gl_FragColor=texture2D(e,a);}"}M(bl,sk);aa(bl);function cl(){this.a="varying vec2 a;attribute vec2 b;attribute vec2 c;uniform vec4 d;void main(void){gl_Position=vec4(b*d.xy+d.zw,0.,1.);a=c;}"}M(cl,tk);aa(cl);function dl(b,c){this.f=b.getUniformLocation(c,"e");this.c=b.getUniformLocation(c,"d");this.a=b.getAttribLocation(c,"b");this.b=b.getAttribLocation(c,"c")};function el(b,c){Zk.call(this,b,c);this.B=bl.ua();this.S=cl.ua();this.b=null;this.w=new xk([0,0,0,1,1,0,1,1,0,1,0,0,1,1,1,0]);this.u=this.g=null;this.h=-1;this.K=[0,0]}M(el,Zk);el.prototype.J=function(){Ak(this.c.g,this.w);el.X.J.call(this)};el.prototype.l=function(b,c,d){var e=this.c;return function(f,g){return We(b,c,f,g,function(b){var c=we(e.b,b.getKey());c&&(d[f]||(d[f]={}),d[f][b.L.toString()]=b);return c})}};el.prototype.s=function(){el.X.s.call(this);this.b=null};
+el.prototype.Oc=function(b,c,d){var e=this.c,f=d.a,g=b.viewState,h=g.projection,k=this.a,l=k.V(),m=l.la(h),n=Qe(m,g.resolution),q=m.I(n),r=Xe(l,n,b.pixelRatio,h),u=r[0]/tb(Pe(m,n),this.K)[0],w=q/u,y=l.kb(h),z=g.center,D;q==g.resolution?(z=Rg(z,q,b.size),D=Zb(z,q,g.rotation,b.size)):D=b.extent;q=Me(m,D,q);if(this.g&&hd(this.g,q)&&this.h==l.f)w=this.u;else{var t=[q.ha(),q.c-q.b+1],v=Math.pow(2,Math.ceil(Math.log(Math.max(t[0]*r[0],t[1]*r[1]))/Math.LN2)),t=w*v,B=m.ka(n),E=B[0]+q.a*r[0]*w,w=B[1]+q.b*
+r[1]*w,w=[E,w,E+t,w+t];$k(this,b,v);f.viewport(0,0,v,v);f.clearColor(0,0,0,0);f.clear(16384);f.disable(3042);v=Ek(d,this.B,this.S);Fk(d,v);this.b||(this.b=new dl(f,v));zk(d,34962,this.w);f.enableVertexAttribArray(this.b.a);f.vertexAttribPointer(this.b.a,2,5126,!1,16,0);f.enableVertexAttribArray(this.b.b);f.vertexAttribPointer(this.b.b,2,5126,!1,16,8);f.uniform1i(this.b.f,0);d={};d[n]={};var C=this.l(l,h,d),G=ti(k),v=!0,E=Jb(),J=new fd(0,0,0,0),A,H,O;for(H=q.a;H<=q.f;++H)for(O=q.b;O<=q.c;++O){B=Tg(l,
+n,H,O,u,h);if(void 0!==c.extent&&(A=Je(m,B.L,E),!ac(A,c.extent)))continue;A=B.N();A=2==A||4==A||3==A&&!G;!A&&B.a&&(B=B.a);A=B.N();if(2==A){if(we(e.b,B.getKey())){d[n][B.L.toString()]=B;continue}}else if(4==A||3==A&&!G)continue;v=!1;A=Ie(m,B.L,C,J,E);A||(B=Le(m,B.L,J,E))&&C(n+1,B)}c=Object.keys(d).map(Number);c.sort(Ha);for(var C=new Float32Array(4),P,L,K,G=0,J=c.length;G<J;++G)for(P in L=d[c[G]],L)B=L[P],A=Je(m,B.L,E),H=2*(A[2]-A[0])/t,O=2*(A[3]-A[1])/t,K=2*(A[0]-w[0])/t-1,A=2*(A[1]-w[1])/t-1,yb(C,
+H,O,K,A),f.uniform4fv(this.b.c,C),fl(e,B,r,y*u),f.drawArrays(5,0,4);v?(this.g=q,this.u=w,this.h=l.f):(this.u=this.g=null,this.h=-1,b.animate=!0)}Qg(b.usedTiles,l,n,q);var fa=e.i;Sg(b,l,m,u,h,D,n,k.get("preload"),function(b){var c;(c=2!=b.N()||we(e.b,b.getKey()))||(c=b.getKey()in fa.f);c||fa.c([b,Oe(m,b.L),m.I(b.L[0]),r,y*u])},this);Ng(b,l);Pg(b,l);f=this.D;Db(f);Fb(f,(z[0]-w[0])/(w[2]-w[0]),(z[1]-w[1])/(w[3]-w[1]));0!==g.rotation&&Hb(f,g.rotation);Gb(f,b.size[0]*g.resolution/(w[2]-w[0]),b.size[1]*
+g.resolution/(w[3]-w[1]));Fb(f,-.5,-.5);return!0};function gl(b,c){Zk.call(this,b,c);this.h=!1;this.K=-1;this.B=NaN;this.u=Jb();this.g=this.b=this.w=null}M(gl,Zk);p=gl.prototype;p.Nc=function(b,c,d){this.g=c;var e=b.viewState,f=this.b;f&&!f.c()&&f.f(d,e.center,e.resolution,e.rotation,b.size,b.pixelRatio,c.opacity,c.eb?b.skippedFeatureUids:{})};p.J=function(){var b=this.b;b&&(Pk(b,this.c.g)(),this.b=null);gl.X.J.call(this)};
+p.fb=function(b,c,d,e){if(this.b&&this.g){var f=c.viewState,g=this.a,h={};return this.b.g(b,this.c.g,f.center,f.resolution,f.rotation,c.size,c.pixelRatio,this.g.opacity,{},function(b){var c=I(b).toString();if(!(c in h))return h[c]=!0,d.call(e,b,g)})}};p.Ic=function(b,c){if(this.b&&this.g){var d=c.viewState;return Uk(this.b,b,this.c.g,d.resolution,d.rotation,this.g.opacity,c.skippedFeatureUids)}return!1};p.Pc=function(){Mg(this)};
+p.Oc=function(b,c,d){function e(b){var c,d=b.c;d?c=d.call(b,m):(d=f.g)&&(c=d(b,m));if(c){if(c){d=!1;if(Array.isArray(c))for(var e=0,g=c.length;e<g;++e)d=vj(r,b,c[e],uj(m,n),this.Pc,this)||d;else d=vj(r,b,c,uj(m,n),this.Pc,this)||d;b=d}else b=!1;this.h=this.h||b}}var f=this.a;c=f.V();Og(b.attributions,c.i);Pg(b,c);var g=b.viewHints[0],h=b.viewHints[1],k=f.i,l=f.j;if(!this.h&&!k&&g||!l&&h)return!0;var h=b.extent,k=b.viewState,g=k.projection,m=k.resolution,n=b.pixelRatio,k=f.f,q=f.a,l=f.get("renderOrder");
+void 0===l&&(l=tj);h=Lb(h,q*m);if(!this.h&&this.B==m&&this.K==k&&this.w==l&&Nb(this.u,h))return!0;this.b&&b.postRenderFunctions.push(Pk(this.b,d));this.h=!1;var r=new Ok(.5*m/n,h,f.a);Zj(c,h,m,g);if(l){var u=[];Xj(c,h,function(b){u.push(b)},this);u.sort(l);u.forEach(e,this)}else Xj(c,h,e,this);Qk(r,d);this.B=m;this.K=k;this.w=l;this.u=h;this.b=r;return!0};function hl(b,c){Zg.call(this,0,c);this.a=document.createElement("CANVAS");this.a.style.width="100%";this.a.style.height="100%";this.a.className="ol-unselectable";fe(b,this.a,0);this.s=this.u=0;this.H=rf();this.j=!0;this.c=xf(this.a,{antialias:!0,depth:!1,failIfMajorPerformanceCaveat:!0,preserveDrawingBuffer:!1,stencil:!0});this.g=new yk(this.a,this.c);Q(this.a,"webglcontextlost",this.ne,this);Q(this.a,"webglcontextrestored",this.oe,this);this.b=new ve;this.o=null;this.i=new dh(function(b){var c=
+b[1];b=b[2];var f=c[0]-this.o[0],c=c[1]-this.o[1];return 65536*Math.log(b)+Math.sqrt(f*f+c*c)/b}.bind(this),function(b){return b[0].getKey()});this.w=function(){if(0!==this.i.a.length){hh(this.i);var b=eh(this.i);fl(this,b[0],b[3],b[4])}return!1}.bind(this);this.l=0;il(this)}M(hl,Zg);
+function fl(b,c,d,e){var f=b.c,g=c.getKey();if(we(b.b,g))b=b.b.get(g),f.bindTexture(3553,b.ya),9729!=b.Cc&&(f.texParameteri(3553,10240,9729),b.Cc=9729),9729!=b.Dc&&(f.texParameteri(3553,10240,9729),b.Dc=9729);else{var h=f.createTexture();f.bindTexture(3553,h);if(0<e){var k=b.H.canvas,l=b.H;b.u!==d[0]||b.s!==d[1]?(k.width=d[0],k.height=d[1],b.u=d[0],b.s=d[1]):l.clearRect(0,0,d[0],d[1]);l.drawImage(c.T(),e,e,d[0],d[1],0,0,d[0],d[1]);f.texImage2D(3553,0,6408,6408,5121,k)}else f.texImage2D(3553,0,6408,
+6408,5121,c.T());f.texParameteri(3553,10240,9729);f.texParameteri(3553,10241,9729);f.texParameteri(3553,10242,33071);f.texParameteri(3553,10243,33071);b.b.set(g,{ya:h,Cc:9729,Dc:9729})}}p=hl.prototype;p.Jb=function(b){return b instanceof X?new el(this,b):b instanceof Y?new gl(this,b):null};function jl(b,c,d){var e=b.h;if(nb(e,c)){b=b.g;var f=d.viewState;S(e,new Fg(c,e,new Vk(b,f.center,f.resolution,f.rotation,d.size,d.extent),d,null,b))}}
+p.J=function(){var b=this.c;b.isContextLost()||xe(this.b,function(c){c&&b.deleteTexture(c.ya)});jb(this.g);hl.X.J.call(this)};p.md=function(b,c){for(var d=this.c,e;1024<this.b.f-this.l;){if(e=this.b.a.Ia)d.deleteTexture(e.ya);else if(+this.b.a.Rb==c.index)break;else--this.l;this.b.pop()}};p.U=function(){return"webgl"};p.ne=function(b){b.preventDefault();this.b.clear();this.l=0;b=this.f;for(var c in b)b[c].s()};p.oe=function(){il(this);this.h.render()};
+function il(b){b=b.c;b.activeTexture(33984);b.blendFuncSeparate(770,771,1,771);b.disable(2884);b.disable(2929);b.disable(3089);b.disable(2960)}
+p.sb=function(b){var c=this.g,d=this.c;if(d.isContextLost())return!1;if(!b)return this.j&&(oe(this.a,!1),this.j=!1),!1;this.o=b.focus;this.b.set((-b.index).toString(),null);++this.l;jl(this,"precompose",b);var e=[],f=b.layerStatesArray;Na(f);var g=b.viewState.resolution,h,k,l,m;h=0;for(k=f.length;h<k;++h)m=f[h],Hg(m,g)&&"ready"==m.$b&&(l=bh(this,m.layer),l.Oc(b,m,c)&&e.push(m));f=b.size[0]*b.pixelRatio;g=b.size[1]*b.pixelRatio;if(this.a.width!=f||this.a.height!=g)this.a.width=f,this.a.height=g;d.bindFramebuffer(36160,
+null);d.clearColor(0,0,0,0);d.clear(16384);d.enable(3042);d.viewport(0,0,this.a.width,this.a.height);h=0;for(k=e.length;h<k;++h)m=e[h],l=bh(this,m.layer),l.Nc(b,m,c);this.j||(oe(this.a,!0),this.j=!0);$g(b);1024<this.b.f-this.l&&b.postRenderFunctions.push(this.md.bind(this));0!==this.i.a.length&&(b.postRenderFunctions.push(this.w),b.animate=!0);jl(this,"postcompose",b);ch(this,b);b.postRenderFunctions.push(ah)};
+p.Wb=function(b,c,d,e,f,g){var h;if(this.c.isContextLost())return!1;var k=c.viewState,l=c.layerStatesArray,m;for(m=l.length-1;0<=m;--m){h=l[m];var n=h.layer;if(Hg(h,k.resolution)&&f.call(g,n)&&(h=bh(this,n).fb(b,c,d,e)))return h}};p.Jc=function(b,c,d,e){var f=!1;if(this.c.isContextLost())return!1;var g=c.viewState,h=c.layerStatesArray,k;for(k=h.length-1;0<=k;--k){var l=h[k],m=l.layer;if(Hg(l,g.resolution)&&d.call(e,m)&&(f=bh(this,m).Ic(b,c)))return!0}return f};var kl=["canvas","webgl","dom"];
+function Z(b){T.call(this);var c=ll(b);this.Ja=void 0!==b.loadTilesWhileAnimating?b.loadTilesWhileAnimating:!1;this.wb=void 0!==b.loadTilesWhileInteracting?b.loadTilesWhileInteracting:!1;this.yb=void 0!==b.pixelRatio?b.pixelRatio:Df;this.xb=c.logos;this.pa=function(){this.h=void 0;this.Ce.call(this,Date.now())}.bind(this);this.Aa=zb();this.zb=zb();this.Ba=0;this.b=null;this.ea=Jb();this.u=this.G=null;this.a=document.createElement("DIV");this.a.className="ol-viewport"+(Gf?" ol-touch":"");this.a.style.position=
+"relative";this.a.style.overflow="hidden";this.a.style.width="100%";this.a.style.height="100%";this.a.style.msTouchAction="none";this.a.style.touchAction="none";this.o=document.createElement("DIV");this.o.className="ol-overlaycontainer";this.a.appendChild(this.o);this.j=document.createElement("DIV");this.j.className="ol-overlaycontainer-stopevent";b=["click","dblclick","mousedown","touchstart","mspointerdown",yg,"mousewheel","wheel"];for(var d=0,e=b.length;d<e;++d)Q(this.j,b[d],kb);this.a.appendChild(this.j);
+this.Y=new qg(this);for(var f in Bg)Q(this.Y,Bg[f],this.yc,this);this.S=c.keyboardEventTarget;this.i=null;Q(this.a,"wheel",this.Oa,this);Q(this.a,"mousewheel",this.Oa,this);this.s=c.controls;this.g=c.interactions;this.w=c.overlays;this.Tc={};this.D=new c.De(this.a,this);this.P=null;this.B=[];this.aa=[];this.na=new ih(this.vd.bind(this),this.Qd.bind(this));this.Ab={};Q(this,rb("layergroup"),this.Ad,this);Q(this,rb("view"),this.Rd,this);Q(this,rb("size"),this.Nd,this);Q(this,rb("target"),this.Pd,this);
+this.l(c.values);nd(this.s,function(b){b.setMap(this)},this);Q(this.s,"add",function(b){b.element.setMap(this)},this);Q(this.s,"remove",function(b){b.element.setMap(null)},this);nd(this.g,function(b){b.setMap(this)},this);Q(this.g,"add",function(b){b.element.setMap(this)},this);Q(this.g,"remove",function(b){b.element.setMap(null)},this);nd(this.w,this.gc,this);Q(this.w,"add",function(b){this.gc(b.element)},this);Q(this.w,"remove",function(b){var c=b.element.La();void 0!==c&&delete this.Tc[c.toString()];
+b.element.setMap(null)},this)}M(Z,T);p=Z.prototype;p.hd=function(b){this.s.push(b)};p.jd=function(b){this.g.push(b)};p.kd=function(b){ml(this).get("layers").push(b)};p.ld=function(b){this.w.push(b)};p.gc=function(b){var c=b.La();void 0!==c&&(this.Tc[c.toString()]=b);b.setMap(this)};p.fa=function(b){this.render();Array.prototype.push.apply(this.B,arguments)};
+p.J=function(){jb(this.Y);jb(this.D);gb(this.a,"wheel",this.Oa,this);gb(this.a,"mousewheel",this.Oa,this);void 0!==this.c&&(x.removeEventListener("resize",this.c,!1),this.c=void 0);this.h&&(x.cancelAnimationFrame(this.h),this.h=void 0);this.set("target",null);Z.X.J.call(this)};p.pd=function(b,c,d,e,f){if(this.b)return b=this.ta(b),this.D.Wb(b,this.b,c,void 0!==d?d:null,void 0!==e?e:cc,void 0!==f?f:null)};
+p.Td=function(b,c,d){if(!this.b)return!1;b=this.ta(b);return this.D.Jc(b,this.b,void 0!==c?c:cc,void 0!==d?d:null)};p.vc=function(b){var c=this.a.getBoundingClientRect();b=b.changedTouches?b.changedTouches[0]:b;return[b.clientX-c.left,b.clientY-c.top]};p.Tb=function(){return this.get("target")};p.Na=function(){var b=this.Tb();return void 0!==b?Zd(b):null};p.ta=function(b){var c=this.b;return c?(b=b.slice(),Kg(c.pixelToCoordinateMatrix,b,b)):null};function ml(b){return b.get("layergroup")}
+function Eh(b,c){var d=b.b;if(d){var e=c.slice(0,2);return Kg(d.coordinateToPixelMatrix,e,e)}return null}p.Pa=function(){return this.get("size")};p.O=function(){return this.get("view")};p.vd=function(b,c,d,e){var f=this.b;if(!(f&&c in f.wantedTiles&&f.wantedTiles[c][b.L.toString()]))return Infinity;b=d[0]-f.focus[0];d=d[1]-f.focus[1];return 65536*Math.log(e)+Math.sqrt(b*b+d*d)/e};p.Oa=function(b,c){var d=new og(c||b.type,this,b);this.yc(d)};
+p.yc=function(b){if(this.b){this.P=b.coordinate;b.frameState=this.b;var c=this.g.a,d;if(!1!==S(this,b))for(d=c.length-1;0<=d;d--){var e=c[d];if(e.get("active")&&!e.handleEvent(b))break}}};
+p.Md=function(){var b=this.b,c=this.na;if(0!==c.a.length){var d=16,e=d;if(b){var f=b.viewHints;f[0]&&(d=this.Ja?8:0,e=2);f[1]&&(d=this.wb?8:0,e=2)}if(c.h<d){hh(c);for(var f=0,g,h;c.h<d&&f<e&&0<c.a.length;)g=eh(c)[0],h=g.getKey(),0!==g.N()||h in c.g||(c.g[h]=!0,++c.h,++f,g.load())}}c=this.aa;d=0;for(e=c.length;d<e;++d)c[d](this,b);c.length=0};p.Nd=function(){this.render()};
+p.Pd=function(){var b;this.Tb()&&(b=this.Na());if(this.i){for(var c=0,d=this.i.length;c<d;++c)N(this.i[c]);this.i=null}b?(b.appendChild(this.a),b=this.S?this.S:b,this.i=[Q(b,"keydown",this.Oa,this),Q(b,"keypress",this.Oa,this)],this.c||(this.c=this.vb.bind(this),x.addEventListener("resize",this.c,!1))):(ge(this.a),void 0!==this.c&&(x.removeEventListener("resize",this.c,!1),this.c=void 0));this.vb()};p.Qd=function(){this.render()};p.Sd=function(){this.render()};
+p.Rd=function(){this.G&&(N(this.G),this.G=null);var b=this.O();b&&(this.G=Q(b,"propertychange",this.Sd,this));this.render()};p.Bd=function(){this.render()};p.Cd=function(){this.render()};p.Ad=function(){this.u&&(this.u.forEach(N),this.u=null);var b=ml(this);b&&(this.u=[Q(b,"propertychange",this.Cd,this),Q(b,"change",this.Bd,this)]);this.render()};p.render=function(){void 0===this.h&&(this.h=x.requestAnimationFrame(this.pa))};p.ze=function(b){return this.g.remove(b)};p.Ae=function(b){return ml(this).get("layers").remove(b)};
+p.Ce=function(b){var c,d,e,f=this.Pa(),g=this.O(),h=null;if(c=void 0!==f&&0<f[0]&&0<f[1]&&g)c=!!g.ia()&&void 0!==g.I();if(c){var h=g.g.slice(),k=ml(this).Lb(),l={};c=0;for(d=k.length;c<d;++c)l[I(k[c].layer)]=k[c];e=g.N();h={animate:!1,attributions:{},coordinateToPixelMatrix:this.Aa,extent:null,focus:this.P?this.P:e.center,index:this.Ba++,layerStates:l,layerStatesArray:k,logos:Wa({},this.xb),pixelRatio:this.yb,pixelToCoordinateMatrix:this.zb,postRenderFunctions:[],size:f,skippedFeatureUids:this.Ab,
+tileQueue:this.na,time:b,usedTiles:{},viewState:e,viewHints:h,wantedTiles:{}}}if(h){b=this.B;c=f=0;for(d=b.length;c<d;++c)g=b[c],g(this,h)&&(b[f++]=g);b.length=f;h.extent=Zb(e.center,e.resolution,e.rotation,h.size)}this.b=h;this.D.sb(h);h&&(h.animate&&this.render(),Array.prototype.push.apply(this.aa,h.postRenderFunctions),0!==this.B.length||h.viewHints[0]||h.viewHints[1]||Rb(h.extent,this.ea)||(S(this,new te("moveend",this,h)),Mb(h.extent,this.ea)));S(this,new te("postrender",this,h));c=e=this.Md;
+this&&(c=ma(e,this));!ga(x.setImmediate)||x.Window&&x.Window.prototype&&!W("Edge")&&x.Window.prototype.setImmediate==x.setImmediate?(lf||(lf=mf()),lf(c)):x.setImmediate(c)};
+p.vb=function(){var b=this.Na();if(b){var c=Yd(b),d=Gd&&b.currentStyle,e;if(e=d)Wd(c),e=!0;if(e&&"auto"!=d.width&&"auto"!=d.height&&!d.boxSizing)c=pe(b,d.width,"width","pixelWidth"),b=pe(b,d.height,"height","pixelHeight"),b=new Vd(c,b);else{d=new Vd(b.offsetWidth,b.offsetHeight);if(Gd){c=qe(b,"paddingLeft");e=qe(b,"paddingRight");var f=qe(b,"paddingTop"),g=qe(b,"paddingBottom"),c=new je(f,e,g,c)}else c=ke(b,"paddingLeft"),e=ke(b,"paddingRight"),f=ke(b,"paddingTop"),g=ke(b,"paddingBottom"),c=new je(parseFloat(f),
+parseFloat(e),parseFloat(g),parseFloat(c));!Gd||9<=Number(Sd)?(e=ke(b,"borderLeftWidth"),f=ke(b,"borderRightWidth"),g=ke(b,"borderTopWidth"),b=ke(b,"borderBottomWidth"),b=new je(parseFloat(g),parseFloat(f),parseFloat(b),parseFloat(e))):(e=se(b,"borderLeft"),f=se(b,"borderRight"),g=se(b,"borderTop"),b=se(b,"borderBottom"),b=new je(g,f,b,e));b=new Vd(d.width-b.left-c.left-c.right-b.right,d.height-b.top-c.top-c.bottom-b.bottom)}this.set("size",[b.width,b.height])}else this.set("size",void 0)};
+function ll(b){var c=null;void 0!==b.keyboardEventTarget&&(c="string"===typeof b.keyboardEventTarget?document.getElementById(b.keyboardEventTarget):b.keyboardEventTarget);var d={},e={};if(void 0===b.logo||"boolean"===typeof b.logo&&b.logo)e["data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAMAAABEpIrGAAAAA3NCSVQICAjb4U/gAAAACXBIWXMAAAHGAAABxgEXwfpGAAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAAhNQTFRF////AP//AICAgP//AFVVQECA////K1VVSbbbYL/fJ05idsTYJFtbbcjbJllmZszWWMTOIFhoHlNiZszTa9DdUcHNHlNlV8XRIVdiasrUHlZjIVZjaMnVH1RlIFRkH1RkH1ZlasvYasvXVsPQH1VkacnVa8vWIVZjIFRjVMPQa8rXIVVkXsXRsNveIFVkIFZlIVVj3eDeh6GmbMvXH1ZkIFRka8rWbMvXIFVkIFVjIFVkbMvWH1VjbMvWIFVlbcvWIFVla8vVIFVkbMvWbMvVH1VkbMvWIFVlbcvWIFVkbcvVbMvWjNPbIFVkU8LPwMzNIFVkbczWIFVkbsvWbMvXIFVkRnB8bcvW2+TkW8XRIFVkIlZlJVloJlpoKlxrLl9tMmJwOWd0Omh1RXF8TneCT3iDUHiDU8LPVMLPVcLPVcPQVsPPVsPQV8PQWMTQWsTQW8TQXMXSXsXRX4SNX8bSYMfTYcfTYsfTY8jUZcfSZsnUaIqTacrVasrVa8jTa8rWbI2VbMvWbcvWdJObdcvUdszUd8vVeJaee87Yfc3WgJyjhqGnitDYjaarldPZnrK2oNbborW5o9bbo9fbpLa6q9ndrL3ArtndscDDutzfu8fJwN7gwt7gxc/QyuHhy+HizeHi0NfX0+Pj19zb1+Tj2uXk29/e3uLg3+Lh3+bl4uXj4ufl4+fl5Ofl5ufl5ujm5+jmySDnBAAAAFp0Uk5TAAECAgMEBAYHCA0NDg4UGRogIiMmKSssLzU7PkJJT1JTVFliY2hrdHZ3foSFhYeJjY2QkpugqbG1tre5w8zQ09XY3uXn6+zx8vT09vf4+Pj5+fr6/P39/f3+gz7SsAAAAVVJREFUOMtjYKA7EBDnwCPLrObS1BRiLoJLnte6CQy8FLHLCzs2QUG4FjZ5GbcmBDDjxJBXDWxCBrb8aM4zbkIDzpLYnAcE9VXlJSWlZRU13koIeW57mGx5XjoMZEUqwxWYQaQbSzLSkYGfKFSe0QMsX5WbjgY0YS4MBplemI4BdGBW+DQ11eZiymfqQuXZIjqwyadPNoSZ4L+0FVM6e+oGI6g8a9iKNT3o8kVzNkzRg5lgl7p4wyRUL9Yt2jAxVh6mQCogae6GmflI8p0r13VFWTHBQ0rWPW7ahgWVcPm+9cuLoyy4kCJDzCm6d8PSFoh0zvQNC5OjDJhQopPPJqph1doJBUD5tnkbZiUEqaCnB3bTqLTFG1bPn71kw4b+GFdpLElKIzRxxgYgWNYc5SCENVHKeUaltHdXx0dZ8uBI1hJ2UUDgq82CM2MwKeibqAvSO7MCABq0wXEPiqWEAAAAAElFTkSuQmCC"]=
+"http://openlayers.org/";else{var f=b.logo;"string"===typeof f?e[f]="":ha(f)&&(e[f.src]=f.href)}f=b.layers instanceof gi?b.layers:new gi({layers:b.layers});d.layergroup=f;d.target=b.target;d.view=void 0!==b.view?b.view:new V;var f=Zg,g;void 0!==b.renderer?Array.isArray(b.renderer)?g=b.renderer:"string"===typeof b.renderer&&(g=[b.renderer]):g=kl;var h,k;h=0;for(k=g.length;h<k;++h){var l=g[h];if("canvas"==l){if(Ff){f=ik;break}}else if("dom"==l){f=pk;break}else if("webgl"==l&&yf){f=hl;break}}var m;void 0!==
+b.controls?m=Array.isArray(b.controls)?new ld(b.controls.slice()):b.controls:m=ef();if(void 0!==b.interactions)g=Array.isArray(b.interactions)?new ld(b.interactions.slice()):b.interactions;else{g={};h=new ld;k=new jh;(void 0!==g.altShiftDragRotate?g.altShiftDragRotate:1)&&h.push(new Fh);(void 0!==g.doubleClickZoom?g.doubleClickZoom:1)&&h.push(new ph({delta:g.zoomDelta,duration:g.zoomDuration}));(void 0!==g.dragPan?g.dragPan:1)&&h.push(new Ah({kinetic:k}));(void 0!==g.pinchRotate?g.pinchRotate:1)&&
+h.push(new Zh);(void 0!==g.pinchZoom?g.pinchZoom:1)&&h.push(new ci({duration:g.zoomDuration}));if(void 0!==g.keyboard?g.keyboard:1)h.push(new Th),h.push(new Vh({delta:g.zoomDelta,duration:g.zoomDuration}));(void 0!==g.mouseWheelZoom?g.mouseWheelZoom:1)&&h.push(new Xh({duration:g.zoomDuration}));(void 0!==g.shiftDragZoom?g.shiftDragZoom:1)&&h.push(new Sh({duration:g.zoomDuration}));g=h}b=void 0!==b.overlays?Array.isArray(b.overlays)?new ld(b.overlays.slice()):b.overlays:new ld;return{controls:m,interactions:g,
+keyboardEventTarget:c,logos:e,overlays:b,De:f,values:d}}mc(li);mc(si);si.forEach(function(b){li.forEach(function(c){nc(b,c,mi);nc(c,b,ni)})});function nl(b){T.call(this);this.j=b.id;this.i=void 0!==b.insertFirst?b.insertFirst:!0;this.o=void 0!==b.stopEvent?b.stopEvent:!0;this.b=document.createElement("DIV");this.b.className="ol-overlay-container";this.b.style.position="absolute";this.autoPan=void 0!==b.autoPan?b.autoPan:!1;this.g=void 0!==b.autoPanAnimation?b.autoPanAnimation:{};this.h=void 0!==b.autoPanMargin?b.autoPanMargin:20;this.a={hb:"",pb:"",tb:"",ub:"",visible:!0};this.c=null;Q(this,rb("element"),this.yd,this);Q(this,rb("map"),
+this.Hd,this);Q(this,rb("offset"),this.Id,this);Q(this,rb("position"),this.Kd,this);Q(this,rb("positioning"),this.Ld,this);void 0!==b.element&&this.set("element",b.element);this.set("offset",void 0!==b.offset?b.offset:[0,0]);this.set("positioning",void 0!==b.positioning?b.positioning:"top-left");void 0!==b.position&&this.Ec(b.position)}M(nl,T);p=nl.prototype;p.La=function(){return this.j};p.yd=function(){ee(this.b);var b=this.get("element");b&&this.b.appendChild(b)};
+p.Hd=function(){this.c&&(ge(this.b),N(this.c),this.c=null);var b=this.get("map");b&&(this.c=Q(b,"postrender",this.render,this),pl(this),b=this.o?b.j:b.o,this.i?fe(b,this.b,0):b.appendChild(this.b))};p.render=function(){pl(this)};p.Id=function(){pl(this)};
+p.Kd=function(){pl(this);if(void 0!==this.get("position")&&this.autoPan){var b=this.get("map");if(void 0!==b&&b.Na()){var c=ql(b.Na(),b.Pa()),d=this.get("element"),e=d.offsetWidth,f=d.currentStyle||x.getComputedStyle(d),e=e+(parseInt(f.marginLeft,10)+parseInt(f.marginRight,10)),f=d.offsetHeight,g=d.currentStyle||x.getComputedStyle(d),f=f+(parseInt(g.marginTop,10)+parseInt(g.marginBottom,10)),h=ql(d,[e,f]),d=this.h;Nb(c,h)||(e=h[0]-c[0],f=c[2]-h[2],g=h[1]-c[1],h=c[3]-h[3],c=[0,0],0>e?c[0]=e-d:0>f&&
+(c[0]=Math.abs(f)+d),0>g?c[1]=g-d:0>h&&(c[1]=Math.abs(h)+d),0===c[0]&&0===c[1])||(d=b.O().ia(),e=Eh(b,d),c=[e[0]+c[0],e[1]+c[1]],this.g&&(this.g.source=d,b.fa(cd(this.g))),b.O().oa(b.ta(c)))}}};p.Ld=function(){pl(this)};p.setMap=function(b){this.set("map",b)};p.Ec=function(b){this.set("position",b)};
+function ql(b,c){var d=Yd(b),e=new Ud(0,0),f;f=d?Yd(d):document;var g;(g=!Gd||9<=Number(Sd))||(Wd(f),g=!0);b!=(g?f.documentElement:f.body)&&(f=le(b),g=Wd(d).a,d=g.scrollingElement?g.scrollingElement:Jd?g.body||g.documentElement:g.documentElement,g=g.parentWindow||g.defaultView,d=Gd&&Qd("10")&&g.pageYOffset!=d.scrollTop?new Ud(d.scrollLeft,d.scrollTop):new Ud(g.pageXOffset||d.scrollLeft,g.pageYOffset||d.scrollTop),e.x=f.left+d.x,e.y=f.top+d.y);return[e.x,e.y,e.x+c[0],e.y+c[1]]}
+function rl(b,c){b.a.visible!==c&&(oe(b.b,c),b.a.visible=c)}
+function pl(b){var c=b.get("map"),d=b.get("position");if(void 0!==c&&c.b&&void 0!==d){var d=Eh(c,d),e=c.Pa(),c=b.b.style,f=b.get("offset"),g=b.get("positioning"),h=f[0],f=f[1];if("bottom-right"==g||"center-right"==g||"top-right"==g)""!==b.a.pb&&(b.a.pb=c.left=""),h=Math.round(e[0]-d[0]-h)+"px",b.a.tb!=h&&(b.a.tb=c.right=h);else{""!==b.a.tb&&(b.a.tb=c.right="");if("bottom-center"==g||"center-center"==g||"top-center"==g)h-=me(b.b).width/2;h=Math.round(d[0]+h)+"px";b.a.pb!=h&&(b.a.pb=c.left=h)}if("bottom-left"==
+g||"bottom-center"==g||"bottom-right"==g)""!==b.a.ub&&(b.a.ub=c.top=""),d=Math.round(e[1]-d[1]-f)+"px",b.a.hb!=d&&(b.a.hb=c.bottom=d);else{""!==b.a.hb&&(b.a.hb=c.bottom="");if("center-left"==g||"center-center"==g||"center-right"==g)f-=me(b.b).height/2;d=Math.round(d[1]+f)+"px";b.a.ub!=d&&(b.a.ub=c.top=d)}rl(b,!0)}else rl(b,!1)};function sl(){this.defaultDataProjection=null}function tl(b,c,d){var e;d&&(e={dataProjection:d.dataProjection?d.dataProjection:b.f(Ij(c)),featureProjection:d.featureProjection});var f;e&&(f={featureProjection:e.featureProjection,dataProjection:e.dataProjection?e.dataProjection:b.defaultDataProjection,rightHanded:e.rightHanded},e.decimals&&(f.decimals=e.decimals));return f}
+function ul(b,c){var d=c?lc(c.featureProjection):null,e=c?lc(c.dataProjection):null;if(d&&e&&!wc(d,e))if(b instanceof zc)d=b.o(e,d);else{e=xc(e,d);d=[b[0],b[1],b[0],b[3],b[2],b[1],b[2],b[3]];e(d,d,2);var f=[d[0],d[2],d[4],d[6]],g=[d[1],d[3],d[5],d[7]],d=Math.min.apply(null,f),e=Math.min.apply(null,g),f=Math.max.apply(null,f),g=Math.max.apply(null,g),d=Ob(d,e,f,g,void 0)}else d=b;return d};function vl(){this.defaultDataProjection=null}M(vl,sl);function Ij(b){return ha(b)?b:"string"===typeof b?(b=JSON.parse(b))?b:null:null}vl.prototype.U=function(){return"json"};vl.prototype.g=function(b,c){return this.a(Ij(b),tl(this,b,c))};vl.prototype.b=function(b,c){return this.h(Ij(b),tl(this,b,c))};function wl(b,c,d,e,f){var g=NaN,h=NaN,k=(d-c)/e;if(0!==k)if(1==k)g=b[c],h=b[c+1];else if(2==k)g=.5*b[c]+.5*b[c+e],h=.5*b[c+1]+.5*b[c+e+1];else{var h=b[c],k=b[c+1],l=0,g=[0],m;for(m=c+e;m<d;m+=e){var n=b[m],q=b[m+1],l=l+Math.sqrt((n-h)*(n-h)+(q-k)*(q-k));g.push(l);h=n;k=q}d=.5*l;l=0;m=g.length;for(n=!1;l<m;)h=l+(m-l>>1),k=+Ha(g[h],d),0>k?l=h+1:(m=h,n=!k);h=n?l:~l;0>h?(d=(d-g[-h-2])/(g[-h-1]-g[-h-2]),c+=(-h-2)*e,g=b[c],g=g+d*(b[c+e]-g),h=b[c+1],h=h+d*(b[c+e+1]-h)):(g=b[c+h*e],h=b[c+h*e+1])}return f?
+(f[0]=g,f[1]=h,f):[g,h]};function xl(b,c){Bc.call(this);this.c=null;this.j=-1;this.W(b,c)}M(xl,Bc);p=xl.prototype;p.clone=function(){var b=new xl(null);U(b,this.g,this.a.slice());b.v();return b};p.ra=function(){return Hc(this.a,0,this.a.length,this.b)};function Ti(b){if(b.j!=b.f){var c;c=wl(b.a,0,b.a.length,b.b,b.c);b.c=c;b.j=b.f}return b.c}p.Ma=function(b){var c=[];c.length=Jc(this.a,0,this.a.length,this.b,b,c,0);b=new xl(null);U(b,"XY",c);b.v();return b};p.U=function(){return"LineString"};
+p.W=function(b,c){b?(Dc(this,c,b,1),this.a||(this.a=[]),this.a.length=Fc(this.a,0,b,this.b)):U(this,"XY",null);this.v()};function yl(b,c){Bc.call(this);this.c=[];this.W(b,c)}M(yl,Bc);p=yl.prototype;p.clone=function(){var b=new yl(null),c=this.c.slice();U(b,this.g,this.a.slice());b.c=c;b.v();return b};p.ra=function(){return Ic(this.a,0,this.c,this.b)};p.ab=function(){return this.c};function Ui(b){var c=[],d=b.a,e=0,f=b.c;b=b.b;var g,h;g=0;for(h=f.length;g<h;++g){var k=f[g],e=wl(d,e,k,b);Ka(c,e);e=k}return c}
+p.Ma=function(b){var c=[],d=[],e=this.a,f=this.c,g=this.b,h=0,k=0,l,m;l=0;for(m=f.length;l<m;++l){var n=f[l],k=Jc(e,h,n,g,b,c,k);d.push(k);h=n}c.length=k;b=new yl(null);U(b,"XY",c);b.c=d;b.v();return b};p.U=function(){return"MultiLineString"};p.W=function(b,c){if(b){Dc(this,c,b,2);this.a||(this.a=[]);var d=Gc(this.a,0,b,this.b,this.c);this.a.length=0===d.length?0:d[d.length-1]}else d=this.c,U(this,"XY",null),this.c=d;this.v()};function zl(b,c){Bc.call(this);this.W(b,c)}M(zl,Bc);zl.prototype.clone=function(){var b=new zl(null);U(b,this.g,this.a.slice());b.v();return b};zl.prototype.ra=function(){return Hc(this.a,0,this.a.length,this.b)};zl.prototype.U=function(){return"MultiPoint"};zl.prototype.W=function(b,c){b?(Dc(this,c,b,1),this.a||(this.a=[]),this.a.length=Fc(this.a,0,b,this.b)):U(this,"XY",null);this.v()};function Al(b,c){Bc.call(this);this.c=[];this.B=-1;this.D=null;this.G=-1;this.j=null;this.W(b,c)}M(Al,Bc);p=Al.prototype;p.clone=function(){for(var b=new Al(null),c=this.c.length,d=Array(c),e=0;e<c;++e)d[e]=this.c[e].slice();U(b,this.g,this.a.slice());b.c=d;b.v();return b};p.ra=function(b){var c;void 0!==b?(c=Vi(this).slice(),Sc(c,this.c,this.b,b)):c=this.a;b=c;c=this.c;var d=this.b,e=0,f=[],g=0,h,k;h=0;for(k=c.length;h<k;++h){var l=c[h];f[g++]=Ic(b,e,l,d,f[g]);e=l[l.length-1]}f.length=g;return f};
+function Wi(b){if(b.B!=b.f){var c=b.a,d=b.c,e=b.b,f=0,g=[],h,k,l=Jb();h=0;for(k=d.length;h<k;++h){var m=d[h],l=c,n=m[0],q=e,r=Pb(void 0),l=Tb(r,l,f,n,q);g.push((l[0]+l[2])/2,(l[1]+l[3])/2);f=m[m.length-1]}c=Vi(b);d=b.c;e=b.b;h=0;k=[];m=0;for(l=d.length;m<l;++m)f=d[m],k=Oc(c,h,f,e,g,2*m,k),h=f[f.length-1];b.D=k;b.B=b.f}return b.D}
+function Vi(b){if(b.G!=b.f){var c=b.a,d;a:{d=b.c;var e,f;e=0;for(f=d.length;e<f;++e)if(!Qc(c,d[e],b.b,void 0)){d=!1;break a}d=!0}d?b.j=c:(b.j=c.slice(),b.j.length=Sc(b.j,b.c,b.b));b.G=b.f}return b.j}p.Ma=function(b){var c=[],d=[],e=this.a,f=this.c,g=this.b;b=Math.sqrt(b);var h=0,k=0,l,m;l=0;for(m=f.length;l<m;++l){var n=f[l],q=[],k=Kc(e,h,n,g,b,c,k,q);d.push(q);h=n[n.length-1]}c.length=k;e=new Al(null);U(e,"XY",c);e.c=d;e.v();return e};p.U=function(){return"MultiPolygon"};
+p.W=function(b,c){if(b){Dc(this,c,b,3);this.a||(this.a=[]);var d=this.a,e=this.b,f=this.c,g=0,f=f?f:[],h=0,k,l;k=0;for(l=b.length;k<l;++k)g=Gc(d,g,b[k],e,f[h]),f[h++]=g,g=g[g.length-1];f.length=h;0===f.length?this.a.length=0:(d=f[f.length-1],this.a.length=0===d.length?0:d[d.length-1])}else d=this.c,U(this,"XY",null),this.c=d;this.v()};function Bl(b){b=b?b:{};this.defaultDataProjection=null;this.c=b.geometryName}M(Bl,vl);function Cl(b){var c="XY";!0===b.hasZ&&!0===b.hasM?c="XYZM":!0===b.hasZ?c="XYZ":!0===b.hasM&&(c="XYM");return c}
+var Dl={Point:function(b){return void 0!==b.m&&void 0!==b.z?new Mc([b.x,b.y,b.z,b.m],"XYZM"):void 0!==b.z?new Mc([b.x,b.y,b.z],"XYZ"):void 0!==b.m?new Mc([b.x,b.y,b.m],"XYM"):new Mc([b.x,b.y])},LineString:function(b){return new xl(b.paths[0],Cl(b))},Polygon:function(b){return new Tc(b.rings,Cl(b))},MultiPoint:function(b){return new zl(b.points,Cl(b))},MultiLineString:function(b){return new yl(b.paths,Cl(b))},MultiPolygon:function(b){return new Al(b.rings,Cl(b))}};
+Bl.prototype.a=function(b,c){var d;if(d=b.geometry){var e;if(ea(d.x)&&ea(d.y))e="Point";else if(d.points)e="MultiPoint";else if(d.paths)e=1===d.paths.length?"LineString":"MultiLineString";else if(d.rings){var f=d.rings,g=Cl(d),h=[];e=[];var k,l;k=0;for(l=f.length;k<l;++k){var m=Ja(f[k]);Pc(m,0,m.length,g.length)?h.push([f[k]]):e.push(f[k])}for(;e.length;){f=e.shift();g=!1;for(k=h.length-1;0<=k;k--)if(Nb((new Lc(h[k][0])).C(),(new Lc(f)).C())){h[k].push(f);g=!0;break}g||h.push([f.reverse()])}d=Wa({},
+d);1===h.length?(e="Polygon",d.rings=h[0]):(e="MultiPolygon",d.rings=h)}d=ul((0,Dl[e])(d),c)}else d=null;h=new Dj;this.c&&Fj(h,this.c);Ej(h,d);c&&c.Qb&&b.attributes[c.Qb]&&(h.g=b.attributes[c.Qb],h.v());b.attributes&&h.l(b.attributes);return h};Bl.prototype.h=function(b,c){var d=c?c:{};if(b.features){var e=[],f=b.features,g,h;d.Qb=b.objectIdFieldName;g=0;for(h=f.length;g<h;++g)e.push(this.a(f[g],d));return e}return[this.a(b,d)]};
+Bl.prototype.f=function(b){return b.spatialReference&&b.spatialReference.wkid?lc("EPSG:"+b.spatialReference.wkid):null};function El(b){zc.call(this);this.a=b?b:null;Fl(this)}M(El,zc);function Gl(b){var c,d;if(b.a)for(c=0,d=b.a.length;c<d;++c)gb(b.a[c],"change",b.v,b)}function Fl(b){var c,d;if(b.a)for(c=0,d=b.a.length;c<d;++c)Q(b.a[c],"change",b.v,b)}p=El.prototype;p.clone=function(){var b=new El(null),c=this.a,d=[],e,f;e=0;for(f=c.length;e<f;++e)d.push(c[e].clone());Gl(b);b.a=d;Fl(b);b.v();return b};p.ib=function(b){Pb(b);for(var c=this.a,d=0,e=c.length;d<e;++d)Sb(b,c[d].C());return b};
+p.Ob=function(b){this.s!=this.f&&(Ya(this.h),this.i=0,this.s=this.f);if(0>b||0!==this.i&&b<this.i)return this;var c=b.toString();if(this.h.hasOwnProperty(c))return this.h[c];var d=[],e=this.a,f=!1,g,h;g=0;for(h=e.length;g<h;++g){var k=e[g],l=k.Ob(b);d.push(l);l!==k&&(f=!0)}if(f)return b=new El(null),Gl(b),b.a=d,Fl(b),b.v(),this.h[c]=b;this.i=b;return this};p.U=function(){return"GeometryCollection"};p.rotate=function(b,c){for(var d=this.a,e=0,f=d.length;e<f;++e)d[e].rotate(b,c);this.v()};
+p.Eb=function(b){var c=this.a,d,e;d=0;for(e=c.length;d<e;++d)c[d].Eb(b);this.v()};p.J=function(){Gl(this);El.X.J.call(this)};function Hl(b){b=b?b:{};this.defaultDataProjection=null;this.defaultDataProjection=lc(b.defaultDataProjection?b.defaultDataProjection:"EPSG:4326");this.c=b.geometryName}M(Hl,vl);function Il(b,c){return b?ul((0,Jl[b.type])(b),c):null}
+var Jl={Point:function(b){return new Mc(b.coordinates)},LineString:function(b){return new xl(b.coordinates)},Polygon:function(b){return new Tc(b.coordinates)},MultiPoint:function(b){return new zl(b.coordinates)},MultiLineString:function(b){return new yl(b.coordinates)},MultiPolygon:function(b){return new Al(b.coordinates)},GeometryCollection:function(b,c){var d=b.geometries.map(function(b){return Il(b,c)});return new El(d)}};
+Hl.prototype.a=function(b,c){var d=Il(b.geometry,c),e=new Dj;this.c&&Fj(e,this.c);Ej(e,d);void 0!==b.id&&(e.g=b.id,e.v());b.properties&&e.l(b.properties);return e};Hl.prototype.h=function(b,c){if("Feature"==b.type)return[this.a(b,c)];if("FeatureCollection"==b.type){var d=[],e=b.features,f,g;f=0;for(g=e.length;f<g;++f)d.push(this.a(e[f],c));return d}return[]};Hl.prototype.f=function(b){return(b=b.crs)?"name"==b.type?lc(b.properties.name):"EPSG"==b.type?lc("EPSG:"+b.properties.code):null:this.defaultDataProjection};function Kl(b,c,d){if("array"==ba(c))for(var e=0;e<c.length;e++)Kl(b,String(c[e]),d);else null!=c&&d.push("&",b,""===c?"":"=",encodeURIComponent(String(c)))};function Ll(b,c,d){Bc.call(this);Ml(this,b,c?c:0,d)}M(Ll,Bc);Ll.prototype.clone=function(){var b=new Ll(null);U(b,this.g,this.a.slice());b.v();return b};Ll.prototype.ib=function(b){var c=this.a,d=c[this.b]-c[0];return Ob(c[0]-d,c[1]-d,c[0]+d,c[1]+d,b)};Ll.prototype.U=function(){return"Circle"};function Ml(b,c,d,e){if(c){Dc(b,e,c,0);b.a||(b.a=[]);e=b.a;c=Ec(e,c);e[c++]=e[0]+d;var f;d=1;for(f=b.b;d<f;++d)e[c++]=e[d];e.length=c}else U(b,"XY",null);b.v()};function Nl(b,c,d,e,f){Be.call(this,b,c);this.g=d;this.b=new Image;null!==e&&(this.b.crossOrigin=e);this.f={};this.c=null;this.h=f}M(Nl,Be);p=Nl.prototype;p.J=function(){1==this.state&&Ol(this);this.a&&jb(this.a);this.state=5;Ce(this);Nl.X.J.call(this)};p.T=function(b){if(void 0!==b){var c=I(b);if(c in this.f)return this.f[c];b=$a(this.f)?this.b:this.b.cloneNode(!1);return this.f[c]=b}return this.b};p.getKey=function(){return this.g};p.ie=function(){this.state=3;Ol(this);Ce(this)};
+p.je=function(){this.state=this.b.naturalWidth&&this.b.naturalHeight?2:4;Ol(this);Ce(this)};p.load=function(){0==this.state&&(this.state=1,Ce(this),this.c=[Q(this.b,"error",this.ie,this,!0),Q(this.b,"load",this.je,this,!0)],this.h(this,this.g))};function Ol(b){b.c.forEach(N);b.c=null};function Pl(b,c){R.call(this,b);this.feature=c}M(Pl,R);
+function Ql(b){xh.call(this,{handleDownEvent:Rl,handleEvent:Sl,handleUpEvent:Tl});this.P=null;this.o=!1;this.Ba=b.source?b.source:null;this.pa=b.features?b.features:null;this.Zc=b.snapTolerance?b.snapTolerance:12;this.D=b.type;this.b=Ul(this.D);this.na=b.minPoints?b.minPoints:this.b===Vl?3:2;this.ea=b.maxPoints?b.maxPoints:Infinity;var c=b.geometryFunction;if(!c)if("Circle"===this.D)c=function(b,c){var d=c?c:new Ll([NaN,NaN]),h=b[0],k=b[1],l=h[0]-k[0],h=h[1]-k[1];Ml(d,b[0],Math.sqrt(l*l+h*h));return d};
+else{var d,c=this.b;c===Xl?d=Mc:c===Yl?d=xl:c===Vl&&(d=Tc);c=function(b,c){var g=c;g?g.W(b):g=new d(b);return g}}this.u=c;this.B=this.i=this.a=this.j=this.g=this.h=null;this.gd=b.clickTolerance?b.clickTolerance*b.clickTolerance:36;this.Y=new Y({source:new Rj({useSpatialIndex:!1,wrapX:b.wrapX?b.wrapX:!1}),style:b.style?b.style:Zl()});this.Aa=b.geometryName;this.Ab=b.condition?b.condition:th;this.aa=b.freehandCondition?b.freehandCondition:uh;Q(this,rb("active"),this.Ja,this)}M(Ql,xh);
+function Zl(){var b=Li();return function(c){return b[c.M().U()]}}Ql.prototype.setMap=function(b){Ql.X.setMap.call(this,b);this.Ja()};function Sl(b){this.b!==Yl&&this.b!==Vl||!this.aa(b)||(this.o=!0);var c=!this.o;this.o&&b.type===Ag?($l(this,b),c=!1):b.type===zg?c=am(this,b):b.type===tg&&(c=!1);return yh.call(this,b)&&c}function Rl(b){return this.Ab(b)?(this.P=b.pixel,!0):this.o?(this.P=b.pixel,this.h||bm(this,b),!0):!1}
+function Tl(b){this.o=!1;var c=this.P,d=b.pixel,e=c[0]-d[0],c=c[1]-d[1],d=!0;e*e+c*c<=this.gd&&(am(this,b),this.h?this.b===cm?dm(this):em(this,b)?dm(this):$l(this,b):(bm(this,b),this.b===Xl&&dm(this)),d=!1);return d}
+function am(b,c){if(b.h){var d=c.coordinate,e=b.g.M(),f;b.b===Xl?f=b.a:b.b===Vl?(f=b.a[0],f=f[f.length-1],em(b,c)&&(d=b.h.slice())):(f=b.a,f=f[f.length-1]);f[0]=d[0];f[1]=d[1];b.u(b.a,e);b.j&&b.j.M().W(d);e instanceof Tc&&b.b!==Vl?(b.i||(b.i=new Dj(new xl(null))),0>=e.c.length?e=null:(d=new Lc(null),U(d,e.g,e.a.slice(0,e.c[0])),d.v(),e=d),d=b.i.M(),U(d,e.g,e.a),d.v()):b.B&&(d=b.i.M(),d.W(b.B));fm(b)}else e=c.coordinate.slice(),b.j?b.j.M().W(e):(b.j=new Dj(new Mc(e)),fm(b));return!0}
+function em(b,c){var d=!1;if(b.g){var e=!1,f=[b.h];b.b===Yl?e=b.a.length>b.na:b.b===Vl&&(e=b.a[0].length>b.na,f=[b.a[0][0],b.a[0][b.a[0].length-2]]);if(e)for(var e=c.map,g=0,h=f.length;g<h;g++){var k=f[g],l=Eh(e,k),m=c.pixel,d=m[0]-l[0],l=m[1]-l[1],m=b.o&&b.aa(c)?1:b.Zc;if(d=Math.sqrt(d*d+l*l)<=m){b.h=k;break}}}return d}
+function bm(b,c){var d=c.coordinate;b.h=d;b.b===Xl?b.a=d.slice():b.b===Vl?(b.a=[[d.slice(),d.slice()]],b.B=b.a[0]):(b.a=[d.slice(),d.slice()],b.b===cm&&(b.B=b.a));b.B&&(b.i=new Dj(new xl(b.B)));d=b.u(b.a);b.g=new Dj;b.Aa&&Fj(b.g,b.Aa);Ej(b.g,d);fm(b);S(b,new Pl("drawstart",b.g))}
+function $l(b,c){var d=c.coordinate,e=b.g.M(),f,g;if(b.b===Yl)b.h=d.slice(),g=b.a,g.push(d.slice()),f=g.length>b.ea,b.u(g,e);else if(b.b===Vl){g=b.a[0];g.push(d.slice());if(f=g.length>b.ea)b.h=g[0];b.u(b.a,e)}fm(b);f&&dm(b)}
+function dm(b){var c=gm(b),d=b.a,e=c.M();b.b===Yl?(d.pop(),b.u(d,e)):b.b===Vl&&(d[0].pop(),d[0].push(d[0][0]),b.u(d,e));"MultiPoint"===b.D?Ej(c,new zl([d])):"MultiLineString"===b.D?Ej(c,new yl([d])):"MultiPolygon"===b.D&&Ej(c,new Al([d]));S(b,new Pl("drawend",c));b.pa&&b.pa.push(c);b.Ba&&b.Ba.Cb(c)}function gm(b){b.h=null;var c=b.g;c&&(b.g=null,b.j=null,b.i=null,b.Y.V().clear(!0));return c}Ql.prototype.w=dc;
+function fm(b){var c=[];b.g&&c.push(b.g);b.i&&c.push(b.i);b.j&&c.push(b.j);b=b.Y.V();b.clear(!0);b.Db(c)}Ql.prototype.Ja=function(){var b=this.S,c=this.get("active");b&&c||gm(this);this.Y.setMap(c?b:null)};function Ul(b){var c;"Point"===b||"MultiPoint"===b?c=Xl:"LineString"===b||"MultiLineString"===b?c=Yl:"Polygon"===b||"MultiPolygon"===b?c=Vl:"Circle"===b&&(c=cm);return c}var Xl="Point",Yl="LineString",Vl="Polygon",cm="Circle";function hm(b,c,d,e,f,g,h,k,l,m,n){Be.call(this,f,0);this.u=void 0!==n?n:!1;this.s=h;this.o=k;this.c=null;this.f={};this.g=c;this.l=e;this.i=g?g:f;this.b=[];this.Sa=null;this.h=0;g=Je(e,this.i);k=this.l.C();f=this.g.C();g=k?$b(g,k):g;if(0===Ub(g))this.state=4;else if((k=b.C())&&(f?f=$b(f,k):f=k),k=e.I(this.i[0]),n=Yb(g),e=xc(d,b)(n,void 0,n.length),k=d.getPointResolution(k,n),n=pc(d),void 0!==n&&(k*=n),n=pc(b),void 0!==n&&(k/=n),e=b.getPointResolution(k,e)/k,isFinite(e)&&0<e&&(k/=e),e=k,!isFinite(e)||
+0>=e)this.state=4;else if(this.j=new Aj(b,d,g,f,e*(void 0!==m?m:.5)),0===this.j.c.length)this.state=4;else if(this.h=Qe(c,e),d=Cj(this.j),f&&(b.a?(d[1]=Ca(d[1],f[1],f[3]),d[3]=Ca(d[3],f[1],f[3])):d=$b(d,f)),Ub(d))if(b=Ke(c,d,this.h),100>b.ha()*(b.c-b.b+1)){for(c=b.a;c<=b.f;c++)for(d=b.b;d<=b.c;d++)(m=l(this.h,c,d,h))&&this.b.push(m);0===this.b.length&&(this.state=4)}else this.state=3;else this.state=4}M(hm,Be);hm.prototype.J=function(){1==this.state&&(this.Sa.forEach(N),this.Sa=null);hm.X.J.call(this)};
+hm.prototype.T=function(b){if(void 0!==b){var c=I(b);if(c in this.f)return this.f[c];b=$a(this.f)?this.c:this.c.cloneNode(!1);return this.f[c]=b}return this.c};
+hm.prototype.Uc=function(){var b=[];this.b.forEach(function(c){c&&2==c.N()&&b.push({extent:Je(this.g,c.L),image:c.T()})},this);this.b.length=0;if(0===b.length)this.state=3;else{var c=this.i[0],d=Pe(this.l,c),e=ea(d)?d:d[0],d=ea(d)?d:d[1],c=this.l.I(c),f=this.g.I(this.h),g=Je(this.l,this.i);this.c=zj(e,d,this.s,f,this.g.C(),c,g,this.j,b,this.o,this.u);this.state=2}Ce(this)};
+hm.prototype.load=function(){if(0==this.state){this.state=1;Ce(this);var b=0;this.Sa=[];this.b.forEach(function(c){var d=c.N();if(0==d||1==d){b++;var e;e=Q(c,"change",function(){var d=c.N();if(2==d||3==d||4==d)N(e),b--,0===b&&(this.Sa.forEach(N),this.Sa=null,this.Uc())},this);this.Sa.push(e)}},this);this.b.forEach(function(b){0==b.N()&&b.load()});0===b&&x.setTimeout(this.Uc.bind(this),0)}};function im(b){gk.call(this,{attributions:b.attributions,cacheSize:b.cacheSize,extent:b.extent,logo:b.logo,opaque:b.opaque,projection:b.projection,state:b.state,tileGrid:b.tileGrid,tileLoadFunction:b.tileLoadFunction?b.tileLoadFunction:jm,tilePixelRatio:b.tilePixelRatio,tileUrlFunction:b.tileUrlFunction,url:b.url,urls:b.urls,wrapX:b.wrapX});this.crossOrigin=void 0!==b.crossOrigin?b.crossOrigin:null;this.tileClass=void 0!==b.tileClass?b.tileClass:Nl;this.b={};this.o={};this.S=b.reprojectionErrorThreshold}
+M(im,gk);p=im.prototype;p.Qc=function(){if(ze(this.a))return!0;for(var b in this.b)if(ze(this.b[b]))return!0;return!1};p.Rc=function(b,c){var d=this.bb(b);Ae(this.a,this.a==d?c:{});for(var e in this.b){var f=this.b[e];Ae(f,f==d?c:{})}};p.kb=function(){return 0};p.Mb=function(b){return this.c&&b&&!wc(this.c,b)?!1:im.X.Mb.call(this,b)};p.la=function(b){var c=this.c;return!this.tileGrid||c&&!wc(c,b)?(c=I(b).toString(),c in this.o||(this.o[c]=Se(b)),this.o[c]):this.tileGrid};
+p.bb=function(b){var c=this.c;if(!c||wc(c,b))return this.a;b=I(b).toString();b in this.b||(this.b[b]=new ye);return this.b[b]};function km(b,c,d,e,f,g){c=[c,d,e];f=(d=Ye(b,c,g))?b.tileUrlFunction(d,f,g):void 0;f=new b.tileClass(c,void 0!==f?0:4,void 0!==f?f:"",b.crossOrigin,b.tileLoadFunction);f.key="";Q(f,"change",b.D,b);return f}
+function Tg(b,c,d,e,f,g){if(b.c&&g&&!wc(b.c,g)){var h=b.bb(g);d=[c,d,e];c=b.lb.apply(b,d);if(we(h,c))return h.get(c);var k=b.c;e=b.la(k);var l=b.la(g),m=Ye(b,d,g);b=new hm(k,e,g,l,d,m,b.mb(f),0,function(b,c,d,e){return lm(this,b,c,d,e,k)}.bind(b),b.S,!1);h.set(c,b);return b}return lm(b,c,d,e,f,g)}
+function lm(b,c,d,e,f,g){var h=null,k=b.lb(c,d,e);if(we(b.a,k)){if(h=b.a.get(k),""!=h.key){var l=h;h.a&&""==h.a.key?(h=h.a,2==l.N()&&(h.a=l)):(h=km(b,c,d,e,f,g),2==l.N()?h.a=l:l.a&&2==l.a.N()&&(h.a=l.a,l.a=null));h.a&&(h.a.a=null);b.a.replace(k,h)}}else h=km(b,c,d,e,f,g),b.a.set(k,h);return h}function jm(b,c){b.T().src=c};function mm(b){var c=void 0!==b.projection?b.projection:"EPSG:3857",d;if(void 0!==b.tileGrid)d=b.tileGrid;else{d={extent:Te(c),maxZoom:b.maxZoom,minZoom:b.minZoom,tileSize:b.tileSize};var e={};Wa(e,void 0!==d?d:{});void 0===e.extent&&(e.extent=lc("EPSG:3857").C());e.resolutions=Ue(e.extent,e.maxZoom,e.tileSize);delete e.maxZoom;d=new Fe(e)}im.call(this,{attributions:b.attributions,cacheSize:b.cacheSize,crossOrigin:b.crossOrigin,logo:b.logo,opaque:b.opaque,projection:c,reprojectionErrorThreshold:b.reprojectionErrorThreshold,
+tileGrid:d,tileLoadFunction:b.tileLoadFunction,tilePixelRatio:b.tilePixelRatio,tileUrlFunction:b.tileUrlFunction,url:b.url,urls:b.urls,wrapX:void 0!==b.wrapX?b.wrapX:!0})}M(mm,im);function nm(b){b=b||{};var c;void 0!==b.attributions?c=b.attributions:c=[om];mm.call(this,{attributions:c,cacheSize:b.cacheSize,crossOrigin:void 0!==b.crossOrigin?b.crossOrigin:"anonymous",opaque:void 0!==b.opaque?b.opaque:!0,maxZoom:void 0!==b.maxZoom?b.maxZoom:19,reprojectionErrorThreshold:b.reprojectionErrorThreshold,tileLoadFunction:b.tileLoadFunction,url:void 0!==b.url?b.url:"https://{a-c}.tile.openstreetmap.org/{z}/{x}/{y}.png",wrapX:b.wrapX})}M(nm,mm);var om=new jd({html:'&copy; <a href="http://www.openstreetmap.org/copyright">OpenStreetMap</a> contributors.'});function pm(b){b=b||{};var c=qm[b.layer];this.u=b.layer;mm.call(this,{attributions:c.attributions,cacheSize:b.cacheSize,crossOrigin:"anonymous",logo:"https://developer.mapquest.com/content/osm/mq_logo.png",maxZoom:c.maxZoom,reprojectionErrorThreshold:b.reprojectionErrorThreshold,opaque:c.opaque,tileLoadFunction:b.tileLoadFunction,url:void 0!==b.url?b.url:"https://otile{1-4}-s.mqcdn.com/tiles/1.0.0/"+this.u+"/{z}/{x}/{y}.jpg"})}M(pm,mm);
+var rm=new jd({html:'Tiles Courtesy of <a href="http://www.mapquest.com/">MapQuest</a>'}),qm={osm:{maxZoom:19,opaque:!0,attributions:[rm,om]},sat:{maxZoom:18,opaque:!0,attributions:[rm,new jd({html:"Portions Courtesy NASA/JPL-Caltech and U.S. Depart. of Agriculture, Farm Service Agency"})]},hyb:{maxZoom:18,opaque:!1,attributions:[rm,om]}};function sm(b){b=b||{};im.call(this,{attributions:b.attributions,cacheSize:b.cacheSize,crossOrigin:b.crossOrigin,logo:b.logo,projection:b.projection,reprojectionErrorThreshold:b.reprojectionErrorThreshold,tileGrid:b.tileGrid,tileLoadFunction:b.tileLoadFunction,url:b.url,urls:b.urls,wrapX:void 0!==b.wrapX?b.wrapX:!0});this.P=b.params||{};this.u=Jb()}M(sm,im);sm.prototype.mb=function(b){return b};
+sm.prototype.g=function(b,c,d){var e=this.tileGrid;e||(e=this.la(d));if(!(e.Nb().length<=b[0])){var f=Je(e,b,this.u),g=tb(Pe(e,b[0]),this.h);1!=c&&(g=sb(g,c,this.h));e={F:"image",FORMAT:"PNG32",TRANSPARENT:!0};Wa(e,this.P);var h;var k=this.urls;if(k){d=d.qa.split(":").pop();e.SIZE=g[0]+","+g[1];e.BBOX=f.join(",");e.BBOXSR=d;e.IMAGESR=d;e.DPI=Math.round(e.DPI?e.DPI*c:90*c);b=[(1==k.length?k[0]:k[Ea((b[1]<<b[0])+b[2],k.length)]).replace(/MapServer\/?$/,"MapServer/export").replace(/ImageServer\/?$/,
+"ImageServer/exportImage")];for(h in e)Kl(h,e[h],b);b[1]&&(h=b[0],c=h.indexOf("#"),0<=c&&(b.push(h.substr(c)),b[0]=h=h.substr(0,c)),c=h.indexOf("?"),0>c?b[1]="?":c==h.length-1&&(b[1]=void 0));h=b.join("")}else h=void 0;return h}};F("ol.format.GeoJSON",Hl,OPENLAYERS);Hl.prototype.readFeatures=Hl.prototype.b;Hl.prototype.readFeature=Hl.prototype.g;F("ol.format.EsriJSON",Bl,OPENLAYERS);Bl.prototype.readFeatures=Bl.prototype.b;Bl.prototype.readFeature=Bl.prototype.g;F("ol.style.Style",Fi,OPENLAYERS);F("ol.style.Circle",Ei,OPENLAYERS);F("ol.style.Fill",yi,OPENLAYERS);F("ol.style.Stroke",Di,OPENLAYERS);F("ol.style.Icon",Vg,OPENLAYERS);F("ol.View",V,OPENLAYERS);V.prototype.on=V.prototype.ba;V.prototype.getZoom=V.prototype.wd;
+V.prototype.setZoom=V.prototype.Ee;V.prototype.getCenter=V.prototype.ia;V.prototype.setCenter=V.prototype.oa;V.prototype.calculateExtent=V.prototype.jc;V.prototype.getProjection=V.prototype.le;V.prototype.fit=V.prototype.nd;F("ol.control.defaults",ef,OPENLAYERS);F("ol.layer.Tile",X,OPENLAYERS);X.prototype.getVisible=X.prototype.cb;X.prototype.setVisible=X.prototype.Gc;X.prototype.getZIndex=X.prototype.Vb;X.prototype.setZIndex=X.prototype.Hc;X.prototype.getOpacity=X.prototype.Ub;
+X.prototype.setOpacity=X.prototype.Fc;X.prototype.getSource=X.prototype.V;X.prototype.setSource=X.prototype.Zb;F("ol.layer.Vector",Y,OPENLAYERS);Y.prototype.getVisible=Y.prototype.cb;Y.prototype.setVisible=Y.prototype.Gc;Y.prototype.getSource=Y.prototype.V;Y.prototype.setStyle=Y.prototype.s;Y.prototype.getZIndex=Y.prototype.Vb;Y.prototype.setZIndex=Y.prototype.Hc;Y.prototype.getOpacity=Y.prototype.Ub;Y.prototype.setOpacity=Y.prototype.Fc;Y.prototype.getSource=Y.prototype.V;Y.prototype.setSource=Y.prototype.Zb;
+F("ol.source.OSM",nm,OPENLAYERS);nm.prototype.refresh=nm.prototype.wa;F("ol.source.MapQuest",pm,OPENLAYERS);pm.prototype.refresh=pm.prototype.wa;F("ol.source.XYZ",mm,OPENLAYERS);mm.prototype.refresh=mm.prototype.wa;mm.prototype.setUrl=mm.prototype.s;mm.prototype.refresh=mm.prototype.wa;F("ol.Map",Z,OPENLAYERS);Z.prototype.on=Z.prototype.ba;Z.prototype.getTarget=Z.prototype.Tb;Z.prototype.getTargetElement=Z.prototype.Na;Z.prototype.getView=Z.prototype.O;Z.prototype.addOverlay=Z.prototype.ld;
+Z.prototype.addLayer=Z.prototype.kd;Z.prototype.removeLayer=Z.prototype.Ae;Z.prototype.getEventPixel=Z.prototype.vc;Z.prototype.hasFeatureAtPixel=Z.prototype.Td;Z.prototype.getSize=Z.prototype.Pa;Z.prototype.updateSize=Z.prototype.vb;Z.prototype.forEachFeatureAtPixel=Z.prototype.pd;Z.prototype.addInteraction=Z.prototype.jd;Z.prototype.removeInteraction=Z.prototype.ze;Z.prototype.beforeRender=Z.prototype.fa;Z.prototype.addControl=Z.prototype.hd;F("ol.source.Vector",Rj,OPENLAYERS);
+Rj.prototype.getFeatures=Rj.prototype.pe;Rj.prototype.getExtent=Rj.prototype.C;Rj.prototype.refresh=Rj.prototype.wa;Rj.prototype.addFeatures=Rj.prototype.Db;Rj.prototype.addFeature=Rj.prototype.Cb;Rj.prototype.clear=Rj.prototype.clear;Rj.prototype.forEachFeature=Rj.prototype.od;Rj.prototype.refresh=Rj.prototype.wa;F("ol.source.TileArcGISRest",sm,OPENLAYERS);sm.prototype.refresh=sm.prototype.wa;F("ol.Overlay",nl,OPENLAYERS);nl.prototype.setPosition=nl.prototype.Ec;F("ol.Feature",Dj,OPENLAYERS);
+Dj.prototype.getProperties=Dj.prototype.za;Dj.prototype.setProperties=Dj.prototype.l;Dj.prototype.getGeometry=Dj.prototype.M;F("ol.geom.Point",Mc,OPENLAYERS);Mc.prototype.transform=Mc.prototype.o;Mc.prototype.getCoordinates=Mc.prototype.ra;Mc.prototype.getExtent=Mc.prototype.C;F("ol.geom.Polygon",Tc,OPENLAYERS);Tc.prototype.getCoordinates=Tc.prototype.ra;Tc.prototype.getExtent=Tc.prototype.C;Tc.prototype.transform=Tc.prototype.o;F("ol.geom.LineString",xl,OPENLAYERS);xl.prototype.getCoordinates=xl.prototype.ra;
+xl.prototype.getExtent=xl.prototype.C;xl.prototype.transform=xl.prototype.o;F("ol.proj.Projection",ic,OPENLAYERS);ic.prototype.getCode=ic.prototype.l;F("ol.interaction.Draw",Ql,OPENLAYERS);Ql.prototype.on=Ql.prototype.ba;F("ol.animation.pan",cd,OPENLAYERS);F("ol.control.FullScreen",kf,OPENLAYERS);
+  return OPENLAYERS.ol;
+}));
+
+
+},{}],360:[function(require,module,exports){
+'use strict';
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+var ol = require('./ol-build');
+
+exports.default = ol;
+
+},{"./ol-build":359}],361:[function(require,module,exports){
+'use strict';
+
+Object.defineProperty(exports, "__esModule", {
+    value: true
+});
+exports.undefinedOrNull = undefinedOrNull;
+exports.definedAndNotNull = definedAndNotNull;
+
+var _provide = require('./provide');
+
+var _provide2 = _interopRequireDefault(_provide);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+var nm = (0, _provide2.default)('util.checkDefined');
+
+/**
+ * check if the input is undefined or null
+ * @param {*} input - input pointer
+ * @returns {boolean} true undefined or null
+ */
+/**
+ * Created by gavorhes on 12/11/2015.
+ */
+function undefinedOrNull(input) {
+    "use strict";
+
+    return typeof input === 'undefined' || input === null;
+}
+
+nm.undefinedOrNull = undefinedOrNull;
+
+/**
+ * check if the input is defined and not null
+ * @param {*} input - input pointer
+ * @returns {boolean} true defined and not null
+ */
+function definedAndNotNull(input) {
+    "use strict";
+
+    return !undefinedOrNull(input);
+}
+
+nm.definedAndNotNull = definedAndNotNull;
+
+},{"./provide":364}],362:[function(require,module,exports){
+'use strict';
+
+Object.defineProperty(exports, "__esModule", {
+    value: true
+});
+exports.rgb2hex = rgb2hex;
+exports.hexAlphaToRgbOrRgba = hexAlphaToRgbOrRgba;
+exports.rgbToRgba = rgbToRgba;
+exports.makeBlueGreenRedGradient = makeBlueGreenRedGradient;
+exports.makeBlueGreenRedGradientZScore = makeBlueGreenRedGradientZScore;
+
+var _provide = require('./provide');
+
+var _provide2 = _interopRequireDefault(_provide);
+
+var _checkDefined = require('./checkDefined');
+
+var chk = _interopRequireWildcard(_checkDefined);
+
+function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+/**
+ * Created by gavorhes on 11/3/2015.
+ */
+
+var nm = (0, _provide2.default)('util.colors');
+
+/**
+ * helper function to convert to hex
+ * @param {number|string} x - the number to convert to hex
+ * @returns {string} number as hex
+ * @private
+ */
+function _hex(x) {
+    var hexDigits = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d", "e", "f"];
+
+    return isNaN(x) ? "00" : hexDigits[(x - x % 16) / 16] + hexDigits[x % 16];
+}
+
+/**
+ * converts an RGB string to hex
+ * @param {string} rgb - rgb color
+ * @returns {string} rbg as hex
+ */
+function rgb2hex(rgb) {
+    var rgb1 = rgb.match(/^rgb\((\d+),\s*(\d+),\s*(\d+)\)$/);
+
+    return ("#" + _hex(rgb1[1]) + _hex(rgb1[2]) + _hex(rgb1[3])).toUpperCase();
+}
+
+nm.rgb2hex = rgb2hex;
+
+/**
+ * Convert hex string to RGB or RGBA string
+ * @param {string} hexString - hex color string
+ * @param {number} [alphaVal=undefined] Alpha value
+ * @returns {string} - rgb or rgba color
+ */
+function hexAlphaToRgbOrRgba(hexString, alphaVal) {
+    hexString = hexString.charAt(0) == "#" ? hexString.substring(1, 7) : hexString;
+    var r = parseInt(hexString.substring(0, 2), 16).toString() || '0';
+    var g = parseInt(hexString.substring(2, 4), 16).toString() || '0';
+    var b = parseInt(hexString.substring(4, 6), 16).toString() || '0';
+    if (alphaVal) {
+        return 'rgba(' + r + ',' + g + ',' + b + ',' + alphaVal + ')';
+    } else {
+        return 'rgba(' + r + ',' + g + ',' + b + ')';
+    }
+}
+
+nm.hexAlphaToRgbOrRgba = hexAlphaToRgbOrRgba;
+
+/**
+ * adds alpha value to rgb string 'rgb(r, b, g)', returns 'rgba(r, g, b, a)'
+ * @param {string} rgb - rgb color
+ * @param {number} alpha - alpha value 0 to 1
+ * @returns {string} rgba color
+ */
+function rgbToRgba(rgb, alpha) {
+    var pieces = rgb.split(',');
+    pieces[0] = pieces[0].replace('rgb', 'rgba');
+    pieces[2] = pieces[2].replace(')', '');
+    pieces.push(' ' + alpha.toFixed(1) + ')');
+
+    return pieces.join(',');
+}
+
+nm.rgbToRgba = rgbToRgba;
+
+/**
+ * @typedef {function} colorLookupByNumber
+ * @param {number} num - the number to use to retrieve the color
+ * @returns {string} rgb color
+ */
+
+/**
+ * Make a blue green red gradient
+ * @param {number} minVal - minimum value
+ * @param {number} maxVal - maximum value
+ * @param {boolean} flipColors - if the colors should be flipped
+ * @returns {colorLookupByNumber} color lookup function
+ */
+function makeBlueGreenRedGradient(minVal, maxVal, flipColors) {
+
+    if (typeof flipColors != "boolean") {
+        flipColors = false;
+    }
+
+    return function (theVal) {
+        var r = void 0,
+            g = void 0,
+            b = void 0;
+        var ratio = void 0;
+
+        if (chk.undefinedOrNull(theVal)) {
+            return 'rgb(100,100,100)';
+        }
+
+        var percent = (theVal - minVal) / (maxVal - minVal);
+
+        if (flipColors == true) {
+            percent = 1 - percent;
+        }
+
+        if (percent >= 1) {
+            r = 255;
+            g = 0;
+            b = 0;
+        } else if (percent <= 0) {
+            r = 0;
+            g = 0;
+            b = 255;
+        } else if (percent < .25) {
+            // green up, blue constant
+            r = 0;
+            g = Math.floor(255 * percent / 0.25);
+            b = 255;
+        } else if (percent < 0.50) {
+            //blue down, green constant
+            ratio = (percent - 0.25) / 0.25;
+            r = 0;
+            g = 255;
+            b = 255 - Math.floor(255 * ratio);
+        } else if (percent < 0.75) {
+            // red up, green constant
+            ratio = (percent - 0.5) / 0.25;
+            r = Math.floor(255 * ratio);
+            g = 255;
+            b = 0;
+        } else {
+            // green down, red constant
+            ratio = (percent - 0.75) / 0.25;
+            r = 255;
+            g = 255 - Math.floor(255 * ratio);
+            b = 0;
+        }
+
+        r = r.toFixed();
+        g = g.toFixed();
+        b = b.toFixed();
+
+        return 'rgb(' + r + ',' + g + ',' + b + ')';
+    };
+}
+
+nm.makeBlueGreenRedGradient = makeBlueGreenRedGradient;
+
+/**
+ * Create a function that will return colors based on a gradient
+ * @param {number} median - median value
+ * @param {number} stdDev - standard deviation
+ * @param {boolean} flipColors - if the colors should be flipped
+ * @returns {colorLookupByNumber} color lookup function
+ */
+function makeBlueGreenRedGradientZScore(median, stdDev, flipColors) {
+
+    var grd = makeBlueGreenRedGradient(-2.5, 2.5, flipColors);
+
+    return function (theVal) {
+
+        var zScore = void 0;
+        if (theVal == null) {
+            zScore = null;
+        } else {
+            zScore = (theVal - median) / stdDev;
+        }
+
+        return grd(zScore);
+    };
+}
+
+nm.makeBlueGreenRedGradientZScore = makeBlueGreenRedGradientZScore;
+
+},{"./checkDefined":361,"./provide":364}],363:[function(require,module,exports){
+'use strict';
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+var _provide = require('./provide');
+
+var _provide2 = _interopRequireDefault(_provide);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+var nm = (0, _provide2.default)('util');
+
+/**
+ * guids are used to uniquely identify groups and features
+ * @returns {string} a new guid
+ */
+/**
+ * Created by gavorhes on 11/3/2015.
+ */
+
+function makeGuid() {
+  return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {
+    var r = Math.random() * 16 | 0,
+        v = c == 'x' ? r : r & 0x3 | 0x8;
+
+    return v.toString(16);
+  });
+}
+nm.makeGuid = makeGuid;
+exports.default = makeGuid;
+
+},{"./provide":364}],364:[function(require,module,exports){
+'use strict';
+
+Object.defineProperty(exports, "__esModule", {
+    value: true
+});
+/**
+ * Created by gavorhes on 12/10/2015.
+ */
+
+/**
+ * create a namespace on the gv object
+ * @param {string} namespace to create
+ * @returns {object} object representing the namespace
+ */
+function provide(namespace) {
+    "use strict";
+
+    if (typeof window.gv == 'undefined') {
+        window.gv = {};
+    }
+
+    var parts = namespace.split('.');
+    var nameSpace = window.gv;
+
+    for (var i = 0; i < parts.length; i++) {
+        var newObject = nameSpace[parts[i]];
+
+        if (typeof newObject == 'undefined') {
+            nameSpace[parts[i]] = {};
+        }
+
+        nameSpace = nameSpace[parts[i]];
+    }
+
+    return nameSpace;
+}
+
+provide('util');
+window.gv.util.provide = provide;
+
+exports.default = provide;
+
+},{}],365:[function(require,module,exports){
+'use strict';
+
+require('babel-polyfill');
+
+var _quickMap = require('../src/olHelpers/quickMap');
+
+var _quickMap2 = _interopRequireDefault(_quickMap);
+
+var _ItsLayerCollection = require('../src/collections/ItsLayerCollection');
+
+var _ItsLayerCollection2 = _interopRequireDefault(_ItsLayerCollection);
+
+var _LayerLegend = require('../src/collections/LayerLegend');
+
+var _LayerLegend2 = _interopRequireDefault(_LayerLegend);
+
+var _LayerItsInventory = require('../src/layers/LayerItsInventory');
+
+var _LayerItsInventory2 = _interopRequireDefault(_LayerItsInventory);
+
+var _LayerBaseVectorGeoJson = require('../src/layers/LayerBaseVectorGeoJson');
+
+var _LayerBaseVectorGeoJson2 = _interopRequireDefault(_LayerBaseVectorGeoJson);
+
+var _LayerEsriMapServer = require('../src/layers/LayerEsriMapServer');
+
+var _LayerEsriMapServer2 = _interopRequireDefault(_LayerEsriMapServer);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+var map = (0, _quickMap2.default)({ fullScreen: true });
+
+//
+// let inventLyr = new LayerItsInventory({name: 'Camera', itsType: 'cctv', minZoom: 4, itsIcon: 'cctv.png'});
+// map.addLayer(inventLyr.olLayer);
+//
+// inventLyr.visible = true;
+//
+// let newLayer = new LayerBaseVectorGeoJson('', {});
+//
+//
+//         let metamanagerSegments = new LayerEsriMapServer(
+//             'http://transportal.cee.wisc.edu/applications/arcgis2/rest/services/MetaManager/MM_All_Segments/MapServer',
+//             {
+//                 minZoom: 3,
+//                 visible: true,
+//                 name: 'Metamanager Segments',
+//                 opacity: 0.6
+//             });
+//
+// // console.log(metamanagerSegments.visible);
+//
+// map.addLayer(metamanagerSegments.olLayer);
+
+/**
+ * Created by gavorhes on 5/19/2016.
+ */
+
+var itsLayerCollection = new _ItsLayerCollection2.default(map);
+
+var _iteratorNormalCompletion = true;
+var _didIteratorError = false;
+var _iteratorError = undefined;
+
+try {
+    for (var _iterator = itsLayerCollection.layers[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
+        var l = _step.value;
+
+        console.log(l.visible);
+        console.log(l);
+    }
+} catch (err) {
+    _didIteratorError = true;
+    _iteratorError = err;
+} finally {
+    try {
+        if (!_iteratorNormalCompletion && _iterator.return) {
+            _iterator.return();
+        }
+    } finally {
+        if (_didIteratorError) {
+            throw _iteratorError;
+        }
+    }
+}
+
+var layerArray = [{
+    groupName: 'ITS Inventory Layers',
+    collapse: false,
+    addCheck: true,
+    items: itsLayerCollection.layers
+}];
+
+var legend = new _LayerLegend2.default(layerArray, 'legend-container', {});
+
+},{"../src/collections/ItsLayerCollection":340,"../src/collections/LayerLegend":341,"../src/layers/LayerBaseVectorGeoJson":346,"../src/layers/LayerEsriMapServer":347,"../src/layers/LayerItsInventory":348,"../src/olHelpers/quickMap":356,"babel-polyfill":1}],366:[function(require,module,exports){
+'use strict';
+
+var _quickMap = require('../src/olHelpers/quickMap');
+
+var _quickMap2 = _interopRequireDefault(_quickMap);
+
+var _LayerBaseVectorEsri = require('../src/layers/LayerBaseVectorEsri');
+
+var _LayerBaseVectorEsri2 = _interopRequireDefault(_LayerBaseVectorEsri);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+/**
+ * Created by gavorhes on 5/5/2016.
+ */
+
+var chai = require('chai');
+
+describe('karma test with Chai', function () {
+  it('should expose the Chai assert method', function () {
+    var map = (0, _quickMap2.default)();
+    // console.log(map);
+    assert.ok('everything', 'everything is ok');
+  });
+
+  it('should expose the Chai expect method', function () {
+    expect('foo').to.not.equal('bar');
+  });
+
+  it('should expose the Chai should property', function () {
+    should.exist(123);
+    1..should.not.equal(2);
+  });
+
+  it('should work with ES6 fat arrow function', function () {
+    1..should.not.equal(2);
+    1..should.not.equal(2);
+    2..should.not.equal(3);
+    11..should.not.equal(12);
+    11..should.not.equal(15);
+    11..should.not.equal(12);
+    11..should.not.equal(15);
+    // (11).should.not.equal(11);
+    // (11).should.not.equal(11);
+    // (2).should.not.equal(2);
+    // (2).should.not.equal(2);
+  });
+});
+
+describe('karma test with 2', function () {
+  it('should expose the Chai assert method', function () {
+    assert.ok('everything', 'everything is ok');
+  });
+
+  it('should expose the Chai expect method', function () {
+    expect('foo').to.not.equal('bar');
+  });
+
+  it('should expose the Chai should property', function () {
+    should.exist(123);
+    1..should.not.equal(2);
+  });
+
+  it('should work with ES6 fat arrow function', function () {
+    1..should.not.equal(2);
+    1..should.not.equal(2);
+    // (2).should.not.equal(2);
+    // (2).should.not.equal(2);
+    // (2).should.not.equal(2);
+  });
+});
+
+},{"../src/layers/LayerBaseVectorEsri":345,"../src/olHelpers/quickMap":356,"chai":303}],367:[function(require,module,exports){
+'use strict';
+
+var _quickMap = require('../src/olHelpers/quickMap');
+
+var _quickMap2 = _interopRequireDefault(_quickMap);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+// import quickMap from '../src/olHelpers/quickMap';
+var chai = require('chai'); /**
+                             * Created by gavorhes on 5/5/2016.
+                             */
+
+describe('karma test with Chaiadfadf', function () {
+  it('should expose the Chai assert method', function () {
+    var map = (0, _quickMap2.default)();
+    // console.log(map);
+    assert.ok('everything', 'everything is ok');
+  });
+
+  it('should expose the Chai expect method', function () {
+    'foo'.should.not.equals('t');
+  });
+
+  it('should expose the Chai should property', function () {
+    should.exist(123);
+    1..should.not.equal(2);
+  });
+
+  it('should work with ES6 fat arrow function', function () {
+    1..should.not.equal(2);
+    1..should.not.equal(2);
+    2..should.not.equal(3);
+    2..should.not.equal(3);
+    2..should.not.equal(10);
+    2..should.not.equal(10);
+    2..should.not.equal(2);
+  });
+});
+
+describe('karma test with 2adfaasdf', function () {
+  it('should expose the Chai assert method', function () {
+    assert.ok('everything', 'everything is ok');
+  });
+
+  it('should expose the Chai expect method', function () {
+
+    expect('foo').to.not.equal('bar');
+    expect('cat').to.equal('cat');
+    expect('cat').to.equal('bird');
+  });
+
+  it('should expose the Chai should property', function () {
+    should.exist(123);
+    1..should.not.equal(2);
+  });
+
+  it('should work with ES6 fat arrow function', function () {
+    1..should.not.equal(2);
+    1..should.not.equal(2);
+    // (2).should.not.equal(2);
+    // (2).should.not.equal(2);
+    // (2).should.not.equal(2);
+  });
+});
+
+},{"../src/olHelpers/quickMap":356,"chai":303}]},{},[365,366,367])
+
+
+//# sourceMappingURL=test-bundle.js.map
diff --git a/test-build/test-bundle.js.map b/test-build/test-bundle.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..6e41322372f2960a90b475a2e8939ffa090224f5
--- /dev/null
+++ b/test-build/test-bundle.js.map
@@ -0,0 +1 @@
+{"version":3,"sources":["node_modules/browserify/node_modules/browser-pack/_prelude.js","node_modules/babel-polyfill/lib/index.js","node_modules/babel-polyfill/node_modules/babel-regenerator-runtime/runtime.js","node_modules/babel-polyfill/node_modules/core-js/fn/regexp/escape.js","node_modules/babel-polyfill/node_modules/core-js/modules/_a-function.js","node_modules/babel-polyfill/node_modules/core-js/modules/_a-number-value.js","node_modules/babel-polyfill/node_modules/core-js/modules/_add-to-unscopables.js","node_modules/babel-polyfill/node_modules/core-js/modules/_an-instance.js","node_modules/babel-polyfill/node_modules/core-js/modules/_an-object.js","node_modules/babel-polyfill/node_modules/core-js/modules/_array-copy-within.js","node_modules/babel-polyfill/node_modules/core-js/modules/_array-fill.js","node_modules/babel-polyfill/node_modules/core-js/modules/_array-from-iterable.js","node_modules/babel-polyfill/node_modules/core-js/modules/_array-includes.js","node_modules/babel-polyfill/node_modules/core-js/modules/_array-methods.js","node_modules/babel-polyfill/node_modules/core-js/modules/_array-reduce.js","node_modules/babel-polyfill/node_modules/core-js/modules/_array-species-constructor.js","node_modules/babel-polyfill/node_modules/core-js/modules/_array-species-create.js","node_modules/babel-polyfill/node_modules/core-js/modules/_bind.js","node_modules/babel-polyfill/node_modules/core-js/modules/_classof.js","node_modules/babel-polyfill/node_modules/core-js/modules/_cof.js","node_modules/babel-polyfill/node_modules/core-js/modules/_collection-strong.js","node_modules/babel-polyfill/node_modules/core-js/modules/_collection-to-json.js","node_modules/babel-polyfill/node_modules/core-js/modules/_collection-weak.js","node_modules/babel-polyfill/node_modules/core-js/modules/_collection.js","node_modules/babel-polyfill/node_modules/core-js/modules/_core.js","node_modules/babel-polyfill/node_modules/core-js/modules/_create-property.js","node_modules/babel-polyfill/node_modules/core-js/modules/_ctx.js","node_modules/babel-polyfill/node_modules/core-js/modules/_date-to-primitive.js","node_modules/babel-polyfill/node_modules/core-js/modules/_defined.js","node_modules/babel-polyfill/node_modules/core-js/modules/_descriptors.js","node_modules/babel-polyfill/node_modules/core-js/modules/_dom-create.js","node_modules/babel-polyfill/node_modules/core-js/modules/_enum-bug-keys.js","node_modules/babel-polyfill/node_modules/core-js/modules/_enum-keys.js","node_modules/babel-polyfill/node_modules/core-js/modules/_export.js","node_modules/babel-polyfill/node_modules/core-js/modules/_fails-is-regexp.js","node_modules/babel-polyfill/node_modules/core-js/modules/_fails.js","node_modules/babel-polyfill/node_modules/core-js/modules/_fix-re-wks.js","node_modules/babel-polyfill/node_modules/core-js/modules/_flags.js","node_modules/babel-polyfill/node_modules/core-js/modules/_for-of.js","node_modules/babel-polyfill/node_modules/core-js/modules/_global.js","node_modules/babel-polyfill/node_modules/core-js/modules/_has.js","node_modules/babel-polyfill/node_modules/core-js/modules/_hide.js","node_modules/babel-polyfill/node_modules/core-js/modules/_html.js","node_modules/babel-polyfill/node_modules/core-js/modules/_ie8-dom-define.js","node_modules/babel-polyfill/node_modules/core-js/modules/_inherit-if-required.js","node_modules/babel-polyfill/node_modules/core-js/modules/_invoke.js","node_modules/babel-polyfill/node_modules/core-js/modules/_iobject.js","node_modules/babel-polyfill/node_modules/core-js/modules/_is-array-iter.js","node_modules/babel-polyfill/node_modules/core-js/modules/_is-array.js","node_modules/babel-polyfill/node_modules/core-js/modules/_is-integer.js","node_modules/babel-polyfill/node_modules/core-js/modules/_is-object.js","node_modules/babel-polyfill/node_modules/core-js/modules/_is-regexp.js","node_modules/babel-polyfill/node_modules/core-js/modules/_iter-call.js","node_modules/babel-polyfill/node_modules/core-js/modules/_iter-create.js","node_modules/babel-polyfill/node_modules/core-js/modules/_iter-define.js","node_modules/babel-polyfill/node_modules/core-js/modules/_iter-detect.js","node_modules/babel-polyfill/node_modules/core-js/modules/_iter-step.js","node_modules/babel-polyfill/node_modules/core-js/modules/_iterators.js","node_modules/babel-polyfill/node_modules/core-js/modules/_keyof.js","node_modules/babel-polyfill/node_modules/core-js/modules/_library.js","node_modules/babel-polyfill/node_modules/core-js/modules/_math-expm1.js","node_modules/babel-polyfill/node_modules/core-js/modules/_math-log1p.js","node_modules/babel-polyfill/node_modules/core-js/modules/_math-sign.js","node_modules/babel-polyfill/node_modules/core-js/modules/_meta.js","node_modules/babel-polyfill/node_modules/core-js/modules/_metadata.js","node_modules/babel-polyfill/node_modules/core-js/modules/_microtask.js","node_modules/babel-polyfill/node_modules/core-js/modules/_object-assign.js","node_modules/babel-polyfill/node_modules/core-js/modules/_object-create.js","node_modules/babel-polyfill/node_modules/core-js/modules/_object-dp.js","node_modules/babel-polyfill/node_modules/core-js/modules/_object-dps.js","node_modules/babel-polyfill/node_modules/core-js/modules/_object-forced-pam.js","node_modules/babel-polyfill/node_modules/core-js/modules/_object-gopd.js","node_modules/babel-polyfill/node_modules/core-js/modules/_object-gopn-ext.js","node_modules/babel-polyfill/node_modules/core-js/modules/_object-gopn.js","node_modules/babel-polyfill/node_modules/core-js/modules/_object-gops.js","node_modules/babel-polyfill/node_modules/core-js/modules/_object-gpo.js","node_modules/babel-polyfill/node_modules/core-js/modules/_object-keys-internal.js","node_modules/babel-polyfill/node_modules/core-js/modules/_object-keys.js","node_modules/babel-polyfill/node_modules/core-js/modules/_object-pie.js","node_modules/babel-polyfill/node_modules/core-js/modules/_object-sap.js","node_modules/babel-polyfill/node_modules/core-js/modules/_object-to-array.js","node_modules/babel-polyfill/node_modules/core-js/modules/_own-keys.js","node_modules/babel-polyfill/node_modules/core-js/modules/_parse-float.js","node_modules/babel-polyfill/node_modules/core-js/modules/_parse-int.js","node_modules/babel-polyfill/node_modules/core-js/modules/_partial.js","node_modules/babel-polyfill/node_modules/core-js/modules/_path.js","node_modules/babel-polyfill/node_modules/core-js/modules/_property-desc.js","node_modules/babel-polyfill/node_modules/core-js/modules/_redefine-all.js","node_modules/babel-polyfill/node_modules/core-js/modules/_redefine.js","node_modules/babel-polyfill/node_modules/core-js/modules/_replacer.js","node_modules/babel-polyfill/node_modules/core-js/modules/_same-value.js","node_modules/babel-polyfill/node_modules/core-js/modules/_set-proto.js","node_modules/babel-polyfill/node_modules/core-js/modules/_set-species.js","node_modules/babel-polyfill/node_modules/core-js/modules/_set-to-string-tag.js","node_modules/babel-polyfill/node_modules/core-js/modules/_shared-key.js","node_modules/babel-polyfill/node_modules/core-js/modules/_shared.js","node_modules/babel-polyfill/node_modules/core-js/modules/_species-constructor.js","node_modules/babel-polyfill/node_modules/core-js/modules/_strict-method.js","node_modules/babel-polyfill/node_modules/core-js/modules/_string-at.js","node_modules/babel-polyfill/node_modules/core-js/modules/_string-context.js","node_modules/babel-polyfill/node_modules/core-js/modules/_string-html.js","node_modules/babel-polyfill/node_modules/core-js/modules/_string-pad.js","node_modules/babel-polyfill/node_modules/core-js/modules/_string-repeat.js","node_modules/babel-polyfill/node_modules/core-js/modules/_string-trim.js","node_modules/babel-polyfill/node_modules/core-js/modules/_string-ws.js","node_modules/babel-polyfill/node_modules/core-js/modules/_task.js","node_modules/babel-polyfill/node_modules/core-js/modules/_to-index.js","node_modules/babel-polyfill/node_modules/core-js/modules/_to-integer.js","node_modules/babel-polyfill/node_modules/core-js/modules/_to-iobject.js","node_modules/babel-polyfill/node_modules/core-js/modules/_to-length.js","node_modules/babel-polyfill/node_modules/core-js/modules/_to-object.js","node_modules/babel-polyfill/node_modules/core-js/modules/_to-primitive.js","node_modules/babel-polyfill/node_modules/core-js/modules/_typed-array.js","node_modules/babel-polyfill/node_modules/core-js/modules/_typed-buffer.js","node_modules/babel-polyfill/node_modules/core-js/modules/_typed.js","node_modules/babel-polyfill/node_modules/core-js/modules/_uid.js","node_modules/babel-polyfill/node_modules/core-js/modules/_wks-define.js","node_modules/babel-polyfill/node_modules/core-js/modules/_wks-ext.js","node_modules/babel-polyfill/node_modules/core-js/modules/_wks.js","node_modules/babel-polyfill/node_modules/core-js/modules/core.get-iterator-method.js","node_modules/babel-polyfill/node_modules/core-js/modules/core.is-iterable.js","node_modules/babel-polyfill/node_modules/core-js/modules/core.regexp.escape.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.array.copy-within.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.array.every.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.array.fill.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.array.filter.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.array.find-index.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.array.find.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.array.for-each.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.array.from.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.array.index-of.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.array.is-array.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.array.iterator.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.array.join.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.array.last-index-of.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.array.map.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.array.of.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.array.reduce-right.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.array.reduce.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.array.slice.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.array.some.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.array.sort.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.array.species.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.date.now.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.date.to-iso-string.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.date.to-json.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.date.to-primitive.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.date.to-string.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.function.bind.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.function.has-instance.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.function.name.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.map.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.math.acosh.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.math.asinh.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.math.atanh.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.math.cbrt.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.math.clz32.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.math.cosh.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.math.expm1.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.math.fround.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.math.hypot.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.math.imul.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.math.log10.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.math.log1p.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.math.log2.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.math.sign.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.math.sinh.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.math.tanh.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.math.trunc.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.number.constructor.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.number.epsilon.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.number.is-finite.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.number.is-integer.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.number.is-nan.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.number.is-safe-integer.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.number.max-safe-integer.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.number.min-safe-integer.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.number.parse-float.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.number.parse-int.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.number.to-fixed.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.number.to-precision.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.object.assign.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.object.create.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.object.define-properties.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.object.define-property.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.object.freeze.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.object.get-own-property-descriptor.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.object.get-own-property-names.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.object.get-prototype-of.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.object.is-extensible.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.object.is-frozen.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.object.is-sealed.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.object.is.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.object.keys.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.object.prevent-extensions.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.object.seal.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.object.set-prototype-of.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.object.to-string.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.parse-float.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.parse-int.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.promise.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.reflect.apply.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.reflect.construct.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.reflect.define-property.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.reflect.delete-property.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.reflect.enumerate.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.reflect.get-own-property-descriptor.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.reflect.get-prototype-of.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.reflect.get.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.reflect.has.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.reflect.is-extensible.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.reflect.own-keys.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.reflect.prevent-extensions.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.reflect.set-prototype-of.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.reflect.set.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.regexp.constructor.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.regexp.flags.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.regexp.match.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.regexp.replace.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.regexp.search.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.regexp.split.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.regexp.to-string.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.set.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.string.anchor.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.string.big.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.string.blink.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.string.bold.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.string.code-point-at.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.string.ends-with.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.string.fixed.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.string.fontcolor.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.string.fontsize.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.string.from-code-point.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.string.includes.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.string.italics.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.string.iterator.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.string.link.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.string.raw.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.string.repeat.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.string.small.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.string.starts-with.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.string.strike.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.string.sub.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.string.sup.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.string.trim.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.symbol.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.typed.array-buffer.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.typed.data-view.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.typed.float32-array.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.typed.float64-array.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.typed.int16-array.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.typed.int32-array.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.typed.int8-array.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.typed.uint16-array.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.typed.uint32-array.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.typed.uint8-array.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.typed.uint8-clamped-array.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.weak-map.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.weak-set.js","node_modules/babel-polyfill/node_modules/core-js/modules/es7.array.includes.js","node_modules/babel-polyfill/node_modules/core-js/modules/es7.asap.js","node_modules/babel-polyfill/node_modules/core-js/modules/es7.error.is-error.js","node_modules/babel-polyfill/node_modules/core-js/modules/es7.map.to-json.js","node_modules/babel-polyfill/node_modules/core-js/modules/es7.math.iaddh.js","node_modules/babel-polyfill/node_modules/core-js/modules/es7.math.imulh.js","node_modules/babel-polyfill/node_modules/core-js/modules/es7.math.isubh.js","node_modules/babel-polyfill/node_modules/core-js/modules/es7.math.umulh.js","node_modules/babel-polyfill/node_modules/core-js/modules/es7.object.define-getter.js","node_modules/babel-polyfill/node_modules/core-js/modules/es7.object.define-setter.js","node_modules/babel-polyfill/node_modules/core-js/modules/es7.object.entries.js","node_modules/babel-polyfill/node_modules/core-js/modules/es7.object.get-own-property-descriptors.js","node_modules/babel-polyfill/node_modules/core-js/modules/es7.object.lookup-getter.js","node_modules/babel-polyfill/node_modules/core-js/modules/es7.object.lookup-setter.js","node_modules/babel-polyfill/node_modules/core-js/modules/es7.object.values.js","node_modules/babel-polyfill/node_modules/core-js/modules/es7.observable.js","node_modules/babel-polyfill/node_modules/core-js/modules/es7.reflect.define-metadata.js","node_modules/babel-polyfill/node_modules/core-js/modules/es7.reflect.delete-metadata.js","node_modules/babel-polyfill/node_modules/core-js/modules/es7.reflect.get-metadata-keys.js","node_modules/babel-polyfill/node_modules/core-js/modules/es7.reflect.get-metadata.js","node_modules/babel-polyfill/node_modules/core-js/modules/es7.reflect.get-own-metadata-keys.js","node_modules/babel-polyfill/node_modules/core-js/modules/es7.reflect.get-own-metadata.js","node_modules/babel-polyfill/node_modules/core-js/modules/es7.reflect.has-metadata.js","node_modules/babel-polyfill/node_modules/core-js/modules/es7.reflect.has-own-metadata.js","node_modules/babel-polyfill/node_modules/core-js/modules/es7.reflect.metadata.js","node_modules/babel-polyfill/node_modules/core-js/modules/es7.set.to-json.js","node_modules/babel-polyfill/node_modules/core-js/modules/es7.string.at.js","node_modules/babel-polyfill/node_modules/core-js/modules/es7.string.match-all.js","node_modules/babel-polyfill/node_modules/core-js/modules/es7.string.pad-end.js","node_modules/babel-polyfill/node_modules/core-js/modules/es7.string.pad-start.js","node_modules/babel-polyfill/node_modules/core-js/modules/es7.string.trim-left.js","node_modules/babel-polyfill/node_modules/core-js/modules/es7.string.trim-right.js","node_modules/babel-polyfill/node_modules/core-js/modules/es7.symbol.async-iterator.js","node_modules/babel-polyfill/node_modules/core-js/modules/es7.symbol.observable.js","node_modules/babel-polyfill/node_modules/core-js/modules/es7.system.global.js","node_modules/babel-polyfill/node_modules/core-js/modules/web.dom.iterable.js","node_modules/babel-polyfill/node_modules/core-js/modules/web.immediate.js","node_modules/babel-polyfill/node_modules/core-js/modules/web.timers.js","node_modules/babel-polyfill/node_modules/core-js/shim.js","node_modules/browserify/node_modules/buffer/index.js","node_modules/browserify/node_modules/buffer/node_modules/base64-js/lib/b64.js","node_modules/browserify/node_modules/buffer/node_modules/ieee754/index.js","node_modules/browserify/node_modules/buffer/node_modules/isarray/index.js","node_modules/browserify/node_modules/process/browser.js","node_modules/chai/index.js","node_modules/chai/lib/chai.js","node_modules/chai/lib/chai/assertion.js","node_modules/chai/lib/chai/config.js","node_modules/chai/lib/chai/core/assertions.js","node_modules/chai/lib/chai/interface/assert.js","node_modules/chai/lib/chai/interface/expect.js","node_modules/chai/lib/chai/interface/should.js","node_modules/chai/lib/chai/utils/addChainableMethod.js","node_modules/chai/lib/chai/utils/addMethod.js","node_modules/chai/lib/chai/utils/addProperty.js","node_modules/chai/lib/chai/utils/expectTypes.js","node_modules/chai/lib/chai/utils/flag.js","node_modules/chai/lib/chai/utils/getActual.js","node_modules/chai/lib/chai/utils/getEnumerableProperties.js","node_modules/chai/lib/chai/utils/getMessage.js","node_modules/chai/lib/chai/utils/getName.js","node_modules/chai/lib/chai/utils/getPathInfo.js","node_modules/chai/lib/chai/utils/getPathValue.js","node_modules/chai/lib/chai/utils/getProperties.js","node_modules/chai/lib/chai/utils/hasProperty.js","node_modules/chai/lib/chai/utils/index.js","node_modules/chai/lib/chai/utils/inspect.js","node_modules/chai/lib/chai/utils/objDisplay.js","node_modules/chai/lib/chai/utils/overwriteChainableMethod.js","node_modules/chai/lib/chai/utils/overwriteMethod.js","node_modules/chai/lib/chai/utils/overwriteProperty.js","node_modules/chai/lib/chai/utils/test.js","node_modules/chai/lib/chai/utils/transferFlags.js","node_modules/chai/node_modules/assertion-error/index.js","node_modules/chai/node_modules/deep-eql/index.js","node_modules/chai/node_modules/deep-eql/lib/eql.js","node_modules/chai/node_modules/deep-eql/node_modules/type-detect/index.js","node_modules/chai/node_modules/deep-eql/node_modules/type-detect/lib/type.js","node_modules/chai/node_modules/type-detect/lib/type.js","node_modules/jquery/dist/jquery.js","src/collections/ItsLayerCollection.js","src/collections/LayerLegend.js","src/src/jquery.js","src/layers/LayerBase.js","src/layers/LayerBaseVector.js","src/layers/LayerBaseVectorEsri.js","src/layers/LayerBaseVectorGeoJson.js","src/layers/LayerEsriMapServer.js","src/layers/LayerItsInventory.js","src/olHelpers/esriToOlStyle.js","src/olHelpers/mapInteractionBase.js","src/olHelpers/mapMove.js","src/olHelpers/mapMoveCls.js","src/olHelpers/mapPopup.js","src/olHelpers/mapPopupCls.js","src/olHelpers/propertiesZoomStyle.js","src/olHelpers/quickMap.js","src/olHelpers/quickMapBase.js","src/olHelpers/zoomResolutionConvert.js","src/ol/ol-build.js","src/ol/ol.js","src/util/checkDefined.js","src/util/colors.js","src/util/makeGuid.js","src/util/provide.js","test/legend-test.js","test/urlConfig2.spec.js","test/urlConfig3.spec.js"],"names":[],"mappings":"AAAA;;ACAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;AC/BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACjpBA;AACA;;ACDA;AACA;AACA;AACA;;ACHA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;AACA;AACA;;ACNA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACdA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC3CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC3BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACfA;AACA;AACA;AACA;AACA;AACA;;ACLA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtBA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC9IA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpFA;AACA;;ACDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACRA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;;ACHA;AACA;AACA;AACA;AACA;AACA;AACA;;ACNA;AACA;AACA;AACA;;ACHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACdA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACXA;AACA;AACA;AACA;AACA;AACA;AACA;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC3BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACZA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxBA;AACA;AACA;AACA;;ACHA;AACA;AACA;AACA;;ACHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACPA;;ACAA;AACA;AACA;;ACFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACfA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACPA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;AACA;;ACLA;AACA;AACA;;ACFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACXA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACZA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpBA;AACA;AACA;;ACFA;;ACAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACTA;;ACAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACTA;AACA;AACA;AACA;;ACHA;AACA;AACA;AACA;;ACHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACfA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACZA;AACA;AACA;AACA;AACA;AACA;AACA;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACfA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnBA;AACA;AACA;AACA;AACA;AACA;AACA;;ACNA;;ACAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACZA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChBA;AACA;AACA;AACA;AACA;AACA;AACA;;ACNA;;ACAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACTA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACfA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACTA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtBA;;ACAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACPA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC/BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACPA;AACA;AACA;AACA;;ACHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACZA;AACA;AACA;AACA;AACA;AACA;AACA;;ACNA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;AACA;;ACLA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACXA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC7BA;AACA;;ACDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1EA;AACA;AACA;AACA;AACA;AACA;AACA;;ACNA;AACA;AACA;AACA;AACA;AACA;;ACLA;AACA;AACA;AACA;AACA;AACA;;ACLA;AACA;AACA;AACA;AACA;AACA;;ACLA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACXA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACheA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzBA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACRA;;ACAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACVA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACRA;AACA;AACA;AACA;AACA;AACA;;ACLA;AACA;AACA;AACA;AACA;AACA;;ACLA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACTA;AACA;AACA;AACA;AACA;AACA;;ACLA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACTA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACbA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACbA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACVA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACdA;AACA;AACA;AACA;;ACHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACXA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACTA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACTA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACTA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC3BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACTA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtBA;;ACAA;AACA;AACA;AACA;;ACHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC3BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACbA;AACA;AACA;AACA;;ACHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACVA;AACA;AACA;AACA;;ACHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACZA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACTA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACTA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACRA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACPA;AACA;AACA;AACA;;ACHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACPA;AACA;AACA;AACA;;ACHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACdA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACXA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpEA;AACA;AACA;AACA;;ACHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACRA;AACA;AACA;AACA;;ACHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACTA;AACA;AACA;AACA;;ACHA;AACA;AACA;AACA;;ACHA;AACA;AACA;AACA;;ACHA;AACA;AACA;AACA;;ACHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjBA;AACA;AACA;AACA;;ACHA;AACA;AACA;;ACFA;AACA;AACA;;ACFA;AACA;AACA;;ACFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACRA;AACA;AACA;AACA;;ACHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACPA;AACA;AACA;;ACFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACRA;AACA;AACA;;ACFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACTA;AACA;AACA;AACA;;ACHA;AACA;AACA;AACA;;ACHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC5SA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACVA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACVA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACTA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACTA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACVA;AACA;AACA;AACA;;ACHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACfA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACdA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC9BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1CA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACTA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACXA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACTA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACXA;AACA;AACA;AACA;AACA;AACA;AACA;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnBA;AACA;AACA;AACA;AACA;AACA;AACA;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACXA;AACA;AACA;AACA;AACA;AACA;AACA;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChBA;AACA;AACA;AACA;AACA;AACA;AACA;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjBA;AACA;AACA;AACA;AACA;AACA;;ACLA;AACA;AACA;AACA;AACA;AACA;AACA;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjBA;AACA;AACA;AACA;AACA;AACA;AACA;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1OA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC9CA;AACA;AACA;AACA;;ACHA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACXA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACXA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACXA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACRA;AACA;AACA;AACA;;ACHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACVA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACfA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACVA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACfA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACXA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACXA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACdA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACfA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACdA;AACA;AACA;AACA;;ACHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACTA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC7BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACTA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACTA;AACA;AACA;AACA;AACA;AACA;AACA;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;;ACNA;;ACAA;;ACAA;AACA;AACA;AACA;;ACHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrBA;AACA;AACA;AACA;AACA;AACA;;ACLA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AC/KA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AC/qDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC7GA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpFA;AACA;AACA;AACA;AACA;AACA;;ACLA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC9FA;AACA;;ACDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC7FA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACp0DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC7mDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC5CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC/GA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC3CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC/UA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC5BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC7CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChHA;AACA;;ACDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjQA;AACA;;ACDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AC9IA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;AC9mTA;;;;AACA;;IAAY,M;;AACZ;;;;;;;;;;AACA,IAAI,KAAK,uBAAQ,aAAR,CAAT;;AAGA,IAAI,YAAY,CACZ,EAAC,MAAM,QAAP,EAAiB,SAAS,MAA1B,EAAkC,SAAS,EAA3C,EAA+C,SAAS,UAAxD,EADY,EAEZ;AACI,UAAM,eADV;AAEI,aAAS,KAFb;AAGI,aAAS,EAHb;AAII,mBAAe;AACX,cAAM,SADK;AAEX,qBAAa,KAFF;AAGX,qBAAa,SAHF;AAIX,mBAAW,CACP,CAAC,MAAD,EAAS,MAAT,EAAiB,UAAjB,CADO;AAJA;AAJnB,CAFY,EAeZ,EAAC,MAAM,UAAP,EAAmB,SAAS,OAA5B,EAAqC,SAAS,EAA9C,EAAkD,SAAS,iBAA3D,EAA8E,SAAS,KAAvF,EAA8F,UAAU,IAAxG,EAfY,EAgBZ,EAAC,MAAM,WAAP,EAAoB,SAAS,MAA7B,EAAqC,SAAS,EAA9C,EAAkD,SAAS,eAA3D,EAA4E,SAAS,KAArF,EAhBY,EAiBZ,EAAC,MAAM,UAAP,EAAmB,SAAS,SAA5B,EAAuC,SAAS,EAAhD,EAAoD,SAAS,aAA7D,EAA4E,SAAS,KAArF,EAjBY,EAkBZ,EAAC,MAAM,KAAP,EAAc,SAAS,KAAvB,EAA8B,SAAS,EAAvC,EAA2C,SAAS,SAApD,EAA+D,SAAS,KAAxE,EAlBY,EAmBZ,EAAC,MAAM,OAAP,EAAgB,SAAS,OAAzB,EAAkC,SAAS,EAA3C,EAA+C,SAAS,WAAxD,EAAqE,SAAS,KAA9E,EAnBY,EAoBZ,EAAC,MAAM,gBAAP,EAAyB,SAAS,KAAlC,EAAyC,SAAS,EAAlD,EAAsD,SAAS,SAA/D,EAA0E,SAAS,KAAnF,EApBY,EAqBZ;AACI,UAAM,gBADV;AAEI,aAAS,MAFb;AAGI,oBAAgB,IAHpB;AAII,aAAS,EAJb;AAKI,aAAS,KALb;AAMI,mBAAe;AACX,cAAM,WADK;AAEX,qBAAa,OAFF;AAGX,qBAAa,uBAHF;AAIX,mBAAW,CACP,CAAC,UAAD,EAAa,UAAb,EAAyB,kBAAzB,CADO,EAEP,CAAC,MAAD,EAAS,MAAT,EAAiB,sBAAjB,CAFO,EAGP,CAAC,MAAD,EAAS,MAAT,EAAiB,sBAAjB,CAHO;AAJA,KANnB;AAgBI,cAAU;AAhBd,CArBY,EAuCZ,EAAC,MAAM,WAAP,EAAoB,SAAS,WAA7B,EAA0C,SAAS,EAAnD,EAAuD,SAAS,eAAhE,EAAiF,SAAS,KAA1F,EAvCY,EAwCZ,EAAC,MAAM,UAAP,EAAmB,SAAS,MAA5B,EAAoC,SAAS,EAA7C,EAAiD,SAAS,aAA1D,EAAyE,SAAS,KAAlF,EAAyF,UAAU,IAAnG,EAxCY,EAyCZ,EAAC,MAAM,MAAP,EAAe,SAAS,MAAxB,EAAgC,SAAS,CAAzC,EAA4C,SAAS,UAArD,EAAiE,SAAS,KAA1E,EAzCY,EA0CZ,EAAC,MAAM,YAAP,EAAqB,SAAS,MAA9B,EAAsC,SAAS,EAA/C,EAAmD,SAAS,cAA5D,EAA4E,SAAS,KAArF,EA1CY,EA2CZ,EAAC,MAAM,YAAP,EAAqB,SAAS,OAA9B,EAAuC,SAAS,EAAhD,EAAoD,SAAS,eAA7D,EAA8E,SAAS,KAAvF,EA3CY,EA4CZ,EAAC,MAAM,QAAP,EAAiB,SAAS,QAA1B,EAAoC,SAAS,EAA7C,EAAiD,SAAS,YAA1D,EAAwE,SAAS,KAAjF,EAAwF,UAAU,IAAlG,EA5CY,EA6CZ,EAAC,MAAM,OAAP,EAAgB,SAAS,OAAzB,EAAkC,SAAS,EAA3C,EAA+C,SAAS,WAAxD,EAAqE,SAAS,KAA9E,EA7CY,EA8CZ;AACI,UAAM,QADV;AAEI,aAAS,QAFb;AAGI,cAAU,IAHd;AAII,aAAS,KAJb;AAKI,mBAAe,GALnB;AAMI,aAAS,EANb;AAOI,oBAAgB,IAPpB;AAQI,mBAAe;AACX,cAAM,OADK;;;AAIX,sBAAc,OAAO,mBAAP,CAA2B,SAA3B,EAAsC,GAAtC,CAJH;AAKX,mBAAW,CACP,CAAC,QAAD,EAAW,QAAX,EAAqB,OAAO,mBAAP,CAA2B,SAA3B,EAAsC,GAAtC,CAArB,CADO,EAEP,CAAC,KAAD,EAAQ,KAAR,EAAe,OAAO,mBAAP,CAA2B,SAA3B,EAAsC,GAAtC,CAAf,CAFO,EAGP,CAAC,WAAD,EAAc,WAAd,EAA2B,OAAO,mBAAP,CAA2B,SAA3B,EAAsC,GAAtC,CAA3B,CAHO,EAIP,CAAC,MAAD,EAAS,MAAT,EAAiB,OAAO,mBAAP,CAA2B,SAA3B,EAAsC,GAAtC,CAAjB,CAJO,EAKP,CAAC,eAAD,EAAkB,eAAlB,EAAmC,OAAO,mBAAP,CAA2B,SAA3B,EAAsC,GAAtC,CAAnC,CALO,EAMP,CAAC,OAAD,EAAU,OAAV,EAAmB,OAAO,mBAAP,CAA2B,SAA3B,EAAsC,GAAtC,CAAnB,CANO,EAOP,CAAC,WAAD,EAAc,WAAd,EAA2B,OAAO,mBAAP,CAA2B,SAA3B,EAAsC,GAAtC,CAA3B,CAPO,EAQP,CAAC,MAAD,EAAS,MAAT,EAAiB,OAAO,mBAAP,CAA2B,SAA3B,EAAsC,GAAtC,CAAjB,CARO,EASP,CAAC,iBAAD,EAAoB,SAApB,EAA+B,OAAO,mBAAP,CAA2B,SAA3B,EAAsC,GAAtC,CAA/B,CATO;AALA;AARnB,CA9CY,CAAhB;;IA6EM,kB;;;;;;;;;;;;;;;;;;;;;;;;;;AAyBF,gCAAY,MAAZ,EAAoB,OAApB,EAA6B;AAAA;;AAEzB,aAAK,GAAL,GAAW,MAAX;AACA,aAAK,OAAL,GAAe,EAAf;;AAEA,kBAAU,QAAO,OAAP,yCAAO,OAAP,MAAkB,QAAlB,GAA6B,OAA7B,GAAuC,EAAjD;;AAEA,aAAK,IAAI,IAAI,CAAb,EAAgB,IAAI,UAAU,MAA9B,EAAsC,GAAtC,EAA2C;AACvC,gBAAI,YAAY,UAAU,CAAV,CAAhB;AACA,gBAAI,WAAW,IAAf;;AAEA,iBAAK,IAAI,IAAI,CAAb,EAAgB,IAAI,QAAQ,MAA5B,EAAoC,GAApC,EAAyC;AACrC,oBAAI,QAAQ,CAAR,KAAc,UAAU,OAA5B,EAAqC;AACjC,+BAAW,KAAX;AACA;AACH;AACJ;;AAED,gBAAI,QAAJ,EAAc;AACV,oBAAI,YAAY,gCAAsB,SAAtB,CAAhB;AACA,qBAAK,KAAL,EAAY,QAAZ,CAAqB,UAAU,OAA/B;AACA,qBAAK,OAAL,CAAa,IAAb,CAAkB,SAAlB;AAEH;AACJ;AACJ;;;;;;;;;;4BAMY;AACT,mBAAO,KAAK,OAAZ;AACH;;;;;;AAGL,GAAG,kBAAH,GAAwB,kBAAxB;kBACe,kB;;;;;;;;;;;;;;AClJf;;;;AACA;;;;AACA;;;;AACA;;;;;;;;AACA,IAAI,KAAK,uBAAQ,aAAR,CAAT;;IAEM,U;;;;;;;;;;;AAUF,wBAAY,WAAZ,EAAyB,MAAzB,EAAiC;AAAA;;AAC7B,aAAK,WAAL,GAAmB,EAAnB;AACA,aAAK,iBAAL,GAAyB,EAAzB;AACA,aAAK,WAAL,GAAmB,EAAnB;AACA,aAAK,iBAAL,GAAyB,EAAzB;AACA,aAAK,WAAL,GAAmB,EAAnB;;AAEA,YAAI,OAAO,WAAP,IAAsB,WAA1B,EAAuC;AACnC,iBAAK,MAAL,GAAc,IAAd;AACA,iBAAK,OAAL,GAAe,MAAf;AACA,iBAAK,SAAL,GAAiB,MAAjB;AACA,iBAAK,cAAL,GAAsB,EAAC,MAAM,IAAP,EAAtB;AACA,iBAAK,aAAL,GAAqB,CAAC,IAAD,CAArB;AACA,iBAAK,aAAL,GAAqB,EAArB;AACA,iBAAK,cAAL,GAAsB,EAAtB;AACA,iBAAK,iBAAL,GAAyB,EAAzB;AACA,iBAAK,QAAL,GAAgB,KAAhB;AACA,iBAAK,QAAL,GAAgB,KAAhB;AACH,SAXD,MAWO;AACH,iBAAK,OAAL,GAAe,yBAAf;AACA,iBAAK,MAAL,GAAc,MAAd;AACA,iBAAK,SAAL,GAAiB,YAAY,SAA7B;AACA,iBAAK,QAAL,GAAgB,OAAQ,YAAY,QAApB,IAAgC,SAAhC,GAA4C,YAAY,QAAxD,GAAmE,KAAnF;AACA,iBAAK,QAAL,GAAgB,OAAQ,YAAY,QAApB,IAAgC,SAAhC,GAA4C,YAAY,QAAxD,GAAmE,IAAnF;AACH;AACJ;;;;;;;;;;;;;;;iCAWQ,W,EAAa,O,EAAS;AAC3B,gBAAI,eAAJ;AACA,gBAAI,QAAQ,MAAR,GAAiB,CAArB,EAAwB;AACpB,yBAAS,QAAQ,QAAQ,MAAR,GAAiB,CAAzB,CAAT;AACH,aAFD,MAEO;AACH,yBAAS,MAAT;AACH;;;;;AAMD,gBAAI,cAAc,KAAK,cAAL,CAAoB,MAApB,CAAlB;AACA,gBAAI,WAAW,IAAI,UAAJ,CAAe,WAAf,EAA4B,WAA5B,CAAf;AACA,iBAAK,cAAL,CAAoB,SAAS,OAA7B,IAAwC,QAAxC;AACA,iBAAK,aAAL,CAAmB,IAAnB,CAAwB,QAAxB;;AAEA,wBAAY,WAAZ,CAAwB,IAAxB,CAA6B,QAA7B;AACA,wBAAY,iBAAZ,CAA8B,SAAS,OAAvC,IAAkD,QAAlD;;AAEA,gBAAI,YAAY,WAAZ,CAAwB,OAAxB,CAAgC,SAAS,OAAzC,IAAoD,CAAxD,EAA2D;AACvD,wBAAQ,GAAR,CAAY,SAAS,OAArB;AACA,sBAAM,oCAAN;AACH;AACD,wBAAY,WAAZ,CAAwB,IAAxB,CAA6B,SAAS,OAAtC;;AAEA,mBAAO,QAAP;AACH;;;;;;;;;;uCAOc,Q,EAAU,O,EAAS;AAC9B,gBAAI,eAAJ;AACA,gBAAI,QAAQ,MAAR,GAAiB,CAArB,EAAwB;AACpB,yBAAS,QAAQ,QAAQ,MAAR,GAAiB,CAAzB,CAAT;AACH,aAFD,MAEO;AACH,yBAAS,MAAT;AACH;;AAED,iBAAK,cAAL,CAAoB,SAAS,EAA7B,IAAmC,QAAnC;AACA,iBAAK,aAAL,CAAmB,IAAnB,CAAwB,QAAxB;;;;;AAKA,gBAAI,cAAc,KAAK,cAAL,CAAoB,MAApB,CAAlB;;AAEA,wBAAY,WAAZ,CAAwB,IAAxB,CAA6B,QAA7B;AACA,wBAAY,iBAAZ,CAA8B,SAAS,EAAvC,IAA6C,QAA7C;AACA,gBAAI,YAAY,WAAZ,CAAwB,OAAxB,CAAgC,SAAS,EAAzC,IAA+C,CAAnD,EAAsD;AAClD,wBAAQ,GAAR,CAAY,SAAS,EAArB;AACA,sBAAM,oCAAN;AACH;AACD,wBAAY,WAAZ,CAAwB,IAAxB,CAA6B,SAAS,EAAtC;;AAEA,iBAAK,iBAAL,CAAuB,SAAS,EAAhC,IAAsC,WAAtC;AAEH;;;sCAEa,Q,EAAU,O,EAAS;;AAG7B,gBAAI,0BAAwB,QAAxB,gCAAJ;;AAEA,0BAAc,SAAO,QAAQ,WAAf,8DAAmF,QAAnF,iIAC+E,QAD/E,4CAAd;;AAKA,0BAAc,KAAK,YAAL,CAAkB,KAAK,WAAvB,EAAoC,IAApC,EAA0C,QAAQ,eAAlD,IAAqE,OAAnF;;AAEA,mBAAO,UAAP;AACH;;;;;;;;;;;;qCASY,O,EAAS,Q,EAAU,e,EAAiB;;AAE7C,gBAAI,QAAQ,MAAR,IAAkB,CAAtB,EAAyB;AACrB,uBAAO,EAAP;AACH;;AAED,gBAAI,SAAS,EAAb;;AAEA,gBAAI,SAAS,QAAQ,CAAR,CAAb;;AAEA,gBAAI,SAAS,iBAAT,CAA2B,MAA3B,CAAJ,EAAwC;;;;;AAKpC,oBAAI,MAAM,SAAS,iBAAT,CAA2B,MAA3B,CAAV;AACA,0BAAU,aAAW,IAAI,EAAf,0CAAsD,gBAAgB,IAAhB,CAAqB,GAArB,CAAtD,UAAsF,IAAI,YAAJ,EAAtF,GAA2G,OAArH;AAGH,aATD,MASO,IAAI,SAAS,iBAAT,CAA2B,MAA3B,CAAJ,EAAwC;;;;AAI3C,oBAAI,aAAa,SAAS,iBAAT,CAA2B,MAA3B,CAAjB;;AAEA;AACA,0BAAU,cAAY,WAAW,OAAvB,4DACwB,gBAAgB,IAAhB,CAAqB,GAArB,CADxB,QAAV;;AAGA,oBAAI,WAAW,QAAf,EAAyB;AACrB,8BAAU,wCAAsC,WAAW,OAAjD,uCACS,WAAW,OADpB,+DACqF,WAAW,SADhG,cAAV;AAEH,iBAHD,MAGO;AACH,oFAA8D,WAAW,SAAzE;AACH;;AAED;AACA,2BAAa,WAAW,QAAX,GAAsB,sCAAtB,GAA+D,EAA5E;AACA,0BAAU,WAAW,QAAX,GAAsB,SAAtB,GAAkC,SAA5C;AACA,0BAAU,SAAV;;;AAGA,0BAAU,SAAS,KAAK,YAAL,CAAkB,WAAW,WAA7B,EAA0C,UAA1C,EAAsD,eAAtD,CAAT,GAAkF,OAA5F;AACA,0BAAU,QAAV;AACA,0BAAU,OAAV;AACH;;AAED,mBAAO,SAAS,KAAK,YAAL,CAAkB,QAAQ,KAAR,CAAc,CAAd,CAAlB,EAAoC,QAApC,EAA8C,eAA9C,CAAhB;AACH;;;;;;;;;;;IAMC,W;;;;;;;;;;;;AAWF,yBAAY,WAAZ,EAAyB,KAAzB,EAAgC,OAAhC,EAAyC;AAAA;;AAAA;AAAA;AAAA;;AAAA;AACrC,iCAAc,WAAd,8HAA2B;AAAA,oBAAlB,CAAkB;;AACvB,oBAAI,OAAO,CAAP,IAAY,WAAhB,EAA6B;AACzB,0BAAM,sDAAN;AACH;AACJ;AALoC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAOrC,kBAAU,WAAW,EAArB;;AAEA,gBAAQ,WAAR,GAAsB,OAAO,QAAQ,WAAf,IAA8B,QAA9B,GAAyC,QAAQ,WAAjD,GAA+D,QAArF;AACA,gBAAQ,cAAR,GAAyB,OAAO,QAAQ,cAAf,IAAiC,SAAjC,GAA6C,QAAQ,cAArD,GAAsE,IAA/F;AACA,gBAAQ,eAAR,GAA0B,QAAQ,eAAR,IAA2B,EAArD;;;AAGA,YAAI,QAAQ,cAAZ,EAA4B;AACxB,8BAAQ,SAAR;AACH;;AAED,aAAK,WAAL,GAAmB,sBAAE,MAAM,KAAR,CAAnB;;AAEA,aAAK,YAAL,GAAoB,WAApB;;AAEA,aAAK,UAAL,GAAkB,IAAI,UAAJ,EAAlB;;AAEA,aAAK,UAAL,CAAgB,WAAhB;;AAEA,aAAK,QAAL,GAAgB,yBAAhB;;AAEA,aAAK,WAAL,CAAiB,MAAjB,CAAwB,KAAK,UAAL,CAAgB,aAAhB,CAA8B,KAAK,QAAnC,EAA6C,OAA7C,CAAxB;;AA5BqC;AAAA;AAAA;;AAAA;AA8BrC,kCAAc,KAAK,UAAL,CAAgB,aAA9B,mIAA4C;AAAA,oBAAnC,CAAmC;;AACxC,kBAAE,aAAF;AACH;AAhCoC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAkCrC,YAAI,QAAQ,IAAZ;;;AAGA,YAAI,QAAQ,cAAZ,EAA4B;AACxB,8BAAQ,SAAR;;AAEA,8BAAQ,WAAR,CAAoB,UAAU,GAAV,EAAe,IAAf,EAAqB,GAArB,EAA0B;AAC1C,oBAAI,OAAO,GAAP,IAAc,WAAd,IAA6B,OAAO,mBAAxC,EAA6D;AAAA;AAAA;AAAA;;AAAA;AACzD,8CAAgB,KAAK,UAAL,CAAgB,aAAhC,mIAA+C;AAAA,gCAAtC,GAAsC;;AAC3C,gCAAI,SAAS,sBAAE,MAAM,IAAI,EAAV,GAAe,WAAjB,CAAb;AACA,gCAAI,OAAO,IAAI,OAAX,IAAsB,OAAO,IAAI,OAArC,EAA8C;AAC1C,uCAAO,QAAP,CAAgB,mBAAhB;AACH,6BAFD,MAEO;AACH,uCAAO,WAAP,CAAmB,mBAAnB;AACH;AACJ;AARwD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAS5D;AACJ,aAXD,EAWG,IAXH,EAWS,GAXT,EAWc,IAXd,EAWoB,SAXpB;AAYH;;;;AAID,aAAK,WAAL,CAAiB,IAAjB,CAAsB,qBAAtB,EAA6C,MAA7C,CAAoD,YAAY;AAC5D,gBAAI,iBAAiB,sBAAE,kBAAF,CAArB;AACA,gBAAI,KAAK,OAAT,EAAkB;AACd,+BAAe,WAAf,CAA2B,kBAA3B;AACH,aAFD,MAEO;AACH,+BAAe,QAAf,CAAwB,kBAAxB;AACH;AACJ,SAPD;;AAUA,aAAK,WAAL,CAAiB,IAAjB,CAAsB,eAAtB,EAAuC,MAAvC,CAA8C,YAAY;AACtD,gBAAI,QAAQ,KAAK,EAAL,CAAQ,OAAR,CAAgB,qBAAhB,EAAuC,EAAvC,CAAZ;AACA,kBAAM,UAAN,CAAiB,cAAjB,CAAgC,KAAhC,EAAuC,OAAvC,GAAiD,KAAK,OAAtD;AACH,SAHD;;AAKA,aAAK,WAAL,CAAiB,IAAjB,CAAsB,4CAAtB,EAAoE,MAApE,CAA2E,YAAY;AACnF,kCAAE,IAAF,EAAQ,QAAR,CAAiB,IAAjB,EAAuB,IAAvB,CAA4B,sBAA5B,EAAoD,IAApD,CAAyD,SAAzD,EAAoE,KAAK,OAAzE,EAAkF,OAAlF,CAA0F,QAA1F;AACH,SAFD;;AAIA,aAAK,WAAL,CAAiB,IAAjB,CAAsB,uBAAtB,EAA+C,KAA/C,CAAqD,YAAY;AAC7D,gBAAI,QAAQ,sBAAE,IAAF,CAAZ;AACA,kBAAM,WAAN,CAAkB,qCAAlB;;AAEA,kBAAM,QAAN,CAAe,IAAf,EAAqB,WAArB;;AAEA,gBAAI,MAAM,QAAN,CAAe,8BAAf,CAAJ,EAAmD;AAC/C,sBAAM,WAAN,CAAkB,8BAAlB;AACA,sBAAM,IAAN,CAAW,SAAX;AACH,aAHD,MAGO;AACH,sBAAM,QAAN,CAAe,8BAAf;AACA,sBAAM,IAAN,CAAW,SAAX;AACH;AACJ,SAbD;;AAeA,aAAK,WAAL,CAAiB,IAAjB,CAAsB,sCAAtB,EAA8D,OAA9D,CAAsE,OAAtE;;AAEH;;;;;;;;;;;mCAOU,W,EAAa,O,EAAS;;AAE7B,gBAAI,YAAY,MAAZ,IAAsB,CAA1B,EAA6B;AACzB;AACH;;AAED,gBAAI,UAAU,YAAY,CAAZ,CAAd;;;AAGA,gBAAI,KAAK,YAAL,CAAkB,OAAlB,CAA0B,OAA1B,IAAqC,CAAC,CAAtC,IAA2C,OAAO,OAAP,IAAkB,WAAjE,EAA8E;AAC1E,0BAAU,EAAV;AACH;;AAED,gBAAI,OAAO,QAAQ,WAAR,CAAP,KAAgC,WAApC,EAAiD;AAC7C,oBAAI,YAAY,YAAY,CAAZ,CAAhB;AACA,oBAAI,WAAW,KAAK,UAAL,CAAgB,QAAhB,CAAyB,SAAzB,EAAoC,OAApC,CAAf;AACA,wBAAQ,IAAR,CAAa,SAAS,OAAtB;AACA,qBAAK,UAAL,CAAgB,UAAU,KAA1B,EAAiC,OAAjC;AACH,aALD,MAKO;;;;AAIH,oBAAI,YAAY,YAAY,CAAZ,CAAhB;;AAEA,qBAAK,UAAL,CAAgB,cAAhB,CAA+B,SAA/B,EAA0C,OAA1C;AACH;;AAED,iBAAK,UAAL,CAAgB,YAAY,KAAZ,CAAkB,CAAlB,CAAhB,EAAsC,OAAtC;AACH;;;0BAEW,G,EAAK,CAEhB;;;;;;AAGL,GAAG,WAAH,GAAiB,WAAjB;kBACe,W;;;;;;;;;;;;AChVf,OAAO,MAAP,GAAgB,QAAQ,QAAR,CAAhB;;kBAEe,OAAO,M;;;;;;;;;;;;;;;ACLtB;;;;AACA;;;;AACA;;IAAY,qB;;AACZ;;;;;;;;;;AACA,IAAM,KAAK,uBAAQ,QAAR,CAAX;;;;;;;IAMM,S;;;;;;;;;;;;;;;;;;;AAkBF,uBAAY,GAAZ,EAAiB,OAAjB,EAA0B;AAAA;;AACtB,kBAAU,WAAW,EAArB;;AAEA,YAAI,OAAO,GAAP,KAAe,QAAnB,EAA6B;AACzB,kBAAM,aAAN;AACH;AACD,aAAK,IAAL,GAAY,GAAZ;;AAIA,aAAK,OAAL,GAAe,QAAO,QAAQ,MAAf,KAAyB,QAAzB,GAAoC,QAAQ,MAA5C,GAAqD,EAApE;AACA,aAAK,eAAL,GAAuB,OAAO,QAAQ,cAAf,IAAiC,SAAjC,GAA6C,QAAQ,cAArD,GAAsE,KAA7F;AACA,aAAK,eAAL,GAAuB,OAAO,QAAQ,cAAf,IAAiC,SAAjC,GAA6C,QAAQ,cAArD,GAAsE,IAA7F;;AAEA,aAAK,EAAL,GAAU,QAAQ,EAAR,IAAc,yBAAxB;AACA,aAAK,KAAL,GAAa,QAAQ,IAAR,IAAgB,eAA7B;AACA,aAAK,OAAL,GAAe,KAAf;AACA,aAAK,QAAL,GAAgB,OAAO,QAAQ,OAAf,IAA0B,QAA1B,GAAqC,QAAQ,OAA7C,GAAuD,CAAvE;;AAEA,YAAI,KAAK,QAAL,GAAgB,CAApB,EAAuB;AACnB,iBAAK,QAAL,GAAgB,CAAhB;AACH,SAFD,MAEO,IAAI,KAAK,QAAL,GAAgB,CAApB,EAAuB;AAC1B,iBAAK,QAAL,GAAgB,CAAhB;AACH;;AAED,aAAK,QAAL,GAAgB,OAAO,QAAQ,OAAf,KAA2B,SAA3B,GAAuC,QAAQ,OAA/C,GAAyD,IAAzE;;AAEA,aAAK,OAAL,GAAe,SAAf;AACA,aAAK,OAAL,GAAe,SAAf;AACA,aAAK,OAAL,GAAe,KAAf;;AAEA,aAAK,cAAL,GAAsB,sBAAsB,gBAAtB,CAAuC,QAAQ,OAA/C,CAAtB;AACA,YAAI,OAAO,KAAK,cAAZ,KAA+B,WAAnC,EAAgD;AAC5C,iBAAK,cAAL,IAAuB,OAAvB;AACH;AACD,aAAK,cAAL,GAAsB,sBAAsB,gBAAtB,CAAuC,QAAQ,OAA/C,CAAtB;;AAEA,aAAK,QAAL,GAAgB,OAAO,QAAQ,OAAf,IAA0B,QAA1B,GAAqC,QAAQ,OAA7C,GAAuD,SAAvE;AACA,aAAK,QAAL,GAAgB,OAAO,QAAQ,OAAf,IAA0B,QAA1B,GAAqC,QAAQ,OAA7C,GAAuD,SAAvE;AACA,aAAK,OAAL,GAAe,OAAO,QAAQ,MAAf,IAAyB,QAAzB,GAAoC,QAAQ,MAA5C,GAAqD,CAApE;;AAEA,aAAK,YAAL,GAAoB,OAAO,QAAQ,YAAf,IAA+B,UAA/B,GAA4C,QAAQ,YAApD,GAAmE,YAAY,CAClG,CADD;;AAIA,aAAK,cAAL,GAAsB,EAAtB;;AAEA,YAAI,KAAK,eAAT,EAA0B;AACtB,iBAAK,cAAL,IAAuB,6BAA0B,KAAK,OAAL,GAAe,SAAf,GAA2B,EAArD,yCACS,KAAK,EADd,wCAAvB;AAEA,iBAAK,cAAL,qBAAsC,KAAK,EAA3C,uDAA+F,KAAK,IAApG;AACH,SAJD,MAIO;AACH,iBAAK,cAAL,0CAA2D,KAAK,IAAhE;AACH;;AAED,aAAK,WAAL,GAAmB,IAAnB;AACA,aAAK,oBAAL,GAA4B,KAA5B;AACA,aAAK,iBAAL,CAAuB,OAAO,QAAQ,aAAf,KAAiC,QAAjC,GAA4C,QAAQ,aAApD,GAAoE,SAA3F;AACH;;;;;;;;;;;gCAOO;AACJ,gBAAI,KAAK,MAAL,IAAe,IAAnB,EAAyB;AACrB,uBAAO,IAAP;AACH,aAFD,MAEO;AACH,qBAAK,OAAL,GAAe,IAAf;;AAEA,uBAAO,KAAP;AACH;AACJ;;;;;;;;;uCAMc;AACX,0DAA4C,KAAK,EAAjD,2BAAyE,KAAK,cAA9E;AACH;;;;;;;;;;0CAOiB,iB,EAAmB;AACjC,gCAAoB,OAAO,iBAAP,IAA4B,QAA5B,GAAuC,iBAAvC,GAA2D,EAA/E;;AAEA,gBAAI,cAAc,kBAAkB,OAAlB,CAA0B,MAA1B,IAAoC,CAAC,CAAvD;;AAEA,gBAAI,WAAJ,EAAiB;AACb,oCAAoB,+EAA+E,iBAAnG;AACH;;AAED,iBAAK,cAAL,IAAuB,iBAAvB;;AAEA,iBAAK,WAAL,GAAmB,4BAAM,KAAK,EAAX,uBAAnB;;AAEA,gBAAI,KAAK,WAAL,CAAiB,MAAjB,GAA0B,CAA9B,EAAiC;AAC7B,qBAAK,WAAL,CAAiB,MAAjB,CAAwB,iBAAxB;AACA,qBAAK,aAAL;AACH;AACJ;;;;;;;;;yCAMgB,iB,EAAmB;AAChC,iBAAK,iBAAL,CAAuB,iBAAvB;AACH;;;wCAEe;AACZ,gBAAI,KAAK,oBAAT,EAA+B;AAC3B,wBAAQ,GAAR,CAAY,0BAAZ;;AAEA,uBAAO,SAAP;AACH;;AAED,iBAAK,WAAL,GAAmB,4BAAM,KAAK,EAAX,uBAAnB;;AAEA,gBAAI,KAAK,WAAL,CAAiB,MAAjB,GAA0B,CAA9B,EAAiC;;AAE7B,oBAAI,YAAY,KAAK,WAAL,CAAiB,IAAjB,CAAsB,wBAAtB,CAAhB;;AAEA,oBAAI,UAAU,MAAV,GAAmB,CAAvB,EAA0B;AACtB,yBAAK,oBAAL,GAA4B,IAA5B;;AAEA,8BAAU,KAAV,CAAgB,YAAY;AACxB,4BAAI,QAAQ,sBAAE,IAAF,CAAZ;;AAEA,8BAAM,QAAN,CAAe,IAAf,EAAqB,WAArB;;AAEA,4BAAI,MAAM,QAAN,CAAe,8BAAf,CAAJ,EAAoD;AAChD,kCAAM,WAAN,CAAkB,8BAAlB;AACA,kCAAM,IAAN,CAAW,SAAX;AACH,yBAHD,MAGO;AACH,kCAAM,QAAN,CAAe,8BAAf;AACA,kCAAM,IAAN,CAAW,SAAX;AACH;AACJ,qBAZD;;AAcA,wBAAI,KAAK,eAAT,EAA0B;AACtB,kCAAU,OAAV,CAAkB,OAAlB;AACH;AACJ;AACJ;AACJ;;;;;;;;kCAKQ;AACL,gBAAI,KAAK,MAAT,EAAgB;AACZ,qBAAK,MAAL,CAAY,OAAZ;;;;AAIH;AACJ;;;;;;;;;4BAOmB;AAChB,mBAAO,KAAK,cAAZ;AACH;;;;;;;;0BAOiB,M,EAAQ;AACtB,iBAAK,cAAL,GAAsB,MAAtB;AACH;;;;;;;;;4BAMY;AACT,mBAAO,KAAK,OAAZ;AACH;;;;;;;;0BAOU,S,EAAU;AACjB,iBAAK,OAAL,GAAe,SAAf;AACH;;;;;;;;;4BAMmB;AAChB,mBAAO,KAAK,cAAZ;AACH;;;;;;;;;4BAMmB;AAChB,mBAAO,KAAK,cAAZ;AACH;;;;;;;;;4BAMa;AACV,mBAAO,KAAK,QAAZ;AACH;;;;;;;;;4BAMa;AACV,mBAAO,KAAK,QAAZ;AACH;;;;;;;;;4BAMS;AACN,mBAAO,KAAK,IAAZ;AACH;;;;;;;;;4BAMa;AACV,mBAAO,KAAK,QAAZ;AACH;;;;;;;0BAMW,U,EAAY;AACpB,iBAAK,QAAL,GAAgB,UAAhB;AACA,gBAAI,KAAK,OAAT,EAAkB;AACd,qBAAK,OAAL,CAAa,UAAb,CAAwB,KAAK,QAA7B;AACA,oBAAI,cAAc,CAAC,KAAK,OAAxB,EAAiC;AAC7B,yBAAK,KAAL;AACH;AACJ;AACJ;;;;;;;;;4BAMa;AACV,mBAAO,KAAK,QAAZ;AACH;;;;;;;0BAMW,O,EAAS;AACjB,iBAAK,QAAL,GAAgB,OAAhB;AACA,gBAAI,KAAK,OAAT,EAAkB;AACd,qBAAK,OAAL,CAAa,UAAb,CAAwB,KAAK,QAA7B;AACH;AACJ;;;;;;;;;4BAMU;AACP,mBAAO,KAAK,KAAZ;AACH;;;;;;;0BAMQ,O,EAAS;AACd,iBAAK,KAAL,GAAa,OAAb;AACH;;;;;;;;;4BAMY;AACT,mBAAO,KAAK,OAAZ;AACH;;;;;;;;;4BAMY;AACT,mBAAO,KAAK,OAAZ;AACH;;;;;;;;;4BAMW;AACR,mBAAO,KAAK,OAAZ;AACH;;;;;;;0BAMU,I,EAAK;AACZ,iBAAK,OAAL,GAAe,IAAf;AACA,iBAAK,OAAL,CAAa,SAAb,CAAuB,KAAK,MAA5B;AACH;;;;;;AAGL,GAAG,SAAH,GAAe,SAAf;kBACe,S;;;;;;;;;;;;;;;ACvWf;;;;AACA;;;;AACA;;;;AACA;;;;AACA;;;;;;;;;;;;AACA,IAAM,KAAK,uBAAQ,QAAR,CAAX;;;;;;;;;;;;;;;;;;;;;IAqBM,e;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA2BF,6BAAY,GAAZ,EAAiB,OAAjB,EAA0B;AAAA;;;;AAAA,uGAChB,GADgB,EACX,OADW;;AAItB,YAAI,MAAK,GAAL,CAAS,IAAT,MAAmB,EAAvB,EAA2B;AACvB,kBAAK,OAAL,GAAe,IAAf;AACH;;AAED,cAAK,MAAL,GAAc,OAAO,QAAQ,KAAf,IAAwB,WAAxB,GAAsC,SAAtC,GAAkD,QAAQ,KAAxE;;AAEA,YAAI,MAAK,OAAT,EAAkB;AACd,kBAAK,SAAL,GAAiB,IAAjB;AACH,SAFD,MAEO;AACH,kBAAK,SAAL,GAAkB,OAAO,QAAQ,UAAR,CAAP,IAA8B,SAA9B,GAA0C,QAAQ,UAAR,CAA1C,GAAgE,KAAlF;AACH;;AAED,cAAK,SAAL,GAAiB,OAAO,QAAQ,QAAf,IAA2B,SAA3B,GAAuC,QAAQ,QAA/C,GAA0D,KAA3E;AACA,cAAK,cAAL,GAAsB,OAAO,QAAQ,aAAf,IAAgC,QAAhC,GAA2C,QAAQ,aAAnD,GAAmE,GAAzF;;AAEA,YAAI,QAAQ,UAAZ,EAAuB;AACnB,kBAAK,QAAL,GAAgB,QAAQ,UAAxB;AACH,SAFD,MAEO;AACH,kBAAK,QAAL,GAAgB,MAAK,SAAL,uBAA2B,SAA3C;AACH;;AAED,cAAK,qBAAL,GAA6B,OAAO,QAAQ,oBAAf,IAAuC,UAAvC,GAAoD,QAAQ,oBAA5D,GACzB,UAAS,GAAT,EAAc,MAAd,EAAsB,SAAtB,EAAgC;AAC5B,mBAAO,EAAP;AACH,SAHL;;AAKA,YAAI,MAAK,SAAT,EAAoB;AAChB,kBAAK,OAAL,GAAe,IAAf;AACA,kBAAK,cAAL,GAAsB,EAAtB;AACA,kBAAK,QAAL,CAAc,SAAd;AACA,kBAAK,QAAL,CAAc,cAAd;AACH;;AAED,cAAK,OAAL,GAAe,IAAI,aAAG,MAAH,CAAU,MAAd,EAAf;;;;;;AAMA,cAAK,OAAL,GAAe,IAAI,aAAG,KAAH,CAAS,MAAb,CACX;AACI,oBAAQ,MAAK,OADjB;AAEI,qBAAS,MAAK,OAFlB;AAGI,mBAAO,MAAK,KAHhB;AAII,2BAAe,MAAK,cAJxB;AAKI,2BAAe,MAAK,cALxB;AAMI,oBAAQ,MAAK;AANjB,SADW,CAAf;AA3CsB;AAqDzB;;;;;;;;;;oCAMW,iB,EAAmB;AAC3B,oBAAQ,GAAR,CAAY,iEAAZ;AACH;;;;;;;;;;;sCAQa,I,EAAM,O,EAAS;AACzB,gBAAI,KAAK,OAAL,KAAiB,SAArB,EAAgC;AAC5B,oBAAI,OAAO,KAAK,OAAhB,EAAyB;AACrB,2BAAO,KAAP;AACH;AACJ;;AAED,gBAAI,KAAK,OAAL,KAAiB,SAArB,EAAgC;AAC5B,oBAAI,OAAO,KAAK,OAAhB,EAAyB;AACrB,2BAAO,KAAP;AACH;AACJ;;AAED,mBAAO,KAAK,OAAZ;AACH;;;;;;;;;;;;;;6CAWoB,M,EAAQ,S,EAAW;AACpC,iBAAK,cAAL,GAAsB,EAAtB;AACA,6BAAE,MAAF,CAAS,KAAK,cAAd,EAA8B,KAAK,MAAnC;AACA,6BAAE,MAAF,CAAS,KAAK,cAAd,EAA8B,KAAK,qBAAL,CAA2B,IAA3B,EAAiC,MAAjC,EAAyC,SAAzC,CAA9B;AACH;;;;;;;;;wCAMe,C,EAAG;AACf,gBAAI,KAAK,MAAT,EAAiB;AACb,qBAAK,OAAL,CAAa,KAAb;AACH;AACJ;;;;;;;;gCAKO;AACJ,gBAAI,KAAK,OAAT,EAAkB;AACd,qBAAK,OAAL,CAAa,KAAb;AACH;AACJ;;;;;;;;;4BAMmB;AAChB,mBAAO,KAAK,cAAZ;AACH;;;;;;;;;4BAMc;AACX,mBAAO,KAAK,SAAZ;AACH;;;;;;;;;4BAMW;AACR,mBAAO,KAAK,MAAZ;AACH;;;;;;;0BAMS,K,EAAO;AACb,iBAAK,MAAL,GAAc,KAAd;AACA,iBAAK,OAAL,CAAa,QAAb,CAAsB,KAAK,MAA3B;AACH;;;;;;;;;4BAMY;AACT,gBAAI,KAAK,QAAT,EAAmB;AACf,uBAAO,KAAK,QAAL,CAAc,GAAd,CAAkB,OAAlB,GAA4B,aAA5B,GAA4C,OAA5C,EAAP;AACH,aAFD,MAEO;AACH,uBAAO,SAAP;AACH;AACJ;;;;;;;;;4BAMa;AACV,mBAAO,KAAK,QAAZ;AACH;;;;;;;;;4BAMmB;AAChB,mBAAO,KAAK,cAAZ;AACH;;;;;;;;;4BAMa;AACV;AACH;;;;;;;;0BAOW,U,EAAY;AACpB,8EAAgB,UAAhB;;AAEA,gBAAI,KAAK,SAAT,EAAoB;AAChB,qBAAK,OAAL,CAAa,cAAb,CAA4B,IAA5B;AACH;AACJ;;;;;;;;;;4BAOW;AACR;AACH;;;;;;;;;4BAMa;AACV,mBAAO,KAAK,MAAL,CAAY,WAAZ,EAAP;AACH;;;;;;AAGL,GAAG,eAAH,GAAqB,eAArB;kBACe,e;;;;;;;;;;;;;;;AC7Qf;;;;AACA;;;;AACA;;IAAY,Q;;AACZ;;;;AACA;;;;AACA;;;;;;;;;;;;;;;;AAEA,IAAI,KAAK,uBAAQ,QAAR,CAAT;;;;;;;IAMM,mB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAiCF,iCAAY,GAAZ,EAAiB,OAAjB,EAA0B;AAAA;;AAEtB,YAAI,QAAO,QAAQ,MAAf,KAAyB,QAA7B,EAAuC;AACnC,oBAAQ,MAAR,GAAiB,EAAjB;AACH;AACD,gBAAQ,MAAR,CAAe,OAAf,IAA0B,QAAQ,KAAR,IAAiB,KAA3C;AACA,gBAAQ,MAAR,CAAe,WAAf,IAA8B,QAAQ,SAAR,IAAqB,GAAnD;AACA,gBAAQ,MAAR,CAAe,GAAf,IAAsB,QAAQ,MAAR,IAAkB,OAAxC;AACA,gBAAQ,MAAR,CAAe,OAAf,IAA0B,QAAQ,KAAR,IAAiB,IAA3C;;AARsB,2GAUhB,GAVgB,EAUX,OAVW;;AAWtB,cAAK,MAAL,GAAc,MAAK,MAAL,CAAY,OAAZ,CAAd;AACA,cAAK,WAAL,GAAmB,IAAI,aAAG,MAAH,CAAU,QAAd,EAAnB;;AAEA,YAAI,MAAK,IAAL,CAAU,MAAK,IAAL,CAAU,MAAV,GAAmB,CAA7B,MAAoC,GAAxC,EAA6C;AACzC,kBAAK,IAAL,IAAa,GAAb;AACH;;AAED,cAAK,QAAL,GAAgB,MAAK,GAArB;AACA,cAAK,IAAL,IAAa,kBAAb;;AAEA,YAAI,MAAK,QAAL,IAAiB,MAAK,OAA1B,EAAmC;AAC/B,kBAAK,KAAL;AACH;;AAED,cAAK,aAAL,GAAqB,OAAO,QAAQ,YAAf,IAA+B,SAA/B,GAA2C,QAAQ,YAAnD,GAAkE,KAAvF;;AAEA,YAAI,MAAK,aAAT,EAAwB;AACpB,kBAAK,gBAAL;AACH;AA7BqB;AA8BzB;;;;;;;;;;yCAMgB,iB,EAAmB;AAAA;;AAChC,gBAAI,CAAC,KAAK,aAAV,EAAyB;AACrB,gHAAuB,iBAAvB;AACH,aAFD,MAEO;AACH,iCAAE,GAAF,CAAM,KAAK,QAAL,GAAgB,qBAAtB,EAA6C,EAA7C,EAAiD,UAAC,CAAD,EAAO;AACpD,wBAAI,EAAE,WAAF,EAAe,MAAf,GAAwB,CAA5B,EAA+B;AAC3B,8BAAM,mDAAN;;AAEA;AACH;;AAED,wBAAI,oBAAoB,SAAS,iCAAT,CAA2C,CAA3C,CAAxB;AACA,2BAAK,KAAL,GAAa,kBAAkB,KAA/B;AACA,wHAAuB,kBAAkB,MAAzC;AACH,iBAVD,EAUG,MAVH;AAWH;AACJ;;;;;;;;;oCAOW,iB,EAAmB;AAC3B,gBAAI,QAAQ,KAAK,WAAL,CAAiB,YAAjB,CAA8B,iBAA9B,CAAZ;AACA,iBAAK,MAAL,CAAY,WAAZ,CAAwB,KAAxB;AACH;;;;;;;;;;gCAOO;AAAA;;AACJ,sGAAmB;AACf,uBAAO,IAAP;AACH;AACD,6BAAE,GAAF,CAAM,KAAK,IAAX,EAAiB,KAAK,MAAtB,EAA8B,UAAC,CAAD,EAAO;AACjC,uBAAK,WAAL,CAAiB,CAAjB;AACA,uBAAK,YAAL;AACH,aAHD,EAGG,MAHH,EAGW,IAHX,CAGgB,YAAM;AACd,uBAAK,OAAL,GAAe,KAAf;AACH,aALL;;AAOA,mBAAO,KAAP;AACH;;;;;;;;;;;;;;6CAWoB,M,EAAQ,S,EAAW;AACpC,gHAA2B,MAA3B,EAAmC,SAAnC;AACA,iBAAK,aAAL,CAAmB,UAAnB,IAAoC,OAAO,IAA3C,SAAmD,OAAO,IAA1D,SAAkE,OAAO,IAAzE,SAAiF,OAAO,IAAxF;AACA,iBAAK,aAAL,CAAmB,cAAnB,IAAqC,sBAArC;AACA,iBAAK,aAAL,CAAmB,YAAnB,IAAmC,0BAAnC;AACA,iBAAK,aAAL,CAAmB,YAAnB,IAAmC,0BAAnC;AACA,iBAAK,aAAL,CAAmB,MAAnB,IAA6B,IAA7B;AACA,gBAAI,KAAK,MAAL,IAAe,IAAnB,EAAyB;AACrB,qBAAK,aAAL,CAAmB,mBAAnB,IAA0C,CAA1C;AACH;AACJ;;;;;;;;;;;sCAQa,I,EAAM,O,EAAS;AACzB,gHAA2B,IAA3B,EAAiC,OAAjC;;;;;;;AAOH;;;;;;;;;wCAMe,C,EAAG;AACf,2GAAsB,CAAtB;AACA,iBAAK,MAAL,CAAY,WAAZ,CAAwB,KAAK,WAAL,CAAiB,YAAjB,CAA8B,CAA9B,CAAxB;AACH;;;;;;AAGL,GAAG,mBAAH,GAAyB,mBAAzB;kBACe,mB;;;;;;;;;;;;;ACjLf;;;;AACA;;;;AACA;;;;AACA;;;;;;;;;;;;;;AACA,IAAI,KAAK,uBAAQ,QAAR,CAAT;;;;;;;IAMM,sB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA6BF,oCAAY,GAAZ,EAAiB,OAAjB,EAA0B;AAAA;;AACtB,cAAM,OAAO,GAAP,IAAc,QAAd,GAAyB,GAAzB,GAA+B,EAArC;;AADsB,8GAEhB,GAFgB,EAEX,OAFW;;AAItB,cAAK,cAAL,GAAsB,IAAI,aAAG,MAAH,CAAU,OAAd,EAAtB;;AAEA,cAAK,UAAL,GAAkB,QAAQ,SAAR,IAAqB,EAAvC;AACA,cAAK,UAAL,CAAgB,cAAhB,GAAiC,MAAK,UAAL,CAAgB,cAAhB,IAAkC,WAAnE;AACA,cAAK,UAAL,CAAgB,iBAAhB,GAAoC,MAAK,UAAL,CAAgB,iBAAhB,IAAqC,WAAzE;;AAEA,YAAI,MAAK,QAAL,IAAiB,MAAK,OAA1B,EAAmC;AAC/B,kBAAK,KAAL;AACH;AAZqB;AAazB;;;;;;;;;;oCAMW,iB,EAAmB;AAC3B,gBAAI,KAAK,UAAL,CAAgB,cAAhB,IAAkC,WAAlC,IAAiD,KAAK,UAAL,CAAgB,iBAAhB,IAAqC,WAA1F,EAAuG;AACnG,qBAAK,OAAL,CAAa,WAAb,CAAyB,KAAK,cAAL,CAAoB,YAApB,CAAiC,iBAAjC,CAAzB;AACH,aAFD,MAEO;AACH,qBAAK,OAAL,CAAa,WAAb,CAAyB,KAAK,cAAL,CAAoB,YAApB,CAAiC,iBAAjC,EAAoD,KAAK,UAAzD,CAAzB;AACH;AACJ;;;;;;;;;;gCAOO;AAAA;;AAEJ,yGAAmB;AACf,uBAAO,IAAP;AACH;;AAED,6BAAE,GAAF,CAAM,KAAK,IAAX,EACI,KAAK,OADT,EAEI,UAAC,CAAD,EAAO;AACH,uBAAK,WAAL,CAAiB,CAAjB;AACA,uBAAK,YAAL;AACH,aALL,EAKO,MALP,EAKe,IALf,CAMI,YAAY;AACR,qBAAK,OAAL,GAAe,KAAf;AACH,aARL;;AAWA,mBAAO,KAAP;AACH;;;;;;;;;;wCAOe,C,EAAG;AACf,8GAAsB,CAAtB;AACA,iBAAK,OAAL,CAAa,WAAb,CAAyB,KAAK,cAAL,CAAoB,YAApB,CAAiC,CAAjC,EAAoC,KAAK,UAAzC,CAAzB;AACH;;;;;;AAGL,GAAG,sBAAH,GAA4B,sBAA5B;kBACe,sB;;;;;;;;;;;;;ACxGf;;;;AACA;;;;AACA;;IAAY,Q;;AACZ;;;;AACA;;;;AACA;;;;;;;;;;;;;;;;;AACA,IAAM,KAAK,uBAAQ,QAAR,CAAX;;;;;;;IAMM,kB;;;;;;;;;;;;;;;;;;;;;;AAmBF,gCAAY,GAAZ,EAAiB,OAAjB,EAA0B;AAAA;;AAAA,2GAChB,GADgB,EACX,OADW;;AAEtB,eAAK,OAAL,GAAe,IAAI,aAAG,MAAH,CAAU,cAAd,CAA6B,EAAC,KAAK,OAAK,GAAL,IAAY,EAAZ,GAAiB,SAAjB,GAA6B,OAAK,GAAxC,EAA7B,CAAf;;AAEA,eAAK,OAAL,GAAe,IAAI,aAAG,KAAH,CAAS,IAAb,CAAkB;AAC7B,oBAAQ,OAAK,OADgB;AAE7B,qBAAS,OAAK,OAFe;AAG7B,qBAAS,OAAK,OAHe;AAI7B,2BAAe,OAAK,cAJS;AAK7B,2BAAe,OAAK,cALS;AAM7B,oBAAQ,OAAK;AANgB,SAAlB,CAAf;;AASA,gBAAQ,QAAR,GAAmB,OAAO,QAAQ,QAAf,IAA2B,SAA3B,GAAuC,QAAQ,QAA/C,GAA0D,KAA7E;;AAEA,eAAK,WAAL,GAAmB,IAAI,aAAG,MAAH,CAAU,QAAd,EAAnB;AACA,eAAK,aAAL,GAAqB,IAArB;;AAEA,eAAK,gBAAL;;AAEA,YAAI,QAAQ,QAAZ,EAAsB;AAClB,+BAAS,kBAAT;AACH;AAtBqB;AAuBzB;;;;;;;;;;yCAMgB,iB,EAAmB;AAChC,gBAAI,UAAU,KAAK,GAAnB;;AAEA,gBAAI,QAAQ,QAAQ,MAAR,GAAiB,CAAzB,MAAgC,GAApC,EAAyC;AACrC,2BAAW,GAAX;AACH;;AAED,uBAAW,2BAAX;;AAEA,gBAAI,QAAQ,IAAZ;AACA,gBAAI,oGAAJ;;AAEA,6BAAE,GAAF,CAAM,OAAN,EAAe,EAAf,EAAmB,UAAU,CAAV,EAAa;AAC5B,oBAAI,UAAU,SAAS,oBAAT,CAA8B,CAA9B,CAAd;AACA,+BAAe,IAAf,CAAoB,KAApB,EAA2B,OAA3B;AACH,aAHD,EAGG,MAHH;AAIH;;;qCAGY,W,EAAa;AACtB,gBAAI,CAAC,KAAK,OAAV,EAAmB;AACf;AACH;;AAED,gBAAI,UAAU,KAAK,GAAnB;;AAEA,gBAAI,QAAQ,QAAQ,MAAR,GAAiB,CAAzB,KAA+B,GAAnC,EAAwC;AACpC,2BAAW,GAAX;AACH;;AAED,uBAAW,qBAAX;;AAEA,gBAAI,QAAQ,IAAZ;;AAEA,gBAAI,KAAK,aAAL,IAAsB,IAA1B,EAAgC;AAC5B,qBAAK,aAAL,CAAmB,KAAnB;AACH;;AAED,iBAAK,aAAL,GAAqB,iBAAE,GAAF,CAAM,OAAN,EAAe,WAAf,EAA4B,UAAU,CAAV,EAAa;AAAA;AAAA;AAAA;;AAAA;AAC1D,yCAAc,EAAE,SAAF,CAAd,8HAA4B;AAAA,4BAAnB,CAAmB;;;AAExB,4BAAI,YAAY,kCAAhB;;AAEA,6BAAK,IAAI,CAAT,IAAc,EAAE,YAAF,CAAd,EAA+B;AAC3B,gCAAI,EAAE,YAAF,EAAgB,cAAhB,CAA+B,CAA/B,CAAJ,EAAuC;AACnC,oCAAI,UAAU,EAAE,YAAF,EAAgB,CAAhB,CAAd;;AAEA,oCAAI,WAAW,IAAX,IAAmB,QAAQ,QAAR,GAAmB,WAAnB,MAAoC,MAA3D,EAAmE;AAC/D;AACH;;AAED,oCAAI,OAAO,CAAX;AACA,oCAAI,KAAK,MAAL,GAAc,EAAlB,EAAsB;AAClB,2CAAO,KAAK,KAAL,CAAW,CAAX,EAAc,EAAd,IAAoB,KAA3B;AACH;;AAED,0DAAwB,IAAxB,iBAAwC,OAAxC;AACH;AACJ;;AAED,qCAAa,UAAb;;AAEA,2CAAS,yBAAT,CAAmC,MAAM,WAAN,CAAkB,WAAlB,CAA8B,CAA9B,CAAnC,EAAqE,KAArE,EAA4E,SAA5E,EAAuF,EAAE,WAAF,CAAvF;AACH;AAzByD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA0B7D,aA1BoB,EA0BlB,MA1BkB,EA0BV,MA1BU,CA0BH,YAAY;AAC1B,sBAAM,aAAN,GAAsB,IAAtB;AACH,aA5BoB,CAArB;AA6BH;;;;;;;;;gCAMO,CACP;;;;;;;;;4BAMY;AACT;AACH;;;;;;AAEL,GAAG,kBAAH,GAAwB,kBAAxB;kBACe,kB;;;;;;;;;;;;;;;;;AChJf;;;;AACA;;;;AACA;;;;AACA;;;;AACA;;;;AACA;;;;;;;;;;;;AACA,IAAI,KAAK,uBAAQ,QAAR,CAAT;;AAGA,SAAS,gBAAT,CAA0B,OAA1B,EAAmC,YAAnC,EAAiD,aAAjD,EAAgE,aAAhE,EAA+E;AAC3E;;;;AAGA,QAAI,cAAc,CAAlB;AACA,QAAI,OAAO,OAAP,IAAkB,QAAtB,EAAgC;AAC5B;AACH;;AAED,QAAI,QAAO,YAAP,yCAAO,YAAP,MAAuB,QAA3B,EAAqC;AACjC,qBAAa,KAAb,GAAqB,OAAO,aAAa,KAApB,IAA6B,QAA7B,GAAwC,aAAa,KAArD,GAA6D,CAAlF;AACA,qBAAa,KAAb,GAAqB,OAAO,aAAa,KAApB,IAA6B,QAA7B,GAAwC,aAAa,KAArD,GAA6D,KAAlF;AACA;AACH;;AAED,QAAI,QAAO,aAAP,yCAAO,aAAP,MAAwB,QAA5B,EAAsC;AAClC,sBAAc,WAAd,GAA4B,cAAc,WAAd,IAA6B,OAAzD;;AAEA,YAAI,OAAO,cAAc,SAArB,IAAkC,WAAtC,EAAmD;AAC/C,0BAAc,SAAd,GAA0B,EAA1B;AACH;;AAED;AACH;;AAED,QAAI,QAAO,aAAP,yCAAO,aAAP,MAAwB,QAA5B,EAAsC;AAClC,sBAAc,WAAd,GAA4B,cAAc,WAAd,IAA6B,OAAzD;AACA,sBAAc,YAAd,GAA6B,cAAc,YAAd,IAA8B,CAA3D;AACA,sBAAc,YAAd,GAA6B,cAAc,YAAd,IAA8B,KAA3D;;AAGA,YAAI,OAAO,cAAc,SAArB,IAAkC,WAAtC,EAAmD;AAC/C,0BAAc,SAAd,GAA0B,EAA1B;AACH;;;AAGD,aAAK,IAAI,IAAI,CAAb,EAAgB,IAAI,cAAc,SAAd,CAAwB,MAA5C,EAAoD,GAApD,EAAyD;AACrD,gBAAI,cAAc,SAAd,CAAwB,CAAxB,EAA2B,MAA3B,IAAqC,CAAzC,EAA4C;AACxC,8BAAc,SAAd,CAAwB,CAAxB,EAA2B,IAA3B,CAAgC,CAAhC;AACH;AACJ;;AAED;AACH;;AAED,QAAI,cAAc,CAAlB,EAAqB;AACjB,cAAM,sCAAN;AACH;AACJ;;;;;;;;;;;;;;;;;;;;;;;;AAwBD,SAAS,WAAT,CAAqB,OAArB,EAA8B,YAA9B,EAA4C,aAA5C,EAA2D,aAA3D,EAA0E;AACtE;;AACA,qBAAiB,OAAjB,EAA0B,YAA1B,EAAwC,aAAxC,EAAuD,aAAvD;;AAEA,QAAI,eAAe,sDAAnB;;AAEA,QAAI,OAAJ,EAAa;AACT,eAAO,IAAI,aAAG,KAAH,CAAS,KAAb,CAAmB;AACtB,mBAAO,IAAI,aAAG,KAAH,CAAS,IAAb,CAAkB,EAAC,KAAK,eAAe,OAArB,EAAlB;AADe,SAAnB,CAAP;AAGH,KAJD,MAIO,IAAI,YAAJ,EAAkB;AACrB,eAAO,IAAI,aAAG,KAAH,CAAS,KAAb,CAAmB;AACtB,oBAAQ,IAAI,aAAG,KAAH,CAAS,MAAb,CAAoB;AACxB,uBAAO,aAAa,KADI;AAExB,uBAAO,aAAa;AAFI,aAApB;AADc,SAAnB,CAAP;AAMH,KAPM,MAOA,IAAI,aAAJ,EAAmB;AACtB,eAAO,UAAU,OAAV,EAAmB;AACtB,gBAAI,aAAa,QAAQ,aAAR,GAAwB,cAAc,IAAtC,CAAjB;AACA,gBAAI,UAAU,eAAe,cAAc,WAA3C;;AAEA,iBAAK,IAAI,IAAI,CAAb,EAAgB,IAAI,cAAc,SAAd,CAAwB,MAA5C,EAAoD,GAApD,EAAyD;AACrD,oBAAI,WAAW,cAAc,SAAd,CAAwB,CAAxB,CAAf;;AAEA,oBAAI,WAAW,IAAX,GAAkB,iBAAlB,MAAyC,SAAS,CAAT,EAAY,IAAZ,GAAmB,iBAAnB,EAA7C,EAAqF;AACjF,8BAAU,eAAe,SAAS,CAAT,CAAzB;AACA;AACH;AACJ;;AAED,mBAAO,CAAC,IAAI,aAAG,KAAH,CAAS,KAAb,CAAmB;AACvB,uBAAO,IAAI,aAAG,KAAH,CAAS,IAAb,CAAkB,EAAC,KAAK,OAAN,EAAlB;AADgB,aAAnB,CAAD,CAAP;AAGH,SAhBD;AAiBH,KAlBM,MAkBA,IAAI,aAAJ,EAAmB;AACtB,eAAO,UAAU,OAAV,EAAmB;AACtB,gBAAI,aAAa,QAAQ,aAAR,GAAwB,cAAc,IAAtC,CAAjB;AACA,gBAAI,OAAO,cAAc,YAAd,IAA8B,KAAzC;AACA,gBAAI,QAAQ,cAAc,YAAd,IAA8B,CAA1C;;AAEA,iBAAK,IAAI,IAAI,CAAb,EAAgB,IAAI,cAAc,SAAd,CAAwB,MAA5C,EAAoD,GAApD,EAAyD;AACrD,oBAAI,WAAW,cAAc,SAAd,CAAwB,CAAxB,CAAf;;AAEA,oBAAI,WAAW,IAAX,GAAkB,iBAAlB,MAAyC,SAAS,CAAT,EAAY,IAAZ,GAAmB,iBAAnB,EAA7C,EAAqF;AACjF,2BAAO,SAAS,CAAT,CAAP;AACA,4BAAQ,SAAS,CAAT,CAAR;AACA;AACH;AACJ;;AAED,mBAAO,CAAC,IAAI,aAAG,KAAH,CAAS,KAAb,CAAmB;AACvB,wBAAQ,IAAI,aAAG,KAAH,CAAS,MAAb,CAAoB;AACxB,2BAAO,IADiB;AAExB,2BAAO;AAFiB,iBAApB;AADe,aAAnB,CAAD,CAAP;AAMH,SArBD;AAsBH,KAvBM,MAuBA;AACH,eAAO,SAAP;AACH;AACJ;;;;;;;;;;;;;;;;;;;;;;;;AAwBD,SAAS,YAAT,CAAsB,OAAtB,EAA+B,YAA/B,EAA6C,aAA7C,EAA4D,aAA5D,EAA2E;AACvE;;AAEA,QAAI,aAAa,EAAjB;;AAEA,qBAAiB,OAAjB,EAA0B,YAA1B,EAAwC,aAAxC,EAAuD,aAAvD;;AAEA,QAAI,eAAe,sDAAnB;;AAEA,QAAI,OAAJ,EAAa;AACT,+BAAoB,eAAe,OAAnC,6CAAiF,UAAjF;AACH,KAFD,MAEO,IAAI,YAAJ,EAAkB;AACrB,uCAA6B,aAAa,KAA1C,8BAAwE,aAAa,KAArF;AACH,KAFM,MAEA,IAAI,aAAJ,EAAmB;AACtB,YAAI,UAAU,EAAd;AACA,mBAAW,MAAX;;AAFsB;AAAA;AAAA;;AAAA;AAItB,iCAAc,cAAc,SAA5B,8HAAuC;AAAA,oBAA9B,CAA8B;;AACnC,uEAAqD,EAAE,CAAF,CAArD,0BAA6E,eAAe,EAAE,CAAF,CAA5F,6CAAuI,UAAvI;AACH;AANqB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAOtB,mBAAW,4CAA0C,cAAc,WAAxD,gCACM,eAAe,cAAc,WADnC,6CACqF,UADrF,aAAX;AAEA,mBAAW,OAAX;;AAEA,eAAO,OAAP;AACH,KAZM,MAYA,IAAI,aAAJ,EAAmB;AACtB,YAAI,WAAU,EAAd;AACA,oBAAW,MAAX;AAFsB;AAAA;AAAA;;AAAA;AAGtB,kCAAe,cAAc,SAA7B,mIAAwC;AAAA,oBAA/B,EAA+B;;AACpC,4BAAW,4CAA0C,GAAG,CAAH,CAA1C,wCACe,GAAG,CAAH,CADf,8BAC6C,GAAG,CAAH,CAD7C,QAAX;AAEH;AANqB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAOtB,oBAAW,4CAA0C,cAAc,WAAxD,wCACe,cAAc,YAD7B,8BACkE,cAAc,YADhF,aAAX;AAEA,oBAAW,OAAX;;AAEA,eAAO,QAAP;AACH,KAZM,MAYA;AACH,eAAO,EAAP;AACH;AACJ;;;;;;;IAMK,iB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8CF,+BAAY,OAAZ,EAAqB;AAAA;;AACjB,YAAI,OAAO,QAAQ,OAAf,KAA2B,QAA/B,EAAyC;AACrC,kBAAM,0BAAN;AACH;;AAED,YAAI,cAAc,EAAlB;;;AAGA,YAAI,OAAO,QAAQ,KAAf,IAAwB,WAA5B,EAAyC;AACrC,oBAAQ,KAAR,GAAgB,YACZ,QAAQ,OADI,EACK,QAAQ,YADb,EAC2B,QAAQ,aADnC,EACkD,QAAQ,aAD1D,CAAhB;AAGA,0BAAc,aACV,QAAQ,OADE,EACO,QAAQ,YADf,EAC6B,QAAQ,aADrC,EACoD,QAAQ,aAD5D,CAAd;AAGH;;AAED,gBAAQ,MAAR,GAAiB,QAAO,QAAQ,MAAf,KAAyB,QAAzB,GAAoC,QAAQ,MAA5C,GAAqD,EAAtE;AACA,yBAAE,MAAF,CAAS,QAAQ,MAAjB,EAAyB,EAAC,QAAQ,MAAT,EAAiB,UAAU,QAAQ,OAAnC,EAAzB;;;;AAlBiB,yGAoBX,gDApBW,EAoBuC,OApBvC;;AAuBjB,cAAK,gBAAL,CAAsB,WAAtB;;AAEA,gBAAQ,QAAR,GAAmB,OAAO,QAAQ,QAAf,IAA2B,SAA3B,GAAuC,QAAQ,QAA/C,GAA0D,IAA7E;;AAEA,YAAI,QAAQ,QAAZ,EAAsB;AAClB,+BAAS,cAAT,QAA8B,UAAU,KAAV,EAAiB;AAC3C,uBAAO,yEAAuE,MAAM,aAAN,CAAvE,8CAAP;AAEH,aAHD;AAIH;AAhCgB;AAiCpB;;;;;;;;;;;;;;;;6CAYoB,M,EAAQ,S,EAAW;AACpC,8GAA2B,MAA3B,EAAmC,SAAnC;AACA,gBAAI,YAAY,IAAI,aAAG,IAAH,CAAQ,KAAZ,CAAkB,CAAC,OAAO,IAAR,EAAc,OAAO,IAArB,CAAlB,CAAhB;AACA,sBAAU,SAAV,CAAoB,KAAK,MAAzB,EAAiC,WAAjC;AACA,gBAAI,uBAAuB,UAAU,cAAV,EAA3B;AACA,gBAAI,aAAa,IAAI,aAAG,IAAH,CAAQ,KAAZ,CAAkB,CAAC,OAAO,IAAR,EAAc,OAAO,IAArB,CAAlB,CAAjB;AACA,uBAAW,SAAX,CAAqB,KAAK,MAA1B,EAAkC,WAAlC;AACA,gBAAI,wBAAwB,WAAW,cAAX,EAA5B;;AAEA,6BAAE,MAAF,CAAS,KAAK,aAAd,EACI;AACI,mBAAG,qBAAqB,CAArB,CADP;AAEI,mBAAG,sBAAsB,CAAtB,CAFP;AAGI,mBAAG,qBAAqB,CAArB,CAHP;AAII,mBAAG,sBAAsB,CAAtB;AAJP,aADJ;AAOH;;;;;;AAGL,GAAG,iBAAH,GAAuB,iBAAvB;kBACe,iB;;;;;;;;QC1DC,iC,GAAA,iC;QA0FA,oB,GAAA,oB;;AApWhB;;;;AACA;;;;;;;;;;;;;;;AACA,IAAM,KAAK,uBAAQ,yBAAR,CAAX;;;;;;;;;;;;;;;;AAgBA,SAAS,iBAAT,CAA2B,UAA3B,EAAuC,OAAvC,EAAgD;AAC5C;;AAEA,qBAAe,WAAW,CAAX,CAAf,SAAgC,WAAW,CAAX,CAAhC,SAAiD,WAAW,CAAX,CAAjD,SAAkE,OAAlE;AACH;;;;;;;AAOD,SAAS,UAAT,CAAoB,GAApB,EAAyB;AACrB,WAAO,OAAO,GAAP,EACF,OADE,CACM,IADN,EACY,OADZ,EAEF,OAFE,CAEM,IAFN,EAEY,QAFZ,EAGF,OAHE,CAGM,IAHN,EAGY,OAHZ,EAIF,OAJE,CAIM,IAJN,EAIY,MAJZ,EAKF,OALE,CAKM,IALN,EAKY,MALZ,CAAP;AAMH;;AAED,GAAG,UAAH,GAAgB,UAAhB;;IAGM,Y;;;;;;;AAOF,sBAAY,SAAZ,EAAuB,OAAvB,EAAgC;AAAA;;AAC5B,SAAK,SAAL,GAAiB,SAAjB;AACA,SAAK,OAAL,GAAe,OAAf;AACA,SAAK,OAAL,GAAe,SAAf;AACA,SAAK,UAAL,GAAkB,EAAlB;AACH,C;;IAGC,W;;;AACF,yBAAY,SAAZ,EAAuB,OAAvB,EAAgC;AAAA;;AAAA,oGACtB,SADsB,EACX,OADW;;AAE5B,gBAAQ,OAAK,SAAL,CAAe,MAAf,CAAR;AACI,iBAAK,SAAL;AACI,oBAAI,aAAa,kBAAkB,OAAK,SAAL,CAAe,KAAjC,EAAwC,OAAK,OAA7C,CAAjB;AACA,oBAAI,aAAa,kBAAkB,OAAK,SAAL,CAAe,OAAf,CAAuB,KAAzC,EAAgD,OAAK,OAArD,CAAjB;AACA,oBAAI,eAAe,OAAK,SAAL,CAAe,OAAf,CAAuB,KAA1C;AACA,oBAAI,SAAS,OAAK,SAAL,CAAe,IAA5B;;AAGA,uBAAK,OAAL,GAAe,IAAI,aAAG,KAAH,CAAS,KAAb,CAAmB;AAC9B,2BAAO,IAAI,aAAG,KAAH,CAAS,MAAb,CAAoB;AACvB,gCAAQ,MADe;AAEvB,8BAAM,IAAI,aAAG,KAAH,CAAS,IAAb,CAAkB;AACpB,mCAAO;AADa,yBAAlB,CAFiB;AAKvB,gCAAQ,IAAI,aAAG,KAAH,CAAS,MAAb,CAAoB,EAAC,OAAO,UAAR,EAAoB,OAAO,YAA3B,EAApB;AALe,qBAApB;AADuB,iBAAnB,CAAf;AASA,uBAAK,UAAL,sDAAmE,UAAnE;AACA;AACJ,iBAAK,SAAL;AACI,uBAAK,OAAL,GAAe,IAAI,aAAG,KAAH,CAAS,KAAb,CAAmB;AAC9B,2BAAO,IAAI,aAAG,KAAH,CAAS,IAAb,CAAkB,EAAC,gCAA8B,OAAK,SAAL,CAAe,WAAf,CAA/B,EAAlB;AADuB,iBAAnB,CAAf;AAGA,uBAAK,UAAL,8EAA2F,OAAK,SAAL,CAAe,WAAf,CAA3F;AACA;AACJ;AACI,wBAAQ,GAAR,CAAY,OAAK,SAAjB;AACA,sBAAM,+CAA+C,OAAK,SAAL,CAAe,MAAf,CAArD;AA3BR;AAF4B;AA+B/B;;;EAhCqB,Y;;IAmCpB,U;;;AACF,wBAAY,SAAZ,EAAuB,OAAvB,EAAgC;AAAA;;AAAA,mGACtB,SADsB,EACX,OADW;;AAE5B,gBAAQ,OAAK,SAAL,CAAe,MAAf,CAAR;AACI,iBAAK,SAAL;AACI,oBAAI,aAAa,kBAAkB,OAAK,SAAL,CAAe,KAAjC,EAAwC,OAAK,OAA7C,CAAjB;AACA,oBAAI,YAAY,OAAK,SAAL,CAAe,KAA/B;;AAEA,uBAAK,OAAL,GAAe,IAAI,aAAG,KAAH,CAAS,KAAb,CAAmB;AAC9B,4BAAQ,IAAI,aAAG,KAAH,CAAS,MAAb,CAAoB;AACxB,+BAAO,UADiB;;AAGxB,+BAAO;AAHiB,qBAApB;AADsB,iBAAnB,CAAf;;AAQA,uBAAK,UAAL;AACA,uBAAK,UAAL;AACA,uBAAK,UAAL,2BAAwC,UAAxC;AACA,uBAAK,UAAL;AACA,uBAAK,UAAL;AACA,uBAAK,UAAL;AACA,uBAAK,UAAL;AACA,uBAAK,UAAL;AACA,uBAAK,UAAL;AACA;AACJ;AACI,wBAAQ,GAAR,CAAY,OAAK,SAAjB;AACA,sBAAM,8CAA8C,OAAK,SAAL,CAAe,MAAf,CAApD;AAzBR;AAF4B;AA6B/B;;;EA9BoB,Y;;IAiCnB,a;;;AACF,2BAAY,SAAZ,EAAuB,OAAvB,EAAgC;AAAA;;AAAA,sGACtB,SADsB,EACX,OADW;;AAE5B,gBAAQ,OAAK,SAAL,CAAe,MAAf,CAAR;AACI,iBAAK,SAAL;AACI,oBAAI,aAAa,kBAAkB,OAAK,SAAL,CAAe,KAAjC,EAAwC,OAAK,OAA7C,CAAjB;AACA,oBAAI,aAAa,kBAAkB,OAAK,SAAL,CAAe,OAAf,CAAuB,KAAzC,EAAgD,OAAK,OAArD,CAAjB;AACA,oBAAI,eAAe,OAAK,SAAL,CAAe,OAAf,CAAuB,KAA1C;;AAEA,uBAAK,OAAL,GAAe,IAAI,aAAG,KAAH,CAAS,KAAb,CAAmB;AAC9B,4BAAQ,IAAI,aAAG,KAAH,CAAS,MAAb,CAAoB;AACxB,+BAAO,UADiB;;AAGxB,+BAAO;AAHiB,qBAApB,CADsB;AAM9B,0BAAM,IAAI,aAAG,KAAH,CAAS,IAAb,CAAkB;AACpB,+BAAO;AADa,qBAAlB;AANwB,iBAAnB,CAAf;;AAWA,uBAAK,UAAL;AACA,uBAAK,UAAL;AACA,uBAAK,UAAL,2BAAwC,UAAxC;AACA,uBAAK,UAAL,uBAAoC,UAApC;AACA,uBAAK,UAAL;AACA,uBAAK,UAAL;AACA,uBAAK,UAAL;AACA,uBAAK,UAAL;AACA,uBAAK,UAAL;AACA,uBAAK,UAAL;AACA;;AAEJ;AACI,wBAAQ,GAAR,CAAY,OAAK,SAAjB;AACA,sBAAM,6CAA6C,OAAK,SAAL,CAAe,MAAf,CAAnD;AA/BR;AAF4B;AAmC/B;;;EApCuB,Y;;IAuCtB,e,GACF,yBAAY,YAAZ,EAA0B;AAAA;;AACtB,SAAK,OAAL,GAAe,CAAC,OAAO,aAAa,aAAb,EAA4B,cAA5B,KAA+C,CAAtD,CAAD,IAA6D,GAA5E;AACA,SAAK,QAAL,GAAgB,aAAa,aAAb,EAA4B,UAA5B,CAAhB;AACA,SAAK,OAAL,GAAe,SAAf;AACA,SAAK,UAAL,GAAkB,EAAlB;AACH,C;;IAGC,Y;;;;;;;;;AAMF,0BAAY,YAAZ,EAA0B,WAA1B,EAAuC;AAAA;;AAAA,qGAC7B,YAD6B;;AAEnC,eAAK,MAAL,GAAc,OAAK,QAAL,CAAc,QAAd,CAAd;AACA,YAAI,YAAY,IAAI,WAAJ,CAAgB,OAAK,MAArB,EAA6B,OAAK,OAAlC,CAAhB;AACA,eAAK,OAAL,GAAe,UAAU,OAAzB;AACA,eAAK,UAAL,GAAkB,UAAU,UAA5B;AALmC;AAMtC;;;EAZsB,e;;IAerB,iB;;;;;;;;;AAMF,+BAAY,YAAZ,EAA0B,WAA1B,EAAuC;AAAA;;AAAA,0GAC7B,YAD6B;;AAEnC,eAAK,gBAAL,GAAwB,OAAK,QAAL,CAAc,kBAAd,CAAxB;AACA,eAAK,YAAL,GAAoB,OAAK,QAAL,CAAc,QAAd,CAApB;AACA,eAAK,aAAL,GAAqB,OAAK,QAAL,CAAc,eAAd,CAArB;;AAGA,YAAI,OAAK,aAAT,EAAwB;AACpB,gBAAI,YAAY,IAAI,WAAJ,CAAgB,OAAK,aAArB,EAAoC,OAAK,OAAzC,CAAhB;AACA,mBAAK,YAAL,GAAoB,UAAU,OAA9B;AACA,mBAAK,gBAAL,GAAwB,wCAAsC,WAAW,OAAK,QAAL,CAAc,cAAd,CAAX,CAAtC,eAA2F,UAAU,UAA7H;AACH,SAJD,MAIO;AACH,mBAAK,YAAL,GAAoB,SAApB;AACA,mBAAK,gBAAL,GAAwB,OAAxB;AACH;;AAED,eAAK,UAAL,GAAkB,EAAlB;AACA,eAAK,UAAL,GAAkB,EAAlB;AACA,eAAK,WAAL,GAAmB,EAAnB;AACA,eAAK,mBAAL,GAA2B,EAA3B;;AAnBmC;AAAA;AAAA;;AAAA;AAqBnC,iCAAsB,OAAK,gBAA3B,8HAA6C;AAAA,oBAApC,SAAoC;;AACzC,uBAAK,UAAL,CAAgB,IAAhB,CAAqB,UAAU,OAAV,CAArB;AACA,uBAAK,UAAL,CAAgB,IAAhB,CAAqB,UAAU,OAAV,CAArB;AACA,oBAAI,YAAY,IAAI,WAAJ,CAAgB,UAAU,MAA1B,EAAkC,OAAK,OAAvC,CAAhB;AACA,uBAAK,WAAL,CAAiB,IAAjB,CAAsB,wCAAsC,WAAW,UAAU,OAAV,CAAX,CAAtC,eAAgF,UAAU,UAAhH;AACA,uBAAK,mBAAL,CAAyB,UAAU,OAAV,CAAzB,IAA+C,UAAU,OAAzD;AACH;AA3BkC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AA6BnC,YAAI,cAAJ;;AAEA,eAAK,OAAL,GAAe,UAAU,OAAV,EAAmB,UAAnB,EAA+B;AAC1C,gBAAI,kBAAkB,QAAQ,aAAR,EAAtB;AACA,gBAAI,gBAAgB,gBAAgB,MAAM,YAAtB,CAApB;;AAEA,gBAAI,oBAAJ;AACA,gBAAI,MAAM,mBAAN,CAA0B,aAA1B,MAA6C,SAAjD,EAA4D;AACxD,8BAAc,CAAC,MAAM,mBAAN,CAA0B,aAA1B,CAAD,CAAd;AACH,aAFD,MAEO;AACJ,8BAAc,CAAC,MAAM,YAAP,CAAd;AACF;;AAED,mBAAO,WAAP;AACH,SAZD;;AAcA,YAAI,OAAK,gBAAL,KAA0B,IAA9B,EAAoC;AAChC,mBAAK,WAAL,CAAiB,IAAjB,CAAsB,OAAK,gBAA3B;AACH;;AAED,eAAK,UAAL,GAAkB,MAAlB;AAjDmC;AAAA;AAAA;;AAAA;AAkDnC,kCAAc,OAAK,WAAnB,mIAAgC;AAAA,oBAAvB,CAAuB;;AAC5B,uBAAK,UAAL,aAA0B,CAA1B;AACH;AApDkC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAqDnC,eAAK,UAAL,IAAmB,OAAnB;AArDmC;AAsDtC;;;EA5D2B,e;;;;;;;;;;;;;;;;AA+EzB,SAAS,iCAAT,CAA2C,YAA3C,EAAyD;AAC5D;;AACA,QAAI,WAAW,aAAa,aAAb,EAA4B,UAA5B,CAAf;AACA,QAAI,kBAAkB,IAAtB;;AAEA,YAAQ,SAAS,MAAT,CAAR;AACI,aAAK,QAAL;AACI,oBAAQ,aAAa,cAAb,CAAR;AACI,qBAAK,mBAAL;AACI,sCAAkB,IAAI,YAAJ,CAAiB,YAAjB,EAA+B,WAA/B,CAAlB;AACA;AACJ,qBAAK,sBAAL;AACI,sCAAkB,IAAI,YAAJ,CAAiB,YAAjB,EAA+B,UAA/B,CAAlB;AACA;AACJ,qBAAK,qBAAL;AACI,sCAAkB,IAAI,YAAJ,CAAiB,YAAjB,EAA+B,aAA/B,CAAlB;AACA;AACJ;AACI,4BAAQ,GAAR,CAAY,YAAZ;AACA,0BAAM,aAAa,cAAb,IAA+B,cAArC;AAZR;AAcA;AACJ,aAAK,aAAL;AACI,oBAAQ,aAAa,cAAb,CAAR;AACI,qBAAK,mBAAL;AACI,sCAAkB,IAAI,iBAAJ,CAAsB,YAAtB,EAAoC,WAApC,CAAlB;AACA;AACJ,qBAAK,sBAAL;AACI,sCAAkB,IAAI,iBAAJ,CAAsB,YAAtB,EAAoC,UAApC,CAAlB;AACA;AACJ,qBAAK,qBAAL;AACI,sCAAkB,IAAI,iBAAJ,CAAsB,YAAtB,EAAoC,aAApC,CAAlB;AACA;AACJ;AACI,4BAAQ,GAAR,CAAY,YAAZ;AACA,0BAAM,aAAa,cAAb,IAA+B,cAArC;AAZR;AAcA;AACJ;AACI,kBAAM,gCAAgC,SAAS,MAAT,CAAtC;AAlCR;;AAqCA,QAAI,mBAAmB,IAAvB,EAA6B;AACzB,eAAO,EAAC,OAAO,SAAR,EAAmB,QAAQ,EAA3B,EAAP;AACH,KAFD,MAEO;AACH,eAAO,EAAC,OAAO,gBAAgB,OAAxB,EAAiC,QAAQ,gBAAgB,UAAzD,EAAP;AACH;AACJ;;AAED,GAAG,iCAAH,GAAuC,iCAAvC;;;;;;;;AAQA,SAAS,oBAAT,CAA8B,SAA9B,EAAyC,SAAzC,EAAoD;;AAGhD,gBAAY,OAAO,SAAP,IAAoB,SAApB,GAAgC,SAAhC,GAA4C,KAAxD;AACA,QAAI,YAAY,UAAU,WAAV,CAAhB;AACA,QAAI,cAAc,UAAU,QAAV,CAAlB;AACA,QAAI,aAAa,EAAjB;;AAEA,QAAI,YAAY,MAAZ,IAAsB,CAA1B,EAA6B;AACzB,gGAAsF,YAAY,CAAZ,EAAe,WAAf,CAAtF;AACH,KAFD,MAEO;AACH,sBAAc,gFAAd;AACA,aAAK,IAAI,IAAI,CAAb,EAAgB,IAAI,YAAY,MAAhC,EAAwC,GAAxC,EAA6C;AACzC;AACA,kEAAoD,WAAW,YAAY,CAAZ,EAAe,OAAf,CAAX,CAApD;AACA,qGAAuF,YAAY,CAAZ,EAAe,WAAf,CAAvF;AACA;AACH;AACD,sBAAc,OAAd;AACH;;AAED,QAAI,CAAC,SAAL,EAAgB;AACZ,qBAAa,wCAAsC,SAAtC,eAA2D,UAAxE;AACH;;AAED,WAAO,UAAP;AACH;;;;;;;AAOM,SAAS,oBAAT,CAA8B,YAA9B,EAA4C;AAC/C;;AAEA,QAAI,gBAAgB,EAApB;;AAEA,QAAI,SAAS,aAAa,QAAb,CAAb;;AAEA,QAAI,OAAO,MAAP,IAAiB,CAArB,EAAwB;AACpB,yBAAiB,qBAAqB,OAAO,CAAP,CAArB,EAAgC,IAAhC,CAAjB;AACH,KAFD,MAEO;AACH,yBAAiB,MAAjB;AACA,aAAK,IAAI,IAAI,CAAb,EAAgB,IAAI,OAAO,MAA3B,EAAmC,GAAnC,EAAwC;AACpC,6BAAiB,SAAS,qBAAqB,OAAO,CAAP,CAArB,CAAT,GAA2C,OAA5D;AACH;AACD,yBAAiB,OAAjB;AACH;;AAED,WAAO,aAAP;AACH;;AAED,GAAG,oBAAH,GAA0B,oBAA1B;;;;;;;;;;;;;;ACxXA;;;;;;;;AACA,IAAM,KAAK,uBAAQ,WAAR,CAAX;;;;;;IAMM,kB;;;;;;;AAMF,gCAAY,OAAZ,EAAqB;AAAA;;AACjB,aAAK,IAAL,GAAY,SAAZ;AACA,aAAK,YAAL,GAAoB,KAApB;AACA,aAAK,QAAL,GAAgB,OAAhB;AACH;;;;;;;;;;;6BAOI,M,EAAQ;AACT,gBAAI,CAAC,KAAK,YAAV,EAAwB;AACpB,qBAAK,IAAL,GAAY,MAAZ;AACA,qBAAK,YAAL,GAAoB,IAApB;;AAEA,uBAAO,KAAP;AACH;;AAED,mBAAO,IAAP;AACH;;;;;;;;;;;;;;;qCAsBY;AACT,gBAAI,CAAC,KAAK,WAAV,EAAuB;AACnB,oBAAI,MAAS,KAAK,QAAd,4BAAJ;AACA,sBAAM,GAAN;AACA,wBAAQ,GAAR,CAAY,GAAZ;AACA,sBAAM,GAAN;AACH;AACJ;;;;;;;;oCAKU;AACP,iBAAK,UAAL;AACH;;;4BA9BS;AACN,mBAAO,KAAK,IAAZ;AACH;;;;;;;;;4BAMiB;AACd,mBAAO,KAAK,YAAZ;AACH;;;;;;AAsBL,GAAG,kBAAH,GAAwB,kBAAxB;kBACe,kB;;;;;;;;;ACvEf;;;;;;;;;;kBAMe,0B;;;;;;;;;;;;;;;ACLf;;;;AACA;;;;AACA;;IAAY,Y;;AACZ;;;;AACA;;;;;;;;;;;;;;;;AACA,IAAM,KAAK,uBAAQ,WAAR,CAAX;;;;;;;IAMM,U;;;;;;;AAKF,0BAAc;AAAA;;AAAA,mGACJ,UADI;;AAEV,eAAK,cAAL,GAAsB,EAAtB;AACA,eAAK,cAAL,GAAsB,EAAtB;AACA,eAAK,SAAL,GAAiB,EAAjB;AACA,eAAK,YAAL,GAAoB,EAApB;;AAEA,eAAK,iBAAL,GAAyB,EAAzB;AACA,eAAK,uBAAL,GAA+B,EAA/B;AACA,eAAK,sBAAL,GAA8B,EAA9B;AACA,eAAK,uBAAL,GAA+B,EAA/B;AACA,eAAK,uBAAL,GAA+B,EAA/B;;AAEA,eAAK,UAAL,GAAkB,SAAlB;AACA,eAAK,UAAL,GAAkB,SAAlB;AAdU;AAeb;;;;;;;;;;6BAMI,M,EAAQ;AACT,2FAAe,MAAf,GAAwB;AACpB;AACH;;AAED,gBAAI,QAAQ,IAAZ;;AAEA,iBAAK,GAAL,CAAS,OAAT,GAAmB,EAAnB,CAAsB,CAAC,eAAD,EAAkB,mBAAlB,CAAtB,EAA8D,UAAU,CAAV,EAAa;;AAEvE,sBAAM,gBAAN;;;AAGA,qBAAK,IAAI,IAAI,CAAb,EAAgB,IAAI,MAAM,SAAN,CAAgB,MAApC,EAA4C,GAA5C,EAAiD;AAC7C,0BAAM,cAAN,CAAqB,MAAM,SAAN,CAAgB,CAAhB,CAArB,EAAyC,CAAzC,EAA4C,EAAE,IAA9C;AACH;;;AAGD,qBAAK,IAAI,KAAI,CAAb,EAAgB,KAAI,MAAM,iBAAN,CAAwB,MAA5C,EAAoD,IAApD,EAAyD;AACrD,0BAAM,mBAAN,CAA0B,EAA1B,EAA6B,EAAE,IAA/B;AACH;AACJ,aAbD;AAcH;;;2CAEkB;AACf,gBAAI,UAAU,KAAK,GAAL,CAAS,OAAT,EAAd;AACA,iBAAK,UAAL,GAAkB,QAAQ,OAAR,EAAlB;;AAEA,gBAAI,cAAc,QAAQ,eAAR,CAAwB,KAAK,GAAL,CAAS,OAAT,EAAxB,CAAlB;;AAEA,iBAAK,UAAL,GAAkB;AACd,sBAAM,YAAY,CAAZ,CADQ;AAEd,sBAAM,YAAY,CAAZ,CAFQ;AAGd,sBAAM,YAAY,CAAZ,CAHQ;AAId,sBAAM,YAAY,CAAZ;AAJQ,aAAlB;AAMH;;;;;;;;;;;;;;;;uCAmBc,G,EAAK,K,EAAO,S,EAAW;AAAA;;AAElC,gBAAI,aAAa,eAAb,CAA6B,GAA7B,KAAqC,aAAa,eAAb,CAA6B,KAA7B,CAAzC,EAA8E;AAC1E,sBAAM,6BAAN;AACH,aAFD,MAEO,IAAI,aAAa,iBAAb,CAA+B,GAA/B,KAAuC,aAAa,eAAb,CAA6B,KAA7B,CAA3C,EAAgF;AACnF,wBAAQ,KAAK,SAAL,CAAe,OAAf,CAAuB,GAAvB,CAAR;AACH,aAFM,MAEA,IAAI,aAAa,eAAb,CAA6B,GAA7B,KAAqC,aAAa,iBAAb,CAA+B,KAA/B,CAAzC,EAAgF;AACnF,sBAAM,KAAK,SAAL,CAAe,KAAf,CAAN;AACH;;;AAGD,gBAAI,KAAK,cAAL,CAAoB,KAApB,KAA8B,IAAlC,EAAwC;AACpC,6BAAa,KAAK,cAAL,CAAoB,KAApB,CAAb;AACA,qBAAK,cAAL,CAAoB,KAApB,IAA6B,IAA7B;AACH;;;AAGD,gBAAI,KAAK,cAAL,CAAoB,KAApB,KAA8B,IAA9B,IAAsC,KAAK,cAAL,CAAoB,KAApB,KAA8B,CAAxE,EAA2E;AACvE,qBAAK,cAAL,CAAoB,KAApB,EAA2B,KAA3B;AACA,qBAAK,cAAL,CAAoB,KAApB,IAA6B,IAA7B;AACH;;;AAGD,gBAAI,eAAe,wBAAY,CAAE,CAAjC;;AAEA,gBAAI,IAAI,aAAJ,CAAkB,KAAK,UAAvB,EAAmC,SAAnC,CAAJ,EAAmD;AAAA;AAC/C,wBAAI,oBAAJ,CAAyB,OAAK,UAA9B,EAA0C,OAAK,UAA/C;;AAEA,wBAAI,cAAJ;;AAEA,mCAAe,wBAAY;AACvB,iCAAS,aAAT,CAAuB,QAAvB,EAAiC,QAAjC,EAA2C;AACvC,gCAAI,aAAa,IAAjB;AACA,iCAAK,cAAL,CAAoB,QAApB,IAAgC,iBAAE,GAAF,CAC5B,SAAS,GADmB,EAE5B,SAAS,aAFmB,EAG5B,UAAU,CAAV,EAAa;;;;AAIT,yCAAS,eAAT,CAAyB,CAAzB;AACA,yCAAS,YAAT;AACH,6BAT2B,EASzB,MATyB,EASjB,IATiB,CAU5B,UAAU,KAAV,EAAiB;AACb,oCAAI,MAAM,UAAN,IAAoB,OAAxB,EAAiC;AAC7B,4CAAQ,GAAR,CAAY,QAAZ;AACA,4CAAQ,GAAR,CAAY,SAAS,GAArB;AACA,4CAAQ,GAAR,CAAY,SAAS,aAArB;AACH;AACJ,6BAhB2B,EAgBzB,MAhByB,CAiB5B,YAAY;AACR,2CAAW,cAAX,CAA0B,QAA1B,IAAsC,IAAtC;AACA,2CAAW,cAAX,CAA0B,QAA1B,IAAsC,IAAtC;AACH,6BApB2B,CAAhC;AAqBH;AACD,sCAAc,IAAd,CAAmB,KAAnB,EAA0B,GAA1B,EAA+B,KAA/B;AACH,qBA1BD;AAL+C;AAgClD,aAhCD,MAgCO;AACH,oBAAI,KAAJ;AACH;AACD,iBAAK,cAAL,CAAoB,KAApB,IAA6B,WAAW,YAAX,EAAyB,IAAI,aAA7B,CAA7B;AACH;;;;;;;;;;;4CAQmB,G,EAAK,S,EAAW,U,EAAY;;AAE5C,gBAAI,OAAO,GAAP,IAAc,WAAd,IAA6B,OAAO,UAAP,IAAqB,WAAtD,EAAkE;AAC9D,sBAAM,qDAAN;AACH;;AAED,gBAAI,OAAO,GAAP,KAAe,QAAnB,EAA4B;AACxB,sBAAM,KAAK,iBAAL,CAAuB,OAAvB,CAA+B,KAAK,uBAAL,CAA6B,UAA7B,CAA/B,CAAN;AACH;;AAED,gBAAI,MAAM,CAAV,EAAY;AACR,wBAAQ,GAAR,CAAY,oBAAZ;;AAEA;AACH;;;AAGD,gBAAI,KAAK,uBAAL,CAA6B,GAA7B,KAAqC,IAAzC,EAA+C;AAC3C,6BAAa,KAAK,uBAAL,CAA6B,GAA7B,CAAb;AACA,qBAAK,uBAAL,CAA6B,GAA7B,IAAoC,IAApC;AACH;;AAED,gBAAI,MAAM,KAAK,uBAAL,CAA6B,GAA7B,CAAV;AACA,gBAAI,UAAU,KAAK,iBAAL,CAAuB,GAAvB,CAAd;;AAEA,gBAAI,QAAQ,IAAZ;;AAEA,gBAAI,IAAI,SAAJ,CAAI,GAAY;AAChB,oBAAI,QAAQ,IAAZ,EAAkB;AACd,4BAAQ,IAAR,CAAa,GAAb,EAAkB,MAAM,UAAxB,EAAoC,MAAM,UAA1C,EAAsD,SAAtD;AACH,iBAFD,MAEO;AACH,4BAAQ,MAAM,UAAd,EAA0B,MAAM,UAAhC,EAA4C,SAA5C;AACH;AACJ,aAND;;AAQA,iBAAK,uBAAL,CAA6B,GAA7B,IAAoC,WAAW,CAAX,EAAc,KAAK,sBAAL,CAA4B,GAA5B,CAAd,CAApC;AACH;;;;;;;;;;uCAOc,G,EAAK,Y,EAAc;AAC9B,gBAAI,KAAK,SAAL,CAAe,OAAf,CAAuB,GAAvB,IAA8B,CAAC,CAAnC,EAAsC;AAClC,wBAAQ,GAAR,CAAY,mBAAmB,IAAI,IAAvB,GAA8B,cAA1C;;AAEA;AACH;AACD,iBAAK,UAAL;;AAEA,iBAAK,cAAL,CAAoB,IAApB,CAAyB,IAAzB;AACA,iBAAK,cAAL,CAAoB,IAApB,CAAyB,IAAzB;AACA,iBAAK,SAAL,CAAe,IAAf,CAAoB,GAApB;AACA,iBAAK,YAAL,CAAkB,IAAI,EAAtB,IAA4B,GAA5B;;AAEA,2BAAe,OAAO,YAAP,IAAuB,SAAvB,GAAmC,YAAnC,GAAkD,IAAjE;;AAEA,gBAAI,YAAJ,EAAkB;AACd,oBAAI,KAAK,UAAL,KAAoB,SAAxB,EAAmC;AAC/B,yBAAK,gBAAL;AACH;AACD,qBAAK,cAAL,CAAoB,GAApB,EAAyB,KAAK,SAAL,CAAe,MAAf,GAAwB,CAAjD;AACH;AACJ;;;;;;;;;;;;;;;;;;;;;;;;;oCAsBW,I,EAAM,O,EAAS,K,EAAO,Y,EAAc,U,EAAY;;AAExD,gBAAI,KAAK,iBAAL,CAAuB,OAAvB,CAA+B,IAA/B,IAAuC,CAAC,CAA5C,EAA+C;AAC3C,wBAAQ,GAAR,CAAY,yCAAZ;;AAEA;AACH;AACD,iBAAK,UAAL;AACA,gBAAI,CAAC,UAAL,EAAgB;AACZ,6BAAa,yBAAb;AACH;;AAED,iBAAK,iBAAL,CAAuB,IAAvB,CAA4B,IAA5B;AACA,iBAAK,uBAAL,CAA6B,UAA7B,IAA2C,IAA3C;AACA,iBAAK,sBAAL,CAA4B,IAA5B,CAAiC,OAAO,KAAP,IAAgB,QAAhB,GAA2B,KAA3B,GAAmC,EAApE;AACA,iBAAK,uBAAL,CAA6B,IAA7B,CAAkC,aAAa,iBAAb,CAA+B,OAA/B,IAA0C,OAA1C,GAAoD,IAAtF;AACA,iBAAK,uBAAL,CAA6B,IAA7B,CAAkC,IAAlC;;AAEA,2BAAe,OAAO,YAAP,IAAuB,SAAvB,GAAmC,YAAnC,GAAkD,IAAjE;;AAEA,gBAAI,YAAJ,EAAkB;AACd,oBAAI,KAAK,UAAL,KAAoB,SAAxB,EAAmC;AAC/B,yBAAK,gBAAL;AACH;AACD,qBAAK,mBAAL,CAAyB,KAAK,iBAAL,CAAuB,MAAvB,GAAgC,CAAzD;AACH;AACJ;;;4BAnMe;AACZ,gBAAI,CAAC,KAAK,UAAV,EAAsB;AAClB,qBAAK,gBAAL;AACH;;AAED,mBAAO,KAAK,UAAZ;AACH;;;;;;AAgML,GAAG,UAAH,GAAgB,UAAhB;kBACe,U;;;;;;;;;ACrRf;;;;;;;;;;kBAMe,2B;;;;;;;;;;;;;;;;;ACNf;;;;AACA;;;;AACA;;;;AACA;;;;AACA;;;;;;;;;;;;AAGA,IAAM,KAAK,uBAAQ,WAAR,CAAX;;IAGM,uB;;;;;;;;;;;AAUF,qCAAY,OAAZ,EAAqB,KAArB,EAA4B,UAA5B,EAAwC,cAAxC,EAAwD,aAAxD,EAAuE;AAAA;;AACnE,aAAK,OAAL,GAAe,OAAf;AACA,aAAK,KAAL,GAAa,KAAb;AACA,aAAK,UAAL,GAAkB,UAAlB;AACA,aAAK,cAAL,GAAsB,cAAtB;AACA,aAAK,YAAL,GAAoB,EAApB;AACA,aAAK,aAAL,GAAqB,OAAO,aAAP,IAAwB,QAAxB,GAAmC,aAAnC,GAAmD,SAAxE;AACH;;;;4BAEe;AACZ,gBAAI,OAAO,KAAK,aAAZ,IAA6B,QAAjC,EAA2C;AACvC,uBAAO,KAAK,aAAZ;AACH,aAFD,MAEO;AACH,uBAAO,KAAK,KAAL,CAAW,IAAlB;AACH;AACJ;;;;;;;;;;;;IAOC,W;;;;;;;;;;;;;;;;;;;;AAkBF,2BAAc;AAAA;;AAAA,mGACJ,WADI;;AAEV,cAAK,iBAAL,GAAyB,EAAzB;AACA,cAAK,mBAAL,GAA2B,EAA3B;;;;;;AAMA,cAAK,eAAL,GAAuB,EAAvB;AACA,cAAK,iBAAL,GAAyB,EAAzB;AACA,cAAK,wBAAL,GAAgC,EAAhC;AACA,cAAK,gBAAL,GAAwB,SAAxB;AACA,cAAK,cAAL,GAAsB,SAAtB;AACA,cAAK,aAAL,GAAqB,SAArB;AACA,cAAK,aAAL,GAAqB,SAArB;AACA,cAAK,gBAAL,GAAwB,EAAxB;AACA,cAAK,qBAAL,GAA6B,EAA7B;AACA,cAAK,kBAAL,GAA0B,EAA1B;;;;AAIA,cAAK,sBAAL,GAA8B,EAA9B;;;;;;AAMA,cAAK,qBAAL,GAA6B,EAA7B;;AAEA,cAAK,UAAL,GAAkB,KAAlB;AACA,cAAK,gBAAL,GAAwB,IAAxB;;;;;;AAMA,cAAK,6BAAL,GAAqC,EAArC;;AAEA,cAAK,kBAAL,GAA0B,CAAC,CAA3B;AACA,cAAK,mBAAL,GAA2B,CAA3B;;AAxCU;AA0Cb;;;;;;;;;;6BAMI,M,EAAQ;AAAA;;AACT,4FAAe,MAAf,GAAwB;AACpB;AACH;AACD,gBAAI,OAAO,sBAAE,MAAM,KAAK,GAAL,CAAS,SAAT,EAAR,CAAX;;AAEA,iBAAK,MAAL,CACI,2BACA,0CADA,GAEA,mCAFA,GAGA,QAJJ;;AAOA,iBAAK,gBAAL,GAAwB,KAAK,IAAL,CAAU,WAAV,CAAxB;AACA,iBAAK,cAAL,GAAsB,KAAK,IAAL,CAAU,gBAAV,CAAtB;AACA,iBAAK,aAAL,GAAqB,KAAK,IAAL,CAAU,kBAAV,CAArB;;AAEA,iBAAK,aAAL,GAAqB,IAAI,aAAG,OAAP,CAAe;AAChC,yBAAS,KAAK,gBAAL,CAAsB,CAAtB,CADuB;AAEhC,yBAAS,IAFuB;AAGhC,kCAAkB;AACd,8BAAU;AADI;AAHc,aAAf,CAArB;;AAQA,iBAAK,IAAL,CAAU,UAAV,CAAqB,KAAK,aAA1B;;AAEA,iBAAK,aAAL,CAAmB,KAAnB,CAAyB,YAAM;AAC3B,uBAAK,UAAL;AACH,aAFD;;;AAKA,iBAAK,IAAL,CAAU,EAAV,CAAa,aAAb,EAA4B,UAAC,GAAD,EAAS;AACjC,uBAAK,UAAL;AACA,uBAAK,gBAAL,GAAwB,IAAI,UAA5B;;AAEA,oBAAI,OAAK,qBAAL,CAA2B,MAA3B,GAAoC,CAAxC,EAA2C;AACvC,wBAAI,cAAc;AACd,kCAAU,IAAI,UAAJ,CAAe,IAAf,CAAoB,GAApB,CADI;AAEd,sCAAc,mBAFA;AAGd,gCAAQ,KAHM;AAId,4BAAI,OAAK,IAAL,CAAU,OAAV,GAAoB,aAApB,GAAoC,OAApC,GAA8C,KAA9C,CAAoD,GAApD,EAAyD,CAAzD,CAJU;AAKd,mCAAW,OAAK,IAAL,CAAU,OAAV,GAAoB,eAApB,CAAoC,OAAK,IAAL,CAAU,OAAV,EAApC,EAAyD,IAAzD,CAA8D,GAA9D,CALG;AAMd,sCAAc,OAAK,IAAL,CAAU,OAAV,GAAoB,IAApB,CAAyB,GAAzB,IAAgC,KANhC;AAOd,wCAAgB,IAPF;AAQd,mCAAW,EARG;AASd,2BAAG;AATW,qBAAlB;;AADuC;AAAA;AAAA;;AAAA;AAavC,6CAAc,OAAK,qBAAnB,8HAA0C;AAAA,gCAAjC,CAAiC;;AACtC,8BAAE,YAAF,CAAe,WAAf,EAA4B,OAAK,qBAAL,CAA2B,EAAE,EAA7B,CAA5B;AACH;AAfsC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAgB1C;;AAED,oBAAI,0BAA0B,OAAK,gBAAL,CAAsB,IAAI,KAA1B,CAA9B;;;;;;AAMA,uBAAK,6BAAL,GAAqC,EAArC;AACA,uBAAK,kBAAL,GAA0B,CAAC,CAA3B;;AAEA,qBAAK,IAAI,IAAI,CAAb,EAAgB,IAAI,wBAAwB,MAA5C,EAAoD,GAApD,EAAyD;AACrD,wBAAI,UAAU,wBAAwB,CAAxB,CAAd;;AAEA,wBAAI,QAAQ,QAAQ,OAAR,CAAgB,aAAhB,EAAZ;;AAEA,wBAAI,uBAAuB,OAAK,wBAAL,CAA8B,QAAQ,UAAtC,EAAkD,KAAlD,EAAyD,OAAK,cAA9D,CAA3B;;;AAGA,wBAAI,yBAAyB,KAA7B,EAAoC;;AAEnC,qBAFD,MAEO,IAAI,OAAO,oBAAP,IAA+B,QAAnC,EAA6C;AAChD,oCAAQ,YAAR,GAAuB,oBAAvB;AACA,mCAAK,6BAAL,CAAmC,IAAnC,CAAwC,OAAxC;AACH,yBAHM,MAGA;AACH,oCAAQ,cAAR,CAAuB,SAAvB,GAAmC,UAAnC,CAA8C,QAAQ,OAAtD;AACH;AACJ;;AAED,uBAAK,mBAAL,GAA2B,OAAK,6BAAL,CAAmC,MAA9D;;AAEA,uBAAK,kBAAL,GAA0B,CAAC,CAA3B;;AAEA,oBAAI,YAAY,4BAAhB;AACA,6BAAa,gEAAb;AACA,6BAAa,4DAAb;AACA;AACA;AACA,gGAA8E,OAAK,mBAAnF;AACA;AACA;AACA,6BAAa,QAAb;AACA,6BAAa,8BAAb;;AAEA,6BAAa,QAAb;;AAEA,uBAAK,cAAL,CAAoB,IAApB,CAAyB,SAAzB;;AAEA,uBAAK,cAAL,CAAoB,IAApB,CAAyB,iBAAzB,EAA4C,KAA5C,CAAkD,YAAM;AACpD,wBAAI,OAAK,mBAAL,IAA4B,CAAhC,EAAmC;AAC/B;AACH;;AAED,wBAAI,OAAK,kBAAL,IAA2B,CAA/B,EAAkC;AAC9B,+BAAK,kBAAL,GAA0B,OAAK,mBAAL,GAA2B,CAArD;AACH,qBAFD,MAEO;AACH,+BAAK,kBAAL;AACH;AACD,2BAAK,kBAAL;AACH,iBAXD;;AAaA,oBAAI,YAAY,OAAK,cAAL,CAAoB,IAApB,CAAyB,aAAzB,CAAhB;;AAEA,0BAAU,KAAV,CAAgB,YAAM;AAClB,wBAAI,OAAK,mBAAL,IAA4B,CAA5B,IAAiC,OAAK,kBAAL,GAA0B,CAAC,CAAhE,EAAmE;AAC/D;AACH;;AAED,wBAAI,OAAK,kBAAL,IAA2B,OAAK,mBAAL,GAA2B,CAA1D,EAA6D;AACzD,+BAAK,kBAAL,GAA0B,CAA1B;AACH,qBAFD,MAEO;AACH,+BAAK,kBAAL;AACH;AACD,2BAAK,kBAAL;AACH,iBAXD;;AAcA,oBAAI,OAAK,mBAAL,GAA2B,CAA/B,EAAkC;AAC9B,8BAAU,OAAV,CAAkB,OAAlB;AACA,2BAAK,aAAL,CAAmB,WAAnB,CAA+B,OAAK,gBAApC;AACA,2BAAK,cAAL,CAAoB,SAApB,CAA8B,CAA9B;AACA,2BAAK,UAAL,GAAkB,IAAlB;AACH;AACJ,aAvGD;;;AA0GA,iBAAK,IAAL,CAAU,EAAV,CAAa,aAAb,EAA4B,UAAC,CAAD,EAAO;AAC/B,oBAAI,EAAE,QAAN,EAAgB;AACZ;AACH;AACD,oBAAI,QAAQ,OAAK,GAAL,CAAS,aAAT,CAAuB,EAAE,aAAzB,CAAZ;AACA,oBAAI,MAAM,OAAK,GAAL,CAAS,iBAAT,CAA2B,KAA3B,EAAkC,UAAC,YAAD,EAAkB;AAAA;AAAA;AAAA;;AAAA;AAC1D,8CAAoB,OAAK,iBAAzB,mIAA4C;AAAA,gCAAnC,OAAmC;;AACxC,gCAAI,gBAAgB,OAApB,EAA6B;AACzB,uCAAO,IAAP;AACH;AACJ;AALyD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAO1D,2BAAO,KAAP;AACH,iBARS,CAAV;AASA,uBAAK,GAAL,CAAS,gBAAT,GAA4B,KAA5B,CAAkC,MAAlC,GAA2C,MAAM,SAAN,GAAkB,EAA7D;AACH,aAfD;AAgBH;;;;;;;;;6CAMoB;AACjB,gBAAI,0BAA0B,KAAK,cAAL,CAAoB,IAApB,CAAyB,4BAAzB,CAA9B;AACA,gBAAI,cAAc,KAAK,cAAL,CAAoB,IAApB,CAAyB,iBAAzB,CAAlB;AACA,gBAAI,iBAAiB,KAAK,cAAL,CAAoB,IAApB,CAAyB,2BAAzB,CAArB;AACA,iBAAK,cAAL;AACA,gBAAI,aAAa,KAAK,6BAAL,CAAmC,KAAK,kBAAxC,CAAjB;AACA,oCAAwB,IAAxB,CAA6B,CAAC,KAAK,kBAAL,GAA0B,CAA3B,EAA8B,OAA9B,EAA7B;AACA,2BAAe,IAAf,CAAoB,WAAW,SAA/B;AACA,wBAAY,IAAZ,CAAiB,WAAW,YAA5B;AACA,uBAAW,cAAX,CAA0B,SAA1B,GAAsC,UAAtC,CAAiD,WAAW,OAA5D;AATiB;AAAA;AAAA;;AAAA;AAUjB,sCAAc,KAAK,sBAAnB,mIAA2C;AAAA,wBAAlC,CAAkC;;AACvC,sBAAE,KAAK,cAAP;AACH;AAZgB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAapB;;;;;;;;;;;;kDAUyB,O,EAAS,G,EAAK,Y,EAAc,Q,EAAU;;AAE5D,gBAAI,kBAAkB,IAAI,uBAAJ,CAClB,OADkB,EACT,GADS,EACJ,KAAK,mBADD,EACsB,KAAK,qBAAL,CAA2B,IAAI,EAA/B,CADtB,EAC0D,QAD1D,CAAtB;AAGA,4BAAgB,YAAhB,GAA+B,YAA/B;;AAEA,iBAAK,6BAAL,CAAmC,IAAnC,CAAwC,eAAxC;AACA,iBAAK,mBAAL;;AAEA,kCAAE,uBAAF,EAA2B,IAA3B,CAAgC,KAAK,mBAAL,CAAyB,OAAzB,EAAhC;;AAEA,gBAAI,CAAC,KAAK,UAAV,EAAsB;AAClB,qBAAK,cAAL,CAAoB,IAApB,CAAyB,aAAzB,EAAwC,OAAxC,CAAgD,OAAhD;;AAEA,qBAAK,aAAL,CAAmB,WAAnB,CAA+B,KAAK,gBAApC;AACA,qBAAK,cAAL,CAAoB,SAApB,CAA8B,CAA9B;AACA,qBAAK,UAAL,GAAkB,IAAlB;AACH;AACJ;;;;;;;;;;;yCAQgB,K,EAAO;AAAA;;AACpB,gBAAI,0BAA0B,EAA9B;AACA,iBAAK,GAAL,CAAS,qBAAT,CAA+B,KAA/B,EAAsC,UAAC,OAAD,EAAU,KAAV,EAAoB;AACtD,oBAAI,WAAW,OAAK,iBAAL,CAAuB,OAAvB,CAA+B,KAA/B,CAAf;;AAEA,oBAAI,WAAW,CAAC,CAAhB,EAAmB;AACf,4CAAwB,IAAxB,CAA6B,IAAI,uBAAJ,CACzB,OADyB,EAChB,OAAK,eAAL,CAAqB,QAArB,CADgB,EACgB,QADhB,EAC0B,OAAK,gBAAL,CAAsB,QAAtB,CAD1B,CAA7B;AAEH;AACJ,aAPD;;AASA,mBAAO,uBAAP;AACH;;;qCAEY;AACT,iBAAK,UAAL;AACA,iBAAK,UAAL,GAAkB,KAAlB;AACA,iBAAK,aAAL,CAAmB,WAAnB,CAA+B,SAA/B;AACA,iBAAK,aAAL,CAAmB,CAAnB,EAAsB,IAAtB;AACA,iBAAK,cAAL;AACA,iBAAK,cAAL,CAAoB,IAApB,CAAyB,EAAzB;;AAEA,mBAAO,KAAP;AACH;;;;;;;;;gDAMuB,W,EAAa;AACjC,iBAAK,sBAAL,CAA4B,IAA5B,CAAiC,WAAjC;AACH;;;;;;;;;;;;;;;uCAYc,G,EAAK,c,EAAgB;AAChC,iBAAK,UAAL;;AAEA,6BAAiB,kBAAkB,EAAnC;AACA,2BAAe,KAAf,GAAuB,eAAe,KAAf,IAAwB,qBAA/C;AACA,2BAAe,KAAf,GAAuB,eAAe,KAAf,IAAwB,EAA/C;;AAEA,gBAAI,iBAAJ;;AAEA,gBAAI,eAAe,OAAnB,EAA4B;AACxB,2BAAW,eAAe,OAA1B;AACH,aAFD,MAEO;AACH,2BAAW,IAAI,aAAG,KAAH,CAAS,KAAb,CAAmB;AAC1B,4BAAQ,IAAI,aAAG,KAAH,CAAS,MAAb,CAAoB;AACxB,+BAAO,eAAe,KADE;AAExB,+BAAO,eAAe;AAFE,qBAApB,CADkB;AAK1B,2BAAO,IAAI,aAAG,KAAH,CAAS,MAAb,CAAoB;AACvB,gCAAQ,CADe;AAEvB,8BAAM,IAAI,aAAG,KAAH,CAAS,IAAb,CAAkB,EAAC,OAAO,eAAe,KAAvB,EAAlB,CAFiB;AAGvB,gCAAQ,IAAI,aAAG,KAAH,CAAS,MAAb,CAAoB,EAAC,OAAO,eAAe,KAAvB,EAA8B,OAAO,CAArC,EAApB;AAHe,qBAApB,CALmB;AAU1B,0BAAM,IAAI,aAAG,KAAH,CAAS,IAAb,CAAkB;AACpB,+BAAO,eAAe;AADF,qBAAlB;AAVoB,iBAAnB,CAAX;AAcH;;AAED,gBAAI,iBAAiB,IAAI,aAAG,KAAH,CAAS,MAAb,CACjB;AACI,wBAAQ,IAAI,aAAG,MAAH,CAAU,MAAd,EADZ;AAEI,uBAAO,QAFX;AAGI,wBAAQ;AAHZ,aADiB,CAArB;;AAQA,iBAAK,gBAAL,CAAsB,IAAtB,CAA2B,cAA3B;AACA,iBAAK,qBAAL,CAA2B,IAAI,EAA/B,IAAqC,cAArC;AACA,iBAAK,GAAL,CAAS,QAAT,CAAkB,cAAlB;;AAEA,mBAAO,cAAP;AACH;;;;;;;;;;;;;;;;;;;;;;;uCAoBc,G,EAAK,oB,EAAsB,c,EAAgB;AACtD,gBAAI,iBAAiB,KAAK,cAAL,CAAoB,GAApB,EAAyB,cAAzB,CAArB;AACA,iBAAK,iBAAL,CAAuB,IAAvB,CAA4B,IAAI,EAAhC;AACA,iBAAK,mBAAL,CAAyB,IAAzB,CAA8B,IAAI,IAAlC;AACA,iBAAK,eAAL,CAAqB,IAArB,CAA0B,GAA1B;AACA,iBAAK,iBAAL,CAAuB,IAAvB,CAA4B,IAAI,OAAhC;AACA,iBAAK,wBAAL,CAA8B,IAA9B,CAAmC,oBAAnC;;AAEA,mBAAO,cAAP;AACH;;;;;;;;;0CAMiB,G,EAAK;AACnB,gBAAI,MAAM,KAAK,iBAAL,CAAuB,OAAvB,CAA+B,IAAI,EAAnC,CAAV;;AAEA,gBAAI,MAAM,CAAC,CAAX,EAAc;AACV,qBAAK,iBAAL,CAAuB,MAAvB,CAA8B,GAA9B,EAAmC,CAAnC;AACA,qBAAK,mBAAL,CAAyB,MAAzB,CAAgC,GAAhC,EAAqC,CAArC;AACA,qBAAK,eAAL,CAAqB,MAArB,CAA4B,GAA5B,EAAiC,CAAjC;AACA,qBAAK,iBAAL,CAAuB,MAAvB,CAA8B,GAA9B,EAAmC,CAAnC;AACA,qBAAK,wBAAL,CAA8B,MAA9B,CAAqC,GAArC,EAA0C,CAA1C;AACA,qBAAK,gBAAL,CAAsB,MAAtB,CAA6B,GAA7B,EAAkC,CAAlC;AACA,uBAAO,KAAK,qBAAL,CAA2B,IAAI,EAA/B,CAAP;AACH;AACJ;;;;;;;;;;;;;;2CAWkB,G,EAAK,c,EAAgB;AACpC,gBAAI,iBAAiB,KAAK,cAAL,CAAoB,GAApB,EAAyB,cAAzB,CAArB;AACA,iBAAK,qBAAL,CAA2B,IAA3B,CAAgC,GAAhC;;AAEA,mBAAO,cAAP;AACH;;;yCAEgB;AACb,iBAAK,UAAL;AACA,iBAAK,IAAI,IAAI,CAAb,EAAgB,IAAI,KAAK,gBAAL,CAAsB,MAA1C,EAAkD,GAAlD,EAAuD;AACnD,qBAAK,gBAAL,CAAsB,CAAtB,EAAyB,SAAzB,GAAqC,KAArC;AACH;AAJY;AAAA;AAAA;;AAAA;AAKb,sCAAc,KAAK,kBAAnB,mIAAuC;AAAA,wBAA9B,CAA8B;;AACnC;AACH;AAPY;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAQhB;;;;;;;;;4CAMmB,I,EAAM;AACtB,iBAAK,kBAAL,CAAwB,IAAxB,CAA6B,IAA7B;AACH;;;;;;AAEL,GAAG,WAAH,GAAiB,WAAjB;kBACe,W;;;;;;;;;ACtef;;;;AACA;;IAAY,qB;;;;;;;;;;AACZ,IAAM,KAAK,uBAAQ,WAAR,CAAX;;;;;;;;;;;;;;;AAeA,SAAS,mBAAT,CAA6B,SAA7B,EAAwC;AACpC,QAAI,aAAa,SAAjB,EAA2B;AACvB,eAAO,SAAP;AACH;;AAED,WAAO,UAAU,OAAV,EAAmB,UAAnB,EAA+B;AAClC,kBAAU,QAAQ,aAAR,EAAV,EAAmC,sBAAsB,gBAAtB,CAAuC,UAAvC,CAAnC;AACH,KAFD;AAGH;;AAED,GAAG,mBAAH,GAAyB,mBAAzB;kBACe,mB;;;;;;;;;AC5Bf;;;;AACA;;;;AACA;;;;AACA;;;;;;;;;;AACA,IAAI,KAAK,uBAAQ,WAAR,CAAT;;;;;;;;;;;;;;;;;;AAkBA,SAAS,QAAT,CAAkB,OAAlB,EAA2B;AACvB,MAAI,IAAI,4BAAa,OAAb,CAAR;AACA,oBAAQ,IAAR,CAAa,CAAb;AACA,qBAAS,IAAT,CAAc,CAAd;;AAEA,SAAO,CAAP;AACH;;AAGD,GAAG,QAAH,GAAc,QAAd;kBACe,Q;;;;;;;;;AC5Bf;;;;AACA;;;;AACA;;;;;;AACA,IAAM,KAAK,uBAAQ,WAAR,CAAX;;;;;;;;;;;;;;;;;;;;;;;;;;AAkBA,SAAS,YAAT,CAAsB,OAAtB,EAA+B;AAC3B,cAAU,WAAW,EAArB;AACA,YAAQ,KAAR,GAAgB,QAAQ,KAAR,IAAiB,KAAjC;AACA,YAAQ,MAAR,GAAiB,QAAQ,MAAR,IAAkB,EAAnC;AACA,YAAQ,MAAR,CAAe,CAAf,GAAmB,OAAO,QAAQ,MAAR,CAAe,CAAtB,IAA2B,QAA3B,GAAsC,QAAQ,MAAR,CAAe,CAArD,GAAyD,CAAC,QAA7E;AACA,YAAQ,MAAR,CAAe,CAAf,GAAmB,OAAO,QAAQ,MAAR,CAAe,CAAtB,IAA2B,QAA3B,GAAsC,QAAQ,MAAR,CAAe,CAArD,GAAyD,OAA5E;AACA,YAAQ,IAAR,GAAe,OAAO,QAAQ,IAAf,IAAuB,QAAvB,GAAkC,QAAQ,IAA1C,GAAiD,CAAhE;AACA,YAAQ,YAAR,GAAuB,OAAO,QAAQ,YAAf,IAA+B,SAA/B,GAA2C,QAAQ,YAAnD,GAAkE,IAAzF;AACA,YAAQ,UAAR,GAAqB,OAAO,QAAQ,UAAf,IAA6B,SAA7B,GAAyC,QAAQ,UAAjD,GAA8D,KAAnF;;AAGA,QAAI,UAAU,sBAAE,MAAM,QAAQ,KAAhB,CAAd;AACA,YAAQ,GAAR,CAAY,UAAZ,EAAwB,UAAxB;;AAEA,QAAI,WAAW,IAAI,aAAG,KAAH,CAAS,IAAb,CAAkB,EAAC,QAAQ,IAAI,aAAG,MAAH,CAAU,GAAd,EAAT,EAAlB,CAAf;AACA,QAAI,WAAW,IAAI,aAAG,KAAH,CAAS,IAAb,CAAkB,EAAC,SAAS,KAAV,EAAiB,QAAQ,IAAI,aAAG,MAAH,CAAU,QAAd,CAAuB,EAAC,OAAO,KAAR,EAAvB,CAAzB,EAAlB,CAAf;;AAEA,QAAI,SAAS,m0GAAb;AACA,QAAI,YAAY,+uIAAhB;;AAEA,QAAI,QAAQ,YAAZ,EAA0B;AACtB,YAAI,kBAAkB,kEAAtB;AACA,2BAAmB,qEAAnB;AACA,wGAA8F,SAA9F;AACA,2BAAmB,UAAnB;AACA,gBAAQ,MAAR,CAAe,eAAf;;AAED,gBAAQ,IAAR,CAAa,oBAAb,EAAmC,KAAnC,CAAyC,YAAW;AAC/C;;AACA,qBAAS,UAAT,CAAoB,CAAC,SAAS,UAAT,EAArB;AACA,qBAAS,UAAT,CAAoB,CAAC,SAAS,UAAT,EAArB;;AAEA,gBAAI,SAAS,UAAT,EAAJ,EAA0B;AACtB,sCAAE,IAAF,EAAQ,GAAR,CAAY,YAAZ,EAA0B,SAA1B;AACH,aAFD,MAEO;AACH,sCAAE,IAAF,EAAQ,GAAR,CAAY,YAAZ,EAA0B,MAA1B;AACH;AACJ,SAVF;AAWF;;AAED,QAAI,QAAQ,IAAR,GAAe,CAAf,IAAoB,QAAQ,IAAR,GAAe,EAAvC,EAA2C;AACvC,cAAM,mBAAN;AACH;;AAED,QAAI,QAAQ,MAAR,CAAe,CAAf,IAAoB,CAAC,GAArB,IAA4B,QAAQ,MAAR,CAAe,CAAf,IAAoB,GAAhD,IAAuD,QAAQ,MAAR,CAAe,CAAf,IAAoB,CAAC,EAA5E,IAAkF,QAAQ,MAAR,CAAe,CAAf,IAAoB,EAA1G,EAA8G;AAC1G,YAAI,IAAI,IAAI,aAAG,IAAH,CAAQ,KAAZ,CAAkB,CAAC,QAAQ,MAAR,CAAe,CAAhB,EAAmB,QAAQ,MAAR,CAAe,CAAlC,CAAlB,CAAR;AACA,UAAE,SAAF,CAAY,WAAZ,EAAyB,WAAzB;AACA,YAAI,cAAc,EAAE,cAAF,EAAlB;AACA,gBAAQ,MAAR,CAAe,CAAf,GAAmB,YAAY,CAAZ,CAAnB;AACA,gBAAQ,MAAR,CAAe,CAAf,GAAmB,YAAY,CAAZ,CAAnB;AACH;;AAED,QAAI,MAAM,IAAI,aAAG,GAAP,CAAW;AACjB,gBAAQ,CAAC,QAAD,EAAW,QAAX,CADS;AAEjB,gBAAQ,QAAQ,KAFC;AAGjB,kBAAU,aAAG,OAAH,CAAW,QAAX,CAAoB;AAC1B,gCAAoB,EAAC,aAAa,KAAd;AADM,SAApB,CAHO;AAMjB,cAAM,IAAI,aAAG,IAAP,CAAY;AACd,oBAAQ,CAAC,QAAQ,MAAR,CAAe,CAAhB,EAAmB,QAAQ,MAAR,CAAe,CAAlC,CADM;AAEd,kBAAM,QAAQ,IAFA;AAGd,qBAAS,QAAQ,OAHH;AAId,qBAAS,QAAQ;AAJH,SAAZ;AANW,KAAX,CAAV;;AAcA,QAAI,QAAQ,UAAZ,EAAuB;AACnB,YAAI,UAAJ,CAAe,IAAI,aAAG,OAAH,CAAW,UAAf,EAAf;AACH;;AAED,WAAO,GAAP;AACH;;AAED,GAAG,YAAH,GAAkB,YAAlB;kBACe,Y;;;;;;;;QC3DC,gB,GAAA,gB;QAuBA,gB,GAAA,gB;;AA/DhB;;;;;;AACA,IAAM,KAAK,uBAAQ,iCAAR,CAAX,C;;;;AAEA,IAAI,iBAAiB,CACjB,kBADiB,E;AAEjB,iBAFiB,E;AAGjB,iBAHiB,E;AAIjB,iBAJiB,E;AAKjB,gBALiB,E;AAMjB,gBANiB,E;AAOjB,gBAPiB,E;AAQjB,gBARiB,E;AASjB,eATiB,E;AAUjB,gBAViB,E;AAWjB,iBAXiB,E;AAYjB,iBAZiB,E;AAajB,iBAbiB,E;AAcjB,kBAdiB,E;AAejB,iBAfiB,E;AAgBjB,iBAhBiB,E;AAiBjB,iBAjBiB,E;AAkBjB,iBAlBiB,E;AAmBjB,kBAnBiB,E;AAoBjB,mBApBiB,E;AAqBjB,mBArBiB,E;AAsBjB,mBAtBiB,E;AAuBjB,mBAvBiB,E;AAwBjB,mBAxBiB,E;AAyBjB,oBAzBiB,E;AA0BjB,oBA1BiB,E;AA2BjB,oBA3BiB,E;AA4BjB,qBA5BiB,E;AA6BjB,qB;AA7BiB,CAArB;;;;;;;AAqCO,SAAS,gBAAT,CAA0B,SAA1B,EAAqC;AACxC;;AAEA,QAAI,OAAO,SAAP,IAAoB,QAAxB,EAAkC;AAC9B,YAAI,YAAY,CAAZ,KAAkB,CAAlB,IAAuB,aAAa,CAApC,IAAyC,aAAa,EAA1D,EAA8D;AAC1D,mBAAO,eAAe,SAAf,CAAP;AACH,SAFD,MAEO;AACH,oBAAQ,GAAR,mCAA4C,SAA5C;;AAEA,mBAAO,SAAP;AACH;AACJ,KARD,MAQO;AACH,eAAO,SAAP;AACH;AACJ;AACD,GAAG,gBAAH,GAAsB,gBAAtB;;;;;;;AAQO,SAAS,gBAAT,CAA0B,UAA1B,EAAqC;AACxC,SAAK,IAAI,IAAI,CAAb,EAAgB,IAAI,eAAe,MAAnC,EAA2C,GAA3C,EAA+C;AAC3C,YAAI,cAAc,eAAe,CAAf,CAAlB,EAAqC;AACjC,mBAAO,CAAP;AACH;AACJ;;AAED,WAAO,CAAP;AACH;;AAED,GAAG,gBAAH,GAAsB,gBAAtB;;;AC7EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;AChZA,IAAM,KAAK,QAAQ,YAAR,CAAX;;kBAEe,E;;;;;;;;QCSC,e,GAAA,e;QAcA,iB,GAAA,iB;;AAtBhB;;;;;;AACA,IAAI,KAAK,uBAAQ,mBAAR,CAAT;;;;;;;;;;AAOO,SAAS,eAAT,CAA0B,KAA1B,EAAgC;AACnC;;AAEA,WAAQ,OAAO,KAAP,KAAiB,WAAjB,IAAgC,UAAU,IAAlD;AACH;;AAED,GAAG,eAAH,GAAqB,eAArB;;;;;;;AAQO,SAAS,iBAAT,CAA4B,KAA5B,EAAkC;AACrC;;AAEA,WAAO,CAAE,gBAAgB,KAAhB,CAAT;AACH;;AAED,GAAG,iBAAH,GAAuB,iBAAvB;;;;;;;;QCNgB,O,GAAA,O;QAeA,mB,GAAA,mB;QAqBA,S,GAAA,S;QA0BA,wB,GAAA,wB;QAuEA,8B,GAAA,8B;;AA3JhB;;;;AACA;;IAAY,G;;;;;;;;;;AACZ,IAAI,KAAK,uBAAQ,aAAR,CAAT;;;;;;;;AASA,SAAS,IAAT,CAAc,CAAd,EAAiB;AACb,QAAI,YAAY,CAAC,GAAD,EAAM,GAAN,EAAW,GAAX,EAAgB,GAAhB,EAAqB,GAArB,EAA0B,GAA1B,EAA+B,GAA/B,EAAoC,GAApC,EAAyC,GAAzC,EAA8C,GAA9C,EAAmD,GAAnD,EAAwD,GAAxD,EAA6D,GAA7D,EAAkE,GAAlE,EAAuE,GAAvE,EAA4E,GAA5E,CAAhB;;AAEA,WAAO,MAAM,CAAN,IAAW,IAAX,GAAkB,UAAU,CAAC,IAAI,IAAI,EAAT,IAAe,EAAzB,IAA+B,UAAU,IAAI,EAAd,CAAxD;AACH;;;;;;;AAOM,SAAS,OAAT,CAAiB,GAAjB,EAAsB;AACzB,QAAI,OAAO,IAAI,KAAJ,CAAU,kCAAV,CAAX;;AAEA,WAAO,CAAC,MAAM,KAAK,KAAK,CAAL,CAAL,CAAN,GAAsB,KAAK,KAAK,CAAL,CAAL,CAAtB,GAAsC,KAAK,KAAK,CAAL,CAAL,CAAvC,EAAsD,WAAtD,EAAP;AACH;;AAED,GAAG,OAAH,GAAa,OAAb;;;;;;;;AASO,SAAS,mBAAT,CAA6B,SAA7B,EAAwC,QAAxC,EAAkD;AACrD,gBAAc,UAAU,MAAV,CAAiB,CAAjB,KAAuB,GAAxB,GAA+B,UAAU,SAAV,CAAoB,CAApB,EAAuB,CAAvB,CAA/B,GAA2D,SAAxE;AACA,QAAI,IAAI,SAAS,UAAU,SAAV,CAAoB,CAApB,EAAuB,CAAvB,CAAT,EAAoC,EAApC,EAAwC,QAAxC,MAAsD,GAA9D;AACA,QAAI,IAAI,SAAS,UAAU,SAAV,CAAoB,CAApB,EAAuB,CAAvB,CAAT,EAAoC,EAApC,EAAwC,QAAxC,MAAsD,GAA9D;AACA,QAAI,IAAI,SAAS,UAAU,SAAV,CAAoB,CAApB,EAAuB,CAAvB,CAAT,EAAoC,EAApC,EAAwC,QAAxC,MAAsD,GAA9D;AACA,QAAI,QAAJ,EAAc;AACV,yBAAe,CAAf,SAAoB,CAApB,SAAyB,CAAzB,SAA8B,QAA9B;AACH,KAFD,MAEO;AACH,yBAAe,CAAf,SAAoB,CAApB,SAAyB,CAAzB;AACH;AACJ;;AAED,GAAG,mBAAH,GAAyB,mBAAzB;;;;;;;;AASO,SAAS,SAAT,CAAmB,GAAnB,EAAwB,KAAxB,EAA+B;AAClC,QAAI,SAAS,IAAI,KAAJ,CAAU,GAAV,CAAb;AACA,WAAO,CAAP,IAAY,OAAO,CAAP,EAAU,OAAV,CAAkB,KAAlB,EAAyB,MAAzB,CAAZ;AACA,WAAO,CAAP,IAAY,OAAO,CAAP,EAAU,OAAV,CAAkB,GAAlB,EAAuB,EAAvB,CAAZ;AACA,WAAO,IAAP,CAAY,MAAM,MAAM,OAAN,CAAc,CAAd,CAAN,GAAyB,GAArC;;AAEA,WAAO,OAAO,IAAP,CAAY,GAAZ,CAAP;AACH;;AAED,GAAG,SAAH,GAAe,SAAf;;;;;;;;;;;;;;;AAiBO,SAAS,wBAAT,CAAkC,MAAlC,EAA0C,MAA1C,EAAkD,UAAlD,EAA8D;;AAEjE,QAAI,OAAO,UAAP,IAAqB,SAAzB,EAAoC;AAChC,qBAAa,KAAb;AACH;;AAED,WAAO,UAAU,MAAV,EAAkB;AACrB,YAAI,UAAJ;YAAO,UAAP;YAAU,UAAV;AACA,YAAI,cAAJ;;AAEA,YAAI,IAAI,eAAJ,CAAoB,MAApB,CAAJ,EAAiC;AAC7B,mBAAO,kBAAP;AACH;;AAED,YAAI,UAAU,CAAC,SAAS,MAAV,KAAqB,SAAS,MAA9B,CAAd;;AAEA,YAAI,cAAc,IAAlB,EAAwB;AACpB,sBAAU,IAAI,OAAd;AACH;;AAED,YAAI,WAAW,CAAf,EAAkB;AACd,gBAAI,GAAJ;AACA,gBAAI,CAAJ;AACA,gBAAI,CAAJ;AACH,SAJD,MAIO,IAAI,WAAW,CAAf,EAAkB;AACrB,gBAAI,CAAJ;AACA,gBAAI,CAAJ;AACA,gBAAI,GAAJ;AACH,SAJM,MAIA,IAAI,UAAU,GAAd,EAAmB;;AAEtB,gBAAI,CAAJ;AACA,gBAAI,KAAK,KAAL,CAAW,MAAM,OAAN,GAAgB,IAA3B,CAAJ;AACA,gBAAI,GAAJ;AACH,SALM,MAKA,IAAI,UAAU,IAAd,EAAoB;;AAEvB,oBAAQ,CAAC,UAAU,IAAX,IAAmB,IAA3B;AACA,gBAAI,CAAJ;AACA,gBAAI,GAAJ;AACA,gBAAI,MAAM,KAAK,KAAL,CAAW,MAAM,KAAjB,CAAV;AACH,SANM,MAMA,IAAI,UAAU,IAAd,EAAoB;;AAEvB,oBAAQ,CAAC,UAAU,GAAX,IAAkB,IAA1B;AACA,gBAAI,KAAK,KAAL,CAAW,MAAM,KAAjB,CAAJ;AACA,gBAAI,GAAJ;AACA,gBAAI,CAAJ;AACH,SANM,MAMA;;AAEH,oBAAQ,CAAC,UAAU,IAAX,IAAmB,IAA3B;AACA,gBAAI,GAAJ;AACA,gBAAI,MAAM,KAAK,KAAL,CAAW,MAAM,KAAjB,CAAV;AACA,gBAAI,CAAJ;AACH;;AAED,YAAI,EAAE,OAAF,EAAJ;AACA,YAAI,EAAE,OAAF,EAAJ;AACA,YAAI,EAAE,OAAF,EAAJ;;AAEA,eAAO,SAAS,CAAT,GAAa,GAAb,GAAmB,CAAnB,GAAuB,GAAvB,GAA6B,CAA7B,GAAiC,GAAxC;AACH,KApDD;AAqDH;;AAED,GAAG,wBAAH,GAA8B,wBAA9B;;;;;;;;;AAUO,SAAS,8BAAT,CAAwC,MAAxC,EAAgD,MAAhD,EAAwD,UAAxD,EAAoE;;AAEvE,QAAI,MAAM,yBAAyB,CAAC,GAA1B,EAA+B,GAA/B,EAAoC,UAApC,CAAV;;AAEA,WAAO,UAAU,MAAV,EAAkB;;AAErB,YAAI,eAAJ;AACA,YAAI,UAAU,IAAd,EAAoB;AAChB,qBAAS,IAAT;AACH,SAFD,MAEO;AACH,qBAAS,CAAC,SAAS,MAAV,IAAoB,MAA7B;AACH;;AAED,eAAO,IAAI,MAAJ,CAAP;AACH,KAVD;AAWH;;AAED,GAAG,8BAAH,GAAoC,8BAApC;;;;;;;;;AC3KA;;;;;;AACA,IAAI,KAAK,uBAAQ,MAAR,CAAT;;;;;;;;;;AAOA,SAAS,QAAT,GAAoB;AACZ,SAAO,uCACF,OADE,CACM,OADN,EACe,UAAU,CAAV,EAAa;AAC3B,QAAI,IAAI,KAAK,MAAL,KAAgB,EAAhB,GAAqB,CAA7B;QAAgC,IAAI,KAAK,GAAL,GAAW,CAAX,GAAe,IAAI,GAAJ,GAAU,GAA7D;;AAEA,WAAO,EAAE,QAAF,CAAW,EAAX,CAAP;AACH,GALE,CAAP;AAOP;AACD,GAAG,QAAH,GAAc,QAAd;kBACe,Q;;;;;;;;;;;;;;;;;ACZf,SAAS,OAAT,CAAiB,SAAjB,EAA2B;AACvB;;AACA,QAAI,OAAO,OAAO,EAAd,IAAoB,WAAxB,EAAoC;AAChC,eAAO,EAAP,GAAY,EAAZ;AACH;;AAED,QAAI,QAAQ,UAAU,KAAV,CAAgB,GAAhB,CAAZ;AACA,QAAI,YAAY,OAAO,EAAvB;;AAEA,SAAK,IAAI,IAAE,CAAX,EAAc,IAAG,MAAM,MAAvB,EAA+B,GAA/B,EAAmC;AAC/B,YAAI,YAAY,UAAU,MAAM,CAAN,CAAV,CAAhB;;AAEA,YAAI,OAAO,SAAP,IAAoB,WAAxB,EAAoC;AAChC,sBAAU,MAAM,CAAN,CAAV,IAAsB,EAAtB;AACH;;AAED,oBAAY,UAAU,MAAM,CAAN,CAAV,CAAZ;AACH;;AAED,WAAO,SAAP;AACH;;AAED,QAAQ,MAAR;AACA,OAAO,EAAP,CAAU,IAAV,CAAe,OAAf,GAAyB,OAAzB;;kBAEe,O;;;;;AC/Bf;;AACA;;;;AACA;;;;AACA;;;;AACA;;;;AACA;;;;AACA;;;;;;AAEA,IAAI,MAAM,wBAAS,EAAC,YAAY,IAAb,EAAT,CAAV;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA2BA,IAAI,qBAAqB,iCAAuB,GAAvB,CAAzB;;;;;;;AAEA,yBAAc,mBAAmB,MAAjC,8HAAwC;AAAA,YAA/B,CAA+B;;AACpC,gBAAQ,GAAR,CAAY,EAAE,OAAd;AACA,gBAAQ,GAAR,CAAY,CAAZ;AACH;;;;;;;;;;;;;;;;AAGD,IAAI,aAAa,CACb;AACI,eAAW,sBADf;AAEI,cAAU,KAFd;AAGI,cAAU,IAHd;AAII,WAAO,mBAAmB;AAJ9B,CADa,CAAjB;;AASA,IAAI,SAAS,0BAAgB,UAAhB,EAA4B,kBAA5B,EAAgD,EAAhD,CAAb;;;;;ACpDA;;;;AACA;;;;;;;;;;AAEA,IAAI,OAAO,QAAQ,MAAR,CAAX;;AAEA,SAAS,sBAAT,EAAiC,YAAW;AAC1C,KAAG,sCAAH,EAA2C,YAAW;AACpD,QAAI,MAAM,yBAAV;;AAEA,WAAO,EAAP,CAAU,YAAV,EAAwB,kBAAxB;AACD,GAJD;;AAMA,KAAG,sCAAH,EAA2C,YAAW;AACpD,WAAO,KAAP,EAAc,EAAd,CAAiB,GAAjB,CAAqB,KAArB,CAA2B,KAA3B;AACD,GAFD;;AAIA,KAAG,wCAAH,EAA6C,YAAW;AACtD,WAAO,KAAP,CAAa,GAAb;AACC,KAAD,EAAI,MAAJ,CAAW,GAAX,CAAe,KAAf,CAAqB,CAArB;AACD,GAHD;;AAKA,KAAG,yCAAH,EAA8C,YAAM;AACjD,KAAD,EAAI,MAAJ,CAAW,GAAX,CAAe,KAAf,CAAqB,CAArB;AACC,KAAD,EAAI,MAAJ,CAAW,GAAX,CAAe,KAAf,CAAqB,CAArB;AACC,KAAD,EAAI,MAAJ,CAAW,GAAX,CAAe,KAAf,CAAqB,CAArB;AACC,MAAD,EAAK,MAAL,CAAY,GAAZ,CAAgB,KAAhB,CAAsB,EAAtB;AACC,MAAD,EAAK,MAAL,CAAY,GAAZ,CAAgB,KAAhB,CAAsB,EAAtB;AACC,MAAD,EAAK,MAAL,CAAY,GAAZ,CAAgB,KAAhB,CAAsB,EAAtB;AACC,MAAD,EAAK,MAAL,CAAY,GAAZ,CAAgB,KAAhB,CAAsB,EAAtB;;;;;AAKD,GAZD;AAaD,CA7BD;;AAiCA,SAAS,mBAAT,EAA8B,YAAW;AACvC,KAAG,sCAAH,EAA2C,YAAW;AACpD,WAAO,EAAP,CAAU,YAAV,EAAwB,kBAAxB;AACD,GAFD;;AAIA,KAAG,sCAAH,EAA2C,YAAW;AACpD,WAAO,KAAP,EAAc,EAAd,CAAiB,GAAjB,CAAqB,KAArB,CAA2B,KAA3B;AACD,GAFD;;AAIA,KAAG,wCAAH,EAA6C,YAAW;AACtD,WAAO,KAAP,CAAa,GAAb;AACC,KAAD,EAAI,MAAJ,CAAW,GAAX,CAAe,KAAf,CAAqB,CAArB;AACD,GAHD;;AAKA,KAAG,yCAAH,EAA8C,YAAM;AACjD,KAAD,EAAI,MAAJ,CAAW,GAAX,CAAe,KAAf,CAAqB,CAArB;AACC,KAAD,EAAI,MAAJ,CAAW,GAAX,CAAe,KAAf,CAAqB,CAArB;;;;AAID,GAND;AAOD,CArBD;;;;;ACrCA;;;;;;;AAGA,IAAI,OAAO,QAAQ,MAAR,CAAX,C;;;;AAEA,SAAS,4BAAT,EAAuC,YAAW;AAChD,KAAG,sCAAH,EAA2C,YAAW;AACpD,QAAI,MAAM,yBAAV;;AAEA,WAAO,EAAP,CAAU,YAAV,EAAwB,kBAAxB;AACD,GAJD;;AAMA,KAAG,sCAAH,EAA2C,YAAW;AACpD,UAAM,MAAN,CAAa,GAAb,CAAiB,MAAjB,CAAwB,GAAxB;AACD,GAFD;;AAIA,KAAG,wCAAH,EAA6C,YAAW;AACtD,WAAO,KAAP,CAAa,GAAb;AACC,KAAD,EAAI,MAAJ,CAAW,GAAX,CAAe,KAAf,CAAqB,CAArB;AACD,GAHD;;AAKA,KAAG,yCAAH,EAA8C,YAAM;AACjD,KAAD,EAAI,MAAJ,CAAW,GAAX,CAAe,KAAf,CAAqB,CAArB;AACC,KAAD,EAAI,MAAJ,CAAW,GAAX,CAAe,KAAf,CAAqB,CAArB;AACC,KAAD,EAAI,MAAJ,CAAW,GAAX,CAAe,KAAf,CAAqB,CAArB;AACC,KAAD,EAAI,MAAJ,CAAW,GAAX,CAAe,KAAf,CAAqB,CAArB;AACC,KAAD,EAAI,MAAJ,CAAW,GAAX,CAAe,KAAf,CAAqB,EAArB;AACC,KAAD,EAAI,MAAJ,CAAW,GAAX,CAAe,KAAf,CAAqB,EAArB;AACC,KAAD,EAAI,MAAJ,CAAW,GAAX,CAAe,KAAf,CAAqB,CAArB;AACD,GARD;AASD,CAzBD;;AA6BA,SAAS,2BAAT,EAAsC,YAAW;AAC/C,KAAG,sCAAH,EAA2C,YAAW;AACpD,WAAO,EAAP,CAAU,YAAV,EAAwB,kBAAxB;AACD,GAFD;;AAIA,KAAG,sCAAH,EAA2C,YAAW;;AAEpD,WAAO,KAAP,EAAc,EAAd,CAAiB,GAAjB,CAAqB,KAArB,CAA2B,KAA3B;AACA,WAAO,KAAP,EAAc,EAAd,CAAiB,KAAjB,CAAuB,KAAvB;AACA,WAAO,KAAP,EAAc,EAAd,CAAiB,KAAjB,CAAuB,MAAvB;AACD,GALD;;AAOA,KAAG,wCAAH,EAA6C,YAAW;AACtD,WAAO,KAAP,CAAa,GAAb;AACC,KAAD,EAAI,MAAJ,CAAW,GAAX,CAAe,KAAf,CAAqB,CAArB;AACD,GAHD;;AAKA,KAAG,yCAAH,EAA8C,YAAM;AACjD,KAAD,EAAI,MAAJ,CAAW,GAAX,CAAe,KAAf,CAAqB,CAArB;AACC,KAAD,EAAI,MAAJ,CAAW,GAAX,CAAe,KAAf,CAAqB,CAArB;;;;AAID,GAND;AAOD,CAxBD","file":"test-bundle.js","sourceRoot":"/source/","sourcesContent":["(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error(\"Cannot find module '\"+o+\"'\");throw f.code=\"MODULE_NOT_FOUND\",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require==\"function\"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})","/*istanbul ignore next*/\"use strict\";\n\n/*istanbul ignore next*/require(\"core-js/shim\");\n\n/*istanbul ignore next*/require(\"babel-regenerator-runtime\");\n\n/*istanbul ignore next*/require(\"core-js/fn/regexp/escape\");\n\n/* eslint max-len: 0 */\n\nif (global._babelPolyfill) {\n  throw new Error(\"only one instance of babel-polyfill is allowed\");\n}\nglobal._babelPolyfill = true;\n\n// Should be removed in the next major release:\n\nvar DEFINE_PROPERTY = \"defineProperty\";\nfunction define(O, key, value) {\n  O[key] || Object[DEFINE_PROPERTY](O, key, {\n    writable: true,\n    configurable: true,\n    value: value\n  });\n}\n\ndefine(String.prototype, \"padLeft\", \"\".padStart);\ndefine(String.prototype, \"padRight\", \"\".padEnd);\n\n\"pop,reverse,shift,keys,values,entries,indexOf,every,some,forEach,map,filter,find,findIndex,includes,join,slice,concat,push,splice,unshift,sort,lastIndexOf,reduce,reduceRight,copyWithin,fill\".split(\",\").forEach(function (key) {\n  [][key] && define(Array, key, Function.call.bind([][key]));\n});","/**\n * Copyright (c) 2014, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * https://raw.github.com/facebook/regenerator/master/LICENSE file. An\n * additional grant of patent rights can be found in the PATENTS file in\n * the same directory.\n */\n\n!(function(global) {\n  \"use strict\";\n\n  var hasOwn = Object.prototype.hasOwnProperty;\n  var undefined; // More compressible than void 0.\n  var iteratorSymbol =\n    typeof Symbol === \"function\" && Symbol.iterator || \"@@iterator\";\n\n  var inModule = typeof module === \"object\";\n  var runtime = global.regeneratorRuntime;\n  if (runtime) {\n    if (inModule) {\n      // If regeneratorRuntime is defined globally and we're in a module,\n      // make the exports object identical to regeneratorRuntime.\n      module.exports = runtime;\n    }\n    // Don't bother evaluating the rest of this file if the runtime was\n    // already defined globally.\n    return;\n  }\n\n  // Define the runtime globally (as expected by generated code) as either\n  // module.exports (if we're in a module) or a new, empty object.\n  runtime = global.regeneratorRuntime = inModule ? module.exports : {};\n\n  function wrap(innerFn, outerFn, self, tryLocsList) {\n    // If outerFn provided, then outerFn.prototype instanceof Generator.\n    var generator = Object.create((outerFn || Generator).prototype);\n    var context = new Context(tryLocsList || []);\n\n    // The ._invoke method unifies the implementations of the .next,\n    // .throw, and .return methods.\n    generator._invoke = makeInvokeMethod(innerFn, self, context);\n\n    return generator;\n  }\n  runtime.wrap = wrap;\n\n  // Try/catch helper to minimize deoptimizations. Returns a completion\n  // record like context.tryEntries[i].completion. This interface could\n  // have been (and was previously) designed to take a closure to be\n  // invoked without arguments, but in all the cases we care about we\n  // already have an existing method we want to call, so there's no need\n  // to create a new function object. We can even get away with assuming\n  // the method takes exactly one argument, since that happens to be true\n  // in every case, so we don't have to touch the arguments object. The\n  // only additional allocation required is the completion record, which\n  // has a stable shape and so hopefully should be cheap to allocate.\n  function tryCatch(fn, obj, arg) {\n    try {\n      return { type: \"normal\", arg: fn.call(obj, arg) };\n    } catch (err) {\n      return { type: \"throw\", arg: err };\n    }\n  }\n\n  var GenStateSuspendedStart = \"suspendedStart\";\n  var GenStateSuspendedYield = \"suspendedYield\";\n  var GenStateExecuting = \"executing\";\n  var GenStateCompleted = \"completed\";\n\n  // Returning this object from the innerFn has the same effect as\n  // breaking out of the dispatch switch statement.\n  var ContinueSentinel = {};\n\n  // Dummy constructor functions that we use as the .constructor and\n  // .constructor.prototype properties for functions that return Generator\n  // objects. For full spec compliance, you may wish to configure your\n  // minifier not to mangle the names of these two functions.\n  function Generator() {}\n  function GeneratorFunction() {}\n  function GeneratorFunctionPrototype() {}\n\n  var Gp = GeneratorFunctionPrototype.prototype = Generator.prototype;\n  GeneratorFunction.prototype = Gp.constructor = GeneratorFunctionPrototype;\n  GeneratorFunctionPrototype.constructor = GeneratorFunction;\n  GeneratorFunction.displayName = \"GeneratorFunction\";\n\n  // Helper for defining the .next, .throw, and .return methods of the\n  // Iterator interface in terms of a single ._invoke method.\n  function defineIteratorMethods(prototype) {\n    [\"next\", \"throw\", \"return\"].forEach(function(method) {\n      prototype[method] = function(arg) {\n        return this._invoke(method, arg);\n      };\n    });\n  }\n\n  runtime.isGeneratorFunction = function(genFun) {\n    var ctor = typeof genFun === \"function\" && genFun.constructor;\n    return ctor\n      ? ctor === GeneratorFunction ||\n        // For the native GeneratorFunction constructor, the best we can\n        // do is to check its .name property.\n        (ctor.displayName || ctor.name) === \"GeneratorFunction\"\n      : false;\n  };\n\n  runtime.mark = function(genFun) {\n    if (Object.setPrototypeOf) {\n      Object.setPrototypeOf(genFun, GeneratorFunctionPrototype);\n    } else {\n      genFun.__proto__ = GeneratorFunctionPrototype;\n    }\n    genFun.prototype = Object.create(Gp);\n    return genFun;\n  };\n\n  // Within the body of any async function, `await x` is transformed to\n  // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test\n  // `value instanceof AwaitArgument` to determine if the yielded value is\n  // meant to be awaited. Some may consider the name of this method too\n  // cutesy, but they are curmudgeons.\n  runtime.awrap = function(arg) {\n    return new AwaitArgument(arg);\n  };\n\n  function AwaitArgument(arg) {\n    this.arg = arg;\n  }\n\n  function AsyncIterator(generator) {\n    // This invoke function is written in a style that assumes some\n    // calling function (or Promise) will handle exceptions.\n    function invoke(method, arg) {\n      var result = generator[method](arg);\n      var value = result.value;\n      return value instanceof AwaitArgument\n        ? Promise.resolve(value.arg).then(invokeNext, invokeThrow)\n        : Promise.resolve(value).then(function(unwrapped) {\n            // When a yielded Promise is resolved, its final value becomes\n            // the .value of the Promise<{value,done}> result for the\n            // current iteration. If the Promise is rejected, however, the\n            // result for this iteration will be rejected with the same\n            // reason. Note that rejections of yielded Promises are not\n            // thrown back into the generator function, as is the case\n            // when an awaited Promise is rejected. This difference in\n            // behavior between yield and await is important, because it\n            // allows the consumer to decide what to do with the yielded\n            // rejection (swallow it and continue, manually .throw it back\n            // into the generator, abandon iteration, whatever). With\n            // await, by contrast, there is no opportunity to examine the\n            // rejection reason outside the generator function, so the\n            // only option is to throw it from the await expression, and\n            // let the generator function handle the exception.\n            result.value = unwrapped;\n            return result;\n          });\n    }\n\n    if (typeof process === \"object\" && process.domain) {\n      invoke = process.domain.bind(invoke);\n    }\n\n    var invokeNext = invoke.bind(generator, \"next\");\n    var invokeThrow = invoke.bind(generator, \"throw\");\n    var invokeReturn = invoke.bind(generator, \"return\");\n    var previousPromise;\n\n    function enqueue(method, arg) {\n      function callInvokeWithMethodAndArg() {\n        return invoke(method, arg);\n      }\n\n      return previousPromise =\n        // If enqueue has been called before, then we want to wait until\n        // all previous Promises have been resolved before calling invoke,\n        // so that results are always delivered in the correct order. If\n        // enqueue has not been called before, then it is important to\n        // call invoke immediately, without waiting on a callback to fire,\n        // so that the async generator function has the opportunity to do\n        // any necessary setup in a predictable way. This predictability\n        // is why the Promise constructor synchronously invokes its\n        // executor callback, and why async functions synchronously\n        // execute code before the first await. Since we implement simple\n        // async functions in terms of async generators, it is especially\n        // important to get this right, even though it requires care.\n        previousPromise ? previousPromise.then(\n          callInvokeWithMethodAndArg,\n          // Avoid propagating failures to Promises returned by later\n          // invocations of the iterator.\n          callInvokeWithMethodAndArg\n        ) : new Promise(function (resolve) {\n          resolve(callInvokeWithMethodAndArg());\n        });\n    }\n\n    // Define the unified helper method that is used to implement .next,\n    // .throw, and .return (see defineIteratorMethods).\n    this._invoke = enqueue;\n  }\n\n  defineIteratorMethods(AsyncIterator.prototype);\n\n  // Note that simple async functions are implemented on top of\n  // AsyncIterator objects; they just return a Promise for the value of\n  // the final result produced by the iterator.\n  runtime.async = function(innerFn, outerFn, self, tryLocsList) {\n    var iter = new AsyncIterator(\n      wrap(innerFn, outerFn, self, tryLocsList)\n    );\n\n    return runtime.isGeneratorFunction(outerFn)\n      ? iter // If outerFn is a generator, return the full iterator.\n      : iter.next().then(function(result) {\n          return result.done ? result.value : iter.next();\n        });\n  };\n\n  function makeInvokeMethod(innerFn, self, context) {\n    var state = GenStateSuspendedStart;\n\n    return function invoke(method, arg) {\n      if (state === GenStateExecuting) {\n        throw new Error(\"Generator is already running\");\n      }\n\n      if (state === GenStateCompleted) {\n        if (method === \"throw\") {\n          throw arg;\n        }\n\n        // Be forgiving, per 25.3.3.3.3 of the spec:\n        // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume\n        return doneResult();\n      }\n\n      while (true) {\n        var delegate = context.delegate;\n        if (delegate) {\n          if (method === \"return\" ||\n              (method === \"throw\" && delegate.iterator[method] === undefined)) {\n            // A return or throw (when the delegate iterator has no throw\n            // method) always terminates the yield* loop.\n            context.delegate = null;\n\n            // If the delegate iterator has a return method, give it a\n            // chance to clean up.\n            var returnMethod = delegate.iterator[\"return\"];\n            if (returnMethod) {\n              var record = tryCatch(returnMethod, delegate.iterator, arg);\n              if (record.type === \"throw\") {\n                // If the return method threw an exception, let that\n                // exception prevail over the original return or throw.\n                method = \"throw\";\n                arg = record.arg;\n                continue;\n              }\n            }\n\n            if (method === \"return\") {\n              // Continue with the outer return, now that the delegate\n              // iterator has been terminated.\n              continue;\n            }\n          }\n\n          var record = tryCatch(\n            delegate.iterator[method],\n            delegate.iterator,\n            arg\n          );\n\n          if (record.type === \"throw\") {\n            context.delegate = null;\n\n            // Like returning generator.throw(uncaught), but without the\n            // overhead of an extra function call.\n            method = \"throw\";\n            arg = record.arg;\n            continue;\n          }\n\n          // Delegate generator ran and handled its own exceptions so\n          // regardless of what the method was, we continue as if it is\n          // \"next\" with an undefined arg.\n          method = \"next\";\n          arg = undefined;\n\n          var info = record.arg;\n          if (info.done) {\n            context[delegate.resultName] = info.value;\n            context.next = delegate.nextLoc;\n          } else {\n            state = GenStateSuspendedYield;\n            return info;\n          }\n\n          context.delegate = null;\n        }\n\n        if (method === \"next\") {\n          context._sent = arg;\n\n          if (state === GenStateSuspendedYield) {\n            context.sent = arg;\n          } else {\n            context.sent = undefined;\n          }\n        } else if (method === \"throw\") {\n          if (state === GenStateSuspendedStart) {\n            state = GenStateCompleted;\n            throw arg;\n          }\n\n          if (context.dispatchException(arg)) {\n            // If the dispatched exception was caught by a catch block,\n            // then let that catch block handle the exception normally.\n            method = \"next\";\n            arg = undefined;\n          }\n\n        } else if (method === \"return\") {\n          context.abrupt(\"return\", arg);\n        }\n\n        state = GenStateExecuting;\n\n        var record = tryCatch(innerFn, self, context);\n        if (record.type === \"normal\") {\n          // If an exception is thrown from innerFn, we leave state ===\n          // GenStateExecuting and loop back for another invocation.\n          state = context.done\n            ? GenStateCompleted\n            : GenStateSuspendedYield;\n\n          var info = {\n            value: record.arg,\n            done: context.done\n          };\n\n          if (record.arg === ContinueSentinel) {\n            if (context.delegate && method === \"next\") {\n              // Deliberately forget the last sent value so that we don't\n              // accidentally pass it on to the delegate.\n              arg = undefined;\n            }\n          } else {\n            return info;\n          }\n\n        } else if (record.type === \"throw\") {\n          state = GenStateCompleted;\n          // Dispatch the exception by looping back around to the\n          // context.dispatchException(arg) call above.\n          method = \"throw\";\n          arg = record.arg;\n        }\n      }\n    };\n  }\n\n  // Define Generator.prototype.{next,throw,return} in terms of the\n  // unified ._invoke helper method.\n  defineIteratorMethods(Gp);\n\n  Gp[iteratorSymbol] = function() {\n    return this;\n  };\n\n  Gp.toString = function() {\n    return \"[object Generator]\";\n  };\n\n  function pushTryEntry(locs) {\n    var entry = { tryLoc: locs[0] };\n\n    if (1 in locs) {\n      entry.catchLoc = locs[1];\n    }\n\n    if (2 in locs) {\n      entry.finallyLoc = locs[2];\n      entry.afterLoc = locs[3];\n    }\n\n    this.tryEntries.push(entry);\n  }\n\n  function resetTryEntry(entry) {\n    var record = entry.completion || {};\n    record.type = \"normal\";\n    delete record.arg;\n    entry.completion = record;\n  }\n\n  function Context(tryLocsList) {\n    // The root entry object (effectively a try statement without a catch\n    // or a finally block) gives us a place to store values thrown from\n    // locations where there is no enclosing try statement.\n    this.tryEntries = [{ tryLoc: \"root\" }];\n    tryLocsList.forEach(pushTryEntry, this);\n    this.reset(true);\n  }\n\n  runtime.keys = function(object) {\n    var keys = [];\n    for (var key in object) {\n      keys.push(key);\n    }\n    keys.reverse();\n\n    // Rather than returning an object with a next method, we keep\n    // things simple and return the next function itself.\n    return function next() {\n      while (keys.length) {\n        var key = keys.pop();\n        if (key in object) {\n          next.value = key;\n          next.done = false;\n          return next;\n        }\n      }\n\n      // To avoid creating an additional object, we just hang the .value\n      // and .done properties off the next function object itself. This\n      // also ensures that the minifier will not anonymize the function.\n      next.done = true;\n      return next;\n    };\n  };\n\n  function values(iterable) {\n    if (iterable) {\n      var iteratorMethod = iterable[iteratorSymbol];\n      if (iteratorMethod) {\n        return iteratorMethod.call(iterable);\n      }\n\n      if (typeof iterable.next === \"function\") {\n        return iterable;\n      }\n\n      if (!isNaN(iterable.length)) {\n        var i = -1, next = function next() {\n          while (++i < iterable.length) {\n            if (hasOwn.call(iterable, i)) {\n              next.value = iterable[i];\n              next.done = false;\n              return next;\n            }\n          }\n\n          next.value = undefined;\n          next.done = true;\n\n          return next;\n        };\n\n        return next.next = next;\n      }\n    }\n\n    // Return an iterator with no values.\n    return { next: doneResult };\n  }\n  runtime.values = values;\n\n  function doneResult() {\n    return { value: undefined, done: true };\n  }\n\n  Context.prototype = {\n    constructor: Context,\n\n    reset: function(skipTempReset) {\n      this.prev = 0;\n      this.next = 0;\n      this.sent = undefined;\n      this.done = false;\n      this.delegate = null;\n\n      this.tryEntries.forEach(resetTryEntry);\n\n      if (!skipTempReset) {\n        for (var name in this) {\n          // Not sure about the optimal order of these conditions:\n          if (name.charAt(0) === \"t\" &&\n              hasOwn.call(this, name) &&\n              !isNaN(+name.slice(1))) {\n            this[name] = undefined;\n          }\n        }\n      }\n    },\n\n    stop: function() {\n      this.done = true;\n\n      var rootEntry = this.tryEntries[0];\n      var rootRecord = rootEntry.completion;\n      if (rootRecord.type === \"throw\") {\n        throw rootRecord.arg;\n      }\n\n      return this.rval;\n    },\n\n    dispatchException: function(exception) {\n      if (this.done) {\n        throw exception;\n      }\n\n      var context = this;\n      function handle(loc, caught) {\n        record.type = \"throw\";\n        record.arg = exception;\n        context.next = loc;\n        return !!caught;\n      }\n\n      for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n        var entry = this.tryEntries[i];\n        var record = entry.completion;\n\n        if (entry.tryLoc === \"root\") {\n          // Exception thrown outside of any try block that could handle\n          // it, so set the completion value of the entire function to\n          // throw the exception.\n          return handle(\"end\");\n        }\n\n        if (entry.tryLoc <= this.prev) {\n          var hasCatch = hasOwn.call(entry, \"catchLoc\");\n          var hasFinally = hasOwn.call(entry, \"finallyLoc\");\n\n          if (hasCatch && hasFinally) {\n            if (this.prev < entry.catchLoc) {\n              return handle(entry.catchLoc, true);\n            } else if (this.prev < entry.finallyLoc) {\n              return handle(entry.finallyLoc);\n            }\n\n          } else if (hasCatch) {\n            if (this.prev < entry.catchLoc) {\n              return handle(entry.catchLoc, true);\n            }\n\n          } else if (hasFinally) {\n            if (this.prev < entry.finallyLoc) {\n              return handle(entry.finallyLoc);\n            }\n\n          } else {\n            throw new Error(\"try statement without catch or finally\");\n          }\n        }\n      }\n    },\n\n    abrupt: function(type, arg) {\n      for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n        var entry = this.tryEntries[i];\n        if (entry.tryLoc <= this.prev &&\n            hasOwn.call(entry, \"finallyLoc\") &&\n            this.prev < entry.finallyLoc) {\n          var finallyEntry = entry;\n          break;\n        }\n      }\n\n      if (finallyEntry &&\n          (type === \"break\" ||\n           type === \"continue\") &&\n          finallyEntry.tryLoc <= arg &&\n          arg <= finallyEntry.finallyLoc) {\n        // Ignore the finally entry if control is not jumping to a\n        // location outside the try/catch block.\n        finallyEntry = null;\n      }\n\n      var record = finallyEntry ? finallyEntry.completion : {};\n      record.type = type;\n      record.arg = arg;\n\n      if (finallyEntry) {\n        this.next = finallyEntry.finallyLoc;\n      } else {\n        this.complete(record);\n      }\n\n      return ContinueSentinel;\n    },\n\n    complete: function(record, afterLoc) {\n      if (record.type === \"throw\") {\n        throw record.arg;\n      }\n\n      if (record.type === \"break\" ||\n          record.type === \"continue\") {\n        this.next = record.arg;\n      } else if (record.type === \"return\") {\n        this.rval = record.arg;\n        this.next = \"end\";\n      } else if (record.type === \"normal\" && afterLoc) {\n        this.next = afterLoc;\n      }\n    },\n\n    finish: function(finallyLoc) {\n      for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n        var entry = this.tryEntries[i];\n        if (entry.finallyLoc === finallyLoc) {\n          this.complete(entry.completion, entry.afterLoc);\n          resetTryEntry(entry);\n          return ContinueSentinel;\n        }\n      }\n    },\n\n    \"catch\": function(tryLoc) {\n      for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n        var entry = this.tryEntries[i];\n        if (entry.tryLoc === tryLoc) {\n          var record = entry.completion;\n          if (record.type === \"throw\") {\n            var thrown = record.arg;\n            resetTryEntry(entry);\n          }\n          return thrown;\n        }\n      }\n\n      // The context.catch method must only be called with a location\n      // argument that corresponds to a known catch block.\n      throw new Error(\"illegal catch attempt\");\n    },\n\n    delegateYield: function(iterable, resultName, nextLoc) {\n      this.delegate = {\n        iterator: values(iterable),\n        resultName: resultName,\n        nextLoc: nextLoc\n      };\n\n      return ContinueSentinel;\n    }\n  };\n})(\n  // Among the various tricks for obtaining a reference to the global\n  // object, this seems to be the most reliable technique that does not\n  // use indirect eval (which violates Content Security Policy).\n  typeof global === \"object\" ? global :\n  typeof window === \"object\" ? window :\n  typeof self === \"object\" ? self : this\n);\n","require('../../modules/core.regexp.escape');\nmodule.exports = require('../../modules/_core').RegExp.escape;","module.exports = function(it){\n  if(typeof it != 'function')throw TypeError(it + ' is not a function!');\n  return it;\n};","var cof = require('./_cof');\r\nmodule.exports = function(it, msg){\r\n  if(typeof it != 'number' && cof(it) != 'Number')throw TypeError(msg);\r\n  return +it;\r\n};","// 22.1.3.31 Array.prototype[@@unscopables]\nvar UNSCOPABLES = require('./_wks')('unscopables')\n  , ArrayProto  = Array.prototype;\nif(ArrayProto[UNSCOPABLES] == undefined)require('./_hide')(ArrayProto, UNSCOPABLES, {});\nmodule.exports = function(key){\n  ArrayProto[UNSCOPABLES][key] = true;\n};","module.exports = function(it, Constructor, name, forbiddenField){\n  if(!(it instanceof Constructor) || (forbiddenField !== undefined && forbiddenField in it)){\n    throw TypeError(name + ': incorrect invocation!');\n  } return it;\n};","var isObject = require('./_is-object');\nmodule.exports = function(it){\n  if(!isObject(it))throw TypeError(it + ' is not an object!');\n  return it;\n};","// 22.1.3.3 Array.prototype.copyWithin(target, start, end = this.length)\n'use strict';\nvar toObject = require('./_to-object')\n  , toIndex  = require('./_to-index')\n  , toLength = require('./_to-length');\n\nmodule.exports = [].copyWithin || function copyWithin(target/*= 0*/, start/*= 0, end = @length*/){\n  var O     = toObject(this)\n    , len   = toLength(O.length)\n    , to    = toIndex(target, len)\n    , from  = toIndex(start, len)\n    , end   = arguments.length > 2 ? arguments[2] : undefined\n    , count = Math.min((end === undefined ? len : toIndex(end, len)) - from, len - to)\n    , inc   = 1;\n  if(from < to && to < from + count){\n    inc  = -1;\n    from += count - 1;\n    to   += count - 1;\n  }\n  while(count-- > 0){\n    if(from in O)O[to] = O[from];\n    else delete O[to];\n    to   += inc;\n    from += inc;\n  } return O;\n};","// 22.1.3.6 Array.prototype.fill(value, start = 0, end = this.length)\n'use strict';\nvar toObject = require('./_to-object')\n  , toIndex  = require('./_to-index')\n  , toLength = require('./_to-length');\nmodule.exports = function fill(value /*, start = 0, end = @length */){\n  var O      = toObject(this)\n    , length = toLength(O.length)\n    , aLen   = arguments.length\n    , index  = toIndex(aLen > 1 ? arguments[1] : undefined, length)\n    , end    = aLen > 2 ? arguments[2] : undefined\n    , endPos = end === undefined ? length : toIndex(end, length);\n  while(endPos > index)O[index++] = value;\n  return O;\n};","var forOf = require('./_for-of');\n\nmodule.exports = function(iter, ITERATOR){\n  var result = [];\n  forOf(iter, false, result.push, result, ITERATOR);\n  return result;\n};\n","// false -> Array#indexOf\n// true  -> Array#includes\nvar toIObject = require('./_to-iobject')\n  , toLength  = require('./_to-length')\n  , toIndex   = require('./_to-index');\nmodule.exports = function(IS_INCLUDES){\n  return function($this, el, fromIndex){\n    var O      = toIObject($this)\n      , length = toLength(O.length)\n      , index  = toIndex(fromIndex, length)\n      , value;\n    // Array#includes uses SameValueZero equality algorithm\n    if(IS_INCLUDES && el != el)while(length > index){\n      value = O[index++];\n      if(value != value)return true;\n    // Array#toIndex ignores holes, Array#includes - not\n    } else for(;length > index; index++)if(IS_INCLUDES || index in O){\n      if(O[index] === el)return IS_INCLUDES || index || 0;\n    } return !IS_INCLUDES && -1;\n  };\n};","// 0 -> Array#forEach\n// 1 -> Array#map\n// 2 -> Array#filter\n// 3 -> Array#some\n// 4 -> Array#every\n// 5 -> Array#find\n// 6 -> Array#findIndex\nvar ctx      = require('./_ctx')\n  , IObject  = require('./_iobject')\n  , toObject = require('./_to-object')\n  , toLength = require('./_to-length')\n  , asc      = require('./_array-species-create');\nmodule.exports = function(TYPE, $create){\n  var IS_MAP        = TYPE == 1\n    , IS_FILTER     = TYPE == 2\n    , IS_SOME       = TYPE == 3\n    , IS_EVERY      = TYPE == 4\n    , IS_FIND_INDEX = TYPE == 6\n    , NO_HOLES      = TYPE == 5 || IS_FIND_INDEX\n    , create        = $create || asc;\n  return function($this, callbackfn, that){\n    var O      = toObject($this)\n      , self   = IObject(O)\n      , f      = ctx(callbackfn, that, 3)\n      , length = toLength(self.length)\n      , index  = 0\n      , result = IS_MAP ? create($this, length) : IS_FILTER ? create($this, 0) : undefined\n      , val, res;\n    for(;length > index; index++)if(NO_HOLES || index in self){\n      val = self[index];\n      res = f(val, index, O);\n      if(TYPE){\n        if(IS_MAP)result[index] = res;            // map\n        else if(res)switch(TYPE){\n          case 3: return true;                    // some\n          case 5: return val;                     // find\n          case 6: return index;                   // findIndex\n          case 2: result.push(val);               // filter\n        } else if(IS_EVERY)return false;          // every\n      }\n    }\n    return IS_FIND_INDEX ? -1 : IS_SOME || IS_EVERY ? IS_EVERY : result;\n  };\n};","var aFunction = require('./_a-function')\r\n  , toObject  = require('./_to-object')\r\n  , IObject   = require('./_iobject')\r\n  , toLength  = require('./_to-length');\r\n\r\nmodule.exports = function(that, callbackfn, aLen, memo, isRight){\r\n  aFunction(callbackfn);\r\n  var O      = toObject(that)\r\n    , self   = IObject(O)\r\n    , length = toLength(O.length)\r\n    , index  = isRight ? length - 1 : 0\r\n    , i      = isRight ? -1 : 1;\r\n  if(aLen < 2)for(;;){\r\n    if(index in self){\r\n      memo = self[index];\r\n      index += i;\r\n      break;\r\n    }\r\n    index += i;\r\n    if(isRight ? index < 0 : length <= index){\r\n      throw TypeError('Reduce of empty array with no initial value');\r\n    }\r\n  }\r\n  for(;isRight ? index >= 0 : length > index; index += i)if(index in self){\r\n    memo = callbackfn(memo, self[index], index, O);\r\n  }\r\n  return memo;\r\n};","var isObject = require('./_is-object')\r\n  , isArray  = require('./_is-array')\r\n  , SPECIES  = require('./_wks')('species');\r\n\r\nmodule.exports = function(original){\r\n  var C;\r\n  if(isArray(original)){\r\n    C = original.constructor;\r\n    // cross-realm fallback\r\n    if(typeof C == 'function' && (C === Array || isArray(C.prototype)))C = undefined;\r\n    if(isObject(C)){\r\n      C = C[SPECIES];\r\n      if(C === null)C = undefined;\r\n    }\r\n  } return C === undefined ? Array : C;\r\n};","// 9.4.2.3 ArraySpeciesCreate(originalArray, length)\nvar speciesConstructor = require('./_array-species-constructor');\n\nmodule.exports = function(original, length){\n  return new (speciesConstructor(original))(length);\n};","'use strict';\nvar aFunction  = require('./_a-function')\n  , isObject   = require('./_is-object')\n  , invoke     = require('./_invoke')\n  , arraySlice = [].slice\n  , factories  = {};\n\nvar construct = function(F, len, args){\n  if(!(len in factories)){\n    for(var n = [], i = 0; i < len; i++)n[i] = 'a[' + i + ']';\n    factories[len] = Function('F,a', 'return new F(' + n.join(',') + ')');\n  } return factories[len](F, args);\n};\n\nmodule.exports = Function.bind || function bind(that /*, args... */){\n  var fn       = aFunction(this)\n    , partArgs = arraySlice.call(arguments, 1);\n  var bound = function(/* args... */){\n    var args = partArgs.concat(arraySlice.call(arguments));\n    return this instanceof bound ? construct(fn, args.length, args) : invoke(fn, args, that);\n  };\n  if(isObject(fn.prototype))bound.prototype = fn.prototype;\n  return bound;\n};","// getting tag from 19.1.3.6 Object.prototype.toString()\nvar cof = require('./_cof')\n  , TAG = require('./_wks')('toStringTag')\n  // ES3 wrong here\n  , ARG = cof(function(){ return arguments; }()) == 'Arguments';\n\n// fallback for IE11 Script Access Denied error\nvar tryGet = function(it, key){\n  try {\n    return it[key];\n  } catch(e){ /* empty */ }\n};\n\nmodule.exports = function(it){\n  var O, T, B;\n  return it === undefined ? 'Undefined' : it === null ? 'Null'\n    // @@toStringTag case\n    : typeof (T = tryGet(O = Object(it), TAG)) == 'string' ? T\n    // builtinTag case\n    : ARG ? cof(O)\n    // ES3 arguments fallback\n    : (B = cof(O)) == 'Object' && typeof O.callee == 'function' ? 'Arguments' : B;\n};","var toString = {}.toString;\n\nmodule.exports = function(it){\n  return toString.call(it).slice(8, -1);\n};","'use strict';\nvar dP          = require('./_object-dp').f\n  , create      = require('./_object-create')\n  , hide        = require('./_hide')\n  , redefineAll = require('./_redefine-all')\n  , ctx         = require('./_ctx')\n  , anInstance  = require('./_an-instance')\n  , defined     = require('./_defined')\n  , forOf       = require('./_for-of')\n  , $iterDefine = require('./_iter-define')\n  , step        = require('./_iter-step')\n  , setSpecies  = require('./_set-species')\n  , DESCRIPTORS = require('./_descriptors')\n  , fastKey     = require('./_meta').fastKey\n  , SIZE        = DESCRIPTORS ? '_s' : 'size';\n\nvar getEntry = function(that, key){\n  // fast case\n  var index = fastKey(key), entry;\n  if(index !== 'F')return that._i[index];\n  // frozen object case\n  for(entry = that._f; entry; entry = entry.n){\n    if(entry.k == key)return entry;\n  }\n};\n\nmodule.exports = {\n  getConstructor: function(wrapper, NAME, IS_MAP, ADDER){\n    var C = wrapper(function(that, iterable){\n      anInstance(that, C, NAME, '_i');\n      that._i = create(null); // index\n      that._f = undefined;    // first entry\n      that._l = undefined;    // last entry\n      that[SIZE] = 0;         // size\n      if(iterable != undefined)forOf(iterable, IS_MAP, that[ADDER], that);\n    });\n    redefineAll(C.prototype, {\n      // 23.1.3.1 Map.prototype.clear()\n      // 23.2.3.2 Set.prototype.clear()\n      clear: function clear(){\n        for(var that = this, data = that._i, entry = that._f; entry; entry = entry.n){\n          entry.r = true;\n          if(entry.p)entry.p = entry.p.n = undefined;\n          delete data[entry.i];\n        }\n        that._f = that._l = undefined;\n        that[SIZE] = 0;\n      },\n      // 23.1.3.3 Map.prototype.delete(key)\n      // 23.2.3.4 Set.prototype.delete(value)\n      'delete': function(key){\n        var that  = this\n          , entry = getEntry(that, key);\n        if(entry){\n          var next = entry.n\n            , prev = entry.p;\n          delete that._i[entry.i];\n          entry.r = true;\n          if(prev)prev.n = next;\n          if(next)next.p = prev;\n          if(that._f == entry)that._f = next;\n          if(that._l == entry)that._l = prev;\n          that[SIZE]--;\n        } return !!entry;\n      },\n      // 23.2.3.6 Set.prototype.forEach(callbackfn, thisArg = undefined)\n      // 23.1.3.5 Map.prototype.forEach(callbackfn, thisArg = undefined)\n      forEach: function forEach(callbackfn /*, that = undefined */){\n        anInstance(this, C, 'forEach');\n        var f = ctx(callbackfn, arguments.length > 1 ? arguments[1] : undefined, 3)\n          , entry;\n        while(entry = entry ? entry.n : this._f){\n          f(entry.v, entry.k, this);\n          // revert to the last existing entry\n          while(entry && entry.r)entry = entry.p;\n        }\n      },\n      // 23.1.3.7 Map.prototype.has(key)\n      // 23.2.3.7 Set.prototype.has(value)\n      has: function has(key){\n        return !!getEntry(this, key);\n      }\n    });\n    if(DESCRIPTORS)dP(C.prototype, 'size', {\n      get: function(){\n        return defined(this[SIZE]);\n      }\n    });\n    return C;\n  },\n  def: function(that, key, value){\n    var entry = getEntry(that, key)\n      , prev, index;\n    // change existing entry\n    if(entry){\n      entry.v = value;\n    // create new entry\n    } else {\n      that._l = entry = {\n        i: index = fastKey(key, true), // <- index\n        k: key,                        // <- key\n        v: value,                      // <- value\n        p: prev = that._l,             // <- previous entry\n        n: undefined,                  // <- next entry\n        r: false                       // <- removed\n      };\n      if(!that._f)that._f = entry;\n      if(prev)prev.n = entry;\n      that[SIZE]++;\n      // add to index\n      if(index !== 'F')that._i[index] = entry;\n    } return that;\n  },\n  getEntry: getEntry,\n  setStrong: function(C, NAME, IS_MAP){\n    // add .keys, .values, .entries, [@@iterator]\n    // 23.1.3.4, 23.1.3.8, 23.1.3.11, 23.1.3.12, 23.2.3.5, 23.2.3.8, 23.2.3.10, 23.2.3.11\n    $iterDefine(C, NAME, function(iterated, kind){\n      this._t = iterated;  // target\n      this._k = kind;      // kind\n      this._l = undefined; // previous\n    }, function(){\n      var that  = this\n        , kind  = that._k\n        , entry = that._l;\n      // revert to the last existing entry\n      while(entry && entry.r)entry = entry.p;\n      // get next entry\n      if(!that._t || !(that._l = entry = entry ? entry.n : that._t._f)){\n        // or finish the iteration\n        that._t = undefined;\n        return step(1);\n      }\n      // return step by kind\n      if(kind == 'keys'  )return step(0, entry.k);\n      if(kind == 'values')return step(0, entry.v);\n      return step(0, [entry.k, entry.v]);\n    }, IS_MAP ? 'entries' : 'values' , !IS_MAP, true);\n\n    // add [@@species], 23.1.2.2, 23.2.2.2\n    setSpecies(NAME);\n  }\n};","// https://github.com/DavidBruant/Map-Set.prototype.toJSON\nvar classof = require('./_classof')\n  , from    = require('./_array-from-iterable');\nmodule.exports = function(NAME){\n  return function toJSON(){\n    if(classof(this) != NAME)throw TypeError(NAME + \"#toJSON isn't generic\");\n    return from(this);\n  };\n};","'use strict';\nvar redefineAll       = require('./_redefine-all')\n  , getWeak           = require('./_meta').getWeak\n  , anObject          = require('./_an-object')\n  , isObject          = require('./_is-object')\n  , anInstance        = require('./_an-instance')\n  , forOf             = require('./_for-of')\n  , createArrayMethod = require('./_array-methods')\n  , $has              = require('./_has')\n  , arrayFind         = createArrayMethod(5)\n  , arrayFindIndex    = createArrayMethod(6)\n  , id                = 0;\n\n// fallback for uncaught frozen keys\nvar uncaughtFrozenStore = function(that){\n  return that._l || (that._l = new UncaughtFrozenStore);\n};\nvar UncaughtFrozenStore = function(){\n  this.a = [];\n};\nvar findUncaughtFrozen = function(store, key){\n  return arrayFind(store.a, function(it){\n    return it[0] === key;\n  });\n};\nUncaughtFrozenStore.prototype = {\n  get: function(key){\n    var entry = findUncaughtFrozen(this, key);\n    if(entry)return entry[1];\n  },\n  has: function(key){\n    return !!findUncaughtFrozen(this, key);\n  },\n  set: function(key, value){\n    var entry = findUncaughtFrozen(this, key);\n    if(entry)entry[1] = value;\n    else this.a.push([key, value]);\n  },\n  'delete': function(key){\n    var index = arrayFindIndex(this.a, function(it){\n      return it[0] === key;\n    });\n    if(~index)this.a.splice(index, 1);\n    return !!~index;\n  }\n};\n\nmodule.exports = {\n  getConstructor: function(wrapper, NAME, IS_MAP, ADDER){\n    var C = wrapper(function(that, iterable){\n      anInstance(that, C, NAME, '_i');\n      that._i = id++;      // collection id\n      that._l = undefined; // leak store for uncaught frozen objects\n      if(iterable != undefined)forOf(iterable, IS_MAP, that[ADDER], that);\n    });\n    redefineAll(C.prototype, {\n      // 23.3.3.2 WeakMap.prototype.delete(key)\n      // 23.4.3.3 WeakSet.prototype.delete(value)\n      'delete': function(key){\n        if(!isObject(key))return false;\n        var data = getWeak(key);\n        if(data === true)return uncaughtFrozenStore(this)['delete'](key);\n        return data && $has(data, this._i) && delete data[this._i];\n      },\n      // 23.3.3.4 WeakMap.prototype.has(key)\n      // 23.4.3.4 WeakSet.prototype.has(value)\n      has: function has(key){\n        if(!isObject(key))return false;\n        var data = getWeak(key);\n        if(data === true)return uncaughtFrozenStore(this).has(key);\n        return data && $has(data, this._i);\n      }\n    });\n    return C;\n  },\n  def: function(that, key, value){\n    var data = getWeak(anObject(key), true);\n    if(data === true)uncaughtFrozenStore(that).set(key, value);\n    else data[that._i] = value;\n    return that;\n  },\n  ufstore: uncaughtFrozenStore\n};","'use strict';\nvar global            = require('./_global')\n  , $export           = require('./_export')\n  , redefine          = require('./_redefine')\n  , redefineAll       = require('./_redefine-all')\n  , meta              = require('./_meta')\n  , forOf             = require('./_for-of')\n  , anInstance        = require('./_an-instance')\n  , isObject          = require('./_is-object')\n  , fails             = require('./_fails')\n  , $iterDetect       = require('./_iter-detect')\n  , setToStringTag    = require('./_set-to-string-tag')\n  , inheritIfRequired = require('./_inherit-if-required');\n\nmodule.exports = function(NAME, wrapper, methods, common, IS_MAP, IS_WEAK){\n  var Base  = global[NAME]\n    , C     = Base\n    , ADDER = IS_MAP ? 'set' : 'add'\n    , proto = C && C.prototype\n    , O     = {};\n  var fixMethod = function(KEY){\n    var fn = proto[KEY];\n    redefine(proto, KEY,\n      KEY == 'delete' ? function(a){\n        return IS_WEAK && !isObject(a) ? false : fn.call(this, a === 0 ? 0 : a);\n      } : KEY == 'has' ? function has(a){\n        return IS_WEAK && !isObject(a) ? false : fn.call(this, a === 0 ? 0 : a);\n      } : KEY == 'get' ? function get(a){\n        return IS_WEAK && !isObject(a) ? undefined : fn.call(this, a === 0 ? 0 : a);\n      } : KEY == 'add' ? function add(a){ fn.call(this, a === 0 ? 0 : a); return this; }\n        : function set(a, b){ fn.call(this, a === 0 ? 0 : a, b); return this; }\n    );\n  };\n  if(typeof C != 'function' || !(IS_WEAK || proto.forEach && !fails(function(){\n    new C().entries().next();\n  }))){\n    // create collection constructor\n    C = common.getConstructor(wrapper, NAME, IS_MAP, ADDER);\n    redefineAll(C.prototype, methods);\n    meta.NEED = true;\n  } else {\n    var instance             = new C\n      // early implementations not supports chaining\n      , HASNT_CHAINING       = instance[ADDER](IS_WEAK ? {} : -0, 1) != instance\n      // V8 ~  Chromium 40- weak-collections throws on primitives, but should return false\n      , THROWS_ON_PRIMITIVES = fails(function(){ instance.has(1); })\n      // most early implementations doesn't supports iterables, most modern - not close it correctly\n      , ACCEPT_ITERABLES     = $iterDetect(function(iter){ new C(iter); }) // eslint-disable-line no-new\n      // for early implementations -0 and +0 not the same\n      , BUGGY_ZERO = !IS_WEAK && fails(function(){\n        // V8 ~ Chromium 42- fails only with 5+ elements\n        var $instance = new C()\n          , index     = 5;\n        while(index--)$instance[ADDER](index, index);\n        return !$instance.has(-0);\n      });\n    if(!ACCEPT_ITERABLES){ \n      C = wrapper(function(target, iterable){\n        anInstance(target, C, NAME);\n        var that = inheritIfRequired(new Base, target, C);\n        if(iterable != undefined)forOf(iterable, IS_MAP, that[ADDER], that);\n        return that;\n      });\n      C.prototype = proto;\n      proto.constructor = C;\n    }\n    if(THROWS_ON_PRIMITIVES || BUGGY_ZERO){\n      fixMethod('delete');\n      fixMethod('has');\n      IS_MAP && fixMethod('get');\n    }\n    if(BUGGY_ZERO || HASNT_CHAINING)fixMethod(ADDER);\n    // weak collections should not contains .clear method\n    if(IS_WEAK && proto.clear)delete proto.clear;\n  }\n\n  setToStringTag(C, NAME);\n\n  O[NAME] = C;\n  $export($export.G + $export.W + $export.F * (C != Base), O);\n\n  if(!IS_WEAK)common.setStrong(C, NAME, IS_MAP);\n\n  return C;\n};","var core = module.exports = {version: '2.4.0'};\nif(typeof __e == 'number')__e = core; // eslint-disable-line no-undef","'use strict';\r\nvar $defineProperty = require('./_object-dp')\r\n  , createDesc      = require('./_property-desc');\r\n\r\nmodule.exports = function(object, index, value){\r\n  if(index in object)$defineProperty.f(object, index, createDesc(0, value));\r\n  else object[index] = value;\r\n};","// optional / simple context binding\nvar aFunction = require('./_a-function');\nmodule.exports = function(fn, that, length){\n  aFunction(fn);\n  if(that === undefined)return fn;\n  switch(length){\n    case 1: return function(a){\n      return fn.call(that, a);\n    };\n    case 2: return function(a, b){\n      return fn.call(that, a, b);\n    };\n    case 3: return function(a, b, c){\n      return fn.call(that, a, b, c);\n    };\n  }\n  return function(/* ...args */){\n    return fn.apply(that, arguments);\n  };\n};","'use strict';\r\nvar anObject    = require('./_an-object')\r\n  , toPrimitive = require('./_to-primitive')\r\n  , NUMBER      = 'number';\r\n\r\nmodule.exports = function(hint){\r\n  if(hint !== 'string' && hint !== NUMBER && hint !== 'default')throw TypeError('Incorrect hint');\r\n  return toPrimitive(anObject(this), hint != NUMBER);\r\n};","// 7.2.1 RequireObjectCoercible(argument)\nmodule.exports = function(it){\n  if(it == undefined)throw TypeError(\"Can't call method on  \" + it);\n  return it;\n};","// Thank's IE8 for his funny defineProperty\nmodule.exports = !require('./_fails')(function(){\n  return Object.defineProperty({}, 'a', {get: function(){ return 7; }}).a != 7;\n});","var isObject = require('./_is-object')\n  , document = require('./_global').document\n  // in old IE typeof document.createElement is 'object'\n  , is = isObject(document) && isObject(document.createElement);\nmodule.exports = function(it){\n  return is ? document.createElement(it) : {};\n};","// IE 8- don't enum bug keys\r\nmodule.exports = (\r\n  'constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf'\r\n).split(',');","// all enumerable object keys, includes symbols\nvar getKeys = require('./_object-keys')\n  , gOPS    = require('./_object-gops')\n  , pIE     = require('./_object-pie');\nmodule.exports = function(it){\n  var result     = getKeys(it)\n    , getSymbols = gOPS.f;\n  if(getSymbols){\n    var symbols = getSymbols(it)\n      , isEnum  = pIE.f\n      , i       = 0\n      , key;\n    while(symbols.length > i)if(isEnum.call(it, key = symbols[i++]))result.push(key);\n  } return result;\n};","var global    = require('./_global')\n  , core      = require('./_core')\n  , hide      = require('./_hide')\n  , redefine  = require('./_redefine')\n  , ctx       = require('./_ctx')\n  , PROTOTYPE = 'prototype';\n\nvar $export = function(type, name, source){\n  var IS_FORCED = type & $export.F\n    , IS_GLOBAL = type & $export.G\n    , IS_STATIC = type & $export.S\n    , IS_PROTO  = type & $export.P\n    , IS_BIND   = type & $export.B\n    , target    = IS_GLOBAL ? global : IS_STATIC ? global[name] || (global[name] = {}) : (global[name] || {})[PROTOTYPE]\n    , exports   = IS_GLOBAL ? core : core[name] || (core[name] = {})\n    , expProto  = exports[PROTOTYPE] || (exports[PROTOTYPE] = {})\n    , key, own, out, exp;\n  if(IS_GLOBAL)source = name;\n  for(key in source){\n    // contains in native\n    own = !IS_FORCED && target && target[key] !== undefined;\n    // export native or passed\n    out = (own ? target : source)[key];\n    // bind timers to global for call from export context\n    exp = IS_BIND && own ? ctx(out, global) : IS_PROTO && typeof out == 'function' ? ctx(Function.call, out) : out;\n    // extend global\n    if(target)redefine(target, key, out, type & $export.U);\n    // export\n    if(exports[key] != out)hide(exports, key, exp);\n    if(IS_PROTO && expProto[key] != out)expProto[key] = out;\n  }\n};\nglobal.core = core;\n// type bitmap\n$export.F = 1;   // forced\n$export.G = 2;   // global\n$export.S = 4;   // static\n$export.P = 8;   // proto\n$export.B = 16;  // bind\n$export.W = 32;  // wrap\n$export.U = 64;  // safe\n$export.R = 128; // real proto method for `library` \nmodule.exports = $export;","var MATCH = require('./_wks')('match');\nmodule.exports = function(KEY){\n  var re = /./;\n  try {\n    '/./'[KEY](re);\n  } catch(e){\n    try {\n      re[MATCH] = false;\n      return !'/./'[KEY](re);\n    } catch(f){ /* empty */ }\n  } return true;\n};","module.exports = function(exec){\n  try {\n    return !!exec();\n  } catch(e){\n    return true;\n  }\n};","'use strict';\nvar hide     = require('./_hide')\n  , redefine = require('./_redefine')\n  , fails    = require('./_fails')\n  , defined  = require('./_defined')\n  , wks      = require('./_wks');\n\nmodule.exports = function(KEY, length, exec){\n  var SYMBOL   = wks(KEY)\n    , fns      = exec(defined, SYMBOL, ''[KEY])\n    , strfn    = fns[0]\n    , rxfn     = fns[1];\n  if(fails(function(){\n    var O = {};\n    O[SYMBOL] = function(){ return 7; };\n    return ''[KEY](O) != 7;\n  })){\n    redefine(String.prototype, KEY, strfn);\n    hide(RegExp.prototype, SYMBOL, length == 2\n      // 21.2.5.8 RegExp.prototype[@@replace](string, replaceValue)\n      // 21.2.5.11 RegExp.prototype[@@split](string, limit)\n      ? function(string, arg){ return rxfn.call(string, this, arg); }\n      // 21.2.5.6 RegExp.prototype[@@match](string)\n      // 21.2.5.9 RegExp.prototype[@@search](string)\n      : function(string){ return rxfn.call(string, this); }\n    );\n  }\n};","'use strict';\n// 21.2.5.3 get RegExp.prototype.flags\nvar anObject = require('./_an-object');\nmodule.exports = function(){\n  var that   = anObject(this)\n    , result = '';\n  if(that.global)     result += 'g';\n  if(that.ignoreCase) result += 'i';\n  if(that.multiline)  result += 'm';\n  if(that.unicode)    result += 'u';\n  if(that.sticky)     result += 'y';\n  return result;\n};","var ctx         = require('./_ctx')\n  , call        = require('./_iter-call')\n  , isArrayIter = require('./_is-array-iter')\n  , anObject    = require('./_an-object')\n  , toLength    = require('./_to-length')\n  , getIterFn   = require('./core.get-iterator-method')\n  , BREAK       = {}\n  , RETURN      = {};\nvar exports = module.exports = function(iterable, entries, fn, that, ITERATOR){\n  var iterFn = ITERATOR ? function(){ return iterable; } : getIterFn(iterable)\n    , f      = ctx(fn, that, entries ? 2 : 1)\n    , index  = 0\n    , length, step, iterator, result;\n  if(typeof iterFn != 'function')throw TypeError(iterable + ' is not iterable!');\n  // fast case for arrays with default iterator\n  if(isArrayIter(iterFn))for(length = toLength(iterable.length); length > index; index++){\n    result = entries ? f(anObject(step = iterable[index])[0], step[1]) : f(iterable[index]);\n    if(result === BREAK || result === RETURN)return result;\n  } else for(iterator = iterFn.call(iterable); !(step = iterator.next()).done; ){\n    result = call(iterator, f, step.value, entries);\n    if(result === BREAK || result === RETURN)return result;\n  }\n};\nexports.BREAK  = BREAK;\nexports.RETURN = RETURN;","// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\nvar global = module.exports = typeof window != 'undefined' && window.Math == Math\n  ? window : typeof self != 'undefined' && self.Math == Math ? self : Function('return this')();\nif(typeof __g == 'number')__g = global; // eslint-disable-line no-undef","var hasOwnProperty = {}.hasOwnProperty;\nmodule.exports = function(it, key){\n  return hasOwnProperty.call(it, key);\n};","var dP         = require('./_object-dp')\n  , createDesc = require('./_property-desc');\nmodule.exports = require('./_descriptors') ? function(object, key, value){\n  return dP.f(object, key, createDesc(1, value));\n} : function(object, key, value){\n  object[key] = value;\n  return object;\n};","module.exports = require('./_global').document && document.documentElement;","module.exports = !require('./_descriptors') && !require('./_fails')(function(){\r\n  return Object.defineProperty(require('./_dom-create')('div'), 'a', {get: function(){ return 7; }}).a != 7;\r\n});","var isObject       = require('./_is-object')\r\n  , setPrototypeOf = require('./_set-proto').set;\r\nmodule.exports = function(that, target, C){\r\n  var P, S = target.constructor;\r\n  if(S !== C && typeof S == 'function' && (P = S.prototype) !== C.prototype && isObject(P) && setPrototypeOf){\r\n    setPrototypeOf(that, P);\r\n  } return that;\r\n};","// fast apply, http://jsperf.lnkit.com/fast-apply/5\nmodule.exports = function(fn, args, that){\n  var un = that === undefined;\n  switch(args.length){\n    case 0: return un ? fn()\n                      : fn.call(that);\n    case 1: return un ? fn(args[0])\n                      : fn.call(that, args[0]);\n    case 2: return un ? fn(args[0], args[1])\n                      : fn.call(that, args[0], args[1]);\n    case 3: return un ? fn(args[0], args[1], args[2])\n                      : fn.call(that, args[0], args[1], args[2]);\n    case 4: return un ? fn(args[0], args[1], args[2], args[3])\n                      : fn.call(that, args[0], args[1], args[2], args[3]);\n  } return              fn.apply(that, args);\n};","// fallback for non-array-like ES3 and non-enumerable old V8 strings\nvar cof = require('./_cof');\nmodule.exports = Object('z').propertyIsEnumerable(0) ? Object : function(it){\n  return cof(it) == 'String' ? it.split('') : Object(it);\n};","// check on default Array iterator\nvar Iterators  = require('./_iterators')\n  , ITERATOR   = require('./_wks')('iterator')\n  , ArrayProto = Array.prototype;\n\nmodule.exports = function(it){\n  return it !== undefined && (Iterators.Array === it || ArrayProto[ITERATOR] === it);\n};","// 7.2.2 IsArray(argument)\nvar cof = require('./_cof');\nmodule.exports = Array.isArray || function isArray(arg){\n  return cof(arg) == 'Array';\n};","// 20.1.2.3 Number.isInteger(number)\nvar isObject = require('./_is-object')\n  , floor    = Math.floor;\nmodule.exports = function isInteger(it){\n  return !isObject(it) && isFinite(it) && floor(it) === it;\n};","module.exports = function(it){\n  return typeof it === 'object' ? it !== null : typeof it === 'function';\n};","// 7.2.8 IsRegExp(argument)\nvar isObject = require('./_is-object')\n  , cof      = require('./_cof')\n  , MATCH    = require('./_wks')('match');\nmodule.exports = function(it){\n  var isRegExp;\n  return isObject(it) && ((isRegExp = it[MATCH]) !== undefined ? !!isRegExp : cof(it) == 'RegExp');\n};","// call something on iterator step with safe closing on error\nvar anObject = require('./_an-object');\nmodule.exports = function(iterator, fn, value, entries){\n  try {\n    return entries ? fn(anObject(value)[0], value[1]) : fn(value);\n  // 7.4.6 IteratorClose(iterator, completion)\n  } catch(e){\n    var ret = iterator['return'];\n    if(ret !== undefined)anObject(ret.call(iterator));\n    throw e;\n  }\n};","'use strict';\nvar create         = require('./_object-create')\n  , descriptor     = require('./_property-desc')\n  , setToStringTag = require('./_set-to-string-tag')\n  , IteratorPrototype = {};\n\n// 25.1.2.1.1 %IteratorPrototype%[@@iterator]()\nrequire('./_hide')(IteratorPrototype, require('./_wks')('iterator'), function(){ return this; });\n\nmodule.exports = function(Constructor, NAME, next){\n  Constructor.prototype = create(IteratorPrototype, {next: descriptor(1, next)});\n  setToStringTag(Constructor, NAME + ' Iterator');\n};","'use strict';\nvar LIBRARY        = require('./_library')\n  , $export        = require('./_export')\n  , redefine       = require('./_redefine')\n  , hide           = require('./_hide')\n  , has            = require('./_has')\n  , Iterators      = require('./_iterators')\n  , $iterCreate    = require('./_iter-create')\n  , setToStringTag = require('./_set-to-string-tag')\n  , getPrototypeOf = require('./_object-gpo')\n  , ITERATOR       = require('./_wks')('iterator')\n  , BUGGY          = !([].keys && 'next' in [].keys()) // Safari has buggy iterators w/o `next`\n  , FF_ITERATOR    = '@@iterator'\n  , KEYS           = 'keys'\n  , VALUES         = 'values';\n\nvar returnThis = function(){ return this; };\n\nmodule.exports = function(Base, NAME, Constructor, next, DEFAULT, IS_SET, FORCED){\n  $iterCreate(Constructor, NAME, next);\n  var getMethod = function(kind){\n    if(!BUGGY && kind in proto)return proto[kind];\n    switch(kind){\n      case KEYS: return function keys(){ return new Constructor(this, kind); };\n      case VALUES: return function values(){ return new Constructor(this, kind); };\n    } return function entries(){ return new Constructor(this, kind); };\n  };\n  var TAG        = NAME + ' Iterator'\n    , DEF_VALUES = DEFAULT == VALUES\n    , VALUES_BUG = false\n    , proto      = Base.prototype\n    , $native    = proto[ITERATOR] || proto[FF_ITERATOR] || DEFAULT && proto[DEFAULT]\n    , $default   = $native || getMethod(DEFAULT)\n    , $entries   = DEFAULT ? !DEF_VALUES ? $default : getMethod('entries') : undefined\n    , $anyNative = NAME == 'Array' ? proto.entries || $native : $native\n    , methods, key, IteratorPrototype;\n  // Fix native\n  if($anyNative){\n    IteratorPrototype = getPrototypeOf($anyNative.call(new Base));\n    if(IteratorPrototype !== Object.prototype){\n      // Set @@toStringTag to native iterators\n      setToStringTag(IteratorPrototype, TAG, true);\n      // fix for some old engines\n      if(!LIBRARY && !has(IteratorPrototype, ITERATOR))hide(IteratorPrototype, ITERATOR, returnThis);\n    }\n  }\n  // fix Array#{values, @@iterator}.name in V8 / FF\n  if(DEF_VALUES && $native && $native.name !== VALUES){\n    VALUES_BUG = true;\n    $default = function values(){ return $native.call(this); };\n  }\n  // Define iterator\n  if((!LIBRARY || FORCED) && (BUGGY || VALUES_BUG || !proto[ITERATOR])){\n    hide(proto, ITERATOR, $default);\n  }\n  // Plug for library\n  Iterators[NAME] = $default;\n  Iterators[TAG]  = returnThis;\n  if(DEFAULT){\n    methods = {\n      values:  DEF_VALUES ? $default : getMethod(VALUES),\n      keys:    IS_SET     ? $default : getMethod(KEYS),\n      entries: $entries\n    };\n    if(FORCED)for(key in methods){\n      if(!(key in proto))redefine(proto, key, methods[key]);\n    } else $export($export.P + $export.F * (BUGGY || VALUES_BUG), NAME, methods);\n  }\n  return methods;\n};","var ITERATOR     = require('./_wks')('iterator')\n  , SAFE_CLOSING = false;\n\ntry {\n  var riter = [7][ITERATOR]();\n  riter['return'] = function(){ SAFE_CLOSING = true; };\n  Array.from(riter, function(){ throw 2; });\n} catch(e){ /* empty */ }\n\nmodule.exports = function(exec, skipClosing){\n  if(!skipClosing && !SAFE_CLOSING)return false;\n  var safe = false;\n  try {\n    var arr  = [7]\n      , iter = arr[ITERATOR]();\n    iter.next = function(){ return {done: safe = true}; };\n    arr[ITERATOR] = function(){ return iter; };\n    exec(arr);\n  } catch(e){ /* empty */ }\n  return safe;\n};","module.exports = function(done, value){\n  return {value: value, done: !!done};\n};","module.exports = {};","var getKeys   = require('./_object-keys')\n  , toIObject = require('./_to-iobject');\nmodule.exports = function(object, el){\n  var O      = toIObject(object)\n    , keys   = getKeys(O)\n    , length = keys.length\n    , index  = 0\n    , key;\n  while(length > index)if(O[key = keys[index++]] === el)return key;\n};","module.exports = false;","// 20.2.2.14 Math.expm1(x)\nvar $expm1 = Math.expm1;\nmodule.exports = (!$expm1\n  // Old FF bug\n  || $expm1(10) > 22025.465794806719 || $expm1(10) < 22025.4657948067165168\n  // Tor Browser bug\n  || $expm1(-2e-17) != -2e-17\n) ? function expm1(x){\n  return (x = +x) == 0 ? x : x > -1e-6 && x < 1e-6 ? x + x * x / 2 : Math.exp(x) - 1;\n} : $expm1;","// 20.2.2.20 Math.log1p(x)\nmodule.exports = Math.log1p || function log1p(x){\n  return (x = +x) > -1e-8 && x < 1e-8 ? x - x * x / 2 : Math.log(1 + x);\n};","// 20.2.2.28 Math.sign(x)\nmodule.exports = Math.sign || function sign(x){\n  return (x = +x) == 0 || x != x ? x : x < 0 ? -1 : 1;\n};","var META     = require('./_uid')('meta')\n  , isObject = require('./_is-object')\n  , has      = require('./_has')\n  , setDesc  = require('./_object-dp').f\n  , id       = 0;\nvar isExtensible = Object.isExtensible || function(){\n  return true;\n};\nvar FREEZE = !require('./_fails')(function(){\n  return isExtensible(Object.preventExtensions({}));\n});\nvar setMeta = function(it){\n  setDesc(it, META, {value: {\n    i: 'O' + ++id, // object ID\n    w: {}          // weak collections IDs\n  }});\n};\nvar fastKey = function(it, create){\n  // return primitive with prefix\n  if(!isObject(it))return typeof it == 'symbol' ? it : (typeof it == 'string' ? 'S' : 'P') + it;\n  if(!has(it, META)){\n    // can't set metadata to uncaught frozen object\n    if(!isExtensible(it))return 'F';\n    // not necessary to add metadata\n    if(!create)return 'E';\n    // add missing metadata\n    setMeta(it);\n  // return object ID\n  } return it[META].i;\n};\nvar getWeak = function(it, create){\n  if(!has(it, META)){\n    // can't set metadata to uncaught frozen object\n    if(!isExtensible(it))return true;\n    // not necessary to add metadata\n    if(!create)return false;\n    // add missing metadata\n    setMeta(it);\n  // return hash weak collections IDs\n  } return it[META].w;\n};\n// add metadata on freeze-family methods calling\nvar onFreeze = function(it){\n  if(FREEZE && meta.NEED && isExtensible(it) && !has(it, META))setMeta(it);\n  return it;\n};\nvar meta = module.exports = {\n  KEY:      META,\n  NEED:     false,\n  fastKey:  fastKey,\n  getWeak:  getWeak,\n  onFreeze: onFreeze\n};","var Map     = require('./es6.map')\n  , $export = require('./_export')\n  , shared  = require('./_shared')('metadata')\n  , store   = shared.store || (shared.store = new (require('./es6.weak-map')));\n\nvar getOrCreateMetadataMap = function(target, targetKey, create){\n  var targetMetadata = store.get(target);\n  if(!targetMetadata){\n    if(!create)return undefined;\n    store.set(target, targetMetadata = new Map);\n  }\n  var keyMetadata = targetMetadata.get(targetKey);\n  if(!keyMetadata){\n    if(!create)return undefined;\n    targetMetadata.set(targetKey, keyMetadata = new Map);\n  } return keyMetadata;\n};\nvar ordinaryHasOwnMetadata = function(MetadataKey, O, P){\n  var metadataMap = getOrCreateMetadataMap(O, P, false);\n  return metadataMap === undefined ? false : metadataMap.has(MetadataKey);\n};\nvar ordinaryGetOwnMetadata = function(MetadataKey, O, P){\n  var metadataMap = getOrCreateMetadataMap(O, P, false);\n  return metadataMap === undefined ? undefined : metadataMap.get(MetadataKey);\n};\nvar ordinaryDefineOwnMetadata = function(MetadataKey, MetadataValue, O, P){\n  getOrCreateMetadataMap(O, P, true).set(MetadataKey, MetadataValue);\n};\nvar ordinaryOwnMetadataKeys = function(target, targetKey){\n  var metadataMap = getOrCreateMetadataMap(target, targetKey, false)\n    , keys        = [];\n  if(metadataMap)metadataMap.forEach(function(_, key){ keys.push(key); });\n  return keys;\n};\nvar toMetaKey = function(it){\n  return it === undefined || typeof it == 'symbol' ? it : String(it);\n};\nvar exp = function(O){\n  $export($export.S, 'Reflect', O);\n};\n\nmodule.exports = {\n  store: store,\n  map: getOrCreateMetadataMap,\n  has: ordinaryHasOwnMetadata,\n  get: ordinaryGetOwnMetadata,\n  set: ordinaryDefineOwnMetadata,\n  keys: ordinaryOwnMetadataKeys,\n  key: toMetaKey,\n  exp: exp\n};","var global    = require('./_global')\n  , macrotask = require('./_task').set\n  , Observer  = global.MutationObserver || global.WebKitMutationObserver\n  , process   = global.process\n  , Promise   = global.Promise\n  , isNode    = require('./_cof')(process) == 'process';\n\nmodule.exports = function(){\n  var head, last, notify;\n\n  var flush = function(){\n    var parent, fn;\n    if(isNode && (parent = process.domain))parent.exit();\n    while(head){\n      fn   = head.fn;\n      head = head.next;\n      try {\n        fn();\n      } catch(e){\n        if(head)notify();\n        else last = undefined;\n        throw e;\n      }\n    } last = undefined;\n    if(parent)parent.enter();\n  };\n\n  // Node.js\n  if(isNode){\n    notify = function(){\n      process.nextTick(flush);\n    };\n  // browsers with MutationObserver\n  } else if(Observer){\n    var toggle = true\n      , node   = document.createTextNode('');\n    new Observer(flush).observe(node, {characterData: true}); // eslint-disable-line no-new\n    notify = function(){\n      node.data = toggle = !toggle;\n    };\n  // environments with maybe non-completely correct, but existent Promise\n  } else if(Promise && Promise.resolve){\n    var promise = Promise.resolve();\n    notify = function(){\n      promise.then(flush);\n    };\n  // for other environments - macrotask based on:\n  // - setImmediate\n  // - MessageChannel\n  // - window.postMessag\n  // - onreadystatechange\n  // - setTimeout\n  } else {\n    notify = function(){\n      // strange IE + webpack dev server bug - use .call(global)\n      macrotask.call(global, flush);\n    };\n  }\n\n  return function(fn){\n    var task = {fn: fn, next: undefined};\n    if(last)last.next = task;\n    if(!head){\n      head = task;\n      notify();\n    } last = task;\n  };\n};","'use strict';\n// 19.1.2.1 Object.assign(target, source, ...)\nvar getKeys  = require('./_object-keys')\n  , gOPS     = require('./_object-gops')\n  , pIE      = require('./_object-pie')\n  , toObject = require('./_to-object')\n  , IObject  = require('./_iobject')\n  , $assign  = Object.assign;\n\n// should work with symbols and should have deterministic property order (V8 bug)\nmodule.exports = !$assign || require('./_fails')(function(){\n  var A = {}\n    , B = {}\n    , S = Symbol()\n    , K = 'abcdefghijklmnopqrst';\n  A[S] = 7;\n  K.split('').forEach(function(k){ B[k] = k; });\n  return $assign({}, A)[S] != 7 || Object.keys($assign({}, B)).join('') != K;\n}) ? function assign(target, source){ // eslint-disable-line no-unused-vars\n  var T     = toObject(target)\n    , aLen  = arguments.length\n    , index = 1\n    , getSymbols = gOPS.f\n    , isEnum     = pIE.f;\n  while(aLen > index){\n    var S      = IObject(arguments[index++])\n      , keys   = getSymbols ? getKeys(S).concat(getSymbols(S)) : getKeys(S)\n      , length = keys.length\n      , j      = 0\n      , key;\n    while(length > j)if(isEnum.call(S, key = keys[j++]))T[key] = S[key];\n  } return T;\n} : $assign;","// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])\r\nvar anObject    = require('./_an-object')\r\n  , dPs         = require('./_object-dps')\r\n  , enumBugKeys = require('./_enum-bug-keys')\r\n  , IE_PROTO    = require('./_shared-key')('IE_PROTO')\r\n  , Empty       = function(){ /* empty */ }\r\n  , PROTOTYPE   = 'prototype';\r\n\r\n// Create object with fake `null` prototype: use iframe Object with cleared prototype\r\nvar createDict = function(){\r\n  // Thrash, waste and sodomy: IE GC bug\r\n  var iframe = require('./_dom-create')('iframe')\r\n    , i      = enumBugKeys.length\r\n    , gt     = '>'\r\n    , iframeDocument;\r\n  iframe.style.display = 'none';\r\n  require('./_html').appendChild(iframe);\r\n  iframe.src = 'javascript:'; // eslint-disable-line no-script-url\r\n  // createDict = iframe.contentWindow.Object;\r\n  // html.removeChild(iframe);\r\n  iframeDocument = iframe.contentWindow.document;\r\n  iframeDocument.open();\r\n  iframeDocument.write('<script>document.F=Object</script' + gt);\r\n  iframeDocument.close();\r\n  createDict = iframeDocument.F;\r\n  while(i--)delete createDict[PROTOTYPE][enumBugKeys[i]];\r\n  return createDict();\r\n};\r\n\r\nmodule.exports = Object.create || function create(O, Properties){\r\n  var result;\r\n  if(O !== null){\r\n    Empty[PROTOTYPE] = anObject(O);\r\n    result = new Empty;\r\n    Empty[PROTOTYPE] = null;\r\n    // add \"__proto__\" for Object.getPrototypeOf polyfill\r\n    result[IE_PROTO] = O;\r\n  } else result = createDict();\r\n  return Properties === undefined ? result : dPs(result, Properties);\r\n};","var anObject       = require('./_an-object')\n  , IE8_DOM_DEFINE = require('./_ie8-dom-define')\n  , toPrimitive    = require('./_to-primitive')\n  , dP             = Object.defineProperty;\n\nexports.f = require('./_descriptors') ? Object.defineProperty : function defineProperty(O, P, Attributes){\n  anObject(O);\n  P = toPrimitive(P, true);\n  anObject(Attributes);\n  if(IE8_DOM_DEFINE)try {\n    return dP(O, P, Attributes);\n  } catch(e){ /* empty */ }\n  if('get' in Attributes || 'set' in Attributes)throw TypeError('Accessors not supported!');\n  if('value' in Attributes)O[P] = Attributes.value;\n  return O;\n};","var dP       = require('./_object-dp')\r\n  , anObject = require('./_an-object')\r\n  , getKeys  = require('./_object-keys');\r\n\r\nmodule.exports = require('./_descriptors') ? Object.defineProperties : function defineProperties(O, Properties){\r\n  anObject(O);\r\n  var keys   = getKeys(Properties)\r\n    , length = keys.length\r\n    , i = 0\r\n    , P;\r\n  while(length > i)dP.f(O, P = keys[i++], Properties[P]);\r\n  return O;\r\n};","// Forced replacement prototype accessors methods\r\nmodule.exports = require('./_library')|| !require('./_fails')(function(){\r\n  var K = Math.random();\r\n  // In FF throws only define methods\r\n  __defineSetter__.call(null, K, function(){ /* empty */});\r\n  delete require('./_global')[K];\r\n});","var pIE            = require('./_object-pie')\r\n  , createDesc     = require('./_property-desc')\r\n  , toIObject      = require('./_to-iobject')\r\n  , toPrimitive    = require('./_to-primitive')\r\n  , has            = require('./_has')\r\n  , IE8_DOM_DEFINE = require('./_ie8-dom-define')\r\n  , gOPD           = Object.getOwnPropertyDescriptor;\r\n\r\nexports.f = require('./_descriptors') ? gOPD : function getOwnPropertyDescriptor(O, P){\r\n  O = toIObject(O);\r\n  P = toPrimitive(P, true);\r\n  if(IE8_DOM_DEFINE)try {\r\n    return gOPD(O, P);\r\n  } catch(e){ /* empty */ }\r\n  if(has(O, P))return createDesc(!pIE.f.call(O, P), O[P]);\r\n};","// fallback for IE11 buggy Object.getOwnPropertyNames with iframe and window\nvar toIObject = require('./_to-iobject')\n  , gOPN      = require('./_object-gopn').f\n  , toString  = {}.toString;\n\nvar windowNames = typeof window == 'object' && window && Object.getOwnPropertyNames\n  ? Object.getOwnPropertyNames(window) : [];\n\nvar getWindowNames = function(it){\n  try {\n    return gOPN(it);\n  } catch(e){\n    return windowNames.slice();\n  }\n};\n\nmodule.exports.f = function getOwnPropertyNames(it){\n  return windowNames && toString.call(it) == '[object Window]' ? getWindowNames(it) : gOPN(toIObject(it));\n};\n","// 19.1.2.7 / 15.2.3.4 Object.getOwnPropertyNames(O)\r\nvar $keys      = require('./_object-keys-internal')\r\n  , hiddenKeys = require('./_enum-bug-keys').concat('length', 'prototype');\r\n\r\nexports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O){\r\n  return $keys(O, hiddenKeys);\r\n};","exports.f = Object.getOwnPropertySymbols;","// 19.1.2.9 / 15.2.3.2 Object.getPrototypeOf(O)\r\nvar has         = require('./_has')\r\n  , toObject    = require('./_to-object')\r\n  , IE_PROTO    = require('./_shared-key')('IE_PROTO')\r\n  , ObjectProto = Object.prototype;\r\n\r\nmodule.exports = Object.getPrototypeOf || function(O){\r\n  O = toObject(O);\r\n  if(has(O, IE_PROTO))return O[IE_PROTO];\r\n  if(typeof O.constructor == 'function' && O instanceof O.constructor){\r\n    return O.constructor.prototype;\r\n  } return O instanceof Object ? ObjectProto : null;\r\n};","var has          = require('./_has')\r\n  , toIObject    = require('./_to-iobject')\r\n  , arrayIndexOf = require('./_array-includes')(false)\r\n  , IE_PROTO     = require('./_shared-key')('IE_PROTO');\r\n\r\nmodule.exports = function(object, names){\r\n  var O      = toIObject(object)\r\n    , i      = 0\r\n    , result = []\r\n    , key;\r\n  for(key in O)if(key != IE_PROTO)has(O, key) && result.push(key);\r\n  // Don't enum bug & hidden keys\r\n  while(names.length > i)if(has(O, key = names[i++])){\r\n    ~arrayIndexOf(result, key) || result.push(key);\r\n  }\r\n  return result;\r\n};","// 19.1.2.14 / 15.2.3.14 Object.keys(O)\r\nvar $keys       = require('./_object-keys-internal')\r\n  , enumBugKeys = require('./_enum-bug-keys');\r\n\r\nmodule.exports = Object.keys || function keys(O){\r\n  return $keys(O, enumBugKeys);\r\n};","exports.f = {}.propertyIsEnumerable;","// most Object methods by ES6 should accept primitives\nvar $export = require('./_export')\n  , core    = require('./_core')\n  , fails   = require('./_fails');\nmodule.exports = function(KEY, exec){\n  var fn  = (core.Object || {})[KEY] || Object[KEY]\n    , exp = {};\n  exp[KEY] = exec(fn);\n  $export($export.S + $export.F * fails(function(){ fn(1); }), 'Object', exp);\n};","var getKeys   = require('./_object-keys')\n  , toIObject = require('./_to-iobject')\n  , isEnum    = require('./_object-pie').f;\nmodule.exports = function(isEntries){\n  return function(it){\n    var O      = toIObject(it)\n      , keys   = getKeys(O)\n      , length = keys.length\n      , i      = 0\n      , result = []\n      , key;\n    while(length > i)if(isEnum.call(O, key = keys[i++])){\n      result.push(isEntries ? [key, O[key]] : O[key]);\n    } return result;\n  };\n};","// all object keys, includes non-enumerable and symbols\nvar gOPN     = require('./_object-gopn')\n  , gOPS     = require('./_object-gops')\n  , anObject = require('./_an-object')\n  , Reflect  = require('./_global').Reflect;\nmodule.exports = Reflect && Reflect.ownKeys || function ownKeys(it){\n  var keys       = gOPN.f(anObject(it))\n    , getSymbols = gOPS.f;\n  return getSymbols ? keys.concat(getSymbols(it)) : keys;\n};","var $parseFloat = require('./_global').parseFloat\n  , $trim       = require('./_string-trim').trim;\n\nmodule.exports = 1 / $parseFloat(require('./_string-ws') + '-0') !== -Infinity ? function parseFloat(str){\n  var string = $trim(String(str), 3)\n    , result = $parseFloat(string);\n  return result === 0 && string.charAt(0) == '-' ? -0 : result;\n} : $parseFloat;","var $parseInt = require('./_global').parseInt\n  , $trim     = require('./_string-trim').trim\n  , ws        = require('./_string-ws')\n  , hex       = /^[\\-+]?0[xX]/;\n\nmodule.exports = $parseInt(ws + '08') !== 8 || $parseInt(ws + '0x16') !== 22 ? function parseInt(str, radix){\n  var string = $trim(String(str), 3);\n  return $parseInt(string, (radix >>> 0) || (hex.test(string) ? 16 : 10));\n} : $parseInt;","'use strict';\nvar path      = require('./_path')\n  , invoke    = require('./_invoke')\n  , aFunction = require('./_a-function');\nmodule.exports = function(/* ...pargs */){\n  var fn     = aFunction(this)\n    , length = arguments.length\n    , pargs  = Array(length)\n    , i      = 0\n    , _      = path._\n    , holder = false;\n  while(length > i)if((pargs[i] = arguments[i++]) === _)holder = true;\n  return function(/* ...args */){\n    var that = this\n      , aLen = arguments.length\n      , j = 0, k = 0, args;\n    if(!holder && !aLen)return invoke(fn, pargs, that);\n    args = pargs.slice();\n    if(holder)for(;length > j; j++)if(args[j] === _)args[j] = arguments[k++];\n    while(aLen > k)args.push(arguments[k++]);\n    return invoke(fn, args, that);\n  };\n};","module.exports = require('./_global');","module.exports = function(bitmap, value){\n  return {\n    enumerable  : !(bitmap & 1),\n    configurable: !(bitmap & 2),\n    writable    : !(bitmap & 4),\n    value       : value\n  };\n};","var redefine = require('./_redefine');\nmodule.exports = function(target, src, safe){\n  for(var key in src)redefine(target, key, src[key], safe);\n  return target;\n};","var global    = require('./_global')\n  , hide      = require('./_hide')\n  , has       = require('./_has')\n  , SRC       = require('./_uid')('src')\n  , TO_STRING = 'toString'\n  , $toString = Function[TO_STRING]\n  , TPL       = ('' + $toString).split(TO_STRING);\n\nrequire('./_core').inspectSource = function(it){\n  return $toString.call(it);\n};\n\n(module.exports = function(O, key, val, safe){\n  var isFunction = typeof val == 'function';\n  if(isFunction)has(val, 'name') || hide(val, 'name', key);\n  if(O[key] === val)return;\n  if(isFunction)has(val, SRC) || hide(val, SRC, O[key] ? '' + O[key] : TPL.join(String(key)));\n  if(O === global){\n    O[key] = val;\n  } else {\n    if(!safe){\n      delete O[key];\n      hide(O, key, val);\n    } else {\n      if(O[key])O[key] = val;\n      else hide(O, key, val);\n    }\n  }\n// add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative\n})(Function.prototype, TO_STRING, function toString(){\n  return typeof this == 'function' && this[SRC] || $toString.call(this);\n});","module.exports = function(regExp, replace){\n  var replacer = replace === Object(replace) ? function(part){\n    return replace[part];\n  } : replace;\n  return function(it){\n    return String(it).replace(regExp, replacer);\n  };\n};","// 7.2.9 SameValue(x, y)\nmodule.exports = Object.is || function is(x, y){\n  return x === y ? x !== 0 || 1 / x === 1 / y : x != x && y != y;\n};","// Works with __proto__ only. Old v8 can't work with null proto objects.\n/* eslint-disable no-proto */\nvar isObject = require('./_is-object')\n  , anObject = require('./_an-object');\nvar check = function(O, proto){\n  anObject(O);\n  if(!isObject(proto) && proto !== null)throw TypeError(proto + \": can't set as prototype!\");\n};\nmodule.exports = {\n  set: Object.setPrototypeOf || ('__proto__' in {} ? // eslint-disable-line\n    function(test, buggy, set){\n      try {\n        set = require('./_ctx')(Function.call, require('./_object-gopd').f(Object.prototype, '__proto__').set, 2);\n        set(test, []);\n        buggy = !(test instanceof Array);\n      } catch(e){ buggy = true; }\n      return function setPrototypeOf(O, proto){\n        check(O, proto);\n        if(buggy)O.__proto__ = proto;\n        else set(O, proto);\n        return O;\n      };\n    }({}, false) : undefined),\n  check: check\n};","'use strict';\nvar global      = require('./_global')\n  , dP          = require('./_object-dp')\n  , DESCRIPTORS = require('./_descriptors')\n  , SPECIES     = require('./_wks')('species');\n\nmodule.exports = function(KEY){\n  var C = global[KEY];\n  if(DESCRIPTORS && C && !C[SPECIES])dP.f(C, SPECIES, {\n    configurable: true,\n    get: function(){ return this; }\n  });\n};","var def = require('./_object-dp').f\n  , has = require('./_has')\n  , TAG = require('./_wks')('toStringTag');\n\nmodule.exports = function(it, tag, stat){\n  if(it && !has(it = stat ? it : it.prototype, TAG))def(it, TAG, {configurable: true, value: tag});\n};","var shared = require('./_shared')('keys')\r\n  , uid    = require('./_uid');\r\nmodule.exports = function(key){\r\n  return shared[key] || (shared[key] = uid(key));\r\n};","var global = require('./_global')\n  , SHARED = '__core-js_shared__'\n  , store  = global[SHARED] || (global[SHARED] = {});\nmodule.exports = function(key){\n  return store[key] || (store[key] = {});\n};","// 7.3.20 SpeciesConstructor(O, defaultConstructor)\nvar anObject  = require('./_an-object')\n  , aFunction = require('./_a-function')\n  , SPECIES   = require('./_wks')('species');\nmodule.exports = function(O, D){\n  var C = anObject(O).constructor, S;\n  return C === undefined || (S = anObject(C)[SPECIES]) == undefined ? D : aFunction(S);\n};","var fails = require('./_fails');\r\n\r\nmodule.exports = function(method, arg){\r\n  return !!method && fails(function(){\r\n    arg ? method.call(null, function(){}, 1) : method.call(null);\r\n  });\r\n};","var toInteger = require('./_to-integer')\n  , defined   = require('./_defined');\n// true  -> String#at\n// false -> String#codePointAt\nmodule.exports = function(TO_STRING){\n  return function(that, pos){\n    var s = String(defined(that))\n      , i = toInteger(pos)\n      , l = s.length\n      , a, b;\n    if(i < 0 || i >= l)return TO_STRING ? '' : undefined;\n    a = s.charCodeAt(i);\n    return a < 0xd800 || a > 0xdbff || i + 1 === l || (b = s.charCodeAt(i + 1)) < 0xdc00 || b > 0xdfff\n      ? TO_STRING ? s.charAt(i) : a\n      : TO_STRING ? s.slice(i, i + 2) : (a - 0xd800 << 10) + (b - 0xdc00) + 0x10000;\n  };\n};","// helper for String#{startsWith, endsWith, includes}\nvar isRegExp = require('./_is-regexp')\n  , defined  = require('./_defined');\n\nmodule.exports = function(that, searchString, NAME){\n  if(isRegExp(searchString))throw TypeError('String#' + NAME + \" doesn't accept regex!\");\n  return String(defined(that));\n};","var $export = require('./_export')\n  , fails   = require('./_fails')\n  , defined = require('./_defined')\n  , quot    = /\"/g;\n// B.2.3.2.1 CreateHTML(string, tag, attribute, value)\nvar createHTML = function(string, tag, attribute, value) {\n  var S  = String(defined(string))\n    , p1 = '<' + tag;\n  if(attribute !== '')p1 += ' ' + attribute + '=\"' + String(value).replace(quot, '&quot;') + '\"';\n  return p1 + '>' + S + '</' + tag + '>';\n};\nmodule.exports = function(NAME, exec){\n  var O = {};\n  O[NAME] = exec(createHTML);\n  $export($export.P + $export.F * fails(function(){\n    var test = ''[NAME]('\"');\n    return test !== test.toLowerCase() || test.split('\"').length > 3;\n  }), 'String', O);\n};","// https://github.com/tc39/proposal-string-pad-start-end\nvar toLength = require('./_to-length')\n  , repeat   = require('./_string-repeat')\n  , defined  = require('./_defined');\n\nmodule.exports = function(that, maxLength, fillString, left){\n  var S            = String(defined(that))\n    , stringLength = S.length\n    , fillStr      = fillString === undefined ? ' ' : String(fillString)\n    , intMaxLength = toLength(maxLength);\n  if(intMaxLength <= stringLength || fillStr == '')return S;\n  var fillLen = intMaxLength - stringLength\n    , stringFiller = repeat.call(fillStr, Math.ceil(fillLen / fillStr.length));\n  if(stringFiller.length > fillLen)stringFiller = stringFiller.slice(0, fillLen);\n  return left ? stringFiller + S : S + stringFiller;\n};\n","'use strict';\nvar toInteger = require('./_to-integer')\n  , defined   = require('./_defined');\n\nmodule.exports = function repeat(count){\n  var str = String(defined(this))\n    , res = ''\n    , n   = toInteger(count);\n  if(n < 0 || n == Infinity)throw RangeError(\"Count can't be negative\");\n  for(;n > 0; (n >>>= 1) && (str += str))if(n & 1)res += str;\n  return res;\n};","var $export = require('./_export')\n  , defined = require('./_defined')\n  , fails   = require('./_fails')\n  , spaces  = require('./_string-ws')\n  , space   = '[' + spaces + ']'\n  , non     = '\\u200b\\u0085'\n  , ltrim   = RegExp('^' + space + space + '*')\n  , rtrim   = RegExp(space + space + '*$');\n\nvar exporter = function(KEY, exec, ALIAS){\n  var exp   = {};\n  var FORCE = fails(function(){\n    return !!spaces[KEY]() || non[KEY]() != non;\n  });\n  var fn = exp[KEY] = FORCE ? exec(trim) : spaces[KEY];\n  if(ALIAS)exp[ALIAS] = fn;\n  $export($export.P + $export.F * FORCE, 'String', exp);\n};\n\n// 1 -> String#trimLeft\n// 2 -> String#trimRight\n// 3 -> String#trim\nvar trim = exporter.trim = function(string, TYPE){\n  string = String(defined(string));\n  if(TYPE & 1)string = string.replace(ltrim, '');\n  if(TYPE & 2)string = string.replace(rtrim, '');\n  return string;\n};\n\nmodule.exports = exporter;","module.exports = '\\x09\\x0A\\x0B\\x0C\\x0D\\x20\\xA0\\u1680\\u180E\\u2000\\u2001\\u2002\\u2003' +\r\n  '\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200A\\u202F\\u205F\\u3000\\u2028\\u2029\\uFEFF';","var ctx                = require('./_ctx')\n  , invoke             = require('./_invoke')\n  , html               = require('./_html')\n  , cel                = require('./_dom-create')\n  , global             = require('./_global')\n  , process            = global.process\n  , setTask            = global.setImmediate\n  , clearTask          = global.clearImmediate\n  , MessageChannel     = global.MessageChannel\n  , counter            = 0\n  , queue              = {}\n  , ONREADYSTATECHANGE = 'onreadystatechange'\n  , defer, channel, port;\nvar run = function(){\n  var id = +this;\n  if(queue.hasOwnProperty(id)){\n    var fn = queue[id];\n    delete queue[id];\n    fn();\n  }\n};\nvar listener = function(event){\n  run.call(event.data);\n};\n// Node.js 0.9+ & IE10+ has setImmediate, otherwise:\nif(!setTask || !clearTask){\n  setTask = function setImmediate(fn){\n    var args = [], i = 1;\n    while(arguments.length > i)args.push(arguments[i++]);\n    queue[++counter] = function(){\n      invoke(typeof fn == 'function' ? fn : Function(fn), args);\n    };\n    defer(counter);\n    return counter;\n  };\n  clearTask = function clearImmediate(id){\n    delete queue[id];\n  };\n  // Node.js 0.8-\n  if(require('./_cof')(process) == 'process'){\n    defer = function(id){\n      process.nextTick(ctx(run, id, 1));\n    };\n  // Browsers with MessageChannel, includes WebWorkers\n  } else if(MessageChannel){\n    channel = new MessageChannel;\n    port    = channel.port2;\n    channel.port1.onmessage = listener;\n    defer = ctx(port.postMessage, port, 1);\n  // Browsers with postMessage, skip WebWorkers\n  // IE8 has postMessage, but it's sync & typeof its postMessage is 'object'\n  } else if(global.addEventListener && typeof postMessage == 'function' && !global.importScripts){\n    defer = function(id){\n      global.postMessage(id + '', '*');\n    };\n    global.addEventListener('message', listener, false);\n  // IE8-\n  } else if(ONREADYSTATECHANGE in cel('script')){\n    defer = function(id){\n      html.appendChild(cel('script'))[ONREADYSTATECHANGE] = function(){\n        html.removeChild(this);\n        run.call(id);\n      };\n    };\n  // Rest old browsers\n  } else {\n    defer = function(id){\n      setTimeout(ctx(run, id, 1), 0);\n    };\n  }\n}\nmodule.exports = {\n  set:   setTask,\n  clear: clearTask\n};","var toInteger = require('./_to-integer')\n  , max       = Math.max\n  , min       = Math.min;\nmodule.exports = function(index, length){\n  index = toInteger(index);\n  return index < 0 ? max(index + length, 0) : min(index, length);\n};","// 7.1.4 ToInteger\nvar ceil  = Math.ceil\n  , floor = Math.floor;\nmodule.exports = function(it){\n  return isNaN(it = +it) ? 0 : (it > 0 ? floor : ceil)(it);\n};","// to indexed object, toObject with fallback for non-array-like ES3 strings\nvar IObject = require('./_iobject')\n  , defined = require('./_defined');\nmodule.exports = function(it){\n  return IObject(defined(it));\n};","// 7.1.15 ToLength\nvar toInteger = require('./_to-integer')\n  , min       = Math.min;\nmodule.exports = function(it){\n  return it > 0 ? min(toInteger(it), 0x1fffffffffffff) : 0; // pow(2, 53) - 1 == 9007199254740991\n};","// 7.1.13 ToObject(argument)\nvar defined = require('./_defined');\nmodule.exports = function(it){\n  return Object(defined(it));\n};","// 7.1.1 ToPrimitive(input [, PreferredType])\nvar isObject = require('./_is-object');\n// instead of the ES6 spec version, we didn't implement @@toPrimitive case\n// and the second argument - flag - preferred type is a string\nmodule.exports = function(it, S){\n  if(!isObject(it))return it;\n  var fn, val;\n  if(S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it)))return val;\n  if(typeof (fn = it.valueOf) == 'function' && !isObject(val = fn.call(it)))return val;\n  if(!S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it)))return val;\n  throw TypeError(\"Can't convert object to primitive value\");\n};","'use strict';\nif(require('./_descriptors')){\n  var LIBRARY             = require('./_library')\n    , global              = require('./_global')\n    , fails               = require('./_fails')\n    , $export             = require('./_export')\n    , $typed              = require('./_typed')\n    , $buffer             = require('./_typed-buffer')\n    , ctx                 = require('./_ctx')\n    , anInstance          = require('./_an-instance')\n    , propertyDesc        = require('./_property-desc')\n    , hide                = require('./_hide')\n    , redefineAll         = require('./_redefine-all')\n    , isInteger           = require('./_is-integer')\n    , toInteger           = require('./_to-integer')\n    , toLength            = require('./_to-length')\n    , toIndex             = require('./_to-index')\n    , toPrimitive         = require('./_to-primitive')\n    , has                 = require('./_has')\n    , same                = require('./_same-value')\n    , classof             = require('./_classof')\n    , isObject            = require('./_is-object')\n    , toObject            = require('./_to-object')\n    , isArrayIter         = require('./_is-array-iter')\n    , create              = require('./_object-create')\n    , getPrototypeOf      = require('./_object-gpo')\n    , gOPN                = require('./_object-gopn').f\n    , isIterable          = require('./core.is-iterable')\n    , getIterFn           = require('./core.get-iterator-method')\n    , uid                 = require('./_uid')\n    , wks                 = require('./_wks')\n    , createArrayMethod   = require('./_array-methods')\n    , createArrayIncludes = require('./_array-includes')\n    , speciesConstructor  = require('./_species-constructor')\n    , ArrayIterators      = require('./es6.array.iterator')\n    , Iterators           = require('./_iterators')\n    , $iterDetect         = require('./_iter-detect')\n    , setSpecies          = require('./_set-species')\n    , arrayFill           = require('./_array-fill')\n    , arrayCopyWithin     = require('./_array-copy-within')\n    , $DP                 = require('./_object-dp')\n    , $GOPD               = require('./_object-gopd')\n    , dP                  = $DP.f\n    , gOPD                = $GOPD.f\n    , RangeError          = global.RangeError\n    , TypeError           = global.TypeError\n    , Uint8Array          = global.Uint8Array\n    , ARRAY_BUFFER        = 'ArrayBuffer'\n    , SHARED_BUFFER       = 'Shared' + ARRAY_BUFFER\n    , BYTES_PER_ELEMENT   = 'BYTES_PER_ELEMENT'\n    , PROTOTYPE           = 'prototype'\n    , ArrayProto          = Array[PROTOTYPE]\n    , $ArrayBuffer        = $buffer.ArrayBuffer\n    , $DataView           = $buffer.DataView\n    , arrayForEach        = createArrayMethod(0)\n    , arrayFilter         = createArrayMethod(2)\n    , arraySome           = createArrayMethod(3)\n    , arrayEvery          = createArrayMethod(4)\n    , arrayFind           = createArrayMethod(5)\n    , arrayFindIndex      = createArrayMethod(6)\n    , arrayIncludes       = createArrayIncludes(true)\n    , arrayIndexOf        = createArrayIncludes(false)\n    , arrayValues         = ArrayIterators.values\n    , arrayKeys           = ArrayIterators.keys\n    , arrayEntries        = ArrayIterators.entries\n    , arrayLastIndexOf    = ArrayProto.lastIndexOf\n    , arrayReduce         = ArrayProto.reduce\n    , arrayReduceRight    = ArrayProto.reduceRight\n    , arrayJoin           = ArrayProto.join\n    , arraySort           = ArrayProto.sort\n    , arraySlice          = ArrayProto.slice\n    , arrayToString       = ArrayProto.toString\n    , arrayToLocaleString = ArrayProto.toLocaleString\n    , ITERATOR            = wks('iterator')\n    , TAG                 = wks('toStringTag')\n    , TYPED_CONSTRUCTOR   = uid('typed_constructor')\n    , DEF_CONSTRUCTOR     = uid('def_constructor')\n    , ALL_CONSTRUCTORS    = $typed.CONSTR\n    , TYPED_ARRAY         = $typed.TYPED\n    , VIEW                = $typed.VIEW\n    , WRONG_LENGTH        = 'Wrong length!';\n\n  var $map = createArrayMethod(1, function(O, length){\n    return allocate(speciesConstructor(O, O[DEF_CONSTRUCTOR]), length);\n  });\n\n  var LITTLE_ENDIAN = fails(function(){\n    return new Uint8Array(new Uint16Array([1]).buffer)[0] === 1;\n  });\n\n  var FORCED_SET = !!Uint8Array && !!Uint8Array[PROTOTYPE].set && fails(function(){\n    new Uint8Array(1).set({});\n  });\n\n  var strictToLength = function(it, SAME){\n    if(it === undefined)throw TypeError(WRONG_LENGTH);\n    var number = +it\n      , length = toLength(it);\n    if(SAME && !same(number, length))throw RangeError(WRONG_LENGTH);\n    return length;\n  };\n\n  var toOffset = function(it, BYTES){\n    var offset = toInteger(it);\n    if(offset < 0 || offset % BYTES)throw RangeError('Wrong offset!');\n    return offset;\n  };\n\n  var validate = function(it){\n    if(isObject(it) && TYPED_ARRAY in it)return it;\n    throw TypeError(it + ' is not a typed array!');\n  };\n\n  var allocate = function(C, length){\n    if(!(isObject(C) && TYPED_CONSTRUCTOR in C)){\n      throw TypeError('It is not a typed array constructor!');\n    } return new C(length);\n  };\n\n  var speciesFromList = function(O, list){\n    return fromList(speciesConstructor(O, O[DEF_CONSTRUCTOR]), list);\n  };\n\n  var fromList = function(C, list){\n    var index  = 0\n      , length = list.length\n      , result = allocate(C, length);\n    while(length > index)result[index] = list[index++];\n    return result;\n  };\n\n  var addGetter = function(it, key, internal){\n    dP(it, key, {get: function(){ return this._d[internal]; }});\n  };\n\n  var $from = function from(source /*, mapfn, thisArg */){\n    var O       = toObject(source)\n      , aLen    = arguments.length\n      , mapfn   = aLen > 1 ? arguments[1] : undefined\n      , mapping = mapfn !== undefined\n      , iterFn  = getIterFn(O)\n      , i, length, values, result, step, iterator;\n    if(iterFn != undefined && !isArrayIter(iterFn)){\n      for(iterator = iterFn.call(O), values = [], i = 0; !(step = iterator.next()).done; i++){\n        values.push(step.value);\n      } O = values;\n    }\n    if(mapping && aLen > 2)mapfn = ctx(mapfn, arguments[2], 2);\n    for(i = 0, length = toLength(O.length), result = allocate(this, length); length > i; i++){\n      result[i] = mapping ? mapfn(O[i], i) : O[i];\n    }\n    return result;\n  };\n\n  var $of = function of(/*...items*/){\n    var index  = 0\n      , length = arguments.length\n      , result = allocate(this, length);\n    while(length > index)result[index] = arguments[index++];\n    return result;\n  };\n\n  // iOS Safari 6.x fails here\n  var TO_LOCALE_BUG = !!Uint8Array && fails(function(){ arrayToLocaleString.call(new Uint8Array(1)); });\n\n  var $toLocaleString = function toLocaleString(){\n    return arrayToLocaleString.apply(TO_LOCALE_BUG ? arraySlice.call(validate(this)) : validate(this), arguments);\n  };\n\n  var proto = {\n    copyWithin: function copyWithin(target, start /*, end */){\n      return arrayCopyWithin.call(validate(this), target, start, arguments.length > 2 ? arguments[2] : undefined);\n    },\n    every: function every(callbackfn /*, thisArg */){\n      return arrayEvery(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n    },\n    fill: function fill(value /*, start, end */){ // eslint-disable-line no-unused-vars\n      return arrayFill.apply(validate(this), arguments);\n    },\n    filter: function filter(callbackfn /*, thisArg */){\n      return speciesFromList(this, arrayFilter(validate(this), callbackfn,\n        arguments.length > 1 ? arguments[1] : undefined));\n    },\n    find: function find(predicate /*, thisArg */){\n      return arrayFind(validate(this), predicate, arguments.length > 1 ? arguments[1] : undefined);\n    },\n    findIndex: function findIndex(predicate /*, thisArg */){\n      return arrayFindIndex(validate(this), predicate, arguments.length > 1 ? arguments[1] : undefined);\n    },\n    forEach: function forEach(callbackfn /*, thisArg */){\n      arrayForEach(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n    },\n    indexOf: function indexOf(searchElement /*, fromIndex */){\n      return arrayIndexOf(validate(this), searchElement, arguments.length > 1 ? arguments[1] : undefined);\n    },\n    includes: function includes(searchElement /*, fromIndex */){\n      return arrayIncludes(validate(this), searchElement, arguments.length > 1 ? arguments[1] : undefined);\n    },\n    join: function join(separator){ // eslint-disable-line no-unused-vars\n      return arrayJoin.apply(validate(this), arguments);\n    },\n    lastIndexOf: function lastIndexOf(searchElement /*, fromIndex */){ // eslint-disable-line no-unused-vars\n      return arrayLastIndexOf.apply(validate(this), arguments);\n    },\n    map: function map(mapfn /*, thisArg */){\n      return $map(validate(this), mapfn, arguments.length > 1 ? arguments[1] : undefined);\n    },\n    reduce: function reduce(callbackfn /*, initialValue */){ // eslint-disable-line no-unused-vars\n      return arrayReduce.apply(validate(this), arguments);\n    },\n    reduceRight: function reduceRight(callbackfn /*, initialValue */){ // eslint-disable-line no-unused-vars\n      return arrayReduceRight.apply(validate(this), arguments);\n    },\n    reverse: function reverse(){\n      var that   = this\n        , length = validate(that).length\n        , middle = Math.floor(length / 2)\n        , index  = 0\n        , value;\n      while(index < middle){\n        value         = that[index];\n        that[index++] = that[--length];\n        that[length]  = value;\n      } return that;\n    },\n    some: function some(callbackfn /*, thisArg */){\n      return arraySome(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n    },\n    sort: function sort(comparefn){\n      return arraySort.call(validate(this), comparefn);\n    },\n    subarray: function subarray(begin, end){\n      var O      = validate(this)\n        , length = O.length\n        , $begin = toIndex(begin, length);\n      return new (speciesConstructor(O, O[DEF_CONSTRUCTOR]))(\n        O.buffer,\n        O.byteOffset + $begin * O.BYTES_PER_ELEMENT,\n        toLength((end === undefined ? length : toIndex(end, length)) - $begin)\n      );\n    }\n  };\n\n  var $slice = function slice(start, end){\n    return speciesFromList(this, arraySlice.call(validate(this), start, end));\n  };\n\n  var $set = function set(arrayLike /*, offset */){\n    validate(this);\n    var offset = toOffset(arguments[1], 1)\n      , length = this.length\n      , src    = toObject(arrayLike)\n      , len    = toLength(src.length)\n      , index  = 0;\n    if(len + offset > length)throw RangeError(WRONG_LENGTH);\n    while(index < len)this[offset + index] = src[index++];\n  };\n\n  var $iterators = {\n    entries: function entries(){\n      return arrayEntries.call(validate(this));\n    },\n    keys: function keys(){\n      return arrayKeys.call(validate(this));\n    },\n    values: function values(){\n      return arrayValues.call(validate(this));\n    }\n  };\n\n  var isTAIndex = function(target, key){\n    return isObject(target)\n      && target[TYPED_ARRAY]\n      && typeof key != 'symbol'\n      && key in target\n      && String(+key) == String(key);\n  };\n  var $getDesc = function getOwnPropertyDescriptor(target, key){\n    return isTAIndex(target, key = toPrimitive(key, true))\n      ? propertyDesc(2, target[key])\n      : gOPD(target, key);\n  };\n  var $setDesc = function defineProperty(target, key, desc){\n    if(isTAIndex(target, key = toPrimitive(key, true))\n      && isObject(desc)\n      && has(desc, 'value')\n      && !has(desc, 'get')\n      && !has(desc, 'set')\n      // TODO: add validation descriptor w/o calling accessors\n      && !desc.configurable\n      && (!has(desc, 'writable') || desc.writable)\n      && (!has(desc, 'enumerable') || desc.enumerable)\n    ){\n      target[key] = desc.value;\n      return target;\n    } else return dP(target, key, desc);\n  };\n\n  if(!ALL_CONSTRUCTORS){\n    $GOPD.f = $getDesc;\n    $DP.f   = $setDesc;\n  }\n\n  $export($export.S + $export.F * !ALL_CONSTRUCTORS, 'Object', {\n    getOwnPropertyDescriptor: $getDesc,\n    defineProperty:           $setDesc\n  });\n\n  if(fails(function(){ arrayToString.call({}); })){\n    arrayToString = arrayToLocaleString = function toString(){\n      return arrayJoin.call(this);\n    }\n  }\n\n  var $TypedArrayPrototype$ = redefineAll({}, proto);\n  redefineAll($TypedArrayPrototype$, $iterators);\n  hide($TypedArrayPrototype$, ITERATOR, $iterators.values);\n  redefineAll($TypedArrayPrototype$, {\n    slice:          $slice,\n    set:            $set,\n    constructor:    function(){ /* noop */ },\n    toString:       arrayToString,\n    toLocaleString: $toLocaleString\n  });\n  addGetter($TypedArrayPrototype$, 'buffer', 'b');\n  addGetter($TypedArrayPrototype$, 'byteOffset', 'o');\n  addGetter($TypedArrayPrototype$, 'byteLength', 'l');\n  addGetter($TypedArrayPrototype$, 'length', 'e');\n  dP($TypedArrayPrototype$, TAG, {\n    get: function(){ return this[TYPED_ARRAY]; }\n  });\n\n  module.exports = function(KEY, BYTES, wrapper, CLAMPED){\n    CLAMPED = !!CLAMPED;\n    var NAME       = KEY + (CLAMPED ? 'Clamped' : '') + 'Array'\n      , ISNT_UINT8 = NAME != 'Uint8Array'\n      , GETTER     = 'get' + KEY\n      , SETTER     = 'set' + KEY\n      , TypedArray = global[NAME]\n      , Base       = TypedArray || {}\n      , TAC        = TypedArray && getPrototypeOf(TypedArray)\n      , FORCED     = !TypedArray || !$typed.ABV\n      , O          = {}\n      , TypedArrayPrototype = TypedArray && TypedArray[PROTOTYPE];\n    var getter = function(that, index){\n      var data = that._d;\n      return data.v[GETTER](index * BYTES + data.o, LITTLE_ENDIAN);\n    };\n    var setter = function(that, index, value){\n      var data = that._d;\n      if(CLAMPED)value = (value = Math.round(value)) < 0 ? 0 : value > 0xff ? 0xff : value & 0xff;\n      data.v[SETTER](index * BYTES + data.o, value, LITTLE_ENDIAN);\n    };\n    var addElement = function(that, index){\n      dP(that, index, {\n        get: function(){\n          return getter(this, index);\n        },\n        set: function(value){\n          return setter(this, index, value);\n        },\n        enumerable: true\n      });\n    };\n    if(FORCED){\n      TypedArray = wrapper(function(that, data, $offset, $length){\n        anInstance(that, TypedArray, NAME, '_d');\n        var index  = 0\n          , offset = 0\n          , buffer, byteLength, length, klass;\n        if(!isObject(data)){\n          length     = strictToLength(data, true)\n          byteLength = length * BYTES;\n          buffer     = new $ArrayBuffer(byteLength);\n        } else if(data instanceof $ArrayBuffer || (klass = classof(data)) == ARRAY_BUFFER || klass == SHARED_BUFFER){\n          buffer = data;\n          offset = toOffset($offset, BYTES);\n          var $len = data.byteLength;\n          if($length === undefined){\n            if($len % BYTES)throw RangeError(WRONG_LENGTH);\n            byteLength = $len - offset;\n            if(byteLength < 0)throw RangeError(WRONG_LENGTH);\n          } else {\n            byteLength = toLength($length) * BYTES;\n            if(byteLength + offset > $len)throw RangeError(WRONG_LENGTH);\n          }\n          length = byteLength / BYTES;\n        } else if(TYPED_ARRAY in data){\n          return fromList(TypedArray, data);\n        } else {\n          return $from.call(TypedArray, data);\n        }\n        hide(that, '_d', {\n          b: buffer,\n          o: offset,\n          l: byteLength,\n          e: length,\n          v: new $DataView(buffer)\n        });\n        while(index < length)addElement(that, index++);\n      });\n      TypedArrayPrototype = TypedArray[PROTOTYPE] = create($TypedArrayPrototype$);\n      hide(TypedArrayPrototype, 'constructor', TypedArray);\n    } else if(!$iterDetect(function(iter){\n      // V8 works with iterators, but fails in many other cases\n      // https://code.google.com/p/v8/issues/detail?id=4552\n      new TypedArray(null); // eslint-disable-line no-new\n      new TypedArray(iter); // eslint-disable-line no-new\n    }, true)){\n      TypedArray = wrapper(function(that, data, $offset, $length){\n        anInstance(that, TypedArray, NAME);\n        var klass;\n        // `ws` module bug, temporarily remove validation length for Uint8Array\n        // https://github.com/websockets/ws/pull/645\n        if(!isObject(data))return new Base(strictToLength(data, ISNT_UINT8));\n        if(data instanceof $ArrayBuffer || (klass = classof(data)) == ARRAY_BUFFER || klass == SHARED_BUFFER){\n          return $length !== undefined\n            ? new Base(data, toOffset($offset, BYTES), $length)\n            : $offset !== undefined\n              ? new Base(data, toOffset($offset, BYTES))\n              : new Base(data);\n        }\n        if(TYPED_ARRAY in data)return fromList(TypedArray, data);\n        return $from.call(TypedArray, data);\n      });\n      arrayForEach(TAC !== Function.prototype ? gOPN(Base).concat(gOPN(TAC)) : gOPN(Base), function(key){\n        if(!(key in TypedArray))hide(TypedArray, key, Base[key]);\n      });\n      TypedArray[PROTOTYPE] = TypedArrayPrototype;\n      if(!LIBRARY)TypedArrayPrototype.constructor = TypedArray;\n    }\n    var $nativeIterator   = TypedArrayPrototype[ITERATOR]\n      , CORRECT_ITER_NAME = !!$nativeIterator && ($nativeIterator.name == 'values' || $nativeIterator.name == undefined)\n      , $iterator         = $iterators.values;\n    hide(TypedArray, TYPED_CONSTRUCTOR, true);\n    hide(TypedArrayPrototype, TYPED_ARRAY, NAME);\n    hide(TypedArrayPrototype, VIEW, true);\n    hide(TypedArrayPrototype, DEF_CONSTRUCTOR, TypedArray);\n\n    if(CLAMPED ? new TypedArray(1)[TAG] != NAME : !(TAG in TypedArrayPrototype)){\n      dP(TypedArrayPrototype, TAG, {\n        get: function(){ return NAME; }\n      });\n    }\n\n    O[NAME] = TypedArray;\n\n    $export($export.G + $export.W + $export.F * (TypedArray != Base), O);\n\n    $export($export.S, NAME, {\n      BYTES_PER_ELEMENT: BYTES,\n      from: $from,\n      of: $of\n    });\n\n    if(!(BYTES_PER_ELEMENT in TypedArrayPrototype))hide(TypedArrayPrototype, BYTES_PER_ELEMENT, BYTES);\n\n    $export($export.P, NAME, proto);\n\n    setSpecies(NAME);\n\n    $export($export.P + $export.F * FORCED_SET, NAME, {set: $set});\n\n    $export($export.P + $export.F * !CORRECT_ITER_NAME, NAME, $iterators);\n\n    $export($export.P + $export.F * (TypedArrayPrototype.toString != arrayToString), NAME, {toString: arrayToString});\n\n    $export($export.P + $export.F * fails(function(){\n      new TypedArray(1).slice();\n    }), NAME, {slice: $slice});\n\n    $export($export.P + $export.F * (fails(function(){\n      return [1, 2].toLocaleString() != new TypedArray([1, 2]).toLocaleString()\n    }) || !fails(function(){\n      TypedArrayPrototype.toLocaleString.call([1, 2]);\n    })), NAME, {toLocaleString: $toLocaleString});\n\n    Iterators[NAME] = CORRECT_ITER_NAME ? $nativeIterator : $iterator;\n    if(!LIBRARY && !CORRECT_ITER_NAME)hide(TypedArrayPrototype, ITERATOR, $iterator);\n  };\n} else module.exports = function(){ /* empty */ };","'use strict';\nvar global         = require('./_global')\n  , DESCRIPTORS    = require('./_descriptors')\n  , LIBRARY        = require('./_library')\n  , $typed         = require('./_typed')\n  , hide           = require('./_hide')\n  , redefineAll    = require('./_redefine-all')\n  , fails          = require('./_fails')\n  , anInstance     = require('./_an-instance')\n  , toInteger      = require('./_to-integer')\n  , toLength       = require('./_to-length')\n  , gOPN           = require('./_object-gopn').f\n  , dP             = require('./_object-dp').f\n  , arrayFill      = require('./_array-fill')\n  , setToStringTag = require('./_set-to-string-tag')\n  , ARRAY_BUFFER   = 'ArrayBuffer'\n  , DATA_VIEW      = 'DataView'\n  , PROTOTYPE      = 'prototype'\n  , WRONG_LENGTH   = 'Wrong length!'\n  , WRONG_INDEX    = 'Wrong index!'\n  , $ArrayBuffer   = global[ARRAY_BUFFER]\n  , $DataView      = global[DATA_VIEW]\n  , Math           = global.Math\n  , parseInt       = global.parseInt\n  , RangeError     = global.RangeError\n  , Infinity       = global.Infinity\n  , BaseBuffer     = $ArrayBuffer\n  , abs            = Math.abs\n  , pow            = Math.pow\n  , min            = Math.min\n  , floor          = Math.floor\n  , log            = Math.log\n  , LN2            = Math.LN2\n  , BUFFER         = 'buffer'\n  , BYTE_LENGTH    = 'byteLength'\n  , BYTE_OFFSET    = 'byteOffset'\n  , $BUFFER        = DESCRIPTORS ? '_b' : BUFFER\n  , $LENGTH        = DESCRIPTORS ? '_l' : BYTE_LENGTH\n  , $OFFSET        = DESCRIPTORS ? '_o' : BYTE_OFFSET;\n\n// IEEE754 conversions based on https://github.com/feross/ieee754\nvar packIEEE754 = function(value, mLen, nBytes){\n  var buffer = Array(nBytes)\n    , eLen   = nBytes * 8 - mLen - 1\n    , eMax   = (1 << eLen) - 1\n    , eBias  = eMax >> 1\n    , rt     = mLen === 23 ? pow(2, -24) - pow(2, -77) : 0\n    , i      = 0\n    , s      = value < 0 || value === 0 && 1 / value < 0 ? 1 : 0\n    , e, m, c;\n  value = abs(value)\n  if(value != value || value === Infinity){\n    m = value != value ? 1 : 0;\n    e = eMax;\n  } else {\n    e = floor(log(value) / LN2);\n    if(value * (c = pow(2, -e)) < 1){\n      e--;\n      c *= 2;\n    }\n    if(e + eBias >= 1){\n      value += rt / c;\n    } else {\n      value += rt * pow(2, 1 - eBias);\n    }\n    if(value * c >= 2){\n      e++;\n      c /= 2;\n    }\n    if(e + eBias >= eMax){\n      m = 0;\n      e = eMax;\n    } else if(e + eBias >= 1){\n      m = (value * c - 1) * pow(2, mLen);\n      e = e + eBias;\n    } else {\n      m = value * pow(2, eBias - 1) * pow(2, mLen);\n      e = 0;\n    }\n  }\n  for(; mLen >= 8; buffer[i++] = m & 255, m /= 256, mLen -= 8);\n  e = e << mLen | m;\n  eLen += mLen;\n  for(; eLen > 0; buffer[i++] = e & 255, e /= 256, eLen -= 8);\n  buffer[--i] |= s * 128;\n  return buffer;\n};\nvar unpackIEEE754 = function(buffer, mLen, nBytes){\n  var eLen  = nBytes * 8 - mLen - 1\n    , eMax  = (1 << eLen) - 1\n    , eBias = eMax >> 1\n    , nBits = eLen - 7\n    , i     = nBytes - 1\n    , s     = buffer[i--]\n    , e     = s & 127\n    , m;\n  s >>= 7;\n  for(; nBits > 0; e = e * 256 + buffer[i], i--, nBits -= 8);\n  m = e & (1 << -nBits) - 1;\n  e >>= -nBits;\n  nBits += mLen;\n  for(; nBits > 0; m = m * 256 + buffer[i], i--, nBits -= 8);\n  if(e === 0){\n    e = 1 - eBias;\n  } else if(e === eMax){\n    return m ? NaN : s ? -Infinity : Infinity;\n  } else {\n    m = m + pow(2, mLen);\n    e = e - eBias;\n  } return (s ? -1 : 1) * m * pow(2, e - mLen);\n};\n\nvar unpackI32 = function(bytes){\n  return bytes[3] << 24 | bytes[2] << 16 | bytes[1] << 8 | bytes[0];\n};\nvar packI8 = function(it){\n  return [it & 0xff];\n};\nvar packI16 = function(it){\n  return [it & 0xff, it >> 8 & 0xff];\n};\nvar packI32 = function(it){\n  return [it & 0xff, it >> 8 & 0xff, it >> 16 & 0xff, it >> 24 & 0xff];\n};\nvar packF64 = function(it){\n  return packIEEE754(it, 52, 8);\n};\nvar packF32 = function(it){\n  return packIEEE754(it, 23, 4);\n};\n\nvar addGetter = function(C, key, internal){\n  dP(C[PROTOTYPE], key, {get: function(){ return this[internal]; }});\n};\n\nvar get = function(view, bytes, index, isLittleEndian){\n  var numIndex = +index\n    , intIndex = toInteger(numIndex);\n  if(numIndex != intIndex || intIndex < 0 || intIndex + bytes > view[$LENGTH])throw RangeError(WRONG_INDEX);\n  var store = view[$BUFFER]._b\n    , start = intIndex + view[$OFFSET]\n    , pack  = store.slice(start, start + bytes);\n  return isLittleEndian ? pack : pack.reverse();\n};\nvar set = function(view, bytes, index, conversion, value, isLittleEndian){\n  var numIndex = +index\n    , intIndex = toInteger(numIndex);\n  if(numIndex != intIndex || intIndex < 0 || intIndex + bytes > view[$LENGTH])throw RangeError(WRONG_INDEX);\n  var store = view[$BUFFER]._b\n    , start = intIndex + view[$OFFSET]\n    , pack  = conversion(+value);\n  for(var i = 0; i < bytes; i++)store[start + i] = pack[isLittleEndian ? i : bytes - i - 1];\n};\n\nvar validateArrayBufferArguments = function(that, length){\n  anInstance(that, $ArrayBuffer, ARRAY_BUFFER);\n  var numberLength = +length\n    , byteLength   = toLength(numberLength);\n  if(numberLength != byteLength)throw RangeError(WRONG_LENGTH);\n  return byteLength;\n};\n\nif(!$typed.ABV){\n  $ArrayBuffer = function ArrayBuffer(length){\n    var byteLength = validateArrayBufferArguments(this, length);\n    this._b       = arrayFill.call(Array(byteLength), 0);\n    this[$LENGTH] = byteLength;\n  };\n\n  $DataView = function DataView(buffer, byteOffset, byteLength){\n    anInstance(this, $DataView, DATA_VIEW);\n    anInstance(buffer, $ArrayBuffer, DATA_VIEW);\n    var bufferLength = buffer[$LENGTH]\n      , offset       = toInteger(byteOffset);\n    if(offset < 0 || offset > bufferLength)throw RangeError('Wrong offset!');\n    byteLength = byteLength === undefined ? bufferLength - offset : toLength(byteLength);\n    if(offset + byteLength > bufferLength)throw RangeError(WRONG_LENGTH);\n    this[$BUFFER] = buffer;\n    this[$OFFSET] = offset;\n    this[$LENGTH] = byteLength;\n  };\n\n  if(DESCRIPTORS){\n    addGetter($ArrayBuffer, BYTE_LENGTH, '_l');\n    addGetter($DataView, BUFFER, '_b');\n    addGetter($DataView, BYTE_LENGTH, '_l');\n    addGetter($DataView, BYTE_OFFSET, '_o');\n  }\n\n  redefineAll($DataView[PROTOTYPE], {\n    getInt8: function getInt8(byteOffset){\n      return get(this, 1, byteOffset)[0] << 24 >> 24;\n    },\n    getUint8: function getUint8(byteOffset){\n      return get(this, 1, byteOffset)[0];\n    },\n    getInt16: function getInt16(byteOffset /*, littleEndian */){\n      var bytes = get(this, 2, byteOffset, arguments[1]);\n      return (bytes[1] << 8 | bytes[0]) << 16 >> 16;\n    },\n    getUint16: function getUint16(byteOffset /*, littleEndian */){\n      var bytes = get(this, 2, byteOffset, arguments[1]);\n      return bytes[1] << 8 | bytes[0];\n    },\n    getInt32: function getInt32(byteOffset /*, littleEndian */){\n      return unpackI32(get(this, 4, byteOffset, arguments[1]));\n    },\n    getUint32: function getUint32(byteOffset /*, littleEndian */){\n      return unpackI32(get(this, 4, byteOffset, arguments[1])) >>> 0;\n    },\n    getFloat32: function getFloat32(byteOffset /*, littleEndian */){\n      return unpackIEEE754(get(this, 4, byteOffset, arguments[1]), 23, 4);\n    },\n    getFloat64: function getFloat64(byteOffset /*, littleEndian */){\n      return unpackIEEE754(get(this, 8, byteOffset, arguments[1]), 52, 8);\n    },\n    setInt8: function setInt8(byteOffset, value){\n      set(this, 1, byteOffset, packI8, value);\n    },\n    setUint8: function setUint8(byteOffset, value){\n      set(this, 1, byteOffset, packI8, value);\n    },\n    setInt16: function setInt16(byteOffset, value /*, littleEndian */){\n      set(this, 2, byteOffset, packI16, value, arguments[2]);\n    },\n    setUint16: function setUint16(byteOffset, value /*, littleEndian */){\n      set(this, 2, byteOffset, packI16, value, arguments[2]);\n    },\n    setInt32: function setInt32(byteOffset, value /*, littleEndian */){\n      set(this, 4, byteOffset, packI32, value, arguments[2]);\n    },\n    setUint32: function setUint32(byteOffset, value /*, littleEndian */){\n      set(this, 4, byteOffset, packI32, value, arguments[2]);\n    },\n    setFloat32: function setFloat32(byteOffset, value /*, littleEndian */){\n      set(this, 4, byteOffset, packF32, value, arguments[2]);\n    },\n    setFloat64: function setFloat64(byteOffset, value /*, littleEndian */){\n      set(this, 8, byteOffset, packF64, value, arguments[2]);\n    }\n  });\n} else {\n  if(!fails(function(){\n    new $ArrayBuffer;     // eslint-disable-line no-new\n  }) || !fails(function(){\n    new $ArrayBuffer(.5); // eslint-disable-line no-new\n  })){\n    $ArrayBuffer = function ArrayBuffer(length){\n      return new BaseBuffer(validateArrayBufferArguments(this, length));\n    };\n    var ArrayBufferProto = $ArrayBuffer[PROTOTYPE] = BaseBuffer[PROTOTYPE];\n    for(var keys = gOPN(BaseBuffer), j = 0, key; keys.length > j; ){\n      if(!((key = keys[j++]) in $ArrayBuffer))hide($ArrayBuffer, key, BaseBuffer[key]);\n    };\n    if(!LIBRARY)ArrayBufferProto.constructor = $ArrayBuffer;\n  }\n  // iOS Safari 7.x bug\n  var view = new $DataView(new $ArrayBuffer(2))\n    , $setInt8 = $DataView[PROTOTYPE].setInt8;\n  view.setInt8(0, 2147483648);\n  view.setInt8(1, 2147483649);\n  if(view.getInt8(0) || !view.getInt8(1))redefineAll($DataView[PROTOTYPE], {\n    setInt8: function setInt8(byteOffset, value){\n      $setInt8.call(this, byteOffset, value << 24 >> 24);\n    },\n    setUint8: function setUint8(byteOffset, value){\n      $setInt8.call(this, byteOffset, value << 24 >> 24);\n    }\n  }, true);\n}\nsetToStringTag($ArrayBuffer, ARRAY_BUFFER);\nsetToStringTag($DataView, DATA_VIEW);\nhide($DataView[PROTOTYPE], $typed.VIEW, true);\nexports[ARRAY_BUFFER] = $ArrayBuffer;\nexports[DATA_VIEW] = $DataView;","var global = require('./_global')\n  , hide   = require('./_hide')\n  , uid    = require('./_uid')\n  , TYPED  = uid('typed_array')\n  , VIEW   = uid('view')\n  , ABV    = !!(global.ArrayBuffer && global.DataView)\n  , CONSTR = ABV\n  , i = 0, l = 9, Typed;\n\nvar TypedArrayConstructors = (\n  'Int8Array,Uint8Array,Uint8ClampedArray,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array'\n).split(',');\n\nwhile(i < l){\n  if(Typed = global[TypedArrayConstructors[i++]]){\n    hide(Typed.prototype, TYPED, true);\n    hide(Typed.prototype, VIEW, true);\n  } else CONSTR = false;\n}\n\nmodule.exports = {\n  ABV:    ABV,\n  CONSTR: CONSTR,\n  TYPED:  TYPED,\n  VIEW:   VIEW\n};","var id = 0\n  , px = Math.random();\nmodule.exports = function(key){\n  return 'Symbol('.concat(key === undefined ? '' : key, ')_', (++id + px).toString(36));\n};","var global         = require('./_global')\r\n  , core           = require('./_core')\r\n  , LIBRARY        = require('./_library')\r\n  , wksExt         = require('./_wks-ext')\r\n  , defineProperty = require('./_object-dp').f;\r\nmodule.exports = function(name){\r\n  var $Symbol = core.Symbol || (core.Symbol = LIBRARY ? {} : global.Symbol || {});\r\n  if(name.charAt(0) != '_' && !(name in $Symbol))defineProperty($Symbol, name, {value: wksExt.f(name)});\r\n};","exports.f = require('./_wks');","var store      = require('./_shared')('wks')\n  , uid        = require('./_uid')\n  , Symbol     = require('./_global').Symbol\n  , USE_SYMBOL = typeof Symbol == 'function';\n\nvar $exports = module.exports = function(name){\n  return store[name] || (store[name] =\n    USE_SYMBOL && Symbol[name] || (USE_SYMBOL ? Symbol : uid)('Symbol.' + name));\n};\n\n$exports.store = store;","var classof   = require('./_classof')\n  , ITERATOR  = require('./_wks')('iterator')\n  , Iterators = require('./_iterators');\nmodule.exports = require('./_core').getIteratorMethod = function(it){\n  if(it != undefined)return it[ITERATOR]\n    || it['@@iterator']\n    || Iterators[classof(it)];\n};","var classof   = require('./_classof')\n  , ITERATOR  = require('./_wks')('iterator')\n  , Iterators = require('./_iterators');\nmodule.exports = require('./_core').isIterable = function(it){\n  var O = Object(it);\n  return O[ITERATOR] !== undefined\n    || '@@iterator' in O\n    || Iterators.hasOwnProperty(classof(O));\n};","// https://github.com/benjamingr/RexExp.escape\nvar $export = require('./_export')\n  , $re     = require('./_replacer')(/[\\\\^$*+?.()|[\\]{}]/g, '\\\\$&');\n\n$export($export.S, 'RegExp', {escape: function escape(it){ return $re(it); }});\n","// 22.1.3.3 Array.prototype.copyWithin(target, start, end = this.length)\nvar $export = require('./_export');\n\n$export($export.P, 'Array', {copyWithin: require('./_array-copy-within')});\n\nrequire('./_add-to-unscopables')('copyWithin');","'use strict';\r\nvar $export = require('./_export')\r\n  , $every  = require('./_array-methods')(4);\r\n\r\n$export($export.P + $export.F * !require('./_strict-method')([].every, true), 'Array', {\r\n  // 22.1.3.5 / 15.4.4.16 Array.prototype.every(callbackfn [, thisArg])\r\n  every: function every(callbackfn /* , thisArg */){\r\n    return $every(this, callbackfn, arguments[1]);\r\n  }\r\n});","// 22.1.3.6 Array.prototype.fill(value, start = 0, end = this.length)\nvar $export = require('./_export');\n\n$export($export.P, 'Array', {fill: require('./_array-fill')});\n\nrequire('./_add-to-unscopables')('fill');","'use strict';\nvar $export = require('./_export')\n  , $filter = require('./_array-methods')(2);\n\n$export($export.P + $export.F * !require('./_strict-method')([].filter, true), 'Array', {\n  // 22.1.3.7 / 15.4.4.20 Array.prototype.filter(callbackfn [, thisArg])\n  filter: function filter(callbackfn /* , thisArg */){\n    return $filter(this, callbackfn, arguments[1]);\n  }\n});","'use strict';\n// 22.1.3.9 Array.prototype.findIndex(predicate, thisArg = undefined)\nvar $export = require('./_export')\n  , $find   = require('./_array-methods')(6)\n  , KEY     = 'findIndex'\n  , forced  = true;\n// Shouldn't skip holes\nif(KEY in [])Array(1)[KEY](function(){ forced = false; });\n$export($export.P + $export.F * forced, 'Array', {\n  findIndex: function findIndex(callbackfn/*, that = undefined */){\n    return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n  }\n});\nrequire('./_add-to-unscopables')(KEY);","'use strict';\n// 22.1.3.8 Array.prototype.find(predicate, thisArg = undefined)\nvar $export = require('./_export')\n  , $find   = require('./_array-methods')(5)\n  , KEY     = 'find'\n  , forced  = true;\n// Shouldn't skip holes\nif(KEY in [])Array(1)[KEY](function(){ forced = false; });\n$export($export.P + $export.F * forced, 'Array', {\n  find: function find(callbackfn/*, that = undefined */){\n    return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n  }\n});\nrequire('./_add-to-unscopables')(KEY);","'use strict';\r\nvar $export  = require('./_export')\r\n  , $forEach = require('./_array-methods')(0)\r\n  , STRICT   = require('./_strict-method')([].forEach, true);\r\n\r\n$export($export.P + $export.F * !STRICT, 'Array', {\r\n  // 22.1.3.10 / 15.4.4.18 Array.prototype.forEach(callbackfn [, thisArg])\r\n  forEach: function forEach(callbackfn /* , thisArg */){\r\n    return $forEach(this, callbackfn, arguments[1]);\r\n  }\r\n});","'use strict';\nvar ctx            = require('./_ctx')\n  , $export        = require('./_export')\n  , toObject       = require('./_to-object')\n  , call           = require('./_iter-call')\n  , isArrayIter    = require('./_is-array-iter')\n  , toLength       = require('./_to-length')\n  , createProperty = require('./_create-property')\n  , getIterFn      = require('./core.get-iterator-method');\n\n$export($export.S + $export.F * !require('./_iter-detect')(function(iter){ Array.from(iter); }), 'Array', {\n  // 22.1.2.1 Array.from(arrayLike, mapfn = undefined, thisArg = undefined)\n  from: function from(arrayLike/*, mapfn = undefined, thisArg = undefined*/){\n    var O       = toObject(arrayLike)\n      , C       = typeof this == 'function' ? this : Array\n      , aLen    = arguments.length\n      , mapfn   = aLen > 1 ? arguments[1] : undefined\n      , mapping = mapfn !== undefined\n      , index   = 0\n      , iterFn  = getIterFn(O)\n      , length, result, step, iterator;\n    if(mapping)mapfn = ctx(mapfn, aLen > 2 ? arguments[2] : undefined, 2);\n    // if object isn't iterable or it's array with default iterator - use simple case\n    if(iterFn != undefined && !(C == Array && isArrayIter(iterFn))){\n      for(iterator = iterFn.call(O), result = new C; !(step = iterator.next()).done; index++){\n        createProperty(result, index, mapping ? call(iterator, mapfn, [step.value, index], true) : step.value);\n      }\n    } else {\n      length = toLength(O.length);\n      for(result = new C(length); length > index; index++){\n        createProperty(result, index, mapping ? mapfn(O[index], index) : O[index]);\n      }\n    }\n    result.length = index;\n    return result;\n  }\n});\n","'use strict';\r\nvar $export       = require('./_export')\r\n  , $indexOf      = require('./_array-includes')(false)\r\n  , $native       = [].indexOf\r\n  , NEGATIVE_ZERO = !!$native && 1 / [1].indexOf(1, -0) < 0;\r\n\r\n$export($export.P + $export.F * (NEGATIVE_ZERO || !require('./_strict-method')($native)), 'Array', {\r\n  // 22.1.3.11 / 15.4.4.14 Array.prototype.indexOf(searchElement [, fromIndex])\r\n  indexOf: function indexOf(searchElement /*, fromIndex = 0 */){\r\n    return NEGATIVE_ZERO\r\n      // convert -0 to +0\r\n      ? $native.apply(this, arguments) || 0\r\n      : $indexOf(this, searchElement, arguments[1]);\r\n  }\r\n});","// 22.1.2.2 / 15.4.3.2 Array.isArray(arg)\r\nvar $export = require('./_export');\r\n\r\n$export($export.S, 'Array', {isArray: require('./_is-array')});","'use strict';\nvar addToUnscopables = require('./_add-to-unscopables')\n  , step             = require('./_iter-step')\n  , Iterators        = require('./_iterators')\n  , toIObject        = require('./_to-iobject');\n\n// 22.1.3.4 Array.prototype.entries()\n// 22.1.3.13 Array.prototype.keys()\n// 22.1.3.29 Array.prototype.values()\n// 22.1.3.30 Array.prototype[@@iterator]()\nmodule.exports = require('./_iter-define')(Array, 'Array', function(iterated, kind){\n  this._t = toIObject(iterated); // target\n  this._i = 0;                   // next index\n  this._k = kind;                // kind\n// 22.1.5.2.1 %ArrayIteratorPrototype%.next()\n}, function(){\n  var O     = this._t\n    , kind  = this._k\n    , index = this._i++;\n  if(!O || index >= O.length){\n    this._t = undefined;\n    return step(1);\n  }\n  if(kind == 'keys'  )return step(0, index);\n  if(kind == 'values')return step(0, O[index]);\n  return step(0, [index, O[index]]);\n}, 'values');\n\n// argumentsList[@@iterator] is %ArrayProto_values% (9.4.4.6, 9.4.4.7)\nIterators.Arguments = Iterators.Array;\n\naddToUnscopables('keys');\naddToUnscopables('values');\naddToUnscopables('entries');","'use strict';\r\n// 22.1.3.13 Array.prototype.join(separator)\r\nvar $export   = require('./_export')\r\n  , toIObject = require('./_to-iobject')\r\n  , arrayJoin = [].join;\r\n\r\n// fallback for not array-like strings\r\n$export($export.P + $export.F * (require('./_iobject') != Object || !require('./_strict-method')(arrayJoin)), 'Array', {\r\n  join: function join(separator){\r\n    return arrayJoin.call(toIObject(this), separator === undefined ? ',' : separator);\r\n  }\r\n});","'use strict';\r\nvar $export       = require('./_export')\r\n  , toIObject     = require('./_to-iobject')\r\n  , toInteger     = require('./_to-integer')\r\n  , toLength      = require('./_to-length')\r\n  , $native       = [].lastIndexOf\r\n  , NEGATIVE_ZERO = !!$native && 1 / [1].lastIndexOf(1, -0) < 0;\r\n\r\n$export($export.P + $export.F * (NEGATIVE_ZERO || !require('./_strict-method')($native)), 'Array', {\r\n  // 22.1.3.14 / 15.4.4.15 Array.prototype.lastIndexOf(searchElement [, fromIndex])\r\n  lastIndexOf: function lastIndexOf(searchElement /*, fromIndex = @[*-1] */){\r\n    // convert -0 to +0\r\n    if(NEGATIVE_ZERO)return $native.apply(this, arguments) || 0;\r\n    var O      = toIObject(this)\r\n      , length = toLength(O.length)\r\n      , index  = length - 1;\r\n    if(arguments.length > 1)index = Math.min(index, toInteger(arguments[1]));\r\n    if(index < 0)index = length + index;\r\n    for(;index >= 0; index--)if(index in O)if(O[index] === searchElement)return index || 0;\r\n    return -1;\r\n  }\r\n});","'use strict';\r\nvar $export = require('./_export')\r\n  , $map    = require('./_array-methods')(1);\r\n\r\n$export($export.P + $export.F * !require('./_strict-method')([].map, true), 'Array', {\r\n  // 22.1.3.15 / 15.4.4.19 Array.prototype.map(callbackfn [, thisArg])\r\n  map: function map(callbackfn /* , thisArg */){\r\n    return $map(this, callbackfn, arguments[1]);\r\n  }\r\n});","'use strict';\nvar $export        = require('./_export')\n  , createProperty = require('./_create-property');\n\n// WebKit Array.of isn't generic\n$export($export.S + $export.F * require('./_fails')(function(){\n  function F(){}\n  return !(Array.of.call(F) instanceof F);\n}), 'Array', {\n  // 22.1.2.3 Array.of( ...items)\n  of: function of(/* ...args */){\n    var index  = 0\n      , aLen   = arguments.length\n      , result = new (typeof this == 'function' ? this : Array)(aLen);\n    while(aLen > index)createProperty(result, index, arguments[index++]);\n    result.length = aLen;\n    return result;\n  }\n});","'use strict';\r\nvar $export = require('./_export')\r\n  , $reduce = require('./_array-reduce');\r\n\r\n$export($export.P + $export.F * !require('./_strict-method')([].reduceRight, true), 'Array', {\r\n  // 22.1.3.19 / 15.4.4.22 Array.prototype.reduceRight(callbackfn [, initialValue])\r\n  reduceRight: function reduceRight(callbackfn /* , initialValue */){\r\n    return $reduce(this, callbackfn, arguments.length, arguments[1], true);\r\n  }\r\n});","'use strict';\r\nvar $export = require('./_export')\r\n  , $reduce = require('./_array-reduce');\r\n\r\n$export($export.P + $export.F * !require('./_strict-method')([].reduce, true), 'Array', {\r\n  // 22.1.3.18 / 15.4.4.21 Array.prototype.reduce(callbackfn [, initialValue])\r\n  reduce: function reduce(callbackfn /* , initialValue */){\r\n    return $reduce(this, callbackfn, arguments.length, arguments[1], false);\r\n  }\r\n});","'use strict';\r\nvar $export    = require('./_export')\r\n  , html       = require('./_html')\r\n  , cof        = require('./_cof')\r\n  , toIndex    = require('./_to-index')\r\n  , toLength   = require('./_to-length')\r\n  , arraySlice = [].slice;\r\n\r\n// fallback for not array-like ES3 strings and DOM objects\r\n$export($export.P + $export.F * require('./_fails')(function(){\r\n  if(html)arraySlice.call(html);\r\n}), 'Array', {\r\n  slice: function slice(begin, end){\r\n    var len   = toLength(this.length)\r\n      , klass = cof(this);\r\n    end = end === undefined ? len : end;\r\n    if(klass == 'Array')return arraySlice.call(this, begin, end);\r\n    var start  = toIndex(begin, len)\r\n      , upTo   = toIndex(end, len)\r\n      , size   = toLength(upTo - start)\r\n      , cloned = Array(size)\r\n      , i      = 0;\r\n    for(; i < size; i++)cloned[i] = klass == 'String'\r\n      ? this.charAt(start + i)\r\n      : this[start + i];\r\n    return cloned;\r\n  }\r\n});","'use strict';\r\nvar $export = require('./_export')\r\n  , $some   = require('./_array-methods')(3);\r\n\r\n$export($export.P + $export.F * !require('./_strict-method')([].some, true), 'Array', {\r\n  // 22.1.3.23 / 15.4.4.17 Array.prototype.some(callbackfn [, thisArg])\r\n  some: function some(callbackfn /* , thisArg */){\r\n    return $some(this, callbackfn, arguments[1]);\r\n  }\r\n});","'use strict';\r\nvar $export   = require('./_export')\r\n  , aFunction = require('./_a-function')\r\n  , toObject  = require('./_to-object')\r\n  , fails     = require('./_fails')\r\n  , $sort     = [].sort\r\n  , test      = [1, 2, 3];\r\n\r\n$export($export.P + $export.F * (fails(function(){\r\n  // IE8-\r\n  test.sort(undefined);\r\n}) || !fails(function(){\r\n  // V8 bug\r\n  test.sort(null);\r\n  // Old WebKit\r\n}) || !require('./_strict-method')($sort)), 'Array', {\r\n  // 22.1.3.25 Array.prototype.sort(comparefn)\r\n  sort: function sort(comparefn){\r\n    return comparefn === undefined\r\n      ? $sort.call(toObject(this))\r\n      : $sort.call(toObject(this), aFunction(comparefn));\r\n  }\r\n});","require('./_set-species')('Array');","// 20.3.3.1 / 15.9.4.4 Date.now()\r\nvar $export = require('./_export');\r\n\r\n$export($export.S, 'Date', {now: function(){ return new Date().getTime(); }});","'use strict';\r\n// 20.3.4.36 / 15.9.5.43 Date.prototype.toISOString()\r\nvar $export = require('./_export')\r\n  , fails   = require('./_fails')\r\n  , getTime = Date.prototype.getTime;\r\n\r\nvar lz = function(num){\r\n  return num > 9 ? num : '0' + num;\r\n};\r\n\r\n// PhantomJS / old WebKit has a broken implementations\r\n$export($export.P + $export.F * (fails(function(){\r\n  return new Date(-5e13 - 1).toISOString() != '0385-07-25T07:06:39.999Z';\r\n}) || !fails(function(){\r\n  new Date(NaN).toISOString();\r\n})), 'Date', {\r\n  toISOString: function toISOString(){\r\n    if(!isFinite(getTime.call(this)))throw RangeError('Invalid time value');\r\n    var d = this\r\n      , y = d.getUTCFullYear()\r\n      , m = d.getUTCMilliseconds()\r\n      , s = y < 0 ? '-' : y > 9999 ? '+' : '';\r\n    return s + ('00000' + Math.abs(y)).slice(s ? -6 : -4) +\r\n      '-' + lz(d.getUTCMonth() + 1) + '-' + lz(d.getUTCDate()) +\r\n      'T' + lz(d.getUTCHours()) + ':' + lz(d.getUTCMinutes()) +\r\n      ':' + lz(d.getUTCSeconds()) + '.' + (m > 99 ? m : '0' + lz(m)) + 'Z';\r\n  }\r\n});","'use strict';\nvar $export     = require('./_export')\n  , toObject    = require('./_to-object')\n  , toPrimitive = require('./_to-primitive');\n\n$export($export.P + $export.F * require('./_fails')(function(){\n  return new Date(NaN).toJSON() !== null || Date.prototype.toJSON.call({toISOString: function(){ return 1; }}) !== 1;\n}), 'Date', {\n  toJSON: function toJSON(key){\n    var O  = toObject(this)\n      , pv = toPrimitive(O);\n    return typeof pv == 'number' && !isFinite(pv) ? null : O.toISOString();\n  }\n});","var TO_PRIMITIVE = require('./_wks')('toPrimitive')\r\n  , proto        = Date.prototype;\r\n\r\nif(!(TO_PRIMITIVE in proto))require('./_hide')(proto, TO_PRIMITIVE, require('./_date-to-primitive'));","var DateProto    = Date.prototype\n  , INVALID_DATE = 'Invalid Date'\n  , TO_STRING    = 'toString'\n  , $toString    = DateProto[TO_STRING]\n  , getTime      = DateProto.getTime;\nif(new Date(NaN) + '' != INVALID_DATE){\n  require('./_redefine')(DateProto, TO_STRING, function toString(){\n    var value = getTime.call(this);\n    return value === value ? $toString.call(this) : INVALID_DATE;\n  });\n}","// 19.2.3.2 / 15.3.4.5 Function.prototype.bind(thisArg, args...)\r\nvar $export = require('./_export');\r\n\r\n$export($export.P, 'Function', {bind: require('./_bind')});","'use strict';\nvar isObject       = require('./_is-object')\n  , getPrototypeOf = require('./_object-gpo')\n  , HAS_INSTANCE   = require('./_wks')('hasInstance')\n  , FunctionProto  = Function.prototype;\n// 19.2.3.6 Function.prototype[@@hasInstance](V)\nif(!(HAS_INSTANCE in FunctionProto))require('./_object-dp').f(FunctionProto, HAS_INSTANCE, {value: function(O){\n  if(typeof this != 'function' || !isObject(O))return false;\n  if(!isObject(this.prototype))return O instanceof this;\n  // for environment w/o native `@@hasInstance` logic enough `instanceof`, but add this:\n  while(O = getPrototypeOf(O))if(this.prototype === O)return true;\n  return false;\n}});","var dP         = require('./_object-dp').f\n  , createDesc = require('./_property-desc')\n  , has        = require('./_has')\n  , FProto     = Function.prototype\n  , nameRE     = /^\\s*function ([^ (]*)/\n  , NAME       = 'name';\n\nvar isExtensible = Object.isExtensible || function(){\n  return true;\n};\n\n// 19.2.4.2 name\nNAME in FProto || require('./_descriptors') && dP(FProto, NAME, {\n  configurable: true,\n  get: function(){\n    try {\n      var that = this\n        , name = ('' + that).match(nameRE)[1];\n      has(that, NAME) || !isExtensible(that) || dP(that, NAME, createDesc(5, name));\n      return name;\n    } catch(e){\n      return '';\n    }\n  }\n});","'use strict';\nvar strong = require('./_collection-strong');\n\n// 23.1 Map Objects\nmodule.exports = require('./_collection')('Map', function(get){\n  return function Map(){ return get(this, arguments.length > 0 ? arguments[0] : undefined); };\n}, {\n  // 23.1.3.6 Map.prototype.get(key)\n  get: function get(key){\n    var entry = strong.getEntry(this, key);\n    return entry && entry.v;\n  },\n  // 23.1.3.9 Map.prototype.set(key, value)\n  set: function set(key, value){\n    return strong.def(this, key === 0 ? 0 : key, value);\n  }\n}, strong, true);","// 20.2.2.3 Math.acosh(x)\nvar $export = require('./_export')\n  , log1p   = require('./_math-log1p')\n  , sqrt    = Math.sqrt\n  , $acosh  = Math.acosh;\n\n$export($export.S + $export.F * !($acosh\n  // V8 bug: https://code.google.com/p/v8/issues/detail?id=3509\n  && Math.floor($acosh(Number.MAX_VALUE)) == 710\n  // Tor Browser bug: Math.acosh(Infinity) -> NaN \n  && $acosh(Infinity) == Infinity\n), 'Math', {\n  acosh: function acosh(x){\n    return (x = +x) < 1 ? NaN : x > 94906265.62425156\n      ? Math.log(x) + Math.LN2\n      : log1p(x - 1 + sqrt(x - 1) * sqrt(x + 1));\n  }\n});","// 20.2.2.5 Math.asinh(x)\nvar $export = require('./_export')\n  , $asinh  = Math.asinh;\n\nfunction asinh(x){\n  return !isFinite(x = +x) || x == 0 ? x : x < 0 ? -asinh(-x) : Math.log(x + Math.sqrt(x * x + 1));\n}\n\n// Tor Browser bug: Math.asinh(0) -> -0 \n$export($export.S + $export.F * !($asinh && 1 / $asinh(0) > 0), 'Math', {asinh: asinh});","// 20.2.2.7 Math.atanh(x)\nvar $export = require('./_export')\n  , $atanh  = Math.atanh;\n\n// Tor Browser bug: Math.atanh(-0) -> 0 \n$export($export.S + $export.F * !($atanh && 1 / $atanh(-0) < 0), 'Math', {\n  atanh: function atanh(x){\n    return (x = +x) == 0 ? x : Math.log((1 + x) / (1 - x)) / 2;\n  }\n});","// 20.2.2.9 Math.cbrt(x)\nvar $export = require('./_export')\n  , sign    = require('./_math-sign');\n\n$export($export.S, 'Math', {\n  cbrt: function cbrt(x){\n    return sign(x = +x) * Math.pow(Math.abs(x), 1 / 3);\n  }\n});","// 20.2.2.11 Math.clz32(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n  clz32: function clz32(x){\n    return (x >>>= 0) ? 31 - Math.floor(Math.log(x + 0.5) * Math.LOG2E) : 32;\n  }\n});","// 20.2.2.12 Math.cosh(x)\nvar $export = require('./_export')\n  , exp     = Math.exp;\n\n$export($export.S, 'Math', {\n  cosh: function cosh(x){\n    return (exp(x = +x) + exp(-x)) / 2;\n  }\n});","// 20.2.2.14 Math.expm1(x)\nvar $export = require('./_export')\n  , $expm1  = require('./_math-expm1');\n\n$export($export.S + $export.F * ($expm1 != Math.expm1), 'Math', {expm1: $expm1});","// 20.2.2.16 Math.fround(x)\nvar $export   = require('./_export')\n  , sign      = require('./_math-sign')\n  , pow       = Math.pow\n  , EPSILON   = pow(2, -52)\n  , EPSILON32 = pow(2, -23)\n  , MAX32     = pow(2, 127) * (2 - EPSILON32)\n  , MIN32     = pow(2, -126);\n\nvar roundTiesToEven = function(n){\n  return n + 1 / EPSILON - 1 / EPSILON;\n};\n\n\n$export($export.S, 'Math', {\n  fround: function fround(x){\n    var $abs  = Math.abs(x)\n      , $sign = sign(x)\n      , a, result;\n    if($abs < MIN32)return $sign * roundTiesToEven($abs / MIN32 / EPSILON32) * MIN32 * EPSILON32;\n    a = (1 + EPSILON32 / EPSILON) * $abs;\n    result = a - (a - $abs);\n    if(result > MAX32 || result != result)return $sign * Infinity;\n    return $sign * result;\n  }\n});","// 20.2.2.17 Math.hypot([value1[, value2[, … ]]])\nvar $export = require('./_export')\n  , abs     = Math.abs;\n\n$export($export.S, 'Math', {\n  hypot: function hypot(value1, value2){ // eslint-disable-line no-unused-vars\n    var sum  = 0\n      , i    = 0\n      , aLen = arguments.length\n      , larg = 0\n      , arg, div;\n    while(i < aLen){\n      arg = abs(arguments[i++]);\n      if(larg < arg){\n        div  = larg / arg;\n        sum  = sum * div * div + 1;\n        larg = arg;\n      } else if(arg > 0){\n        div  = arg / larg;\n        sum += div * div;\n      } else sum += arg;\n    }\n    return larg === Infinity ? Infinity : larg * Math.sqrt(sum);\n  }\n});","// 20.2.2.18 Math.imul(x, y)\nvar $export = require('./_export')\n  , $imul   = Math.imul;\n\n// some WebKit versions fails with big numbers, some has wrong arity\n$export($export.S + $export.F * require('./_fails')(function(){\n  return $imul(0xffffffff, 5) != -5 || $imul.length != 2;\n}), 'Math', {\n  imul: function imul(x, y){\n    var UINT16 = 0xffff\n      , xn = +x\n      , yn = +y\n      , xl = UINT16 & xn\n      , yl = UINT16 & yn;\n    return 0 | xl * yl + ((UINT16 & xn >>> 16) * yl + xl * (UINT16 & yn >>> 16) << 16 >>> 0);\n  }\n});","// 20.2.2.21 Math.log10(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n  log10: function log10(x){\n    return Math.log(x) / Math.LN10;\n  }\n});","// 20.2.2.20 Math.log1p(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {log1p: require('./_math-log1p')});","// 20.2.2.22 Math.log2(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n  log2: function log2(x){\n    return Math.log(x) / Math.LN2;\n  }\n});","// 20.2.2.28 Math.sign(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {sign: require('./_math-sign')});","// 20.2.2.30 Math.sinh(x)\nvar $export = require('./_export')\n  , expm1   = require('./_math-expm1')\n  , exp     = Math.exp;\n\n// V8 near Chromium 38 has a problem with very small numbers\n$export($export.S + $export.F * require('./_fails')(function(){\n  return !Math.sinh(-2e-17) != -2e-17;\n}), 'Math', {\n  sinh: function sinh(x){\n    return Math.abs(x = +x) < 1\n      ? (expm1(x) - expm1(-x)) / 2\n      : (exp(x - 1) - exp(-x - 1)) * (Math.E / 2);\n  }\n});","// 20.2.2.33 Math.tanh(x)\nvar $export = require('./_export')\n  , expm1   = require('./_math-expm1')\n  , exp     = Math.exp;\n\n$export($export.S, 'Math', {\n  tanh: function tanh(x){\n    var a = expm1(x = +x)\n      , b = expm1(-x);\n    return a == Infinity ? 1 : b == Infinity ? -1 : (a - b) / (exp(x) + exp(-x));\n  }\n});","// 20.2.2.34 Math.trunc(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n  trunc: function trunc(it){\n    return (it > 0 ? Math.floor : Math.ceil)(it);\n  }\n});","'use strict';\nvar global            = require('./_global')\n  , has               = require('./_has')\n  , cof               = require('./_cof')\n  , inheritIfRequired = require('./_inherit-if-required')\n  , toPrimitive       = require('./_to-primitive')\n  , fails             = require('./_fails')\n  , gOPN              = require('./_object-gopn').f\n  , gOPD              = require('./_object-gopd').f\n  , dP                = require('./_object-dp').f\n  , $trim             = require('./_string-trim').trim\n  , NUMBER            = 'Number'\n  , $Number           = global[NUMBER]\n  , Base              = $Number\n  , proto             = $Number.prototype\n  // Opera ~12 has broken Object#toString\n  , BROKEN_COF        = cof(require('./_object-create')(proto)) == NUMBER\n  , TRIM              = 'trim' in String.prototype;\n\n// 7.1.3 ToNumber(argument)\nvar toNumber = function(argument){\n  var it = toPrimitive(argument, false);\n  if(typeof it == 'string' && it.length > 2){\n    it = TRIM ? it.trim() : $trim(it, 3);\n    var first = it.charCodeAt(0)\n      , third, radix, maxCode;\n    if(first === 43 || first === 45){\n      third = it.charCodeAt(2);\n      if(third === 88 || third === 120)return NaN; // Number('+0x1') should be NaN, old V8 fix\n    } else if(first === 48){\n      switch(it.charCodeAt(1)){\n        case 66 : case 98  : radix = 2; maxCode = 49; break; // fast equal /^0b[01]+$/i\n        case 79 : case 111 : radix = 8; maxCode = 55; break; // fast equal /^0o[0-7]+$/i\n        default : return +it;\n      }\n      for(var digits = it.slice(2), i = 0, l = digits.length, code; i < l; i++){\n        code = digits.charCodeAt(i);\n        // parseInt parses a string to a first unavailable symbol\n        // but ToNumber should return NaN if a string contains unavailable symbols\n        if(code < 48 || code > maxCode)return NaN;\n      } return parseInt(digits, radix);\n    }\n  } return +it;\n};\n\nif(!$Number(' 0o1') || !$Number('0b1') || $Number('+0x1')){\n  $Number = function Number(value){\n    var it = arguments.length < 1 ? 0 : value\n      , that = this;\n    return that instanceof $Number\n      // check on 1..constructor(foo) case\n      && (BROKEN_COF ? fails(function(){ proto.valueOf.call(that); }) : cof(that) != NUMBER)\n        ? inheritIfRequired(new Base(toNumber(it)), that, $Number) : toNumber(it);\n  };\n  for(var keys = require('./_descriptors') ? gOPN(Base) : (\n    // ES3:\n    'MAX_VALUE,MIN_VALUE,NaN,NEGATIVE_INFINITY,POSITIVE_INFINITY,' +\n    // ES6 (in case, if modules with ES6 Number statics required before):\n    'EPSILON,isFinite,isInteger,isNaN,isSafeInteger,MAX_SAFE_INTEGER,' +\n    'MIN_SAFE_INTEGER,parseFloat,parseInt,isInteger'\n  ).split(','), j = 0, key; keys.length > j; j++){\n    if(has(Base, key = keys[j]) && !has($Number, key)){\n      dP($Number, key, gOPD(Base, key));\n    }\n  }\n  $Number.prototype = proto;\n  proto.constructor = $Number;\n  require('./_redefine')(global, NUMBER, $Number);\n}","// 20.1.2.1 Number.EPSILON\nvar $export = require('./_export');\n\n$export($export.S, 'Number', {EPSILON: Math.pow(2, -52)});","// 20.1.2.2 Number.isFinite(number)\nvar $export   = require('./_export')\n  , _isFinite = require('./_global').isFinite;\n\n$export($export.S, 'Number', {\n  isFinite: function isFinite(it){\n    return typeof it == 'number' && _isFinite(it);\n  }\n});","// 20.1.2.3 Number.isInteger(number)\nvar $export = require('./_export');\n\n$export($export.S, 'Number', {isInteger: require('./_is-integer')});","// 20.1.2.4 Number.isNaN(number)\nvar $export = require('./_export');\n\n$export($export.S, 'Number', {\n  isNaN: function isNaN(number){\n    return number != number;\n  }\n});","// 20.1.2.5 Number.isSafeInteger(number)\nvar $export   = require('./_export')\n  , isInteger = require('./_is-integer')\n  , abs       = Math.abs;\n\n$export($export.S, 'Number', {\n  isSafeInteger: function isSafeInteger(number){\n    return isInteger(number) && abs(number) <= 0x1fffffffffffff;\n  }\n});","// 20.1.2.6 Number.MAX_SAFE_INTEGER\nvar $export = require('./_export');\n\n$export($export.S, 'Number', {MAX_SAFE_INTEGER: 0x1fffffffffffff});","// 20.1.2.10 Number.MIN_SAFE_INTEGER\nvar $export = require('./_export');\n\n$export($export.S, 'Number', {MIN_SAFE_INTEGER: -0x1fffffffffffff});","var $export     = require('./_export')\n  , $parseFloat = require('./_parse-float');\n// 20.1.2.12 Number.parseFloat(string)\n$export($export.S + $export.F * (Number.parseFloat != $parseFloat), 'Number', {parseFloat: $parseFloat});","var $export   = require('./_export')\n  , $parseInt = require('./_parse-int');\n// 20.1.2.13 Number.parseInt(string, radix)\n$export($export.S + $export.F * (Number.parseInt != $parseInt), 'Number', {parseInt: $parseInt});","'use strict';\r\nvar $export      = require('./_export')\r\n  , anInstance   = require('./_an-instance')\r\n  , toInteger    = require('./_to-integer')\r\n  , aNumberValue = require('./_a-number-value')\r\n  , repeat       = require('./_string-repeat')\r\n  , $toFixed     = 1..toFixed\r\n  , floor        = Math.floor\r\n  , data         = [0, 0, 0, 0, 0, 0]\r\n  , ERROR        = 'Number.toFixed: incorrect invocation!'\r\n  , ZERO         = '0';\r\n\r\nvar multiply = function(n, c){\r\n  var i  = -1\r\n    , c2 = c;\r\n  while(++i < 6){\r\n    c2 += n * data[i];\r\n    data[i] = c2 % 1e7;\r\n    c2 = floor(c2 / 1e7);\r\n  }\r\n};\r\nvar divide = function(n){\r\n  var i = 6\r\n    , c = 0;\r\n  while(--i >= 0){\r\n    c += data[i];\r\n    data[i] = floor(c / n);\r\n    c = (c % n) * 1e7;\r\n  }\r\n};\r\nvar numToString = function(){\r\n  var i = 6\r\n    , s = '';\r\n  while(--i >= 0){\r\n    if(s !== '' || i === 0 || data[i] !== 0){\r\n      var t = String(data[i]);\r\n      s = s === '' ? t : s + repeat.call(ZERO, 7 - t.length) + t;\r\n    }\r\n  } return s;\r\n};\r\nvar pow = function(x, n, acc){\r\n  return n === 0 ? acc : n % 2 === 1 ? pow(x, n - 1, acc * x) : pow(x * x, n / 2, acc);\r\n};\r\nvar log = function(x){\r\n  var n  = 0\r\n    , x2 = x;\r\n  while(x2 >= 4096){\r\n    n += 12;\r\n    x2 /= 4096;\r\n  }\r\n  while(x2 >= 2){\r\n    n  += 1;\r\n    x2 /= 2;\r\n  } return n;\r\n};\r\n\r\n$export($export.P + $export.F * (!!$toFixed && (\r\n  0.00008.toFixed(3) !== '0.000' ||\r\n  0.9.toFixed(0) !== '1' ||\r\n  1.255.toFixed(2) !== '1.25' ||\r\n  1000000000000000128..toFixed(0) !== '1000000000000000128'\r\n) || !require('./_fails')(function(){\r\n  // V8 ~ Android 4.3-\r\n  $toFixed.call({});\r\n})), 'Number', {\r\n  toFixed: function toFixed(fractionDigits){\r\n    var x = aNumberValue(this, ERROR)\r\n      , f = toInteger(fractionDigits)\r\n      , s = ''\r\n      , m = ZERO\r\n      , e, z, j, k;\r\n    if(f < 0 || f > 20)throw RangeError(ERROR);\r\n    if(x != x)return 'NaN';\r\n    if(x <= -1e21 || x >= 1e21)return String(x);\r\n    if(x < 0){\r\n      s = '-';\r\n      x = -x;\r\n    }\r\n    if(x > 1e-21){\r\n      e = log(x * pow(2, 69, 1)) - 69;\r\n      z = e < 0 ? x * pow(2, -e, 1) : x / pow(2, e, 1);\r\n      z *= 0x10000000000000;\r\n      e = 52 - e;\r\n      if(e > 0){\r\n        multiply(0, z);\r\n        j = f;\r\n        while(j >= 7){\r\n          multiply(1e7, 0);\r\n          j -= 7;\r\n        }\r\n        multiply(pow(10, j, 1), 0);\r\n        j = e - 1;\r\n        while(j >= 23){\r\n          divide(1 << 23);\r\n          j -= 23;\r\n        }\r\n        divide(1 << j);\r\n        multiply(1, 1);\r\n        divide(2);\r\n        m = numToString();\r\n      } else {\r\n        multiply(0, z);\r\n        multiply(1 << -e, 0);\r\n        m = numToString() + repeat.call(ZERO, f);\r\n      }\r\n    }\r\n    if(f > 0){\r\n      k = m.length;\r\n      m = s + (k <= f ? '0.' + repeat.call(ZERO, f - k) + m : m.slice(0, k - f) + '.' + m.slice(k - f));\r\n    } else {\r\n      m = s + m;\r\n    } return m;\r\n  }\r\n});","'use strict';\r\nvar $export      = require('./_export')\r\n  , $fails       = require('./_fails')\r\n  , aNumberValue = require('./_a-number-value')\r\n  , $toPrecision = 1..toPrecision;\r\n\r\n$export($export.P + $export.F * ($fails(function(){\r\n  // IE7-\r\n  return $toPrecision.call(1, undefined) !== '1';\r\n}) || !$fails(function(){\r\n  // V8 ~ Android 4.3-\r\n  $toPrecision.call({});\r\n})), 'Number', {\r\n  toPrecision: function toPrecision(precision){\r\n    var that = aNumberValue(this, 'Number#toPrecision: incorrect invocation!');\r\n    return precision === undefined ? $toPrecision.call(that) : $toPrecision.call(that, precision); \r\n  }\r\n});","// 19.1.3.1 Object.assign(target, source)\nvar $export = require('./_export');\n\n$export($export.S + $export.F, 'Object', {assign: require('./_object-assign')});","var $export = require('./_export')\r\n// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])\r\n$export($export.S, 'Object', {create: require('./_object-create')});","var $export = require('./_export');\r\n// 19.1.2.3 / 15.2.3.7 Object.defineProperties(O, Properties)\r\n$export($export.S + $export.F * !require('./_descriptors'), 'Object', {defineProperties: require('./_object-dps')});","var $export = require('./_export');\r\n// 19.1.2.4 / 15.2.3.6 Object.defineProperty(O, P, Attributes)\r\n$export($export.S + $export.F * !require('./_descriptors'), 'Object', {defineProperty: require('./_object-dp').f});","// 19.1.2.5 Object.freeze(O)\nvar isObject = require('./_is-object')\n  , meta     = require('./_meta').onFreeze;\n\nrequire('./_object-sap')('freeze', function($freeze){\n  return function freeze(it){\n    return $freeze && isObject(it) ? $freeze(meta(it)) : it;\n  };\n});","// 19.1.2.6 Object.getOwnPropertyDescriptor(O, P)\nvar toIObject                 = require('./_to-iobject')\n  , $getOwnPropertyDescriptor = require('./_object-gopd').f;\n\nrequire('./_object-sap')('getOwnPropertyDescriptor', function(){\n  return function getOwnPropertyDescriptor(it, key){\n    return $getOwnPropertyDescriptor(toIObject(it), key);\n  };\n});","// 19.1.2.7 Object.getOwnPropertyNames(O)\nrequire('./_object-sap')('getOwnPropertyNames', function(){\n  return require('./_object-gopn-ext').f;\n});","// 19.1.2.9 Object.getPrototypeOf(O)\nvar toObject        = require('./_to-object')\n  , $getPrototypeOf = require('./_object-gpo');\n\nrequire('./_object-sap')('getPrototypeOf', function(){\n  return function getPrototypeOf(it){\n    return $getPrototypeOf(toObject(it));\n  };\n});","// 19.1.2.11 Object.isExtensible(O)\nvar isObject = require('./_is-object');\n\nrequire('./_object-sap')('isExtensible', function($isExtensible){\n  return function isExtensible(it){\n    return isObject(it) ? $isExtensible ? $isExtensible(it) : true : false;\n  };\n});","// 19.1.2.12 Object.isFrozen(O)\nvar isObject = require('./_is-object');\n\nrequire('./_object-sap')('isFrozen', function($isFrozen){\n  return function isFrozen(it){\n    return isObject(it) ? $isFrozen ? $isFrozen(it) : false : true;\n  };\n});","// 19.1.2.13 Object.isSealed(O)\nvar isObject = require('./_is-object');\n\nrequire('./_object-sap')('isSealed', function($isSealed){\n  return function isSealed(it){\n    return isObject(it) ? $isSealed ? $isSealed(it) : false : true;\n  };\n});","// 19.1.3.10 Object.is(value1, value2)\nvar $export = require('./_export');\n$export($export.S, 'Object', {is: require('./_same-value')});","// 19.1.2.14 Object.keys(O)\nvar toObject = require('./_to-object')\n  , $keys    = require('./_object-keys');\n\nrequire('./_object-sap')('keys', function(){\n  return function keys(it){\n    return $keys(toObject(it));\n  };\n});","// 19.1.2.15 Object.preventExtensions(O)\nvar isObject = require('./_is-object')\n  , meta     = require('./_meta').onFreeze;\n\nrequire('./_object-sap')('preventExtensions', function($preventExtensions){\n  return function preventExtensions(it){\n    return $preventExtensions && isObject(it) ? $preventExtensions(meta(it)) : it;\n  };\n});","// 19.1.2.17 Object.seal(O)\nvar isObject = require('./_is-object')\n  , meta     = require('./_meta').onFreeze;\n\nrequire('./_object-sap')('seal', function($seal){\n  return function seal(it){\n    return $seal && isObject(it) ? $seal(meta(it)) : it;\n  };\n});","// 19.1.3.19 Object.setPrototypeOf(O, proto)\nvar $export = require('./_export');\n$export($export.S, 'Object', {setPrototypeOf: require('./_set-proto').set});","'use strict';\n// 19.1.3.6 Object.prototype.toString()\nvar classof = require('./_classof')\n  , test    = {};\ntest[require('./_wks')('toStringTag')] = 'z';\nif(test + '' != '[object z]'){\n  require('./_redefine')(Object.prototype, 'toString', function toString(){\n    return '[object ' + classof(this) + ']';\n  }, true);\n}","var $export     = require('./_export')\r\n  , $parseFloat = require('./_parse-float');\r\n// 18.2.4 parseFloat(string)\r\n$export($export.G + $export.F * (parseFloat != $parseFloat), {parseFloat: $parseFloat});","var $export   = require('./_export')\r\n  , $parseInt = require('./_parse-int');\r\n// 18.2.5 parseInt(string, radix)\r\n$export($export.G + $export.F * (parseInt != $parseInt), {parseInt: $parseInt});","'use strict';\nvar LIBRARY            = require('./_library')\n  , global             = require('./_global')\n  , ctx                = require('./_ctx')\n  , classof            = require('./_classof')\n  , $export            = require('./_export')\n  , isObject           = require('./_is-object')\n  , anObject           = require('./_an-object')\n  , aFunction          = require('./_a-function')\n  , anInstance         = require('./_an-instance')\n  , forOf              = require('./_for-of')\n  , setProto           = require('./_set-proto').set\n  , speciesConstructor = require('./_species-constructor')\n  , task               = require('./_task').set\n  , microtask          = require('./_microtask')()\n  , PROMISE            = 'Promise'\n  , TypeError          = global.TypeError\n  , process            = global.process\n  , $Promise           = global[PROMISE]\n  , process            = global.process\n  , isNode             = classof(process) == 'process'\n  , empty              = function(){ /* empty */ }\n  , Internal, GenericPromiseCapability, Wrapper;\n\nvar USE_NATIVE = !!function(){\n  try {\n    // correct subclassing with @@species support\n    var promise     = $Promise.resolve(1)\n      , FakePromise = (promise.constructor = {})[require('./_wks')('species')] = function(exec){ exec(empty, empty); };\n    // unhandled rejections tracking support, NodeJS Promise without it fails @@species test\n    return (isNode || typeof PromiseRejectionEvent == 'function') && promise.then(empty) instanceof FakePromise;\n  } catch(e){ /* empty */ }\n}();\n\n// helpers\nvar sameConstructor = function(a, b){\n  // with library wrapper special case\n  return a === b || a === $Promise && b === Wrapper;\n};\nvar isThenable = function(it){\n  var then;\n  return isObject(it) && typeof (then = it.then) == 'function' ? then : false;\n};\nvar newPromiseCapability = function(C){\n  return sameConstructor($Promise, C)\n    ? new PromiseCapability(C)\n    : new GenericPromiseCapability(C);\n};\nvar PromiseCapability = GenericPromiseCapability = function(C){\n  var resolve, reject;\n  this.promise = new C(function($$resolve, $$reject){\n    if(resolve !== undefined || reject !== undefined)throw TypeError('Bad Promise constructor');\n    resolve = $$resolve;\n    reject  = $$reject;\n  });\n  this.resolve = aFunction(resolve);\n  this.reject  = aFunction(reject);\n};\nvar perform = function(exec){\n  try {\n    exec();\n  } catch(e){\n    return {error: e};\n  }\n};\nvar notify = function(promise, isReject){\n  if(promise._n)return;\n  promise._n = true;\n  var chain = promise._c;\n  microtask(function(){\n    var value = promise._v\n      , ok    = promise._s == 1\n      , i     = 0;\n    var run = function(reaction){\n      var handler = ok ? reaction.ok : reaction.fail\n        , resolve = reaction.resolve\n        , reject  = reaction.reject\n        , domain  = reaction.domain\n        , result, then;\n      try {\n        if(handler){\n          if(!ok){\n            if(promise._h == 2)onHandleUnhandled(promise);\n            promise._h = 1;\n          }\n          if(handler === true)result = value;\n          else {\n            if(domain)domain.enter();\n            result = handler(value);\n            if(domain)domain.exit();\n          }\n          if(result === reaction.promise){\n            reject(TypeError('Promise-chain cycle'));\n          } else if(then = isThenable(result)){\n            then.call(result, resolve, reject);\n          } else resolve(result);\n        } else reject(value);\n      } catch(e){\n        reject(e);\n      }\n    };\n    while(chain.length > i)run(chain[i++]); // variable length - can't use forEach\n    promise._c = [];\n    promise._n = false;\n    if(isReject && !promise._h)onUnhandled(promise);\n  });\n};\nvar onUnhandled = function(promise){\n  task.call(global, function(){\n    var value = promise._v\n      , abrupt, handler, console;\n    if(isUnhandled(promise)){\n      abrupt = perform(function(){\n        if(isNode){\n          process.emit('unhandledRejection', value, promise);\n        } else if(handler = global.onunhandledrejection){\n          handler({promise: promise, reason: value});\n        } else if((console = global.console) && console.error){\n          console.error('Unhandled promise rejection', value);\n        }\n      });\n      // Browsers should not trigger `rejectionHandled` event if it was handled here, NodeJS - should\n      promise._h = isNode || isUnhandled(promise) ? 2 : 1;\n    } promise._a = undefined;\n    if(abrupt)throw abrupt.error;\n  });\n};\nvar isUnhandled = function(promise){\n  if(promise._h == 1)return false;\n  var chain = promise._a || promise._c\n    , i     = 0\n    , reaction;\n  while(chain.length > i){\n    reaction = chain[i++];\n    if(reaction.fail || !isUnhandled(reaction.promise))return false;\n  } return true;\n};\nvar onHandleUnhandled = function(promise){\n  task.call(global, function(){\n    var handler;\n    if(isNode){\n      process.emit('rejectionHandled', promise);\n    } else if(handler = global.onrejectionhandled){\n      handler({promise: promise, reason: promise._v});\n    }\n  });\n};\nvar $reject = function(value){\n  var promise = this;\n  if(promise._d)return;\n  promise._d = true;\n  promise = promise._w || promise; // unwrap\n  promise._v = value;\n  promise._s = 2;\n  if(!promise._a)promise._a = promise._c.slice();\n  notify(promise, true);\n};\nvar $resolve = function(value){\n  var promise = this\n    , then;\n  if(promise._d)return;\n  promise._d = true;\n  promise = promise._w || promise; // unwrap\n  try {\n    if(promise === value)throw TypeError(\"Promise can't be resolved itself\");\n    if(then = isThenable(value)){\n      microtask(function(){\n        var wrapper = {_w: promise, _d: false}; // wrap\n        try {\n          then.call(value, ctx($resolve, wrapper, 1), ctx($reject, wrapper, 1));\n        } catch(e){\n          $reject.call(wrapper, e);\n        }\n      });\n    } else {\n      promise._v = value;\n      promise._s = 1;\n      notify(promise, false);\n    }\n  } catch(e){\n    $reject.call({_w: promise, _d: false}, e); // wrap\n  }\n};\n\n// constructor polyfill\nif(!USE_NATIVE){\n  // 25.4.3.1 Promise(executor)\n  $Promise = function Promise(executor){\n    anInstance(this, $Promise, PROMISE, '_h');\n    aFunction(executor);\n    Internal.call(this);\n    try {\n      executor(ctx($resolve, this, 1), ctx($reject, this, 1));\n    } catch(err){\n      $reject.call(this, err);\n    }\n  };\n  Internal = function Promise(executor){\n    this._c = [];             // <- awaiting reactions\n    this._a = undefined;      // <- checked in isUnhandled reactions\n    this._s = 0;              // <- state\n    this._d = false;          // <- done\n    this._v = undefined;      // <- value\n    this._h = 0;              // <- rejection state, 0 - default, 1 - handled, 2 - unhandled\n    this._n = false;          // <- notify\n  };\n  Internal.prototype = require('./_redefine-all')($Promise.prototype, {\n    // 25.4.5.3 Promise.prototype.then(onFulfilled, onRejected)\n    then: function then(onFulfilled, onRejected){\n      var reaction    = newPromiseCapability(speciesConstructor(this, $Promise));\n      reaction.ok     = typeof onFulfilled == 'function' ? onFulfilled : true;\n      reaction.fail   = typeof onRejected == 'function' && onRejected;\n      reaction.domain = isNode ? process.domain : undefined;\n      this._c.push(reaction);\n      if(this._a)this._a.push(reaction);\n      if(this._s)notify(this, false);\n      return reaction.promise;\n    },\n    // 25.4.5.1 Promise.prototype.catch(onRejected)\n    'catch': function(onRejected){\n      return this.then(undefined, onRejected);\n    }\n  });\n  PromiseCapability = function(){\n    var promise  = new Internal;\n    this.promise = promise;\n    this.resolve = ctx($resolve, promise, 1);\n    this.reject  = ctx($reject, promise, 1);\n  };\n}\n\n$export($export.G + $export.W + $export.F * !USE_NATIVE, {Promise: $Promise});\nrequire('./_set-to-string-tag')($Promise, PROMISE);\nrequire('./_set-species')(PROMISE);\nWrapper = require('./_core')[PROMISE];\n\n// statics\n$export($export.S + $export.F * !USE_NATIVE, PROMISE, {\n  // 25.4.4.5 Promise.reject(r)\n  reject: function reject(r){\n    var capability = newPromiseCapability(this)\n      , $$reject   = capability.reject;\n    $$reject(r);\n    return capability.promise;\n  }\n});\n$export($export.S + $export.F * (LIBRARY || !USE_NATIVE), PROMISE, {\n  // 25.4.4.6 Promise.resolve(x)\n  resolve: function resolve(x){\n    // instanceof instead of internal slot check because we should fix it without replacement native Promise core\n    if(x instanceof $Promise && sameConstructor(x.constructor, this))return x;\n    var capability = newPromiseCapability(this)\n      , $$resolve  = capability.resolve;\n    $$resolve(x);\n    return capability.promise;\n  }\n});\n$export($export.S + $export.F * !(USE_NATIVE && require('./_iter-detect')(function(iter){\n  $Promise.all(iter)['catch'](empty);\n})), PROMISE, {\n  // 25.4.4.1 Promise.all(iterable)\n  all: function all(iterable){\n    var C          = this\n      , capability = newPromiseCapability(C)\n      , resolve    = capability.resolve\n      , reject     = capability.reject;\n    var abrupt = perform(function(){\n      var values    = []\n        , index     = 0\n        , remaining = 1;\n      forOf(iterable, false, function(promise){\n        var $index        = index++\n          , alreadyCalled = false;\n        values.push(undefined);\n        remaining++;\n        C.resolve(promise).then(function(value){\n          if(alreadyCalled)return;\n          alreadyCalled  = true;\n          values[$index] = value;\n          --remaining || resolve(values);\n        }, reject);\n      });\n      --remaining || resolve(values);\n    });\n    if(abrupt)reject(abrupt.error);\n    return capability.promise;\n  },\n  // 25.4.4.4 Promise.race(iterable)\n  race: function race(iterable){\n    var C          = this\n      , capability = newPromiseCapability(C)\n      , reject     = capability.reject;\n    var abrupt = perform(function(){\n      forOf(iterable, false, function(promise){\n        C.resolve(promise).then(capability.resolve, reject);\n      });\n    });\n    if(abrupt)reject(abrupt.error);\n    return capability.promise;\n  }\n});","// 26.1.1 Reflect.apply(target, thisArgument, argumentsList)\nvar $export   = require('./_export')\n  , aFunction = require('./_a-function')\n  , anObject  = require('./_an-object')\n  , _apply    = Function.apply;\n\n$export($export.S, 'Reflect', {\n  apply: function apply(target, thisArgument, argumentsList){\n    return _apply.call(aFunction(target), thisArgument, anObject(argumentsList));\n  }\n});","// 26.1.2 Reflect.construct(target, argumentsList [, newTarget])\nvar $export   = require('./_export')\n  , create    = require('./_object-create')\n  , aFunction = require('./_a-function')\n  , anObject  = require('./_an-object')\n  , isObject  = require('./_is-object')\n  , bind      = require('./_bind');\n\n// MS Edge supports only 2 arguments\n// FF Nightly sets third argument as `new.target`, but does not create `this` from it\n$export($export.S + $export.F * require('./_fails')(function(){\n  function F(){}\n  return !(Reflect.construct(function(){}, [], F) instanceof F);\n}), 'Reflect', {\n  construct: function construct(Target, args /*, newTarget*/){\n    aFunction(Target);\n    anObject(args);\n    var newTarget = arguments.length < 3 ? Target : aFunction(arguments[2]);\n    if(Target == newTarget){\n      // w/o altered newTarget, optimization for 0-4 arguments\n      switch(args.length){\n        case 0: return new Target;\n        case 1: return new Target(args[0]);\n        case 2: return new Target(args[0], args[1]);\n        case 3: return new Target(args[0], args[1], args[2]);\n        case 4: return new Target(args[0], args[1], args[2], args[3]);\n      }\n      // w/o altered newTarget, lot of arguments case\n      var $args = [null];\n      $args.push.apply($args, args);\n      return new (bind.apply(Target, $args));\n    }\n    // with altered newTarget, not support built-in constructors\n    var proto    = newTarget.prototype\n      , instance = create(isObject(proto) ? proto : Object.prototype)\n      , result   = Function.apply.call(Target, instance, args);\n    return isObject(result) ? result : instance;\n  }\n});","// 26.1.3 Reflect.defineProperty(target, propertyKey, attributes)\nvar dP          = require('./_object-dp')\n  , $export     = require('./_export')\n  , anObject    = require('./_an-object')\n  , toPrimitive = require('./_to-primitive');\n\n// MS Edge has broken Reflect.defineProperty - throwing instead of returning false\n$export($export.S + $export.F * require('./_fails')(function(){\n  Reflect.defineProperty(dP.f({}, 1, {value: 1}), 1, {value: 2});\n}), 'Reflect', {\n  defineProperty: function defineProperty(target, propertyKey, attributes){\n    anObject(target);\n    propertyKey = toPrimitive(propertyKey, true);\n    anObject(attributes);\n    try {\n      dP.f(target, propertyKey, attributes);\n      return true;\n    } catch(e){\n      return false;\n    }\n  }\n});","// 26.1.4 Reflect.deleteProperty(target, propertyKey)\nvar $export  = require('./_export')\n  , gOPD     = require('./_object-gopd').f\n  , anObject = require('./_an-object');\n\n$export($export.S, 'Reflect', {\n  deleteProperty: function deleteProperty(target, propertyKey){\n    var desc = gOPD(anObject(target), propertyKey);\n    return desc && !desc.configurable ? false : delete target[propertyKey];\n  }\n});","'use strict';\n// 26.1.5 Reflect.enumerate(target)\nvar $export  = require('./_export')\n  , anObject = require('./_an-object');\nvar Enumerate = function(iterated){\n  this._t = anObject(iterated); // target\n  this._i = 0;                  // next index\n  var keys = this._k = []       // keys\n    , key;\n  for(key in iterated)keys.push(key);\n};\nrequire('./_iter-create')(Enumerate, 'Object', function(){\n  var that = this\n    , keys = that._k\n    , key;\n  do {\n    if(that._i >= keys.length)return {value: undefined, done: true};\n  } while(!((key = keys[that._i++]) in that._t));\n  return {value: key, done: false};\n});\n\n$export($export.S, 'Reflect', {\n  enumerate: function enumerate(target){\n    return new Enumerate(target);\n  }\n});","// 26.1.7 Reflect.getOwnPropertyDescriptor(target, propertyKey)\nvar gOPD     = require('./_object-gopd')\n  , $export  = require('./_export')\n  , anObject = require('./_an-object');\n\n$export($export.S, 'Reflect', {\n  getOwnPropertyDescriptor: function getOwnPropertyDescriptor(target, propertyKey){\n    return gOPD.f(anObject(target), propertyKey);\n  }\n});","// 26.1.8 Reflect.getPrototypeOf(target)\nvar $export  = require('./_export')\n  , getProto = require('./_object-gpo')\n  , anObject = require('./_an-object');\n\n$export($export.S, 'Reflect', {\n  getPrototypeOf: function getPrototypeOf(target){\n    return getProto(anObject(target));\n  }\n});","// 26.1.6 Reflect.get(target, propertyKey [, receiver])\nvar gOPD           = require('./_object-gopd')\n  , getPrototypeOf = require('./_object-gpo')\n  , has            = require('./_has')\n  , $export        = require('./_export')\n  , isObject       = require('./_is-object')\n  , anObject       = require('./_an-object');\n\nfunction get(target, propertyKey/*, receiver*/){\n  var receiver = arguments.length < 3 ? target : arguments[2]\n    , desc, proto;\n  if(anObject(target) === receiver)return target[propertyKey];\n  if(desc = gOPD.f(target, propertyKey))return has(desc, 'value')\n    ? desc.value\n    : desc.get !== undefined\n      ? desc.get.call(receiver)\n      : undefined;\n  if(isObject(proto = getPrototypeOf(target)))return get(proto, propertyKey, receiver);\n}\n\n$export($export.S, 'Reflect', {get: get});","// 26.1.9 Reflect.has(target, propertyKey)\nvar $export = require('./_export');\n\n$export($export.S, 'Reflect', {\n  has: function has(target, propertyKey){\n    return propertyKey in target;\n  }\n});","// 26.1.10 Reflect.isExtensible(target)\nvar $export       = require('./_export')\n  , anObject      = require('./_an-object')\n  , $isExtensible = Object.isExtensible;\n\n$export($export.S, 'Reflect', {\n  isExtensible: function isExtensible(target){\n    anObject(target);\n    return $isExtensible ? $isExtensible(target) : true;\n  }\n});","// 26.1.11 Reflect.ownKeys(target)\nvar $export = require('./_export');\n\n$export($export.S, 'Reflect', {ownKeys: require('./_own-keys')});","// 26.1.12 Reflect.preventExtensions(target)\nvar $export            = require('./_export')\n  , anObject           = require('./_an-object')\n  , $preventExtensions = Object.preventExtensions;\n\n$export($export.S, 'Reflect', {\n  preventExtensions: function preventExtensions(target){\n    anObject(target);\n    try {\n      if($preventExtensions)$preventExtensions(target);\n      return true;\n    } catch(e){\n      return false;\n    }\n  }\n});","// 26.1.14 Reflect.setPrototypeOf(target, proto)\nvar $export  = require('./_export')\n  , setProto = require('./_set-proto');\n\nif(setProto)$export($export.S, 'Reflect', {\n  setPrototypeOf: function setPrototypeOf(target, proto){\n    setProto.check(target, proto);\n    try {\n      setProto.set(target, proto);\n      return true;\n    } catch(e){\n      return false;\n    }\n  }\n});","// 26.1.13 Reflect.set(target, propertyKey, V [, receiver])\nvar dP             = require('./_object-dp')\n  , gOPD           = require('./_object-gopd')\n  , getPrototypeOf = require('./_object-gpo')\n  , has            = require('./_has')\n  , $export        = require('./_export')\n  , createDesc     = require('./_property-desc')\n  , anObject       = require('./_an-object')\n  , isObject       = require('./_is-object');\n\nfunction set(target, propertyKey, V/*, receiver*/){\n  var receiver = arguments.length < 4 ? target : arguments[3]\n    , ownDesc  = gOPD.f(anObject(target), propertyKey)\n    , existingDescriptor, proto;\n  if(!ownDesc){\n    if(isObject(proto = getPrototypeOf(target))){\n      return set(proto, propertyKey, V, receiver);\n    }\n    ownDesc = createDesc(0);\n  }\n  if(has(ownDesc, 'value')){\n    if(ownDesc.writable === false || !isObject(receiver))return false;\n    existingDescriptor = gOPD.f(receiver, propertyKey) || createDesc(0);\n    existingDescriptor.value = V;\n    dP.f(receiver, propertyKey, existingDescriptor);\n    return true;\n  }\n  return ownDesc.set === undefined ? false : (ownDesc.set.call(receiver, V), true);\n}\n\n$export($export.S, 'Reflect', {set: set});","var global            = require('./_global')\n  , inheritIfRequired = require('./_inherit-if-required')\n  , dP                = require('./_object-dp').f\n  , gOPN              = require('./_object-gopn').f\n  , isRegExp          = require('./_is-regexp')\n  , $flags            = require('./_flags')\n  , $RegExp           = global.RegExp\n  , Base              = $RegExp\n  , proto             = $RegExp.prototype\n  , re1               = /a/g\n  , re2               = /a/g\n  // \"new\" creates a new object, old webkit buggy here\n  , CORRECT_NEW       = new $RegExp(re1) !== re1;\n\nif(require('./_descriptors') && (!CORRECT_NEW || require('./_fails')(function(){\n  re2[require('./_wks')('match')] = false;\n  // RegExp constructor can alter flags and IsRegExp works correct with @@match\n  return $RegExp(re1) != re1 || $RegExp(re2) == re2 || $RegExp(re1, 'i') != '/a/i';\n}))){\n  $RegExp = function RegExp(p, f){\n    var tiRE = this instanceof $RegExp\n      , piRE = isRegExp(p)\n      , fiU  = f === undefined;\n    return !tiRE && piRE && p.constructor === $RegExp && fiU ? p\n      : inheritIfRequired(CORRECT_NEW\n        ? new Base(piRE && !fiU ? p.source : p, f)\n        : Base((piRE = p instanceof $RegExp) ? p.source : p, piRE && fiU ? $flags.call(p) : f)\n      , tiRE ? this : proto, $RegExp);\n  };\n  var proxy = function(key){\n    key in $RegExp || dP($RegExp, key, {\n      configurable: true,\n      get: function(){ return Base[key]; },\n      set: function(it){ Base[key] = it; }\n    });\n  };\n  for(var keys = gOPN(Base), i = 0; keys.length > i; )proxy(keys[i++]);\n  proto.constructor = $RegExp;\n  $RegExp.prototype = proto;\n  require('./_redefine')(global, 'RegExp', $RegExp);\n}\n\nrequire('./_set-species')('RegExp');","// 21.2.5.3 get RegExp.prototype.flags()\nif(require('./_descriptors') && /./g.flags != 'g')require('./_object-dp').f(RegExp.prototype, 'flags', {\n  configurable: true,\n  get: require('./_flags')\n});","// @@match logic\nrequire('./_fix-re-wks')('match', 1, function(defined, MATCH, $match){\n  // 21.1.3.11 String.prototype.match(regexp)\n  return [function match(regexp){\n    'use strict';\n    var O  = defined(this)\n      , fn = regexp == undefined ? undefined : regexp[MATCH];\n    return fn !== undefined ? fn.call(regexp, O) : new RegExp(regexp)[MATCH](String(O));\n  }, $match];\n});","// @@replace logic\nrequire('./_fix-re-wks')('replace', 2, function(defined, REPLACE, $replace){\n  // 21.1.3.14 String.prototype.replace(searchValue, replaceValue)\n  return [function replace(searchValue, replaceValue){\n    'use strict';\n    var O  = defined(this)\n      , fn = searchValue == undefined ? undefined : searchValue[REPLACE];\n    return fn !== undefined\n      ? fn.call(searchValue, O, replaceValue)\n      : $replace.call(String(O), searchValue, replaceValue);\n  }, $replace];\n});","// @@search logic\nrequire('./_fix-re-wks')('search', 1, function(defined, SEARCH, $search){\n  // 21.1.3.15 String.prototype.search(regexp)\n  return [function search(regexp){\n    'use strict';\n    var O  = defined(this)\n      , fn = regexp == undefined ? undefined : regexp[SEARCH];\n    return fn !== undefined ? fn.call(regexp, O) : new RegExp(regexp)[SEARCH](String(O));\n  }, $search];\n});","// @@split logic\nrequire('./_fix-re-wks')('split', 2, function(defined, SPLIT, $split){\n  'use strict';\n  var isRegExp   = require('./_is-regexp')\n    , _split     = $split\n    , $push      = [].push\n    , $SPLIT     = 'split'\n    , LENGTH     = 'length'\n    , LAST_INDEX = 'lastIndex';\n  if(\n    'abbc'[$SPLIT](/(b)*/)[1] == 'c' ||\n    'test'[$SPLIT](/(?:)/, -1)[LENGTH] != 4 ||\n    'ab'[$SPLIT](/(?:ab)*/)[LENGTH] != 2 ||\n    '.'[$SPLIT](/(.?)(.?)/)[LENGTH] != 4 ||\n    '.'[$SPLIT](/()()/)[LENGTH] > 1 ||\n    ''[$SPLIT](/.?/)[LENGTH]\n  ){\n    var NPCG = /()??/.exec('')[1] === undefined; // nonparticipating capturing group\n    // based on es5-shim implementation, need to rework it\n    $split = function(separator, limit){\n      var string = String(this);\n      if(separator === undefined && limit === 0)return [];\n      // If `separator` is not a regex, use native split\n      if(!isRegExp(separator))return _split.call(string, separator, limit);\n      var output = [];\n      var flags = (separator.ignoreCase ? 'i' : '') +\n                  (separator.multiline ? 'm' : '') +\n                  (separator.unicode ? 'u' : '') +\n                  (separator.sticky ? 'y' : '');\n      var lastLastIndex = 0;\n      var splitLimit = limit === undefined ? 4294967295 : limit >>> 0;\n      // Make `global` and avoid `lastIndex` issues by working with a copy\n      var separatorCopy = new RegExp(separator.source, flags + 'g');\n      var separator2, match, lastIndex, lastLength, i;\n      // Doesn't need flags gy, but they don't hurt\n      if(!NPCG)separator2 = new RegExp('^' + separatorCopy.source + '$(?!\\\\s)', flags);\n      while(match = separatorCopy.exec(string)){\n        // `separatorCopy.lastIndex` is not reliable cross-browser\n        lastIndex = match.index + match[0][LENGTH];\n        if(lastIndex > lastLastIndex){\n          output.push(string.slice(lastLastIndex, match.index));\n          // Fix browsers whose `exec` methods don't consistently return `undefined` for NPCG\n          if(!NPCG && match[LENGTH] > 1)match[0].replace(separator2, function(){\n            for(i = 1; i < arguments[LENGTH] - 2; i++)if(arguments[i] === undefined)match[i] = undefined;\n          });\n          if(match[LENGTH] > 1 && match.index < string[LENGTH])$push.apply(output, match.slice(1));\n          lastLength = match[0][LENGTH];\n          lastLastIndex = lastIndex;\n          if(output[LENGTH] >= splitLimit)break;\n        }\n        if(separatorCopy[LAST_INDEX] === match.index)separatorCopy[LAST_INDEX]++; // Avoid an infinite loop\n      }\n      if(lastLastIndex === string[LENGTH]){\n        if(lastLength || !separatorCopy.test(''))output.push('');\n      } else output.push(string.slice(lastLastIndex));\n      return output[LENGTH] > splitLimit ? output.slice(0, splitLimit) : output;\n    };\n  // Chakra, V8\n  } else if('0'[$SPLIT](undefined, 0)[LENGTH]){\n    $split = function(separator, limit){\n      return separator === undefined && limit === 0 ? [] : _split.call(this, separator, limit);\n    };\n  }\n  // 21.1.3.17 String.prototype.split(separator, limit)\n  return [function split(separator, limit){\n    var O  = defined(this)\n      , fn = separator == undefined ? undefined : separator[SPLIT];\n    return fn !== undefined ? fn.call(separator, O, limit) : $split.call(String(O), separator, limit);\n  }, $split];\n});","'use strict';\r\nrequire('./es6.regexp.flags');\r\nvar anObject    = require('./_an-object')\r\n  , $flags      = require('./_flags')\r\n  , DESCRIPTORS = require('./_descriptors')\r\n  , TO_STRING   = 'toString'\r\n  , $toString   = /./[TO_STRING];\r\n\r\nvar define = function(fn){\r\n  require('./_redefine')(RegExp.prototype, TO_STRING, fn, true);\r\n};\r\n\r\n// 21.2.5.14 RegExp.prototype.toString()\r\nif(require('./_fails')(function(){ return $toString.call({source: 'a', flags: 'b'}) != '/a/b'; })){\r\n  define(function toString(){\r\n    var R = anObject(this);\r\n    return '/'.concat(R.source, '/',\r\n      'flags' in R ? R.flags : !DESCRIPTORS && R instanceof RegExp ? $flags.call(R) : undefined);\r\n  });\r\n// FF44- RegExp#toString has a wrong name\r\n} else if($toString.name != TO_STRING){\r\n  define(function toString(){\r\n    return $toString.call(this);\r\n  });\r\n}","'use strict';\nvar strong = require('./_collection-strong');\n\n// 23.2 Set Objects\nmodule.exports = require('./_collection')('Set', function(get){\n  return function Set(){ return get(this, arguments.length > 0 ? arguments[0] : undefined); };\n}, {\n  // 23.2.3.1 Set.prototype.add(value)\n  add: function add(value){\n    return strong.def(this, value = value === 0 ? 0 : value, value);\n  }\n}, strong);","'use strict';\n// B.2.3.2 String.prototype.anchor(name)\nrequire('./_string-html')('anchor', function(createHTML){\n  return function anchor(name){\n    return createHTML(this, 'a', 'name', name);\n  }\n});","'use strict';\n// B.2.3.3 String.prototype.big()\nrequire('./_string-html')('big', function(createHTML){\n  return function big(){\n    return createHTML(this, 'big', '', '');\n  }\n});","'use strict';\n// B.2.3.4 String.prototype.blink()\nrequire('./_string-html')('blink', function(createHTML){\n  return function blink(){\n    return createHTML(this, 'blink', '', '');\n  }\n});","'use strict';\n// B.2.3.5 String.prototype.bold()\nrequire('./_string-html')('bold', function(createHTML){\n  return function bold(){\n    return createHTML(this, 'b', '', '');\n  }\n});","'use strict';\nvar $export = require('./_export')\n  , $at     = require('./_string-at')(false);\n$export($export.P, 'String', {\n  // 21.1.3.3 String.prototype.codePointAt(pos)\n  codePointAt: function codePointAt(pos){\n    return $at(this, pos);\n  }\n});","// 21.1.3.6 String.prototype.endsWith(searchString [, endPosition])\n'use strict';\nvar $export   = require('./_export')\n  , toLength  = require('./_to-length')\n  , context   = require('./_string-context')\n  , ENDS_WITH = 'endsWith'\n  , $endsWith = ''[ENDS_WITH];\n\n$export($export.P + $export.F * require('./_fails-is-regexp')(ENDS_WITH), 'String', {\n  endsWith: function endsWith(searchString /*, endPosition = @length */){\n    var that = context(this, searchString, ENDS_WITH)\n      , endPosition = arguments.length > 1 ? arguments[1] : undefined\n      , len    = toLength(that.length)\n      , end    = endPosition === undefined ? len : Math.min(toLength(endPosition), len)\n      , search = String(searchString);\n    return $endsWith\n      ? $endsWith.call(that, search, end)\n      : that.slice(end - search.length, end) === search;\n  }\n});","'use strict';\n// B.2.3.6 String.prototype.fixed()\nrequire('./_string-html')('fixed', function(createHTML){\n  return function fixed(){\n    return createHTML(this, 'tt', '', '');\n  }\n});","'use strict';\n// B.2.3.7 String.prototype.fontcolor(color)\nrequire('./_string-html')('fontcolor', function(createHTML){\n  return function fontcolor(color){\n    return createHTML(this, 'font', 'color', color);\n  }\n});","'use strict';\n// B.2.3.8 String.prototype.fontsize(size)\nrequire('./_string-html')('fontsize', function(createHTML){\n  return function fontsize(size){\n    return createHTML(this, 'font', 'size', size);\n  }\n});","var $export        = require('./_export')\n  , toIndex        = require('./_to-index')\n  , fromCharCode   = String.fromCharCode\n  , $fromCodePoint = String.fromCodePoint;\n\n// length should be 1, old FF problem\n$export($export.S + $export.F * (!!$fromCodePoint && $fromCodePoint.length != 1), 'String', {\n  // 21.1.2.2 String.fromCodePoint(...codePoints)\n  fromCodePoint: function fromCodePoint(x){ // eslint-disable-line no-unused-vars\n    var res  = []\n      , aLen = arguments.length\n      , i    = 0\n      , code;\n    while(aLen > i){\n      code = +arguments[i++];\n      if(toIndex(code, 0x10ffff) !== code)throw RangeError(code + ' is not a valid code point');\n      res.push(code < 0x10000\n        ? fromCharCode(code)\n        : fromCharCode(((code -= 0x10000) >> 10) + 0xd800, code % 0x400 + 0xdc00)\n      );\n    } return res.join('');\n  }\n});","// 21.1.3.7 String.prototype.includes(searchString, position = 0)\n'use strict';\nvar $export  = require('./_export')\n  , context  = require('./_string-context')\n  , INCLUDES = 'includes';\n\n$export($export.P + $export.F * require('./_fails-is-regexp')(INCLUDES), 'String', {\n  includes: function includes(searchString /*, position = 0 */){\n    return !!~context(this, searchString, INCLUDES)\n      .indexOf(searchString, arguments.length > 1 ? arguments[1] : undefined);\n  }\n});","'use strict';\n// B.2.3.9 String.prototype.italics()\nrequire('./_string-html')('italics', function(createHTML){\n  return function italics(){\n    return createHTML(this, 'i', '', '');\n  }\n});","'use strict';\nvar $at  = require('./_string-at')(true);\n\n// 21.1.3.27 String.prototype[@@iterator]()\nrequire('./_iter-define')(String, 'String', function(iterated){\n  this._t = String(iterated); // target\n  this._i = 0;                // next index\n// 21.1.5.2.1 %StringIteratorPrototype%.next()\n}, function(){\n  var O     = this._t\n    , index = this._i\n    , point;\n  if(index >= O.length)return {value: undefined, done: true};\n  point = $at(O, index);\n  this._i += point.length;\n  return {value: point, done: false};\n});","'use strict';\n// B.2.3.10 String.prototype.link(url)\nrequire('./_string-html')('link', function(createHTML){\n  return function link(url){\n    return createHTML(this, 'a', 'href', url);\n  }\n});","var $export   = require('./_export')\n  , toIObject = require('./_to-iobject')\n  , toLength  = require('./_to-length');\n\n$export($export.S, 'String', {\n  // 21.1.2.4 String.raw(callSite, ...substitutions)\n  raw: function raw(callSite){\n    var tpl  = toIObject(callSite.raw)\n      , len  = toLength(tpl.length)\n      , aLen = arguments.length\n      , res  = []\n      , i    = 0;\n    while(len > i){\n      res.push(String(tpl[i++]));\n      if(i < aLen)res.push(String(arguments[i]));\n    } return res.join('');\n  }\n});","var $export = require('./_export');\n\n$export($export.P, 'String', {\n  // 21.1.3.13 String.prototype.repeat(count)\n  repeat: require('./_string-repeat')\n});","'use strict';\n// B.2.3.11 String.prototype.small()\nrequire('./_string-html')('small', function(createHTML){\n  return function small(){\n    return createHTML(this, 'small', '', '');\n  }\n});","// 21.1.3.18 String.prototype.startsWith(searchString [, position ])\n'use strict';\nvar $export     = require('./_export')\n  , toLength    = require('./_to-length')\n  , context     = require('./_string-context')\n  , STARTS_WITH = 'startsWith'\n  , $startsWith = ''[STARTS_WITH];\n\n$export($export.P + $export.F * require('./_fails-is-regexp')(STARTS_WITH), 'String', {\n  startsWith: function startsWith(searchString /*, position = 0 */){\n    var that   = context(this, searchString, STARTS_WITH)\n      , index  = toLength(Math.min(arguments.length > 1 ? arguments[1] : undefined, that.length))\n      , search = String(searchString);\n    return $startsWith\n      ? $startsWith.call(that, search, index)\n      : that.slice(index, index + search.length) === search;\n  }\n});","'use strict';\n// B.2.3.12 String.prototype.strike()\nrequire('./_string-html')('strike', function(createHTML){\n  return function strike(){\n    return createHTML(this, 'strike', '', '');\n  }\n});","'use strict';\n// B.2.3.13 String.prototype.sub()\nrequire('./_string-html')('sub', function(createHTML){\n  return function sub(){\n    return createHTML(this, 'sub', '', '');\n  }\n});","'use strict';\n// B.2.3.14 String.prototype.sup()\nrequire('./_string-html')('sup', function(createHTML){\n  return function sup(){\n    return createHTML(this, 'sup', '', '');\n  }\n});","'use strict';\n// 21.1.3.25 String.prototype.trim()\nrequire('./_string-trim')('trim', function($trim){\n  return function trim(){\n    return $trim(this, 3);\n  };\n});","'use strict';\n// ECMAScript 6 symbols shim\nvar global         = require('./_global')\n  , has            = require('./_has')\n  , DESCRIPTORS    = require('./_descriptors')\n  , $export        = require('./_export')\n  , redefine       = require('./_redefine')\n  , META           = require('./_meta').KEY\n  , $fails         = require('./_fails')\n  , shared         = require('./_shared')\n  , setToStringTag = require('./_set-to-string-tag')\n  , uid            = require('./_uid')\n  , wks            = require('./_wks')\n  , wksExt         = require('./_wks-ext')\n  , wksDefine      = require('./_wks-define')\n  , keyOf          = require('./_keyof')\n  , enumKeys       = require('./_enum-keys')\n  , isArray        = require('./_is-array')\n  , anObject       = require('./_an-object')\n  , toIObject      = require('./_to-iobject')\n  , toPrimitive    = require('./_to-primitive')\n  , createDesc     = require('./_property-desc')\n  , _create        = require('./_object-create')\n  , gOPNExt        = require('./_object-gopn-ext')\n  , $GOPD          = require('./_object-gopd')\n  , $DP            = require('./_object-dp')\n  , $keys          = require('./_object-keys')\n  , gOPD           = $GOPD.f\n  , dP             = $DP.f\n  , gOPN           = gOPNExt.f\n  , $Symbol        = global.Symbol\n  , $JSON          = global.JSON\n  , _stringify     = $JSON && $JSON.stringify\n  , PROTOTYPE      = 'prototype'\n  , HIDDEN         = wks('_hidden')\n  , TO_PRIMITIVE   = wks('toPrimitive')\n  , isEnum         = {}.propertyIsEnumerable\n  , SymbolRegistry = shared('symbol-registry')\n  , AllSymbols     = shared('symbols')\n  , OPSymbols      = shared('op-symbols')\n  , ObjectProto    = Object[PROTOTYPE]\n  , USE_NATIVE     = typeof $Symbol == 'function'\n  , QObject        = global.QObject;\n// Don't use setters in Qt Script, https://github.com/zloirock/core-js/issues/173\nvar setter = !QObject || !QObject[PROTOTYPE] || !QObject[PROTOTYPE].findChild;\n\n// fallback for old Android, https://code.google.com/p/v8/issues/detail?id=687\nvar setSymbolDesc = DESCRIPTORS && $fails(function(){\n  return _create(dP({}, 'a', {\n    get: function(){ return dP(this, 'a', {value: 7}).a; }\n  })).a != 7;\n}) ? function(it, key, D){\n  var protoDesc = gOPD(ObjectProto, key);\n  if(protoDesc)delete ObjectProto[key];\n  dP(it, key, D);\n  if(protoDesc && it !== ObjectProto)dP(ObjectProto, key, protoDesc);\n} : dP;\n\nvar wrap = function(tag){\n  var sym = AllSymbols[tag] = _create($Symbol[PROTOTYPE]);\n  sym._k = tag;\n  return sym;\n};\n\nvar isSymbol = USE_NATIVE && typeof $Symbol.iterator == 'symbol' ? function(it){\n  return typeof it == 'symbol';\n} : function(it){\n  return it instanceof $Symbol;\n};\n\nvar $defineProperty = function defineProperty(it, key, D){\n  if(it === ObjectProto)$defineProperty(OPSymbols, key, D);\n  anObject(it);\n  key = toPrimitive(key, true);\n  anObject(D);\n  if(has(AllSymbols, key)){\n    if(!D.enumerable){\n      if(!has(it, HIDDEN))dP(it, HIDDEN, createDesc(1, {}));\n      it[HIDDEN][key] = true;\n    } else {\n      if(has(it, HIDDEN) && it[HIDDEN][key])it[HIDDEN][key] = false;\n      D = _create(D, {enumerable: createDesc(0, false)});\n    } return setSymbolDesc(it, key, D);\n  } return dP(it, key, D);\n};\nvar $defineProperties = function defineProperties(it, P){\n  anObject(it);\n  var keys = enumKeys(P = toIObject(P))\n    , i    = 0\n    , l = keys.length\n    , key;\n  while(l > i)$defineProperty(it, key = keys[i++], P[key]);\n  return it;\n};\nvar $create = function create(it, P){\n  return P === undefined ? _create(it) : $defineProperties(_create(it), P);\n};\nvar $propertyIsEnumerable = function propertyIsEnumerable(key){\n  var E = isEnum.call(this, key = toPrimitive(key, true));\n  if(this === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key))return false;\n  return E || !has(this, key) || !has(AllSymbols, key) || has(this, HIDDEN) && this[HIDDEN][key] ? E : true;\n};\nvar $getOwnPropertyDescriptor = function getOwnPropertyDescriptor(it, key){\n  it  = toIObject(it);\n  key = toPrimitive(key, true);\n  if(it === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key))return;\n  var D = gOPD(it, key);\n  if(D && has(AllSymbols, key) && !(has(it, HIDDEN) && it[HIDDEN][key]))D.enumerable = true;\n  return D;\n};\nvar $getOwnPropertyNames = function getOwnPropertyNames(it){\n  var names  = gOPN(toIObject(it))\n    , result = []\n    , i      = 0\n    , key;\n  while(names.length > i){\n    if(!has(AllSymbols, key = names[i++]) && key != HIDDEN && key != META)result.push(key);\n  } return result;\n};\nvar $getOwnPropertySymbols = function getOwnPropertySymbols(it){\n  var IS_OP  = it === ObjectProto\n    , names  = gOPN(IS_OP ? OPSymbols : toIObject(it))\n    , result = []\n    , i      = 0\n    , key;\n  while(names.length > i){\n    if(has(AllSymbols, key = names[i++]) && (IS_OP ? has(ObjectProto, key) : true))result.push(AllSymbols[key]);\n  } return result;\n};\n\n// 19.4.1.1 Symbol([description])\nif(!USE_NATIVE){\n  $Symbol = function Symbol(){\n    if(this instanceof $Symbol)throw TypeError('Symbol is not a constructor!');\n    var tag = uid(arguments.length > 0 ? arguments[0] : undefined);\n    var $set = function(value){\n      if(this === ObjectProto)$set.call(OPSymbols, value);\n      if(has(this, HIDDEN) && has(this[HIDDEN], tag))this[HIDDEN][tag] = false;\n      setSymbolDesc(this, tag, createDesc(1, value));\n    };\n    if(DESCRIPTORS && setter)setSymbolDesc(ObjectProto, tag, {configurable: true, set: $set});\n    return wrap(tag);\n  };\n  redefine($Symbol[PROTOTYPE], 'toString', function toString(){\n    return this._k;\n  });\n\n  $GOPD.f = $getOwnPropertyDescriptor;\n  $DP.f   = $defineProperty;\n  require('./_object-gopn').f = gOPNExt.f = $getOwnPropertyNames;\n  require('./_object-pie').f  = $propertyIsEnumerable;\n  require('./_object-gops').f = $getOwnPropertySymbols;\n\n  if(DESCRIPTORS && !require('./_library')){\n    redefine(ObjectProto, 'propertyIsEnumerable', $propertyIsEnumerable, true);\n  }\n\n  wksExt.f = function(name){\n    return wrap(wks(name));\n  }\n}\n\n$export($export.G + $export.W + $export.F * !USE_NATIVE, {Symbol: $Symbol});\n\nfor(var symbols = (\n  // 19.4.2.2, 19.4.2.3, 19.4.2.4, 19.4.2.6, 19.4.2.8, 19.4.2.9, 19.4.2.10, 19.4.2.11, 19.4.2.12, 19.4.2.13, 19.4.2.14\n  'hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables'\n).split(','), i = 0; symbols.length > i; )wks(symbols[i++]);\n\nfor(var symbols = $keys(wks.store), i = 0; symbols.length > i; )wksDefine(symbols[i++]);\n\n$export($export.S + $export.F * !USE_NATIVE, 'Symbol', {\n  // 19.4.2.1 Symbol.for(key)\n  'for': function(key){\n    return has(SymbolRegistry, key += '')\n      ? SymbolRegistry[key]\n      : SymbolRegistry[key] = $Symbol(key);\n  },\n  // 19.4.2.5 Symbol.keyFor(sym)\n  keyFor: function keyFor(key){\n    if(isSymbol(key))return keyOf(SymbolRegistry, key);\n    throw TypeError(key + ' is not a symbol!');\n  },\n  useSetter: function(){ setter = true; },\n  useSimple: function(){ setter = false; }\n});\n\n$export($export.S + $export.F * !USE_NATIVE, 'Object', {\n  // 19.1.2.2 Object.create(O [, Properties])\n  create: $create,\n  // 19.1.2.4 Object.defineProperty(O, P, Attributes)\n  defineProperty: $defineProperty,\n  // 19.1.2.3 Object.defineProperties(O, Properties)\n  defineProperties: $defineProperties,\n  // 19.1.2.6 Object.getOwnPropertyDescriptor(O, P)\n  getOwnPropertyDescriptor: $getOwnPropertyDescriptor,\n  // 19.1.2.7 Object.getOwnPropertyNames(O)\n  getOwnPropertyNames: $getOwnPropertyNames,\n  // 19.1.2.8 Object.getOwnPropertySymbols(O)\n  getOwnPropertySymbols: $getOwnPropertySymbols\n});\n\n// 24.3.2 JSON.stringify(value [, replacer [, space]])\n$JSON && $export($export.S + $export.F * (!USE_NATIVE || $fails(function(){\n  var S = $Symbol();\n  // MS Edge converts symbol values to JSON as {}\n  // WebKit converts symbol values to JSON as null\n  // V8 throws on boxed symbols\n  return _stringify([S]) != '[null]' || _stringify({a: S}) != '{}' || _stringify(Object(S)) != '{}';\n})), 'JSON', {\n  stringify: function stringify(it){\n    if(it === undefined || isSymbol(it))return; // IE8 returns string on undefined\n    var args = [it]\n      , i    = 1\n      , replacer, $replacer;\n    while(arguments.length > i)args.push(arguments[i++]);\n    replacer = args[1];\n    if(typeof replacer == 'function')$replacer = replacer;\n    if($replacer || !isArray(replacer))replacer = function(key, value){\n      if($replacer)value = $replacer.call(this, key, value);\n      if(!isSymbol(value))return value;\n    };\n    args[1] = replacer;\n    return _stringify.apply($JSON, args);\n  }\n});\n\n// 19.4.3.4 Symbol.prototype[@@toPrimitive](hint)\n$Symbol[PROTOTYPE][TO_PRIMITIVE] || require('./_hide')($Symbol[PROTOTYPE], TO_PRIMITIVE, $Symbol[PROTOTYPE].valueOf);\n// 19.4.3.5 Symbol.prototype[@@toStringTag]\nsetToStringTag($Symbol, 'Symbol');\n// 20.2.1.9 Math[@@toStringTag]\nsetToStringTag(Math, 'Math', true);\n// 24.3.3 JSON[@@toStringTag]\nsetToStringTag(global.JSON, 'JSON', true);","'use strict';\nvar $export      = require('./_export')\n  , $typed       = require('./_typed')\n  , buffer       = require('./_typed-buffer')\n  , anObject     = require('./_an-object')\n  , toIndex      = require('./_to-index')\n  , toLength     = require('./_to-length')\n  , isObject     = require('./_is-object')\n  , TYPED_ARRAY  = require('./_wks')('typed_array')\n  , ArrayBuffer  = require('./_global').ArrayBuffer\n  , speciesConstructor = require('./_species-constructor')\n  , $ArrayBuffer = buffer.ArrayBuffer\n  , $DataView    = buffer.DataView\n  , $isView      = $typed.ABV && ArrayBuffer.isView\n  , $slice       = $ArrayBuffer.prototype.slice\n  , VIEW         = $typed.VIEW\n  , ARRAY_BUFFER = 'ArrayBuffer';\n\n$export($export.G + $export.W + $export.F * (ArrayBuffer !== $ArrayBuffer), {ArrayBuffer: $ArrayBuffer});\n\n$export($export.S + $export.F * !$typed.CONSTR, ARRAY_BUFFER, {\n  // 24.1.3.1 ArrayBuffer.isView(arg)\n  isView: function isView(it){\n    return $isView && $isView(it) || isObject(it) && VIEW in it;\n  }\n});\n\n$export($export.P + $export.U + $export.F * require('./_fails')(function(){\n  return !new $ArrayBuffer(2).slice(1, undefined).byteLength;\n}), ARRAY_BUFFER, {\n  // 24.1.4.3 ArrayBuffer.prototype.slice(start, end)\n  slice: function slice(start, end){\n    if($slice !== undefined && end === undefined)return $slice.call(anObject(this), start); // FF fix\n    var len    = anObject(this).byteLength\n      , first  = toIndex(start, len)\n      , final  = toIndex(end === undefined ? len : end, len)\n      , result = new (speciesConstructor(this, $ArrayBuffer))(toLength(final - first))\n      , viewS  = new $DataView(this)\n      , viewT  = new $DataView(result)\n      , index  = 0;\n    while(first < final){\n      viewT.setUint8(index++, viewS.getUint8(first++));\n    } return result;\n  }\n});\n\nrequire('./_set-species')(ARRAY_BUFFER);","var $export = require('./_export');\n$export($export.G + $export.W + $export.F * !require('./_typed').ABV, {\n  DataView: require('./_typed-buffer').DataView\n});","require('./_typed-array')('Float32', 4, function(init){\n  return function Float32Array(data, byteOffset, length){\n    return init(this, data, byteOffset, length);\n  };\n});","require('./_typed-array')('Float64', 8, function(init){\n  return function Float64Array(data, byteOffset, length){\n    return init(this, data, byteOffset, length);\n  };\n});","require('./_typed-array')('Int16', 2, function(init){\n  return function Int16Array(data, byteOffset, length){\n    return init(this, data, byteOffset, length);\n  };\n});","require('./_typed-array')('Int32', 4, function(init){\n  return function Int32Array(data, byteOffset, length){\n    return init(this, data, byteOffset, length);\n  };\n});","require('./_typed-array')('Int8', 1, function(init){\n  return function Int8Array(data, byteOffset, length){\n    return init(this, data, byteOffset, length);\n  };\n});","require('./_typed-array')('Uint16', 2, function(init){\n  return function Uint16Array(data, byteOffset, length){\n    return init(this, data, byteOffset, length);\n  };\n});","require('./_typed-array')('Uint32', 4, function(init){\n  return function Uint32Array(data, byteOffset, length){\n    return init(this, data, byteOffset, length);\n  };\n});","require('./_typed-array')('Uint8', 1, function(init){\n  return function Uint8Array(data, byteOffset, length){\n    return init(this, data, byteOffset, length);\n  };\n});","require('./_typed-array')('Uint8', 1, function(init){\n  return function Uint8ClampedArray(data, byteOffset, length){\n    return init(this, data, byteOffset, length);\n  };\n}, true);","'use strict';\nvar each         = require('./_array-methods')(0)\n  , redefine     = require('./_redefine')\n  , meta         = require('./_meta')\n  , assign       = require('./_object-assign')\n  , weak         = require('./_collection-weak')\n  , isObject     = require('./_is-object')\n  , has          = require('./_has')\n  , getWeak      = meta.getWeak\n  , isExtensible = Object.isExtensible\n  , uncaughtFrozenStore = weak.ufstore\n  , tmp          = {}\n  , InternalMap;\n\nvar wrapper = function(get){\n  return function WeakMap(){\n    return get(this, arguments.length > 0 ? arguments[0] : undefined);\n  };\n};\n\nvar methods = {\n  // 23.3.3.3 WeakMap.prototype.get(key)\n  get: function get(key){\n    if(isObject(key)){\n      var data = getWeak(key);\n      if(data === true)return uncaughtFrozenStore(this).get(key);\n      return data ? data[this._i] : undefined;\n    }\n  },\n  // 23.3.3.5 WeakMap.prototype.set(key, value)\n  set: function set(key, value){\n    return weak.def(this, key, value);\n  }\n};\n\n// 23.3 WeakMap Objects\nvar $WeakMap = module.exports = require('./_collection')('WeakMap', wrapper, methods, weak, true, true);\n\n// IE11 WeakMap frozen keys fix\nif(new $WeakMap().set((Object.freeze || Object)(tmp), 7).get(tmp) != 7){\n  InternalMap = weak.getConstructor(wrapper);\n  assign(InternalMap.prototype, methods);\n  meta.NEED = true;\n  each(['delete', 'has', 'get', 'set'], function(key){\n    var proto  = $WeakMap.prototype\n      , method = proto[key];\n    redefine(proto, key, function(a, b){\n      // store frozen objects on internal weakmap shim\n      if(isObject(a) && !isExtensible(a)){\n        if(!this._f)this._f = new InternalMap;\n        var result = this._f[key](a, b);\n        return key == 'set' ? this : result;\n      // store all the rest on native weakmap\n      } return method.call(this, a, b);\n    });\n  });\n}","'use strict';\nvar weak = require('./_collection-weak');\n\n// 23.4 WeakSet Objects\nrequire('./_collection')('WeakSet', function(get){\n  return function WeakSet(){ return get(this, arguments.length > 0 ? arguments[0] : undefined); };\n}, {\n  // 23.4.3.1 WeakSet.prototype.add(value)\n  add: function add(value){\n    return weak.def(this, value, true);\n  }\n}, weak, false, true);","'use strict';\n// https://github.com/tc39/Array.prototype.includes\nvar $export   = require('./_export')\n  , $includes = require('./_array-includes')(true);\n\n$export($export.P, 'Array', {\n  includes: function includes(el /*, fromIndex = 0 */){\n    return $includes(this, el, arguments.length > 1 ? arguments[1] : undefined);\n  }\n});\n\nrequire('./_add-to-unscopables')('includes');","// https://github.com/rwaldron/tc39-notes/blob/master/es6/2014-09/sept-25.md#510-globalasap-for-enqueuing-a-microtask\r\nvar $export   = require('./_export')\r\n  , microtask = require('./_microtask')()\r\n  , process   = require('./_global').process\r\n  , isNode    = require('./_cof')(process) == 'process';\r\n\r\n$export($export.G, {\r\n  asap: function asap(fn){\r\n    var domain = isNode && process.domain;\r\n    microtask(domain ? domain.bind(fn) : fn);\r\n  }\r\n});","// https://github.com/ljharb/proposal-is-error\nvar $export = require('./_export')\n  , cof     = require('./_cof');\n\n$export($export.S, 'Error', {\n  isError: function isError(it){\n    return cof(it) === 'Error';\n  }\n});","// https://github.com/DavidBruant/Map-Set.prototype.toJSON\nvar $export  = require('./_export');\n\n$export($export.P + $export.R, 'Map', {toJSON: require('./_collection-to-json')('Map')});","// https://gist.github.com/BrendanEich/4294d5c212a6d2254703\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n  iaddh: function iaddh(x0, x1, y0, y1){\n    var $x0 = x0 >>> 0\n      , $x1 = x1 >>> 0\n      , $y0 = y0 >>> 0;\n    return $x1 + (y1 >>> 0) + (($x0 & $y0 | ($x0 | $y0) & ~($x0 + $y0 >>> 0)) >>> 31) | 0;\n  }\n});","// https://gist.github.com/BrendanEich/4294d5c212a6d2254703\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n  imulh: function imulh(u, v){\n    var UINT16 = 0xffff\n      , $u = +u\n      , $v = +v\n      , u0 = $u & UINT16\n      , v0 = $v & UINT16\n      , u1 = $u >> 16\n      , v1 = $v >> 16\n      , t  = (u1 * v0 >>> 0) + (u0 * v0 >>> 16);\n    return u1 * v1 + (t >> 16) + ((u0 * v1 >>> 0) + (t & UINT16) >> 16);\n  }\n});","// https://gist.github.com/BrendanEich/4294d5c212a6d2254703\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n  isubh: function isubh(x0, x1, y0, y1){\n    var $x0 = x0 >>> 0\n      , $x1 = x1 >>> 0\n      , $y0 = y0 >>> 0;\n    return $x1 - (y1 >>> 0) - ((~$x0 & $y0 | ~($x0 ^ $y0) & $x0 - $y0 >>> 0) >>> 31) | 0;\n  }\n});","// https://gist.github.com/BrendanEich/4294d5c212a6d2254703\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n  umulh: function umulh(u, v){\n    var UINT16 = 0xffff\n      , $u = +u\n      , $v = +v\n      , u0 = $u & UINT16\n      , v0 = $v & UINT16\n      , u1 = $u >>> 16\n      , v1 = $v >>> 16\n      , t  = (u1 * v0 >>> 0) + (u0 * v0 >>> 16);\n    return u1 * v1 + (t >>> 16) + ((u0 * v1 >>> 0) + (t & UINT16) >>> 16);\n  }\n});","'use strict';\r\nvar $export         = require('./_export')\r\n  , toObject        = require('./_to-object')\r\n  , aFunction       = require('./_a-function')\r\n  , $defineProperty = require('./_object-dp');\r\n\r\n// B.2.2.2 Object.prototype.__defineGetter__(P, getter)\r\nrequire('./_descriptors') && $export($export.P + require('./_object-forced-pam'), 'Object', {\r\n  __defineGetter__: function __defineGetter__(P, getter){\r\n    $defineProperty.f(toObject(this), P, {get: aFunction(getter), enumerable: true, configurable: true});\r\n  }\r\n});","'use strict';\r\nvar $export         = require('./_export')\r\n  , toObject        = require('./_to-object')\r\n  , aFunction       = require('./_a-function')\r\n  , $defineProperty = require('./_object-dp');\r\n\r\n// B.2.2.3 Object.prototype.__defineSetter__(P, setter)\r\nrequire('./_descriptors') && $export($export.P + require('./_object-forced-pam'), 'Object', {\r\n  __defineSetter__: function __defineSetter__(P, setter){\r\n    $defineProperty.f(toObject(this), P, {set: aFunction(setter), enumerable: true, configurable: true});\r\n  }\r\n});","// https://github.com/tc39/proposal-object-values-entries\nvar $export  = require('./_export')\n  , $entries = require('./_object-to-array')(true);\n\n$export($export.S, 'Object', {\n  entries: function entries(it){\n    return $entries(it);\n  }\n});","// https://github.com/tc39/proposal-object-getownpropertydescriptors\nvar $export        = require('./_export')\n  , ownKeys        = require('./_own-keys')\n  , toIObject      = require('./_to-iobject')\n  , gOPD           = require('./_object-gopd')\n  , createProperty = require('./_create-property');\n\n$export($export.S, 'Object', {\n  getOwnPropertyDescriptors: function getOwnPropertyDescriptors(object){\n    var O       = toIObject(object)\n      , getDesc = gOPD.f\n      , keys    = ownKeys(O)\n      , result  = {}\n      , i       = 0\n      , key, D;\n    while(keys.length > i)createProperty(result, key = keys[i++], getDesc(O, key));\n    return result;\n  }\n});","'use strict';\r\nvar $export                  = require('./_export')\r\n  , toObject                 = require('./_to-object')\r\n  , toPrimitive              = require('./_to-primitive')\r\n  , getPrototypeOf           = require('./_object-gpo')\r\n  , getOwnPropertyDescriptor = require('./_object-gopd').f;\r\n\r\n// B.2.2.4 Object.prototype.__lookupGetter__(P)\r\nrequire('./_descriptors') && $export($export.P + require('./_object-forced-pam'), 'Object', {\r\n  __lookupGetter__: function __lookupGetter__(P){\r\n    var O = toObject(this)\r\n      , K = toPrimitive(P, true)\r\n      , D;\r\n    do {\r\n      if(D = getOwnPropertyDescriptor(O, K))return D.get;\r\n    } while(O = getPrototypeOf(O));\r\n  }\r\n});","'use strict';\r\nvar $export                  = require('./_export')\r\n  , toObject                 = require('./_to-object')\r\n  , toPrimitive              = require('./_to-primitive')\r\n  , getPrototypeOf           = require('./_object-gpo')\r\n  , getOwnPropertyDescriptor = require('./_object-gopd').f;\r\n\r\n// B.2.2.5 Object.prototype.__lookupSetter__(P)\r\nrequire('./_descriptors') && $export($export.P + require('./_object-forced-pam'), 'Object', {\r\n  __lookupSetter__: function __lookupSetter__(P){\r\n    var O = toObject(this)\r\n      , K = toPrimitive(P, true)\r\n      , D;\r\n    do {\r\n      if(D = getOwnPropertyDescriptor(O, K))return D.set;\r\n    } while(O = getPrototypeOf(O));\r\n  }\r\n});","// https://github.com/tc39/proposal-object-values-entries\nvar $export = require('./_export')\n  , $values = require('./_object-to-array')(false);\n\n$export($export.S, 'Object', {\n  values: function values(it){\n    return $values(it);\n  }\n});","'use strict';\r\n// https://github.com/zenparsing/es-observable\r\nvar $export     = require('./_export')\r\n  , global      = require('./_global')\r\n  , core        = require('./_core')\r\n  , microtask   = require('./_microtask')()\r\n  , OBSERVABLE  = require('./_wks')('observable')\r\n  , aFunction   = require('./_a-function')\r\n  , anObject    = require('./_an-object')\r\n  , anInstance  = require('./_an-instance')\r\n  , redefineAll = require('./_redefine-all')\r\n  , hide        = require('./_hide')\r\n  , forOf       = require('./_for-of')\r\n  , RETURN      = forOf.RETURN;\r\n\r\nvar getMethod = function(fn){\r\n  return fn == null ? undefined : aFunction(fn);\r\n};\r\n\r\nvar cleanupSubscription = function(subscription){\r\n  var cleanup = subscription._c;\r\n  if(cleanup){\r\n    subscription._c = undefined;\r\n    cleanup();\r\n  }\r\n};\r\n\r\nvar subscriptionClosed = function(subscription){\r\n  return subscription._o === undefined;\r\n};\r\n\r\nvar closeSubscription = function(subscription){\r\n  if(!subscriptionClosed(subscription)){\r\n    subscription._o = undefined;\r\n    cleanupSubscription(subscription);\r\n  }\r\n};\r\n\r\nvar Subscription = function(observer, subscriber){\r\n  anObject(observer);\r\n  this._c = undefined;\r\n  this._o = observer;\r\n  observer = new SubscriptionObserver(this);\r\n  try {\r\n    var cleanup      = subscriber(observer)\r\n      , subscription = cleanup;\r\n    if(cleanup != null){\r\n      if(typeof cleanup.unsubscribe === 'function')cleanup = function(){ subscription.unsubscribe(); };\r\n      else aFunction(cleanup);\r\n      this._c = cleanup;\r\n    }\r\n  } catch(e){\r\n    observer.error(e);\r\n    return;\r\n  } if(subscriptionClosed(this))cleanupSubscription(this);\r\n};\r\n\r\nSubscription.prototype = redefineAll({}, {\r\n  unsubscribe: function unsubscribe(){ closeSubscription(this); }\r\n});\r\n\r\nvar SubscriptionObserver = function(subscription){\r\n  this._s = subscription;\r\n};\r\n\r\nSubscriptionObserver.prototype = redefineAll({}, {\r\n  next: function next(value){\r\n    var subscription = this._s;\r\n    if(!subscriptionClosed(subscription)){\r\n      var observer = subscription._o;\r\n      try {\r\n        var m = getMethod(observer.next);\r\n        if(m)return m.call(observer, value);\r\n      } catch(e){\r\n        try {\r\n          closeSubscription(subscription);\r\n        } finally {\r\n          throw e;\r\n        }\r\n      }\r\n    }\r\n  },\r\n  error: function error(value){\r\n    var subscription = this._s;\r\n    if(subscriptionClosed(subscription))throw value;\r\n    var observer = subscription._o;\r\n    subscription._o = undefined;\r\n    try {\r\n      var m = getMethod(observer.error);\r\n      if(!m)throw value;\r\n      value = m.call(observer, value);\r\n    } catch(e){\r\n      try {\r\n        cleanupSubscription(subscription);\r\n      } finally {\r\n        throw e;\r\n      }\r\n    } cleanupSubscription(subscription);\r\n    return value;\r\n  },\r\n  complete: function complete(value){\r\n    var subscription = this._s;\r\n    if(!subscriptionClosed(subscription)){\r\n      var observer = subscription._o;\r\n      subscription._o = undefined;\r\n      try {\r\n        var m = getMethod(observer.complete);\r\n        value = m ? m.call(observer, value) : undefined;\r\n      } catch(e){\r\n        try {\r\n          cleanupSubscription(subscription);\r\n        } finally {\r\n          throw e;\r\n        }\r\n      } cleanupSubscription(subscription);\r\n      return value;\r\n    }\r\n  }\r\n});\r\n\r\nvar $Observable = function Observable(subscriber){\r\n  anInstance(this, $Observable, 'Observable', '_f')._f = aFunction(subscriber);\r\n};\r\n\r\nredefineAll($Observable.prototype, {\r\n  subscribe: function subscribe(observer){\r\n    return new Subscription(observer, this._f);\r\n  },\r\n  forEach: function forEach(fn){\r\n    var that = this;\r\n    return new (core.Promise || global.Promise)(function(resolve, reject){\r\n      aFunction(fn);\r\n      var subscription = that.subscribe({\r\n        next : function(value){\r\n          try {\r\n            return fn(value);\r\n          } catch(e){\r\n            reject(e);\r\n            subscription.unsubscribe();\r\n          }\r\n        },\r\n        error: reject,\r\n        complete: resolve\r\n      });\r\n    });\r\n  }\r\n});\r\n\r\nredefineAll($Observable, {\r\n  from: function from(x){\r\n    var C = typeof this === 'function' ? this : $Observable;\r\n    var method = getMethod(anObject(x)[OBSERVABLE]);\r\n    if(method){\r\n      var observable = anObject(method.call(x));\r\n      return observable.constructor === C ? observable : new C(function(observer){\r\n        return observable.subscribe(observer);\r\n      });\r\n    }\r\n    return new C(function(observer){\r\n      var done = false;\r\n      microtask(function(){\r\n        if(!done){\r\n          try {\r\n            if(forOf(x, false, function(it){\r\n              observer.next(it);\r\n              if(done)return RETURN;\r\n            }) === RETURN)return;\r\n          } catch(e){\r\n            if(done)throw e;\r\n            observer.error(e);\r\n            return;\r\n          } observer.complete();\r\n        }\r\n      });\r\n      return function(){ done = true; };\r\n    });\r\n  },\r\n  of: function of(){\r\n    for(var i = 0, l = arguments.length, items = Array(l); i < l;)items[i] = arguments[i++];\r\n    return new (typeof this === 'function' ? this : $Observable)(function(observer){\r\n      var done = false;\r\n      microtask(function(){\r\n        if(!done){\r\n          for(var i = 0; i < items.length; ++i){\r\n            observer.next(items[i]);\r\n            if(done)return;\r\n          } observer.complete();\r\n        }\r\n      });\r\n      return function(){ done = true; };\r\n    });\r\n  }\r\n});\r\n\r\nhide($Observable.prototype, OBSERVABLE, function(){ return this; });\r\n\r\n$export($export.G, {Observable: $Observable});\r\n\r\nrequire('./_set-species')('Observable');","var metadata                  = require('./_metadata')\n  , anObject                  = require('./_an-object')\n  , toMetaKey                 = metadata.key\n  , ordinaryDefineOwnMetadata = metadata.set;\n\nmetadata.exp({defineMetadata: function defineMetadata(metadataKey, metadataValue, target, targetKey){\n  ordinaryDefineOwnMetadata(metadataKey, metadataValue, anObject(target), toMetaKey(targetKey));\n}});","var metadata               = require('./_metadata')\n  , anObject               = require('./_an-object')\n  , toMetaKey              = metadata.key\n  , getOrCreateMetadataMap = metadata.map\n  , store                  = metadata.store;\n\nmetadata.exp({deleteMetadata: function deleteMetadata(metadataKey, target /*, targetKey */){\n  var targetKey   = arguments.length < 3 ? undefined : toMetaKey(arguments[2])\n    , metadataMap = getOrCreateMetadataMap(anObject(target), targetKey, false);\n  if(metadataMap === undefined || !metadataMap['delete'](metadataKey))return false;\n  if(metadataMap.size)return true;\n  var targetMetadata = store.get(target);\n  targetMetadata['delete'](targetKey);\n  return !!targetMetadata.size || store['delete'](target);\n}});","var Set                     = require('./es6.set')\n  , from                    = require('./_array-from-iterable')\n  , metadata                = require('./_metadata')\n  , anObject                = require('./_an-object')\n  , getPrototypeOf          = require('./_object-gpo')\n  , ordinaryOwnMetadataKeys = metadata.keys\n  , toMetaKey               = metadata.key;\n\nvar ordinaryMetadataKeys = function(O, P){\n  var oKeys  = ordinaryOwnMetadataKeys(O, P)\n    , parent = getPrototypeOf(O);\n  if(parent === null)return oKeys;\n  var pKeys  = ordinaryMetadataKeys(parent, P);\n  return pKeys.length ? oKeys.length ? from(new Set(oKeys.concat(pKeys))) : pKeys : oKeys;\n};\n\nmetadata.exp({getMetadataKeys: function getMetadataKeys(target /*, targetKey */){\n  return ordinaryMetadataKeys(anObject(target), arguments.length < 2 ? undefined : toMetaKey(arguments[1]));\n}});","var metadata               = require('./_metadata')\n  , anObject               = require('./_an-object')\n  , getPrototypeOf         = require('./_object-gpo')\n  , ordinaryHasOwnMetadata = metadata.has\n  , ordinaryGetOwnMetadata = metadata.get\n  , toMetaKey              = metadata.key;\n\nvar ordinaryGetMetadata = function(MetadataKey, O, P){\n  var hasOwn = ordinaryHasOwnMetadata(MetadataKey, O, P);\n  if(hasOwn)return ordinaryGetOwnMetadata(MetadataKey, O, P);\n  var parent = getPrototypeOf(O);\n  return parent !== null ? ordinaryGetMetadata(MetadataKey, parent, P) : undefined;\n};\n\nmetadata.exp({getMetadata: function getMetadata(metadataKey, target /*, targetKey */){\n  return ordinaryGetMetadata(metadataKey, anObject(target), arguments.length < 3 ? undefined : toMetaKey(arguments[2]));\n}});","var metadata                = require('./_metadata')\n  , anObject                = require('./_an-object')\n  , ordinaryOwnMetadataKeys = metadata.keys\n  , toMetaKey               = metadata.key;\n\nmetadata.exp({getOwnMetadataKeys: function getOwnMetadataKeys(target /*, targetKey */){\n  return ordinaryOwnMetadataKeys(anObject(target), arguments.length < 2 ? undefined : toMetaKey(arguments[1]));\n}});","var metadata               = require('./_metadata')\n  , anObject               = require('./_an-object')\n  , ordinaryGetOwnMetadata = metadata.get\n  , toMetaKey              = metadata.key;\n\nmetadata.exp({getOwnMetadata: function getOwnMetadata(metadataKey, target /*, targetKey */){\n  return ordinaryGetOwnMetadata(metadataKey, anObject(target)\n    , arguments.length < 3 ? undefined : toMetaKey(arguments[2]));\n}});","var metadata               = require('./_metadata')\n  , anObject               = require('./_an-object')\n  , getPrototypeOf         = require('./_object-gpo')\n  , ordinaryHasOwnMetadata = metadata.has\n  , toMetaKey              = metadata.key;\n\nvar ordinaryHasMetadata = function(MetadataKey, O, P){\n  var hasOwn = ordinaryHasOwnMetadata(MetadataKey, O, P);\n  if(hasOwn)return true;\n  var parent = getPrototypeOf(O);\n  return parent !== null ? ordinaryHasMetadata(MetadataKey, parent, P) : false;\n};\n\nmetadata.exp({hasMetadata: function hasMetadata(metadataKey, target /*, targetKey */){\n  return ordinaryHasMetadata(metadataKey, anObject(target), arguments.length < 3 ? undefined : toMetaKey(arguments[2]));\n}});","var metadata               = require('./_metadata')\n  , anObject               = require('./_an-object')\n  , ordinaryHasOwnMetadata = metadata.has\n  , toMetaKey              = metadata.key;\n\nmetadata.exp({hasOwnMetadata: function hasOwnMetadata(metadataKey, target /*, targetKey */){\n  return ordinaryHasOwnMetadata(metadataKey, anObject(target)\n    , arguments.length < 3 ? undefined : toMetaKey(arguments[2]));\n}});","var metadata                  = require('./_metadata')\n  , anObject                  = require('./_an-object')\n  , aFunction                 = require('./_a-function')\n  , toMetaKey                 = metadata.key\n  , ordinaryDefineOwnMetadata = metadata.set;\n\nmetadata.exp({metadata: function metadata(metadataKey, metadataValue){\n  return function decorator(target, targetKey){\n    ordinaryDefineOwnMetadata(\n      metadataKey, metadataValue,\n      (targetKey !== undefined ? anObject : aFunction)(target),\n      toMetaKey(targetKey)\n    );\n  };\n}});","// https://github.com/DavidBruant/Map-Set.prototype.toJSON\nvar $export  = require('./_export');\n\n$export($export.P + $export.R, 'Set', {toJSON: require('./_collection-to-json')('Set')});","'use strict';\n// https://github.com/mathiasbynens/String.prototype.at\nvar $export = require('./_export')\n  , $at     = require('./_string-at')(true);\n\n$export($export.P, 'String', {\n  at: function at(pos){\n    return $at(this, pos);\n  }\n});","'use strict';\r\n// https://tc39.github.io/String.prototype.matchAll/\r\nvar $export     = require('./_export')\r\n  , defined     = require('./_defined')\r\n  , toLength    = require('./_to-length')\r\n  , isRegExp    = require('./_is-regexp')\r\n  , getFlags    = require('./_flags')\r\n  , RegExpProto = RegExp.prototype;\r\n\r\nvar $RegExpStringIterator = function(regexp, string){\r\n  this._r = regexp;\r\n  this._s = string;\r\n};\r\n\r\nrequire('./_iter-create')($RegExpStringIterator, 'RegExp String', function next(){\r\n  var match = this._r.exec(this._s);\r\n  return {value: match, done: match === null};\r\n});\r\n\r\n$export($export.P, 'String', {\r\n  matchAll: function matchAll(regexp){\r\n    defined(this);\r\n    if(!isRegExp(regexp))throw TypeError(regexp + ' is not a regexp!');\r\n    var S     = String(this)\r\n      , flags = 'flags' in RegExpProto ? String(regexp.flags) : getFlags.call(regexp)\r\n      , rx    = new RegExp(regexp.source, ~flags.indexOf('g') ? flags : 'g' + flags);\r\n    rx.lastIndex = toLength(regexp.lastIndex);\r\n    return new $RegExpStringIterator(rx, S);\r\n  }\r\n});","'use strict';\n// https://github.com/tc39/proposal-string-pad-start-end\nvar $export = require('./_export')\n  , $pad    = require('./_string-pad');\n\n$export($export.P, 'String', {\n  padEnd: function padEnd(maxLength /*, fillString = ' ' */){\n    return $pad(this, maxLength, arguments.length > 1 ? arguments[1] : undefined, false);\n  }\n});","'use strict';\n// https://github.com/tc39/proposal-string-pad-start-end\nvar $export = require('./_export')\n  , $pad    = require('./_string-pad');\n\n$export($export.P, 'String', {\n  padStart: function padStart(maxLength /*, fillString = ' ' */){\n    return $pad(this, maxLength, arguments.length > 1 ? arguments[1] : undefined, true);\n  }\n});","'use strict';\n// https://github.com/sebmarkbage/ecmascript-string-left-right-trim\nrequire('./_string-trim')('trimLeft', function($trim){\n  return function trimLeft(){\n    return $trim(this, 1);\n  };\n}, 'trimStart');","'use strict';\n// https://github.com/sebmarkbage/ecmascript-string-left-right-trim\nrequire('./_string-trim')('trimRight', function($trim){\n  return function trimRight(){\n    return $trim(this, 2);\n  };\n}, 'trimEnd');","require('./_wks-define')('asyncIterator');","require('./_wks-define')('observable');","// https://github.com/ljharb/proposal-global\nvar $export = require('./_export');\n\n$export($export.S, 'System', {global: require('./_global')});","var $iterators    = require('./es6.array.iterator')\n  , redefine      = require('./_redefine')\n  , global        = require('./_global')\n  , hide          = require('./_hide')\n  , Iterators     = require('./_iterators')\n  , wks           = require('./_wks')\n  , ITERATOR      = wks('iterator')\n  , TO_STRING_TAG = wks('toStringTag')\n  , ArrayValues   = Iterators.Array;\n\nfor(var collections = ['NodeList', 'DOMTokenList', 'MediaList', 'StyleSheetList', 'CSSRuleList'], i = 0; i < 5; i++){\n  var NAME       = collections[i]\n    , Collection = global[NAME]\n    , proto      = Collection && Collection.prototype\n    , key;\n  if(proto){\n    if(!proto[ITERATOR])hide(proto, ITERATOR, ArrayValues);\n    if(!proto[TO_STRING_TAG])hide(proto, TO_STRING_TAG, NAME);\n    Iterators[NAME] = ArrayValues;\n    for(key in $iterators)if(!proto[key])redefine(proto, key, $iterators[key], true);\n  }\n}","var $export = require('./_export')\n  , $task   = require('./_task');\n$export($export.G + $export.B, {\n  setImmediate:   $task.set,\n  clearImmediate: $task.clear\n});","// ie9- setTimeout & setInterval additional parameters fix\nvar global     = require('./_global')\n  , $export    = require('./_export')\n  , invoke     = require('./_invoke')\n  , partial    = require('./_partial')\n  , navigator  = global.navigator\n  , MSIE       = !!navigator && /MSIE .\\./.test(navigator.userAgent); // <- dirty ie9- check\nvar wrap = function(set){\n  return MSIE ? function(fn, time /*, ...args */){\n    return set(invoke(\n      partial,\n      [].slice.call(arguments, 2),\n      typeof fn == 'function' ? fn : Function(fn)\n    ), time);\n  } : set;\n};\n$export($export.G + $export.B + $export.F * MSIE, {\n  setTimeout:  wrap(global.setTimeout),\n  setInterval: wrap(global.setInterval)\n});","require('./modules/es6.symbol');\nrequire('./modules/es6.object.create');\nrequire('./modules/es6.object.define-property');\nrequire('./modules/es6.object.define-properties');\nrequire('./modules/es6.object.get-own-property-descriptor');\nrequire('./modules/es6.object.get-prototype-of');\nrequire('./modules/es6.object.keys');\nrequire('./modules/es6.object.get-own-property-names');\nrequire('./modules/es6.object.freeze');\nrequire('./modules/es6.object.seal');\nrequire('./modules/es6.object.prevent-extensions');\nrequire('./modules/es6.object.is-frozen');\nrequire('./modules/es6.object.is-sealed');\nrequire('./modules/es6.object.is-extensible');\nrequire('./modules/es6.object.assign');\nrequire('./modules/es6.object.is');\nrequire('./modules/es6.object.set-prototype-of');\nrequire('./modules/es6.object.to-string');\nrequire('./modules/es6.function.bind');\nrequire('./modules/es6.function.name');\nrequire('./modules/es6.function.has-instance');\nrequire('./modules/es6.parse-int');\nrequire('./modules/es6.parse-float');\nrequire('./modules/es6.number.constructor');\nrequire('./modules/es6.number.to-fixed');\nrequire('./modules/es6.number.to-precision');\nrequire('./modules/es6.number.epsilon');\nrequire('./modules/es6.number.is-finite');\nrequire('./modules/es6.number.is-integer');\nrequire('./modules/es6.number.is-nan');\nrequire('./modules/es6.number.is-safe-integer');\nrequire('./modules/es6.number.max-safe-integer');\nrequire('./modules/es6.number.min-safe-integer');\nrequire('./modules/es6.number.parse-float');\nrequire('./modules/es6.number.parse-int');\nrequire('./modules/es6.math.acosh');\nrequire('./modules/es6.math.asinh');\nrequire('./modules/es6.math.atanh');\nrequire('./modules/es6.math.cbrt');\nrequire('./modules/es6.math.clz32');\nrequire('./modules/es6.math.cosh');\nrequire('./modules/es6.math.expm1');\nrequire('./modules/es6.math.fround');\nrequire('./modules/es6.math.hypot');\nrequire('./modules/es6.math.imul');\nrequire('./modules/es6.math.log10');\nrequire('./modules/es6.math.log1p');\nrequire('./modules/es6.math.log2');\nrequire('./modules/es6.math.sign');\nrequire('./modules/es6.math.sinh');\nrequire('./modules/es6.math.tanh');\nrequire('./modules/es6.math.trunc');\nrequire('./modules/es6.string.from-code-point');\nrequire('./modules/es6.string.raw');\nrequire('./modules/es6.string.trim');\nrequire('./modules/es6.string.iterator');\nrequire('./modules/es6.string.code-point-at');\nrequire('./modules/es6.string.ends-with');\nrequire('./modules/es6.string.includes');\nrequire('./modules/es6.string.repeat');\nrequire('./modules/es6.string.starts-with');\nrequire('./modules/es6.string.anchor');\nrequire('./modules/es6.string.big');\nrequire('./modules/es6.string.blink');\nrequire('./modules/es6.string.bold');\nrequire('./modules/es6.string.fixed');\nrequire('./modules/es6.string.fontcolor');\nrequire('./modules/es6.string.fontsize');\nrequire('./modules/es6.string.italics');\nrequire('./modules/es6.string.link');\nrequire('./modules/es6.string.small');\nrequire('./modules/es6.string.strike');\nrequire('./modules/es6.string.sub');\nrequire('./modules/es6.string.sup');\nrequire('./modules/es6.date.now');\nrequire('./modules/es6.date.to-json');\nrequire('./modules/es6.date.to-iso-string');\nrequire('./modules/es6.date.to-string');\nrequire('./modules/es6.date.to-primitive');\nrequire('./modules/es6.array.is-array');\nrequire('./modules/es6.array.from');\nrequire('./modules/es6.array.of');\nrequire('./modules/es6.array.join');\nrequire('./modules/es6.array.slice');\nrequire('./modules/es6.array.sort');\nrequire('./modules/es6.array.for-each');\nrequire('./modules/es6.array.map');\nrequire('./modules/es6.array.filter');\nrequire('./modules/es6.array.some');\nrequire('./modules/es6.array.every');\nrequire('./modules/es6.array.reduce');\nrequire('./modules/es6.array.reduce-right');\nrequire('./modules/es6.array.index-of');\nrequire('./modules/es6.array.last-index-of');\nrequire('./modules/es6.array.copy-within');\nrequire('./modules/es6.array.fill');\nrequire('./modules/es6.array.find');\nrequire('./modules/es6.array.find-index');\nrequire('./modules/es6.array.species');\nrequire('./modules/es6.array.iterator');\nrequire('./modules/es6.regexp.constructor');\nrequire('./modules/es6.regexp.to-string');\nrequire('./modules/es6.regexp.flags');\nrequire('./modules/es6.regexp.match');\nrequire('./modules/es6.regexp.replace');\nrequire('./modules/es6.regexp.search');\nrequire('./modules/es6.regexp.split');\nrequire('./modules/es6.promise');\nrequire('./modules/es6.map');\nrequire('./modules/es6.set');\nrequire('./modules/es6.weak-map');\nrequire('./modules/es6.weak-set');\nrequire('./modules/es6.typed.array-buffer');\nrequire('./modules/es6.typed.data-view');\nrequire('./modules/es6.typed.int8-array');\nrequire('./modules/es6.typed.uint8-array');\nrequire('./modules/es6.typed.uint8-clamped-array');\nrequire('./modules/es6.typed.int16-array');\nrequire('./modules/es6.typed.uint16-array');\nrequire('./modules/es6.typed.int32-array');\nrequire('./modules/es6.typed.uint32-array');\nrequire('./modules/es6.typed.float32-array');\nrequire('./modules/es6.typed.float64-array');\nrequire('./modules/es6.reflect.apply');\nrequire('./modules/es6.reflect.construct');\nrequire('./modules/es6.reflect.define-property');\nrequire('./modules/es6.reflect.delete-property');\nrequire('./modules/es6.reflect.enumerate');\nrequire('./modules/es6.reflect.get');\nrequire('./modules/es6.reflect.get-own-property-descriptor');\nrequire('./modules/es6.reflect.get-prototype-of');\nrequire('./modules/es6.reflect.has');\nrequire('./modules/es6.reflect.is-extensible');\nrequire('./modules/es6.reflect.own-keys');\nrequire('./modules/es6.reflect.prevent-extensions');\nrequire('./modules/es6.reflect.set');\nrequire('./modules/es6.reflect.set-prototype-of');\nrequire('./modules/es7.array.includes');\nrequire('./modules/es7.string.at');\nrequire('./modules/es7.string.pad-start');\nrequire('./modules/es7.string.pad-end');\nrequire('./modules/es7.string.trim-left');\nrequire('./modules/es7.string.trim-right');\nrequire('./modules/es7.string.match-all');\nrequire('./modules/es7.symbol.async-iterator');\nrequire('./modules/es7.symbol.observable');\nrequire('./modules/es7.object.get-own-property-descriptors');\nrequire('./modules/es7.object.values');\nrequire('./modules/es7.object.entries');\nrequire('./modules/es7.object.define-getter');\nrequire('./modules/es7.object.define-setter');\nrequire('./modules/es7.object.lookup-getter');\nrequire('./modules/es7.object.lookup-setter');\nrequire('./modules/es7.map.to-json');\nrequire('./modules/es7.set.to-json');\nrequire('./modules/es7.system.global');\nrequire('./modules/es7.error.is-error');\nrequire('./modules/es7.math.iaddh');\nrequire('./modules/es7.math.isubh');\nrequire('./modules/es7.math.imulh');\nrequire('./modules/es7.math.umulh');\nrequire('./modules/es7.reflect.define-metadata');\nrequire('./modules/es7.reflect.delete-metadata');\nrequire('./modules/es7.reflect.get-metadata');\nrequire('./modules/es7.reflect.get-metadata-keys');\nrequire('./modules/es7.reflect.get-own-metadata');\nrequire('./modules/es7.reflect.get-own-metadata-keys');\nrequire('./modules/es7.reflect.has-metadata');\nrequire('./modules/es7.reflect.has-own-metadata');\nrequire('./modules/es7.reflect.metadata');\nrequire('./modules/es7.asap');\nrequire('./modules/es7.observable');\nrequire('./modules/web.timers');\nrequire('./modules/web.immediate');\nrequire('./modules/web.dom.iterable');\nmodule.exports = require('./modules/_core');","/*!\n * The buffer module from node.js, for the browser.\n *\n * @author   Feross Aboukhadijeh <feross@feross.org> <http://feross.org>\n * @license  MIT\n */\n/* eslint-disable no-proto */\n\n'use strict'\n\nvar base64 = require('base64-js')\nvar ieee754 = require('ieee754')\nvar isArray = require('isarray')\n\nexports.Buffer = Buffer\nexports.SlowBuffer = SlowBuffer\nexports.INSPECT_MAX_BYTES = 50\n\n/**\n * If `Buffer.TYPED_ARRAY_SUPPORT`:\n *   === true    Use Uint8Array implementation (fastest)\n *   === false   Use Object implementation (most compatible, even IE6)\n *\n * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,\n * Opera 11.6+, iOS 4.2+.\n *\n * Due to various browser bugs, sometimes the Object implementation will be used even\n * when the browser supports typed arrays.\n *\n * Note:\n *\n *   - Firefox 4-29 lacks support for adding new properties to `Uint8Array` instances,\n *     See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438.\n *\n *   - Chrome 9-10 is missing the `TypedArray.prototype.subarray` function.\n *\n *   - IE10 has a broken `TypedArray.prototype.subarray` function which returns arrays of\n *     incorrect length in some situations.\n\n * We detect these buggy browsers and set `Buffer.TYPED_ARRAY_SUPPORT` to `false` so they\n * get the Object implementation, which is slower but behaves correctly.\n */\nBuffer.TYPED_ARRAY_SUPPORT = global.TYPED_ARRAY_SUPPORT !== undefined\n  ? global.TYPED_ARRAY_SUPPORT\n  : typedArraySupport()\n\n/*\n * Export kMaxLength after typed array support is determined.\n */\nexports.kMaxLength = kMaxLength()\n\nfunction typedArraySupport () {\n  try {\n    var arr = new Uint8Array(1)\n    arr.foo = function () { return 42 }\n    return arr.foo() === 42 && // typed array instances can be augmented\n        typeof arr.subarray === 'function' && // chrome 9-10 lack `subarray`\n        arr.subarray(1, 1).byteLength === 0 // ie10 has broken `subarray`\n  } catch (e) {\n    return false\n  }\n}\n\nfunction kMaxLength () {\n  return Buffer.TYPED_ARRAY_SUPPORT\n    ? 0x7fffffff\n    : 0x3fffffff\n}\n\nfunction createBuffer (that, length) {\n  if (kMaxLength() < length) {\n    throw new RangeError('Invalid typed array length')\n  }\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    // Return an augmented `Uint8Array` instance, for best performance\n    that = new Uint8Array(length)\n    that.__proto__ = Buffer.prototype\n  } else {\n    // Fallback: Return an object instance of the Buffer class\n    if (that === null) {\n      that = new Buffer(length)\n    }\n    that.length = length\n  }\n\n  return that\n}\n\n/**\n * The Buffer constructor returns instances of `Uint8Array` that have their\n * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of\n * `Uint8Array`, so the returned instances will have all the node `Buffer` methods\n * and the `Uint8Array` methods. Square bracket notation works as expected -- it\n * returns a single octet.\n *\n * The `Uint8Array` prototype remains unmodified.\n */\n\nfunction Buffer (arg, encodingOrOffset, length) {\n  if (!Buffer.TYPED_ARRAY_SUPPORT && !(this instanceof Buffer)) {\n    return new Buffer(arg, encodingOrOffset, length)\n  }\n\n  // Common case.\n  if (typeof arg === 'number') {\n    if (typeof encodingOrOffset === 'string') {\n      throw new Error(\n        'If encoding is specified then the first argument must be a string'\n      )\n    }\n    return allocUnsafe(this, arg)\n  }\n  return from(this, arg, encodingOrOffset, length)\n}\n\nBuffer.poolSize = 8192 // not used by this implementation\n\n// TODO: Legacy, not needed anymore. Remove in next major version.\nBuffer._augment = function (arr) {\n  arr.__proto__ = Buffer.prototype\n  return arr\n}\n\nfunction from (that, value, encodingOrOffset, length) {\n  if (typeof value === 'number') {\n    throw new TypeError('\"value\" argument must not be a number')\n  }\n\n  if (typeof ArrayBuffer !== 'undefined' && value instanceof ArrayBuffer) {\n    return fromArrayBuffer(that, value, encodingOrOffset, length)\n  }\n\n  if (typeof value === 'string') {\n    return fromString(that, value, encodingOrOffset)\n  }\n\n  return fromObject(that, value)\n}\n\n/**\n * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError\n * if value is a number.\n * Buffer.from(str[, encoding])\n * Buffer.from(array)\n * Buffer.from(buffer)\n * Buffer.from(arrayBuffer[, byteOffset[, length]])\n **/\nBuffer.from = function (value, encodingOrOffset, length) {\n  return from(null, value, encodingOrOffset, length)\n}\n\nif (Buffer.TYPED_ARRAY_SUPPORT) {\n  Buffer.prototype.__proto__ = Uint8Array.prototype\n  Buffer.__proto__ = Uint8Array\n  if (typeof Symbol !== 'undefined' && Symbol.species &&\n      Buffer[Symbol.species] === Buffer) {\n    // Fix subarray() in ES2016. See: https://github.com/feross/buffer/pull/97\n    Object.defineProperty(Buffer, Symbol.species, {\n      value: null,\n      configurable: true\n    })\n  }\n}\n\nfunction assertSize (size) {\n  if (typeof size !== 'number') {\n    throw new TypeError('\"size\" argument must be a number')\n  }\n}\n\nfunction alloc (that, size, fill, encoding) {\n  assertSize(size)\n  if (size <= 0) {\n    return createBuffer(that, size)\n  }\n  if (fill !== undefined) {\n    // Only pay attention to encoding if it's a string. This\n    // prevents accidentally sending in a number that would\n    // be interpretted as a start offset.\n    return typeof encoding === 'string'\n      ? createBuffer(that, size).fill(fill, encoding)\n      : createBuffer(that, size).fill(fill)\n  }\n  return createBuffer(that, size)\n}\n\n/**\n * Creates a new filled Buffer instance.\n * alloc(size[, fill[, encoding]])\n **/\nBuffer.alloc = function (size, fill, encoding) {\n  return alloc(null, size, fill, encoding)\n}\n\nfunction allocUnsafe (that, size) {\n  assertSize(size)\n  that = createBuffer(that, size < 0 ? 0 : checked(size) | 0)\n  if (!Buffer.TYPED_ARRAY_SUPPORT) {\n    for (var i = 0; i < size; i++) {\n      that[i] = 0\n    }\n  }\n  return that\n}\n\n/**\n * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.\n * */\nBuffer.allocUnsafe = function (size) {\n  return allocUnsafe(null, size)\n}\n/**\n * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.\n */\nBuffer.allocUnsafeSlow = function (size) {\n  return allocUnsafe(null, size)\n}\n\nfunction fromString (that, string, encoding) {\n  if (typeof encoding !== 'string' || encoding === '') {\n    encoding = 'utf8'\n  }\n\n  if (!Buffer.isEncoding(encoding)) {\n    throw new TypeError('\"encoding\" must be a valid string encoding')\n  }\n\n  var length = byteLength(string, encoding) | 0\n  that = createBuffer(that, length)\n\n  that.write(string, encoding)\n  return that\n}\n\nfunction fromArrayLike (that, array) {\n  var length = checked(array.length) | 0\n  that = createBuffer(that, length)\n  for (var i = 0; i < length; i += 1) {\n    that[i] = array[i] & 255\n  }\n  return that\n}\n\nfunction fromArrayBuffer (that, array, byteOffset, length) {\n  array.byteLength // this throws if `array` is not a valid ArrayBuffer\n\n  if (byteOffset < 0 || array.byteLength < byteOffset) {\n    throw new RangeError('\\'offset\\' is out of bounds')\n  }\n\n  if (array.byteLength < byteOffset + (length || 0)) {\n    throw new RangeError('\\'length\\' is out of bounds')\n  }\n\n  if (length === undefined) {\n    array = new Uint8Array(array, byteOffset)\n  } else {\n    array = new Uint8Array(array, byteOffset, length)\n  }\n\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    // Return an augmented `Uint8Array` instance, for best performance\n    that = array\n    that.__proto__ = Buffer.prototype\n  } else {\n    // Fallback: Return an object instance of the Buffer class\n    that = fromArrayLike(that, array)\n  }\n  return that\n}\n\nfunction fromObject (that, obj) {\n  if (Buffer.isBuffer(obj)) {\n    var len = checked(obj.length) | 0\n    that = createBuffer(that, len)\n\n    if (that.length === 0) {\n      return that\n    }\n\n    obj.copy(that, 0, 0, len)\n    return that\n  }\n\n  if (obj) {\n    if ((typeof ArrayBuffer !== 'undefined' &&\n        obj.buffer instanceof ArrayBuffer) || 'length' in obj) {\n      if (typeof obj.length !== 'number' || isnan(obj.length)) {\n        return createBuffer(that, 0)\n      }\n      return fromArrayLike(that, obj)\n    }\n\n    if (obj.type === 'Buffer' && isArray(obj.data)) {\n      return fromArrayLike(that, obj.data)\n    }\n  }\n\n  throw new TypeError('First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.')\n}\n\nfunction checked (length) {\n  // Note: cannot use `length < kMaxLength` here because that fails when\n  // length is NaN (which is otherwise coerced to zero.)\n  if (length >= kMaxLength()) {\n    throw new RangeError('Attempt to allocate Buffer larger than maximum ' +\n                         'size: 0x' + kMaxLength().toString(16) + ' bytes')\n  }\n  return length | 0\n}\n\nfunction SlowBuffer (length) {\n  if (+length != length) { // eslint-disable-line eqeqeq\n    length = 0\n  }\n  return Buffer.alloc(+length)\n}\n\nBuffer.isBuffer = function isBuffer (b) {\n  return !!(b != null && b._isBuffer)\n}\n\nBuffer.compare = function compare (a, b) {\n  if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {\n    throw new TypeError('Arguments must be Buffers')\n  }\n\n  if (a === b) return 0\n\n  var x = a.length\n  var y = b.length\n\n  for (var i = 0, len = Math.min(x, y); i < len; ++i) {\n    if (a[i] !== b[i]) {\n      x = a[i]\n      y = b[i]\n      break\n    }\n  }\n\n  if (x < y) return -1\n  if (y < x) return 1\n  return 0\n}\n\nBuffer.isEncoding = function isEncoding (encoding) {\n  switch (String(encoding).toLowerCase()) {\n    case 'hex':\n    case 'utf8':\n    case 'utf-8':\n    case 'ascii':\n    case 'binary':\n    case 'base64':\n    case 'raw':\n    case 'ucs2':\n    case 'ucs-2':\n    case 'utf16le':\n    case 'utf-16le':\n      return true\n    default:\n      return false\n  }\n}\n\nBuffer.concat = function concat (list, length) {\n  if (!isArray(list)) {\n    throw new TypeError('\"list\" argument must be an Array of Buffers')\n  }\n\n  if (list.length === 0) {\n    return Buffer.alloc(0)\n  }\n\n  var i\n  if (length === undefined) {\n    length = 0\n    for (i = 0; i < list.length; i++) {\n      length += list[i].length\n    }\n  }\n\n  var buffer = Buffer.allocUnsafe(length)\n  var pos = 0\n  for (i = 0; i < list.length; i++) {\n    var buf = list[i]\n    if (!Buffer.isBuffer(buf)) {\n      throw new TypeError('\"list\" argument must be an Array of Buffers')\n    }\n    buf.copy(buffer, pos)\n    pos += buf.length\n  }\n  return buffer\n}\n\nfunction byteLength (string, encoding) {\n  if (Buffer.isBuffer(string)) {\n    return string.length\n  }\n  if (typeof ArrayBuffer !== 'undefined' && typeof ArrayBuffer.isView === 'function' &&\n      (ArrayBuffer.isView(string) || string instanceof ArrayBuffer)) {\n    return string.byteLength\n  }\n  if (typeof string !== 'string') {\n    string = '' + string\n  }\n\n  var len = string.length\n  if (len === 0) return 0\n\n  // Use a for loop to avoid recursion\n  var loweredCase = false\n  for (;;) {\n    switch (encoding) {\n      case 'ascii':\n      case 'binary':\n      // Deprecated\n      case 'raw':\n      case 'raws':\n        return len\n      case 'utf8':\n      case 'utf-8':\n      case undefined:\n        return utf8ToBytes(string).length\n      case 'ucs2':\n      case 'ucs-2':\n      case 'utf16le':\n      case 'utf-16le':\n        return len * 2\n      case 'hex':\n        return len >>> 1\n      case 'base64':\n        return base64ToBytes(string).length\n      default:\n        if (loweredCase) return utf8ToBytes(string).length // assume utf8\n        encoding = ('' + encoding).toLowerCase()\n        loweredCase = true\n    }\n  }\n}\nBuffer.byteLength = byteLength\n\nfunction slowToString (encoding, start, end) {\n  var loweredCase = false\n\n  // No need to verify that \"this.length <= MAX_UINT32\" since it's a read-only\n  // property of a typed array.\n\n  // This behaves neither like String nor Uint8Array in that we set start/end\n  // to their upper/lower bounds if the value passed is out of range.\n  // undefined is handled specially as per ECMA-262 6th Edition,\n  // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.\n  if (start === undefined || start < 0) {\n    start = 0\n  }\n  // Return early if start > this.length. Done here to prevent potential uint32\n  // coercion fail below.\n  if (start > this.length) {\n    return ''\n  }\n\n  if (end === undefined || end > this.length) {\n    end = this.length\n  }\n\n  if (end <= 0) {\n    return ''\n  }\n\n  // Force coersion to uint32. This will also coerce falsey/NaN values to 0.\n  end >>>= 0\n  start >>>= 0\n\n  if (end <= start) {\n    return ''\n  }\n\n  if (!encoding) encoding = 'utf8'\n\n  while (true) {\n    switch (encoding) {\n      case 'hex':\n        return hexSlice(this, start, end)\n\n      case 'utf8':\n      case 'utf-8':\n        return utf8Slice(this, start, end)\n\n      case 'ascii':\n        return asciiSlice(this, start, end)\n\n      case 'binary':\n        return binarySlice(this, start, end)\n\n      case 'base64':\n        return base64Slice(this, start, end)\n\n      case 'ucs2':\n      case 'ucs-2':\n      case 'utf16le':\n      case 'utf-16le':\n        return utf16leSlice(this, start, end)\n\n      default:\n        if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n        encoding = (encoding + '').toLowerCase()\n        loweredCase = true\n    }\n  }\n}\n\n// The property is used by `Buffer.isBuffer` and `is-buffer` (in Safari 5-7) to detect\n// Buffer instances.\nBuffer.prototype._isBuffer = true\n\nfunction swap (b, n, m) {\n  var i = b[n]\n  b[n] = b[m]\n  b[m] = i\n}\n\nBuffer.prototype.swap16 = function swap16 () {\n  var len = this.length\n  if (len % 2 !== 0) {\n    throw new RangeError('Buffer size must be a multiple of 16-bits')\n  }\n  for (var i = 0; i < len; i += 2) {\n    swap(this, i, i + 1)\n  }\n  return this\n}\n\nBuffer.prototype.swap32 = function swap32 () {\n  var len = this.length\n  if (len % 4 !== 0) {\n    throw new RangeError('Buffer size must be a multiple of 32-bits')\n  }\n  for (var i = 0; i < len; i += 4) {\n    swap(this, i, i + 3)\n    swap(this, i + 1, i + 2)\n  }\n  return this\n}\n\nBuffer.prototype.toString = function toString () {\n  var length = this.length | 0\n  if (length === 0) return ''\n  if (arguments.length === 0) return utf8Slice(this, 0, length)\n  return slowToString.apply(this, arguments)\n}\n\nBuffer.prototype.equals = function equals (b) {\n  if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')\n  if (this === b) return true\n  return Buffer.compare(this, b) === 0\n}\n\nBuffer.prototype.inspect = function inspect () {\n  var str = ''\n  var max = exports.INSPECT_MAX_BYTES\n  if (this.length > 0) {\n    str = this.toString('hex', 0, max).match(/.{2}/g).join(' ')\n    if (this.length > max) str += ' ... '\n  }\n  return '<Buffer ' + str + '>'\n}\n\nBuffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {\n  if (!Buffer.isBuffer(target)) {\n    throw new TypeError('Argument must be a Buffer')\n  }\n\n  if (start === undefined) {\n    start = 0\n  }\n  if (end === undefined) {\n    end = target ? target.length : 0\n  }\n  if (thisStart === undefined) {\n    thisStart = 0\n  }\n  if (thisEnd === undefined) {\n    thisEnd = this.length\n  }\n\n  if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {\n    throw new RangeError('out of range index')\n  }\n\n  if (thisStart >= thisEnd && start >= end) {\n    return 0\n  }\n  if (thisStart >= thisEnd) {\n    return -1\n  }\n  if (start >= end) {\n    return 1\n  }\n\n  start >>>= 0\n  end >>>= 0\n  thisStart >>>= 0\n  thisEnd >>>= 0\n\n  if (this === target) return 0\n\n  var x = thisEnd - thisStart\n  var y = end - start\n  var len = Math.min(x, y)\n\n  var thisCopy = this.slice(thisStart, thisEnd)\n  var targetCopy = target.slice(start, end)\n\n  for (var i = 0; i < len; ++i) {\n    if (thisCopy[i] !== targetCopy[i]) {\n      x = thisCopy[i]\n      y = targetCopy[i]\n      break\n    }\n  }\n\n  if (x < y) return -1\n  if (y < x) return 1\n  return 0\n}\n\nfunction arrayIndexOf (arr, val, byteOffset, encoding) {\n  var indexSize = 1\n  var arrLength = arr.length\n  var valLength = val.length\n\n  if (encoding !== undefined) {\n    encoding = String(encoding).toLowerCase()\n    if (encoding === 'ucs2' || encoding === 'ucs-2' ||\n        encoding === 'utf16le' || encoding === 'utf-16le') {\n      if (arr.length < 2 || val.length < 2) {\n        return -1\n      }\n      indexSize = 2\n      arrLength /= 2\n      valLength /= 2\n      byteOffset /= 2\n    }\n  }\n\n  function read (buf, i) {\n    if (indexSize === 1) {\n      return buf[i]\n    } else {\n      return buf.readUInt16BE(i * indexSize)\n    }\n  }\n\n  var foundIndex = -1\n  for (var i = 0; byteOffset + i < arrLength; i++) {\n    if (read(arr, byteOffset + i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {\n      if (foundIndex === -1) foundIndex = i\n      if (i - foundIndex + 1 === valLength) return (byteOffset + foundIndex) * indexSize\n    } else {\n      if (foundIndex !== -1) i -= i - foundIndex\n      foundIndex = -1\n    }\n  }\n  return -1\n}\n\nBuffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {\n  if (typeof byteOffset === 'string') {\n    encoding = byteOffset\n    byteOffset = 0\n  } else if (byteOffset > 0x7fffffff) {\n    byteOffset = 0x7fffffff\n  } else if (byteOffset < -0x80000000) {\n    byteOffset = -0x80000000\n  }\n  byteOffset >>= 0\n\n  if (this.length === 0) return -1\n  if (byteOffset >= this.length) return -1\n\n  // Negative offsets start from the end of the buffer\n  if (byteOffset < 0) byteOffset = Math.max(this.length + byteOffset, 0)\n\n  if (typeof val === 'string') {\n    val = Buffer.from(val, encoding)\n  }\n\n  if (Buffer.isBuffer(val)) {\n    // special case: looking for empty string/buffer always fails\n    if (val.length === 0) {\n      return -1\n    }\n    return arrayIndexOf(this, val, byteOffset, encoding)\n  }\n  if (typeof val === 'number') {\n    if (Buffer.TYPED_ARRAY_SUPPORT && Uint8Array.prototype.indexOf === 'function') {\n      return Uint8Array.prototype.indexOf.call(this, val, byteOffset)\n    }\n    return arrayIndexOf(this, [ val ], byteOffset, encoding)\n  }\n\n  throw new TypeError('val must be string, number or Buffer')\n}\n\nBuffer.prototype.includes = function includes (val, byteOffset, encoding) {\n  return this.indexOf(val, byteOffset, encoding) !== -1\n}\n\nfunction hexWrite (buf, string, offset, length) {\n  offset = Number(offset) || 0\n  var remaining = buf.length - offset\n  if (!length) {\n    length = remaining\n  } else {\n    length = Number(length)\n    if (length > remaining) {\n      length = remaining\n    }\n  }\n\n  // must be an even number of digits\n  var strLen = string.length\n  if (strLen % 2 !== 0) throw new Error('Invalid hex string')\n\n  if (length > strLen / 2) {\n    length = strLen / 2\n  }\n  for (var i = 0; i < length; i++) {\n    var parsed = parseInt(string.substr(i * 2, 2), 16)\n    if (isNaN(parsed)) return i\n    buf[offset + i] = parsed\n  }\n  return i\n}\n\nfunction utf8Write (buf, string, offset, length) {\n  return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nfunction asciiWrite (buf, string, offset, length) {\n  return blitBuffer(asciiToBytes(string), buf, offset, length)\n}\n\nfunction binaryWrite (buf, string, offset, length) {\n  return asciiWrite(buf, string, offset, length)\n}\n\nfunction base64Write (buf, string, offset, length) {\n  return blitBuffer(base64ToBytes(string), buf, offset, length)\n}\n\nfunction ucs2Write (buf, string, offset, length) {\n  return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nBuffer.prototype.write = function write (string, offset, length, encoding) {\n  // Buffer#write(string)\n  if (offset === undefined) {\n    encoding = 'utf8'\n    length = this.length\n    offset = 0\n  // Buffer#write(string, encoding)\n  } else if (length === undefined && typeof offset === 'string') {\n    encoding = offset\n    length = this.length\n    offset = 0\n  // Buffer#write(string, offset[, length][, encoding])\n  } else if (isFinite(offset)) {\n    offset = offset | 0\n    if (isFinite(length)) {\n      length = length | 0\n      if (encoding === undefined) encoding = 'utf8'\n    } else {\n      encoding = length\n      length = undefined\n    }\n  // legacy write(string, encoding, offset, length) - remove in v0.13\n  } else {\n    throw new Error(\n      'Buffer.write(string, encoding, offset[, length]) is no longer supported'\n    )\n  }\n\n  var remaining = this.length - offset\n  if (length === undefined || length > remaining) length = remaining\n\n  if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {\n    throw new RangeError('Attempt to write outside buffer bounds')\n  }\n\n  if (!encoding) encoding = 'utf8'\n\n  var loweredCase = false\n  for (;;) {\n    switch (encoding) {\n      case 'hex':\n        return hexWrite(this, string, offset, length)\n\n      case 'utf8':\n      case 'utf-8':\n        return utf8Write(this, string, offset, length)\n\n      case 'ascii':\n        return asciiWrite(this, string, offset, length)\n\n      case 'binary':\n        return binaryWrite(this, string, offset, length)\n\n      case 'base64':\n        // Warning: maxLength not taken into account in base64Write\n        return base64Write(this, string, offset, length)\n\n      case 'ucs2':\n      case 'ucs-2':\n      case 'utf16le':\n      case 'utf-16le':\n        return ucs2Write(this, string, offset, length)\n\n      default:\n        if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n        encoding = ('' + encoding).toLowerCase()\n        loweredCase = true\n    }\n  }\n}\n\nBuffer.prototype.toJSON = function toJSON () {\n  return {\n    type: 'Buffer',\n    data: Array.prototype.slice.call(this._arr || this, 0)\n  }\n}\n\nfunction base64Slice (buf, start, end) {\n  if (start === 0 && end === buf.length) {\n    return base64.fromByteArray(buf)\n  } else {\n    return base64.fromByteArray(buf.slice(start, end))\n  }\n}\n\nfunction utf8Slice (buf, start, end) {\n  end = Math.min(buf.length, end)\n  var res = []\n\n  var i = start\n  while (i < end) {\n    var firstByte = buf[i]\n    var codePoint = null\n    var bytesPerSequence = (firstByte > 0xEF) ? 4\n      : (firstByte > 0xDF) ? 3\n      : (firstByte > 0xBF) ? 2\n      : 1\n\n    if (i + bytesPerSequence <= end) {\n      var secondByte, thirdByte, fourthByte, tempCodePoint\n\n      switch (bytesPerSequence) {\n        case 1:\n          if (firstByte < 0x80) {\n            codePoint = firstByte\n          }\n          break\n        case 2:\n          secondByte = buf[i + 1]\n          if ((secondByte & 0xC0) === 0x80) {\n            tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)\n            if (tempCodePoint > 0x7F) {\n              codePoint = tempCodePoint\n            }\n          }\n          break\n        case 3:\n          secondByte = buf[i + 1]\n          thirdByte = buf[i + 2]\n          if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {\n            tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)\n            if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {\n              codePoint = tempCodePoint\n            }\n          }\n          break\n        case 4:\n          secondByte = buf[i + 1]\n          thirdByte = buf[i + 2]\n          fourthByte = buf[i + 3]\n          if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {\n            tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)\n            if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {\n              codePoint = tempCodePoint\n            }\n          }\n      }\n    }\n\n    if (codePoint === null) {\n      // we did not generate a valid codePoint so insert a\n      // replacement char (U+FFFD) and advance only 1 byte\n      codePoint = 0xFFFD\n      bytesPerSequence = 1\n    } else if (codePoint > 0xFFFF) {\n      // encode to utf16 (surrogate pair dance)\n      codePoint -= 0x10000\n      res.push(codePoint >>> 10 & 0x3FF | 0xD800)\n      codePoint = 0xDC00 | codePoint & 0x3FF\n    }\n\n    res.push(codePoint)\n    i += bytesPerSequence\n  }\n\n  return decodeCodePointsArray(res)\n}\n\n// Based on http://stackoverflow.com/a/22747272/680742, the browser with\n// the lowest limit is Chrome, with 0x10000 args.\n// We go 1 magnitude less, for safety\nvar MAX_ARGUMENTS_LENGTH = 0x1000\n\nfunction decodeCodePointsArray (codePoints) {\n  var len = codePoints.length\n  if (len <= MAX_ARGUMENTS_LENGTH) {\n    return String.fromCharCode.apply(String, codePoints) // avoid extra slice()\n  }\n\n  // Decode in chunks to avoid \"call stack size exceeded\".\n  var res = ''\n  var i = 0\n  while (i < len) {\n    res += String.fromCharCode.apply(\n      String,\n      codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)\n    )\n  }\n  return res\n}\n\nfunction asciiSlice (buf, start, end) {\n  var ret = ''\n  end = Math.min(buf.length, end)\n\n  for (var i = start; i < end; i++) {\n    ret += String.fromCharCode(buf[i] & 0x7F)\n  }\n  return ret\n}\n\nfunction binarySlice (buf, start, end) {\n  var ret = ''\n  end = Math.min(buf.length, end)\n\n  for (var i = start; i < end; i++) {\n    ret += String.fromCharCode(buf[i])\n  }\n  return ret\n}\n\nfunction hexSlice (buf, start, end) {\n  var len = buf.length\n\n  if (!start || start < 0) start = 0\n  if (!end || end < 0 || end > len) end = len\n\n  var out = ''\n  for (var i = start; i < end; i++) {\n    out += toHex(buf[i])\n  }\n  return out\n}\n\nfunction utf16leSlice (buf, start, end) {\n  var bytes = buf.slice(start, end)\n  var res = ''\n  for (var i = 0; i < bytes.length; i += 2) {\n    res += String.fromCharCode(bytes[i] + bytes[i + 1] * 256)\n  }\n  return res\n}\n\nBuffer.prototype.slice = function slice (start, end) {\n  var len = this.length\n  start = ~~start\n  end = end === undefined ? len : ~~end\n\n  if (start < 0) {\n    start += len\n    if (start < 0) start = 0\n  } else if (start > len) {\n    start = len\n  }\n\n  if (end < 0) {\n    end += len\n    if (end < 0) end = 0\n  } else if (end > len) {\n    end = len\n  }\n\n  if (end < start) end = start\n\n  var newBuf\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    newBuf = this.subarray(start, end)\n    newBuf.__proto__ = Buffer.prototype\n  } else {\n    var sliceLen = end - start\n    newBuf = new Buffer(sliceLen, undefined)\n    for (var i = 0; i < sliceLen; i++) {\n      newBuf[i] = this[i + start]\n    }\n  }\n\n  return newBuf\n}\n\n/*\n * Need to make sure that buffer isn't trying to write out of bounds.\n */\nfunction checkOffset (offset, ext, length) {\n  if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')\n  if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')\n}\n\nBuffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {\n  offset = offset | 0\n  byteLength = byteLength | 0\n  if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n  var val = this[offset]\n  var mul = 1\n  var i = 0\n  while (++i < byteLength && (mul *= 0x100)) {\n    val += this[offset + i] * mul\n  }\n\n  return val\n}\n\nBuffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {\n  offset = offset | 0\n  byteLength = byteLength | 0\n  if (!noAssert) {\n    checkOffset(offset, byteLength, this.length)\n  }\n\n  var val = this[offset + --byteLength]\n  var mul = 1\n  while (byteLength > 0 && (mul *= 0x100)) {\n    val += this[offset + --byteLength] * mul\n  }\n\n  return val\n}\n\nBuffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 1, this.length)\n  return this[offset]\n}\n\nBuffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 2, this.length)\n  return this[offset] | (this[offset + 1] << 8)\n}\n\nBuffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 2, this.length)\n  return (this[offset] << 8) | this[offset + 1]\n}\n\nBuffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 4, this.length)\n\n  return ((this[offset]) |\n      (this[offset + 1] << 8) |\n      (this[offset + 2] << 16)) +\n      (this[offset + 3] * 0x1000000)\n}\n\nBuffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 4, this.length)\n\n  return (this[offset] * 0x1000000) +\n    ((this[offset + 1] << 16) |\n    (this[offset + 2] << 8) |\n    this[offset + 3])\n}\n\nBuffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {\n  offset = offset | 0\n  byteLength = byteLength | 0\n  if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n  var val = this[offset]\n  var mul = 1\n  var i = 0\n  while (++i < byteLength && (mul *= 0x100)) {\n    val += this[offset + i] * mul\n  }\n  mul *= 0x80\n\n  if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n  return val\n}\n\nBuffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {\n  offset = offset | 0\n  byteLength = byteLength | 0\n  if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n  var i = byteLength\n  var mul = 1\n  var val = this[offset + --i]\n  while (i > 0 && (mul *= 0x100)) {\n    val += this[offset + --i] * mul\n  }\n  mul *= 0x80\n\n  if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n  return val\n}\n\nBuffer.prototype.readInt8 = function readInt8 (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 1, this.length)\n  if (!(this[offset] & 0x80)) return (this[offset])\n  return ((0xff - this[offset] + 1) * -1)\n}\n\nBuffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 2, this.length)\n  var val = this[offset] | (this[offset + 1] << 8)\n  return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 2, this.length)\n  var val = this[offset + 1] | (this[offset] << 8)\n  return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 4, this.length)\n\n  return (this[offset]) |\n    (this[offset + 1] << 8) |\n    (this[offset + 2] << 16) |\n    (this[offset + 3] << 24)\n}\n\nBuffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 4, this.length)\n\n  return (this[offset] << 24) |\n    (this[offset + 1] << 16) |\n    (this[offset + 2] << 8) |\n    (this[offset + 3])\n}\n\nBuffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 4, this.length)\n  return ieee754.read(this, offset, true, 23, 4)\n}\n\nBuffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 4, this.length)\n  return ieee754.read(this, offset, false, 23, 4)\n}\n\nBuffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 8, this.length)\n  return ieee754.read(this, offset, true, 52, 8)\n}\n\nBuffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 8, this.length)\n  return ieee754.read(this, offset, false, 52, 8)\n}\n\nfunction checkInt (buf, value, offset, ext, max, min) {\n  if (!Buffer.isBuffer(buf)) throw new TypeError('\"buffer\" argument must be a Buffer instance')\n  if (value > max || value < min) throw new RangeError('\"value\" argument is out of bounds')\n  if (offset + ext > buf.length) throw new RangeError('Index out of range')\n}\n\nBuffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {\n  value = +value\n  offset = offset | 0\n  byteLength = byteLength | 0\n  if (!noAssert) {\n    var maxBytes = Math.pow(2, 8 * byteLength) - 1\n    checkInt(this, value, offset, byteLength, maxBytes, 0)\n  }\n\n  var mul = 1\n  var i = 0\n  this[offset] = value & 0xFF\n  while (++i < byteLength && (mul *= 0x100)) {\n    this[offset + i] = (value / mul) & 0xFF\n  }\n\n  return offset + byteLength\n}\n\nBuffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {\n  value = +value\n  offset = offset | 0\n  byteLength = byteLength | 0\n  if (!noAssert) {\n    var maxBytes = Math.pow(2, 8 * byteLength) - 1\n    checkInt(this, value, offset, byteLength, maxBytes, 0)\n  }\n\n  var i = byteLength - 1\n  var mul = 1\n  this[offset + i] = value & 0xFF\n  while (--i >= 0 && (mul *= 0x100)) {\n    this[offset + i] = (value / mul) & 0xFF\n  }\n\n  return offset + byteLength\n}\n\nBuffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)\n  if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)\n  this[offset] = (value & 0xff)\n  return offset + 1\n}\n\nfunction objectWriteUInt16 (buf, value, offset, littleEndian) {\n  if (value < 0) value = 0xffff + value + 1\n  for (var i = 0, j = Math.min(buf.length - offset, 2); i < j; i++) {\n    buf[offset + i] = (value & (0xff << (8 * (littleEndian ? i : 1 - i)))) >>>\n      (littleEndian ? i : 1 - i) * 8\n  }\n}\n\nBuffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    this[offset] = (value & 0xff)\n    this[offset + 1] = (value >>> 8)\n  } else {\n    objectWriteUInt16(this, value, offset, true)\n  }\n  return offset + 2\n}\n\nBuffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    this[offset] = (value >>> 8)\n    this[offset + 1] = (value & 0xff)\n  } else {\n    objectWriteUInt16(this, value, offset, false)\n  }\n  return offset + 2\n}\n\nfunction objectWriteUInt32 (buf, value, offset, littleEndian) {\n  if (value < 0) value = 0xffffffff + value + 1\n  for (var i = 0, j = Math.min(buf.length - offset, 4); i < j; i++) {\n    buf[offset + i] = (value >>> (littleEndian ? i : 3 - i) * 8) & 0xff\n  }\n}\n\nBuffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    this[offset + 3] = (value >>> 24)\n    this[offset + 2] = (value >>> 16)\n    this[offset + 1] = (value >>> 8)\n    this[offset] = (value & 0xff)\n  } else {\n    objectWriteUInt32(this, value, offset, true)\n  }\n  return offset + 4\n}\n\nBuffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    this[offset] = (value >>> 24)\n    this[offset + 1] = (value >>> 16)\n    this[offset + 2] = (value >>> 8)\n    this[offset + 3] = (value & 0xff)\n  } else {\n    objectWriteUInt32(this, value, offset, false)\n  }\n  return offset + 4\n}\n\nBuffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) {\n    var limit = Math.pow(2, 8 * byteLength - 1)\n\n    checkInt(this, value, offset, byteLength, limit - 1, -limit)\n  }\n\n  var i = 0\n  var mul = 1\n  var sub = 0\n  this[offset] = value & 0xFF\n  while (++i < byteLength && (mul *= 0x100)) {\n    if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {\n      sub = 1\n    }\n    this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n  }\n\n  return offset + byteLength\n}\n\nBuffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) {\n    var limit = Math.pow(2, 8 * byteLength - 1)\n\n    checkInt(this, value, offset, byteLength, limit - 1, -limit)\n  }\n\n  var i = byteLength - 1\n  var mul = 1\n  var sub = 0\n  this[offset + i] = value & 0xFF\n  while (--i >= 0 && (mul *= 0x100)) {\n    if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {\n      sub = 1\n    }\n    this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n  }\n\n  return offset + byteLength\n}\n\nBuffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)\n  if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)\n  if (value < 0) value = 0xff + value + 1\n  this[offset] = (value & 0xff)\n  return offset + 1\n}\n\nBuffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    this[offset] = (value & 0xff)\n    this[offset + 1] = (value >>> 8)\n  } else {\n    objectWriteUInt16(this, value, offset, true)\n  }\n  return offset + 2\n}\n\nBuffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    this[offset] = (value >>> 8)\n    this[offset + 1] = (value & 0xff)\n  } else {\n    objectWriteUInt16(this, value, offset, false)\n  }\n  return offset + 2\n}\n\nBuffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    this[offset] = (value & 0xff)\n    this[offset + 1] = (value >>> 8)\n    this[offset + 2] = (value >>> 16)\n    this[offset + 3] = (value >>> 24)\n  } else {\n    objectWriteUInt32(this, value, offset, true)\n  }\n  return offset + 4\n}\n\nBuffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n  if (value < 0) value = 0xffffffff + value + 1\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    this[offset] = (value >>> 24)\n    this[offset + 1] = (value >>> 16)\n    this[offset + 2] = (value >>> 8)\n    this[offset + 3] = (value & 0xff)\n  } else {\n    objectWriteUInt32(this, value, offset, false)\n  }\n  return offset + 4\n}\n\nfunction checkIEEE754 (buf, value, offset, ext, max, min) {\n  if (offset + ext > buf.length) throw new RangeError('Index out of range')\n  if (offset < 0) throw new RangeError('Index out of range')\n}\n\nfunction writeFloat (buf, value, offset, littleEndian, noAssert) {\n  if (!noAssert) {\n    checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)\n  }\n  ieee754.write(buf, value, offset, littleEndian, 23, 4)\n  return offset + 4\n}\n\nBuffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {\n  return writeFloat(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {\n  return writeFloat(this, value, offset, false, noAssert)\n}\n\nfunction writeDouble (buf, value, offset, littleEndian, noAssert) {\n  if (!noAssert) {\n    checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)\n  }\n  ieee754.write(buf, value, offset, littleEndian, 52, 8)\n  return offset + 8\n}\n\nBuffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {\n  return writeDouble(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {\n  return writeDouble(this, value, offset, false, noAssert)\n}\n\n// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)\nBuffer.prototype.copy = function copy (target, targetStart, start, end) {\n  if (!start) start = 0\n  if (!end && end !== 0) end = this.length\n  if (targetStart >= target.length) targetStart = target.length\n  if (!targetStart) targetStart = 0\n  if (end > 0 && end < start) end = start\n\n  // Copy 0 bytes; we're done\n  if (end === start) return 0\n  if (target.length === 0 || this.length === 0) return 0\n\n  // Fatal error conditions\n  if (targetStart < 0) {\n    throw new RangeError('targetStart out of bounds')\n  }\n  if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds')\n  if (end < 0) throw new RangeError('sourceEnd out of bounds')\n\n  // Are we oob?\n  if (end > this.length) end = this.length\n  if (target.length - targetStart < end - start) {\n    end = target.length - targetStart + start\n  }\n\n  var len = end - start\n  var i\n\n  if (this === target && start < targetStart && targetStart < end) {\n    // descending copy from end\n    for (i = len - 1; i >= 0; i--) {\n      target[i + targetStart] = this[i + start]\n    }\n  } else if (len < 1000 || !Buffer.TYPED_ARRAY_SUPPORT) {\n    // ascending copy from start\n    for (i = 0; i < len; i++) {\n      target[i + targetStart] = this[i + start]\n    }\n  } else {\n    Uint8Array.prototype.set.call(\n      target,\n      this.subarray(start, start + len),\n      targetStart\n    )\n  }\n\n  return len\n}\n\n// Usage:\n//    buffer.fill(number[, offset[, end]])\n//    buffer.fill(buffer[, offset[, end]])\n//    buffer.fill(string[, offset[, end]][, encoding])\nBuffer.prototype.fill = function fill (val, start, end, encoding) {\n  // Handle string cases:\n  if (typeof val === 'string') {\n    if (typeof start === 'string') {\n      encoding = start\n      start = 0\n      end = this.length\n    } else if (typeof end === 'string') {\n      encoding = end\n      end = this.length\n    }\n    if (val.length === 1) {\n      var code = val.charCodeAt(0)\n      if (code < 256) {\n        val = code\n      }\n    }\n    if (encoding !== undefined && typeof encoding !== 'string') {\n      throw new TypeError('encoding must be a string')\n    }\n    if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {\n      throw new TypeError('Unknown encoding: ' + encoding)\n    }\n  } else if (typeof val === 'number') {\n    val = val & 255\n  }\n\n  // Invalid ranges are not set to a default, so can range check early.\n  if (start < 0 || this.length < start || this.length < end) {\n    throw new RangeError('Out of range index')\n  }\n\n  if (end <= start) {\n    return this\n  }\n\n  start = start >>> 0\n  end = end === undefined ? this.length : end >>> 0\n\n  if (!val) val = 0\n\n  var i\n  if (typeof val === 'number') {\n    for (i = start; i < end; i++) {\n      this[i] = val\n    }\n  } else {\n    var bytes = Buffer.isBuffer(val)\n      ? val\n      : utf8ToBytes(new Buffer(val, encoding).toString())\n    var len = bytes.length\n    for (i = 0; i < end - start; i++) {\n      this[i + start] = bytes[i % len]\n    }\n  }\n\n  return this\n}\n\n// HELPER FUNCTIONS\n// ================\n\nvar INVALID_BASE64_RE = /[^+\\/0-9A-Za-z-_]/g\n\nfunction base64clean (str) {\n  // Node strips out invalid characters like \\n and \\t from the string, base64-js does not\n  str = stringtrim(str).replace(INVALID_BASE64_RE, '')\n  // Node converts strings with length < 2 to ''\n  if (str.length < 2) return ''\n  // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not\n  while (str.length % 4 !== 0) {\n    str = str + '='\n  }\n  return str\n}\n\nfunction stringtrim (str) {\n  if (str.trim) return str.trim()\n  return str.replace(/^\\s+|\\s+$/g, '')\n}\n\nfunction toHex (n) {\n  if (n < 16) return '0' + n.toString(16)\n  return n.toString(16)\n}\n\nfunction utf8ToBytes (string, units) {\n  units = units || Infinity\n  var codePoint\n  var length = string.length\n  var leadSurrogate = null\n  var bytes = []\n\n  for (var i = 0; i < length; i++) {\n    codePoint = string.charCodeAt(i)\n\n    // is surrogate component\n    if (codePoint > 0xD7FF && codePoint < 0xE000) {\n      // last char was a lead\n      if (!leadSurrogate) {\n        // no lead yet\n        if (codePoint > 0xDBFF) {\n          // unexpected trail\n          if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n          continue\n        } else if (i + 1 === length) {\n          // unpaired lead\n          if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n          continue\n        }\n\n        // valid lead\n        leadSurrogate = codePoint\n\n        continue\n      }\n\n      // 2 leads in a row\n      if (codePoint < 0xDC00) {\n        if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n        leadSurrogate = codePoint\n        continue\n      }\n\n      // valid surrogate pair\n      codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000\n    } else if (leadSurrogate) {\n      // valid bmp char, but last char was a lead\n      if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n    }\n\n    leadSurrogate = null\n\n    // encode utf8\n    if (codePoint < 0x80) {\n      if ((units -= 1) < 0) break\n      bytes.push(codePoint)\n    } else if (codePoint < 0x800) {\n      if ((units -= 2) < 0) break\n      bytes.push(\n        codePoint >> 0x6 | 0xC0,\n        codePoint & 0x3F | 0x80\n      )\n    } else if (codePoint < 0x10000) {\n      if ((units -= 3) < 0) break\n      bytes.push(\n        codePoint >> 0xC | 0xE0,\n        codePoint >> 0x6 & 0x3F | 0x80,\n        codePoint & 0x3F | 0x80\n      )\n    } else if (codePoint < 0x110000) {\n      if ((units -= 4) < 0) break\n      bytes.push(\n        codePoint >> 0x12 | 0xF0,\n        codePoint >> 0xC & 0x3F | 0x80,\n        codePoint >> 0x6 & 0x3F | 0x80,\n        codePoint & 0x3F | 0x80\n      )\n    } else {\n      throw new Error('Invalid code point')\n    }\n  }\n\n  return bytes\n}\n\nfunction asciiToBytes (str) {\n  var byteArray = []\n  for (var i = 0; i < str.length; i++) {\n    // Node's code seems to be doing this and not & 0x7F..\n    byteArray.push(str.charCodeAt(i) & 0xFF)\n  }\n  return byteArray\n}\n\nfunction utf16leToBytes (str, units) {\n  var c, hi, lo\n  var byteArray = []\n  for (var i = 0; i < str.length; i++) {\n    if ((units -= 2) < 0) break\n\n    c = str.charCodeAt(i)\n    hi = c >> 8\n    lo = c % 256\n    byteArray.push(lo)\n    byteArray.push(hi)\n  }\n\n  return byteArray\n}\n\nfunction base64ToBytes (str) {\n  return base64.toByteArray(base64clean(str))\n}\n\nfunction blitBuffer (src, dst, offset, length) {\n  for (var i = 0; i < length; i++) {\n    if ((i + offset >= dst.length) || (i >= src.length)) break\n    dst[i + offset] = src[i]\n  }\n  return i\n}\n\nfunction isnan (val) {\n  return val !== val // eslint-disable-line no-self-compare\n}\n","'use strict'\n\nexports.toByteArray = toByteArray\nexports.fromByteArray = fromByteArray\n\nvar lookup = []\nvar revLookup = []\nvar Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array\n\nfunction init () {\n  var code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'\n  for (var i = 0, len = code.length; i < len; ++i) {\n    lookup[i] = code[i]\n    revLookup[code.charCodeAt(i)] = i\n  }\n\n  revLookup['-'.charCodeAt(0)] = 62\n  revLookup['_'.charCodeAt(0)] = 63\n}\n\ninit()\n\nfunction toByteArray (b64) {\n  var i, j, l, tmp, placeHolders, arr\n  var len = b64.length\n\n  if (len % 4 > 0) {\n    throw new Error('Invalid string. Length must be a multiple of 4')\n  }\n\n  // the number of equal signs (place holders)\n  // if there are two placeholders, than the two characters before it\n  // represent one byte\n  // if there is only one, then the three characters before it represent 2 bytes\n  // this is just a cheap hack to not do indexOf twice\n  placeHolders = b64[len - 2] === '=' ? 2 : b64[len - 1] === '=' ? 1 : 0\n\n  // base64 is 4/3 + up to two characters of the original data\n  arr = new Arr(len * 3 / 4 - placeHolders)\n\n  // if there are placeholders, only get up to the last complete 4 chars\n  l = placeHolders > 0 ? len - 4 : len\n\n  var L = 0\n\n  for (i = 0, j = 0; i < l; i += 4, j += 3) {\n    tmp = (revLookup[b64.charCodeAt(i)] << 18) | (revLookup[b64.charCodeAt(i + 1)] << 12) | (revLookup[b64.charCodeAt(i + 2)] << 6) | revLookup[b64.charCodeAt(i + 3)]\n    arr[L++] = (tmp >> 16) & 0xFF\n    arr[L++] = (tmp >> 8) & 0xFF\n    arr[L++] = tmp & 0xFF\n  }\n\n  if (placeHolders === 2) {\n    tmp = (revLookup[b64.charCodeAt(i)] << 2) | (revLookup[b64.charCodeAt(i + 1)] >> 4)\n    arr[L++] = tmp & 0xFF\n  } else if (placeHolders === 1) {\n    tmp = (revLookup[b64.charCodeAt(i)] << 10) | (revLookup[b64.charCodeAt(i + 1)] << 4) | (revLookup[b64.charCodeAt(i + 2)] >> 2)\n    arr[L++] = (tmp >> 8) & 0xFF\n    arr[L++] = tmp & 0xFF\n  }\n\n  return arr\n}\n\nfunction tripletToBase64 (num) {\n  return lookup[num >> 18 & 0x3F] + lookup[num >> 12 & 0x3F] + lookup[num >> 6 & 0x3F] + lookup[num & 0x3F]\n}\n\nfunction encodeChunk (uint8, start, end) {\n  var tmp\n  var output = []\n  for (var i = start; i < end; i += 3) {\n    tmp = (uint8[i] << 16) + (uint8[i + 1] << 8) + (uint8[i + 2])\n    output.push(tripletToBase64(tmp))\n  }\n  return output.join('')\n}\n\nfunction fromByteArray (uint8) {\n  var tmp\n  var len = uint8.length\n  var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes\n  var output = ''\n  var parts = []\n  var maxChunkLength = 16383 // must be multiple of 3\n\n  // go through the array every three bytes, we'll deal with trailing stuff later\n  for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {\n    parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)))\n  }\n\n  // pad the end with zeros, but make sure to not forget the extra bytes\n  if (extraBytes === 1) {\n    tmp = uint8[len - 1]\n    output += lookup[tmp >> 2]\n    output += lookup[(tmp << 4) & 0x3F]\n    output += '=='\n  } else if (extraBytes === 2) {\n    tmp = (uint8[len - 2] << 8) + (uint8[len - 1])\n    output += lookup[tmp >> 10]\n    output += lookup[(tmp >> 4) & 0x3F]\n    output += lookup[(tmp << 2) & 0x3F]\n    output += '='\n  }\n\n  parts.push(output)\n\n  return parts.join('')\n}\n","exports.read = function (buffer, offset, isLE, mLen, nBytes) {\n  var e, m\n  var eLen = nBytes * 8 - mLen - 1\n  var eMax = (1 << eLen) - 1\n  var eBias = eMax >> 1\n  var nBits = -7\n  var i = isLE ? (nBytes - 1) : 0\n  var d = isLE ? -1 : 1\n  var s = buffer[offset + i]\n\n  i += d\n\n  e = s & ((1 << (-nBits)) - 1)\n  s >>= (-nBits)\n  nBits += eLen\n  for (; nBits > 0; e = e * 256 + buffer[offset + i], i += d, nBits -= 8) {}\n\n  m = e & ((1 << (-nBits)) - 1)\n  e >>= (-nBits)\n  nBits += mLen\n  for (; nBits > 0; m = m * 256 + buffer[offset + i], i += d, nBits -= 8) {}\n\n  if (e === 0) {\n    e = 1 - eBias\n  } else if (e === eMax) {\n    return m ? NaN : ((s ? -1 : 1) * Infinity)\n  } else {\n    m = m + Math.pow(2, mLen)\n    e = e - eBias\n  }\n  return (s ? -1 : 1) * m * Math.pow(2, e - mLen)\n}\n\nexports.write = function (buffer, value, offset, isLE, mLen, nBytes) {\n  var e, m, c\n  var eLen = nBytes * 8 - mLen - 1\n  var eMax = (1 << eLen) - 1\n  var eBias = eMax >> 1\n  var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)\n  var i = isLE ? 0 : (nBytes - 1)\n  var d = isLE ? 1 : -1\n  var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0\n\n  value = Math.abs(value)\n\n  if (isNaN(value) || value === Infinity) {\n    m = isNaN(value) ? 1 : 0\n    e = eMax\n  } else {\n    e = Math.floor(Math.log(value) / Math.LN2)\n    if (value * (c = Math.pow(2, -e)) < 1) {\n      e--\n      c *= 2\n    }\n    if (e + eBias >= 1) {\n      value += rt / c\n    } else {\n      value += rt * Math.pow(2, 1 - eBias)\n    }\n    if (value * c >= 2) {\n      e++\n      c /= 2\n    }\n\n    if (e + eBias >= eMax) {\n      m = 0\n      e = eMax\n    } else if (e + eBias >= 1) {\n      m = (value * c - 1) * Math.pow(2, mLen)\n      e = e + eBias\n    } else {\n      m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)\n      e = 0\n    }\n  }\n\n  for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}\n\n  e = (e << mLen) | m\n  eLen += mLen\n  for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}\n\n  buffer[offset + i - d] |= s * 128\n}\n","var toString = {}.toString;\n\nmodule.exports = Array.isArray || function (arr) {\n  return toString.call(arr) == '[object Array]';\n};\n","// shim for using process in browser\n\nvar process = module.exports = {};\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n    if (!draining || !currentQueue) {\n        return;\n    }\n    draining = false;\n    if (currentQueue.length) {\n        queue = currentQueue.concat(queue);\n    } else {\n        queueIndex = -1;\n    }\n    if (queue.length) {\n        drainQueue();\n    }\n}\n\nfunction drainQueue() {\n    if (draining) {\n        return;\n    }\n    var timeout = setTimeout(cleanUpNextTick);\n    draining = true;\n\n    var len = queue.length;\n    while(len) {\n        currentQueue = queue;\n        queue = [];\n        while (++queueIndex < len) {\n            if (currentQueue) {\n                currentQueue[queueIndex].run();\n            }\n        }\n        queueIndex = -1;\n        len = queue.length;\n    }\n    currentQueue = null;\n    draining = false;\n    clearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n    var args = new Array(arguments.length - 1);\n    if (arguments.length > 1) {\n        for (var i = 1; i < arguments.length; i++) {\n            args[i - 1] = arguments[i];\n        }\n    }\n    queue.push(new Item(fun, args));\n    if (queue.length === 1 && !draining) {\n        setTimeout(drainQueue, 0);\n    }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n    this.fun = fun;\n    this.array = array;\n}\nItem.prototype.run = function () {\n    this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\n\nprocess.binding = function (name) {\n    throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n    throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n","module.exports = require('./lib/chai');\n","/*!\n * chai\n * Copyright(c) 2011-2014 Jake Luer <jake@alogicalparadox.com>\n * MIT Licensed\n */\n\nvar used = []\n  , exports = module.exports = {};\n\n/*!\n * Chai version\n */\n\nexports.version = '3.5.0';\n\n/*!\n * Assertion Error\n */\n\nexports.AssertionError = require('assertion-error');\n\n/*!\n * Utils for plugins (not exported)\n */\n\nvar util = require('./chai/utils');\n\n/**\n * # .use(function)\n *\n * Provides a way to extend the internals of Chai\n *\n * @param {Function}\n * @returns {this} for chaining\n * @api public\n */\n\nexports.use = function (fn) {\n  if (!~used.indexOf(fn)) {\n    fn(this, util);\n    used.push(fn);\n  }\n\n  return this;\n};\n\n/*!\n * Utility Functions\n */\n\nexports.util = util;\n\n/*!\n * Configuration\n */\n\nvar config = require('./chai/config');\nexports.config = config;\n\n/*!\n * Primary `Assertion` prototype\n */\n\nvar assertion = require('./chai/assertion');\nexports.use(assertion);\n\n/*!\n * Core Assertions\n */\n\nvar core = require('./chai/core/assertions');\nexports.use(core);\n\n/*!\n * Expect interface\n */\n\nvar expect = require('./chai/interface/expect');\nexports.use(expect);\n\n/*!\n * Should interface\n */\n\nvar should = require('./chai/interface/should');\nexports.use(should);\n\n/*!\n * Assert interface\n */\n\nvar assert = require('./chai/interface/assert');\nexports.use(assert);\n","/*!\n * chai\n * http://chaijs.com\n * Copyright(c) 2011-2014 Jake Luer <jake@alogicalparadox.com>\n * MIT Licensed\n */\n\nvar config = require('./config');\n\nmodule.exports = function (_chai, util) {\n  /*!\n   * Module dependencies.\n   */\n\n  var AssertionError = _chai.AssertionError\n    , flag = util.flag;\n\n  /*!\n   * Module export.\n   */\n\n  _chai.Assertion = Assertion;\n\n  /*!\n   * Assertion Constructor\n   *\n   * Creates object for chaining.\n   *\n   * @api private\n   */\n\n  function Assertion (obj, msg, stack) {\n    flag(this, 'ssfi', stack || arguments.callee);\n    flag(this, 'object', obj);\n    flag(this, 'message', msg);\n  }\n\n  Object.defineProperty(Assertion, 'includeStack', {\n    get: function() {\n      console.warn('Assertion.includeStack is deprecated, use chai.config.includeStack instead.');\n      return config.includeStack;\n    },\n    set: function(value) {\n      console.warn('Assertion.includeStack is deprecated, use chai.config.includeStack instead.');\n      config.includeStack = value;\n    }\n  });\n\n  Object.defineProperty(Assertion, 'showDiff', {\n    get: function() {\n      console.warn('Assertion.showDiff is deprecated, use chai.config.showDiff instead.');\n      return config.showDiff;\n    },\n    set: function(value) {\n      console.warn('Assertion.showDiff is deprecated, use chai.config.showDiff instead.');\n      config.showDiff = value;\n    }\n  });\n\n  Assertion.addProperty = function (name, fn) {\n    util.addProperty(this.prototype, name, fn);\n  };\n\n  Assertion.addMethod = function (name, fn) {\n    util.addMethod(this.prototype, name, fn);\n  };\n\n  Assertion.addChainableMethod = function (name, fn, chainingBehavior) {\n    util.addChainableMethod(this.prototype, name, fn, chainingBehavior);\n  };\n\n  Assertion.overwriteProperty = function (name, fn) {\n    util.overwriteProperty(this.prototype, name, fn);\n  };\n\n  Assertion.overwriteMethod = function (name, fn) {\n    util.overwriteMethod(this.prototype, name, fn);\n  };\n\n  Assertion.overwriteChainableMethod = function (name, fn, chainingBehavior) {\n    util.overwriteChainableMethod(this.prototype, name, fn, chainingBehavior);\n  };\n\n  /**\n   * ### .assert(expression, message, negateMessage, expected, actual, showDiff)\n   *\n   * Executes an expression and check expectations. Throws AssertionError for reporting if test doesn't pass.\n   *\n   * @name assert\n   * @param {Philosophical} expression to be tested\n   * @param {String|Function} message or function that returns message to display if expression fails\n   * @param {String|Function} negatedMessage or function that returns negatedMessage to display if negated expression fails\n   * @param {Mixed} expected value (remember to check for negation)\n   * @param {Mixed} actual (optional) will default to `this.obj`\n   * @param {Boolean} showDiff (optional) when set to `true`, assert will display a diff in addition to the message if expression fails\n   * @api private\n   */\n\n  Assertion.prototype.assert = function (expr, msg, negateMsg, expected, _actual, showDiff) {\n    var ok = util.test(this, arguments);\n    if (true !== showDiff) showDiff = false;\n    if (true !== config.showDiff) showDiff = false;\n\n    if (!ok) {\n      var msg = util.getMessage(this, arguments)\n        , actual = util.getActual(this, arguments);\n      throw new AssertionError(msg, {\n          actual: actual\n        , expected: expected\n        , showDiff: showDiff\n      }, (config.includeStack) ? this.assert : flag(this, 'ssfi'));\n    }\n  };\n\n  /*!\n   * ### ._obj\n   *\n   * Quick reference to stored `actual` value for plugin developers.\n   *\n   * @api private\n   */\n\n  Object.defineProperty(Assertion.prototype, '_obj',\n    { get: function () {\n        return flag(this, 'object');\n      }\n    , set: function (val) {\n        flag(this, 'object', val);\n      }\n  });\n};\n","module.exports = {\n\n  /**\n   * ### config.includeStack\n   *\n   * User configurable property, influences whether stack trace\n   * is included in Assertion error message. Default of false\n   * suppresses stack trace in the error message.\n   *\n   *     chai.config.includeStack = true;  // enable stack on error\n   *\n   * @param {Boolean}\n   * @api public\n   */\n\n   includeStack: false,\n\n  /**\n   * ### config.showDiff\n   *\n   * User configurable property, influences whether or not\n   * the `showDiff` flag should be included in the thrown\n   * AssertionErrors. `false` will always be `false`; `true`\n   * will be true when the assertion has requested a diff\n   * be shown.\n   *\n   * @param {Boolean}\n   * @api public\n   */\n\n  showDiff: true,\n\n  /**\n   * ### config.truncateThreshold\n   *\n   * User configurable property, sets length threshold for actual and\n   * expected values in assertion errors. If this threshold is exceeded, for\n   * example for large data structures, the value is replaced with something\n   * like `[ Array(3) ]` or `{ Object (prop1, prop2) }`.\n   *\n   * Set it to zero if you want to disable truncating altogether.\n   *\n   * This is especially userful when doing assertions on arrays: having this\n   * set to a reasonable large value makes the failure messages readily\n   * inspectable.\n   *\n   *     chai.config.truncateThreshold = 0;  // disable truncating\n   *\n   * @param {Number}\n   * @api public\n   */\n\n  truncateThreshold: 40\n\n};\n","/*!\n * chai\n * http://chaijs.com\n * Copyright(c) 2011-2014 Jake Luer <jake@alogicalparadox.com>\n * MIT Licensed\n */\n\nmodule.exports = function (chai, _) {\n  var Assertion = chai.Assertion\n    , toString = Object.prototype.toString\n    , flag = _.flag;\n\n  /**\n   * ### Language Chains\n   *\n   * The following are provided as chainable getters to\n   * improve the readability of your assertions. They\n   * do not provide testing capabilities unless they\n   * have been overwritten by a plugin.\n   *\n   * **Chains**\n   *\n   * - to\n   * - be\n   * - been\n   * - is\n   * - that\n   * - which\n   * - and\n   * - has\n   * - have\n   * - with\n   * - at\n   * - of\n   * - same\n   *\n   * @name language chains\n   * @namespace BDD\n   * @api public\n   */\n\n  [ 'to', 'be', 'been'\n  , 'is', 'and', 'has', 'have'\n  , 'with', 'that', 'which', 'at'\n  , 'of', 'same' ].forEach(function (chain) {\n    Assertion.addProperty(chain, function () {\n      return this;\n    });\n  });\n\n  /**\n   * ### .not\n   *\n   * Negates any of assertions following in the chain.\n   *\n   *     expect(foo).to.not.equal('bar');\n   *     expect(goodFn).to.not.throw(Error);\n   *     expect({ foo: 'baz' }).to.have.property('foo')\n   *       .and.not.equal('bar');\n   *\n   * @name not\n   * @namespace BDD\n   * @api public\n   */\n\n  Assertion.addProperty('not', function () {\n    flag(this, 'negate', true);\n  });\n\n  /**\n   * ### .deep\n   *\n   * Sets the `deep` flag, later used by the `equal` and\n   * `property` assertions.\n   *\n   *     expect(foo).to.deep.equal({ bar: 'baz' });\n   *     expect({ foo: { bar: { baz: 'quux' } } })\n   *       .to.have.deep.property('foo.bar.baz', 'quux');\n   *\n   * `.deep.property` special characters can be escaped\n   * by adding two slashes before the `.` or `[]`.\n   *\n   *     var deepCss = { '.link': { '[target]': 42 }};\n   *     expect(deepCss).to.have.deep.property('\\\\.link.\\\\[target\\\\]', 42);\n   *\n   * @name deep\n   * @namespace BDD\n   * @api public\n   */\n\n  Assertion.addProperty('deep', function () {\n    flag(this, 'deep', true);\n  });\n\n  /**\n   * ### .any\n   *\n   * Sets the `any` flag, (opposite of the `all` flag)\n   * later used in the `keys` assertion.\n   *\n   *     expect(foo).to.have.any.keys('bar', 'baz');\n   *\n   * @name any\n   * @namespace BDD\n   * @api public\n   */\n\n  Assertion.addProperty('any', function () {\n    flag(this, 'any', true);\n    flag(this, 'all', false)\n  });\n\n\n  /**\n   * ### .all\n   *\n   * Sets the `all` flag (opposite of the `any` flag)\n   * later used by the `keys` assertion.\n   *\n   *     expect(foo).to.have.all.keys('bar', 'baz');\n   *\n   * @name all\n   * @namespace BDD\n   * @api public\n   */\n\n  Assertion.addProperty('all', function () {\n    flag(this, 'all', true);\n    flag(this, 'any', false);\n  });\n\n  /**\n   * ### .a(type)\n   *\n   * The `a` and `an` assertions are aliases that can be\n   * used either as language chains or to assert a value's\n   * type.\n   *\n   *     // typeof\n   *     expect('test').to.be.a('string');\n   *     expect({ foo: 'bar' }).to.be.an('object');\n   *     expect(null).to.be.a('null');\n   *     expect(undefined).to.be.an('undefined');\n   *     expect(new Error).to.be.an('error');\n   *     expect(new Promise).to.be.a('promise');\n   *     expect(new Float32Array()).to.be.a('float32array');\n   *     expect(Symbol()).to.be.a('symbol');\n   *\n   *     // es6 overrides\n   *     expect({[Symbol.toStringTag]:()=>'foo'}).to.be.a('foo');\n   *\n   *     // language chain\n   *     expect(foo).to.be.an.instanceof(Foo);\n   *\n   * @name a\n   * @alias an\n   * @param {String} type\n   * @param {String} message _optional_\n   * @namespace BDD\n   * @api public\n   */\n\n  function an (type, msg) {\n    if (msg) flag(this, 'message', msg);\n    type = type.toLowerCase();\n    var obj = flag(this, 'object')\n      , article = ~[ 'a', 'e', 'i', 'o', 'u' ].indexOf(type.charAt(0)) ? 'an ' : 'a ';\n\n    this.assert(\n        type === _.type(obj)\n      , 'expected #{this} to be ' + article + type\n      , 'expected #{this} not to be ' + article + type\n    );\n  }\n\n  Assertion.addChainableMethod('an', an);\n  Assertion.addChainableMethod('a', an);\n\n  /**\n   * ### .include(value)\n   *\n   * The `include` and `contain` assertions can be used as either property\n   * based language chains or as methods to assert the inclusion of an object\n   * in an array or a substring in a string. When used as language chains,\n   * they toggle the `contains` flag for the `keys` assertion.\n   *\n   *     expect([1,2,3]).to.include(2);\n   *     expect('foobar').to.contain('foo');\n   *     expect({ foo: 'bar', hello: 'universe' }).to.include.keys('foo');\n   *\n   * @name include\n   * @alias contain\n   * @alias includes\n   * @alias contains\n   * @param {Object|String|Number} obj\n   * @param {String} message _optional_\n   * @namespace BDD\n   * @api public\n   */\n\n  function includeChainingBehavior () {\n    flag(this, 'contains', true);\n  }\n\n  function include (val, msg) {\n    _.expectTypes(this, ['array', 'object', 'string']);\n\n    if (msg) flag(this, 'message', msg);\n    var obj = flag(this, 'object');\n    var expected = false;\n\n    if (_.type(obj) === 'array' && _.type(val) === 'object') {\n      for (var i in obj) {\n        if (_.eql(obj[i], val)) {\n          expected = true;\n          break;\n        }\n      }\n    } else if (_.type(val) === 'object') {\n      if (!flag(this, 'negate')) {\n        for (var k in val) new Assertion(obj).property(k, val[k]);\n        return;\n      }\n      var subset = {};\n      for (var k in val) subset[k] = obj[k];\n      expected = _.eql(subset, val);\n    } else {\n      expected = (obj != undefined) && ~obj.indexOf(val);\n    }\n    this.assert(\n        expected\n      , 'expected #{this} to include ' + _.inspect(val)\n      , 'expected #{this} to not include ' + _.inspect(val));\n  }\n\n  Assertion.addChainableMethod('include', include, includeChainingBehavior);\n  Assertion.addChainableMethod('contain', include, includeChainingBehavior);\n  Assertion.addChainableMethod('contains', include, includeChainingBehavior);\n  Assertion.addChainableMethod('includes', include, includeChainingBehavior);\n\n  /**\n   * ### .ok\n   *\n   * Asserts that the target is truthy.\n   *\n   *     expect('everything').to.be.ok;\n   *     expect(1).to.be.ok;\n   *     expect(false).to.not.be.ok;\n   *     expect(undefined).to.not.be.ok;\n   *     expect(null).to.not.be.ok;\n   *\n   * @name ok\n   * @namespace BDD\n   * @api public\n   */\n\n  Assertion.addProperty('ok', function () {\n    this.assert(\n        flag(this, 'object')\n      , 'expected #{this} to be truthy'\n      , 'expected #{this} to be falsy');\n  });\n\n  /**\n   * ### .true\n   *\n   * Asserts that the target is `true`.\n   *\n   *     expect(true).to.be.true;\n   *     expect(1).to.not.be.true;\n   *\n   * @name true\n   * @namespace BDD\n   * @api public\n   */\n\n  Assertion.addProperty('true', function () {\n    this.assert(\n        true === flag(this, 'object')\n      , 'expected #{this} to be true'\n      , 'expected #{this} to be false'\n      , this.negate ? false : true\n    );\n  });\n\n  /**\n   * ### .false\n   *\n   * Asserts that the target is `false`.\n   *\n   *     expect(false).to.be.false;\n   *     expect(0).to.not.be.false;\n   *\n   * @name false\n   * @namespace BDD\n   * @api public\n   */\n\n  Assertion.addProperty('false', function () {\n    this.assert(\n        false === flag(this, 'object')\n      , 'expected #{this} to be false'\n      , 'expected #{this} to be true'\n      , this.negate ? true : false\n    );\n  });\n\n  /**\n   * ### .null\n   *\n   * Asserts that the target is `null`.\n   *\n   *     expect(null).to.be.null;\n   *     expect(undefined).to.not.be.null;\n   *\n   * @name null\n   * @namespace BDD\n   * @api public\n   */\n\n  Assertion.addProperty('null', function () {\n    this.assert(\n        null === flag(this, 'object')\n      , 'expected #{this} to be null'\n      , 'expected #{this} not to be null'\n    );\n  });\n\n  /**\n   * ### .undefined\n   *\n   * Asserts that the target is `undefined`.\n   *\n   *     expect(undefined).to.be.undefined;\n   *     expect(null).to.not.be.undefined;\n   *\n   * @name undefined\n   * @namespace BDD\n   * @api public\n   */\n\n  Assertion.addProperty('undefined', function () {\n    this.assert(\n        undefined === flag(this, 'object')\n      , 'expected #{this} to be undefined'\n      , 'expected #{this} not to be undefined'\n    );\n  });\n\n  /**\n   * ### .NaN\n   * Asserts that the target is `NaN`.\n   *\n   *     expect('foo').to.be.NaN;\n   *     expect(4).not.to.be.NaN;\n   *\n   * @name NaN\n   * @namespace BDD\n   * @api public\n   */\n\n  Assertion.addProperty('NaN', function () {\n    this.assert(\n        isNaN(flag(this, 'object'))\n        , 'expected #{this} to be NaN'\n        , 'expected #{this} not to be NaN'\n    );\n  });\n\n  /**\n   * ### .exist\n   *\n   * Asserts that the target is neither `null` nor `undefined`.\n   *\n   *     var foo = 'hi'\n   *       , bar = null\n   *       , baz;\n   *\n   *     expect(foo).to.exist;\n   *     expect(bar).to.not.exist;\n   *     expect(baz).to.not.exist;\n   *\n   * @name exist\n   * @namespace BDD\n   * @api public\n   */\n\n  Assertion.addProperty('exist', function () {\n    this.assert(\n        null != flag(this, 'object')\n      , 'expected #{this} to exist'\n      , 'expected #{this} to not exist'\n    );\n  });\n\n\n  /**\n   * ### .empty\n   *\n   * Asserts that the target's length is `0`. For arrays and strings, it checks\n   * the `length` property. For objects, it gets the count of\n   * enumerable keys.\n   *\n   *     expect([]).to.be.empty;\n   *     expect('').to.be.empty;\n   *     expect({}).to.be.empty;\n   *\n   * @name empty\n   * @namespace BDD\n   * @api public\n   */\n\n  Assertion.addProperty('empty', function () {\n    var obj = flag(this, 'object')\n      , expected = obj;\n\n    if (Array.isArray(obj) || 'string' === typeof object) {\n      expected = obj.length;\n    } else if (typeof obj === 'object') {\n      expected = Object.keys(obj).length;\n    }\n\n    this.assert(\n        !expected\n      , 'expected #{this} to be empty'\n      , 'expected #{this} not to be empty'\n    );\n  });\n\n  /**\n   * ### .arguments\n   *\n   * Asserts that the target is an arguments object.\n   *\n   *     function test () {\n   *       expect(arguments).to.be.arguments;\n   *     }\n   *\n   * @name arguments\n   * @alias Arguments\n   * @namespace BDD\n   * @api public\n   */\n\n  function checkArguments () {\n    var obj = flag(this, 'object')\n      , type = Object.prototype.toString.call(obj);\n    this.assert(\n        '[object Arguments]' === type\n      , 'expected #{this} to be arguments but got ' + type\n      , 'expected #{this} to not be arguments'\n    );\n  }\n\n  Assertion.addProperty('arguments', checkArguments);\n  Assertion.addProperty('Arguments', checkArguments);\n\n  /**\n   * ### .equal(value)\n   *\n   * Asserts that the target is strictly equal (`===`) to `value`.\n   * Alternately, if the `deep` flag is set, asserts that\n   * the target is deeply equal to `value`.\n   *\n   *     expect('hello').to.equal('hello');\n   *     expect(42).to.equal(42);\n   *     expect(1).to.not.equal(true);\n   *     expect({ foo: 'bar' }).to.not.equal({ foo: 'bar' });\n   *     expect({ foo: 'bar' }).to.deep.equal({ foo: 'bar' });\n   *\n   * @name equal\n   * @alias equals\n   * @alias eq\n   * @alias deep.equal\n   * @param {Mixed} value\n   * @param {String} message _optional_\n   * @namespace BDD\n   * @api public\n   */\n\n  function assertEqual (val, msg) {\n    if (msg) flag(this, 'message', msg);\n    var obj = flag(this, 'object');\n    if (flag(this, 'deep')) {\n      return this.eql(val);\n    } else {\n      this.assert(\n          val === obj\n        , 'expected #{this} to equal #{exp}'\n        , 'expected #{this} to not equal #{exp}'\n        , val\n        , this._obj\n        , true\n      );\n    }\n  }\n\n  Assertion.addMethod('equal', assertEqual);\n  Assertion.addMethod('equals', assertEqual);\n  Assertion.addMethod('eq', assertEqual);\n\n  /**\n   * ### .eql(value)\n   *\n   * Asserts that the target is deeply equal to `value`.\n   *\n   *     expect({ foo: 'bar' }).to.eql({ foo: 'bar' });\n   *     expect([ 1, 2, 3 ]).to.eql([ 1, 2, 3 ]);\n   *\n   * @name eql\n   * @alias eqls\n   * @param {Mixed} value\n   * @param {String} message _optional_\n   * @namespace BDD\n   * @api public\n   */\n\n  function assertEql(obj, msg) {\n    if (msg) flag(this, 'message', msg);\n    this.assert(\n        _.eql(obj, flag(this, 'object'))\n      , 'expected #{this} to deeply equal #{exp}'\n      , 'expected #{this} to not deeply equal #{exp}'\n      , obj\n      , this._obj\n      , true\n    );\n  }\n\n  Assertion.addMethod('eql', assertEql);\n  Assertion.addMethod('eqls', assertEql);\n\n  /**\n   * ### .above(value)\n   *\n   * Asserts that the target is greater than `value`.\n   *\n   *     expect(10).to.be.above(5);\n   *\n   * Can also be used in conjunction with `length` to\n   * assert a minimum length. The benefit being a\n   * more informative error message than if the length\n   * was supplied directly.\n   *\n   *     expect('foo').to.have.length.above(2);\n   *     expect([ 1, 2, 3 ]).to.have.length.above(2);\n   *\n   * @name above\n   * @alias gt\n   * @alias greaterThan\n   * @param {Number} value\n   * @param {String} message _optional_\n   * @namespace BDD\n   * @api public\n   */\n\n  function assertAbove (n, msg) {\n    if (msg) flag(this, 'message', msg);\n    var obj = flag(this, 'object');\n    if (flag(this, 'doLength')) {\n      new Assertion(obj, msg).to.have.property('length');\n      var len = obj.length;\n      this.assert(\n          len > n\n        , 'expected #{this} to have a length above #{exp} but got #{act}'\n        , 'expected #{this} to not have a length above #{exp}'\n        , n\n        , len\n      );\n    } else {\n      this.assert(\n          obj > n\n        , 'expected #{this} to be above ' + n\n        , 'expected #{this} to be at most ' + n\n      );\n    }\n  }\n\n  Assertion.addMethod('above', assertAbove);\n  Assertion.addMethod('gt', assertAbove);\n  Assertion.addMethod('greaterThan', assertAbove);\n\n  /**\n   * ### .least(value)\n   *\n   * Asserts that the target is greater than or equal to `value`.\n   *\n   *     expect(10).to.be.at.least(10);\n   *\n   * Can also be used in conjunction with `length` to\n   * assert a minimum length. The benefit being a\n   * more informative error message than if the length\n   * was supplied directly.\n   *\n   *     expect('foo').to.have.length.of.at.least(2);\n   *     expect([ 1, 2, 3 ]).to.have.length.of.at.least(3);\n   *\n   * @name least\n   * @alias gte\n   * @param {Number} value\n   * @param {String} message _optional_\n   * @namespace BDD\n   * @api public\n   */\n\n  function assertLeast (n, msg) {\n    if (msg) flag(this, 'message', msg);\n    var obj = flag(this, 'object');\n    if (flag(this, 'doLength')) {\n      new Assertion(obj, msg).to.have.property('length');\n      var len = obj.length;\n      this.assert(\n          len >= n\n        , 'expected #{this} to have a length at least #{exp} but got #{act}'\n        , 'expected #{this} to have a length below #{exp}'\n        , n\n        , len\n      );\n    } else {\n      this.assert(\n          obj >= n\n        , 'expected #{this} to be at least ' + n\n        , 'expected #{this} to be below ' + n\n      );\n    }\n  }\n\n  Assertion.addMethod('least', assertLeast);\n  Assertion.addMethod('gte', assertLeast);\n\n  /**\n   * ### .below(value)\n   *\n   * Asserts that the target is less than `value`.\n   *\n   *     expect(5).to.be.below(10);\n   *\n   * Can also be used in conjunction with `length` to\n   * assert a maximum length. The benefit being a\n   * more informative error message than if the length\n   * was supplied directly.\n   *\n   *     expect('foo').to.have.length.below(4);\n   *     expect([ 1, 2, 3 ]).to.have.length.below(4);\n   *\n   * @name below\n   * @alias lt\n   * @alias lessThan\n   * @param {Number} value\n   * @param {String} message _optional_\n   * @namespace BDD\n   * @api public\n   */\n\n  function assertBelow (n, msg) {\n    if (msg) flag(this, 'message', msg);\n    var obj = flag(this, 'object');\n    if (flag(this, 'doLength')) {\n      new Assertion(obj, msg).to.have.property('length');\n      var len = obj.length;\n      this.assert(\n          len < n\n        , 'expected #{this} to have a length below #{exp} but got #{act}'\n        , 'expected #{this} to not have a length below #{exp}'\n        , n\n        , len\n      );\n    } else {\n      this.assert(\n          obj < n\n        , 'expected #{this} to be below ' + n\n        , 'expected #{this} to be at least ' + n\n      );\n    }\n  }\n\n  Assertion.addMethod('below', assertBelow);\n  Assertion.addMethod('lt', assertBelow);\n  Assertion.addMethod('lessThan', assertBelow);\n\n  /**\n   * ### .most(value)\n   *\n   * Asserts that the target is less than or equal to `value`.\n   *\n   *     expect(5).to.be.at.most(5);\n   *\n   * Can also be used in conjunction with `length` to\n   * assert a maximum length. The benefit being a\n   * more informative error message than if the length\n   * was supplied directly.\n   *\n   *     expect('foo').to.have.length.of.at.most(4);\n   *     expect([ 1, 2, 3 ]).to.have.length.of.at.most(3);\n   *\n   * @name most\n   * @alias lte\n   * @param {Number} value\n   * @param {String} message _optional_\n   * @namespace BDD\n   * @api public\n   */\n\n  function assertMost (n, msg) {\n    if (msg) flag(this, 'message', msg);\n    var obj = flag(this, 'object');\n    if (flag(this, 'doLength')) {\n      new Assertion(obj, msg).to.have.property('length');\n      var len = obj.length;\n      this.assert(\n          len <= n\n        , 'expected #{this} to have a length at most #{exp} but got #{act}'\n        , 'expected #{this} to have a length above #{exp}'\n        , n\n        , len\n      );\n    } else {\n      this.assert(\n          obj <= n\n        , 'expected #{this} to be at most ' + n\n        , 'expected #{this} to be above ' + n\n      );\n    }\n  }\n\n  Assertion.addMethod('most', assertMost);\n  Assertion.addMethod('lte', assertMost);\n\n  /**\n   * ### .within(start, finish)\n   *\n   * Asserts that the target is within a range.\n   *\n   *     expect(7).to.be.within(5,10);\n   *\n   * Can also be used in conjunction with `length` to\n   * assert a length range. The benefit being a\n   * more informative error message than if the length\n   * was supplied directly.\n   *\n   *     expect('foo').to.have.length.within(2,4);\n   *     expect([ 1, 2, 3 ]).to.have.length.within(2,4);\n   *\n   * @name within\n   * @param {Number} start lowerbound inclusive\n   * @param {Number} finish upperbound inclusive\n   * @param {String} message _optional_\n   * @namespace BDD\n   * @api public\n   */\n\n  Assertion.addMethod('within', function (start, finish, msg) {\n    if (msg) flag(this, 'message', msg);\n    var obj = flag(this, 'object')\n      , range = start + '..' + finish;\n    if (flag(this, 'doLength')) {\n      new Assertion(obj, msg).to.have.property('length');\n      var len = obj.length;\n      this.assert(\n          len >= start && len <= finish\n        , 'expected #{this} to have a length within ' + range\n        , 'expected #{this} to not have a length within ' + range\n      );\n    } else {\n      this.assert(\n          obj >= start && obj <= finish\n        , 'expected #{this} to be within ' + range\n        , 'expected #{this} to not be within ' + range\n      );\n    }\n  });\n\n  /**\n   * ### .instanceof(constructor)\n   *\n   * Asserts that the target is an instance of `constructor`.\n   *\n   *     var Tea = function (name) { this.name = name; }\n   *       , Chai = new Tea('chai');\n   *\n   *     expect(Chai).to.be.an.instanceof(Tea);\n   *     expect([ 1, 2, 3 ]).to.be.instanceof(Array);\n   *\n   * @name instanceof\n   * @param {Constructor} constructor\n   * @param {String} message _optional_\n   * @alias instanceOf\n   * @namespace BDD\n   * @api public\n   */\n\n  function assertInstanceOf (constructor, msg) {\n    if (msg) flag(this, 'message', msg);\n    var name = _.getName(constructor);\n    this.assert(\n        flag(this, 'object') instanceof constructor\n      , 'expected #{this} to be an instance of ' + name\n      , 'expected #{this} to not be an instance of ' + name\n    );\n  };\n\n  Assertion.addMethod('instanceof', assertInstanceOf);\n  Assertion.addMethod('instanceOf', assertInstanceOf);\n\n  /**\n   * ### .property(name, [value])\n   *\n   * Asserts that the target has a property `name`, optionally asserting that\n   * the value of that property is strictly equal to  `value`.\n   * If the `deep` flag is set, you can use dot- and bracket-notation for deep\n   * references into objects and arrays.\n   *\n   *     // simple referencing\n   *     var obj = { foo: 'bar' };\n   *     expect(obj).to.have.property('foo');\n   *     expect(obj).to.have.property('foo', 'bar');\n   *\n   *     // deep referencing\n   *     var deepObj = {\n   *         green: { tea: 'matcha' }\n   *       , teas: [ 'chai', 'matcha', { tea: 'konacha' } ]\n   *     };\n   *\n   *     expect(deepObj).to.have.deep.property('green.tea', 'matcha');\n   *     expect(deepObj).to.have.deep.property('teas[1]', 'matcha');\n   *     expect(deepObj).to.have.deep.property('teas[2].tea', 'konacha');\n   *\n   * You can also use an array as the starting point of a `deep.property`\n   * assertion, or traverse nested arrays.\n   *\n   *     var arr = [\n   *         [ 'chai', 'matcha', 'konacha' ]\n   *       , [ { tea: 'chai' }\n   *         , { tea: 'matcha' }\n   *         , { tea: 'konacha' } ]\n   *     ];\n   *\n   *     expect(arr).to.have.deep.property('[0][1]', 'matcha');\n   *     expect(arr).to.have.deep.property('[1][2].tea', 'konacha');\n   *\n   * Furthermore, `property` changes the subject of the assertion\n   * to be the value of that property from the original object. This\n   * permits for further chainable assertions on that property.\n   *\n   *     expect(obj).to.have.property('foo')\n   *       .that.is.a('string');\n   *     expect(deepObj).to.have.property('green')\n   *       .that.is.an('object')\n   *       .that.deep.equals({ tea: 'matcha' });\n   *     expect(deepObj).to.have.property('teas')\n   *       .that.is.an('array')\n   *       .with.deep.property('[2]')\n   *         .that.deep.equals({ tea: 'konacha' });\n   *\n   * Note that dots and bracket in `name` must be backslash-escaped when\n   * the `deep` flag is set, while they must NOT be escaped when the `deep`\n   * flag is not set.\n   *\n   *     // simple referencing\n   *     var css = { '.link[target]': 42 };\n   *     expect(css).to.have.property('.link[target]', 42);\n   *\n   *     // deep referencing\n   *     var deepCss = { '.link': { '[target]': 42 }};\n   *     expect(deepCss).to.have.deep.property('\\\\.link.\\\\[target\\\\]', 42);\n   *\n   * @name property\n   * @alias deep.property\n   * @param {String} name\n   * @param {Mixed} value (optional)\n   * @param {String} message _optional_\n   * @returns value of property for chaining\n   * @namespace BDD\n   * @api public\n   */\n\n  Assertion.addMethod('property', function (name, val, msg) {\n    if (msg) flag(this, 'message', msg);\n\n    var isDeep = !!flag(this, 'deep')\n      , descriptor = isDeep ? 'deep property ' : 'property '\n      , negate = flag(this, 'negate')\n      , obj = flag(this, 'object')\n      , pathInfo = isDeep ? _.getPathInfo(name, obj) : null\n      , hasProperty = isDeep\n        ? pathInfo.exists\n        : _.hasProperty(name, obj)\n      , value = isDeep\n        ? pathInfo.value\n        : obj[name];\n\n    if (negate && arguments.length > 1) {\n      if (undefined === value) {\n        msg = (msg != null) ? msg + ': ' : '';\n        throw new Error(msg + _.inspect(obj) + ' has no ' + descriptor + _.inspect(name));\n      }\n    } else {\n      this.assert(\n          hasProperty\n        , 'expected #{this} to have a ' + descriptor + _.inspect(name)\n        , 'expected #{this} to not have ' + descriptor + _.inspect(name));\n    }\n\n    if (arguments.length > 1) {\n      this.assert(\n          val === value\n        , 'expected #{this} to have a ' + descriptor + _.inspect(name) + ' of #{exp}, but got #{act}'\n        , 'expected #{this} to not have a ' + descriptor + _.inspect(name) + ' of #{act}'\n        , val\n        , value\n      );\n    }\n\n    flag(this, 'object', value);\n  });\n\n\n  /**\n   * ### .ownProperty(name)\n   *\n   * Asserts that the target has an own property `name`.\n   *\n   *     expect('test').to.have.ownProperty('length');\n   *\n   * @name ownProperty\n   * @alias haveOwnProperty\n   * @param {String} name\n   * @param {String} message _optional_\n   * @namespace BDD\n   * @api public\n   */\n\n  function assertOwnProperty (name, msg) {\n    if (msg) flag(this, 'message', msg);\n    var obj = flag(this, 'object');\n    this.assert(\n        obj.hasOwnProperty(name)\n      , 'expected #{this} to have own property ' + _.inspect(name)\n      , 'expected #{this} to not have own property ' + _.inspect(name)\n    );\n  }\n\n  Assertion.addMethod('ownProperty', assertOwnProperty);\n  Assertion.addMethod('haveOwnProperty', assertOwnProperty);\n\n  /**\n   * ### .ownPropertyDescriptor(name[, descriptor[, message]])\n   *\n   * Asserts that the target has an own property descriptor `name`, that optionally matches `descriptor`.\n   *\n   *     expect('test').to.have.ownPropertyDescriptor('length');\n   *     expect('test').to.have.ownPropertyDescriptor('length', { enumerable: false, configurable: false, writable: false, value: 4 });\n   *     expect('test').not.to.have.ownPropertyDescriptor('length', { enumerable: false, configurable: false, writable: false, value: 3 });\n   *     expect('test').ownPropertyDescriptor('length').to.have.property('enumerable', false);\n   *     expect('test').ownPropertyDescriptor('length').to.have.keys('value');\n   *\n   * @name ownPropertyDescriptor\n   * @alias haveOwnPropertyDescriptor\n   * @param {String} name\n   * @param {Object} descriptor _optional_\n   * @param {String} message _optional_\n   * @namespace BDD\n   * @api public\n   */\n\n  function assertOwnPropertyDescriptor (name, descriptor, msg) {\n    if (typeof descriptor === 'string') {\n      msg = descriptor;\n      descriptor = null;\n    }\n    if (msg) flag(this, 'message', msg);\n    var obj = flag(this, 'object');\n    var actualDescriptor = Object.getOwnPropertyDescriptor(Object(obj), name);\n    if (actualDescriptor && descriptor) {\n      this.assert(\n          _.eql(descriptor, actualDescriptor)\n        , 'expected the own property descriptor for ' + _.inspect(name) + ' on #{this} to match ' + _.inspect(descriptor) + ', got ' + _.inspect(actualDescriptor)\n        , 'expected the own property descriptor for ' + _.inspect(name) + ' on #{this} to not match ' + _.inspect(descriptor)\n        , descriptor\n        , actualDescriptor\n        , true\n      );\n    } else {\n      this.assert(\n          actualDescriptor\n        , 'expected #{this} to have an own property descriptor for ' + _.inspect(name)\n        , 'expected #{this} to not have an own property descriptor for ' + _.inspect(name)\n      );\n    }\n    flag(this, 'object', actualDescriptor);\n  }\n\n  Assertion.addMethod('ownPropertyDescriptor', assertOwnPropertyDescriptor);\n  Assertion.addMethod('haveOwnPropertyDescriptor', assertOwnPropertyDescriptor);\n\n  /**\n   * ### .length\n   *\n   * Sets the `doLength` flag later used as a chain precursor to a value\n   * comparison for the `length` property.\n   *\n   *     expect('foo').to.have.length.above(2);\n   *     expect([ 1, 2, 3 ]).to.have.length.above(2);\n   *     expect('foo').to.have.length.below(4);\n   *     expect([ 1, 2, 3 ]).to.have.length.below(4);\n   *     expect('foo').to.have.length.within(2,4);\n   *     expect([ 1, 2, 3 ]).to.have.length.within(2,4);\n   *\n   * *Deprecation notice:* Using `length` as an assertion will be deprecated\n   * in version 2.4.0 and removed in 3.0.0. Code using the old style of\n   * asserting for `length` property value using `length(value)` should be\n   * switched to use `lengthOf(value)` instead.\n   *\n   * @name length\n   * @namespace BDD\n   * @api public\n   */\n\n  /**\n   * ### .lengthOf(value[, message])\n   *\n   * Asserts that the target's `length` property has\n   * the expected value.\n   *\n   *     expect([ 1, 2, 3]).to.have.lengthOf(3);\n   *     expect('foobar').to.have.lengthOf(6);\n   *\n   * @name lengthOf\n   * @param {Number} length\n   * @param {String} message _optional_\n   * @namespace BDD\n   * @api public\n   */\n\n  function assertLengthChain () {\n    flag(this, 'doLength', true);\n  }\n\n  function assertLength (n, msg) {\n    if (msg) flag(this, 'message', msg);\n    var obj = flag(this, 'object');\n    new Assertion(obj, msg).to.have.property('length');\n    var len = obj.length;\n\n    this.assert(\n        len == n\n      , 'expected #{this} to have a length of #{exp} but got #{act}'\n      , 'expected #{this} to not have a length of #{act}'\n      , n\n      , len\n    );\n  }\n\n  Assertion.addChainableMethod('length', assertLength, assertLengthChain);\n  Assertion.addMethod('lengthOf', assertLength);\n\n  /**\n   * ### .match(regexp)\n   *\n   * Asserts that the target matches a regular expression.\n   *\n   *     expect('foobar').to.match(/^foo/);\n   *\n   * @name match\n   * @alias matches\n   * @param {RegExp} RegularExpression\n   * @param {String} message _optional_\n   * @namespace BDD\n   * @api public\n   */\n  function assertMatch(re, msg) {\n    if (msg) flag(this, 'message', msg);\n    var obj = flag(this, 'object');\n    this.assert(\n        re.exec(obj)\n      , 'expected #{this} to match ' + re\n      , 'expected #{this} not to match ' + re\n    );\n  }\n\n  Assertion.addMethod('match', assertMatch);\n  Assertion.addMethod('matches', assertMatch);\n\n  /**\n   * ### .string(string)\n   *\n   * Asserts that the string target contains another string.\n   *\n   *     expect('foobar').to.have.string('bar');\n   *\n   * @name string\n   * @param {String} string\n   * @param {String} message _optional_\n   * @namespace BDD\n   * @api public\n   */\n\n  Assertion.addMethod('string', function (str, msg) {\n    if (msg) flag(this, 'message', msg);\n    var obj = flag(this, 'object');\n    new Assertion(obj, msg).is.a('string');\n\n    this.assert(\n        ~obj.indexOf(str)\n      , 'expected #{this} to contain ' + _.inspect(str)\n      , 'expected #{this} to not contain ' + _.inspect(str)\n    );\n  });\n\n\n  /**\n   * ### .keys(key1, [key2], [...])\n   *\n   * Asserts that the target contains any or all of the passed-in keys.\n   * Use in combination with `any`, `all`, `contains`, or `have` will affect\n   * what will pass.\n   *\n   * When used in conjunction with `any`, at least one key that is passed\n   * in must exist in the target object. This is regardless whether or not\n   * the `have` or `contain` qualifiers are used. Note, either `any` or `all`\n   * should be used in the assertion. If neither are used, the assertion is\n   * defaulted to `all`.\n   *\n   * When both `all` and `contain` are used, the target object must have at\n   * least all of the passed-in keys but may have more keys not listed.\n   *\n   * When both `all` and `have` are used, the target object must both contain\n   * all of the passed-in keys AND the number of keys in the target object must\n   * match the number of keys passed in (in other words, a target object must\n   * have all and only all of the passed-in keys).\n   *\n   *     expect({ foo: 1, bar: 2 }).to.have.any.keys('foo', 'baz');\n   *     expect({ foo: 1, bar: 2 }).to.have.any.keys('foo');\n   *     expect({ foo: 1, bar: 2 }).to.contain.any.keys('bar', 'baz');\n   *     expect({ foo: 1, bar: 2 }).to.contain.any.keys(['foo']);\n   *     expect({ foo: 1, bar: 2 }).to.contain.any.keys({'foo': 6});\n   *     expect({ foo: 1, bar: 2 }).to.have.all.keys(['bar', 'foo']);\n   *     expect({ foo: 1, bar: 2 }).to.have.all.keys({'bar': 6, 'foo': 7});\n   *     expect({ foo: 1, bar: 2, baz: 3 }).to.contain.all.keys(['bar', 'foo']);\n   *     expect({ foo: 1, bar: 2, baz: 3 }).to.contain.all.keys({'bar': 6});\n   *\n   *\n   * @name keys\n   * @alias key\n   * @param {...String|Array|Object} keys\n   * @namespace BDD\n   * @api public\n   */\n\n  function assertKeys (keys) {\n    var obj = flag(this, 'object')\n      , str\n      , ok = true\n      , mixedArgsMsg = 'keys must be given single argument of Array|Object|String, or multiple String arguments';\n\n    switch (_.type(keys)) {\n      case \"array\":\n        if (arguments.length > 1) throw (new Error(mixedArgsMsg));\n        break;\n      case \"object\":\n        if (arguments.length > 1) throw (new Error(mixedArgsMsg));\n        keys = Object.keys(keys);\n        break;\n      default:\n        keys = Array.prototype.slice.call(arguments);\n    }\n\n    if (!keys.length) throw new Error('keys required');\n\n    var actual = Object.keys(obj)\n      , expected = keys\n      , len = keys.length\n      , any = flag(this, 'any')\n      , all = flag(this, 'all');\n\n    if (!any && !all) {\n      all = true;\n    }\n\n    // Has any\n    if (any) {\n      var intersection = expected.filter(function(key) {\n        return ~actual.indexOf(key);\n      });\n      ok = intersection.length > 0;\n    }\n\n    // Has all\n    if (all) {\n      ok = keys.every(function(key){\n        return ~actual.indexOf(key);\n      });\n      if (!flag(this, 'negate') && !flag(this, 'contains')) {\n        ok = ok && keys.length == actual.length;\n      }\n    }\n\n    // Key string\n    if (len > 1) {\n      keys = keys.map(function(key){\n        return _.inspect(key);\n      });\n      var last = keys.pop();\n      if (all) {\n        str = keys.join(', ') + ', and ' + last;\n      }\n      if (any) {\n        str = keys.join(', ') + ', or ' + last;\n      }\n    } else {\n      str = _.inspect(keys[0]);\n    }\n\n    // Form\n    str = (len > 1 ? 'keys ' : 'key ') + str;\n\n    // Have / include\n    str = (flag(this, 'contains') ? 'contain ' : 'have ') + str;\n\n    // Assertion\n    this.assert(\n        ok\n      , 'expected #{this} to ' + str\n      , 'expected #{this} to not ' + str\n      , expected.slice(0).sort()\n      , actual.sort()\n      , true\n    );\n  }\n\n  Assertion.addMethod('keys', assertKeys);\n  Assertion.addMethod('key', assertKeys);\n\n  /**\n   * ### .throw(constructor)\n   *\n   * Asserts that the function target will throw a specific error, or specific type of error\n   * (as determined using `instanceof`), optionally with a RegExp or string inclusion test\n   * for the error's message.\n   *\n   *     var err = new ReferenceError('This is a bad function.');\n   *     var fn = function () { throw err; }\n   *     expect(fn).to.throw(ReferenceError);\n   *     expect(fn).to.throw(Error);\n   *     expect(fn).to.throw(/bad function/);\n   *     expect(fn).to.not.throw('good function');\n   *     expect(fn).to.throw(ReferenceError, /bad function/);\n   *     expect(fn).to.throw(err);\n   *\n   * Please note that when a throw expectation is negated, it will check each\n   * parameter independently, starting with error constructor type. The appropriate way\n   * to check for the existence of a type of error but for a message that does not match\n   * is to use `and`.\n   *\n   *     expect(fn).to.throw(ReferenceError)\n   *        .and.not.throw(/good function/);\n   *\n   * @name throw\n   * @alias throws\n   * @alias Throw\n   * @param {ErrorConstructor} constructor\n   * @param {String|RegExp} expected error message\n   * @param {String} message _optional_\n   * @see https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Error#Error_types\n   * @returns error for chaining (null if no error)\n   * @namespace BDD\n   * @api public\n   */\n\n  function assertThrows (constructor, errMsg, msg) {\n    if (msg) flag(this, 'message', msg);\n    var obj = flag(this, 'object');\n    new Assertion(obj, msg).is.a('function');\n\n    var thrown = false\n      , desiredError = null\n      , name = null\n      , thrownError = null;\n\n    if (arguments.length === 0) {\n      errMsg = null;\n      constructor = null;\n    } else if (constructor && (constructor instanceof RegExp || 'string' === typeof constructor)) {\n      errMsg = constructor;\n      constructor = null;\n    } else if (constructor && constructor instanceof Error) {\n      desiredError = constructor;\n      constructor = null;\n      errMsg = null;\n    } else if (typeof constructor === 'function') {\n      name = constructor.prototype.name;\n      if (!name || (name === 'Error' && constructor !== Error)) {\n        name = constructor.name || (new constructor()).name;\n      }\n    } else {\n      constructor = null;\n    }\n\n    try {\n      obj();\n    } catch (err) {\n      // first, check desired error\n      if (desiredError) {\n        this.assert(\n            err === desiredError\n          , 'expected #{this} to throw #{exp} but #{act} was thrown'\n          , 'expected #{this} to not throw #{exp}'\n          , (desiredError instanceof Error ? desiredError.toString() : desiredError)\n          , (err instanceof Error ? err.toString() : err)\n        );\n\n        flag(this, 'object', err);\n        return this;\n      }\n\n      // next, check constructor\n      if (constructor) {\n        this.assert(\n            err instanceof constructor\n          , 'expected #{this} to throw #{exp} but #{act} was thrown'\n          , 'expected #{this} to not throw #{exp} but #{act} was thrown'\n          , name\n          , (err instanceof Error ? err.toString() : err)\n        );\n\n        if (!errMsg) {\n          flag(this, 'object', err);\n          return this;\n        }\n      }\n\n      // next, check message\n      var message = 'error' === _.type(err) && \"message\" in err\n        ? err.message\n        : '' + err;\n\n      if ((message != null) && errMsg && errMsg instanceof RegExp) {\n        this.assert(\n            errMsg.exec(message)\n          , 'expected #{this} to throw error matching #{exp} but got #{act}'\n          , 'expected #{this} to throw error not matching #{exp}'\n          , errMsg\n          , message\n        );\n\n        flag(this, 'object', err);\n        return this;\n      } else if ((message != null) && errMsg && 'string' === typeof errMsg) {\n        this.assert(\n            ~message.indexOf(errMsg)\n          , 'expected #{this} to throw error including #{exp} but got #{act}'\n          , 'expected #{this} to throw error not including #{act}'\n          , errMsg\n          , message\n        );\n\n        flag(this, 'object', err);\n        return this;\n      } else {\n        thrown = true;\n        thrownError = err;\n      }\n    }\n\n    var actuallyGot = ''\n      , expectedThrown = name !== null\n        ? name\n        : desiredError\n          ? '#{exp}' //_.inspect(desiredError)\n          : 'an error';\n\n    if (thrown) {\n      actuallyGot = ' but #{act} was thrown'\n    }\n\n    this.assert(\n        thrown === true\n      , 'expected #{this} to throw ' + expectedThrown + actuallyGot\n      , 'expected #{this} to not throw ' + expectedThrown + actuallyGot\n      , (desiredError instanceof Error ? desiredError.toString() : desiredError)\n      , (thrownError instanceof Error ? thrownError.toString() : thrownError)\n    );\n\n    flag(this, 'object', thrownError);\n  };\n\n  Assertion.addMethod('throw', assertThrows);\n  Assertion.addMethod('throws', assertThrows);\n  Assertion.addMethod('Throw', assertThrows);\n\n  /**\n   * ### .respondTo(method)\n   *\n   * Asserts that the object or class target will respond to a method.\n   *\n   *     Klass.prototype.bar = function(){};\n   *     expect(Klass).to.respondTo('bar');\n   *     expect(obj).to.respondTo('bar');\n   *\n   * To check if a constructor will respond to a static function,\n   * set the `itself` flag.\n   *\n   *     Klass.baz = function(){};\n   *     expect(Klass).itself.to.respondTo('baz');\n   *\n   * @name respondTo\n   * @alias respondsTo\n   * @param {String} method\n   * @param {String} message _optional_\n   * @namespace BDD\n   * @api public\n   */\n\n  function respondTo (method, msg) {\n    if (msg) flag(this, 'message', msg);\n    var obj = flag(this, 'object')\n      , itself = flag(this, 'itself')\n      , context = ('function' === _.type(obj) && !itself)\n        ? obj.prototype[method]\n        : obj[method];\n\n    this.assert(\n        'function' === typeof context\n      , 'expected #{this} to respond to ' + _.inspect(method)\n      , 'expected #{this} to not respond to ' + _.inspect(method)\n    );\n  }\n\n  Assertion.addMethod('respondTo', respondTo);\n  Assertion.addMethod('respondsTo', respondTo);\n\n  /**\n   * ### .itself\n   *\n   * Sets the `itself` flag, later used by the `respondTo` assertion.\n   *\n   *     function Foo() {}\n   *     Foo.bar = function() {}\n   *     Foo.prototype.baz = function() {}\n   *\n   *     expect(Foo).itself.to.respondTo('bar');\n   *     expect(Foo).itself.not.to.respondTo('baz');\n   *\n   * @name itself\n   * @namespace BDD\n   * @api public\n   */\n\n  Assertion.addProperty('itself', function () {\n    flag(this, 'itself', true);\n  });\n\n  /**\n   * ### .satisfy(method)\n   *\n   * Asserts that the target passes a given truth test.\n   *\n   *     expect(1).to.satisfy(function(num) { return num > 0; });\n   *\n   * @name satisfy\n   * @alias satisfies\n   * @param {Function} matcher\n   * @param {String} message _optional_\n   * @namespace BDD\n   * @api public\n   */\n\n  function satisfy (matcher, msg) {\n    if (msg) flag(this, 'message', msg);\n    var obj = flag(this, 'object');\n    var result = matcher(obj);\n    this.assert(\n        result\n      , 'expected #{this} to satisfy ' + _.objDisplay(matcher)\n      , 'expected #{this} to not satisfy' + _.objDisplay(matcher)\n      , this.negate ? false : true\n      , result\n    );\n  }\n\n  Assertion.addMethod('satisfy', satisfy);\n  Assertion.addMethod('satisfies', satisfy);\n\n  /**\n   * ### .closeTo(expected, delta)\n   *\n   * Asserts that the target is equal `expected`, to within a +/- `delta` range.\n   *\n   *     expect(1.5).to.be.closeTo(1, 0.5);\n   *\n   * @name closeTo\n   * @alias approximately\n   * @param {Number} expected\n   * @param {Number} delta\n   * @param {String} message _optional_\n   * @namespace BDD\n   * @api public\n   */\n\n  function closeTo(expected, delta, msg) {\n    if (msg) flag(this, 'message', msg);\n    var obj = flag(this, 'object');\n\n    new Assertion(obj, msg).is.a('number');\n    if (_.type(expected) !== 'number' || _.type(delta) !== 'number') {\n      throw new Error('the arguments to closeTo or approximately must be numbers');\n    }\n\n    this.assert(\n        Math.abs(obj - expected) <= delta\n      , 'expected #{this} to be close to ' + expected + ' +/- ' + delta\n      , 'expected #{this} not to be close to ' + expected + ' +/- ' + delta\n    );\n  }\n\n  Assertion.addMethod('closeTo', closeTo);\n  Assertion.addMethod('approximately', closeTo);\n\n  function isSubsetOf(subset, superset, cmp) {\n    return subset.every(function(elem) {\n      if (!cmp) return superset.indexOf(elem) !== -1;\n\n      return superset.some(function(elem2) {\n        return cmp(elem, elem2);\n      });\n    })\n  }\n\n  /**\n   * ### .members(set)\n   *\n   * Asserts that the target is a superset of `set`,\n   * or that the target and `set` have the same strictly-equal (===) members.\n   * Alternately, if the `deep` flag is set, set members are compared for deep\n   * equality.\n   *\n   *     expect([1, 2, 3]).to.include.members([3, 2]);\n   *     expect([1, 2, 3]).to.not.include.members([3, 2, 8]);\n   *\n   *     expect([4, 2]).to.have.members([2, 4]);\n   *     expect([5, 2]).to.not.have.members([5, 2, 1]);\n   *\n   *     expect([{ id: 1 }]).to.deep.include.members([{ id: 1 }]);\n   *\n   * @name members\n   * @param {Array} set\n   * @param {String} message _optional_\n   * @namespace BDD\n   * @api public\n   */\n\n  Assertion.addMethod('members', function (subset, msg) {\n    if (msg) flag(this, 'message', msg);\n    var obj = flag(this, 'object');\n\n    new Assertion(obj).to.be.an('array');\n    new Assertion(subset).to.be.an('array');\n\n    var cmp = flag(this, 'deep') ? _.eql : undefined;\n\n    if (flag(this, 'contains')) {\n      return this.assert(\n          isSubsetOf(subset, obj, cmp)\n        , 'expected #{this} to be a superset of #{act}'\n        , 'expected #{this} to not be a superset of #{act}'\n        , obj\n        , subset\n      );\n    }\n\n    this.assert(\n        isSubsetOf(obj, subset, cmp) && isSubsetOf(subset, obj, cmp)\n        , 'expected #{this} to have the same members as #{act}'\n        , 'expected #{this} to not have the same members as #{act}'\n        , obj\n        , subset\n    );\n  });\n\n  /**\n   * ### .oneOf(list)\n   *\n   * Assert that a value appears somewhere in the top level of array `list`.\n   *\n   *     expect('a').to.be.oneOf(['a', 'b', 'c']);\n   *     expect(9).to.not.be.oneOf(['z']);\n   *     expect([3]).to.not.be.oneOf([1, 2, [3]]);\n   *\n   *     var three = [3];\n   *     // for object-types, contents are not compared\n   *     expect(three).to.not.be.oneOf([1, 2, [3]]);\n   *     // comparing references works\n   *     expect(three).to.be.oneOf([1, 2, three]);\n   *\n   * @name oneOf\n   * @param {Array<*>} list\n   * @param {String} message _optional_\n   * @namespace BDD\n   * @api public\n   */\n\n  function oneOf (list, msg) {\n    if (msg) flag(this, 'message', msg);\n    var expected = flag(this, 'object');\n    new Assertion(list).to.be.an('array');\n\n    this.assert(\n        list.indexOf(expected) > -1\n      , 'expected #{this} to be one of #{exp}'\n      , 'expected #{this} to not be one of #{exp}'\n      , list\n      , expected\n    );\n  }\n\n  Assertion.addMethod('oneOf', oneOf);\n\n\n  /**\n   * ### .change(function)\n   *\n   * Asserts that a function changes an object property\n   *\n   *     var obj = { val: 10 };\n   *     var fn = function() { obj.val += 3 };\n   *     var noChangeFn = function() { return 'foo' + 'bar'; }\n   *     expect(fn).to.change(obj, 'val');\n   *     expect(noChangeFn).to.not.change(obj, 'val')\n   *\n   * @name change\n   * @alias changes\n   * @alias Change\n   * @param {String} object\n   * @param {String} property name\n   * @param {String} message _optional_\n   * @namespace BDD\n   * @api public\n   */\n\n  function assertChanges (object, prop, msg) {\n    if (msg) flag(this, 'message', msg);\n    var fn = flag(this, 'object');\n    new Assertion(object, msg).to.have.property(prop);\n    new Assertion(fn).is.a('function');\n\n    var initial = object[prop];\n    fn();\n\n    this.assert(\n      initial !== object[prop]\n      , 'expected .' + prop + ' to change'\n      , 'expected .' + prop + ' to not change'\n    );\n  }\n\n  Assertion.addChainableMethod('change', assertChanges);\n  Assertion.addChainableMethod('changes', assertChanges);\n\n  /**\n   * ### .increase(function)\n   *\n   * Asserts that a function increases an object property\n   *\n   *     var obj = { val: 10 };\n   *     var fn = function() { obj.val = 15 };\n   *     expect(fn).to.increase(obj, 'val');\n   *\n   * @name increase\n   * @alias increases\n   * @alias Increase\n   * @param {String} object\n   * @param {String} property name\n   * @param {String} message _optional_\n   * @namespace BDD\n   * @api public\n   */\n\n  function assertIncreases (object, prop, msg) {\n    if (msg) flag(this, 'message', msg);\n    var fn = flag(this, 'object');\n    new Assertion(object, msg).to.have.property(prop);\n    new Assertion(fn).is.a('function');\n\n    var initial = object[prop];\n    fn();\n\n    this.assert(\n      object[prop] - initial > 0\n      , 'expected .' + prop + ' to increase'\n      , 'expected .' + prop + ' to not increase'\n    );\n  }\n\n  Assertion.addChainableMethod('increase', assertIncreases);\n  Assertion.addChainableMethod('increases', assertIncreases);\n\n  /**\n   * ### .decrease(function)\n   *\n   * Asserts that a function decreases an object property\n   *\n   *     var obj = { val: 10 };\n   *     var fn = function() { obj.val = 5 };\n   *     expect(fn).to.decrease(obj, 'val');\n   *\n   * @name decrease\n   * @alias decreases\n   * @alias Decrease\n   * @param {String} object\n   * @param {String} property name\n   * @param {String} message _optional_\n   * @namespace BDD\n   * @api public\n   */\n\n  function assertDecreases (object, prop, msg) {\n    if (msg) flag(this, 'message', msg);\n    var fn = flag(this, 'object');\n    new Assertion(object, msg).to.have.property(prop);\n    new Assertion(fn).is.a('function');\n\n    var initial = object[prop];\n    fn();\n\n    this.assert(\n      object[prop] - initial < 0\n      , 'expected .' + prop + ' to decrease'\n      , 'expected .' + prop + ' to not decrease'\n    );\n  }\n\n  Assertion.addChainableMethod('decrease', assertDecreases);\n  Assertion.addChainableMethod('decreases', assertDecreases);\n\n  /**\n   * ### .extensible\n   *\n   * Asserts that the target is extensible (can have new properties added to\n   * it).\n   *\n   *     var nonExtensibleObject = Object.preventExtensions({});\n   *     var sealedObject = Object.seal({});\n   *     var frozenObject = Object.freeze({});\n   *\n   *     expect({}).to.be.extensible;\n   *     expect(nonExtensibleObject).to.not.be.extensible;\n   *     expect(sealedObject).to.not.be.extensible;\n   *     expect(frozenObject).to.not.be.extensible;\n   *\n   * @name extensible\n   * @namespace BDD\n   * @api public\n   */\n\n  Assertion.addProperty('extensible', function() {\n    var obj = flag(this, 'object');\n\n    // In ES5, if the argument to this method is not an object (a primitive), then it will cause a TypeError.\n    // In ES6, a non-object argument will be treated as if it was a non-extensible ordinary object, simply return false.\n    // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/isExtensible\n    // The following provides ES6 behavior when a TypeError is thrown under ES5.\n\n    var isExtensible;\n\n    try {\n      isExtensible = Object.isExtensible(obj);\n    } catch (err) {\n      if (err instanceof TypeError) isExtensible = false;\n      else throw err;\n    }\n\n    this.assert(\n      isExtensible\n      , 'expected #{this} to be extensible'\n      , 'expected #{this} to not be extensible'\n    );\n  });\n\n  /**\n   * ### .sealed\n   *\n   * Asserts that the target is sealed (cannot have new properties added to it\n   * and its existing properties cannot be removed).\n   *\n   *     var sealedObject = Object.seal({});\n   *     var frozenObject = Object.freeze({});\n   *\n   *     expect(sealedObject).to.be.sealed;\n   *     expect(frozenObject).to.be.sealed;\n   *     expect({}).to.not.be.sealed;\n   *\n   * @name sealed\n   * @namespace BDD\n   * @api public\n   */\n\n  Assertion.addProperty('sealed', function() {\n    var obj = flag(this, 'object');\n\n    // In ES5, if the argument to this method is not an object (a primitive), then it will cause a TypeError.\n    // In ES6, a non-object argument will be treated as if it was a sealed ordinary object, simply return true.\n    // See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/isSealed\n    // The following provides ES6 behavior when a TypeError is thrown under ES5.\n\n    var isSealed;\n\n    try {\n      isSealed = Object.isSealed(obj);\n    } catch (err) {\n      if (err instanceof TypeError) isSealed = true;\n      else throw err;\n    }\n\n    this.assert(\n      isSealed\n      , 'expected #{this} to be sealed'\n      , 'expected #{this} to not be sealed'\n    );\n  });\n\n  /**\n   * ### .frozen\n   *\n   * Asserts that the target is frozen (cannot have new properties added to it\n   * and its existing properties cannot be modified).\n   *\n   *     var frozenObject = Object.freeze({});\n   *\n   *     expect(frozenObject).to.be.frozen;\n   *     expect({}).to.not.be.frozen;\n   *\n   * @name frozen\n   * @namespace BDD\n   * @api public\n   */\n\n  Assertion.addProperty('frozen', function() {\n    var obj = flag(this, 'object');\n\n    // In ES5, if the argument to this method is not an object (a primitive), then it will cause a TypeError.\n    // In ES6, a non-object argument will be treated as if it was a frozen ordinary object, simply return true.\n    // See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/isFrozen\n    // The following provides ES6 behavior when a TypeError is thrown under ES5.\n\n    var isFrozen;\n\n    try {\n      isFrozen = Object.isFrozen(obj);\n    } catch (err) {\n      if (err instanceof TypeError) isFrozen = true;\n      else throw err;\n    }\n\n    this.assert(\n      isFrozen\n      , 'expected #{this} to be frozen'\n      , 'expected #{this} to not be frozen'\n    );\n  });\n};\n","/*!\n * chai\n * Copyright(c) 2011-2014 Jake Luer <jake@alogicalparadox.com>\n * MIT Licensed\n */\n\n\nmodule.exports = function (chai, util) {\n\n  /*!\n   * Chai dependencies.\n   */\n\n  var Assertion = chai.Assertion\n    , flag = util.flag;\n\n  /*!\n   * Module export.\n   */\n\n  /**\n   * ### assert(expression, message)\n   *\n   * Write your own test expressions.\n   *\n   *     assert('foo' !== 'bar', 'foo is not bar');\n   *     assert(Array.isArray([]), 'empty arrays are arrays');\n   *\n   * @param {Mixed} expression to test for truthiness\n   * @param {String} message to display on error\n   * @name assert\n   * @namespace Assert\n   * @api public\n   */\n\n  var assert = chai.assert = function (express, errmsg) {\n    var test = new Assertion(null, null, chai.assert);\n    test.assert(\n        express\n      , errmsg\n      , '[ negation message unavailable ]'\n    );\n  };\n\n  /**\n   * ### .fail(actual, expected, [message], [operator])\n   *\n   * Throw a failure. Node.js `assert` module-compatible.\n   *\n   * @name fail\n   * @param {Mixed} actual\n   * @param {Mixed} expected\n   * @param {String} message\n   * @param {String} operator\n   * @namespace Assert\n   * @api public\n   */\n\n  assert.fail = function (actual, expected, message, operator) {\n    message = message || 'assert.fail()';\n    throw new chai.AssertionError(message, {\n        actual: actual\n      , expected: expected\n      , operator: operator\n    }, assert.fail);\n  };\n\n  /**\n   * ### .isOk(object, [message])\n   *\n   * Asserts that `object` is truthy.\n   *\n   *     assert.isOk('everything', 'everything is ok');\n   *     assert.isOk(false, 'this will fail');\n   *\n   * @name isOk\n   * @alias ok\n   * @param {Mixed} object to test\n   * @param {String} message\n   * @namespace Assert\n   * @api public\n   */\n\n  assert.isOk = function (val, msg) {\n    new Assertion(val, msg).is.ok;\n  };\n\n  /**\n   * ### .isNotOk(object, [message])\n   *\n   * Asserts that `object` is falsy.\n   *\n   *     assert.isNotOk('everything', 'this will fail');\n   *     assert.isNotOk(false, 'this will pass');\n   *\n   * @name isNotOk\n   * @alias notOk\n   * @param {Mixed} object to test\n   * @param {String} message\n   * @namespace Assert\n   * @api public\n   */\n\n  assert.isNotOk = function (val, msg) {\n    new Assertion(val, msg).is.not.ok;\n  };\n\n  /**\n   * ### .equal(actual, expected, [message])\n   *\n   * Asserts non-strict equality (`==`) of `actual` and `expected`.\n   *\n   *     assert.equal(3, '3', '== coerces values to strings');\n   *\n   * @name equal\n   * @param {Mixed} actual\n   * @param {Mixed} expected\n   * @param {String} message\n   * @namespace Assert\n   * @api public\n   */\n\n  assert.equal = function (act, exp, msg) {\n    var test = new Assertion(act, msg, assert.equal);\n\n    test.assert(\n        exp == flag(test, 'object')\n      , 'expected #{this} to equal #{exp}'\n      , 'expected #{this} to not equal #{act}'\n      , exp\n      , act\n    );\n  };\n\n  /**\n   * ### .notEqual(actual, expected, [message])\n   *\n   * Asserts non-strict inequality (`!=`) of `actual` and `expected`.\n   *\n   *     assert.notEqual(3, 4, 'these numbers are not equal');\n   *\n   * @name notEqual\n   * @param {Mixed} actual\n   * @param {Mixed} expected\n   * @param {String} message\n   * @namespace Assert\n   * @api public\n   */\n\n  assert.notEqual = function (act, exp, msg) {\n    var test = new Assertion(act, msg, assert.notEqual);\n\n    test.assert(\n        exp != flag(test, 'object')\n      , 'expected #{this} to not equal #{exp}'\n      , 'expected #{this} to equal #{act}'\n      , exp\n      , act\n    );\n  };\n\n  /**\n   * ### .strictEqual(actual, expected, [message])\n   *\n   * Asserts strict equality (`===`) of `actual` and `expected`.\n   *\n   *     assert.strictEqual(true, true, 'these booleans are strictly equal');\n   *\n   * @name strictEqual\n   * @param {Mixed} actual\n   * @param {Mixed} expected\n   * @param {String} message\n   * @namespace Assert\n   * @api public\n   */\n\n  assert.strictEqual = function (act, exp, msg) {\n    new Assertion(act, msg).to.equal(exp);\n  };\n\n  /**\n   * ### .notStrictEqual(actual, expected, [message])\n   *\n   * Asserts strict inequality (`!==`) of `actual` and `expected`.\n   *\n   *     assert.notStrictEqual(3, '3', 'no coercion for strict equality');\n   *\n   * @name notStrictEqual\n   * @param {Mixed} actual\n   * @param {Mixed} expected\n   * @param {String} message\n   * @namespace Assert\n   * @api public\n   */\n\n  assert.notStrictEqual = function (act, exp, msg) {\n    new Assertion(act, msg).to.not.equal(exp);\n  };\n\n  /**\n   * ### .deepEqual(actual, expected, [message])\n   *\n   * Asserts that `actual` is deeply equal to `expected`.\n   *\n   *     assert.deepEqual({ tea: 'green' }, { tea: 'green' });\n   *\n   * @name deepEqual\n   * @param {Mixed} actual\n   * @param {Mixed} expected\n   * @param {String} message\n   * @namespace Assert\n   * @api public\n   */\n\n  assert.deepEqual = function (act, exp, msg) {\n    new Assertion(act, msg).to.eql(exp);\n  };\n\n  /**\n   * ### .notDeepEqual(actual, expected, [message])\n   *\n   * Assert that `actual` is not deeply equal to `expected`.\n   *\n   *     assert.notDeepEqual({ tea: 'green' }, { tea: 'jasmine' });\n   *\n   * @name notDeepEqual\n   * @param {Mixed} actual\n   * @param {Mixed} expected\n   * @param {String} message\n   * @namespace Assert\n   * @api public\n   */\n\n  assert.notDeepEqual = function (act, exp, msg) {\n    new Assertion(act, msg).to.not.eql(exp);\n  };\n\n   /**\n   * ### .isAbove(valueToCheck, valueToBeAbove, [message])\n   *\n   * Asserts `valueToCheck` is strictly greater than (>) `valueToBeAbove`\n   *\n   *     assert.isAbove(5, 2, '5 is strictly greater than 2');\n   *\n   * @name isAbove\n   * @param {Mixed} valueToCheck\n   * @param {Mixed} valueToBeAbove\n   * @param {String} message\n   * @namespace Assert\n   * @api public\n   */\n\n  assert.isAbove = function (val, abv, msg) {\n    new Assertion(val, msg).to.be.above(abv);\n  };\n\n   /**\n   * ### .isAtLeast(valueToCheck, valueToBeAtLeast, [message])\n   *\n   * Asserts `valueToCheck` is greater than or equal to (>=) `valueToBeAtLeast`\n   *\n   *     assert.isAtLeast(5, 2, '5 is greater or equal to 2');\n   *     assert.isAtLeast(3, 3, '3 is greater or equal to 3');\n   *\n   * @name isAtLeast\n   * @param {Mixed} valueToCheck\n   * @param {Mixed} valueToBeAtLeast\n   * @param {String} message\n   * @namespace Assert\n   * @api public\n   */\n\n  assert.isAtLeast = function (val, atlst, msg) {\n    new Assertion(val, msg).to.be.least(atlst);\n  };\n\n   /**\n   * ### .isBelow(valueToCheck, valueToBeBelow, [message])\n   *\n   * Asserts `valueToCheck` is strictly less than (<) `valueToBeBelow`\n   *\n   *     assert.isBelow(3, 6, '3 is strictly less than 6');\n   *\n   * @name isBelow\n   * @param {Mixed} valueToCheck\n   * @param {Mixed} valueToBeBelow\n   * @param {String} message\n   * @namespace Assert\n   * @api public\n   */\n\n  assert.isBelow = function (val, blw, msg) {\n    new Assertion(val, msg).to.be.below(blw);\n  };\n\n   /**\n   * ### .isAtMost(valueToCheck, valueToBeAtMost, [message])\n   *\n   * Asserts `valueToCheck` is less than or equal to (<=) `valueToBeAtMost`\n   *\n   *     assert.isAtMost(3, 6, '3 is less than or equal to 6');\n   *     assert.isAtMost(4, 4, '4 is less than or equal to 4');\n   *\n   * @name isAtMost\n   * @param {Mixed} valueToCheck\n   * @param {Mixed} valueToBeAtMost\n   * @param {String} message\n   * @namespace Assert\n   * @api public\n   */\n\n  assert.isAtMost = function (val, atmst, msg) {\n    new Assertion(val, msg).to.be.most(atmst);\n  };\n\n  /**\n   * ### .isTrue(value, [message])\n   *\n   * Asserts that `value` is true.\n   *\n   *     var teaServed = true;\n   *     assert.isTrue(teaServed, 'the tea has been served');\n   *\n   * @name isTrue\n   * @param {Mixed} value\n   * @param {String} message\n   * @namespace Assert\n   * @api public\n   */\n\n  assert.isTrue = function (val, msg) {\n    new Assertion(val, msg).is['true'];\n  };\n\n  /**\n   * ### .isNotTrue(value, [message])\n   *\n   * Asserts that `value` is not true.\n   *\n   *     var tea = 'tasty chai';\n   *     assert.isNotTrue(tea, 'great, time for tea!');\n   *\n   * @name isNotTrue\n   * @param {Mixed} value\n   * @param {String} message\n   * @namespace Assert\n   * @api public\n   */\n\n  assert.isNotTrue = function (val, msg) {\n    new Assertion(val, msg).to.not.equal(true);\n  };\n\n  /**\n   * ### .isFalse(value, [message])\n   *\n   * Asserts that `value` is false.\n   *\n   *     var teaServed = false;\n   *     assert.isFalse(teaServed, 'no tea yet? hmm...');\n   *\n   * @name isFalse\n   * @param {Mixed} value\n   * @param {String} message\n   * @namespace Assert\n   * @api public\n   */\n\n  assert.isFalse = function (val, msg) {\n    new Assertion(val, msg).is['false'];\n  };\n\n  /**\n   * ### .isNotFalse(value, [message])\n   *\n   * Asserts that `value` is not false.\n   *\n   *     var tea = 'tasty chai';\n   *     assert.isNotFalse(tea, 'great, time for tea!');\n   *\n   * @name isNotFalse\n   * @param {Mixed} value\n   * @param {String} message\n   * @namespace Assert\n   * @api public\n   */\n\n  assert.isNotFalse = function (val, msg) {\n    new Assertion(val, msg).to.not.equal(false);\n  };\n\n  /**\n   * ### .isNull(value, [message])\n   *\n   * Asserts that `value` is null.\n   *\n   *     assert.isNull(err, 'there was no error');\n   *\n   * @name isNull\n   * @param {Mixed} value\n   * @param {String} message\n   * @namespace Assert\n   * @api public\n   */\n\n  assert.isNull = function (val, msg) {\n    new Assertion(val, msg).to.equal(null);\n  };\n\n  /**\n   * ### .isNotNull(value, [message])\n   *\n   * Asserts that `value` is not null.\n   *\n   *     var tea = 'tasty chai';\n   *     assert.isNotNull(tea, 'great, time for tea!');\n   *\n   * @name isNotNull\n   * @param {Mixed} value\n   * @param {String} message\n   * @namespace Assert\n   * @api public\n   */\n\n  assert.isNotNull = function (val, msg) {\n    new Assertion(val, msg).to.not.equal(null);\n  };\n\n  /**\n   * ### .isNaN\n   * Asserts that value is NaN\n   *\n   *    assert.isNaN('foo', 'foo is NaN');\n   *\n   * @name isNaN\n   * @param {Mixed} value\n   * @param {String} message\n   * @namespace Assert\n   * @api public\n   */\n\n  assert.isNaN = function (val, msg) {\n    new Assertion(val, msg).to.be.NaN;\n  };\n\n  /**\n   * ### .isNotNaN\n   * Asserts that value is not NaN\n   *\n   *    assert.isNotNaN(4, '4 is not NaN');\n   *\n   * @name isNotNaN\n   * @param {Mixed} value\n   * @param {String} message\n   * @namespace Assert\n   * @api public\n   */\n  assert.isNotNaN = function (val, msg) {\n    new Assertion(val, msg).not.to.be.NaN;\n  };\n\n  /**\n   * ### .isUndefined(value, [message])\n   *\n   * Asserts that `value` is `undefined`.\n   *\n   *     var tea;\n   *     assert.isUndefined(tea, 'no tea defined');\n   *\n   * @name isUndefined\n   * @param {Mixed} value\n   * @param {String} message\n   * @namespace Assert\n   * @api public\n   */\n\n  assert.isUndefined = function (val, msg) {\n    new Assertion(val, msg).to.equal(undefined);\n  };\n\n  /**\n   * ### .isDefined(value, [message])\n   *\n   * Asserts that `value` is not `undefined`.\n   *\n   *     var tea = 'cup of chai';\n   *     assert.isDefined(tea, 'tea has been defined');\n   *\n   * @name isDefined\n   * @param {Mixed} value\n   * @param {String} message\n   * @namespace Assert\n   * @api public\n   */\n\n  assert.isDefined = function (val, msg) {\n    new Assertion(val, msg).to.not.equal(undefined);\n  };\n\n  /**\n   * ### .isFunction(value, [message])\n   *\n   * Asserts that `value` is a function.\n   *\n   *     function serveTea() { return 'cup of tea'; };\n   *     assert.isFunction(serveTea, 'great, we can have tea now');\n   *\n   * @name isFunction\n   * @param {Mixed} value\n   * @param {String} message\n   * @namespace Assert\n   * @api public\n   */\n\n  assert.isFunction = function (val, msg) {\n    new Assertion(val, msg).to.be.a('function');\n  };\n\n  /**\n   * ### .isNotFunction(value, [message])\n   *\n   * Asserts that `value` is _not_ a function.\n   *\n   *     var serveTea = [ 'heat', 'pour', 'sip' ];\n   *     assert.isNotFunction(serveTea, 'great, we have listed the steps');\n   *\n   * @name isNotFunction\n   * @param {Mixed} value\n   * @param {String} message\n   * @namespace Assert\n   * @api public\n   */\n\n  assert.isNotFunction = function (val, msg) {\n    new Assertion(val, msg).to.not.be.a('function');\n  };\n\n  /**\n   * ### .isObject(value, [message])\n   *\n   * Asserts that `value` is an object of type 'Object' (as revealed by `Object.prototype.toString`).\n   * _The assertion does not match subclassed objects._\n   *\n   *     var selection = { name: 'Chai', serve: 'with spices' };\n   *     assert.isObject(selection, 'tea selection is an object');\n   *\n   * @name isObject\n   * @param {Mixed} value\n   * @param {String} message\n   * @namespace Assert\n   * @api public\n   */\n\n  assert.isObject = function (val, msg) {\n    new Assertion(val, msg).to.be.a('object');\n  };\n\n  /**\n   * ### .isNotObject(value, [message])\n   *\n   * Asserts that `value` is _not_ an object of type 'Object' (as revealed by `Object.prototype.toString`).\n   *\n   *     var selection = 'chai'\n   *     assert.isNotObject(selection, 'tea selection is not an object');\n   *     assert.isNotObject(null, 'null is not an object');\n   *\n   * @name isNotObject\n   * @param {Mixed} value\n   * @param {String} message\n   * @namespace Assert\n   * @api public\n   */\n\n  assert.isNotObject = function (val, msg) {\n    new Assertion(val, msg).to.not.be.a('object');\n  };\n\n  /**\n   * ### .isArray(value, [message])\n   *\n   * Asserts that `value` is an array.\n   *\n   *     var menu = [ 'green', 'chai', 'oolong' ];\n   *     assert.isArray(menu, 'what kind of tea do we want?');\n   *\n   * @name isArray\n   * @param {Mixed} value\n   * @param {String} message\n   * @namespace Assert\n   * @api public\n   */\n\n  assert.isArray = function (val, msg) {\n    new Assertion(val, msg).to.be.an('array');\n  };\n\n  /**\n   * ### .isNotArray(value, [message])\n   *\n   * Asserts that `value` is _not_ an array.\n   *\n   *     var menu = 'green|chai|oolong';\n   *     assert.isNotArray(menu, 'what kind of tea do we want?');\n   *\n   * @name isNotArray\n   * @param {Mixed} value\n   * @param {String} message\n   * @namespace Assert\n   * @api public\n   */\n\n  assert.isNotArray = function (val, msg) {\n    new Assertion(val, msg).to.not.be.an('array');\n  };\n\n  /**\n   * ### .isString(value, [message])\n   *\n   * Asserts that `value` is a string.\n   *\n   *     var teaOrder = 'chai';\n   *     assert.isString(teaOrder, 'order placed');\n   *\n   * @name isString\n   * @param {Mixed} value\n   * @param {String} message\n   * @namespace Assert\n   * @api public\n   */\n\n  assert.isString = function (val, msg) {\n    new Assertion(val, msg).to.be.a('string');\n  };\n\n  /**\n   * ### .isNotString(value, [message])\n   *\n   * Asserts that `value` is _not_ a string.\n   *\n   *     var teaOrder = 4;\n   *     assert.isNotString(teaOrder, 'order placed');\n   *\n   * @name isNotString\n   * @param {Mixed} value\n   * @param {String} message\n   * @namespace Assert\n   * @api public\n   */\n\n  assert.isNotString = function (val, msg) {\n    new Assertion(val, msg).to.not.be.a('string');\n  };\n\n  /**\n   * ### .isNumber(value, [message])\n   *\n   * Asserts that `value` is a number.\n   *\n   *     var cups = 2;\n   *     assert.isNumber(cups, 'how many cups');\n   *\n   * @name isNumber\n   * @param {Number} value\n   * @param {String} message\n   * @namespace Assert\n   * @api public\n   */\n\n  assert.isNumber = function (val, msg) {\n    new Assertion(val, msg).to.be.a('number');\n  };\n\n  /**\n   * ### .isNotNumber(value, [message])\n   *\n   * Asserts that `value` is _not_ a number.\n   *\n   *     var cups = '2 cups please';\n   *     assert.isNotNumber(cups, 'how many cups');\n   *\n   * @name isNotNumber\n   * @param {Mixed} value\n   * @param {String} message\n   * @namespace Assert\n   * @api public\n   */\n\n  assert.isNotNumber = function (val, msg) {\n    new Assertion(val, msg).to.not.be.a('number');\n  };\n\n  /**\n   * ### .isBoolean(value, [message])\n   *\n   * Asserts that `value` is a boolean.\n   *\n   *     var teaReady = true\n   *       , teaServed = false;\n   *\n   *     assert.isBoolean(teaReady, 'is the tea ready');\n   *     assert.isBoolean(teaServed, 'has tea been served');\n   *\n   * @name isBoolean\n   * @param {Mixed} value\n   * @param {String} message\n   * @namespace Assert\n   * @api public\n   */\n\n  assert.isBoolean = function (val, msg) {\n    new Assertion(val, msg).to.be.a('boolean');\n  };\n\n  /**\n   * ### .isNotBoolean(value, [message])\n   *\n   * Asserts that `value` is _not_ a boolean.\n   *\n   *     var teaReady = 'yep'\n   *       , teaServed = 'nope';\n   *\n   *     assert.isNotBoolean(teaReady, 'is the tea ready');\n   *     assert.isNotBoolean(teaServed, 'has tea been served');\n   *\n   * @name isNotBoolean\n   * @param {Mixed} value\n   * @param {String} message\n   * @namespace Assert\n   * @api public\n   */\n\n  assert.isNotBoolean = function (val, msg) {\n    new Assertion(val, msg).to.not.be.a('boolean');\n  };\n\n  /**\n   * ### .typeOf(value, name, [message])\n   *\n   * Asserts that `value`'s type is `name`, as determined by\n   * `Object.prototype.toString`.\n   *\n   *     assert.typeOf({ tea: 'chai' }, 'object', 'we have an object');\n   *     assert.typeOf(['chai', 'jasmine'], 'array', 'we have an array');\n   *     assert.typeOf('tea', 'string', 'we have a string');\n   *     assert.typeOf(/tea/, 'regexp', 'we have a regular expression');\n   *     assert.typeOf(null, 'null', 'we have a null');\n   *     assert.typeOf(undefined, 'undefined', 'we have an undefined');\n   *\n   * @name typeOf\n   * @param {Mixed} value\n   * @param {String} name\n   * @param {String} message\n   * @namespace Assert\n   * @api public\n   */\n\n  assert.typeOf = function (val, type, msg) {\n    new Assertion(val, msg).to.be.a(type);\n  };\n\n  /**\n   * ### .notTypeOf(value, name, [message])\n   *\n   * Asserts that `value`'s type is _not_ `name`, as determined by\n   * `Object.prototype.toString`.\n   *\n   *     assert.notTypeOf('tea', 'number', 'strings are not numbers');\n   *\n   * @name notTypeOf\n   * @param {Mixed} value\n   * @param {String} typeof name\n   * @param {String} message\n   * @namespace Assert\n   * @api public\n   */\n\n  assert.notTypeOf = function (val, type, msg) {\n    new Assertion(val, msg).to.not.be.a(type);\n  };\n\n  /**\n   * ### .instanceOf(object, constructor, [message])\n   *\n   * Asserts that `value` is an instance of `constructor`.\n   *\n   *     var Tea = function (name) { this.name = name; }\n   *       , chai = new Tea('chai');\n   *\n   *     assert.instanceOf(chai, Tea, 'chai is an instance of tea');\n   *\n   * @name instanceOf\n   * @param {Object} object\n   * @param {Constructor} constructor\n   * @param {String} message\n   * @namespace Assert\n   * @api public\n   */\n\n  assert.instanceOf = function (val, type, msg) {\n    new Assertion(val, msg).to.be.instanceOf(type);\n  };\n\n  /**\n   * ### .notInstanceOf(object, constructor, [message])\n   *\n   * Asserts `value` is not an instance of `constructor`.\n   *\n   *     var Tea = function (name) { this.name = name; }\n   *       , chai = new String('chai');\n   *\n   *     assert.notInstanceOf(chai, Tea, 'chai is not an instance of tea');\n   *\n   * @name notInstanceOf\n   * @param {Object} object\n   * @param {Constructor} constructor\n   * @param {String} message\n   * @namespace Assert\n   * @api public\n   */\n\n  assert.notInstanceOf = function (val, type, msg) {\n    new Assertion(val, msg).to.not.be.instanceOf(type);\n  };\n\n  /**\n   * ### .include(haystack, needle, [message])\n   *\n   * Asserts that `haystack` includes `needle`. Works\n   * for strings and arrays.\n   *\n   *     assert.include('foobar', 'bar', 'foobar contains string \"bar\"');\n   *     assert.include([ 1, 2, 3 ], 3, 'array contains value');\n   *\n   * @name include\n   * @param {Array|String} haystack\n   * @param {Mixed} needle\n   * @param {String} message\n   * @namespace Assert\n   * @api public\n   */\n\n  assert.include = function (exp, inc, msg) {\n    new Assertion(exp, msg, assert.include).include(inc);\n  };\n\n  /**\n   * ### .notInclude(haystack, needle, [message])\n   *\n   * Asserts that `haystack` does not include `needle`. Works\n   * for strings and arrays.\n   *\n   *     assert.notInclude('foobar', 'baz', 'string not include substring');\n   *     assert.notInclude([ 1, 2, 3 ], 4, 'array not include contain value');\n   *\n   * @name notInclude\n   * @param {Array|String} haystack\n   * @param {Mixed} needle\n   * @param {String} message\n   * @namespace Assert\n   * @api public\n   */\n\n  assert.notInclude = function (exp, inc, msg) {\n    new Assertion(exp, msg, assert.notInclude).not.include(inc);\n  };\n\n  /**\n   * ### .match(value, regexp, [message])\n   *\n   * Asserts that `value` matches the regular expression `regexp`.\n   *\n   *     assert.match('foobar', /^foo/, 'regexp matches');\n   *\n   * @name match\n   * @param {Mixed} value\n   * @param {RegExp} regexp\n   * @param {String} message\n   * @namespace Assert\n   * @api public\n   */\n\n  assert.match = function (exp, re, msg) {\n    new Assertion(exp, msg).to.match(re);\n  };\n\n  /**\n   * ### .notMatch(value, regexp, [message])\n   *\n   * Asserts that `value` does not match the regular expression `regexp`.\n   *\n   *     assert.notMatch('foobar', /^foo/, 'regexp does not match');\n   *\n   * @name notMatch\n   * @param {Mixed} value\n   * @param {RegExp} regexp\n   * @param {String} message\n   * @namespace Assert\n   * @api public\n   */\n\n  assert.notMatch = function (exp, re, msg) {\n    new Assertion(exp, msg).to.not.match(re);\n  };\n\n  /**\n   * ### .property(object, property, [message])\n   *\n   * Asserts that `object` has a property named by `property`.\n   *\n   *     assert.property({ tea: { green: 'matcha' }}, 'tea');\n   *\n   * @name property\n   * @param {Object} object\n   * @param {String} property\n   * @param {String} message\n   * @namespace Assert\n   * @api public\n   */\n\n  assert.property = function (obj, prop, msg) {\n    new Assertion(obj, msg).to.have.property(prop);\n  };\n\n  /**\n   * ### .notProperty(object, property, [message])\n   *\n   * Asserts that `object` does _not_ have a property named by `property`.\n   *\n   *     assert.notProperty({ tea: { green: 'matcha' }}, 'coffee');\n   *\n   * @name notProperty\n   * @param {Object} object\n   * @param {String} property\n   * @param {String} message\n   * @namespace Assert\n   * @api public\n   */\n\n  assert.notProperty = function (obj, prop, msg) {\n    new Assertion(obj, msg).to.not.have.property(prop);\n  };\n\n  /**\n   * ### .deepProperty(object, property, [message])\n   *\n   * Asserts that `object` has a property named by `property`, which can be a\n   * string using dot- and bracket-notation for deep reference.\n   *\n   *     assert.deepProperty({ tea: { green: 'matcha' }}, 'tea.green');\n   *\n   * @name deepProperty\n   * @param {Object} object\n   * @param {String} property\n   * @param {String} message\n   * @namespace Assert\n   * @api public\n   */\n\n  assert.deepProperty = function (obj, prop, msg) {\n    new Assertion(obj, msg).to.have.deep.property(prop);\n  };\n\n  /**\n   * ### .notDeepProperty(object, property, [message])\n   *\n   * Asserts that `object` does _not_ have a property named by `property`, which\n   * can be a string using dot- and bracket-notation for deep reference.\n   *\n   *     assert.notDeepProperty({ tea: { green: 'matcha' }}, 'tea.oolong');\n   *\n   * @name notDeepProperty\n   * @param {Object} object\n   * @param {String} property\n   * @param {String} message\n   * @namespace Assert\n   * @api public\n   */\n\n  assert.notDeepProperty = function (obj, prop, msg) {\n    new Assertion(obj, msg).to.not.have.deep.property(prop);\n  };\n\n  /**\n   * ### .propertyVal(object, property, value, [message])\n   *\n   * Asserts that `object` has a property named by `property` with value given\n   * by `value`.\n   *\n   *     assert.propertyVal({ tea: 'is good' }, 'tea', 'is good');\n   *\n   * @name propertyVal\n   * @param {Object} object\n   * @param {String} property\n   * @param {Mixed} value\n   * @param {String} message\n   * @namespace Assert\n   * @api public\n   */\n\n  assert.propertyVal = function (obj, prop, val, msg) {\n    new Assertion(obj, msg).to.have.property(prop, val);\n  };\n\n  /**\n   * ### .propertyNotVal(object, property, value, [message])\n   *\n   * Asserts that `object` has a property named by `property`, but with a value\n   * different from that given by `value`.\n   *\n   *     assert.propertyNotVal({ tea: 'is good' }, 'tea', 'is bad');\n   *\n   * @name propertyNotVal\n   * @param {Object} object\n   * @param {String} property\n   * @param {Mixed} value\n   * @param {String} message\n   * @namespace Assert\n   * @api public\n   */\n\n  assert.propertyNotVal = function (obj, prop, val, msg) {\n    new Assertion(obj, msg).to.not.have.property(prop, val);\n  };\n\n  /**\n   * ### .deepPropertyVal(object, property, value, [message])\n   *\n   * Asserts that `object` has a property named by `property` with value given\n   * by `value`. `property` can use dot- and bracket-notation for deep\n   * reference.\n   *\n   *     assert.deepPropertyVal({ tea: { green: 'matcha' }}, 'tea.green', 'matcha');\n   *\n   * @name deepPropertyVal\n   * @param {Object} object\n   * @param {String} property\n   * @param {Mixed} value\n   * @param {String} message\n   * @namespace Assert\n   * @api public\n   */\n\n  assert.deepPropertyVal = function (obj, prop, val, msg) {\n    new Assertion(obj, msg).to.have.deep.property(prop, val);\n  };\n\n  /**\n   * ### .deepPropertyNotVal(object, property, value, [message])\n   *\n   * Asserts that `object` has a property named by `property`, but with a value\n   * different from that given by `value`. `property` can use dot- and\n   * bracket-notation for deep reference.\n   *\n   *     assert.deepPropertyNotVal({ tea: { green: 'matcha' }}, 'tea.green', 'konacha');\n   *\n   * @name deepPropertyNotVal\n   * @param {Object} object\n   * @param {String} property\n   * @param {Mixed} value\n   * @param {String} message\n   * @namespace Assert\n   * @api public\n   */\n\n  assert.deepPropertyNotVal = function (obj, prop, val, msg) {\n    new Assertion(obj, msg).to.not.have.deep.property(prop, val);\n  };\n\n  /**\n   * ### .lengthOf(object, length, [message])\n   *\n   * Asserts that `object` has a `length` property with the expected value.\n   *\n   *     assert.lengthOf([1,2,3], 3, 'array has length of 3');\n   *     assert.lengthOf('foobar', 6, 'string has length of 6');\n   *\n   * @name lengthOf\n   * @param {Mixed} object\n   * @param {Number} length\n   * @param {String} message\n   * @namespace Assert\n   * @api public\n   */\n\n  assert.lengthOf = function (exp, len, msg) {\n    new Assertion(exp, msg).to.have.length(len);\n  };\n\n  /**\n   * ### .throws(function, [constructor/string/regexp], [string/regexp], [message])\n   *\n   * Asserts that `function` will throw an error that is an instance of\n   * `constructor`, or alternately that it will throw an error with message\n   * matching `regexp`.\n   *\n   *     assert.throws(fn, 'function throws a reference error');\n   *     assert.throws(fn, /function throws a reference error/);\n   *     assert.throws(fn, ReferenceError);\n   *     assert.throws(fn, ReferenceError, 'function throws a reference error');\n   *     assert.throws(fn, ReferenceError, /function throws a reference error/);\n   *\n   * @name throws\n   * @alias throw\n   * @alias Throw\n   * @param {Function} function\n   * @param {ErrorConstructor} constructor\n   * @param {RegExp} regexp\n   * @param {String} message\n   * @see https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Error#Error_types\n   * @namespace Assert\n   * @api public\n   */\n\n  assert.throws = function (fn, errt, errs, msg) {\n    if ('string' === typeof errt || errt instanceof RegExp) {\n      errs = errt;\n      errt = null;\n    }\n\n    var assertErr = new Assertion(fn, msg).to.throw(errt, errs);\n    return flag(assertErr, 'object');\n  };\n\n  /**\n   * ### .doesNotThrow(function, [constructor/regexp], [message])\n   *\n   * Asserts that `function` will _not_ throw an error that is an instance of\n   * `constructor`, or alternately that it will not throw an error with message\n   * matching `regexp`.\n   *\n   *     assert.doesNotThrow(fn, Error, 'function does not throw');\n   *\n   * @name doesNotThrow\n   * @param {Function} function\n   * @param {ErrorConstructor} constructor\n   * @param {RegExp} regexp\n   * @param {String} message\n   * @see https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Error#Error_types\n   * @namespace Assert\n   * @api public\n   */\n\n  assert.doesNotThrow = function (fn, type, msg) {\n    if ('string' === typeof type) {\n      msg = type;\n      type = null;\n    }\n\n    new Assertion(fn, msg).to.not.Throw(type);\n  };\n\n  /**\n   * ### .operator(val1, operator, val2, [message])\n   *\n   * Compares two values using `operator`.\n   *\n   *     assert.operator(1, '<', 2, 'everything is ok');\n   *     assert.operator(1, '>', 2, 'this will fail');\n   *\n   * @name operator\n   * @param {Mixed} val1\n   * @param {String} operator\n   * @param {Mixed} val2\n   * @param {String} message\n   * @namespace Assert\n   * @api public\n   */\n\n  assert.operator = function (val, operator, val2, msg) {\n    var ok;\n    switch(operator) {\n      case '==':\n        ok = val == val2;\n        break;\n      case '===':\n        ok = val === val2;\n        break;\n      case '>':\n        ok = val > val2;\n        break;\n      case '>=':\n        ok = val >= val2;\n        break;\n      case '<':\n        ok = val < val2;\n        break;\n      case '<=':\n        ok = val <= val2;\n        break;\n      case '!=':\n        ok = val != val2;\n        break;\n      case '!==':\n        ok = val !== val2;\n        break;\n      default:\n        throw new Error('Invalid operator \"' + operator + '\"');\n    }\n    var test = new Assertion(ok, msg);\n    test.assert(\n        true === flag(test, 'object')\n      , 'expected ' + util.inspect(val) + ' to be ' + operator + ' ' + util.inspect(val2)\n      , 'expected ' + util.inspect(val) + ' to not be ' + operator + ' ' + util.inspect(val2) );\n  };\n\n  /**\n   * ### .closeTo(actual, expected, delta, [message])\n   *\n   * Asserts that the target is equal `expected`, to within a +/- `delta` range.\n   *\n   *     assert.closeTo(1.5, 1, 0.5, 'numbers are close');\n   *\n   * @name closeTo\n   * @param {Number} actual\n   * @param {Number} expected\n   * @param {Number} delta\n   * @param {String} message\n   * @namespace Assert\n   * @api public\n   */\n\n  assert.closeTo = function (act, exp, delta, msg) {\n    new Assertion(act, msg).to.be.closeTo(exp, delta);\n  };\n\n  /**\n   * ### .approximately(actual, expected, delta, [message])\n   *\n   * Asserts that the target is equal `expected`, to within a +/- `delta` range.\n   *\n   *     assert.approximately(1.5, 1, 0.5, 'numbers are close');\n   *\n   * @name approximately\n   * @param {Number} actual\n   * @param {Number} expected\n   * @param {Number} delta\n   * @param {String} message\n   * @namespace Assert\n   * @api public\n   */\n\n  assert.approximately = function (act, exp, delta, msg) {\n    new Assertion(act, msg).to.be.approximately(exp, delta);\n  };\n\n  /**\n   * ### .sameMembers(set1, set2, [message])\n   *\n   * Asserts that `set1` and `set2` have the same members.\n   * Order is not taken into account.\n   *\n   *     assert.sameMembers([ 1, 2, 3 ], [ 2, 1, 3 ], 'same members');\n   *\n   * @name sameMembers\n   * @param {Array} set1\n   * @param {Array} set2\n   * @param {String} message\n   * @namespace Assert\n   * @api public\n   */\n\n  assert.sameMembers = function (set1, set2, msg) {\n    new Assertion(set1, msg).to.have.same.members(set2);\n  }\n\n  /**\n   * ### .sameDeepMembers(set1, set2, [message])\n   *\n   * Asserts that `set1` and `set2` have the same members - using a deep equality checking.\n   * Order is not taken into account.\n   *\n   *     assert.sameDeepMembers([ {b: 3}, {a: 2}, {c: 5} ], [ {c: 5}, {b: 3}, {a: 2} ], 'same deep members');\n   *\n   * @name sameDeepMembers\n   * @param {Array} set1\n   * @param {Array} set2\n   * @param {String} message\n   * @namespace Assert\n   * @api public\n   */\n\n  assert.sameDeepMembers = function (set1, set2, msg) {\n    new Assertion(set1, msg).to.have.same.deep.members(set2);\n  }\n\n  /**\n   * ### .includeMembers(superset, subset, [message])\n   *\n   * Asserts that `subset` is included in `superset`.\n   * Order is not taken into account.\n   *\n   *     assert.includeMembers([ 1, 2, 3 ], [ 2, 1 ], 'include members');\n   *\n   * @name includeMembers\n   * @param {Array} superset\n   * @param {Array} subset\n   * @param {String} message\n   * @namespace Assert\n   * @api public\n   */\n\n  assert.includeMembers = function (superset, subset, msg) {\n    new Assertion(superset, msg).to.include.members(subset);\n  }\n\n  /**\n   * ### .includeDeepMembers(superset, subset, [message])\n   *\n   * Asserts that `subset` is included in `superset` - using deep equality checking.\n   * Order is not taken into account.\n   * Duplicates are ignored.\n   *\n   *     assert.includeDeepMembers([ {a: 1}, {b: 2}, {c: 3} ], [ {b: 2}, {a: 1}, {b: 2} ], 'include deep members');\n   *\n   * @name includeDeepMembers\n   * @param {Array} superset\n   * @param {Array} subset\n   * @param {String} message\n   * @namespace Assert\n   * @api public\n   */\n\n  assert.includeDeepMembers = function (superset, subset, msg) {\n    new Assertion(superset, msg).to.include.deep.members(subset);\n  }\n\n  /**\n   * ### .oneOf(inList, list, [message])\n   *\n   * Asserts that non-object, non-array value `inList` appears in the flat array `list`.\n   *\n   *     assert.oneOf(1, [ 2, 1 ], 'Not found in list');\n   *\n   * @name oneOf\n   * @param {*} inList\n   * @param {Array<*>} list\n   * @param {String} message\n   * @namespace Assert\n   * @api public\n   */\n\n  assert.oneOf = function (inList, list, msg) {\n    new Assertion(inList, msg).to.be.oneOf(list);\n  }\n\n   /**\n   * ### .changes(function, object, property)\n   *\n   * Asserts that a function changes the value of a property\n   *\n   *     var obj = { val: 10 };\n   *     var fn = function() { obj.val = 22 };\n   *     assert.changes(fn, obj, 'val');\n   *\n   * @name changes\n   * @param {Function} modifier function\n   * @param {Object} object\n   * @param {String} property name\n   * @param {String} message _optional_\n   * @namespace Assert\n   * @api public\n   */\n\n  assert.changes = function (fn, obj, prop) {\n    new Assertion(fn).to.change(obj, prop);\n  }\n\n   /**\n   * ### .doesNotChange(function, object, property)\n   *\n   * Asserts that a function does not changes the value of a property\n   *\n   *     var obj = { val: 10 };\n   *     var fn = function() { console.log('foo'); };\n   *     assert.doesNotChange(fn, obj, 'val');\n   *\n   * @name doesNotChange\n   * @param {Function} modifier function\n   * @param {Object} object\n   * @param {String} property name\n   * @param {String} message _optional_\n   * @namespace Assert\n   * @api public\n   */\n\n  assert.doesNotChange = function (fn, obj, prop) {\n    new Assertion(fn).to.not.change(obj, prop);\n  }\n\n   /**\n   * ### .increases(function, object, property)\n   *\n   * Asserts that a function increases an object property\n   *\n   *     var obj = { val: 10 };\n   *     var fn = function() { obj.val = 13 };\n   *     assert.increases(fn, obj, 'val');\n   *\n   * @name increases\n   * @param {Function} modifier function\n   * @param {Object} object\n   * @param {String} property name\n   * @param {String} message _optional_\n   * @namespace Assert\n   * @api public\n   */\n\n  assert.increases = function (fn, obj, prop) {\n    new Assertion(fn).to.increase(obj, prop);\n  }\n\n   /**\n   * ### .doesNotIncrease(function, object, property)\n   *\n   * Asserts that a function does not increase object property\n   *\n   *     var obj = { val: 10 };\n   *     var fn = function() { obj.val = 8 };\n   *     assert.doesNotIncrease(fn, obj, 'val');\n   *\n   * @name doesNotIncrease\n   * @param {Function} modifier function\n   * @param {Object} object\n   * @param {String} property name\n   * @param {String} message _optional_\n   * @namespace Assert\n   * @api public\n   */\n\n  assert.doesNotIncrease = function (fn, obj, prop) {\n    new Assertion(fn).to.not.increase(obj, prop);\n  }\n\n   /**\n   * ### .decreases(function, object, property)\n   *\n   * Asserts that a function decreases an object property\n   *\n   *     var obj = { val: 10 };\n   *     var fn = function() { obj.val = 5 };\n   *     assert.decreases(fn, obj, 'val');\n   *\n   * @name decreases\n   * @param {Function} modifier function\n   * @param {Object} object\n   * @param {String} property name\n   * @param {String} message _optional_\n   * @namespace Assert\n   * @api public\n   */\n\n  assert.decreases = function (fn, obj, prop) {\n    new Assertion(fn).to.decrease(obj, prop);\n  }\n\n   /**\n   * ### .doesNotDecrease(function, object, property)\n   *\n   * Asserts that a function does not decreases an object property\n   *\n   *     var obj = { val: 10 };\n   *     var fn = function() { obj.val = 15 };\n   *     assert.doesNotDecrease(fn, obj, 'val');\n   *\n   * @name doesNotDecrease\n   * @param {Function} modifier function\n   * @param {Object} object\n   * @param {String} property name\n   * @param {String} message _optional_\n   * @namespace Assert\n   * @api public\n   */\n\n  assert.doesNotDecrease = function (fn, obj, prop) {\n    new Assertion(fn).to.not.decrease(obj, prop);\n  }\n\n  /*!\n   * ### .ifError(object)\n   *\n   * Asserts if value is not a false value, and throws if it is a true value.\n   * This is added to allow for chai to be a drop-in replacement for Node's\n   * assert class.\n   *\n   *     var err = new Error('I am a custom error');\n   *     assert.ifError(err); // Rethrows err!\n   *\n   * @name ifError\n   * @param {Object} object\n   * @namespace Assert\n   * @api public\n   */\n\n  assert.ifError = function (val) {\n    if (val) {\n      throw(val);\n    }\n  };\n\n  /**\n   * ### .isExtensible(object)\n   *\n   * Asserts that `object` is extensible (can have new properties added to it).\n   *\n   *     assert.isExtensible({});\n   *\n   * @name isExtensible\n   * @alias extensible\n   * @param {Object} object\n   * @param {String} message _optional_\n   * @namespace Assert\n   * @api public\n   */\n\n  assert.isExtensible = function (obj, msg) {\n    new Assertion(obj, msg).to.be.extensible;\n  };\n\n  /**\n   * ### .isNotExtensible(object)\n   *\n   * Asserts that `object` is _not_ extensible.\n   *\n   *     var nonExtensibleObject = Object.preventExtensions({});\n   *     var sealedObject = Object.seal({});\n   *     var frozenObject = Object.freese({});\n   *\n   *     assert.isNotExtensible(nonExtensibleObject);\n   *     assert.isNotExtensible(sealedObject);\n   *     assert.isNotExtensible(frozenObject);\n   *\n   * @name isNotExtensible\n   * @alias notExtensible\n   * @param {Object} object\n   * @param {String} message _optional_\n   * @namespace Assert\n   * @api public\n   */\n\n  assert.isNotExtensible = function (obj, msg) {\n    new Assertion(obj, msg).to.not.be.extensible;\n  };\n\n  /**\n   * ### .isSealed(object)\n   *\n   * Asserts that `object` is sealed (cannot have new properties added to it\n   * and its existing properties cannot be removed).\n   *\n   *     var sealedObject = Object.seal({});\n   *     var frozenObject = Object.seal({});\n   *\n   *     assert.isSealed(sealedObject);\n   *     assert.isSealed(frozenObject);\n   *\n   * @name isSealed\n   * @alias sealed\n   * @param {Object} object\n   * @param {String} message _optional_\n   * @namespace Assert\n   * @api public\n   */\n\n  assert.isSealed = function (obj, msg) {\n    new Assertion(obj, msg).to.be.sealed;\n  };\n\n  /**\n   * ### .isNotSealed(object)\n   *\n   * Asserts that `object` is _not_ sealed.\n   *\n   *     assert.isNotSealed({});\n   *\n   * @name isNotSealed\n   * @alias notSealed\n   * @param {Object} object\n   * @param {String} message _optional_\n   * @namespace Assert\n   * @api public\n   */\n\n  assert.isNotSealed = function (obj, msg) {\n    new Assertion(obj, msg).to.not.be.sealed;\n  };\n\n  /**\n   * ### .isFrozen(object)\n   *\n   * Asserts that `object` is frozen (cannot have new properties added to it\n   * and its existing properties cannot be modified).\n   *\n   *     var frozenObject = Object.freeze({});\n   *     assert.frozen(frozenObject);\n   *\n   * @name isFrozen\n   * @alias frozen\n   * @param {Object} object\n   * @param {String} message _optional_\n   * @namespace Assert\n   * @api public\n   */\n\n  assert.isFrozen = function (obj, msg) {\n    new Assertion(obj, msg).to.be.frozen;\n  };\n\n  /**\n   * ### .isNotFrozen(object)\n   *\n   * Asserts that `object` is _not_ frozen.\n   *\n   *     assert.isNotFrozen({});\n   *\n   * @name isNotFrozen\n   * @alias notFrozen\n   * @param {Object} object\n   * @param {String} message _optional_\n   * @namespace Assert\n   * @api public\n   */\n\n  assert.isNotFrozen = function (obj, msg) {\n    new Assertion(obj, msg).to.not.be.frozen;\n  };\n\n  /*!\n   * Aliases.\n   */\n\n  (function alias(name, as){\n    assert[as] = assert[name];\n    return alias;\n  })\n  ('isOk', 'ok')\n  ('isNotOk', 'notOk')\n  ('throws', 'throw')\n  ('throws', 'Throw')\n  ('isExtensible', 'extensible')\n  ('isNotExtensible', 'notExtensible')\n  ('isSealed', 'sealed')\n  ('isNotSealed', 'notSealed')\n  ('isFrozen', 'frozen')\n  ('isNotFrozen', 'notFrozen');\n};\n","/*!\n * chai\n * Copyright(c) 2011-2014 Jake Luer <jake@alogicalparadox.com>\n * MIT Licensed\n */\n\nmodule.exports = function (chai, util) {\n  chai.expect = function (val, message) {\n    return new chai.Assertion(val, message);\n  };\n\n  /**\n   * ### .fail(actual, expected, [message], [operator])\n   *\n   * Throw a failure.\n   *\n   * @name fail\n   * @param {Mixed} actual\n   * @param {Mixed} expected\n   * @param {String} message\n   * @param {String} operator\n   * @namespace Expect\n   * @api public\n   */\n\n  chai.expect.fail = function (actual, expected, message, operator) {\n    message = message || 'expect.fail()';\n    throw new chai.AssertionError(message, {\n        actual: actual\n      , expected: expected\n      , operator: operator\n    }, chai.expect.fail);\n  };\n};\n","/*!\n * chai\n * Copyright(c) 2011-2014 Jake Luer <jake@alogicalparadox.com>\n * MIT Licensed\n */\n\nmodule.exports = function (chai, util) {\n  var Assertion = chai.Assertion;\n\n  function loadShould () {\n    // explicitly define this method as function as to have it's name to include as `ssfi`\n    function shouldGetter() {\n      if (this instanceof String || this instanceof Number || this instanceof Boolean ) {\n        return new Assertion(this.valueOf(), null, shouldGetter);\n      }\n      return new Assertion(this, null, shouldGetter);\n    }\n    function shouldSetter(value) {\n      // See https://github.com/chaijs/chai/issues/86: this makes\n      // `whatever.should = someValue` actually set `someValue`, which is\n      // especially useful for `global.should = require('chai').should()`.\n      //\n      // Note that we have to use [[DefineProperty]] instead of [[Put]]\n      // since otherwise we would trigger this very setter!\n      Object.defineProperty(this, 'should', {\n        value: value,\n        enumerable: true,\n        configurable: true,\n        writable: true\n      });\n    }\n    // modify Object.prototype to have `should`\n    Object.defineProperty(Object.prototype, 'should', {\n      set: shouldSetter\n      , get: shouldGetter\n      , configurable: true\n    });\n\n    var should = {};\n\n    /**\n     * ### .fail(actual, expected, [message], [operator])\n     *\n     * Throw a failure.\n     *\n     * @name fail\n     * @param {Mixed} actual\n     * @param {Mixed} expected\n     * @param {String} message\n     * @param {String} operator\n     * @namespace Should\n     * @api public\n     */\n\n    should.fail = function (actual, expected, message, operator) {\n      message = message || 'should.fail()';\n      throw new chai.AssertionError(message, {\n          actual: actual\n        , expected: expected\n        , operator: operator\n      }, should.fail);\n    };\n\n    /**\n     * ### .equal(actual, expected, [message])\n     *\n     * Asserts non-strict equality (`==`) of `actual` and `expected`.\n     *\n     *     should.equal(3, '3', '== coerces values to strings');\n     *\n     * @name equal\n     * @param {Mixed} actual\n     * @param {Mixed} expected\n     * @param {String} message\n     * @namespace Should\n     * @api public\n     */\n\n    should.equal = function (val1, val2, msg) {\n      new Assertion(val1, msg).to.equal(val2);\n    };\n\n    /**\n     * ### .throw(function, [constructor/string/regexp], [string/regexp], [message])\n     *\n     * Asserts that `function` will throw an error that is an instance of\n     * `constructor`, or alternately that it will throw an error with message\n     * matching `regexp`.\n     *\n     *     should.throw(fn, 'function throws a reference error');\n     *     should.throw(fn, /function throws a reference error/);\n     *     should.throw(fn, ReferenceError);\n     *     should.throw(fn, ReferenceError, 'function throws a reference error');\n     *     should.throw(fn, ReferenceError, /function throws a reference error/);\n     *\n     * @name throw\n     * @alias Throw\n     * @param {Function} function\n     * @param {ErrorConstructor} constructor\n     * @param {RegExp} regexp\n     * @param {String} message\n     * @see https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Error#Error_types\n     * @namespace Should\n     * @api public\n     */\n\n    should.Throw = function (fn, errt, errs, msg) {\n      new Assertion(fn, msg).to.Throw(errt, errs);\n    };\n\n    /**\n     * ### .exist\n     *\n     * Asserts that the target is neither `null` nor `undefined`.\n     *\n     *     var foo = 'hi';\n     *\n     *     should.exist(foo, 'foo exists');\n     *\n     * @name exist\n     * @namespace Should\n     * @api public\n     */\n\n    should.exist = function (val, msg) {\n      new Assertion(val, msg).to.exist;\n    }\n\n    // negation\n    should.not = {}\n\n    /**\n     * ### .not.equal(actual, expected, [message])\n     *\n     * Asserts non-strict inequality (`!=`) of `actual` and `expected`.\n     *\n     *     should.not.equal(3, 4, 'these numbers are not equal');\n     *\n     * @name not.equal\n     * @param {Mixed} actual\n     * @param {Mixed} expected\n     * @param {String} message\n     * @namespace Should\n     * @api public\n     */\n\n    should.not.equal = function (val1, val2, msg) {\n      new Assertion(val1, msg).to.not.equal(val2);\n    };\n\n    /**\n     * ### .throw(function, [constructor/regexp], [message])\n     *\n     * Asserts that `function` will _not_ throw an error that is an instance of\n     * `constructor`, or alternately that it will not throw an error with message\n     * matching `regexp`.\n     *\n     *     should.not.throw(fn, Error, 'function does not throw');\n     *\n     * @name not.throw\n     * @alias not.Throw\n     * @param {Function} function\n     * @param {ErrorConstructor} constructor\n     * @param {RegExp} regexp\n     * @param {String} message\n     * @see https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Error#Error_types\n     * @namespace Should\n     * @api public\n     */\n\n    should.not.Throw = function (fn, errt, errs, msg) {\n      new Assertion(fn, msg).to.not.Throw(errt, errs);\n    };\n\n    /**\n     * ### .not.exist\n     *\n     * Asserts that the target is neither `null` nor `undefined`.\n     *\n     *     var bar = null;\n     *\n     *     should.not.exist(bar, 'bar does not exist');\n     *\n     * @name not.exist\n     * @namespace Should\n     * @api public\n     */\n\n    should.not.exist = function (val, msg) {\n      new Assertion(val, msg).to.not.exist;\n    }\n\n    should['throw'] = should['Throw'];\n    should.not['throw'] = should.not['Throw'];\n\n    return should;\n  };\n\n  chai.should = loadShould;\n  chai.Should = loadShould;\n};\n","/*!\n * Chai - addChainingMethod utility\n * Copyright(c) 2012-2014 Jake Luer <jake@alogicalparadox.com>\n * MIT Licensed\n */\n\n/*!\n * Module dependencies\n */\n\nvar transferFlags = require('./transferFlags');\nvar flag = require('./flag');\nvar config = require('../config');\n\n/*!\n * Module variables\n */\n\n// Check whether `__proto__` is supported\nvar hasProtoSupport = '__proto__' in Object;\n\n// Without `__proto__` support, this module will need to add properties to a function.\n// However, some Function.prototype methods cannot be overwritten,\n// and there seems no easy cross-platform way to detect them (@see chaijs/chai/issues/69).\nvar excludeNames = /^(?:length|name|arguments|caller)$/;\n\n// Cache `Function` properties\nvar call  = Function.prototype.call,\n    apply = Function.prototype.apply;\n\n/**\n * ### addChainableMethod (ctx, name, method, chainingBehavior)\n *\n * Adds a method to an object, such that the method can also be chained.\n *\n *     utils.addChainableMethod(chai.Assertion.prototype, 'foo', function (str) {\n *       var obj = utils.flag(this, 'object');\n *       new chai.Assertion(obj).to.be.equal(str);\n *     });\n *\n * Can also be accessed directly from `chai.Assertion`.\n *\n *     chai.Assertion.addChainableMethod('foo', fn, chainingBehavior);\n *\n * The result can then be used as both a method assertion, executing both `method` and\n * `chainingBehavior`, or as a language chain, which only executes `chainingBehavior`.\n *\n *     expect(fooStr).to.be.foo('bar');\n *     expect(fooStr).to.be.foo.equal('foo');\n *\n * @param {Object} ctx object to which the method is added\n * @param {String} name of method to add\n * @param {Function} method function to be used for `name`, when called\n * @param {Function} chainingBehavior function to be called every time the property is accessed\n * @namespace Utils\n * @name addChainableMethod\n * @api public\n */\n\nmodule.exports = function (ctx, name, method, chainingBehavior) {\n  if (typeof chainingBehavior !== 'function') {\n    chainingBehavior = function () { };\n  }\n\n  var chainableBehavior = {\n      method: method\n    , chainingBehavior: chainingBehavior\n  };\n\n  // save the methods so we can overwrite them later, if we need to.\n  if (!ctx.__methods) {\n    ctx.__methods = {};\n  }\n  ctx.__methods[name] = chainableBehavior;\n\n  Object.defineProperty(ctx, name,\n    { get: function () {\n        chainableBehavior.chainingBehavior.call(this);\n\n        var assert = function assert() {\n          var old_ssfi = flag(this, 'ssfi');\n          if (old_ssfi && config.includeStack === false)\n            flag(this, 'ssfi', assert);\n          var result = chainableBehavior.method.apply(this, arguments);\n          return result === undefined ? this : result;\n        };\n\n        // Use `__proto__` if available\n        if (hasProtoSupport) {\n          // Inherit all properties from the object by replacing the `Function` prototype\n          var prototype = assert.__proto__ = Object.create(this);\n          // Restore the `call` and `apply` methods from `Function`\n          prototype.call = call;\n          prototype.apply = apply;\n        }\n        // Otherwise, redefine all properties (slow!)\n        else {\n          var asserterNames = Object.getOwnPropertyNames(ctx);\n          asserterNames.forEach(function (asserterName) {\n            if (!excludeNames.test(asserterName)) {\n              var pd = Object.getOwnPropertyDescriptor(ctx, asserterName);\n              Object.defineProperty(assert, asserterName, pd);\n            }\n          });\n        }\n\n        transferFlags(this, assert);\n        return assert;\n      }\n    , configurable: true\n  });\n};\n","/*!\n * Chai - addMethod utility\n * Copyright(c) 2012-2014 Jake Luer <jake@alogicalparadox.com>\n * MIT Licensed\n */\n\nvar config = require('../config');\n\n/**\n * ### .addMethod (ctx, name, method)\n *\n * Adds a method to the prototype of an object.\n *\n *     utils.addMethod(chai.Assertion.prototype, 'foo', function (str) {\n *       var obj = utils.flag(this, 'object');\n *       new chai.Assertion(obj).to.be.equal(str);\n *     });\n *\n * Can also be accessed directly from `chai.Assertion`.\n *\n *     chai.Assertion.addMethod('foo', fn);\n *\n * Then can be used as any other assertion.\n *\n *     expect(fooStr).to.be.foo('bar');\n *\n * @param {Object} ctx object to which the method is added\n * @param {String} name of method to add\n * @param {Function} method function to be used for name\n * @namespace Utils\n * @name addMethod\n * @api public\n */\nvar flag = require('./flag');\n\nmodule.exports = function (ctx, name, method) {\n  ctx[name] = function () {\n    var old_ssfi = flag(this, 'ssfi');\n    if (old_ssfi && config.includeStack === false)\n      flag(this, 'ssfi', ctx[name]);\n    var result = method.apply(this, arguments);\n    return result === undefined ? this : result;\n  };\n};\n","/*!\n * Chai - addProperty utility\n * Copyright(c) 2012-2014 Jake Luer <jake@alogicalparadox.com>\n * MIT Licensed\n */\n\nvar config = require('../config');\nvar flag = require('./flag');\n\n/**\n * ### addProperty (ctx, name, getter)\n *\n * Adds a property to the prototype of an object.\n *\n *     utils.addProperty(chai.Assertion.prototype, 'foo', function () {\n *       var obj = utils.flag(this, 'object');\n *       new chai.Assertion(obj).to.be.instanceof(Foo);\n *     });\n *\n * Can also be accessed directly from `chai.Assertion`.\n *\n *     chai.Assertion.addProperty('foo', fn);\n *\n * Then can be used as any other assertion.\n *\n *     expect(myFoo).to.be.foo;\n *\n * @param {Object} ctx object to which the property is added\n * @param {String} name of property to add\n * @param {Function} getter function to be used for name\n * @namespace Utils\n * @name addProperty\n * @api public\n */\n\nmodule.exports = function (ctx, name, getter) {\n  Object.defineProperty(ctx, name,\n    { get: function addProperty() {\n        var old_ssfi = flag(this, 'ssfi');\n        if (old_ssfi && config.includeStack === false)\n          flag(this, 'ssfi', addProperty);\n\n        var result = getter.call(this);\n        return result === undefined ? this : result;\n      }\n    , configurable: true\n  });\n};\n","/*!\n * Chai - expectTypes utility\n * Copyright(c) 2012-2014 Jake Luer <jake@alogicalparadox.com>\n * MIT Licensed\n */\n\n/**\n * ### expectTypes(obj, types)\n *\n * Ensures that the object being tested against is of a valid type.\n *\n *     utils.expectTypes(this, ['array', 'object', 'string']);\n *\n * @param {Mixed} obj constructed Assertion\n * @param {Array} type A list of allowed types for this assertion\n * @namespace Utils\n * @name expectTypes\n * @api public\n */\n\nvar AssertionError = require('assertion-error');\nvar flag = require('./flag');\nvar type = require('type-detect');\n\nmodule.exports = function (obj, types) {\n  var obj = flag(obj, 'object');\n  types = types.map(function (t) { return t.toLowerCase(); });\n  types.sort();\n\n  // Transforms ['lorem', 'ipsum'] into 'a lirum, or an ipsum'\n  var str = types.map(function (t, index) {\n    var art = ~[ 'a', 'e', 'i', 'o', 'u' ].indexOf(t.charAt(0)) ? 'an' : 'a';\n    var or = types.length > 1 && index === types.length - 1 ? 'or ' : '';\n    return or + art + ' ' + t;\n  }).join(', ');\n\n  if (!types.some(function (expected) { return type(obj) === expected; })) {\n    throw new AssertionError(\n      'object tested must be ' + str + ', but ' + type(obj) + ' given'\n    );\n  }\n};\n","/*!\n * Chai - flag utility\n * Copyright(c) 2012-2014 Jake Luer <jake@alogicalparadox.com>\n * MIT Licensed\n */\n\n/**\n * ### flag(object, key, [value])\n *\n * Get or set a flag value on an object. If a\n * value is provided it will be set, else it will\n * return the currently set value or `undefined` if\n * the value is not set.\n *\n *     utils.flag(this, 'foo', 'bar'); // setter\n *     utils.flag(this, 'foo'); // getter, returns `bar`\n *\n * @param {Object} object constructed Assertion\n * @param {String} key\n * @param {Mixed} value (optional)\n * @namespace Utils\n * @name flag\n * @api private\n */\n\nmodule.exports = function (obj, key, value) {\n  var flags = obj.__flags || (obj.__flags = Object.create(null));\n  if (arguments.length === 3) {\n    flags[key] = value;\n  } else {\n    return flags[key];\n  }\n};\n","/*!\n * Chai - getActual utility\n * Copyright(c) 2012-2014 Jake Luer <jake@alogicalparadox.com>\n * MIT Licensed\n */\n\n/**\n * # getActual(object, [actual])\n *\n * Returns the `actual` value for an Assertion\n *\n * @param {Object} object (constructed Assertion)\n * @param {Arguments} chai.Assertion.prototype.assert arguments\n * @namespace Utils\n * @name getActual\n */\n\nmodule.exports = function (obj, args) {\n  return args.length > 4 ? args[4] : obj._obj;\n};\n","/*!\n * Chai - getEnumerableProperties utility\n * Copyright(c) 2012-2014 Jake Luer <jake@alogicalparadox.com>\n * MIT Licensed\n */\n\n/**\n * ### .getEnumerableProperties(object)\n *\n * This allows the retrieval of enumerable property names of an object,\n * inherited or not.\n *\n * @param {Object} object\n * @returns {Array}\n * @namespace Utils\n * @name getEnumerableProperties\n * @api public\n */\n\nmodule.exports = function getEnumerableProperties(object) {\n  var result = [];\n  for (var name in object) {\n    result.push(name);\n  }\n  return result;\n};\n","/*!\n * Chai - message composition utility\n * Copyright(c) 2012-2014 Jake Luer <jake@alogicalparadox.com>\n * MIT Licensed\n */\n\n/*!\n * Module dependancies\n */\n\nvar flag = require('./flag')\n  , getActual = require('./getActual')\n  , inspect = require('./inspect')\n  , objDisplay = require('./objDisplay');\n\n/**\n * ### .getMessage(object, message, negateMessage)\n *\n * Construct the error message based on flags\n * and template tags. Template tags will return\n * a stringified inspection of the object referenced.\n *\n * Message template tags:\n * - `#{this}` current asserted object\n * - `#{act}` actual value\n * - `#{exp}` expected value\n *\n * @param {Object} object (constructed Assertion)\n * @param {Arguments} chai.Assertion.prototype.assert arguments\n * @namespace Utils\n * @name getMessage\n * @api public\n */\n\nmodule.exports = function (obj, args) {\n  var negate = flag(obj, 'negate')\n    , val = flag(obj, 'object')\n    , expected = args[3]\n    , actual = getActual(obj, args)\n    , msg = negate ? args[2] : args[1]\n    , flagMsg = flag(obj, 'message');\n\n  if(typeof msg === \"function\") msg = msg();\n  msg = msg || '';\n  msg = msg\n    .replace(/#\\{this\\}/g, function () { return objDisplay(val); })\n    .replace(/#\\{act\\}/g, function () { return objDisplay(actual); })\n    .replace(/#\\{exp\\}/g, function () { return objDisplay(expected); });\n\n  return flagMsg ? flagMsg + ': ' + msg : msg;\n};\n","/*!\n * Chai - getName utility\n * Copyright(c) 2012-2014 Jake Luer <jake@alogicalparadox.com>\n * MIT Licensed\n */\n\n/**\n * # getName(func)\n *\n * Gets the name of a function, in a cross-browser way.\n *\n * @param {Function} a function (usually a constructor)\n * @namespace Utils\n * @name getName\n */\n\nmodule.exports = function (func) {\n  if (func.name) return func.name;\n\n  var match = /^\\s?function ([^(]*)\\(/.exec(func);\n  return match && match[1] ? match[1] : \"\";\n};\n","/*!\n * Chai - getPathInfo utility\n * Copyright(c) 2012-2014 Jake Luer <jake@alogicalparadox.com>\n * MIT Licensed\n */\n\nvar hasProperty = require('./hasProperty');\n\n/**\n * ### .getPathInfo(path, object)\n *\n * This allows the retrieval of property info in an\n * object given a string path.\n *\n * The path info consists of an object with the\n * following properties:\n *\n * * parent - The parent object of the property referenced by `path`\n * * name - The name of the final property, a number if it was an array indexer\n * * value - The value of the property, if it exists, otherwise `undefined`\n * * exists - Whether the property exists or not\n *\n * @param {String} path\n * @param {Object} object\n * @returns {Object} info\n * @namespace Utils\n * @name getPathInfo\n * @api public\n */\n\nmodule.exports = function getPathInfo(path, obj) {\n  var parsed = parsePath(path),\n      last = parsed[parsed.length - 1];\n\n  var info = {\n    parent: parsed.length > 1 ? _getPathValue(parsed, obj, parsed.length - 1) : obj,\n    name: last.p || last.i,\n    value: _getPathValue(parsed, obj)\n  };\n  info.exists = hasProperty(info.name, info.parent);\n\n  return info;\n};\n\n\n/*!\n * ## parsePath(path)\n *\n * Helper function used to parse string object\n * paths. Use in conjunction with `_getPathValue`.\n *\n *      var parsed = parsePath('myobject.property.subprop');\n *\n * ### Paths:\n *\n * * Can be as near infinitely deep and nested\n * * Arrays are also valid using the formal `myobject.document[3].property`.\n * * Literal dots and brackets (not delimiter) must be backslash-escaped.\n *\n * @param {String} path\n * @returns {Object} parsed\n * @api private\n */\n\nfunction parsePath (path) {\n  var str = path.replace(/([^\\\\])\\[/g, '$1.[')\n    , parts = str.match(/(\\\\\\.|[^.]+?)+/g);\n  return parts.map(function (value) {\n    var re = /^\\[(\\d+)\\]$/\n      , mArr = re.exec(value);\n    if (mArr) return { i: parseFloat(mArr[1]) };\n    else return { p: value.replace(/\\\\([.\\[\\]])/g, '$1') };\n  });\n}\n\n\n/*!\n * ## _getPathValue(parsed, obj)\n *\n * Helper companion function for `.parsePath` that returns\n * the value located at the parsed address.\n *\n *      var value = getPathValue(parsed, obj);\n *\n * @param {Object} parsed definition from `parsePath`.\n * @param {Object} object to search against\n * @param {Number} object to search against\n * @returns {Object|Undefined} value\n * @api private\n */\n\nfunction _getPathValue (parsed, obj, index) {\n  var tmp = obj\n    , res;\n\n  index = (index === undefined ? parsed.length : index);\n\n  for (var i = 0, l = index; i < l; i++) {\n    var part = parsed[i];\n    if (tmp) {\n      if ('undefined' !== typeof part.p)\n        tmp = tmp[part.p];\n      else if ('undefined' !== typeof part.i)\n        tmp = tmp[part.i];\n      if (i == (l - 1)) res = tmp;\n    } else {\n      res = undefined;\n    }\n  }\n  return res;\n}\n","/*!\n * Chai - getPathValue utility\n * Copyright(c) 2012-2014 Jake Luer <jake@alogicalparadox.com>\n * @see https://github.com/logicalparadox/filtr\n * MIT Licensed\n */\n\nvar getPathInfo = require('./getPathInfo');\n\n/**\n * ### .getPathValue(path, object)\n *\n * This allows the retrieval of values in an\n * object given a string path.\n *\n *     var obj = {\n *         prop1: {\n *             arr: ['a', 'b', 'c']\n *           , str: 'Hello'\n *         }\n *       , prop2: {\n *             arr: [ { nested: 'Universe' } ]\n *           , str: 'Hello again!'\n *         }\n *     }\n *\n * The following would be the results.\n *\n *     getPathValue('prop1.str', obj); // Hello\n *     getPathValue('prop1.att[2]', obj); // b\n *     getPathValue('prop2.arr[0].nested', obj); // Universe\n *\n * @param {String} path\n * @param {Object} object\n * @returns {Object} value or `undefined`\n * @namespace Utils\n * @name getPathValue\n * @api public\n */\nmodule.exports = function(path, obj) {\n  var info = getPathInfo(path, obj);\n  return info.value;\n};\n","/*!\n * Chai - getProperties utility\n * Copyright(c) 2012-2014 Jake Luer <jake@alogicalparadox.com>\n * MIT Licensed\n */\n\n/**\n * ### .getProperties(object)\n *\n * This allows the retrieval of property names of an object, enumerable or not,\n * inherited or not.\n *\n * @param {Object} object\n * @returns {Array}\n * @namespace Utils\n * @name getProperties\n * @api public\n */\n\nmodule.exports = function getProperties(object) {\n  var result = Object.getOwnPropertyNames(object);\n\n  function addProperty(property) {\n    if (result.indexOf(property) === -1) {\n      result.push(property);\n    }\n  }\n\n  var proto = Object.getPrototypeOf(object);\n  while (proto !== null) {\n    Object.getOwnPropertyNames(proto).forEach(addProperty);\n    proto = Object.getPrototypeOf(proto);\n  }\n\n  return result;\n};\n","/*!\n * Chai - hasProperty utility\n * Copyright(c) 2012-2014 Jake Luer <jake@alogicalparadox.com>\n * MIT Licensed\n */\n\nvar type = require('type-detect');\n\n/**\n * ### .hasProperty(object, name)\n *\n * This allows checking whether an object has\n * named property or numeric array index.\n *\n * Basically does the same thing as the `in`\n * operator but works properly with natives\n * and null/undefined values.\n *\n *     var obj = {\n *         arr: ['a', 'b', 'c']\n *       , str: 'Hello'\n *     }\n *\n * The following would be the results.\n *\n *     hasProperty('str', obj);  // true\n *     hasProperty('constructor', obj);  // true\n *     hasProperty('bar', obj);  // false\n *\n *     hasProperty('length', obj.str); // true\n *     hasProperty(1, obj.str);  // true\n *     hasProperty(5, obj.str);  // false\n *\n *     hasProperty('length', obj.arr);  // true\n *     hasProperty(2, obj.arr);  // true\n *     hasProperty(3, obj.arr);  // false\n *\n * @param {Objuect} object\n * @param {String|Number} name\n * @returns {Boolean} whether it exists\n * @namespace Utils\n * @name getPathInfo\n * @api public\n */\n\nvar literals = {\n    'number': Number\n  , 'string': String\n};\n\nmodule.exports = function hasProperty(name, obj) {\n  var ot = type(obj);\n\n  // Bad Object, obviously no props at all\n  if(ot === 'null' || ot === 'undefined')\n    return false;\n\n  // The `in` operator does not work with certain literals\n  // box these before the check\n  if(literals[ot] && typeof obj !== 'object')\n    obj = new literals[ot](obj);\n\n  return name in obj;\n};\n","/*!\n * chai\n * Copyright(c) 2011 Jake Luer <jake@alogicalparadox.com>\n * MIT Licensed\n */\n\n/*!\n * Main exports\n */\n\nvar exports = module.exports = {};\n\n/*!\n * test utility\n */\n\nexports.test = require('./test');\n\n/*!\n * type utility\n */\n\nexports.type = require('type-detect');\n\n/*!\n * expectTypes utility\n */\nexports.expectTypes = require('./expectTypes');\n\n/*!\n * message utility\n */\n\nexports.getMessage = require('./getMessage');\n\n/*!\n * actual utility\n */\n\nexports.getActual = require('./getActual');\n\n/*!\n * Inspect util\n */\n\nexports.inspect = require('./inspect');\n\n/*!\n * Object Display util\n */\n\nexports.objDisplay = require('./objDisplay');\n\n/*!\n * Flag utility\n */\n\nexports.flag = require('./flag');\n\n/*!\n * Flag transferring utility\n */\n\nexports.transferFlags = require('./transferFlags');\n\n/*!\n * Deep equal utility\n */\n\nexports.eql = require('deep-eql');\n\n/*!\n * Deep path value\n */\n\nexports.getPathValue = require('./getPathValue');\n\n/*!\n * Deep path info\n */\n\nexports.getPathInfo = require('./getPathInfo');\n\n/*!\n * Check if a property exists\n */\n\nexports.hasProperty = require('./hasProperty');\n\n/*!\n * Function name\n */\n\nexports.getName = require('./getName');\n\n/*!\n * add Property\n */\n\nexports.addProperty = require('./addProperty');\n\n/*!\n * add Method\n */\n\nexports.addMethod = require('./addMethod');\n\n/*!\n * overwrite Property\n */\n\nexports.overwriteProperty = require('./overwriteProperty');\n\n/*!\n * overwrite Method\n */\n\nexports.overwriteMethod = require('./overwriteMethod');\n\n/*!\n * Add a chainable method\n */\n\nexports.addChainableMethod = require('./addChainableMethod');\n\n/*!\n * Overwrite chainable method\n */\n\nexports.overwriteChainableMethod = require('./overwriteChainableMethod');\n","// This is (almost) directly from Node.js utils\n// https://github.com/joyent/node/blob/f8c335d0caf47f16d31413f89aa28eda3878e3aa/lib/util.js\n\nvar getName = require('./getName');\nvar getProperties = require('./getProperties');\nvar getEnumerableProperties = require('./getEnumerableProperties');\n\nmodule.exports = inspect;\n\n/**\n * Echos the value of a value. Trys to print the value out\n * in the best way possible given the different types.\n *\n * @param {Object} obj The object to print out.\n * @param {Boolean} showHidden Flag that shows hidden (not enumerable)\n *    properties of objects.\n * @param {Number} depth Depth in which to descend in object. Default is 2.\n * @param {Boolean} colors Flag to turn on ANSI escape codes to color the\n *    output. Default is false (no coloring).\n * @namespace Utils\n * @name inspect\n */\nfunction inspect(obj, showHidden, depth, colors) {\n  var ctx = {\n    showHidden: showHidden,\n    seen: [],\n    stylize: function (str) { return str; }\n  };\n  return formatValue(ctx, obj, (typeof depth === 'undefined' ? 2 : depth));\n}\n\n// Returns true if object is a DOM element.\nvar isDOMElement = function (object) {\n  if (typeof HTMLElement === 'object') {\n    return object instanceof HTMLElement;\n  } else {\n    return object &&\n      typeof object === 'object' &&\n      object.nodeType === 1 &&\n      typeof object.nodeName === 'string';\n  }\n};\n\nfunction formatValue(ctx, value, recurseTimes) {\n  // Provide a hook for user-specified inspect functions.\n  // Check that value is an object with an inspect function on it\n  if (value && typeof value.inspect === 'function' &&\n      // Filter out the util module, it's inspect function is special\n      value.inspect !== exports.inspect &&\n      // Also filter out any prototype objects using the circular check.\n      !(value.constructor && value.constructor.prototype === value)) {\n    var ret = value.inspect(recurseTimes);\n    if (typeof ret !== 'string') {\n      ret = formatValue(ctx, ret, recurseTimes);\n    }\n    return ret;\n  }\n\n  // Primitive types cannot have properties\n  var primitive = formatPrimitive(ctx, value);\n  if (primitive) {\n    return primitive;\n  }\n\n  // If this is a DOM element, try to get the outer HTML.\n  if (isDOMElement(value)) {\n    if ('outerHTML' in value) {\n      return value.outerHTML;\n      // This value does not have an outerHTML attribute,\n      //   it could still be an XML element\n    } else {\n      // Attempt to serialize it\n      try {\n        if (document.xmlVersion) {\n          var xmlSerializer = new XMLSerializer();\n          return xmlSerializer.serializeToString(value);\n        } else {\n          // Firefox 11- do not support outerHTML\n          //   It does, however, support innerHTML\n          //   Use the following to render the element\n          var ns = \"http://www.w3.org/1999/xhtml\";\n          var container = document.createElementNS(ns, '_');\n\n          container.appendChild(value.cloneNode(false));\n          html = container.innerHTML\n            .replace('><', '>' + value.innerHTML + '<');\n          container.innerHTML = '';\n          return html;\n        }\n      } catch (err) {\n        // This could be a non-native DOM implementation,\n        //   continue with the normal flow:\n        //   printing the element as if it is an object.\n      }\n    }\n  }\n\n  // Look up the keys of the object.\n  var visibleKeys = getEnumerableProperties(value);\n  var keys = ctx.showHidden ? getProperties(value) : visibleKeys;\n\n  // Some type of object without properties can be shortcutted.\n  // In IE, errors have a single `stack` property, or if they are vanilla `Error`,\n  // a `stack` plus `description` property; ignore those for consistency.\n  if (keys.length === 0 || (isError(value) && (\n      (keys.length === 1 && keys[0] === 'stack') ||\n      (keys.length === 2 && keys[0] === 'description' && keys[1] === 'stack')\n     ))) {\n    if (typeof value === 'function') {\n      var name = getName(value);\n      var nameSuffix = name ? ': ' + name : '';\n      return ctx.stylize('[Function' + nameSuffix + ']', 'special');\n    }\n    if (isRegExp(value)) {\n      return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');\n    }\n    if (isDate(value)) {\n      return ctx.stylize(Date.prototype.toUTCString.call(value), 'date');\n    }\n    if (isError(value)) {\n      return formatError(value);\n    }\n  }\n\n  var base = '', array = false, braces = ['{', '}'];\n\n  // Make Array say that they are Array\n  if (isArray(value)) {\n    array = true;\n    braces = ['[', ']'];\n  }\n\n  // Make functions say that they are functions\n  if (typeof value === 'function') {\n    var name = getName(value);\n    var nameSuffix = name ? ': ' + name : '';\n    base = ' [Function' + nameSuffix + ']';\n  }\n\n  // Make RegExps say that they are RegExps\n  if (isRegExp(value)) {\n    base = ' ' + RegExp.prototype.toString.call(value);\n  }\n\n  // Make dates with properties first say the date\n  if (isDate(value)) {\n    base = ' ' + Date.prototype.toUTCString.call(value);\n  }\n\n  // Make error with message first say the error\n  if (isError(value)) {\n    return formatError(value);\n  }\n\n  if (keys.length === 0 && (!array || value.length == 0)) {\n    return braces[0] + base + braces[1];\n  }\n\n  if (recurseTimes < 0) {\n    if (isRegExp(value)) {\n      return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');\n    } else {\n      return ctx.stylize('[Object]', 'special');\n    }\n  }\n\n  ctx.seen.push(value);\n\n  var output;\n  if (array) {\n    output = formatArray(ctx, value, recurseTimes, visibleKeys, keys);\n  } else {\n    output = keys.map(function(key) {\n      return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array);\n    });\n  }\n\n  ctx.seen.pop();\n\n  return reduceToSingleString(output, base, braces);\n}\n\n\nfunction formatPrimitive(ctx, value) {\n  switch (typeof value) {\n    case 'undefined':\n      return ctx.stylize('undefined', 'undefined');\n\n    case 'string':\n      var simple = '\\'' + JSON.stringify(value).replace(/^\"|\"$/g, '')\n                                               .replace(/'/g, \"\\\\'\")\n                                               .replace(/\\\\\"/g, '\"') + '\\'';\n      return ctx.stylize(simple, 'string');\n\n    case 'number':\n      if (value === 0 && (1/value) === -Infinity) {\n        return ctx.stylize('-0', 'number');\n      }\n      return ctx.stylize('' + value, 'number');\n\n    case 'boolean':\n      return ctx.stylize('' + value, 'boolean');\n  }\n  // For some reason typeof null is \"object\", so special case here.\n  if (value === null) {\n    return ctx.stylize('null', 'null');\n  }\n}\n\n\nfunction formatError(value) {\n  return '[' + Error.prototype.toString.call(value) + ']';\n}\n\n\nfunction formatArray(ctx, value, recurseTimes, visibleKeys, keys) {\n  var output = [];\n  for (var i = 0, l = value.length; i < l; ++i) {\n    if (Object.prototype.hasOwnProperty.call(value, String(i))) {\n      output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,\n          String(i), true));\n    } else {\n      output.push('');\n    }\n  }\n  keys.forEach(function(key) {\n    if (!key.match(/^\\d+$/)) {\n      output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,\n          key, true));\n    }\n  });\n  return output;\n}\n\n\nfunction formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) {\n  var name, str;\n  if (value.__lookupGetter__) {\n    if (value.__lookupGetter__(key)) {\n      if (value.__lookupSetter__(key)) {\n        str = ctx.stylize('[Getter/Setter]', 'special');\n      } else {\n        str = ctx.stylize('[Getter]', 'special');\n      }\n    } else {\n      if (value.__lookupSetter__(key)) {\n        str = ctx.stylize('[Setter]', 'special');\n      }\n    }\n  }\n  if (visibleKeys.indexOf(key) < 0) {\n    name = '[' + key + ']';\n  }\n  if (!str) {\n    if (ctx.seen.indexOf(value[key]) < 0) {\n      if (recurseTimes === null) {\n        str = formatValue(ctx, value[key], null);\n      } else {\n        str = formatValue(ctx, value[key], recurseTimes - 1);\n      }\n      if (str.indexOf('\\n') > -1) {\n        if (array) {\n          str = str.split('\\n').map(function(line) {\n            return '  ' + line;\n          }).join('\\n').substr(2);\n        } else {\n          str = '\\n' + str.split('\\n').map(function(line) {\n            return '   ' + line;\n          }).join('\\n');\n        }\n      }\n    } else {\n      str = ctx.stylize('[Circular]', 'special');\n    }\n  }\n  if (typeof name === 'undefined') {\n    if (array && key.match(/^\\d+$/)) {\n      return str;\n    }\n    name = JSON.stringify('' + key);\n    if (name.match(/^\"([a-zA-Z_][a-zA-Z_0-9]*)\"$/)) {\n      name = name.substr(1, name.length - 2);\n      name = ctx.stylize(name, 'name');\n    } else {\n      name = name.replace(/'/g, \"\\\\'\")\n                 .replace(/\\\\\"/g, '\"')\n                 .replace(/(^\"|\"$)/g, \"'\");\n      name = ctx.stylize(name, 'string');\n    }\n  }\n\n  return name + ': ' + str;\n}\n\n\nfunction reduceToSingleString(output, base, braces) {\n  var numLinesEst = 0;\n  var length = output.reduce(function(prev, cur) {\n    numLinesEst++;\n    if (cur.indexOf('\\n') >= 0) numLinesEst++;\n    return prev + cur.length + 1;\n  }, 0);\n\n  if (length > 60) {\n    return braces[0] +\n           (base === '' ? '' : base + '\\n ') +\n           ' ' +\n           output.join(',\\n  ') +\n           ' ' +\n           braces[1];\n  }\n\n  return braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1];\n}\n\nfunction isArray(ar) {\n  return Array.isArray(ar) ||\n         (typeof ar === 'object' && objectToString(ar) === '[object Array]');\n}\n\nfunction isRegExp(re) {\n  return typeof re === 'object' && objectToString(re) === '[object RegExp]';\n}\n\nfunction isDate(d) {\n  return typeof d === 'object' && objectToString(d) === '[object Date]';\n}\n\nfunction isError(e) {\n  return typeof e === 'object' && objectToString(e) === '[object Error]';\n}\n\nfunction objectToString(o) {\n  return Object.prototype.toString.call(o);\n}\n","/*!\n * Chai - flag utility\n * Copyright(c) 2012-2014 Jake Luer <jake@alogicalparadox.com>\n * MIT Licensed\n */\n\n/*!\n * Module dependancies\n */\n\nvar inspect = require('./inspect');\nvar config = require('../config');\n\n/**\n * ### .objDisplay (object)\n *\n * Determines if an object or an array matches\n * criteria to be inspected in-line for error\n * messages or should be truncated.\n *\n * @param {Mixed} javascript object to inspect\n * @name objDisplay\n * @namespace Utils\n * @api public\n */\n\nmodule.exports = function (obj) {\n  var str = inspect(obj)\n    , type = Object.prototype.toString.call(obj);\n\n  if (config.truncateThreshold && str.length >= config.truncateThreshold) {\n    if (type === '[object Function]') {\n      return !obj.name || obj.name === ''\n        ? '[Function]'\n        : '[Function: ' + obj.name + ']';\n    } else if (type === '[object Array]') {\n      return '[ Array(' + obj.length + ') ]';\n    } else if (type === '[object Object]') {\n      var keys = Object.keys(obj)\n        , kstr = keys.length > 2\n          ? keys.splice(0, 2).join(', ') + ', ...'\n          : keys.join(', ');\n      return '{ Object (' + kstr + ') }';\n    } else {\n      return str;\n    }\n  } else {\n    return str;\n  }\n};\n","/*!\n * Chai - overwriteChainableMethod utility\n * Copyright(c) 2012-2014 Jake Luer <jake@alogicalparadox.com>\n * MIT Licensed\n */\n\n/**\n * ### overwriteChainableMethod (ctx, name, method, chainingBehavior)\n *\n * Overwites an already existing chainable method\n * and provides access to the previous function or\n * property.  Must return functions to be used for\n * name.\n *\n *     utils.overwriteChainableMethod(chai.Assertion.prototype, 'length',\n *       function (_super) {\n *       }\n *     , function (_super) {\n *       }\n *     );\n *\n * Can also be accessed directly from `chai.Assertion`.\n *\n *     chai.Assertion.overwriteChainableMethod('foo', fn, fn);\n *\n * Then can be used as any other assertion.\n *\n *     expect(myFoo).to.have.length(3);\n *     expect(myFoo).to.have.length.above(3);\n *\n * @param {Object} ctx object whose method / property is to be overwritten\n * @param {String} name of method / property to overwrite\n * @param {Function} method function that returns a function to be used for name\n * @param {Function} chainingBehavior function that returns a function to be used for property\n * @namespace Utils\n * @name overwriteChainableMethod\n * @api public\n */\n\nmodule.exports = function (ctx, name, method, chainingBehavior) {\n  var chainableBehavior = ctx.__methods[name];\n\n  var _chainingBehavior = chainableBehavior.chainingBehavior;\n  chainableBehavior.chainingBehavior = function () {\n    var result = chainingBehavior(_chainingBehavior).call(this);\n    return result === undefined ? this : result;\n  };\n\n  var _method = chainableBehavior.method;\n  chainableBehavior.method = function () {\n    var result = method(_method).apply(this, arguments);\n    return result === undefined ? this : result;\n  };\n};\n","/*!\n * Chai - overwriteMethod utility\n * Copyright(c) 2012-2014 Jake Luer <jake@alogicalparadox.com>\n * MIT Licensed\n */\n\n/**\n * ### overwriteMethod (ctx, name, fn)\n *\n * Overwites an already existing method and provides\n * access to previous function. Must return function\n * to be used for name.\n *\n *     utils.overwriteMethod(chai.Assertion.prototype, 'equal', function (_super) {\n *       return function (str) {\n *         var obj = utils.flag(this, 'object');\n *         if (obj instanceof Foo) {\n *           new chai.Assertion(obj.value).to.equal(str);\n *         } else {\n *           _super.apply(this, arguments);\n *         }\n *       }\n *     });\n *\n * Can also be accessed directly from `chai.Assertion`.\n *\n *     chai.Assertion.overwriteMethod('foo', fn);\n *\n * Then can be used as any other assertion.\n *\n *     expect(myFoo).to.equal('bar');\n *\n * @param {Object} ctx object whose method is to be overwritten\n * @param {String} name of method to overwrite\n * @param {Function} method function that returns a function to be used for name\n * @namespace Utils\n * @name overwriteMethod\n * @api public\n */\n\nmodule.exports = function (ctx, name, method) {\n  var _method = ctx[name]\n    , _super = function () { return this; };\n\n  if (_method && 'function' === typeof _method)\n    _super = _method;\n\n  ctx[name] = function () {\n    var result = method(_super).apply(this, arguments);\n    return result === undefined ? this : result;\n  }\n};\n","/*!\n * Chai - overwriteProperty utility\n * Copyright(c) 2012-2014 Jake Luer <jake@alogicalparadox.com>\n * MIT Licensed\n */\n\n/**\n * ### overwriteProperty (ctx, name, fn)\n *\n * Overwites an already existing property getter and provides\n * access to previous value. Must return function to use as getter.\n *\n *     utils.overwriteProperty(chai.Assertion.prototype, 'ok', function (_super) {\n *       return function () {\n *         var obj = utils.flag(this, 'object');\n *         if (obj instanceof Foo) {\n *           new chai.Assertion(obj.name).to.equal('bar');\n *         } else {\n *           _super.call(this);\n *         }\n *       }\n *     });\n *\n *\n * Can also be accessed directly from `chai.Assertion`.\n *\n *     chai.Assertion.overwriteProperty('foo', fn);\n *\n * Then can be used as any other assertion.\n *\n *     expect(myFoo).to.be.ok;\n *\n * @param {Object} ctx object whose property is to be overwritten\n * @param {String} name of property to overwrite\n * @param {Function} getter function that returns a getter function to be used for name\n * @namespace Utils\n * @name overwriteProperty\n * @api public\n */\n\nmodule.exports = function (ctx, name, getter) {\n  var _get = Object.getOwnPropertyDescriptor(ctx, name)\n    , _super = function () {};\n\n  if (_get && 'function' === typeof _get.get)\n    _super = _get.get\n\n  Object.defineProperty(ctx, name,\n    { get: function () {\n        var result = getter(_super).call(this);\n        return result === undefined ? this : result;\n      }\n    , configurable: true\n  });\n};\n","/*!\n * Chai - test utility\n * Copyright(c) 2012-2014 Jake Luer <jake@alogicalparadox.com>\n * MIT Licensed\n */\n\n/*!\n * Module dependancies\n */\n\nvar flag = require('./flag');\n\n/**\n * # test(object, expression)\n *\n * Test and object for expression.\n *\n * @param {Object} object (constructed Assertion)\n * @param {Arguments} chai.Assertion.prototype.assert arguments\n * @namespace Utils\n * @name test\n */\n\nmodule.exports = function (obj, args) {\n  var negate = flag(obj, 'negate')\n    , expr = args[0];\n  return negate ? !expr : expr;\n};\n","/*!\n * Chai - transferFlags utility\n * Copyright(c) 2012-2014 Jake Luer <jake@alogicalparadox.com>\n * MIT Licensed\n */\n\n/**\n * ### transferFlags(assertion, object, includeAll = true)\n *\n * Transfer all the flags for `assertion` to `object`. If\n * `includeAll` is set to `false`, then the base Chai\n * assertion flags (namely `object`, `ssfi`, and `message`)\n * will not be transferred.\n *\n *\n *     var newAssertion = new Assertion();\n *     utils.transferFlags(assertion, newAssertion);\n *\n *     var anotherAsseriton = new Assertion(myObj);\n *     utils.transferFlags(assertion, anotherAssertion, false);\n *\n * @param {Assertion} assertion the assertion to transfer the flags from\n * @param {Object} object the object to transfer the flags to; usually a new assertion\n * @param {Boolean} includeAll\n * @namespace Utils\n * @name transferFlags\n * @api private\n */\n\nmodule.exports = function (assertion, object, includeAll) {\n  var flags = assertion.__flags || (assertion.__flags = Object.create(null));\n\n  if (!object.__flags) {\n    object.__flags = Object.create(null);\n  }\n\n  includeAll = arguments.length === 3 ? includeAll : true;\n\n  for (var flag in flags) {\n    if (includeAll ||\n        (flag !== 'object' && flag !== 'ssfi' && flag != 'message')) {\n      object.__flags[flag] = flags[flag];\n    }\n  }\n};\n","/*!\n * assertion-error\n * Copyright(c) 2013 Jake Luer <jake@qualiancy.com>\n * MIT Licensed\n */\n\n/*!\n * Return a function that will copy properties from\n * one object to another excluding any originally\n * listed. Returned function will create a new `{}`.\n *\n * @param {String} excluded properties ...\n * @return {Function}\n */\n\nfunction exclude () {\n  var excludes = [].slice.call(arguments);\n\n  function excludeProps (res, obj) {\n    Object.keys(obj).forEach(function (key) {\n      if (!~excludes.indexOf(key)) res[key] = obj[key];\n    });\n  }\n\n  return function extendExclude () {\n    var args = [].slice.call(arguments)\n      , i = 0\n      , res = {};\n\n    for (; i < args.length; i++) {\n      excludeProps(res, args[i]);\n    }\n\n    return res;\n  };\n};\n\n/*!\n * Primary Exports\n */\n\nmodule.exports = AssertionError;\n\n/**\n * ### AssertionError\n *\n * An extension of the JavaScript `Error` constructor for\n * assertion and validation scenarios.\n *\n * @param {String} message\n * @param {Object} properties to include (optional)\n * @param {callee} start stack function (optional)\n */\n\nfunction AssertionError (message, _props, ssf) {\n  var extend = exclude('name', 'message', 'stack', 'constructor', 'toJSON')\n    , props = extend(_props || {});\n\n  // default values\n  this.message = message || 'Unspecified AssertionError';\n  this.showDiff = false;\n\n  // copy from properties\n  for (var key in props) {\n    this[key] = props[key];\n  }\n\n  // capture stack trace\n  ssf = ssf || arguments.callee;\n  if (ssf && Error.captureStackTrace) {\n    Error.captureStackTrace(this, ssf);\n  } else {\n    this.stack = new Error().stack;\n  }\n}\n\n/*!\n * Inherit from Error.prototype\n */\n\nAssertionError.prototype = Object.create(Error.prototype);\n\n/*!\n * Statically set name\n */\n\nAssertionError.prototype.name = 'AssertionError';\n\n/*!\n * Ensure correct constructor\n */\n\nAssertionError.prototype.constructor = AssertionError;\n\n/**\n * Allow errors to be converted to JSON for static transfer.\n *\n * @param {Boolean} include stack (default: `true`)\n * @return {Object} object that can be `JSON.stringify`\n */\n\nAssertionError.prototype.toJSON = function (stack) {\n  var extend = exclude('constructor', 'toJSON', 'stack')\n    , props = extend({ name: this.name }, this);\n\n  // include stack if exists and not turned off\n  if (false !== stack && this.stack) {\n    props.stack = this.stack;\n  }\n\n  return props;\n};\n","module.exports = require('./lib/eql');\n","/*!\n * deep-eql\n * Copyright(c) 2013 Jake Luer <jake@alogicalparadox.com>\n * MIT Licensed\n */\n\n/*!\n * Module dependencies\n */\n\nvar type = require('type-detect');\n\n/*!\n * Buffer.isBuffer browser shim\n */\n\nvar Buffer;\ntry { Buffer = require('buffer').Buffer; }\ncatch(ex) {\n  Buffer = {};\n  Buffer.isBuffer = function() { return false; }\n}\n\n/*!\n * Primary Export\n */\n\nmodule.exports = deepEqual;\n\n/**\n * Assert super-strict (egal) equality between\n * two objects of any type.\n *\n * @param {Mixed} a\n * @param {Mixed} b\n * @param {Array} memoised (optional)\n * @return {Boolean} equal match\n */\n\nfunction deepEqual(a, b, m) {\n  if (sameValue(a, b)) {\n    return true;\n  } else if ('date' === type(a)) {\n    return dateEqual(a, b);\n  } else if ('regexp' === type(a)) {\n    return regexpEqual(a, b);\n  } else if (Buffer.isBuffer(a)) {\n    return bufferEqual(a, b);\n  } else if ('arguments' === type(a)) {\n    return argumentsEqual(a, b, m);\n  } else if (!typeEqual(a, b)) {\n    return false;\n  } else if (('object' !== type(a) && 'object' !== type(b))\n  && ('array' !== type(a) && 'array' !== type(b))) {\n    return sameValue(a, b);\n  } else {\n    return objectEqual(a, b, m);\n  }\n}\n\n/*!\n * Strict (egal) equality test. Ensures that NaN always\n * equals NaN and `-0` does not equal `+0`.\n *\n * @param {Mixed} a\n * @param {Mixed} b\n * @return {Boolean} equal match\n */\n\nfunction sameValue(a, b) {\n  if (a === b) return a !== 0 || 1 / a === 1 / b;\n  return a !== a && b !== b;\n}\n\n/*!\n * Compare the types of two given objects and\n * return if they are equal. Note that an Array\n * has a type of `array` (not `object`) and arguments\n * have a type of `arguments` (not `array`/`object`).\n *\n * @param {Mixed} a\n * @param {Mixed} b\n * @return {Boolean} result\n */\n\nfunction typeEqual(a, b) {\n  return type(a) === type(b);\n}\n\n/*!\n * Compare two Date objects by asserting that\n * the time values are equal using `saveValue`.\n *\n * @param {Date} a\n * @param {Date} b\n * @return {Boolean} result\n */\n\nfunction dateEqual(a, b) {\n  if ('date' !== type(b)) return false;\n  return sameValue(a.getTime(), b.getTime());\n}\n\n/*!\n * Compare two regular expressions by converting them\n * to string and checking for `sameValue`.\n *\n * @param {RegExp} a\n * @param {RegExp} b\n * @return {Boolean} result\n */\n\nfunction regexpEqual(a, b) {\n  if ('regexp' !== type(b)) return false;\n  return sameValue(a.toString(), b.toString());\n}\n\n/*!\n * Assert deep equality of two `arguments` objects.\n * Unfortunately, these must be sliced to arrays\n * prior to test to ensure no bad behavior.\n *\n * @param {Arguments} a\n * @param {Arguments} b\n * @param {Array} memoize (optional)\n * @return {Boolean} result\n */\n\nfunction argumentsEqual(a, b, m) {\n  if ('arguments' !== type(b)) return false;\n  a = [].slice.call(a);\n  b = [].slice.call(b);\n  return deepEqual(a, b, m);\n}\n\n/*!\n * Get enumerable properties of a given object.\n *\n * @param {Object} a\n * @return {Array} property names\n */\n\nfunction enumerable(a) {\n  var res = [];\n  for (var key in a) res.push(key);\n  return res;\n}\n\n/*!\n * Simple equality for flat iterable objects\n * such as Arrays or Node.js buffers.\n *\n * @param {Iterable} a\n * @param {Iterable} b\n * @return {Boolean} result\n */\n\nfunction iterableEqual(a, b) {\n  if (a.length !==  b.length) return false;\n\n  var i = 0;\n  var match = true;\n\n  for (; i < a.length; i++) {\n    if (a[i] !== b[i]) {\n      match = false;\n      break;\n    }\n  }\n\n  return match;\n}\n\n/*!\n * Extension to `iterableEqual` specifically\n * for Node.js Buffers.\n *\n * @param {Buffer} a\n * @param {Mixed} b\n * @return {Boolean} result\n */\n\nfunction bufferEqual(a, b) {\n  if (!Buffer.isBuffer(b)) return false;\n  return iterableEqual(a, b);\n}\n\n/*!\n * Block for `objectEqual` ensuring non-existing\n * values don't get in.\n *\n * @param {Mixed} object\n * @return {Boolean} result\n */\n\nfunction isValue(a) {\n  return a !== null && a !== undefined;\n}\n\n/*!\n * Recursively check the equality of two objects.\n * Once basic sameness has been established it will\n * defer to `deepEqual` for each enumerable key\n * in the object.\n *\n * @param {Mixed} a\n * @param {Mixed} b\n * @return {Boolean} result\n */\n\nfunction objectEqual(a, b, m) {\n  if (!isValue(a) || !isValue(b)) {\n    return false;\n  }\n\n  if (a.prototype !== b.prototype) {\n    return false;\n  }\n\n  var i;\n  if (m) {\n    for (i = 0; i < m.length; i++) {\n      if ((m[i][0] === a && m[i][1] === b)\n      ||  (m[i][0] === b && m[i][1] === a)) {\n        return true;\n      }\n    }\n  } else {\n    m = [];\n  }\n\n  try {\n    var ka = enumerable(a);\n    var kb = enumerable(b);\n  } catch (ex) {\n    return false;\n  }\n\n  ka.sort();\n  kb.sort();\n\n  if (!iterableEqual(ka, kb)) {\n    return false;\n  }\n\n  m.push([ a, b ]);\n\n  var key;\n  for (i = ka.length - 1; i >= 0; i--) {\n    key = ka[i];\n    if (!deepEqual(a[key], b[key], m)) {\n      return false;\n    }\n  }\n\n  return true;\n}\n","module.exports = require('./lib/type');\n","/*!\n * type-detect\n * Copyright(c) 2013 jake luer <jake@alogicalparadox.com>\n * MIT Licensed\n */\n\n/*!\n * Primary Exports\n */\n\nvar exports = module.exports = getType;\n\n/*!\n * Detectable javascript natives\n */\n\nvar natives = {\n    '[object Array]': 'array'\n  , '[object RegExp]': 'regexp'\n  , '[object Function]': 'function'\n  , '[object Arguments]': 'arguments'\n  , '[object Date]': 'date'\n};\n\n/**\n * ### typeOf (obj)\n *\n * Use several different techniques to determine\n * the type of object being tested.\n *\n *\n * @param {Mixed} object\n * @return {String} object type\n * @api public\n */\n\nfunction getType (obj) {\n  var str = Object.prototype.toString.call(obj);\n  if (natives[str]) return natives[str];\n  if (obj === null) return 'null';\n  if (obj === undefined) return 'undefined';\n  if (obj === Object(obj)) return 'object';\n  return typeof obj;\n}\n\nexports.Library = Library;\n\n/**\n * ### Library\n *\n * Create a repository for custom type detection.\n *\n * ```js\n * var lib = new type.Library;\n * ```\n *\n */\n\nfunction Library () {\n  this.tests = {};\n}\n\n/**\n * #### .of (obj)\n *\n * Expose replacement `typeof` detection to the library.\n *\n * ```js\n * if ('string' === lib.of('hello world')) {\n *   // ...\n * }\n * ```\n *\n * @param {Mixed} object to test\n * @return {String} type\n */\n\nLibrary.prototype.of = getType;\n\n/**\n * #### .define (type, test)\n *\n * Add a test to for the `.test()` assertion.\n *\n * Can be defined as a regular expression:\n *\n * ```js\n * lib.define('int', /^[0-9]+$/);\n * ```\n *\n * ... or as a function:\n *\n * ```js\n * lib.define('bln', function (obj) {\n *   if ('boolean' === lib.of(obj)) return true;\n *   var blns = [ 'yes', 'no', 'true', 'false', 1, 0 ];\n *   if ('string' === lib.of(obj)) obj = obj.toLowerCase();\n *   return !! ~blns.indexOf(obj);\n * });\n * ```\n *\n * @param {String} type\n * @param {RegExp|Function} test\n * @api public\n */\n\nLibrary.prototype.define = function (type, test) {\n  if (arguments.length === 1) return this.tests[type];\n  this.tests[type] = test;\n  return this;\n};\n\n/**\n * #### .test (obj, test)\n *\n * Assert that an object is of type. Will first\n * check natives, and if that does not pass it will\n * use the user defined custom tests.\n *\n * ```js\n * assert(lib.test('1', 'int'));\n * assert(lib.test('yes', 'bln'));\n * ```\n *\n * @param {Mixed} object\n * @param {String} type\n * @return {Boolean} result\n * @api public\n */\n\nLibrary.prototype.test = function (obj, type) {\n  if (type === getType(obj)) return true;\n  var test = this.tests[type];\n\n  if (test && 'regexp' === getType(test)) {\n    return test.test(obj);\n  } else if (test && 'function' === getType(test)) {\n    return test(obj);\n  } else {\n    throw new ReferenceError('Type test \"' + type + '\" not defined or invalid.');\n  }\n};\n","/*!\n * type-detect\n * Copyright(c) 2013 jake luer <jake@alogicalparadox.com>\n * MIT Licensed\n */\n\n/*!\n * Primary Exports\n */\n\nvar exports = module.exports = getType;\n\n/**\n * ### typeOf (obj)\n *\n * Use several different techniques to determine\n * the type of object being tested.\n *\n *\n * @param {Mixed} object\n * @return {String} object type\n * @api public\n */\nvar objectTypeRegexp = /^\\[object (.*)\\]$/;\n\nfunction getType(obj) {\n  var type = Object.prototype.toString.call(obj).match(objectTypeRegexp)[1].toLowerCase();\n  // Let \"new String('')\" return 'object'\n  if (typeof Promise === 'function' && obj instanceof Promise) return 'promise';\n  // PhantomJS has type \"DOMWindow\" for null\n  if (obj === null) return 'null';\n  // PhantomJS has type \"DOMWindow\" for undefined\n  if (obj === undefined) return 'undefined';\n  return type;\n}\n\nexports.Library = Library;\n\n/**\n * ### Library\n *\n * Create a repository for custom type detection.\n *\n * ```js\n * var lib = new type.Library;\n * ```\n *\n */\n\nfunction Library() {\n  if (!(this instanceof Library)) return new Library();\n  this.tests = {};\n}\n\n/**\n * #### .of (obj)\n *\n * Expose replacement `typeof` detection to the library.\n *\n * ```js\n * if ('string' === lib.of('hello world')) {\n *   // ...\n * }\n * ```\n *\n * @param {Mixed} object to test\n * @return {String} type\n */\n\nLibrary.prototype.of = getType;\n\n/**\n * #### .define (type, test)\n *\n * Add a test to for the `.test()` assertion.\n *\n * Can be defined as a regular expression:\n *\n * ```js\n * lib.define('int', /^[0-9]+$/);\n * ```\n *\n * ... or as a function:\n *\n * ```js\n * lib.define('bln', function (obj) {\n *   if ('boolean' === lib.of(obj)) return true;\n *   var blns = [ 'yes', 'no', 'true', 'false', 1, 0 ];\n *   if ('string' === lib.of(obj)) obj = obj.toLowerCase();\n *   return !! ~blns.indexOf(obj);\n * });\n * ```\n *\n * @param {String} type\n * @param {RegExp|Function} test\n * @api public\n */\n\nLibrary.prototype.define = function(type, test) {\n  if (arguments.length === 1) return this.tests[type];\n  this.tests[type] = test;\n  return this;\n};\n\n/**\n * #### .test (obj, test)\n *\n * Assert that an object is of type. Will first\n * check natives, and if that does not pass it will\n * use the user defined custom tests.\n *\n * ```js\n * assert(lib.test('1', 'int'));\n * assert(lib.test('yes', 'bln'));\n * ```\n *\n * @param {Mixed} object\n * @param {String} type\n * @return {Boolean} result\n * @api public\n */\n\nLibrary.prototype.test = function(obj, type) {\n  if (type === getType(obj)) return true;\n  var test = this.tests[type];\n\n  if (test && 'regexp' === getType(test)) {\n    return test.test(obj);\n  } else if (test && 'function' === getType(test)) {\n    return test(obj);\n  } else {\n    throw new ReferenceError('Type test \"' + type + '\" not defined or invalid.');\n  }\n};\n","/*!\n * jQuery JavaScript Library v2.2.3\n * http://jquery.com/\n *\n * Includes Sizzle.js\n * http://sizzlejs.com/\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license\n * http://jquery.org/license\n *\n * Date: 2016-04-05T19:26Z\n */\n\n(function( global, factory ) {\n\n\tif ( typeof module === \"object\" && typeof module.exports === \"object\" ) {\n\t\t// For CommonJS and CommonJS-like environments where a proper `window`\n\t\t// is present, execute the factory and get jQuery.\n\t\t// For environments that do not have a `window` with a `document`\n\t\t// (such as Node.js), expose a factory as module.exports.\n\t\t// This accentuates the need for the creation of a real `window`.\n\t\t// e.g. var jQuery = require(\"jquery\")(window);\n\t\t// See ticket #14549 for more info.\n\t\tmodule.exports = global.document ?\n\t\t\tfactory( global, true ) :\n\t\t\tfunction( w ) {\n\t\t\t\tif ( !w.document ) {\n\t\t\t\t\tthrow new Error( \"jQuery requires a window with a document\" );\n\t\t\t\t}\n\t\t\t\treturn factory( w );\n\t\t\t};\n\t} else {\n\t\tfactory( global );\n\t}\n\n// Pass this if window is not defined yet\n}(typeof window !== \"undefined\" ? window : this, function( window, noGlobal ) {\n\n// Support: Firefox 18+\n// Can't be in strict mode, several libs including ASP.NET trace\n// the stack via arguments.caller.callee and Firefox dies if\n// you try to trace through \"use strict\" call chains. (#13335)\n//\"use strict\";\nvar arr = [];\n\nvar document = window.document;\n\nvar slice = arr.slice;\n\nvar concat = arr.concat;\n\nvar push = arr.push;\n\nvar indexOf = arr.indexOf;\n\nvar class2type = {};\n\nvar toString = class2type.toString;\n\nvar hasOwn = class2type.hasOwnProperty;\n\nvar support = {};\n\n\n\nvar\n\tversion = \"2.2.3\",\n\n\t// Define a local copy of jQuery\n\tjQuery = function( selector, context ) {\n\n\t\t// The jQuery object is actually just the init constructor 'enhanced'\n\t\t// Need init if jQuery is called (just allow error to be thrown if not included)\n\t\treturn new jQuery.fn.init( selector, context );\n\t},\n\n\t// Support: Android<4.1\n\t// Make sure we trim BOM and NBSP\n\trtrim = /^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g,\n\n\t// Matches dashed string for camelizing\n\trmsPrefix = /^-ms-/,\n\trdashAlpha = /-([\\da-z])/gi,\n\n\t// Used by jQuery.camelCase as callback to replace()\n\tfcamelCase = function( all, letter ) {\n\t\treturn letter.toUpperCase();\n\t};\n\njQuery.fn = jQuery.prototype = {\n\n\t// The current version of jQuery being used\n\tjquery: version,\n\n\tconstructor: jQuery,\n\n\t// Start with an empty selector\n\tselector: \"\",\n\n\t// The default length of a jQuery object is 0\n\tlength: 0,\n\n\ttoArray: function() {\n\t\treturn slice.call( this );\n\t},\n\n\t// Get the Nth element in the matched element set OR\n\t// Get the whole matched element set as a clean array\n\tget: function( num ) {\n\t\treturn num != null ?\n\n\t\t\t// Return just the one element from the set\n\t\t\t( num < 0 ? this[ num + this.length ] : this[ num ] ) :\n\n\t\t\t// Return all the elements in a clean array\n\t\t\tslice.call( this );\n\t},\n\n\t// Take an array of elements and push it onto the stack\n\t// (returning the new matched element set)\n\tpushStack: function( elems ) {\n\n\t\t// Build a new jQuery matched element set\n\t\tvar ret = jQuery.merge( this.constructor(), elems );\n\n\t\t// Add the old object onto the stack (as a reference)\n\t\tret.prevObject = this;\n\t\tret.context = this.context;\n\n\t\t// Return the newly-formed element set\n\t\treturn ret;\n\t},\n\n\t// Execute a callback for every element in the matched set.\n\teach: function( callback ) {\n\t\treturn jQuery.each( this, callback );\n\t},\n\n\tmap: function( callback ) {\n\t\treturn this.pushStack( jQuery.map( this, function( elem, i ) {\n\t\t\treturn callback.call( elem, i, elem );\n\t\t} ) );\n\t},\n\n\tslice: function() {\n\t\treturn this.pushStack( slice.apply( this, arguments ) );\n\t},\n\n\tfirst: function() {\n\t\treturn this.eq( 0 );\n\t},\n\n\tlast: function() {\n\t\treturn this.eq( -1 );\n\t},\n\n\teq: function( i ) {\n\t\tvar len = this.length,\n\t\t\tj = +i + ( i < 0 ? len : 0 );\n\t\treturn this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] );\n\t},\n\n\tend: function() {\n\t\treturn this.prevObject || this.constructor();\n\t},\n\n\t// For internal use only.\n\t// Behaves like an Array's method, not like a jQuery method.\n\tpush: push,\n\tsort: arr.sort,\n\tsplice: arr.splice\n};\n\njQuery.extend = jQuery.fn.extend = function() {\n\tvar options, name, src, copy, copyIsArray, clone,\n\t\ttarget = arguments[ 0 ] || {},\n\t\ti = 1,\n\t\tlength = arguments.length,\n\t\tdeep = false;\n\n\t// Handle a deep copy situation\n\tif ( typeof target === \"boolean\" ) {\n\t\tdeep = target;\n\n\t\t// Skip the boolean and the target\n\t\ttarget = arguments[ i ] || {};\n\t\ti++;\n\t}\n\n\t// Handle case when target is a string or something (possible in deep copy)\n\tif ( typeof target !== \"object\" && !jQuery.isFunction( target ) ) {\n\t\ttarget = {};\n\t}\n\n\t// Extend jQuery itself if only one argument is passed\n\tif ( i === length ) {\n\t\ttarget = this;\n\t\ti--;\n\t}\n\n\tfor ( ; i < length; i++ ) {\n\n\t\t// Only deal with non-null/undefined values\n\t\tif ( ( options = arguments[ i ] ) != null ) {\n\n\t\t\t// Extend the base object\n\t\t\tfor ( name in options ) {\n\t\t\t\tsrc = target[ name ];\n\t\t\t\tcopy = options[ name ];\n\n\t\t\t\t// Prevent never-ending loop\n\t\t\t\tif ( target === copy ) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// Recurse if we're merging plain objects or arrays\n\t\t\t\tif ( deep && copy && ( jQuery.isPlainObject( copy ) ||\n\t\t\t\t\t( copyIsArray = jQuery.isArray( copy ) ) ) ) {\n\n\t\t\t\t\tif ( copyIsArray ) {\n\t\t\t\t\t\tcopyIsArray = false;\n\t\t\t\t\t\tclone = src && jQuery.isArray( src ) ? src : [];\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tclone = src && jQuery.isPlainObject( src ) ? src : {};\n\t\t\t\t\t}\n\n\t\t\t\t\t// Never move original objects, clone them\n\t\t\t\t\ttarget[ name ] = jQuery.extend( deep, clone, copy );\n\n\t\t\t\t// Don't bring in undefined values\n\t\t\t\t} else if ( copy !== undefined ) {\n\t\t\t\t\ttarget[ name ] = copy;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Return the modified object\n\treturn target;\n};\n\njQuery.extend( {\n\n\t// Unique for each copy of jQuery on the page\n\texpando: \"jQuery\" + ( version + Math.random() ).replace( /\\D/g, \"\" ),\n\n\t// Assume jQuery is ready without the ready module\n\tisReady: true,\n\n\terror: function( msg ) {\n\t\tthrow new Error( msg );\n\t},\n\n\tnoop: function() {},\n\n\tisFunction: function( obj ) {\n\t\treturn jQuery.type( obj ) === \"function\";\n\t},\n\n\tisArray: Array.isArray,\n\n\tisWindow: function( obj ) {\n\t\treturn obj != null && obj === obj.window;\n\t},\n\n\tisNumeric: function( obj ) {\n\n\t\t// parseFloat NaNs numeric-cast false positives (null|true|false|\"\")\n\t\t// ...but misinterprets leading-number strings, particularly hex literals (\"0x...\")\n\t\t// subtraction forces infinities to NaN\n\t\t// adding 1 corrects loss of precision from parseFloat (#15100)\n\t\tvar realStringObj = obj && obj.toString();\n\t\treturn !jQuery.isArray( obj ) && ( realStringObj - parseFloat( realStringObj ) + 1 ) >= 0;\n\t},\n\n\tisPlainObject: function( obj ) {\n\t\tvar key;\n\n\t\t// Not plain objects:\n\t\t// - Any object or value whose internal [[Class]] property is not \"[object Object]\"\n\t\t// - DOM nodes\n\t\t// - window\n\t\tif ( jQuery.type( obj ) !== \"object\" || obj.nodeType || jQuery.isWindow( obj ) ) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Not own constructor property must be Object\n\t\tif ( obj.constructor &&\n\t\t\t\t!hasOwn.call( obj, \"constructor\" ) &&\n\t\t\t\t!hasOwn.call( obj.constructor.prototype || {}, \"isPrototypeOf\" ) ) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Own properties are enumerated firstly, so to speed up,\n\t\t// if last one is own, then all properties are own\n\t\tfor ( key in obj ) {}\n\n\t\treturn key === undefined || hasOwn.call( obj, key );\n\t},\n\n\tisEmptyObject: function( obj ) {\n\t\tvar name;\n\t\tfor ( name in obj ) {\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t},\n\n\ttype: function( obj ) {\n\t\tif ( obj == null ) {\n\t\t\treturn obj + \"\";\n\t\t}\n\n\t\t// Support: Android<4.0, iOS<6 (functionish RegExp)\n\t\treturn typeof obj === \"object\" || typeof obj === \"function\" ?\n\t\t\tclass2type[ toString.call( obj ) ] || \"object\" :\n\t\t\ttypeof obj;\n\t},\n\n\t// Evaluates a script in a global context\n\tglobalEval: function( code ) {\n\t\tvar script,\n\t\t\tindirect = eval;\n\n\t\tcode = jQuery.trim( code );\n\n\t\tif ( code ) {\n\n\t\t\t// If the code includes a valid, prologue position\n\t\t\t// strict mode pragma, execute code by injecting a\n\t\t\t// script tag into the document.\n\t\t\tif ( code.indexOf( \"use strict\" ) === 1 ) {\n\t\t\t\tscript = document.createElement( \"script\" );\n\t\t\t\tscript.text = code;\n\t\t\t\tdocument.head.appendChild( script ).parentNode.removeChild( script );\n\t\t\t} else {\n\n\t\t\t\t// Otherwise, avoid the DOM node creation, insertion\n\t\t\t\t// and removal by using an indirect global eval\n\n\t\t\t\tindirect( code );\n\t\t\t}\n\t\t}\n\t},\n\n\t// Convert dashed to camelCase; used by the css and data modules\n\t// Support: IE9-11+\n\t// Microsoft forgot to hump their vendor prefix (#9572)\n\tcamelCase: function( string ) {\n\t\treturn string.replace( rmsPrefix, \"ms-\" ).replace( rdashAlpha, fcamelCase );\n\t},\n\n\tnodeName: function( elem, name ) {\n\t\treturn elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();\n\t},\n\n\teach: function( obj, callback ) {\n\t\tvar length, i = 0;\n\n\t\tif ( isArrayLike( obj ) ) {\n\t\t\tlength = obj.length;\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tif ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tfor ( i in obj ) {\n\t\t\t\tif ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn obj;\n\t},\n\n\t// Support: Android<4.1\n\ttrim: function( text ) {\n\t\treturn text == null ?\n\t\t\t\"\" :\n\t\t\t( text + \"\" ).replace( rtrim, \"\" );\n\t},\n\n\t// results is for internal usage only\n\tmakeArray: function( arr, results ) {\n\t\tvar ret = results || [];\n\n\t\tif ( arr != null ) {\n\t\t\tif ( isArrayLike( Object( arr ) ) ) {\n\t\t\t\tjQuery.merge( ret,\n\t\t\t\t\ttypeof arr === \"string\" ?\n\t\t\t\t\t[ arr ] : arr\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tpush.call( ret, arr );\n\t\t\t}\n\t\t}\n\n\t\treturn ret;\n\t},\n\n\tinArray: function( elem, arr, i ) {\n\t\treturn arr == null ? -1 : indexOf.call( arr, elem, i );\n\t},\n\n\tmerge: function( first, second ) {\n\t\tvar len = +second.length,\n\t\t\tj = 0,\n\t\t\ti = first.length;\n\n\t\tfor ( ; j < len; j++ ) {\n\t\t\tfirst[ i++ ] = second[ j ];\n\t\t}\n\n\t\tfirst.length = i;\n\n\t\treturn first;\n\t},\n\n\tgrep: function( elems, callback, invert ) {\n\t\tvar callbackInverse,\n\t\t\tmatches = [],\n\t\t\ti = 0,\n\t\t\tlength = elems.length,\n\t\t\tcallbackExpect = !invert;\n\n\t\t// Go through the array, only saving the items\n\t\t// that pass the validator function\n\t\tfor ( ; i < length; i++ ) {\n\t\t\tcallbackInverse = !callback( elems[ i ], i );\n\t\t\tif ( callbackInverse !== callbackExpect ) {\n\t\t\t\tmatches.push( elems[ i ] );\n\t\t\t}\n\t\t}\n\n\t\treturn matches;\n\t},\n\n\t// arg is for internal usage only\n\tmap: function( elems, callback, arg ) {\n\t\tvar length, value,\n\t\t\ti = 0,\n\t\t\tret = [];\n\n\t\t// Go through the array, translating each of the items to their new values\n\t\tif ( isArrayLike( elems ) ) {\n\t\t\tlength = elems.length;\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret.push( value );\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Go through every key on the object,\n\t\t} else {\n\t\t\tfor ( i in elems ) {\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret.push( value );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Flatten any nested arrays\n\t\treturn concat.apply( [], ret );\n\t},\n\n\t// A global GUID counter for objects\n\tguid: 1,\n\n\t// Bind a function to a context, optionally partially applying any\n\t// arguments.\n\tproxy: function( fn, context ) {\n\t\tvar tmp, args, proxy;\n\n\t\tif ( typeof context === \"string\" ) {\n\t\t\ttmp = fn[ context ];\n\t\t\tcontext = fn;\n\t\t\tfn = tmp;\n\t\t}\n\n\t\t// Quick check to determine if target is callable, in the spec\n\t\t// this throws a TypeError, but we will just return undefined.\n\t\tif ( !jQuery.isFunction( fn ) ) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\t// Simulated bind\n\t\targs = slice.call( arguments, 2 );\n\t\tproxy = function() {\n\t\t\treturn fn.apply( context || this, args.concat( slice.call( arguments ) ) );\n\t\t};\n\n\t\t// Set the guid of unique handler to the same of original handler, so it can be removed\n\t\tproxy.guid = fn.guid = fn.guid || jQuery.guid++;\n\n\t\treturn proxy;\n\t},\n\n\tnow: Date.now,\n\n\t// jQuery.support is not used in Core but other projects attach their\n\t// properties to it so it needs to exist.\n\tsupport: support\n} );\n\n// JSHint would error on this code due to the Symbol not being defined in ES5.\n// Defining this global in .jshintrc would create a danger of using the global\n// unguarded in another place, it seems safer to just disable JSHint for these\n// three lines.\n/* jshint ignore: start */\nif ( typeof Symbol === \"function\" ) {\n\tjQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ];\n}\n/* jshint ignore: end */\n\n// Populate the class2type map\njQuery.each( \"Boolean Number String Function Array Date RegExp Object Error Symbol\".split( \" \" ),\nfunction( i, name ) {\n\tclass2type[ \"[object \" + name + \"]\" ] = name.toLowerCase();\n} );\n\nfunction isArrayLike( obj ) {\n\n\t// Support: iOS 8.2 (not reproducible in simulator)\n\t// `in` check used to prevent JIT error (gh-2145)\n\t// hasOwn isn't used here due to false negatives\n\t// regarding Nodelist length in IE\n\tvar length = !!obj && \"length\" in obj && obj.length,\n\t\ttype = jQuery.type( obj );\n\n\tif ( type === \"function\" || jQuery.isWindow( obj ) ) {\n\t\treturn false;\n\t}\n\n\treturn type === \"array\" || length === 0 ||\n\t\ttypeof length === \"number\" && length > 0 && ( length - 1 ) in obj;\n}\nvar Sizzle =\n/*!\n * Sizzle CSS Selector Engine v2.2.1\n * http://sizzlejs.com/\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license\n * http://jquery.org/license\n *\n * Date: 2015-10-17\n */\n(function( window ) {\n\nvar i,\n\tsupport,\n\tExpr,\n\tgetText,\n\tisXML,\n\ttokenize,\n\tcompile,\n\tselect,\n\toutermostContext,\n\tsortInput,\n\thasDuplicate,\n\n\t// Local document vars\n\tsetDocument,\n\tdocument,\n\tdocElem,\n\tdocumentIsHTML,\n\trbuggyQSA,\n\trbuggyMatches,\n\tmatches,\n\tcontains,\n\n\t// Instance-specific data\n\texpando = \"sizzle\" + 1 * new Date(),\n\tpreferredDoc = window.document,\n\tdirruns = 0,\n\tdone = 0,\n\tclassCache = createCache(),\n\ttokenCache = createCache(),\n\tcompilerCache = createCache(),\n\tsortOrder = function( a, b ) {\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t}\n\t\treturn 0;\n\t},\n\n\t// General-purpose constants\n\tMAX_NEGATIVE = 1 << 31,\n\n\t// Instance methods\n\thasOwn = ({}).hasOwnProperty,\n\tarr = [],\n\tpop = arr.pop,\n\tpush_native = arr.push,\n\tpush = arr.push,\n\tslice = arr.slice,\n\t// Use a stripped-down indexOf as it's faster than native\n\t// http://jsperf.com/thor-indexof-vs-for/5\n\tindexOf = function( list, elem ) {\n\t\tvar i = 0,\n\t\t\tlen = list.length;\n\t\tfor ( ; i < len; i++ ) {\n\t\t\tif ( list[i] === elem ) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t},\n\n\tbooleans = \"checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped\",\n\n\t// Regular expressions\n\n\t// http://www.w3.org/TR/css3-selectors/#whitespace\n\twhitespace = \"[\\\\x20\\\\t\\\\r\\\\n\\\\f]\",\n\n\t// http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier\n\tidentifier = \"(?:\\\\\\\\.|[\\\\w-]|[^\\\\x00-\\\\xa0])+\",\n\n\t// Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors\n\tattributes = \"\\\\[\" + whitespace + \"*(\" + identifier + \")(?:\" + whitespace +\n\t\t// Operator (capture 2)\n\t\t\"*([*^$|!~]?=)\" + whitespace +\n\t\t// \"Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]\"\n\t\t\"*(?:'((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\"|(\" + identifier + \"))|)\" + whitespace +\n\t\t\"*\\\\]\",\n\n\tpseudos = \":(\" + identifier + \")(?:\\\\((\" +\n\t\t// To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:\n\t\t// 1. quoted (capture 3; capture 4 or capture 5)\n\t\t\"('((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\")|\" +\n\t\t// 2. simple (capture 6)\n\t\t\"((?:\\\\\\\\.|[^\\\\\\\\()[\\\\]]|\" + attributes + \")*)|\" +\n\t\t// 3. anything else (capture 2)\n\t\t\".*\" +\n\t\t\")\\\\)|)\",\n\n\t// Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter\n\trwhitespace = new RegExp( whitespace + \"+\", \"g\" ),\n\trtrim = new RegExp( \"^\" + whitespace + \"+|((?:^|[^\\\\\\\\])(?:\\\\\\\\.)*)\" + whitespace + \"+$\", \"g\" ),\n\n\trcomma = new RegExp( \"^\" + whitespace + \"*,\" + whitespace + \"*\" ),\n\trcombinators = new RegExp( \"^\" + whitespace + \"*([>+~]|\" + whitespace + \")\" + whitespace + \"*\" ),\n\n\trattributeQuotes = new RegExp( \"=\" + whitespace + \"*([^\\\\]'\\\"]*?)\" + whitespace + \"*\\\\]\", \"g\" ),\n\n\trpseudo = new RegExp( pseudos ),\n\tridentifier = new RegExp( \"^\" + identifier + \"$\" ),\n\n\tmatchExpr = {\n\t\t\"ID\": new RegExp( \"^#(\" + identifier + \")\" ),\n\t\t\"CLASS\": new RegExp( \"^\\\\.(\" + identifier + \")\" ),\n\t\t\"TAG\": new RegExp( \"^(\" + identifier + \"|[*])\" ),\n\t\t\"ATTR\": new RegExp( \"^\" + attributes ),\n\t\t\"PSEUDO\": new RegExp( \"^\" + pseudos ),\n\t\t\"CHILD\": new RegExp( \"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\\\(\" + whitespace +\n\t\t\t\"*(even|odd|(([+-]|)(\\\\d*)n|)\" + whitespace + \"*(?:([+-]|)\" + whitespace +\n\t\t\t\"*(\\\\d+)|))\" + whitespace + \"*\\\\)|)\", \"i\" ),\n\t\t\"bool\": new RegExp( \"^(?:\" + booleans + \")$\", \"i\" ),\n\t\t// For use in libraries implementing .is()\n\t\t// We use this for POS matching in `select`\n\t\t\"needsContext\": new RegExp( \"^\" + whitespace + \"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\\\(\" +\n\t\t\twhitespace + \"*((?:-\\\\d)?\\\\d*)\" + whitespace + \"*\\\\)|)(?=[^-]|$)\", \"i\" )\n\t},\n\n\trinputs = /^(?:input|select|textarea|button)$/i,\n\trheader = /^h\\d$/i,\n\n\trnative = /^[^{]+\\{\\s*\\[native \\w/,\n\n\t// Easily-parseable/retrievable ID or TAG or CLASS selectors\n\trquickExpr = /^(?:#([\\w-]+)|(\\w+)|\\.([\\w-]+))$/,\n\n\trsibling = /[+~]/,\n\trescape = /'|\\\\/g,\n\n\t// CSS escapes http://www.w3.org/TR/CSS21/syndata.html#escaped-characters\n\trunescape = new RegExp( \"\\\\\\\\([\\\\da-f]{1,6}\" + whitespace + \"?|(\" + whitespace + \")|.)\", \"ig\" ),\n\tfunescape = function( _, escaped, escapedWhitespace ) {\n\t\tvar high = \"0x\" + escaped - 0x10000;\n\t\t// NaN means non-codepoint\n\t\t// Support: Firefox<24\n\t\t// Workaround erroneous numeric interpretation of +\"0x\"\n\t\treturn high !== high || escapedWhitespace ?\n\t\t\tescaped :\n\t\t\thigh < 0 ?\n\t\t\t\t// BMP codepoint\n\t\t\t\tString.fromCharCode( high + 0x10000 ) :\n\t\t\t\t// Supplemental Plane codepoint (surrogate pair)\n\t\t\t\tString.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );\n\t},\n\n\t// Used for iframes\n\t// See setDocument()\n\t// Removing the function wrapper causes a \"Permission Denied\"\n\t// error in IE\n\tunloadHandler = function() {\n\t\tsetDocument();\n\t};\n\n// Optimize for push.apply( _, NodeList )\ntry {\n\tpush.apply(\n\t\t(arr = slice.call( preferredDoc.childNodes )),\n\t\tpreferredDoc.childNodes\n\t);\n\t// Support: Android<4.0\n\t// Detect silently failing push.apply\n\tarr[ preferredDoc.childNodes.length ].nodeType;\n} catch ( e ) {\n\tpush = { apply: arr.length ?\n\n\t\t// Leverage slice if possible\n\t\tfunction( target, els ) {\n\t\t\tpush_native.apply( target, slice.call(els) );\n\t\t} :\n\n\t\t// Support: IE<9\n\t\t// Otherwise append directly\n\t\tfunction( target, els ) {\n\t\t\tvar j = target.length,\n\t\t\t\ti = 0;\n\t\t\t// Can't trust NodeList.length\n\t\t\twhile ( (target[j++] = els[i++]) ) {}\n\t\t\ttarget.length = j - 1;\n\t\t}\n\t};\n}\n\nfunction Sizzle( selector, context, results, seed ) {\n\tvar m, i, elem, nid, nidselect, match, groups, newSelector,\n\t\tnewContext = context && context.ownerDocument,\n\n\t\t// nodeType defaults to 9, since context defaults to document\n\t\tnodeType = context ? context.nodeType : 9;\n\n\tresults = results || [];\n\n\t// Return early from calls with invalid selector or context\n\tif ( typeof selector !== \"string\" || !selector ||\n\t\tnodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) {\n\n\t\treturn results;\n\t}\n\n\t// Try to shortcut find operations (as opposed to filters) in HTML documents\n\tif ( !seed ) {\n\n\t\tif ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) {\n\t\t\tsetDocument( context );\n\t\t}\n\t\tcontext = context || document;\n\n\t\tif ( documentIsHTML ) {\n\n\t\t\t// If the selector is sufficiently simple, try using a \"get*By*\" DOM method\n\t\t\t// (excepting DocumentFragment context, where the methods don't exist)\n\t\t\tif ( nodeType !== 11 && (match = rquickExpr.exec( selector )) ) {\n\n\t\t\t\t// ID selector\n\t\t\t\tif ( (m = match[1]) ) {\n\n\t\t\t\t\t// Document context\n\t\t\t\t\tif ( nodeType === 9 ) {\n\t\t\t\t\t\tif ( (elem = context.getElementById( m )) ) {\n\n\t\t\t\t\t\t\t// Support: IE, Opera, Webkit\n\t\t\t\t\t\t\t// TODO: identify versions\n\t\t\t\t\t\t\t// getElementById can match elements by name instead of ID\n\t\t\t\t\t\t\tif ( elem.id === m ) {\n\t\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t// Element context\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// Support: IE, Opera, Webkit\n\t\t\t\t\t\t// TODO: identify versions\n\t\t\t\t\t\t// getElementById can match elements by name instead of ID\n\t\t\t\t\t\tif ( newContext && (elem = newContext.getElementById( m )) &&\n\t\t\t\t\t\t\tcontains( context, elem ) &&\n\t\t\t\t\t\t\telem.id === m ) {\n\n\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t// Type selector\n\t\t\t\t} else if ( match[2] ) {\n\t\t\t\t\tpush.apply( results, context.getElementsByTagName( selector ) );\n\t\t\t\t\treturn results;\n\n\t\t\t\t// Class selector\n\t\t\t\t} else if ( (m = match[3]) && support.getElementsByClassName &&\n\t\t\t\t\tcontext.getElementsByClassName ) {\n\n\t\t\t\t\tpush.apply( results, context.getElementsByClassName( m ) );\n\t\t\t\t\treturn results;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Take advantage of querySelectorAll\n\t\t\tif ( support.qsa &&\n\t\t\t\t!compilerCache[ selector + \" \" ] &&\n\t\t\t\t(!rbuggyQSA || !rbuggyQSA.test( selector )) ) {\n\n\t\t\t\tif ( nodeType !== 1 ) {\n\t\t\t\t\tnewContext = context;\n\t\t\t\t\tnewSelector = selector;\n\n\t\t\t\t// qSA looks outside Element context, which is not what we want\n\t\t\t\t// Thanks to Andrew Dupont for this workaround technique\n\t\t\t\t// Support: IE <=8\n\t\t\t\t// Exclude object elements\n\t\t\t\t} else if ( context.nodeName.toLowerCase() !== \"object\" ) {\n\n\t\t\t\t\t// Capture the context ID, setting it first if necessary\n\t\t\t\t\tif ( (nid = context.getAttribute( \"id\" )) ) {\n\t\t\t\t\t\tnid = nid.replace( rescape, \"\\\\$&\" );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcontext.setAttribute( \"id\", (nid = expando) );\n\t\t\t\t\t}\n\n\t\t\t\t\t// Prefix every selector in the list\n\t\t\t\t\tgroups = tokenize( selector );\n\t\t\t\t\ti = groups.length;\n\t\t\t\t\tnidselect = ridentifier.test( nid ) ? \"#\" + nid : \"[id='\" + nid + \"']\";\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tgroups[i] = nidselect + \" \" + toSelector( groups[i] );\n\t\t\t\t\t}\n\t\t\t\t\tnewSelector = groups.join( \",\" );\n\n\t\t\t\t\t// Expand context for sibling selectors\n\t\t\t\t\tnewContext = rsibling.test( selector ) && testContext( context.parentNode ) ||\n\t\t\t\t\t\tcontext;\n\t\t\t\t}\n\n\t\t\t\tif ( newSelector ) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tpush.apply( results,\n\t\t\t\t\t\t\tnewContext.querySelectorAll( newSelector )\n\t\t\t\t\t\t);\n\t\t\t\t\t\treturn results;\n\t\t\t\t\t} catch ( qsaError ) {\n\t\t\t\t\t} finally {\n\t\t\t\t\t\tif ( nid === expando ) {\n\t\t\t\t\t\t\tcontext.removeAttribute( \"id\" );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// All others\n\treturn select( selector.replace( rtrim, \"$1\" ), context, results, seed );\n}\n\n/**\n * Create key-value caches of limited size\n * @returns {function(string, object)} Returns the Object data after storing it on itself with\n *\tproperty name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)\n *\tdeleting the oldest entry\n */\nfunction createCache() {\n\tvar keys = [];\n\n\tfunction cache( key, value ) {\n\t\t// Use (key + \" \") to avoid collision with native prototype properties (see Issue #157)\n\t\tif ( keys.push( key + \" \" ) > Expr.cacheLength ) {\n\t\t\t// Only keep the most recent entries\n\t\t\tdelete cache[ keys.shift() ];\n\t\t}\n\t\treturn (cache[ key + \" \" ] = value);\n\t}\n\treturn cache;\n}\n\n/**\n * Mark a function for special use by Sizzle\n * @param {Function} fn The function to mark\n */\nfunction markFunction( fn ) {\n\tfn[ expando ] = true;\n\treturn fn;\n}\n\n/**\n * Support testing using an element\n * @param {Function} fn Passed the created div and expects a boolean result\n */\nfunction assert( fn ) {\n\tvar div = document.createElement(\"div\");\n\n\ttry {\n\t\treturn !!fn( div );\n\t} catch (e) {\n\t\treturn false;\n\t} finally {\n\t\t// Remove from its parent by default\n\t\tif ( div.parentNode ) {\n\t\t\tdiv.parentNode.removeChild( div );\n\t\t}\n\t\t// release memory in IE\n\t\tdiv = null;\n\t}\n}\n\n/**\n * Adds the same handler for all of the specified attrs\n * @param {String} attrs Pipe-separated list of attributes\n * @param {Function} handler The method that will be applied\n */\nfunction addHandle( attrs, handler ) {\n\tvar arr = attrs.split(\"|\"),\n\t\ti = arr.length;\n\n\twhile ( i-- ) {\n\t\tExpr.attrHandle[ arr[i] ] = handler;\n\t}\n}\n\n/**\n * Checks document order of two siblings\n * @param {Element} a\n * @param {Element} b\n * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b\n */\nfunction siblingCheck( a, b ) {\n\tvar cur = b && a,\n\t\tdiff = cur && a.nodeType === 1 && b.nodeType === 1 &&\n\t\t\t( ~b.sourceIndex || MAX_NEGATIVE ) -\n\t\t\t( ~a.sourceIndex || MAX_NEGATIVE );\n\n\t// Use IE sourceIndex if available on both nodes\n\tif ( diff ) {\n\t\treturn diff;\n\t}\n\n\t// Check if b follows a\n\tif ( cur ) {\n\t\twhile ( (cur = cur.nextSibling) ) {\n\t\t\tif ( cur === b ) {\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn a ? 1 : -1;\n}\n\n/**\n * Returns a function to use in pseudos for input types\n * @param {String} type\n */\nfunction createInputPseudo( type ) {\n\treturn function( elem ) {\n\t\tvar name = elem.nodeName.toLowerCase();\n\t\treturn name === \"input\" && elem.type === type;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for buttons\n * @param {String} type\n */\nfunction createButtonPseudo( type ) {\n\treturn function( elem ) {\n\t\tvar name = elem.nodeName.toLowerCase();\n\t\treturn (name === \"input\" || name === \"button\") && elem.type === type;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for positionals\n * @param {Function} fn\n */\nfunction createPositionalPseudo( fn ) {\n\treturn markFunction(function( argument ) {\n\t\targument = +argument;\n\t\treturn markFunction(function( seed, matches ) {\n\t\t\tvar j,\n\t\t\t\tmatchIndexes = fn( [], seed.length, argument ),\n\t\t\t\ti = matchIndexes.length;\n\n\t\t\t// Match elements found at the specified indexes\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( seed[ (j = matchIndexes[i]) ] ) {\n\t\t\t\t\tseed[j] = !(matches[j] = seed[j]);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t});\n}\n\n/**\n * Checks a node for validity as a Sizzle context\n * @param {Element|Object=} context\n * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value\n */\nfunction testContext( context ) {\n\treturn context && typeof context.getElementsByTagName !== \"undefined\" && context;\n}\n\n// Expose support vars for convenience\nsupport = Sizzle.support = {};\n\n/**\n * Detects XML nodes\n * @param {Element|Object} elem An element or a document\n * @returns {Boolean} True iff elem is a non-HTML XML node\n */\nisXML = Sizzle.isXML = function( elem ) {\n\t// documentElement is verified for cases where it doesn't yet exist\n\t// (such as loading iframes in IE - #4833)\n\tvar documentElement = elem && (elem.ownerDocument || elem).documentElement;\n\treturn documentElement ? documentElement.nodeName !== \"HTML\" : false;\n};\n\n/**\n * Sets document-related variables once based on the current document\n * @param {Element|Object} [doc] An element or document object to use to set the document\n * @returns {Object} Returns the current document\n */\nsetDocument = Sizzle.setDocument = function( node ) {\n\tvar hasCompare, parent,\n\t\tdoc = node ? node.ownerDocument || node : preferredDoc;\n\n\t// Return early if doc is invalid or already selected\n\tif ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) {\n\t\treturn document;\n\t}\n\n\t// Update global variables\n\tdocument = doc;\n\tdocElem = document.documentElement;\n\tdocumentIsHTML = !isXML( document );\n\n\t// Support: IE 9-11, Edge\n\t// Accessing iframe documents after unload throws \"permission denied\" errors (jQuery #13936)\n\tif ( (parent = document.defaultView) && parent.top !== parent ) {\n\t\t// Support: IE 11\n\t\tif ( parent.addEventListener ) {\n\t\t\tparent.addEventListener( \"unload\", unloadHandler, false );\n\n\t\t// Support: IE 9 - 10 only\n\t\t} else if ( parent.attachEvent ) {\n\t\t\tparent.attachEvent( \"onunload\", unloadHandler );\n\t\t}\n\t}\n\n\t/* Attributes\n\t---------------------------------------------------------------------- */\n\n\t// Support: IE<8\n\t// Verify that getAttribute really returns attributes and not properties\n\t// (excepting IE8 booleans)\n\tsupport.attributes = assert(function( div ) {\n\t\tdiv.className = \"i\";\n\t\treturn !div.getAttribute(\"className\");\n\t});\n\n\t/* getElement(s)By*\n\t---------------------------------------------------------------------- */\n\n\t// Check if getElementsByTagName(\"*\") returns only elements\n\tsupport.getElementsByTagName = assert(function( div ) {\n\t\tdiv.appendChild( document.createComment(\"\") );\n\t\treturn !div.getElementsByTagName(\"*\").length;\n\t});\n\n\t// Support: IE<9\n\tsupport.getElementsByClassName = rnative.test( document.getElementsByClassName );\n\n\t// Support: IE<10\n\t// Check if getElementById returns elements by name\n\t// The broken getElementById methods don't pick up programatically-set names,\n\t// so use a roundabout getElementsByName test\n\tsupport.getById = assert(function( div ) {\n\t\tdocElem.appendChild( div ).id = expando;\n\t\treturn !document.getElementsByName || !document.getElementsByName( expando ).length;\n\t});\n\n\t// ID find and filter\n\tif ( support.getById ) {\n\t\tExpr.find[\"ID\"] = function( id, context ) {\n\t\t\tif ( typeof context.getElementById !== \"undefined\" && documentIsHTML ) {\n\t\t\t\tvar m = context.getElementById( id );\n\t\t\t\treturn m ? [ m ] : [];\n\t\t\t}\n\t\t};\n\t\tExpr.filter[\"ID\"] = function( id ) {\n\t\t\tvar attrId = id.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\treturn elem.getAttribute(\"id\") === attrId;\n\t\t\t};\n\t\t};\n\t} else {\n\t\t// Support: IE6/7\n\t\t// getElementById is not reliable as a find shortcut\n\t\tdelete Expr.find[\"ID\"];\n\n\t\tExpr.filter[\"ID\"] =  function( id ) {\n\t\t\tvar attrId = id.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\tvar node = typeof elem.getAttributeNode !== \"undefined\" &&\n\t\t\t\t\telem.getAttributeNode(\"id\");\n\t\t\t\treturn node && node.value === attrId;\n\t\t\t};\n\t\t};\n\t}\n\n\t// Tag\n\tExpr.find[\"TAG\"] = support.getElementsByTagName ?\n\t\tfunction( tag, context ) {\n\t\t\tif ( typeof context.getElementsByTagName !== \"undefined\" ) {\n\t\t\t\treturn context.getElementsByTagName( tag );\n\n\t\t\t// DocumentFragment nodes don't have gEBTN\n\t\t\t} else if ( support.qsa ) {\n\t\t\t\treturn context.querySelectorAll( tag );\n\t\t\t}\n\t\t} :\n\n\t\tfunction( tag, context ) {\n\t\t\tvar elem,\n\t\t\t\ttmp = [],\n\t\t\t\ti = 0,\n\t\t\t\t// By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too\n\t\t\t\tresults = context.getElementsByTagName( tag );\n\n\t\t\t// Filter out possible comments\n\t\t\tif ( tag === \"*\" ) {\n\t\t\t\twhile ( (elem = results[i++]) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\t\t\ttmp.push( elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn tmp;\n\t\t\t}\n\t\t\treturn results;\n\t\t};\n\n\t// Class\n\tExpr.find[\"CLASS\"] = support.getElementsByClassName && function( className, context ) {\n\t\tif ( typeof context.getElementsByClassName !== \"undefined\" && documentIsHTML ) {\n\t\t\treturn context.getElementsByClassName( className );\n\t\t}\n\t};\n\n\t/* QSA/matchesSelector\n\t---------------------------------------------------------------------- */\n\n\t// QSA and matchesSelector support\n\n\t// matchesSelector(:active) reports false when true (IE9/Opera 11.5)\n\trbuggyMatches = [];\n\n\t// qSa(:focus) reports false when true (Chrome 21)\n\t// We allow this because of a bug in IE8/9 that throws an error\n\t// whenever `document.activeElement` is accessed on an iframe\n\t// So, we allow :focus to pass through QSA all the time to avoid the IE error\n\t// See http://bugs.jquery.com/ticket/13378\n\trbuggyQSA = [];\n\n\tif ( (support.qsa = rnative.test( document.querySelectorAll )) ) {\n\t\t// Build QSA regex\n\t\t// Regex strategy adopted from Diego Perini\n\t\tassert(function( div ) {\n\t\t\t// Select is set to empty string on purpose\n\t\t\t// This is to test IE's treatment of not explicitly\n\t\t\t// setting a boolean content attribute,\n\t\t\t// since its presence should be enough\n\t\t\t// http://bugs.jquery.com/ticket/12359\n\t\t\tdocElem.appendChild( div ).innerHTML = \"<a id='\" + expando + \"'></a>\" +\n\t\t\t\t\"<select id='\" + expando + \"-\\r\\\\' msallowcapture=''>\" +\n\t\t\t\t\"<option selected=''></option></select>\";\n\n\t\t\t// Support: IE8, Opera 11-12.16\n\t\t\t// Nothing should be selected when empty strings follow ^= or $= or *=\n\t\t\t// The test attribute must be unknown in Opera but \"safe\" for WinRT\n\t\t\t// http://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section\n\t\t\tif ( div.querySelectorAll(\"[msallowcapture^='']\").length ) {\n\t\t\t\trbuggyQSA.push( \"[*^$]=\" + whitespace + \"*(?:''|\\\"\\\")\" );\n\t\t\t}\n\n\t\t\t// Support: IE8\n\t\t\t// Boolean attributes and \"value\" are not treated correctly\n\t\t\tif ( !div.querySelectorAll(\"[selected]\").length ) {\n\t\t\t\trbuggyQSA.push( \"\\\\[\" + whitespace + \"*(?:value|\" + booleans + \")\" );\n\t\t\t}\n\n\t\t\t// Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+\n\t\t\tif ( !div.querySelectorAll( \"[id~=\" + expando + \"-]\" ).length ) {\n\t\t\t\trbuggyQSA.push(\"~=\");\n\t\t\t}\n\n\t\t\t// Webkit/Opera - :checked should return selected option elements\n\t\t\t// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n\t\t\t// IE8 throws error here and will not see later tests\n\t\t\tif ( !div.querySelectorAll(\":checked\").length ) {\n\t\t\t\trbuggyQSA.push(\":checked\");\n\t\t\t}\n\n\t\t\t// Support: Safari 8+, iOS 8+\n\t\t\t// https://bugs.webkit.org/show_bug.cgi?id=136851\n\t\t\t// In-page `selector#id sibing-combinator selector` fails\n\t\t\tif ( !div.querySelectorAll( \"a#\" + expando + \"+*\" ).length ) {\n\t\t\t\trbuggyQSA.push(\".#.+[+~]\");\n\t\t\t}\n\t\t});\n\n\t\tassert(function( div ) {\n\t\t\t// Support: Windows 8 Native Apps\n\t\t\t// The type and name attributes are restricted during .innerHTML assignment\n\t\t\tvar input = document.createElement(\"input\");\n\t\t\tinput.setAttribute( \"type\", \"hidden\" );\n\t\t\tdiv.appendChild( input ).setAttribute( \"name\", \"D\" );\n\n\t\t\t// Support: IE8\n\t\t\t// Enforce case-sensitivity of name attribute\n\t\t\tif ( div.querySelectorAll(\"[name=d]\").length ) {\n\t\t\t\trbuggyQSA.push( \"name\" + whitespace + \"*[*^$|!~]?=\" );\n\t\t\t}\n\n\t\t\t// FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled)\n\t\t\t// IE8 throws error here and will not see later tests\n\t\t\tif ( !div.querySelectorAll(\":enabled\").length ) {\n\t\t\t\trbuggyQSA.push( \":enabled\", \":disabled\" );\n\t\t\t}\n\n\t\t\t// Opera 10-11 does not throw on post-comma invalid pseudos\n\t\t\tdiv.querySelectorAll(\"*,:x\");\n\t\t\trbuggyQSA.push(\",.*:\");\n\t\t});\n\t}\n\n\tif ( (support.matchesSelector = rnative.test( (matches = docElem.matches ||\n\t\tdocElem.webkitMatchesSelector ||\n\t\tdocElem.mozMatchesSelector ||\n\t\tdocElem.oMatchesSelector ||\n\t\tdocElem.msMatchesSelector) )) ) {\n\n\t\tassert(function( div ) {\n\t\t\t// Check to see if it's possible to do matchesSelector\n\t\t\t// on a disconnected node (IE 9)\n\t\t\tsupport.disconnectedMatch = matches.call( div, \"div\" );\n\n\t\t\t// This should fail with an exception\n\t\t\t// Gecko does not error, returns false instead\n\t\t\tmatches.call( div, \"[s!='']:x\" );\n\t\t\trbuggyMatches.push( \"!=\", pseudos );\n\t\t});\n\t}\n\n\trbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join(\"|\") );\n\trbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join(\"|\") );\n\n\t/* Contains\n\t---------------------------------------------------------------------- */\n\thasCompare = rnative.test( docElem.compareDocumentPosition );\n\n\t// Element contains another\n\t// Purposefully self-exclusive\n\t// As in, an element does not contain itself\n\tcontains = hasCompare || rnative.test( docElem.contains ) ?\n\t\tfunction( a, b ) {\n\t\t\tvar adown = a.nodeType === 9 ? a.documentElement : a,\n\t\t\t\tbup = b && b.parentNode;\n\t\t\treturn a === bup || !!( bup && bup.nodeType === 1 && (\n\t\t\t\tadown.contains ?\n\t\t\t\t\tadown.contains( bup ) :\n\t\t\t\t\ta.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16\n\t\t\t));\n\t\t} :\n\t\tfunction( a, b ) {\n\t\t\tif ( b ) {\n\t\t\t\twhile ( (b = b.parentNode) ) {\n\t\t\t\t\tif ( b === a ) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n\n\t/* Sorting\n\t---------------------------------------------------------------------- */\n\n\t// Document order sorting\n\tsortOrder = hasCompare ?\n\tfunction( a, b ) {\n\n\t\t// Flag for duplicate removal\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t\treturn 0;\n\t\t}\n\n\t\t// Sort on method existence if only one input has compareDocumentPosition\n\t\tvar compare = !a.compareDocumentPosition - !b.compareDocumentPosition;\n\t\tif ( compare ) {\n\t\t\treturn compare;\n\t\t}\n\n\t\t// Calculate position if both inputs belong to the same document\n\t\tcompare = ( a.ownerDocument || a ) === ( b.ownerDocument || b ) ?\n\t\t\ta.compareDocumentPosition( b ) :\n\n\t\t\t// Otherwise we know they are disconnected\n\t\t\t1;\n\n\t\t// Disconnected nodes\n\t\tif ( compare & 1 ||\n\t\t\t(!support.sortDetached && b.compareDocumentPosition( a ) === compare) ) {\n\n\t\t\t// Choose the first element that is related to our preferred document\n\t\t\tif ( a === document || a.ownerDocument === preferredDoc && contains(preferredDoc, a) ) {\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t\tif ( b === document || b.ownerDocument === preferredDoc && contains(preferredDoc, b) ) {\n\t\t\t\treturn 1;\n\t\t\t}\n\n\t\t\t// Maintain original order\n\t\t\treturn sortInput ?\n\t\t\t\t( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :\n\t\t\t\t0;\n\t\t}\n\n\t\treturn compare & 4 ? -1 : 1;\n\t} :\n\tfunction( a, b ) {\n\t\t// Exit early if the nodes are identical\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t\treturn 0;\n\t\t}\n\n\t\tvar cur,\n\t\t\ti = 0,\n\t\t\taup = a.parentNode,\n\t\t\tbup = b.parentNode,\n\t\t\tap = [ a ],\n\t\t\tbp = [ b ];\n\n\t\t// Parentless nodes are either documents or disconnected\n\t\tif ( !aup || !bup ) {\n\t\t\treturn a === document ? -1 :\n\t\t\t\tb === document ? 1 :\n\t\t\t\taup ? -1 :\n\t\t\t\tbup ? 1 :\n\t\t\t\tsortInput ?\n\t\t\t\t( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :\n\t\t\t\t0;\n\n\t\t// If the nodes are siblings, we can do a quick check\n\t\t} else if ( aup === bup ) {\n\t\t\treturn siblingCheck( a, b );\n\t\t}\n\n\t\t// Otherwise we need full lists of their ancestors for comparison\n\t\tcur = a;\n\t\twhile ( (cur = cur.parentNode) ) {\n\t\t\tap.unshift( cur );\n\t\t}\n\t\tcur = b;\n\t\twhile ( (cur = cur.parentNode) ) {\n\t\t\tbp.unshift( cur );\n\t\t}\n\n\t\t// Walk down the tree looking for a discrepancy\n\t\twhile ( ap[i] === bp[i] ) {\n\t\t\ti++;\n\t\t}\n\n\t\treturn i ?\n\t\t\t// Do a sibling check if the nodes have a common ancestor\n\t\t\tsiblingCheck( ap[i], bp[i] ) :\n\n\t\t\t// Otherwise nodes in our document sort first\n\t\t\tap[i] === preferredDoc ? -1 :\n\t\t\tbp[i] === preferredDoc ? 1 :\n\t\t\t0;\n\t};\n\n\treturn document;\n};\n\nSizzle.matches = function( expr, elements ) {\n\treturn Sizzle( expr, null, null, elements );\n};\n\nSizzle.matchesSelector = function( elem, expr ) {\n\t// Set document vars if needed\n\tif ( ( elem.ownerDocument || elem ) !== document ) {\n\t\tsetDocument( elem );\n\t}\n\n\t// Make sure that attribute selectors are quoted\n\texpr = expr.replace( rattributeQuotes, \"='$1']\" );\n\n\tif ( support.matchesSelector && documentIsHTML &&\n\t\t!compilerCache[ expr + \" \" ] &&\n\t\t( !rbuggyMatches || !rbuggyMatches.test( expr ) ) &&\n\t\t( !rbuggyQSA     || !rbuggyQSA.test( expr ) ) ) {\n\n\t\ttry {\n\t\t\tvar ret = matches.call( elem, expr );\n\n\t\t\t// IE 9's matchesSelector returns false on disconnected nodes\n\t\t\tif ( ret || support.disconnectedMatch ||\n\t\t\t\t\t// As well, disconnected nodes are said to be in a document\n\t\t\t\t\t// fragment in IE 9\n\t\t\t\t\telem.document && elem.document.nodeType !== 11 ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\t\t} catch (e) {}\n\t}\n\n\treturn Sizzle( expr, document, null, [ elem ] ).length > 0;\n};\n\nSizzle.contains = function( context, elem ) {\n\t// Set document vars if needed\n\tif ( ( context.ownerDocument || context ) !== document ) {\n\t\tsetDocument( context );\n\t}\n\treturn contains( context, elem );\n};\n\nSizzle.attr = function( elem, name ) {\n\t// Set document vars if needed\n\tif ( ( elem.ownerDocument || elem ) !== document ) {\n\t\tsetDocument( elem );\n\t}\n\n\tvar fn = Expr.attrHandle[ name.toLowerCase() ],\n\t\t// Don't get fooled by Object.prototype properties (jQuery #13807)\n\t\tval = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ?\n\t\t\tfn( elem, name, !documentIsHTML ) :\n\t\t\tundefined;\n\n\treturn val !== undefined ?\n\t\tval :\n\t\tsupport.attributes || !documentIsHTML ?\n\t\t\telem.getAttribute( name ) :\n\t\t\t(val = elem.getAttributeNode(name)) && val.specified ?\n\t\t\t\tval.value :\n\t\t\t\tnull;\n};\n\nSizzle.error = function( msg ) {\n\tthrow new Error( \"Syntax error, unrecognized expression: \" + msg );\n};\n\n/**\n * Document sorting and removing duplicates\n * @param {ArrayLike} results\n */\nSizzle.uniqueSort = function( results ) {\n\tvar elem,\n\t\tduplicates = [],\n\t\tj = 0,\n\t\ti = 0;\n\n\t// Unless we *know* we can detect duplicates, assume their presence\n\thasDuplicate = !support.detectDuplicates;\n\tsortInput = !support.sortStable && results.slice( 0 );\n\tresults.sort( sortOrder );\n\n\tif ( hasDuplicate ) {\n\t\twhile ( (elem = results[i++]) ) {\n\t\t\tif ( elem === results[ i ] ) {\n\t\t\t\tj = duplicates.push( i );\n\t\t\t}\n\t\t}\n\t\twhile ( j-- ) {\n\t\t\tresults.splice( duplicates[ j ], 1 );\n\t\t}\n\t}\n\n\t// Clear input after sorting to release objects\n\t// See https://github.com/jquery/sizzle/pull/225\n\tsortInput = null;\n\n\treturn results;\n};\n\n/**\n * Utility function for retrieving the text value of an array of DOM nodes\n * @param {Array|Element} elem\n */\ngetText = Sizzle.getText = function( elem ) {\n\tvar node,\n\t\tret = \"\",\n\t\ti = 0,\n\t\tnodeType = elem.nodeType;\n\n\tif ( !nodeType ) {\n\t\t// If no nodeType, this is expected to be an array\n\t\twhile ( (node = elem[i++]) ) {\n\t\t\t// Do not traverse comment nodes\n\t\t\tret += getText( node );\n\t\t}\n\t} else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) {\n\t\t// Use textContent for elements\n\t\t// innerText usage removed for consistency of new lines (jQuery #11153)\n\t\tif ( typeof elem.textContent === \"string\" ) {\n\t\t\treturn elem.textContent;\n\t\t} else {\n\t\t\t// Traverse its children\n\t\t\tfor ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {\n\t\t\t\tret += getText( elem );\n\t\t\t}\n\t\t}\n\t} else if ( nodeType === 3 || nodeType === 4 ) {\n\t\treturn elem.nodeValue;\n\t}\n\t// Do not include comment or processing instruction nodes\n\n\treturn ret;\n};\n\nExpr = Sizzle.selectors = {\n\n\t// Can be adjusted by the user\n\tcacheLength: 50,\n\n\tcreatePseudo: markFunction,\n\n\tmatch: matchExpr,\n\n\tattrHandle: {},\n\n\tfind: {},\n\n\trelative: {\n\t\t\">\": { dir: \"parentNode\", first: true },\n\t\t\" \": { dir: \"parentNode\" },\n\t\t\"+\": { dir: \"previousSibling\", first: true },\n\t\t\"~\": { dir: \"previousSibling\" }\n\t},\n\n\tpreFilter: {\n\t\t\"ATTR\": function( match ) {\n\t\t\tmatch[1] = match[1].replace( runescape, funescape );\n\n\t\t\t// Move the given value to match[3] whether quoted or unquoted\n\t\t\tmatch[3] = ( match[3] || match[4] || match[5] || \"\" ).replace( runescape, funescape );\n\n\t\t\tif ( match[2] === \"~=\" ) {\n\t\t\t\tmatch[3] = \" \" + match[3] + \" \";\n\t\t\t}\n\n\t\t\treturn match.slice( 0, 4 );\n\t\t},\n\n\t\t\"CHILD\": function( match ) {\n\t\t\t/* matches from matchExpr[\"CHILD\"]\n\t\t\t\t1 type (only|nth|...)\n\t\t\t\t2 what (child|of-type)\n\t\t\t\t3 argument (even|odd|\\d*|\\d*n([+-]\\d+)?|...)\n\t\t\t\t4 xn-component of xn+y argument ([+-]?\\d*n|)\n\t\t\t\t5 sign of xn-component\n\t\t\t\t6 x of xn-component\n\t\t\t\t7 sign of y-component\n\t\t\t\t8 y of y-component\n\t\t\t*/\n\t\t\tmatch[1] = match[1].toLowerCase();\n\n\t\t\tif ( match[1].slice( 0, 3 ) === \"nth\" ) {\n\t\t\t\t// nth-* requires argument\n\t\t\t\tif ( !match[3] ) {\n\t\t\t\t\tSizzle.error( match[0] );\n\t\t\t\t}\n\n\t\t\t\t// numeric x and y parameters for Expr.filter.CHILD\n\t\t\t\t// remember that false/true cast respectively to 0/1\n\t\t\t\tmatch[4] = +( match[4] ? match[5] + (match[6] || 1) : 2 * ( match[3] === \"even\" || match[3] === \"odd\" ) );\n\t\t\t\tmatch[5] = +( ( match[7] + match[8] ) || match[3] === \"odd\" );\n\n\t\t\t// other types prohibit arguments\n\t\t\t} else if ( match[3] ) {\n\t\t\t\tSizzle.error( match[0] );\n\t\t\t}\n\n\t\t\treturn match;\n\t\t},\n\n\t\t\"PSEUDO\": function( match ) {\n\t\t\tvar excess,\n\t\t\t\tunquoted = !match[6] && match[2];\n\n\t\t\tif ( matchExpr[\"CHILD\"].test( match[0] ) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\t// Accept quoted arguments as-is\n\t\t\tif ( match[3] ) {\n\t\t\t\tmatch[2] = match[4] || match[5] || \"\";\n\n\t\t\t// Strip excess characters from unquoted arguments\n\t\t\t} else if ( unquoted && rpseudo.test( unquoted ) &&\n\t\t\t\t// Get excess from tokenize (recursively)\n\t\t\t\t(excess = tokenize( unquoted, true )) &&\n\t\t\t\t// advance to the next closing parenthesis\n\t\t\t\t(excess = unquoted.indexOf( \")\", unquoted.length - excess ) - unquoted.length) ) {\n\n\t\t\t\t// excess is a negative index\n\t\t\t\tmatch[0] = match[0].slice( 0, excess );\n\t\t\t\tmatch[2] = unquoted.slice( 0, excess );\n\t\t\t}\n\n\t\t\t// Return only captures needed by the pseudo filter method (type and argument)\n\t\t\treturn match.slice( 0, 3 );\n\t\t}\n\t},\n\n\tfilter: {\n\n\t\t\"TAG\": function( nodeNameSelector ) {\n\t\t\tvar nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase();\n\t\t\treturn nodeNameSelector === \"*\" ?\n\t\t\t\tfunction() { return true; } :\n\t\t\t\tfunction( elem ) {\n\t\t\t\t\treturn elem.nodeName && elem.nodeName.toLowerCase() === nodeName;\n\t\t\t\t};\n\t\t},\n\n\t\t\"CLASS\": function( className ) {\n\t\t\tvar pattern = classCache[ className + \" \" ];\n\n\t\t\treturn pattern ||\n\t\t\t\t(pattern = new RegExp( \"(^|\" + whitespace + \")\" + className + \"(\" + whitespace + \"|$)\" )) &&\n\t\t\t\tclassCache( className, function( elem ) {\n\t\t\t\t\treturn pattern.test( typeof elem.className === \"string\" && elem.className || typeof elem.getAttribute !== \"undefined\" && elem.getAttribute(\"class\") || \"\" );\n\t\t\t\t});\n\t\t},\n\n\t\t\"ATTR\": function( name, operator, check ) {\n\t\t\treturn function( elem ) {\n\t\t\t\tvar result = Sizzle.attr( elem, name );\n\n\t\t\t\tif ( result == null ) {\n\t\t\t\t\treturn operator === \"!=\";\n\t\t\t\t}\n\t\t\t\tif ( !operator ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\tresult += \"\";\n\n\t\t\t\treturn operator === \"=\" ? result === check :\n\t\t\t\t\toperator === \"!=\" ? result !== check :\n\t\t\t\t\toperator === \"^=\" ? check && result.indexOf( check ) === 0 :\n\t\t\t\t\toperator === \"*=\" ? check && result.indexOf( check ) > -1 :\n\t\t\t\t\toperator === \"$=\" ? check && result.slice( -check.length ) === check :\n\t\t\t\t\toperator === \"~=\" ? ( \" \" + result.replace( rwhitespace, \" \" ) + \" \" ).indexOf( check ) > -1 :\n\t\t\t\t\toperator === \"|=\" ? result === check || result.slice( 0, check.length + 1 ) === check + \"-\" :\n\t\t\t\t\tfalse;\n\t\t\t};\n\t\t},\n\n\t\t\"CHILD\": function( type, what, argument, first, last ) {\n\t\t\tvar simple = type.slice( 0, 3 ) !== \"nth\",\n\t\t\t\tforward = type.slice( -4 ) !== \"last\",\n\t\t\t\tofType = what === \"of-type\";\n\n\t\t\treturn first === 1 && last === 0 ?\n\n\t\t\t\t// Shortcut for :nth-*(n)\n\t\t\t\tfunction( elem ) {\n\t\t\t\t\treturn !!elem.parentNode;\n\t\t\t\t} :\n\n\t\t\t\tfunction( elem, context, xml ) {\n\t\t\t\t\tvar cache, uniqueCache, outerCache, node, nodeIndex, start,\n\t\t\t\t\t\tdir = simple !== forward ? \"nextSibling\" : \"previousSibling\",\n\t\t\t\t\t\tparent = elem.parentNode,\n\t\t\t\t\t\tname = ofType && elem.nodeName.toLowerCase(),\n\t\t\t\t\t\tuseCache = !xml && !ofType,\n\t\t\t\t\t\tdiff = false;\n\n\t\t\t\t\tif ( parent ) {\n\n\t\t\t\t\t\t// :(first|last|only)-(child|of-type)\n\t\t\t\t\t\tif ( simple ) {\n\t\t\t\t\t\t\twhile ( dir ) {\n\t\t\t\t\t\t\t\tnode = elem;\n\t\t\t\t\t\t\t\twhile ( (node = node[ dir ]) ) {\n\t\t\t\t\t\t\t\t\tif ( ofType ?\n\t\t\t\t\t\t\t\t\t\tnode.nodeName.toLowerCase() === name :\n\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1 ) {\n\n\t\t\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t// Reverse direction for :only-* (if we haven't yet done so)\n\t\t\t\t\t\t\t\tstart = dir = type === \"only\" && !start && \"nextSibling\";\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tstart = [ forward ? parent.firstChild : parent.lastChild ];\n\n\t\t\t\t\t\t// non-xml :nth-child(...) stores cache data on `parent`\n\t\t\t\t\t\tif ( forward && useCache ) {\n\n\t\t\t\t\t\t\t// Seek `elem` from a previously-cached index\n\n\t\t\t\t\t\t\t// ...in a gzip-friendly way\n\t\t\t\t\t\t\tnode = parent;\n\t\t\t\t\t\t\touterCache = node[ expando ] || (node[ expando ] = {});\n\n\t\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\t\tuniqueCache = outerCache[ node.uniqueID ] ||\n\t\t\t\t\t\t\t\t(outerCache[ node.uniqueID ] = {});\n\n\t\t\t\t\t\t\tcache = uniqueCache[ type ] || [];\n\t\t\t\t\t\t\tnodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];\n\t\t\t\t\t\t\tdiff = nodeIndex && cache[ 2 ];\n\t\t\t\t\t\t\tnode = nodeIndex && parent.childNodes[ nodeIndex ];\n\n\t\t\t\t\t\t\twhile ( (node = ++nodeIndex && node && node[ dir ] ||\n\n\t\t\t\t\t\t\t\t// Fallback to seeking `elem` from the start\n\t\t\t\t\t\t\t\t(diff = nodeIndex = 0) || start.pop()) ) {\n\n\t\t\t\t\t\t\t\t// When found, cache indexes on `parent` and break\n\t\t\t\t\t\t\t\tif ( node.nodeType === 1 && ++diff && node === elem ) {\n\t\t\t\t\t\t\t\t\tuniqueCache[ type ] = [ dirruns, nodeIndex, diff ];\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// Use previously-cached element index if available\n\t\t\t\t\t\t\tif ( useCache ) {\n\t\t\t\t\t\t\t\t// ...in a gzip-friendly way\n\t\t\t\t\t\t\t\tnode = elem;\n\t\t\t\t\t\t\t\touterCache = node[ expando ] || (node[ expando ] = {});\n\n\t\t\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\t\t\tuniqueCache = outerCache[ node.uniqueID ] ||\n\t\t\t\t\t\t\t\t\t(outerCache[ node.uniqueID ] = {});\n\n\t\t\t\t\t\t\t\tcache = uniqueCache[ type ] || [];\n\t\t\t\t\t\t\t\tnodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];\n\t\t\t\t\t\t\t\tdiff = nodeIndex;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// xml :nth-child(...)\n\t\t\t\t\t\t\t// or :nth-last-child(...) or :nth(-last)?-of-type(...)\n\t\t\t\t\t\t\tif ( diff === false ) {\n\t\t\t\t\t\t\t\t// Use the same loop as above to seek `elem` from the start\n\t\t\t\t\t\t\t\twhile ( (node = ++nodeIndex && node && node[ dir ] ||\n\t\t\t\t\t\t\t\t\t(diff = nodeIndex = 0) || start.pop()) ) {\n\n\t\t\t\t\t\t\t\t\tif ( ( ofType ?\n\t\t\t\t\t\t\t\t\t\tnode.nodeName.toLowerCase() === name :\n\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1 ) &&\n\t\t\t\t\t\t\t\t\t\t++diff ) {\n\n\t\t\t\t\t\t\t\t\t\t// Cache the index of each encountered element\n\t\t\t\t\t\t\t\t\t\tif ( useCache ) {\n\t\t\t\t\t\t\t\t\t\t\touterCache = node[ expando ] || (node[ expando ] = {});\n\n\t\t\t\t\t\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\t\t\t\t\t\tuniqueCache = outerCache[ node.uniqueID ] ||\n\t\t\t\t\t\t\t\t\t\t\t\t(outerCache[ node.uniqueID ] = {});\n\n\t\t\t\t\t\t\t\t\t\t\tuniqueCache[ type ] = [ dirruns, diff ];\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\tif ( node === elem ) {\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Incorporate the offset, then check against cycle size\n\t\t\t\t\t\tdiff -= last;\n\t\t\t\t\t\treturn diff === first || ( diff % first === 0 && diff / first >= 0 );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t},\n\n\t\t\"PSEUDO\": function( pseudo, argument ) {\n\t\t\t// pseudo-class names are case-insensitive\n\t\t\t// http://www.w3.org/TR/selectors/#pseudo-classes\n\t\t\t// Prioritize by case sensitivity in case custom pseudos are added with uppercase letters\n\t\t\t// Remember that setFilters inherits from pseudos\n\t\t\tvar args,\n\t\t\t\tfn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] ||\n\t\t\t\t\tSizzle.error( \"unsupported pseudo: \" + pseudo );\n\n\t\t\t// The user may use createPseudo to indicate that\n\t\t\t// arguments are needed to create the filter function\n\t\t\t// just as Sizzle does\n\t\t\tif ( fn[ expando ] ) {\n\t\t\t\treturn fn( argument );\n\t\t\t}\n\n\t\t\t// But maintain support for old signatures\n\t\t\tif ( fn.length > 1 ) {\n\t\t\t\targs = [ pseudo, pseudo, \"\", argument ];\n\t\t\t\treturn Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ?\n\t\t\t\t\tmarkFunction(function( seed, matches ) {\n\t\t\t\t\t\tvar idx,\n\t\t\t\t\t\t\tmatched = fn( seed, argument ),\n\t\t\t\t\t\t\ti = matched.length;\n\t\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\t\tidx = indexOf( seed, matched[i] );\n\t\t\t\t\t\t\tseed[ idx ] = !( matches[ idx ] = matched[i] );\n\t\t\t\t\t\t}\n\t\t\t\t\t}) :\n\t\t\t\t\tfunction( elem ) {\n\t\t\t\t\t\treturn fn( elem, 0, args );\n\t\t\t\t\t};\n\t\t\t}\n\n\t\t\treturn fn;\n\t\t}\n\t},\n\n\tpseudos: {\n\t\t// Potentially complex pseudos\n\t\t\"not\": markFunction(function( selector ) {\n\t\t\t// Trim the selector passed to compile\n\t\t\t// to avoid treating leading and trailing\n\t\t\t// spaces as combinators\n\t\t\tvar input = [],\n\t\t\t\tresults = [],\n\t\t\t\tmatcher = compile( selector.replace( rtrim, \"$1\" ) );\n\n\t\t\treturn matcher[ expando ] ?\n\t\t\t\tmarkFunction(function( seed, matches, context, xml ) {\n\t\t\t\t\tvar elem,\n\t\t\t\t\t\tunmatched = matcher( seed, null, xml, [] ),\n\t\t\t\t\t\ti = seed.length;\n\n\t\t\t\t\t// Match elements unmatched by `matcher`\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( (elem = unmatched[i]) ) {\n\t\t\t\t\t\t\tseed[i] = !(matches[i] = elem);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}) :\n\t\t\t\tfunction( elem, context, xml ) {\n\t\t\t\t\tinput[0] = elem;\n\t\t\t\t\tmatcher( input, null, xml, results );\n\t\t\t\t\t// Don't keep the element (issue #299)\n\t\t\t\t\tinput[0] = null;\n\t\t\t\t\treturn !results.pop();\n\t\t\t\t};\n\t\t}),\n\n\t\t\"has\": markFunction(function( selector ) {\n\t\t\treturn function( elem ) {\n\t\t\t\treturn Sizzle( selector, elem ).length > 0;\n\t\t\t};\n\t\t}),\n\n\t\t\"contains\": markFunction(function( text ) {\n\t\t\ttext = text.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\treturn ( elem.textContent || elem.innerText || getText( elem ) ).indexOf( text ) > -1;\n\t\t\t};\n\t\t}),\n\n\t\t// \"Whether an element is represented by a :lang() selector\n\t\t// is based solely on the element's language value\n\t\t// being equal to the identifier C,\n\t\t// or beginning with the identifier C immediately followed by \"-\".\n\t\t// The matching of C against the element's language value is performed case-insensitively.\n\t\t// The identifier C does not have to be a valid language name.\"\n\t\t// http://www.w3.org/TR/selectors/#lang-pseudo\n\t\t\"lang\": markFunction( function( lang ) {\n\t\t\t// lang value must be a valid identifier\n\t\t\tif ( !ridentifier.test(lang || \"\") ) {\n\t\t\t\tSizzle.error( \"unsupported lang: \" + lang );\n\t\t\t}\n\t\t\tlang = lang.replace( runescape, funescape ).toLowerCase();\n\t\t\treturn function( elem ) {\n\t\t\t\tvar elemLang;\n\t\t\t\tdo {\n\t\t\t\t\tif ( (elemLang = documentIsHTML ?\n\t\t\t\t\t\telem.lang :\n\t\t\t\t\t\telem.getAttribute(\"xml:lang\") || elem.getAttribute(\"lang\")) ) {\n\n\t\t\t\t\t\telemLang = elemLang.toLowerCase();\n\t\t\t\t\t\treturn elemLang === lang || elemLang.indexOf( lang + \"-\" ) === 0;\n\t\t\t\t\t}\n\t\t\t\t} while ( (elem = elem.parentNode) && elem.nodeType === 1 );\n\t\t\t\treturn false;\n\t\t\t};\n\t\t}),\n\n\t\t// Miscellaneous\n\t\t\"target\": function( elem ) {\n\t\t\tvar hash = window.location && window.location.hash;\n\t\t\treturn hash && hash.slice( 1 ) === elem.id;\n\t\t},\n\n\t\t\"root\": function( elem ) {\n\t\t\treturn elem === docElem;\n\t\t},\n\n\t\t\"focus\": function( elem ) {\n\t\t\treturn elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex);\n\t\t},\n\n\t\t// Boolean properties\n\t\t\"enabled\": function( elem ) {\n\t\t\treturn elem.disabled === false;\n\t\t},\n\n\t\t\"disabled\": function( elem ) {\n\t\t\treturn elem.disabled === true;\n\t\t},\n\n\t\t\"checked\": function( elem ) {\n\t\t\t// In CSS3, :checked should return both checked and selected elements\n\t\t\t// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n\t\t\tvar nodeName = elem.nodeName.toLowerCase();\n\t\t\treturn (nodeName === \"input\" && !!elem.checked) || (nodeName === \"option\" && !!elem.selected);\n\t\t},\n\n\t\t\"selected\": function( elem ) {\n\t\t\t// Accessing this property makes selected-by-default\n\t\t\t// options in Safari work properly\n\t\t\tif ( elem.parentNode ) {\n\t\t\t\telem.parentNode.selectedIndex;\n\t\t\t}\n\n\t\t\treturn elem.selected === true;\n\t\t},\n\n\t\t// Contents\n\t\t\"empty\": function( elem ) {\n\t\t\t// http://www.w3.org/TR/selectors/#empty-pseudo\n\t\t\t// :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5),\n\t\t\t//   but not by others (comment: 8; processing instruction: 7; etc.)\n\t\t\t// nodeType < 6 works because attributes (2) do not appear as children\n\t\t\tfor ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {\n\t\t\t\tif ( elem.nodeType < 6 ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\n\t\t\"parent\": function( elem ) {\n\t\t\treturn !Expr.pseudos[\"empty\"]( elem );\n\t\t},\n\n\t\t// Element/input types\n\t\t\"header\": function( elem ) {\n\t\t\treturn rheader.test( elem.nodeName );\n\t\t},\n\n\t\t\"input\": function( elem ) {\n\t\t\treturn rinputs.test( elem.nodeName );\n\t\t},\n\n\t\t\"button\": function( elem ) {\n\t\t\tvar name = elem.nodeName.toLowerCase();\n\t\t\treturn name === \"input\" && elem.type === \"button\" || name === \"button\";\n\t\t},\n\n\t\t\"text\": function( elem ) {\n\t\t\tvar attr;\n\t\t\treturn elem.nodeName.toLowerCase() === \"input\" &&\n\t\t\t\telem.type === \"text\" &&\n\n\t\t\t\t// Support: IE<8\n\t\t\t\t// New HTML5 attribute values (e.g., \"search\") appear with elem.type === \"text\"\n\t\t\t\t( (attr = elem.getAttribute(\"type\")) == null || attr.toLowerCase() === \"text\" );\n\t\t},\n\n\t\t// Position-in-collection\n\t\t\"first\": createPositionalPseudo(function() {\n\t\t\treturn [ 0 ];\n\t\t}),\n\n\t\t\"last\": createPositionalPseudo(function( matchIndexes, length ) {\n\t\t\treturn [ length - 1 ];\n\t\t}),\n\n\t\t\"eq\": createPositionalPseudo(function( matchIndexes, length, argument ) {\n\t\t\treturn [ argument < 0 ? argument + length : argument ];\n\t\t}),\n\n\t\t\"even\": createPositionalPseudo(function( matchIndexes, length ) {\n\t\t\tvar i = 0;\n\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t}),\n\n\t\t\"odd\": createPositionalPseudo(function( matchIndexes, length ) {\n\t\t\tvar i = 1;\n\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t}),\n\n\t\t\"lt\": createPositionalPseudo(function( matchIndexes, length, argument ) {\n\t\t\tvar i = argument < 0 ? argument + length : argument;\n\t\t\tfor ( ; --i >= 0; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t}),\n\n\t\t\"gt\": createPositionalPseudo(function( matchIndexes, length, argument ) {\n\t\t\tvar i = argument < 0 ? argument + length : argument;\n\t\t\tfor ( ; ++i < length; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t})\n\t}\n};\n\nExpr.pseudos[\"nth\"] = Expr.pseudos[\"eq\"];\n\n// Add button/input type pseudos\nfor ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) {\n\tExpr.pseudos[ i ] = createInputPseudo( i );\n}\nfor ( i in { submit: true, reset: true } ) {\n\tExpr.pseudos[ i ] = createButtonPseudo( i );\n}\n\n// Easy API for creating new setFilters\nfunction setFilters() {}\nsetFilters.prototype = Expr.filters = Expr.pseudos;\nExpr.setFilters = new setFilters();\n\ntokenize = Sizzle.tokenize = function( selector, parseOnly ) {\n\tvar matched, match, tokens, type,\n\t\tsoFar, groups, preFilters,\n\t\tcached = tokenCache[ selector + \" \" ];\n\n\tif ( cached ) {\n\t\treturn parseOnly ? 0 : cached.slice( 0 );\n\t}\n\n\tsoFar = selector;\n\tgroups = [];\n\tpreFilters = Expr.preFilter;\n\n\twhile ( soFar ) {\n\n\t\t// Comma and first run\n\t\tif ( !matched || (match = rcomma.exec( soFar )) ) {\n\t\t\tif ( match ) {\n\t\t\t\t// Don't consume trailing commas as valid\n\t\t\t\tsoFar = soFar.slice( match[0].length ) || soFar;\n\t\t\t}\n\t\t\tgroups.push( (tokens = []) );\n\t\t}\n\n\t\tmatched = false;\n\n\t\t// Combinators\n\t\tif ( (match = rcombinators.exec( soFar )) ) {\n\t\t\tmatched = match.shift();\n\t\t\ttokens.push({\n\t\t\t\tvalue: matched,\n\t\t\t\t// Cast descendant combinators to space\n\t\t\t\ttype: match[0].replace( rtrim, \" \" )\n\t\t\t});\n\t\t\tsoFar = soFar.slice( matched.length );\n\t\t}\n\n\t\t// Filters\n\t\tfor ( type in Expr.filter ) {\n\t\t\tif ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] ||\n\t\t\t\t(match = preFilters[ type ]( match ))) ) {\n\t\t\t\tmatched = match.shift();\n\t\t\t\ttokens.push({\n\t\t\t\t\tvalue: matched,\n\t\t\t\t\ttype: type,\n\t\t\t\t\tmatches: match\n\t\t\t\t});\n\t\t\t\tsoFar = soFar.slice( matched.length );\n\t\t\t}\n\t\t}\n\n\t\tif ( !matched ) {\n\t\t\tbreak;\n\t\t}\n\t}\n\n\t// Return the length of the invalid excess\n\t// if we're just parsing\n\t// Otherwise, throw an error or return tokens\n\treturn parseOnly ?\n\t\tsoFar.length :\n\t\tsoFar ?\n\t\t\tSizzle.error( selector ) :\n\t\t\t// Cache the tokens\n\t\t\ttokenCache( selector, groups ).slice( 0 );\n};\n\nfunction toSelector( tokens ) {\n\tvar i = 0,\n\t\tlen = tokens.length,\n\t\tselector = \"\";\n\tfor ( ; i < len; i++ ) {\n\t\tselector += tokens[i].value;\n\t}\n\treturn selector;\n}\n\nfunction addCombinator( matcher, combinator, base ) {\n\tvar dir = combinator.dir,\n\t\tcheckNonElements = base && dir === \"parentNode\",\n\t\tdoneName = done++;\n\n\treturn combinator.first ?\n\t\t// Check against closest ancestor/preceding element\n\t\tfunction( elem, context, xml ) {\n\t\t\twhile ( (elem = elem[ dir ]) ) {\n\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\treturn matcher( elem, context, xml );\n\t\t\t\t}\n\t\t\t}\n\t\t} :\n\n\t\t// Check against all ancestor/preceding elements\n\t\tfunction( elem, context, xml ) {\n\t\t\tvar oldCache, uniqueCache, outerCache,\n\t\t\t\tnewCache = [ dirruns, doneName ];\n\n\t\t\t// We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching\n\t\t\tif ( xml ) {\n\t\t\t\twhile ( (elem = elem[ dir ]) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\t\tif ( matcher( elem, context, xml ) ) {\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\twhile ( (elem = elem[ dir ]) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\t\touterCache = elem[ expando ] || (elem[ expando ] = {});\n\n\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\tuniqueCache = outerCache[ elem.uniqueID ] || (outerCache[ elem.uniqueID ] = {});\n\n\t\t\t\t\t\tif ( (oldCache = uniqueCache[ dir ]) &&\n\t\t\t\t\t\t\toldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) {\n\n\t\t\t\t\t\t\t// Assign to newCache so results back-propagate to previous elements\n\t\t\t\t\t\t\treturn (newCache[ 2 ] = oldCache[ 2 ]);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// Reuse newcache so results back-propagate to previous elements\n\t\t\t\t\t\t\tuniqueCache[ dir ] = newCache;\n\n\t\t\t\t\t\t\t// A match means we're done; a fail means we have to keep checking\n\t\t\t\t\t\t\tif ( (newCache[ 2 ] = matcher( elem, context, xml )) ) {\n\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t};\n}\n\nfunction elementMatcher( matchers ) {\n\treturn matchers.length > 1 ?\n\t\tfunction( elem, context, xml ) {\n\t\t\tvar i = matchers.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( !matchers[i]( elem, context, xml ) ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t} :\n\t\tmatchers[0];\n}\n\nfunction multipleContexts( selector, contexts, results ) {\n\tvar i = 0,\n\t\tlen = contexts.length;\n\tfor ( ; i < len; i++ ) {\n\t\tSizzle( selector, contexts[i], results );\n\t}\n\treturn results;\n}\n\nfunction condense( unmatched, map, filter, context, xml ) {\n\tvar elem,\n\t\tnewUnmatched = [],\n\t\ti = 0,\n\t\tlen = unmatched.length,\n\t\tmapped = map != null;\n\n\tfor ( ; i < len; i++ ) {\n\t\tif ( (elem = unmatched[i]) ) {\n\t\t\tif ( !filter || filter( elem, context, xml ) ) {\n\t\t\t\tnewUnmatched.push( elem );\n\t\t\t\tif ( mapped ) {\n\t\t\t\t\tmap.push( i );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn newUnmatched;\n}\n\nfunction setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) {\n\tif ( postFilter && !postFilter[ expando ] ) {\n\t\tpostFilter = setMatcher( postFilter );\n\t}\n\tif ( postFinder && !postFinder[ expando ] ) {\n\t\tpostFinder = setMatcher( postFinder, postSelector );\n\t}\n\treturn markFunction(function( seed, results, context, xml ) {\n\t\tvar temp, i, elem,\n\t\t\tpreMap = [],\n\t\t\tpostMap = [],\n\t\t\tpreexisting = results.length,\n\n\t\t\t// Get initial elements from seed or context\n\t\t\telems = seed || multipleContexts( selector || \"*\", context.nodeType ? [ context ] : context, [] ),\n\n\t\t\t// Prefilter to get matcher input, preserving a map for seed-results synchronization\n\t\t\tmatcherIn = preFilter && ( seed || !selector ) ?\n\t\t\t\tcondense( elems, preMap, preFilter, context, xml ) :\n\t\t\t\telems,\n\n\t\t\tmatcherOut = matcher ?\n\t\t\t\t// If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results,\n\t\t\t\tpostFinder || ( seed ? preFilter : preexisting || postFilter ) ?\n\n\t\t\t\t\t// ...intermediate processing is necessary\n\t\t\t\t\t[] :\n\n\t\t\t\t\t// ...otherwise use results directly\n\t\t\t\t\tresults :\n\t\t\t\tmatcherIn;\n\n\t\t// Find primary matches\n\t\tif ( matcher ) {\n\t\t\tmatcher( matcherIn, matcherOut, context, xml );\n\t\t}\n\n\t\t// Apply postFilter\n\t\tif ( postFilter ) {\n\t\t\ttemp = condense( matcherOut, postMap );\n\t\t\tpostFilter( temp, [], context, xml );\n\n\t\t\t// Un-match failing elements by moving them back to matcherIn\n\t\t\ti = temp.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( (elem = temp[i]) ) {\n\t\t\t\t\tmatcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif ( seed ) {\n\t\t\tif ( postFinder || preFilter ) {\n\t\t\t\tif ( postFinder ) {\n\t\t\t\t\t// Get the final matcherOut by condensing this intermediate into postFinder contexts\n\t\t\t\t\ttemp = [];\n\t\t\t\t\ti = matcherOut.length;\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( (elem = matcherOut[i]) ) {\n\t\t\t\t\t\t\t// Restore matcherIn since elem is not yet a final match\n\t\t\t\t\t\t\ttemp.push( (matcherIn[i] = elem) );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tpostFinder( null, (matcherOut = []), temp, xml );\n\t\t\t\t}\n\n\t\t\t\t// Move matched elements from seed to results to keep them synchronized\n\t\t\t\ti = matcherOut.length;\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\tif ( (elem = matcherOut[i]) &&\n\t\t\t\t\t\t(temp = postFinder ? indexOf( seed, elem ) : preMap[i]) > -1 ) {\n\n\t\t\t\t\t\tseed[temp] = !(results[temp] = elem);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Add elements to results, through postFinder if defined\n\t\t} else {\n\t\t\tmatcherOut = condense(\n\t\t\t\tmatcherOut === results ?\n\t\t\t\t\tmatcherOut.splice( preexisting, matcherOut.length ) :\n\t\t\t\t\tmatcherOut\n\t\t\t);\n\t\t\tif ( postFinder ) {\n\t\t\t\tpostFinder( null, results, matcherOut, xml );\n\t\t\t} else {\n\t\t\t\tpush.apply( results, matcherOut );\n\t\t\t}\n\t\t}\n\t});\n}\n\nfunction matcherFromTokens( tokens ) {\n\tvar checkContext, matcher, j,\n\t\tlen = tokens.length,\n\t\tleadingRelative = Expr.relative[ tokens[0].type ],\n\t\timplicitRelative = leadingRelative || Expr.relative[\" \"],\n\t\ti = leadingRelative ? 1 : 0,\n\n\t\t// The foundational matcher ensures that elements are reachable from top-level context(s)\n\t\tmatchContext = addCombinator( function( elem ) {\n\t\t\treturn elem === checkContext;\n\t\t}, implicitRelative, true ),\n\t\tmatchAnyContext = addCombinator( function( elem ) {\n\t\t\treturn indexOf( checkContext, elem ) > -1;\n\t\t}, implicitRelative, true ),\n\t\tmatchers = [ function( elem, context, xml ) {\n\t\t\tvar ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || (\n\t\t\t\t(checkContext = context).nodeType ?\n\t\t\t\t\tmatchContext( elem, context, xml ) :\n\t\t\t\t\tmatchAnyContext( elem, context, xml ) );\n\t\t\t// Avoid hanging onto element (issue #299)\n\t\t\tcheckContext = null;\n\t\t\treturn ret;\n\t\t} ];\n\n\tfor ( ; i < len; i++ ) {\n\t\tif ( (matcher = Expr.relative[ tokens[i].type ]) ) {\n\t\t\tmatchers = [ addCombinator(elementMatcher( matchers ), matcher) ];\n\t\t} else {\n\t\t\tmatcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches );\n\n\t\t\t// Return special upon seeing a positional matcher\n\t\t\tif ( matcher[ expando ] ) {\n\t\t\t\t// Find the next relative operator (if any) for proper handling\n\t\t\t\tj = ++i;\n\t\t\t\tfor ( ; j < len; j++ ) {\n\t\t\t\t\tif ( Expr.relative[ tokens[j].type ] ) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn setMatcher(\n\t\t\t\t\ti > 1 && elementMatcher( matchers ),\n\t\t\t\t\ti > 1 && toSelector(\n\t\t\t\t\t\t// If the preceding token was a descendant combinator, insert an implicit any-element `*`\n\t\t\t\t\t\ttokens.slice( 0, i - 1 ).concat({ value: tokens[ i - 2 ].type === \" \" ? \"*\" : \"\" })\n\t\t\t\t\t).replace( rtrim, \"$1\" ),\n\t\t\t\t\tmatcher,\n\t\t\t\t\ti < j && matcherFromTokens( tokens.slice( i, j ) ),\n\t\t\t\t\tj < len && matcherFromTokens( (tokens = tokens.slice( j )) ),\n\t\t\t\t\tj < len && toSelector( tokens )\n\t\t\t\t);\n\t\t\t}\n\t\t\tmatchers.push( matcher );\n\t\t}\n\t}\n\n\treturn elementMatcher( matchers );\n}\n\nfunction matcherFromGroupMatchers( elementMatchers, setMatchers ) {\n\tvar bySet = setMatchers.length > 0,\n\t\tbyElement = elementMatchers.length > 0,\n\t\tsuperMatcher = function( seed, context, xml, results, outermost ) {\n\t\t\tvar elem, j, matcher,\n\t\t\t\tmatchedCount = 0,\n\t\t\t\ti = \"0\",\n\t\t\t\tunmatched = seed && [],\n\t\t\t\tsetMatched = [],\n\t\t\t\tcontextBackup = outermostContext,\n\t\t\t\t// We must always have either seed elements or outermost context\n\t\t\t\telems = seed || byElement && Expr.find[\"TAG\"]( \"*\", outermost ),\n\t\t\t\t// Use integer dirruns iff this is the outermost matcher\n\t\t\t\tdirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1),\n\t\t\t\tlen = elems.length;\n\n\t\t\tif ( outermost ) {\n\t\t\t\toutermostContext = context === document || context || outermost;\n\t\t\t}\n\n\t\t\t// Add elements passing elementMatchers directly to results\n\t\t\t// Support: IE<9, Safari\n\t\t\t// Tolerate NodeList properties (IE: \"length\"; Safari: <number>) matching elements by id\n\t\t\tfor ( ; i !== len && (elem = elems[i]) != null; i++ ) {\n\t\t\t\tif ( byElement && elem ) {\n\t\t\t\t\tj = 0;\n\t\t\t\t\tif ( !context && elem.ownerDocument !== document ) {\n\t\t\t\t\t\tsetDocument( elem );\n\t\t\t\t\t\txml = !documentIsHTML;\n\t\t\t\t\t}\n\t\t\t\t\twhile ( (matcher = elementMatchers[j++]) ) {\n\t\t\t\t\t\tif ( matcher( elem, context || document, xml) ) {\n\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( outermost ) {\n\t\t\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Track unmatched elements for set filters\n\t\t\t\tif ( bySet ) {\n\t\t\t\t\t// They will have gone through all possible matchers\n\t\t\t\t\tif ( (elem = !matcher && elem) ) {\n\t\t\t\t\t\tmatchedCount--;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Lengthen the array for every element, matched or not\n\t\t\t\t\tif ( seed ) {\n\t\t\t\t\t\tunmatched.push( elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// `i` is now the count of elements visited above, and adding it to `matchedCount`\n\t\t\t// makes the latter nonnegative.\n\t\t\tmatchedCount += i;\n\n\t\t\t// Apply set filters to unmatched elements\n\t\t\t// NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount`\n\t\t\t// equals `i`), unless we didn't visit _any_ elements in the above loop because we have\n\t\t\t// no element matchers and no seed.\n\t\t\t// Incrementing an initially-string \"0\" `i` allows `i` to remain a string only in that\n\t\t\t// case, which will result in a \"00\" `matchedCount` that differs from `i` but is also\n\t\t\t// numerically zero.\n\t\t\tif ( bySet && i !== matchedCount ) {\n\t\t\t\tj = 0;\n\t\t\t\twhile ( (matcher = setMatchers[j++]) ) {\n\t\t\t\t\tmatcher( unmatched, setMatched, context, xml );\n\t\t\t\t}\n\n\t\t\t\tif ( seed ) {\n\t\t\t\t\t// Reintegrate element matches to eliminate the need for sorting\n\t\t\t\t\tif ( matchedCount > 0 ) {\n\t\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\t\tif ( !(unmatched[i] || setMatched[i]) ) {\n\t\t\t\t\t\t\t\tsetMatched[i] = pop.call( results );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Discard index placeholder values to get only actual matches\n\t\t\t\t\tsetMatched = condense( setMatched );\n\t\t\t\t}\n\n\t\t\t\t// Add matches to results\n\t\t\t\tpush.apply( results, setMatched );\n\n\t\t\t\t// Seedless set matches succeeding multiple successful matchers stipulate sorting\n\t\t\t\tif ( outermost && !seed && setMatched.length > 0 &&\n\t\t\t\t\t( matchedCount + setMatchers.length ) > 1 ) {\n\n\t\t\t\t\tSizzle.uniqueSort( results );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Override manipulation of globals by nested matchers\n\t\t\tif ( outermost ) {\n\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\toutermostContext = contextBackup;\n\t\t\t}\n\n\t\t\treturn unmatched;\n\t\t};\n\n\treturn bySet ?\n\t\tmarkFunction( superMatcher ) :\n\t\tsuperMatcher;\n}\n\ncompile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) {\n\tvar i,\n\t\tsetMatchers = [],\n\t\telementMatchers = [],\n\t\tcached = compilerCache[ selector + \" \" ];\n\n\tif ( !cached ) {\n\t\t// Generate a function of recursive functions that can be used to check each element\n\t\tif ( !match ) {\n\t\t\tmatch = tokenize( selector );\n\t\t}\n\t\ti = match.length;\n\t\twhile ( i-- ) {\n\t\t\tcached = matcherFromTokens( match[i] );\n\t\t\tif ( cached[ expando ] ) {\n\t\t\t\tsetMatchers.push( cached );\n\t\t\t} else {\n\t\t\t\telementMatchers.push( cached );\n\t\t\t}\n\t\t}\n\n\t\t// Cache the compiled function\n\t\tcached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) );\n\n\t\t// Save selector and tokenization\n\t\tcached.selector = selector;\n\t}\n\treturn cached;\n};\n\n/**\n * A low-level selection function that works with Sizzle's compiled\n *  selector functions\n * @param {String|Function} selector A selector or a pre-compiled\n *  selector function built with Sizzle.compile\n * @param {Element} context\n * @param {Array} [results]\n * @param {Array} [seed] A set of elements to match against\n */\nselect = Sizzle.select = function( selector, context, results, seed ) {\n\tvar i, tokens, token, type, find,\n\t\tcompiled = typeof selector === \"function\" && selector,\n\t\tmatch = !seed && tokenize( (selector = compiled.selector || selector) );\n\n\tresults = results || [];\n\n\t// Try to minimize operations if there is only one selector in the list and no seed\n\t// (the latter of which guarantees us context)\n\tif ( match.length === 1 ) {\n\n\t\t// Reduce context if the leading compound selector is an ID\n\t\ttokens = match[0] = match[0].slice( 0 );\n\t\tif ( tokens.length > 2 && (token = tokens[0]).type === \"ID\" &&\n\t\t\t\tsupport.getById && context.nodeType === 9 && documentIsHTML &&\n\t\t\t\tExpr.relative[ tokens[1].type ] ) {\n\n\t\t\tcontext = ( Expr.find[\"ID\"]( token.matches[0].replace(runescape, funescape), context ) || [] )[0];\n\t\t\tif ( !context ) {\n\t\t\t\treturn results;\n\n\t\t\t// Precompiled matchers will still verify ancestry, so step up a level\n\t\t\t} else if ( compiled ) {\n\t\t\t\tcontext = context.parentNode;\n\t\t\t}\n\n\t\t\tselector = selector.slice( tokens.shift().value.length );\n\t\t}\n\n\t\t// Fetch a seed set for right-to-left matching\n\t\ti = matchExpr[\"needsContext\"].test( selector ) ? 0 : tokens.length;\n\t\twhile ( i-- ) {\n\t\t\ttoken = tokens[i];\n\n\t\t\t// Abort if we hit a combinator\n\t\t\tif ( Expr.relative[ (type = token.type) ] ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif ( (find = Expr.find[ type ]) ) {\n\t\t\t\t// Search, expanding context for leading sibling combinators\n\t\t\t\tif ( (seed = find(\n\t\t\t\t\ttoken.matches[0].replace( runescape, funescape ),\n\t\t\t\t\trsibling.test( tokens[0].type ) && testContext( context.parentNode ) || context\n\t\t\t\t)) ) {\n\n\t\t\t\t\t// If seed is empty or no tokens remain, we can return early\n\t\t\t\t\ttokens.splice( i, 1 );\n\t\t\t\t\tselector = seed.length && toSelector( tokens );\n\t\t\t\t\tif ( !selector ) {\n\t\t\t\t\t\tpush.apply( results, seed );\n\t\t\t\t\t\treturn results;\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Compile and execute a filtering function if one is not provided\n\t// Provide `match` to avoid retokenization if we modified the selector above\n\t( compiled || compile( selector, match ) )(\n\t\tseed,\n\t\tcontext,\n\t\t!documentIsHTML,\n\t\tresults,\n\t\t!context || rsibling.test( selector ) && testContext( context.parentNode ) || context\n\t);\n\treturn results;\n};\n\n// One-time assignments\n\n// Sort stability\nsupport.sortStable = expando.split(\"\").sort( sortOrder ).join(\"\") === expando;\n\n// Support: Chrome 14-35+\n// Always assume duplicates if they aren't passed to the comparison function\nsupport.detectDuplicates = !!hasDuplicate;\n\n// Initialize against the default document\nsetDocument();\n\n// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27)\n// Detached nodes confoundingly follow *each other*\nsupport.sortDetached = assert(function( div1 ) {\n\t// Should return 1, but returns 4 (following)\n\treturn div1.compareDocumentPosition( document.createElement(\"div\") ) & 1;\n});\n\n// Support: IE<8\n// Prevent attribute/property \"interpolation\"\n// http://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx\nif ( !assert(function( div ) {\n\tdiv.innerHTML = \"<a href='#'></a>\";\n\treturn div.firstChild.getAttribute(\"href\") === \"#\" ;\n}) ) {\n\taddHandle( \"type|href|height|width\", function( elem, name, isXML ) {\n\t\tif ( !isXML ) {\n\t\t\treturn elem.getAttribute( name, name.toLowerCase() === \"type\" ? 1 : 2 );\n\t\t}\n\t});\n}\n\n// Support: IE<9\n// Use defaultValue in place of getAttribute(\"value\")\nif ( !support.attributes || !assert(function( div ) {\n\tdiv.innerHTML = \"<input/>\";\n\tdiv.firstChild.setAttribute( \"value\", \"\" );\n\treturn div.firstChild.getAttribute( \"value\" ) === \"\";\n}) ) {\n\taddHandle( \"value\", function( elem, name, isXML ) {\n\t\tif ( !isXML && elem.nodeName.toLowerCase() === \"input\" ) {\n\t\t\treturn elem.defaultValue;\n\t\t}\n\t});\n}\n\n// Support: IE<9\n// Use getAttributeNode to fetch booleans when getAttribute lies\nif ( !assert(function( div ) {\n\treturn div.getAttribute(\"disabled\") == null;\n}) ) {\n\taddHandle( booleans, function( elem, name, isXML ) {\n\t\tvar val;\n\t\tif ( !isXML ) {\n\t\t\treturn elem[ name ] === true ? name.toLowerCase() :\n\t\t\t\t\t(val = elem.getAttributeNode( name )) && val.specified ?\n\t\t\t\t\tval.value :\n\t\t\t\tnull;\n\t\t}\n\t});\n}\n\nreturn Sizzle;\n\n})( window );\n\n\n\njQuery.find = Sizzle;\njQuery.expr = Sizzle.selectors;\njQuery.expr[ \":\" ] = jQuery.expr.pseudos;\njQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort;\njQuery.text = Sizzle.getText;\njQuery.isXMLDoc = Sizzle.isXML;\njQuery.contains = Sizzle.contains;\n\n\n\nvar dir = function( elem, dir, until ) {\n\tvar matched = [],\n\t\ttruncate = until !== undefined;\n\n\twhile ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) {\n\t\tif ( elem.nodeType === 1 ) {\n\t\t\tif ( truncate && jQuery( elem ).is( until ) ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tmatched.push( elem );\n\t\t}\n\t}\n\treturn matched;\n};\n\n\nvar siblings = function( n, elem ) {\n\tvar matched = [];\n\n\tfor ( ; n; n = n.nextSibling ) {\n\t\tif ( n.nodeType === 1 && n !== elem ) {\n\t\t\tmatched.push( n );\n\t\t}\n\t}\n\n\treturn matched;\n};\n\n\nvar rneedsContext = jQuery.expr.match.needsContext;\n\nvar rsingleTag = ( /^<([\\w-]+)\\s*\\/?>(?:<\\/\\1>|)$/ );\n\n\n\nvar risSimple = /^.[^:#\\[\\.,]*$/;\n\n// Implement the identical functionality for filter and not\nfunction winnow( elements, qualifier, not ) {\n\tif ( jQuery.isFunction( qualifier ) ) {\n\t\treturn jQuery.grep( elements, function( elem, i ) {\n\t\t\t/* jshint -W018 */\n\t\t\treturn !!qualifier.call( elem, i, elem ) !== not;\n\t\t} );\n\n\t}\n\n\tif ( qualifier.nodeType ) {\n\t\treturn jQuery.grep( elements, function( elem ) {\n\t\t\treturn ( elem === qualifier ) !== not;\n\t\t} );\n\n\t}\n\n\tif ( typeof qualifier === \"string\" ) {\n\t\tif ( risSimple.test( qualifier ) ) {\n\t\t\treturn jQuery.filter( qualifier, elements, not );\n\t\t}\n\n\t\tqualifier = jQuery.filter( qualifier, elements );\n\t}\n\n\treturn jQuery.grep( elements, function( elem ) {\n\t\treturn ( indexOf.call( qualifier, elem ) > -1 ) !== not;\n\t} );\n}\n\njQuery.filter = function( expr, elems, not ) {\n\tvar elem = elems[ 0 ];\n\n\tif ( not ) {\n\t\texpr = \":not(\" + expr + \")\";\n\t}\n\n\treturn elems.length === 1 && elem.nodeType === 1 ?\n\t\tjQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [] :\n\t\tjQuery.find.matches( expr, jQuery.grep( elems, function( elem ) {\n\t\t\treturn elem.nodeType === 1;\n\t\t} ) );\n};\n\njQuery.fn.extend( {\n\tfind: function( selector ) {\n\t\tvar i,\n\t\t\tlen = this.length,\n\t\t\tret = [],\n\t\t\tself = this;\n\n\t\tif ( typeof selector !== \"string\" ) {\n\t\t\treturn this.pushStack( jQuery( selector ).filter( function() {\n\t\t\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\t\t\tif ( jQuery.contains( self[ i ], this ) ) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} ) );\n\t\t}\n\n\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\tjQuery.find( selector, self[ i ], ret );\n\t\t}\n\n\t\t// Needed because $( selector, context ) becomes $( context ).find( selector )\n\t\tret = this.pushStack( len > 1 ? jQuery.unique( ret ) : ret );\n\t\tret.selector = this.selector ? this.selector + \" \" + selector : selector;\n\t\treturn ret;\n\t},\n\tfilter: function( selector ) {\n\t\treturn this.pushStack( winnow( this, selector || [], false ) );\n\t},\n\tnot: function( selector ) {\n\t\treturn this.pushStack( winnow( this, selector || [], true ) );\n\t},\n\tis: function( selector ) {\n\t\treturn !!winnow(\n\t\t\tthis,\n\n\t\t\t// If this is a positional/relative selector, check membership in the returned set\n\t\t\t// so $(\"p:first\").is(\"p:last\") won't return true for a doc with two \"p\".\n\t\t\ttypeof selector === \"string\" && rneedsContext.test( selector ) ?\n\t\t\t\tjQuery( selector ) :\n\t\t\t\tselector || [],\n\t\t\tfalse\n\t\t).length;\n\t}\n} );\n\n\n// Initialize a jQuery object\n\n\n// A central reference to the root jQuery(document)\nvar rootjQuery,\n\n\t// A simple way to check for HTML strings\n\t// Prioritize #id over <tag> to avoid XSS via location.hash (#9521)\n\t// Strict HTML recognition (#11290: must start with <)\n\trquickExpr = /^(?:\\s*(<[\\w\\W]+>)[^>]*|#([\\w-]*))$/,\n\n\tinit = jQuery.fn.init = function( selector, context, root ) {\n\t\tvar match, elem;\n\n\t\t// HANDLE: $(\"\"), $(null), $(undefined), $(false)\n\t\tif ( !selector ) {\n\t\t\treturn this;\n\t\t}\n\n\t\t// Method init() accepts an alternate rootjQuery\n\t\t// so migrate can support jQuery.sub (gh-2101)\n\t\troot = root || rootjQuery;\n\n\t\t// Handle HTML strings\n\t\tif ( typeof selector === \"string\" ) {\n\t\t\tif ( selector[ 0 ] === \"<\" &&\n\t\t\t\tselector[ selector.length - 1 ] === \">\" &&\n\t\t\t\tselector.length >= 3 ) {\n\n\t\t\t\t// Assume that strings that start and end with <> are HTML and skip the regex check\n\t\t\t\tmatch = [ null, selector, null ];\n\n\t\t\t} else {\n\t\t\t\tmatch = rquickExpr.exec( selector );\n\t\t\t}\n\n\t\t\t// Match html or make sure no context is specified for #id\n\t\t\tif ( match && ( match[ 1 ] || !context ) ) {\n\n\t\t\t\t// HANDLE: $(html) -> $(array)\n\t\t\t\tif ( match[ 1 ] ) {\n\t\t\t\t\tcontext = context instanceof jQuery ? context[ 0 ] : context;\n\n\t\t\t\t\t// Option to run scripts is true for back-compat\n\t\t\t\t\t// Intentionally let the error be thrown if parseHTML is not present\n\t\t\t\t\tjQuery.merge( this, jQuery.parseHTML(\n\t\t\t\t\t\tmatch[ 1 ],\n\t\t\t\t\t\tcontext && context.nodeType ? context.ownerDocument || context : document,\n\t\t\t\t\t\ttrue\n\t\t\t\t\t) );\n\n\t\t\t\t\t// HANDLE: $(html, props)\n\t\t\t\t\tif ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) {\n\t\t\t\t\t\tfor ( match in context ) {\n\n\t\t\t\t\t\t\t// Properties of context are called as methods if possible\n\t\t\t\t\t\t\tif ( jQuery.isFunction( this[ match ] ) ) {\n\t\t\t\t\t\t\t\tthis[ match ]( context[ match ] );\n\n\t\t\t\t\t\t\t// ...and otherwise set as attributes\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthis.attr( match, context[ match ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\treturn this;\n\n\t\t\t\t// HANDLE: $(#id)\n\t\t\t\t} else {\n\t\t\t\t\telem = document.getElementById( match[ 2 ] );\n\n\t\t\t\t\t// Support: Blackberry 4.6\n\t\t\t\t\t// gEBID returns nodes no longer in the document (#6963)\n\t\t\t\t\tif ( elem && elem.parentNode ) {\n\n\t\t\t\t\t\t// Inject the element directly into the jQuery object\n\t\t\t\t\t\tthis.length = 1;\n\t\t\t\t\t\tthis[ 0 ] = elem;\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.context = document;\n\t\t\t\t\tthis.selector = selector;\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\n\t\t\t// HANDLE: $(expr, $(...))\n\t\t\t} else if ( !context || context.jquery ) {\n\t\t\t\treturn ( context || root ).find( selector );\n\n\t\t\t// HANDLE: $(expr, context)\n\t\t\t// (which is just equivalent to: $(context).find(expr)\n\t\t\t} else {\n\t\t\t\treturn this.constructor( context ).find( selector );\n\t\t\t}\n\n\t\t// HANDLE: $(DOMElement)\n\t\t} else if ( selector.nodeType ) {\n\t\t\tthis.context = this[ 0 ] = selector;\n\t\t\tthis.length = 1;\n\t\t\treturn this;\n\n\t\t// HANDLE: $(function)\n\t\t// Shortcut for document ready\n\t\t} else if ( jQuery.isFunction( selector ) ) {\n\t\t\treturn root.ready !== undefined ?\n\t\t\t\troot.ready( selector ) :\n\n\t\t\t\t// Execute immediately if ready is not present\n\t\t\t\tselector( jQuery );\n\t\t}\n\n\t\tif ( selector.selector !== undefined ) {\n\t\t\tthis.selector = selector.selector;\n\t\t\tthis.context = selector.context;\n\t\t}\n\n\t\treturn jQuery.makeArray( selector, this );\n\t};\n\n// Give the init function the jQuery prototype for later instantiation\ninit.prototype = jQuery.fn;\n\n// Initialize central reference\nrootjQuery = jQuery( document );\n\n\nvar rparentsprev = /^(?:parents|prev(?:Until|All))/,\n\n\t// Methods guaranteed to produce a unique set when starting from a unique set\n\tguaranteedUnique = {\n\t\tchildren: true,\n\t\tcontents: true,\n\t\tnext: true,\n\t\tprev: true\n\t};\n\njQuery.fn.extend( {\n\thas: function( target ) {\n\t\tvar targets = jQuery( target, this ),\n\t\t\tl = targets.length;\n\n\t\treturn this.filter( function() {\n\t\t\tvar i = 0;\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tif ( jQuery.contains( this, targets[ i ] ) ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t},\n\n\tclosest: function( selectors, context ) {\n\t\tvar cur,\n\t\t\ti = 0,\n\t\t\tl = this.length,\n\t\t\tmatched = [],\n\t\t\tpos = rneedsContext.test( selectors ) || typeof selectors !== \"string\" ?\n\t\t\t\tjQuery( selectors, context || this.context ) :\n\t\t\t\t0;\n\n\t\tfor ( ; i < l; i++ ) {\n\t\t\tfor ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) {\n\n\t\t\t\t// Always skip document fragments\n\t\t\t\tif ( cur.nodeType < 11 && ( pos ?\n\t\t\t\t\tpos.index( cur ) > -1 :\n\n\t\t\t\t\t// Don't pass non-elements to Sizzle\n\t\t\t\t\tcur.nodeType === 1 &&\n\t\t\t\t\t\tjQuery.find.matchesSelector( cur, selectors ) ) ) {\n\n\t\t\t\t\tmatched.push( cur );\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched );\n\t},\n\n\t// Determine the position of an element within the set\n\tindex: function( elem ) {\n\n\t\t// No argument, return index in parent\n\t\tif ( !elem ) {\n\t\t\treturn ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1;\n\t\t}\n\n\t\t// Index in selector\n\t\tif ( typeof elem === \"string\" ) {\n\t\t\treturn indexOf.call( jQuery( elem ), this[ 0 ] );\n\t\t}\n\n\t\t// Locate the position of the desired element\n\t\treturn indexOf.call( this,\n\n\t\t\t// If it receives a jQuery object, the first element is used\n\t\t\telem.jquery ? elem[ 0 ] : elem\n\t\t);\n\t},\n\n\tadd: function( selector, context ) {\n\t\treturn this.pushStack(\n\t\t\tjQuery.uniqueSort(\n\t\t\t\tjQuery.merge( this.get(), jQuery( selector, context ) )\n\t\t\t)\n\t\t);\n\t},\n\n\taddBack: function( selector ) {\n\t\treturn this.add( selector == null ?\n\t\t\tthis.prevObject : this.prevObject.filter( selector )\n\t\t);\n\t}\n} );\n\nfunction sibling( cur, dir ) {\n\twhile ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {}\n\treturn cur;\n}\n\njQuery.each( {\n\tparent: function( elem ) {\n\t\tvar parent = elem.parentNode;\n\t\treturn parent && parent.nodeType !== 11 ? parent : null;\n\t},\n\tparents: function( elem ) {\n\t\treturn dir( elem, \"parentNode\" );\n\t},\n\tparentsUntil: function( elem, i, until ) {\n\t\treturn dir( elem, \"parentNode\", until );\n\t},\n\tnext: function( elem ) {\n\t\treturn sibling( elem, \"nextSibling\" );\n\t},\n\tprev: function( elem ) {\n\t\treturn sibling( elem, \"previousSibling\" );\n\t},\n\tnextAll: function( elem ) {\n\t\treturn dir( elem, \"nextSibling\" );\n\t},\n\tprevAll: function( elem ) {\n\t\treturn dir( elem, \"previousSibling\" );\n\t},\n\tnextUntil: function( elem, i, until ) {\n\t\treturn dir( elem, \"nextSibling\", until );\n\t},\n\tprevUntil: function( elem, i, until ) {\n\t\treturn dir( elem, \"previousSibling\", until );\n\t},\n\tsiblings: function( elem ) {\n\t\treturn siblings( ( elem.parentNode || {} ).firstChild, elem );\n\t},\n\tchildren: function( elem ) {\n\t\treturn siblings( elem.firstChild );\n\t},\n\tcontents: function( elem ) {\n\t\treturn elem.contentDocument || jQuery.merge( [], elem.childNodes );\n\t}\n}, function( name, fn ) {\n\tjQuery.fn[ name ] = function( until, selector ) {\n\t\tvar matched = jQuery.map( this, fn, until );\n\n\t\tif ( name.slice( -5 ) !== \"Until\" ) {\n\t\t\tselector = until;\n\t\t}\n\n\t\tif ( selector && typeof selector === \"string\" ) {\n\t\t\tmatched = jQuery.filter( selector, matched );\n\t\t}\n\n\t\tif ( this.length > 1 ) {\n\n\t\t\t// Remove duplicates\n\t\t\tif ( !guaranteedUnique[ name ] ) {\n\t\t\t\tjQuery.uniqueSort( matched );\n\t\t\t}\n\n\t\t\t// Reverse order for parents* and prev-derivatives\n\t\t\tif ( rparentsprev.test( name ) ) {\n\t\t\t\tmatched.reverse();\n\t\t\t}\n\t\t}\n\n\t\treturn this.pushStack( matched );\n\t};\n} );\nvar rnotwhite = ( /\\S+/g );\n\n\n\n// Convert String-formatted options into Object-formatted ones\nfunction createOptions( options ) {\n\tvar object = {};\n\tjQuery.each( options.match( rnotwhite ) || [], function( _, flag ) {\n\t\tobject[ flag ] = true;\n\t} );\n\treturn object;\n}\n\n/*\n * Create a callback list using the following parameters:\n *\n *\toptions: an optional list of space-separated options that will change how\n *\t\t\tthe callback list behaves or a more traditional option object\n *\n * By default a callback list will act like an event callback list and can be\n * \"fired\" multiple times.\n *\n * Possible options:\n *\n *\tonce:\t\t\twill ensure the callback list can only be fired once (like a Deferred)\n *\n *\tmemory:\t\t\twill keep track of previous values and will call any callback added\n *\t\t\t\t\tafter the list has been fired right away with the latest \"memorized\"\n *\t\t\t\t\tvalues (like a Deferred)\n *\n *\tunique:\t\t\twill ensure a callback can only be added once (no duplicate in the list)\n *\n *\tstopOnFalse:\tinterrupt callings when a callback returns false\n *\n */\njQuery.Callbacks = function( options ) {\n\n\t// Convert options from String-formatted to Object-formatted if needed\n\t// (we check in cache first)\n\toptions = typeof options === \"string\" ?\n\t\tcreateOptions( options ) :\n\t\tjQuery.extend( {}, options );\n\n\tvar // Flag to know if list is currently firing\n\t\tfiring,\n\n\t\t// Last fire value for non-forgettable lists\n\t\tmemory,\n\n\t\t// Flag to know if list was already fired\n\t\tfired,\n\n\t\t// Flag to prevent firing\n\t\tlocked,\n\n\t\t// Actual callback list\n\t\tlist = [],\n\n\t\t// Queue of execution data for repeatable lists\n\t\tqueue = [],\n\n\t\t// Index of currently firing callback (modified by add/remove as needed)\n\t\tfiringIndex = -1,\n\n\t\t// Fire callbacks\n\t\tfire = function() {\n\n\t\t\t// Enforce single-firing\n\t\t\tlocked = options.once;\n\n\t\t\t// Execute callbacks for all pending executions,\n\t\t\t// respecting firingIndex overrides and runtime changes\n\t\t\tfired = firing = true;\n\t\t\tfor ( ; queue.length; firingIndex = -1 ) {\n\t\t\t\tmemory = queue.shift();\n\t\t\t\twhile ( ++firingIndex < list.length ) {\n\n\t\t\t\t\t// Run callback and check for early termination\n\t\t\t\t\tif ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false &&\n\t\t\t\t\t\toptions.stopOnFalse ) {\n\n\t\t\t\t\t\t// Jump to end and forget the data so .add doesn't re-fire\n\t\t\t\t\t\tfiringIndex = list.length;\n\t\t\t\t\t\tmemory = false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Forget the data if we're done with it\n\t\t\tif ( !options.memory ) {\n\t\t\t\tmemory = false;\n\t\t\t}\n\n\t\t\tfiring = false;\n\n\t\t\t// Clean up if we're done firing for good\n\t\t\tif ( locked ) {\n\n\t\t\t\t// Keep an empty list if we have data for future add calls\n\t\t\t\tif ( memory ) {\n\t\t\t\t\tlist = [];\n\n\t\t\t\t// Otherwise, this object is spent\n\t\t\t\t} else {\n\t\t\t\t\tlist = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t// Actual Callbacks object\n\t\tself = {\n\n\t\t\t// Add a callback or a collection of callbacks to the list\n\t\t\tadd: function() {\n\t\t\t\tif ( list ) {\n\n\t\t\t\t\t// If we have memory from a past run, we should fire after adding\n\t\t\t\t\tif ( memory && !firing ) {\n\t\t\t\t\t\tfiringIndex = list.length - 1;\n\t\t\t\t\t\tqueue.push( memory );\n\t\t\t\t\t}\n\n\t\t\t\t\t( function add( args ) {\n\t\t\t\t\t\tjQuery.each( args, function( _, arg ) {\n\t\t\t\t\t\t\tif ( jQuery.isFunction( arg ) ) {\n\t\t\t\t\t\t\t\tif ( !options.unique || !self.has( arg ) ) {\n\t\t\t\t\t\t\t\t\tlist.push( arg );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else if ( arg && arg.length && jQuery.type( arg ) !== \"string\" ) {\n\n\t\t\t\t\t\t\t\t// Inspect recursively\n\t\t\t\t\t\t\t\tadd( arg );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} );\n\t\t\t\t\t} )( arguments );\n\n\t\t\t\t\tif ( memory && !firing ) {\n\t\t\t\t\t\tfire();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Remove a callback from the list\n\t\t\tremove: function() {\n\t\t\t\tjQuery.each( arguments, function( _, arg ) {\n\t\t\t\t\tvar index;\n\t\t\t\t\twhile ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) {\n\t\t\t\t\t\tlist.splice( index, 1 );\n\n\t\t\t\t\t\t// Handle firing indexes\n\t\t\t\t\t\tif ( index <= firingIndex ) {\n\t\t\t\t\t\t\tfiringIndex--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Check if a given callback is in the list.\n\t\t\t// If no argument is given, return whether or not list has callbacks attached.\n\t\t\thas: function( fn ) {\n\t\t\t\treturn fn ?\n\t\t\t\t\tjQuery.inArray( fn, list ) > -1 :\n\t\t\t\t\tlist.length > 0;\n\t\t\t},\n\n\t\t\t// Remove all callbacks from the list\n\t\t\tempty: function() {\n\t\t\t\tif ( list ) {\n\t\t\t\t\tlist = [];\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Disable .fire and .add\n\t\t\t// Abort any current/pending executions\n\t\t\t// Clear all callbacks and values\n\t\t\tdisable: function() {\n\t\t\t\tlocked = queue = [];\n\t\t\t\tlist = memory = \"\";\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\tdisabled: function() {\n\t\t\t\treturn !list;\n\t\t\t},\n\n\t\t\t// Disable .fire\n\t\t\t// Also disable .add unless we have memory (since it would have no effect)\n\t\t\t// Abort any pending executions\n\t\t\tlock: function() {\n\t\t\t\tlocked = queue = [];\n\t\t\t\tif ( !memory ) {\n\t\t\t\t\tlist = memory = \"\";\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\tlocked: function() {\n\t\t\t\treturn !!locked;\n\t\t\t},\n\n\t\t\t// Call all callbacks with the given context and arguments\n\t\t\tfireWith: function( context, args ) {\n\t\t\t\tif ( !locked ) {\n\t\t\t\t\targs = args || [];\n\t\t\t\t\targs = [ context, args.slice ? args.slice() : args ];\n\t\t\t\t\tqueue.push( args );\n\t\t\t\t\tif ( !firing ) {\n\t\t\t\t\t\tfire();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Call all the callbacks with the given arguments\n\t\t\tfire: function() {\n\t\t\t\tself.fireWith( this, arguments );\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// To know if the callbacks have already been called at least once\n\t\t\tfired: function() {\n\t\t\t\treturn !!fired;\n\t\t\t}\n\t\t};\n\n\treturn self;\n};\n\n\njQuery.extend( {\n\n\tDeferred: function( func ) {\n\t\tvar tuples = [\n\n\t\t\t\t// action, add listener, listener list, final state\n\t\t\t\t[ \"resolve\", \"done\", jQuery.Callbacks( \"once memory\" ), \"resolved\" ],\n\t\t\t\t[ \"reject\", \"fail\", jQuery.Callbacks( \"once memory\" ), \"rejected\" ],\n\t\t\t\t[ \"notify\", \"progress\", jQuery.Callbacks( \"memory\" ) ]\n\t\t\t],\n\t\t\tstate = \"pending\",\n\t\t\tpromise = {\n\t\t\t\tstate: function() {\n\t\t\t\t\treturn state;\n\t\t\t\t},\n\t\t\t\talways: function() {\n\t\t\t\t\tdeferred.done( arguments ).fail( arguments );\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\t\t\t\tthen: function( /* fnDone, fnFail, fnProgress */ ) {\n\t\t\t\t\tvar fns = arguments;\n\t\t\t\t\treturn jQuery.Deferred( function( newDefer ) {\n\t\t\t\t\t\tjQuery.each( tuples, function( i, tuple ) {\n\t\t\t\t\t\t\tvar fn = jQuery.isFunction( fns[ i ] ) && fns[ i ];\n\n\t\t\t\t\t\t\t// deferred[ done | fail | progress ] for forwarding actions to newDefer\n\t\t\t\t\t\t\tdeferred[ tuple[ 1 ] ]( function() {\n\t\t\t\t\t\t\t\tvar returned = fn && fn.apply( this, arguments );\n\t\t\t\t\t\t\t\tif ( returned && jQuery.isFunction( returned.promise ) ) {\n\t\t\t\t\t\t\t\t\treturned.promise()\n\t\t\t\t\t\t\t\t\t\t.progress( newDefer.notify )\n\t\t\t\t\t\t\t\t\t\t.done( newDefer.resolve )\n\t\t\t\t\t\t\t\t\t\t.fail( newDefer.reject );\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tnewDefer[ tuple[ 0 ] + \"With\" ](\n\t\t\t\t\t\t\t\t\t\tthis === promise ? newDefer.promise() : this,\n\t\t\t\t\t\t\t\t\t\tfn ? [ returned ] : arguments\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t} );\n\t\t\t\t\t\tfns = null;\n\t\t\t\t\t} ).promise();\n\t\t\t\t},\n\n\t\t\t\t// Get a promise for this deferred\n\t\t\t\t// If obj is provided, the promise aspect is added to the object\n\t\t\t\tpromise: function( obj ) {\n\t\t\t\t\treturn obj != null ? jQuery.extend( obj, promise ) : promise;\n\t\t\t\t}\n\t\t\t},\n\t\t\tdeferred = {};\n\n\t\t// Keep pipe for back-compat\n\t\tpromise.pipe = promise.then;\n\n\t\t// Add list-specific methods\n\t\tjQuery.each( tuples, function( i, tuple ) {\n\t\t\tvar list = tuple[ 2 ],\n\t\t\t\tstateString = tuple[ 3 ];\n\n\t\t\t// promise[ done | fail | progress ] = list.add\n\t\t\tpromise[ tuple[ 1 ] ] = list.add;\n\n\t\t\t// Handle state\n\t\t\tif ( stateString ) {\n\t\t\t\tlist.add( function() {\n\n\t\t\t\t\t// state = [ resolved | rejected ]\n\t\t\t\t\tstate = stateString;\n\n\t\t\t\t// [ reject_list | resolve_list ].disable; progress_list.lock\n\t\t\t\t}, tuples[ i ^ 1 ][ 2 ].disable, tuples[ 2 ][ 2 ].lock );\n\t\t\t}\n\n\t\t\t// deferred[ resolve | reject | notify ]\n\t\t\tdeferred[ tuple[ 0 ] ] = function() {\n\t\t\t\tdeferred[ tuple[ 0 ] + \"With\" ]( this === deferred ? promise : this, arguments );\n\t\t\t\treturn this;\n\t\t\t};\n\t\t\tdeferred[ tuple[ 0 ] + \"With\" ] = list.fireWith;\n\t\t} );\n\n\t\t// Make the deferred a promise\n\t\tpromise.promise( deferred );\n\n\t\t// Call given func if any\n\t\tif ( func ) {\n\t\t\tfunc.call( deferred, deferred );\n\t\t}\n\n\t\t// All done!\n\t\treturn deferred;\n\t},\n\n\t// Deferred helper\n\twhen: function( subordinate /* , ..., subordinateN */ ) {\n\t\tvar i = 0,\n\t\t\tresolveValues = slice.call( arguments ),\n\t\t\tlength = resolveValues.length,\n\n\t\t\t// the count of uncompleted subordinates\n\t\t\tremaining = length !== 1 ||\n\t\t\t\t( subordinate && jQuery.isFunction( subordinate.promise ) ) ? length : 0,\n\n\t\t\t// the master Deferred.\n\t\t\t// If resolveValues consist of only a single Deferred, just use that.\n\t\t\tdeferred = remaining === 1 ? subordinate : jQuery.Deferred(),\n\n\t\t\t// Update function for both resolve and progress values\n\t\t\tupdateFunc = function( i, contexts, values ) {\n\t\t\t\treturn function( value ) {\n\t\t\t\t\tcontexts[ i ] = this;\n\t\t\t\t\tvalues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value;\n\t\t\t\t\tif ( values === progressValues ) {\n\t\t\t\t\t\tdeferred.notifyWith( contexts, values );\n\t\t\t\t\t} else if ( !( --remaining ) ) {\n\t\t\t\t\t\tdeferred.resolveWith( contexts, values );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t},\n\n\t\t\tprogressValues, progressContexts, resolveContexts;\n\n\t\t// Add listeners to Deferred subordinates; treat others as resolved\n\t\tif ( length > 1 ) {\n\t\t\tprogressValues = new Array( length );\n\t\t\tprogressContexts = new Array( length );\n\t\t\tresolveContexts = new Array( length );\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tif ( resolveValues[ i ] && jQuery.isFunction( resolveValues[ i ].promise ) ) {\n\t\t\t\t\tresolveValues[ i ].promise()\n\t\t\t\t\t\t.progress( updateFunc( i, progressContexts, progressValues ) )\n\t\t\t\t\t\t.done( updateFunc( i, resolveContexts, resolveValues ) )\n\t\t\t\t\t\t.fail( deferred.reject );\n\t\t\t\t} else {\n\t\t\t\t\t--remaining;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// If we're not waiting on anything, resolve the master\n\t\tif ( !remaining ) {\n\t\t\tdeferred.resolveWith( resolveContexts, resolveValues );\n\t\t}\n\n\t\treturn deferred.promise();\n\t}\n} );\n\n\n// The deferred used on DOM ready\nvar readyList;\n\njQuery.fn.ready = function( fn ) {\n\n\t// Add the callback\n\tjQuery.ready.promise().done( fn );\n\n\treturn this;\n};\n\njQuery.extend( {\n\n\t// Is the DOM ready to be used? Set to true once it occurs.\n\tisReady: false,\n\n\t// A counter to track how many items to wait for before\n\t// the ready event fires. See #6781\n\treadyWait: 1,\n\n\t// Hold (or release) the ready event\n\tholdReady: function( hold ) {\n\t\tif ( hold ) {\n\t\t\tjQuery.readyWait++;\n\t\t} else {\n\t\t\tjQuery.ready( true );\n\t\t}\n\t},\n\n\t// Handle when the DOM is ready\n\tready: function( wait ) {\n\n\t\t// Abort if there are pending holds or we're already ready\n\t\tif ( wait === true ? --jQuery.readyWait : jQuery.isReady ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Remember that the DOM is ready\n\t\tjQuery.isReady = true;\n\n\t\t// If a normal DOM Ready event fired, decrement, and wait if need be\n\t\tif ( wait !== true && --jQuery.readyWait > 0 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// If there are functions bound, to execute\n\t\treadyList.resolveWith( document, [ jQuery ] );\n\n\t\t// Trigger any bound ready events\n\t\tif ( jQuery.fn.triggerHandler ) {\n\t\t\tjQuery( document ).triggerHandler( \"ready\" );\n\t\t\tjQuery( document ).off( \"ready\" );\n\t\t}\n\t}\n} );\n\n/**\n * The ready event handler and self cleanup method\n */\nfunction completed() {\n\tdocument.removeEventListener( \"DOMContentLoaded\", completed );\n\twindow.removeEventListener( \"load\", completed );\n\tjQuery.ready();\n}\n\njQuery.ready.promise = function( obj ) {\n\tif ( !readyList ) {\n\n\t\treadyList = jQuery.Deferred();\n\n\t\t// Catch cases where $(document).ready() is called\n\t\t// after the browser event has already occurred.\n\t\t// Support: IE9-10 only\n\t\t// Older IE sometimes signals \"interactive\" too soon\n\t\tif ( document.readyState === \"complete\" ||\n\t\t\t( document.readyState !== \"loading\" && !document.documentElement.doScroll ) ) {\n\n\t\t\t// Handle it asynchronously to allow scripts the opportunity to delay ready\n\t\t\twindow.setTimeout( jQuery.ready );\n\n\t\t} else {\n\n\t\t\t// Use the handy event callback\n\t\t\tdocument.addEventListener( \"DOMContentLoaded\", completed );\n\n\t\t\t// A fallback to window.onload, that will always work\n\t\t\twindow.addEventListener( \"load\", completed );\n\t\t}\n\t}\n\treturn readyList.promise( obj );\n};\n\n// Kick off the DOM ready check even if the user does not\njQuery.ready.promise();\n\n\n\n\n// Multifunctional method to get and set values of a collection\n// The value/s can optionally be executed if it's a function\nvar access = function( elems, fn, key, value, chainable, emptyGet, raw ) {\n\tvar i = 0,\n\t\tlen = elems.length,\n\t\tbulk = key == null;\n\n\t// Sets many values\n\tif ( jQuery.type( key ) === \"object\" ) {\n\t\tchainable = true;\n\t\tfor ( i in key ) {\n\t\t\taccess( elems, fn, i, key[ i ], true, emptyGet, raw );\n\t\t}\n\n\t// Sets one value\n\t} else if ( value !== undefined ) {\n\t\tchainable = true;\n\n\t\tif ( !jQuery.isFunction( value ) ) {\n\t\t\traw = true;\n\t\t}\n\n\t\tif ( bulk ) {\n\n\t\t\t// Bulk operations run against the entire set\n\t\t\tif ( raw ) {\n\t\t\t\tfn.call( elems, value );\n\t\t\t\tfn = null;\n\n\t\t\t// ...except when executing function values\n\t\t\t} else {\n\t\t\t\tbulk = fn;\n\t\t\t\tfn = function( elem, key, value ) {\n\t\t\t\t\treturn bulk.call( jQuery( elem ), value );\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\n\t\tif ( fn ) {\n\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\tfn(\n\t\t\t\t\telems[ i ], key, raw ?\n\t\t\t\t\tvalue :\n\t\t\t\t\tvalue.call( elems[ i ], i, fn( elems[ i ], key ) )\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n\n\treturn chainable ?\n\t\telems :\n\n\t\t// Gets\n\t\tbulk ?\n\t\t\tfn.call( elems ) :\n\t\t\tlen ? fn( elems[ 0 ], key ) : emptyGet;\n};\nvar acceptData = function( owner ) {\n\n\t// Accepts only:\n\t//  - Node\n\t//    - Node.ELEMENT_NODE\n\t//    - Node.DOCUMENT_NODE\n\t//  - Object\n\t//    - Any\n\t/* jshint -W018 */\n\treturn owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType );\n};\n\n\n\n\nfunction Data() {\n\tthis.expando = jQuery.expando + Data.uid++;\n}\n\nData.uid = 1;\n\nData.prototype = {\n\n\tregister: function( owner, initial ) {\n\t\tvar value = initial || {};\n\n\t\t// If it is a node unlikely to be stringify-ed or looped over\n\t\t// use plain assignment\n\t\tif ( owner.nodeType ) {\n\t\t\towner[ this.expando ] = value;\n\n\t\t// Otherwise secure it in a non-enumerable, non-writable property\n\t\t// configurability must be true to allow the property to be\n\t\t// deleted with the delete operator\n\t\t} else {\n\t\t\tObject.defineProperty( owner, this.expando, {\n\t\t\t\tvalue: value,\n\t\t\t\twritable: true,\n\t\t\t\tconfigurable: true\n\t\t\t} );\n\t\t}\n\t\treturn owner[ this.expando ];\n\t},\n\tcache: function( owner ) {\n\n\t\t// We can accept data for non-element nodes in modern browsers,\n\t\t// but we should not, see #8335.\n\t\t// Always return an empty object.\n\t\tif ( !acceptData( owner ) ) {\n\t\t\treturn {};\n\t\t}\n\n\t\t// Check if the owner object already has a cache\n\t\tvar value = owner[ this.expando ];\n\n\t\t// If not, create one\n\t\tif ( !value ) {\n\t\t\tvalue = {};\n\n\t\t\t// We can accept data for non-element nodes in modern browsers,\n\t\t\t// but we should not, see #8335.\n\t\t\t// Always return an empty object.\n\t\t\tif ( acceptData( owner ) ) {\n\n\t\t\t\t// If it is a node unlikely to be stringify-ed or looped over\n\t\t\t\t// use plain assignment\n\t\t\t\tif ( owner.nodeType ) {\n\t\t\t\t\towner[ this.expando ] = value;\n\n\t\t\t\t// Otherwise secure it in a non-enumerable property\n\t\t\t\t// configurable must be true to allow the property to be\n\t\t\t\t// deleted when data is removed\n\t\t\t\t} else {\n\t\t\t\t\tObject.defineProperty( owner, this.expando, {\n\t\t\t\t\t\tvalue: value,\n\t\t\t\t\t\tconfigurable: true\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn value;\n\t},\n\tset: function( owner, data, value ) {\n\t\tvar prop,\n\t\t\tcache = this.cache( owner );\n\n\t\t// Handle: [ owner, key, value ] args\n\t\tif ( typeof data === \"string\" ) {\n\t\t\tcache[ data ] = value;\n\n\t\t// Handle: [ owner, { properties } ] args\n\t\t} else {\n\n\t\t\t// Copy the properties one-by-one to the cache object\n\t\t\tfor ( prop in data ) {\n\t\t\t\tcache[ prop ] = data[ prop ];\n\t\t\t}\n\t\t}\n\t\treturn cache;\n\t},\n\tget: function( owner, key ) {\n\t\treturn key === undefined ?\n\t\t\tthis.cache( owner ) :\n\t\t\towner[ this.expando ] && owner[ this.expando ][ key ];\n\t},\n\taccess: function( owner, key, value ) {\n\t\tvar stored;\n\n\t\t// In cases where either:\n\t\t//\n\t\t//   1. No key was specified\n\t\t//   2. A string key was specified, but no value provided\n\t\t//\n\t\t// Take the \"read\" path and allow the get method to determine\n\t\t// which value to return, respectively either:\n\t\t//\n\t\t//   1. The entire cache object\n\t\t//   2. The data stored at the key\n\t\t//\n\t\tif ( key === undefined ||\n\t\t\t\t( ( key && typeof key === \"string\" ) && value === undefined ) ) {\n\n\t\t\tstored = this.get( owner, key );\n\n\t\t\treturn stored !== undefined ?\n\t\t\t\tstored : this.get( owner, jQuery.camelCase( key ) );\n\t\t}\n\n\t\t// When the key is not a string, or both a key and value\n\t\t// are specified, set or extend (existing objects) with either:\n\t\t//\n\t\t//   1. An object of properties\n\t\t//   2. A key and value\n\t\t//\n\t\tthis.set( owner, key, value );\n\n\t\t// Since the \"set\" path can have two possible entry points\n\t\t// return the expected data based on which path was taken[*]\n\t\treturn value !== undefined ? value : key;\n\t},\n\tremove: function( owner, key ) {\n\t\tvar i, name, camel,\n\t\t\tcache = owner[ this.expando ];\n\n\t\tif ( cache === undefined ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( key === undefined ) {\n\t\t\tthis.register( owner );\n\n\t\t} else {\n\n\t\t\t// Support array or space separated string of keys\n\t\t\tif ( jQuery.isArray( key ) ) {\n\n\t\t\t\t// If \"name\" is an array of keys...\n\t\t\t\t// When data is initially created, via (\"key\", \"val\") signature,\n\t\t\t\t// keys will be converted to camelCase.\n\t\t\t\t// Since there is no way to tell _how_ a key was added, remove\n\t\t\t\t// both plain key and camelCase key. #12786\n\t\t\t\t// This will only penalize the array argument path.\n\t\t\t\tname = key.concat( key.map( jQuery.camelCase ) );\n\t\t\t} else {\n\t\t\t\tcamel = jQuery.camelCase( key );\n\n\t\t\t\t// Try the string as a key before any manipulation\n\t\t\t\tif ( key in cache ) {\n\t\t\t\t\tname = [ key, camel ];\n\t\t\t\t} else {\n\n\t\t\t\t\t// If a key with the spaces exists, use it.\n\t\t\t\t\t// Otherwise, create an array by matching non-whitespace\n\t\t\t\t\tname = camel;\n\t\t\t\t\tname = name in cache ?\n\t\t\t\t\t\t[ name ] : ( name.match( rnotwhite ) || [] );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\ti = name.length;\n\n\t\t\twhile ( i-- ) {\n\t\t\t\tdelete cache[ name[ i ] ];\n\t\t\t}\n\t\t}\n\n\t\t// Remove the expando if there's no more data\n\t\tif ( key === undefined || jQuery.isEmptyObject( cache ) ) {\n\n\t\t\t// Support: Chrome <= 35-45+\n\t\t\t// Webkit & Blink performance suffers when deleting properties\n\t\t\t// from DOM nodes, so set to undefined instead\n\t\t\t// https://code.google.com/p/chromium/issues/detail?id=378607\n\t\t\tif ( owner.nodeType ) {\n\t\t\t\towner[ this.expando ] = undefined;\n\t\t\t} else {\n\t\t\t\tdelete owner[ this.expando ];\n\t\t\t}\n\t\t}\n\t},\n\thasData: function( owner ) {\n\t\tvar cache = owner[ this.expando ];\n\t\treturn cache !== undefined && !jQuery.isEmptyObject( cache );\n\t}\n};\nvar dataPriv = new Data();\n\nvar dataUser = new Data();\n\n\n\n//\tImplementation Summary\n//\n//\t1. Enforce API surface and semantic compatibility with 1.9.x branch\n//\t2. Improve the module's maintainability by reducing the storage\n//\t\tpaths to a single mechanism.\n//\t3. Use the same single mechanism to support \"private\" and \"user\" data.\n//\t4. _Never_ expose \"private\" data to user code (TODO: Drop _data, _removeData)\n//\t5. Avoid exposing implementation details on user objects (eg. expando properties)\n//\t6. Provide a clear path for implementation upgrade to WeakMap in 2014\n\nvar rbrace = /^(?:\\{[\\w\\W]*\\}|\\[[\\w\\W]*\\])$/,\n\trmultiDash = /[A-Z]/g;\n\nfunction dataAttr( elem, key, data ) {\n\tvar name;\n\n\t// If nothing was found internally, try to fetch any\n\t// data from the HTML5 data-* attribute\n\tif ( data === undefined && elem.nodeType === 1 ) {\n\t\tname = \"data-\" + key.replace( rmultiDash, \"-$&\" ).toLowerCase();\n\t\tdata = elem.getAttribute( name );\n\n\t\tif ( typeof data === \"string\" ) {\n\t\t\ttry {\n\t\t\t\tdata = data === \"true\" ? true :\n\t\t\t\t\tdata === \"false\" ? false :\n\t\t\t\t\tdata === \"null\" ? null :\n\n\t\t\t\t\t// Only convert to a number if it doesn't change the string\n\t\t\t\t\t+data + \"\" === data ? +data :\n\t\t\t\t\trbrace.test( data ) ? jQuery.parseJSON( data ) :\n\t\t\t\t\tdata;\n\t\t\t} catch ( e ) {}\n\n\t\t\t// Make sure we set the data so it isn't changed later\n\t\t\tdataUser.set( elem, key, data );\n\t\t} else {\n\t\t\tdata = undefined;\n\t\t}\n\t}\n\treturn data;\n}\n\njQuery.extend( {\n\thasData: function( elem ) {\n\t\treturn dataUser.hasData( elem ) || dataPriv.hasData( elem );\n\t},\n\n\tdata: function( elem, name, data ) {\n\t\treturn dataUser.access( elem, name, data );\n\t},\n\n\tremoveData: function( elem, name ) {\n\t\tdataUser.remove( elem, name );\n\t},\n\n\t// TODO: Now that all calls to _data and _removeData have been replaced\n\t// with direct calls to dataPriv methods, these can be deprecated.\n\t_data: function( elem, name, data ) {\n\t\treturn dataPriv.access( elem, name, data );\n\t},\n\n\t_removeData: function( elem, name ) {\n\t\tdataPriv.remove( elem, name );\n\t}\n} );\n\njQuery.fn.extend( {\n\tdata: function( key, value ) {\n\t\tvar i, name, data,\n\t\t\telem = this[ 0 ],\n\t\t\tattrs = elem && elem.attributes;\n\n\t\t// Gets all values\n\t\tif ( key === undefined ) {\n\t\t\tif ( this.length ) {\n\t\t\t\tdata = dataUser.get( elem );\n\n\t\t\t\tif ( elem.nodeType === 1 && !dataPriv.get( elem, \"hasDataAttrs\" ) ) {\n\t\t\t\t\ti = attrs.length;\n\t\t\t\t\twhile ( i-- ) {\n\n\t\t\t\t\t\t// Support: IE11+\n\t\t\t\t\t\t// The attrs elements can be null (#14894)\n\t\t\t\t\t\tif ( attrs[ i ] ) {\n\t\t\t\t\t\t\tname = attrs[ i ].name;\n\t\t\t\t\t\t\tif ( name.indexOf( \"data-\" ) === 0 ) {\n\t\t\t\t\t\t\t\tname = jQuery.camelCase( name.slice( 5 ) );\n\t\t\t\t\t\t\t\tdataAttr( elem, name, data[ name ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tdataPriv.set( elem, \"hasDataAttrs\", true );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn data;\n\t\t}\n\n\t\t// Sets multiple values\n\t\tif ( typeof key === \"object\" ) {\n\t\t\treturn this.each( function() {\n\t\t\t\tdataUser.set( this, key );\n\t\t\t} );\n\t\t}\n\n\t\treturn access( this, function( value ) {\n\t\t\tvar data, camelKey;\n\n\t\t\t// The calling jQuery object (element matches) is not empty\n\t\t\t// (and therefore has an element appears at this[ 0 ]) and the\n\t\t\t// `value` parameter was not undefined. An empty jQuery object\n\t\t\t// will result in `undefined` for elem = this[ 0 ] which will\n\t\t\t// throw an exception if an attempt to read a data cache is made.\n\t\t\tif ( elem && value === undefined ) {\n\n\t\t\t\t// Attempt to get data from the cache\n\t\t\t\t// with the key as-is\n\t\t\t\tdata = dataUser.get( elem, key ) ||\n\n\t\t\t\t\t// Try to find dashed key if it exists (gh-2779)\n\t\t\t\t\t// This is for 2.2.x only\n\t\t\t\t\tdataUser.get( elem, key.replace( rmultiDash, \"-$&\" ).toLowerCase() );\n\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\tcamelKey = jQuery.camelCase( key );\n\n\t\t\t\t// Attempt to get data from the cache\n\t\t\t\t// with the key camelized\n\t\t\t\tdata = dataUser.get( elem, camelKey );\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\t// Attempt to \"discover\" the data in\n\t\t\t\t// HTML5 custom data-* attrs\n\t\t\t\tdata = dataAttr( elem, camelKey, undefined );\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\t// We tried really hard, but the data doesn't exist.\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Set the data...\n\t\t\tcamelKey = jQuery.camelCase( key );\n\t\t\tthis.each( function() {\n\n\t\t\t\t// First, attempt to store a copy or reference of any\n\t\t\t\t// data that might've been store with a camelCased key.\n\t\t\t\tvar data = dataUser.get( this, camelKey );\n\n\t\t\t\t// For HTML5 data-* attribute interop, we have to\n\t\t\t\t// store property names with dashes in a camelCase form.\n\t\t\t\t// This might not apply to all properties...*\n\t\t\t\tdataUser.set( this, camelKey, value );\n\n\t\t\t\t// *... In the case of properties that might _actually_\n\t\t\t\t// have dashes, we need to also store a copy of that\n\t\t\t\t// unchanged property.\n\t\t\t\tif ( key.indexOf( \"-\" ) > -1 && data !== undefined ) {\n\t\t\t\t\tdataUser.set( this, key, value );\n\t\t\t\t}\n\t\t\t} );\n\t\t}, null, value, arguments.length > 1, null, true );\n\t},\n\n\tremoveData: function( key ) {\n\t\treturn this.each( function() {\n\t\t\tdataUser.remove( this, key );\n\t\t} );\n\t}\n} );\n\n\njQuery.extend( {\n\tqueue: function( elem, type, data ) {\n\t\tvar queue;\n\n\t\tif ( elem ) {\n\t\t\ttype = ( type || \"fx\" ) + \"queue\";\n\t\t\tqueue = dataPriv.get( elem, type );\n\n\t\t\t// Speed up dequeue by getting out quickly if this is just a lookup\n\t\t\tif ( data ) {\n\t\t\t\tif ( !queue || jQuery.isArray( data ) ) {\n\t\t\t\t\tqueue = dataPriv.access( elem, type, jQuery.makeArray( data ) );\n\t\t\t\t} else {\n\t\t\t\t\tqueue.push( data );\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn queue || [];\n\t\t}\n\t},\n\n\tdequeue: function( elem, type ) {\n\t\ttype = type || \"fx\";\n\n\t\tvar queue = jQuery.queue( elem, type ),\n\t\t\tstartLength = queue.length,\n\t\t\tfn = queue.shift(),\n\t\t\thooks = jQuery._queueHooks( elem, type ),\n\t\t\tnext = function() {\n\t\t\t\tjQuery.dequeue( elem, type );\n\t\t\t};\n\n\t\t// If the fx queue is dequeued, always remove the progress sentinel\n\t\tif ( fn === \"inprogress\" ) {\n\t\t\tfn = queue.shift();\n\t\t\tstartLength--;\n\t\t}\n\n\t\tif ( fn ) {\n\n\t\t\t// Add a progress sentinel to prevent the fx queue from being\n\t\t\t// automatically dequeued\n\t\t\tif ( type === \"fx\" ) {\n\t\t\t\tqueue.unshift( \"inprogress\" );\n\t\t\t}\n\n\t\t\t// Clear up the last queue stop function\n\t\t\tdelete hooks.stop;\n\t\t\tfn.call( elem, next, hooks );\n\t\t}\n\n\t\tif ( !startLength && hooks ) {\n\t\t\thooks.empty.fire();\n\t\t}\n\t},\n\n\t// Not public - generate a queueHooks object, or return the current one\n\t_queueHooks: function( elem, type ) {\n\t\tvar key = type + \"queueHooks\";\n\t\treturn dataPriv.get( elem, key ) || dataPriv.access( elem, key, {\n\t\t\tempty: jQuery.Callbacks( \"once memory\" ).add( function() {\n\t\t\t\tdataPriv.remove( elem, [ type + \"queue\", key ] );\n\t\t\t} )\n\t\t} );\n\t}\n} );\n\njQuery.fn.extend( {\n\tqueue: function( type, data ) {\n\t\tvar setter = 2;\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tdata = type;\n\t\t\ttype = \"fx\";\n\t\t\tsetter--;\n\t\t}\n\n\t\tif ( arguments.length < setter ) {\n\t\t\treturn jQuery.queue( this[ 0 ], type );\n\t\t}\n\n\t\treturn data === undefined ?\n\t\t\tthis :\n\t\t\tthis.each( function() {\n\t\t\t\tvar queue = jQuery.queue( this, type, data );\n\n\t\t\t\t// Ensure a hooks for this queue\n\t\t\t\tjQuery._queueHooks( this, type );\n\n\t\t\t\tif ( type === \"fx\" && queue[ 0 ] !== \"inprogress\" ) {\n\t\t\t\t\tjQuery.dequeue( this, type );\n\t\t\t\t}\n\t\t\t} );\n\t},\n\tdequeue: function( type ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.dequeue( this, type );\n\t\t} );\n\t},\n\tclearQueue: function( type ) {\n\t\treturn this.queue( type || \"fx\", [] );\n\t},\n\n\t// Get a promise resolved when queues of a certain type\n\t// are emptied (fx is the type by default)\n\tpromise: function( type, obj ) {\n\t\tvar tmp,\n\t\t\tcount = 1,\n\t\t\tdefer = jQuery.Deferred(),\n\t\t\telements = this,\n\t\t\ti = this.length,\n\t\t\tresolve = function() {\n\t\t\t\tif ( !( --count ) ) {\n\t\t\t\t\tdefer.resolveWith( elements, [ elements ] );\n\t\t\t\t}\n\t\t\t};\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tobj = type;\n\t\t\ttype = undefined;\n\t\t}\n\t\ttype = type || \"fx\";\n\n\t\twhile ( i-- ) {\n\t\t\ttmp = dataPriv.get( elements[ i ], type + \"queueHooks\" );\n\t\t\tif ( tmp && tmp.empty ) {\n\t\t\t\tcount++;\n\t\t\t\ttmp.empty.add( resolve );\n\t\t\t}\n\t\t}\n\t\tresolve();\n\t\treturn defer.promise( obj );\n\t}\n} );\nvar pnum = ( /[+-]?(?:\\d*\\.|)\\d+(?:[eE][+-]?\\d+|)/ ).source;\n\nvar rcssNum = new RegExp( \"^(?:([+-])=|)(\" + pnum + \")([a-z%]*)$\", \"i\" );\n\n\nvar cssExpand = [ \"Top\", \"Right\", \"Bottom\", \"Left\" ];\n\nvar isHidden = function( elem, el ) {\n\n\t\t// isHidden might be called from jQuery#filter function;\n\t\t// in that case, element will be second argument\n\t\telem = el || elem;\n\t\treturn jQuery.css( elem, \"display\" ) === \"none\" ||\n\t\t\t!jQuery.contains( elem.ownerDocument, elem );\n\t};\n\n\n\nfunction adjustCSS( elem, prop, valueParts, tween ) {\n\tvar adjusted,\n\t\tscale = 1,\n\t\tmaxIterations = 20,\n\t\tcurrentValue = tween ?\n\t\t\tfunction() { return tween.cur(); } :\n\t\t\tfunction() { return jQuery.css( elem, prop, \"\" ); },\n\t\tinitial = currentValue(),\n\t\tunit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? \"\" : \"px\" ),\n\n\t\t// Starting value computation is required for potential unit mismatches\n\t\tinitialInUnit = ( jQuery.cssNumber[ prop ] || unit !== \"px\" && +initial ) &&\n\t\t\trcssNum.exec( jQuery.css( elem, prop ) );\n\n\tif ( initialInUnit && initialInUnit[ 3 ] !== unit ) {\n\n\t\t// Trust units reported by jQuery.css\n\t\tunit = unit || initialInUnit[ 3 ];\n\n\t\t// Make sure we update the tween properties later on\n\t\tvalueParts = valueParts || [];\n\n\t\t// Iteratively approximate from a nonzero starting point\n\t\tinitialInUnit = +initial || 1;\n\n\t\tdo {\n\n\t\t\t// If previous iteration zeroed out, double until we get *something*.\n\t\t\t// Use string for doubling so we don't accidentally see scale as unchanged below\n\t\t\tscale = scale || \".5\";\n\n\t\t\t// Adjust and apply\n\t\t\tinitialInUnit = initialInUnit / scale;\n\t\t\tjQuery.style( elem, prop, initialInUnit + unit );\n\n\t\t// Update scale, tolerating zero or NaN from tween.cur()\n\t\t// Break the loop if scale is unchanged or perfect, or if we've just had enough.\n\t\t} while (\n\t\t\tscale !== ( scale = currentValue() / initial ) && scale !== 1 && --maxIterations\n\t\t);\n\t}\n\n\tif ( valueParts ) {\n\t\tinitialInUnit = +initialInUnit || +initial || 0;\n\n\t\t// Apply relative offset (+=/-=) if specified\n\t\tadjusted = valueParts[ 1 ] ?\n\t\t\tinitialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] :\n\t\t\t+valueParts[ 2 ];\n\t\tif ( tween ) {\n\t\t\ttween.unit = unit;\n\t\t\ttween.start = initialInUnit;\n\t\t\ttween.end = adjusted;\n\t\t}\n\t}\n\treturn adjusted;\n}\nvar rcheckableType = ( /^(?:checkbox|radio)$/i );\n\nvar rtagName = ( /<([\\w:-]+)/ );\n\nvar rscriptType = ( /^$|\\/(?:java|ecma)script/i );\n\n\n\n// We have to close these tags to support XHTML (#13200)\nvar wrapMap = {\n\n\t// Support: IE9\n\toption: [ 1, \"<select multiple='multiple'>\", \"</select>\" ],\n\n\t// XHTML parsers do not magically insert elements in the\n\t// same way that tag soup parsers do. So we cannot shorten\n\t// this by omitting <tbody> or other required elements.\n\tthead: [ 1, \"<table>\", \"</table>\" ],\n\tcol: [ 2, \"<table><colgroup>\", \"</colgroup></table>\" ],\n\ttr: [ 2, \"<table><tbody>\", \"</tbody></table>\" ],\n\ttd: [ 3, \"<table><tbody><tr>\", \"</tr></tbody></table>\" ],\n\n\t_default: [ 0, \"\", \"\" ]\n};\n\n// Support: IE9\nwrapMap.optgroup = wrapMap.option;\n\nwrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;\nwrapMap.th = wrapMap.td;\n\n\nfunction getAll( context, tag ) {\n\n\t// Support: IE9-11+\n\t// Use typeof to avoid zero-argument method invocation on host objects (#15151)\n\tvar ret = typeof context.getElementsByTagName !== \"undefined\" ?\n\t\t\tcontext.getElementsByTagName( tag || \"*\" ) :\n\t\t\ttypeof context.querySelectorAll !== \"undefined\" ?\n\t\t\t\tcontext.querySelectorAll( tag || \"*\" ) :\n\t\t\t[];\n\n\treturn tag === undefined || tag && jQuery.nodeName( context, tag ) ?\n\t\tjQuery.merge( [ context ], ret ) :\n\t\tret;\n}\n\n\n// Mark scripts as having already been evaluated\nfunction setGlobalEval( elems, refElements ) {\n\tvar i = 0,\n\t\tl = elems.length;\n\n\tfor ( ; i < l; i++ ) {\n\t\tdataPriv.set(\n\t\t\telems[ i ],\n\t\t\t\"globalEval\",\n\t\t\t!refElements || dataPriv.get( refElements[ i ], \"globalEval\" )\n\t\t);\n\t}\n}\n\n\nvar rhtml = /<|&#?\\w+;/;\n\nfunction buildFragment( elems, context, scripts, selection, ignored ) {\n\tvar elem, tmp, tag, wrap, contains, j,\n\t\tfragment = context.createDocumentFragment(),\n\t\tnodes = [],\n\t\ti = 0,\n\t\tl = elems.length;\n\n\tfor ( ; i < l; i++ ) {\n\t\telem = elems[ i ];\n\n\t\tif ( elem || elem === 0 ) {\n\n\t\t\t// Add nodes directly\n\t\t\tif ( jQuery.type( elem ) === \"object\" ) {\n\n\t\t\t\t// Support: Android<4.1, PhantomJS<2\n\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\tjQuery.merge( nodes, elem.nodeType ? [ elem ] : elem );\n\n\t\t\t// Convert non-html into a text node\n\t\t\t} else if ( !rhtml.test( elem ) ) {\n\t\t\t\tnodes.push( context.createTextNode( elem ) );\n\n\t\t\t// Convert html into DOM nodes\n\t\t\t} else {\n\t\t\t\ttmp = tmp || fragment.appendChild( context.createElement( \"div\" ) );\n\n\t\t\t\t// Deserialize a standard representation\n\t\t\t\ttag = ( rtagName.exec( elem ) || [ \"\", \"\" ] )[ 1 ].toLowerCase();\n\t\t\t\twrap = wrapMap[ tag ] || wrapMap._default;\n\t\t\t\ttmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ];\n\n\t\t\t\t// Descend through wrappers to the right content\n\t\t\t\tj = wrap[ 0 ];\n\t\t\t\twhile ( j-- ) {\n\t\t\t\t\ttmp = tmp.lastChild;\n\t\t\t\t}\n\n\t\t\t\t// Support: Android<4.1, PhantomJS<2\n\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\tjQuery.merge( nodes, tmp.childNodes );\n\n\t\t\t\t// Remember the top-level container\n\t\t\t\ttmp = fragment.firstChild;\n\n\t\t\t\t// Ensure the created nodes are orphaned (#12392)\n\t\t\t\ttmp.textContent = \"\";\n\t\t\t}\n\t\t}\n\t}\n\n\t// Remove wrapper from fragment\n\tfragment.textContent = \"\";\n\n\ti = 0;\n\twhile ( ( elem = nodes[ i++ ] ) ) {\n\n\t\t// Skip elements already in the context collection (trac-4087)\n\t\tif ( selection && jQuery.inArray( elem, selection ) > -1 ) {\n\t\t\tif ( ignored ) {\n\t\t\t\tignored.push( elem );\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\n\t\tcontains = jQuery.contains( elem.ownerDocument, elem );\n\n\t\t// Append to fragment\n\t\ttmp = getAll( fragment.appendChild( elem ), \"script\" );\n\n\t\t// Preserve script evaluation history\n\t\tif ( contains ) {\n\t\t\tsetGlobalEval( tmp );\n\t\t}\n\n\t\t// Capture executables\n\t\tif ( scripts ) {\n\t\t\tj = 0;\n\t\t\twhile ( ( elem = tmp[ j++ ] ) ) {\n\t\t\t\tif ( rscriptType.test( elem.type || \"\" ) ) {\n\t\t\t\t\tscripts.push( elem );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn fragment;\n}\n\n\n( function() {\n\tvar fragment = document.createDocumentFragment(),\n\t\tdiv = fragment.appendChild( document.createElement( \"div\" ) ),\n\t\tinput = document.createElement( \"input\" );\n\n\t// Support: Android 4.0-4.3, Safari<=5.1\n\t// Check state lost if the name is set (#11217)\n\t// Support: Windows Web Apps (WWA)\n\t// `name` and `type` must use .setAttribute for WWA (#14901)\n\tinput.setAttribute( \"type\", \"radio\" );\n\tinput.setAttribute( \"checked\", \"checked\" );\n\tinput.setAttribute( \"name\", \"t\" );\n\n\tdiv.appendChild( input );\n\n\t// Support: Safari<=5.1, Android<4.2\n\t// Older WebKit doesn't clone checked state correctly in fragments\n\tsupport.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked;\n\n\t// Support: IE<=11+\n\t// Make sure textarea (and checkbox) defaultValue is properly cloned\n\tdiv.innerHTML = \"<textarea>x</textarea>\";\n\tsupport.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue;\n} )();\n\n\nvar\n\trkeyEvent = /^key/,\n\trmouseEvent = /^(?:mouse|pointer|contextmenu|drag|drop)|click/,\n\trtypenamespace = /^([^.]*)(?:\\.(.+)|)/;\n\nfunction returnTrue() {\n\treturn true;\n}\n\nfunction returnFalse() {\n\treturn false;\n}\n\n// Support: IE9\n// See #13393 for more info\nfunction safeActiveElement() {\n\ttry {\n\t\treturn document.activeElement;\n\t} catch ( err ) { }\n}\n\nfunction on( elem, types, selector, data, fn, one ) {\n\tvar origFn, type;\n\n\t// Types can be a map of types/handlers\n\tif ( typeof types === \"object\" ) {\n\n\t\t// ( types-Object, selector, data )\n\t\tif ( typeof selector !== \"string\" ) {\n\n\t\t\t// ( types-Object, data )\n\t\t\tdata = data || selector;\n\t\t\tselector = undefined;\n\t\t}\n\t\tfor ( type in types ) {\n\t\t\ton( elem, type, selector, data, types[ type ], one );\n\t\t}\n\t\treturn elem;\n\t}\n\n\tif ( data == null && fn == null ) {\n\n\t\t// ( types, fn )\n\t\tfn = selector;\n\t\tdata = selector = undefined;\n\t} else if ( fn == null ) {\n\t\tif ( typeof selector === \"string\" ) {\n\n\t\t\t// ( types, selector, fn )\n\t\t\tfn = data;\n\t\t\tdata = undefined;\n\t\t} else {\n\n\t\t\t// ( types, data, fn )\n\t\t\tfn = data;\n\t\t\tdata = selector;\n\t\t\tselector = undefined;\n\t\t}\n\t}\n\tif ( fn === false ) {\n\t\tfn = returnFalse;\n\t} else if ( !fn ) {\n\t\treturn elem;\n\t}\n\n\tif ( one === 1 ) {\n\t\torigFn = fn;\n\t\tfn = function( event ) {\n\n\t\t\t// Can use an empty set, since event contains the info\n\t\t\tjQuery().off( event );\n\t\t\treturn origFn.apply( this, arguments );\n\t\t};\n\n\t\t// Use same guid so caller can remove using origFn\n\t\tfn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );\n\t}\n\treturn elem.each( function() {\n\t\tjQuery.event.add( this, types, fn, data, selector );\n\t} );\n}\n\n/*\n * Helper functions for managing events -- not part of the public interface.\n * Props to Dean Edwards' addEvent library for many of the ideas.\n */\njQuery.event = {\n\n\tglobal: {},\n\n\tadd: function( elem, types, handler, data, selector ) {\n\n\t\tvar handleObjIn, eventHandle, tmp,\n\t\t\tevents, t, handleObj,\n\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\telemData = dataPriv.get( elem );\n\n\t\t// Don't attach events to noData or text/comment nodes (but allow plain objects)\n\t\tif ( !elemData ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Caller can pass in an object of custom data in lieu of the handler\n\t\tif ( handler.handler ) {\n\t\t\thandleObjIn = handler;\n\t\t\thandler = handleObjIn.handler;\n\t\t\tselector = handleObjIn.selector;\n\t\t}\n\n\t\t// Make sure that the handler has a unique ID, used to find/remove it later\n\t\tif ( !handler.guid ) {\n\t\t\thandler.guid = jQuery.guid++;\n\t\t}\n\n\t\t// Init the element's event structure and main handler, if this is the first\n\t\tif ( !( events = elemData.events ) ) {\n\t\t\tevents = elemData.events = {};\n\t\t}\n\t\tif ( !( eventHandle = elemData.handle ) ) {\n\t\t\teventHandle = elemData.handle = function( e ) {\n\n\t\t\t\t// Discard the second event of a jQuery.event.trigger() and\n\t\t\t\t// when an event is called after a page has unloaded\n\t\t\t\treturn typeof jQuery !== \"undefined\" && jQuery.event.triggered !== e.type ?\n\t\t\t\t\tjQuery.event.dispatch.apply( elem, arguments ) : undefined;\n\t\t\t};\n\t\t}\n\n\t\t// Handle multiple events separated by a space\n\t\ttypes = ( types || \"\" ).match( rnotwhite ) || [ \"\" ];\n\t\tt = types.length;\n\t\twhile ( t-- ) {\n\t\t\ttmp = rtypenamespace.exec( types[ t ] ) || [];\n\t\t\ttype = origType = tmp[ 1 ];\n\t\t\tnamespaces = ( tmp[ 2 ] || \"\" ).split( \".\" ).sort();\n\n\t\t\t// There *must* be a type, no attaching namespace-only handlers\n\t\t\tif ( !type ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// If event changes its type, use the special event handlers for the changed type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// If selector defined, determine special event api type, otherwise given type\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n\n\t\t\t// Update special based on newly reset type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// handleObj is passed to all event handlers\n\t\t\thandleObj = jQuery.extend( {\n\t\t\t\ttype: type,\n\t\t\t\torigType: origType,\n\t\t\t\tdata: data,\n\t\t\t\thandler: handler,\n\t\t\t\tguid: handler.guid,\n\t\t\t\tselector: selector,\n\t\t\t\tneedsContext: selector && jQuery.expr.match.needsContext.test( selector ),\n\t\t\t\tnamespace: namespaces.join( \".\" )\n\t\t\t}, handleObjIn );\n\n\t\t\t// Init the event handler queue if we're the first\n\t\t\tif ( !( handlers = events[ type ] ) ) {\n\t\t\t\thandlers = events[ type ] = [];\n\t\t\t\thandlers.delegateCount = 0;\n\n\t\t\t\t// Only use addEventListener if the special events handler returns false\n\t\t\t\tif ( !special.setup ||\n\t\t\t\t\tspecial.setup.call( elem, data, namespaces, eventHandle ) === false ) {\n\n\t\t\t\t\tif ( elem.addEventListener ) {\n\t\t\t\t\t\telem.addEventListener( type, eventHandle );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( special.add ) {\n\t\t\t\tspecial.add.call( elem, handleObj );\n\n\t\t\t\tif ( !handleObj.handler.guid ) {\n\t\t\t\t\thandleObj.handler.guid = handler.guid;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Add to the element's handler list, delegates in front\n\t\t\tif ( selector ) {\n\t\t\t\thandlers.splice( handlers.delegateCount++, 0, handleObj );\n\t\t\t} else {\n\t\t\t\thandlers.push( handleObj );\n\t\t\t}\n\n\t\t\t// Keep track of which events have ever been used, for event optimization\n\t\t\tjQuery.event.global[ type ] = true;\n\t\t}\n\n\t},\n\n\t// Detach an event or set of events from an element\n\tremove: function( elem, types, handler, selector, mappedTypes ) {\n\n\t\tvar j, origCount, tmp,\n\t\t\tevents, t, handleObj,\n\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\telemData = dataPriv.hasData( elem ) && dataPriv.get( elem );\n\n\t\tif ( !elemData || !( events = elemData.events ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Once for each type.namespace in types; type may be omitted\n\t\ttypes = ( types || \"\" ).match( rnotwhite ) || [ \"\" ];\n\t\tt = types.length;\n\t\twhile ( t-- ) {\n\t\t\ttmp = rtypenamespace.exec( types[ t ] ) || [];\n\t\t\ttype = origType = tmp[ 1 ];\n\t\t\tnamespaces = ( tmp[ 2 ] || \"\" ).split( \".\" ).sort();\n\n\t\t\t// Unbind all events (on this namespace, if provided) for the element\n\t\t\tif ( !type ) {\n\t\t\t\tfor ( type in events ) {\n\t\t\t\t\tjQuery.event.remove( elem, type + types[ t ], handler, selector, true );\n\t\t\t\t}\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n\t\t\thandlers = events[ type ] || [];\n\t\t\ttmp = tmp[ 2 ] &&\n\t\t\t\tnew RegExp( \"(^|\\\\.)\" + namespaces.join( \"\\\\.(?:.*\\\\.|)\" ) + \"(\\\\.|$)\" );\n\n\t\t\t// Remove matching events\n\t\t\torigCount = j = handlers.length;\n\t\t\twhile ( j-- ) {\n\t\t\t\thandleObj = handlers[ j ];\n\n\t\t\t\tif ( ( mappedTypes || origType === handleObj.origType ) &&\n\t\t\t\t\t( !handler || handler.guid === handleObj.guid ) &&\n\t\t\t\t\t( !tmp || tmp.test( handleObj.namespace ) ) &&\n\t\t\t\t\t( !selector || selector === handleObj.selector ||\n\t\t\t\t\t\tselector === \"**\" && handleObj.selector ) ) {\n\t\t\t\t\thandlers.splice( j, 1 );\n\n\t\t\t\t\tif ( handleObj.selector ) {\n\t\t\t\t\t\thandlers.delegateCount--;\n\t\t\t\t\t}\n\t\t\t\t\tif ( special.remove ) {\n\t\t\t\t\t\tspecial.remove.call( elem, handleObj );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Remove generic event handler if we removed something and no more handlers exist\n\t\t\t// (avoids potential for endless recursion during removal of special event handlers)\n\t\t\tif ( origCount && !handlers.length ) {\n\t\t\t\tif ( !special.teardown ||\n\t\t\t\t\tspecial.teardown.call( elem, namespaces, elemData.handle ) === false ) {\n\n\t\t\t\t\tjQuery.removeEvent( elem, type, elemData.handle );\n\t\t\t\t}\n\n\t\t\t\tdelete events[ type ];\n\t\t\t}\n\t\t}\n\n\t\t// Remove data and the expando if it's no longer used\n\t\tif ( jQuery.isEmptyObject( events ) ) {\n\t\t\tdataPriv.remove( elem, \"handle events\" );\n\t\t}\n\t},\n\n\tdispatch: function( event ) {\n\n\t\t// Make a writable jQuery.Event from the native event object\n\t\tevent = jQuery.event.fix( event );\n\n\t\tvar i, j, ret, matched, handleObj,\n\t\t\thandlerQueue = [],\n\t\t\targs = slice.call( arguments ),\n\t\t\thandlers = ( dataPriv.get( this, \"events\" ) || {} )[ event.type ] || [],\n\t\t\tspecial = jQuery.event.special[ event.type ] || {};\n\n\t\t// Use the fix-ed jQuery.Event rather than the (read-only) native event\n\t\targs[ 0 ] = event;\n\t\tevent.delegateTarget = this;\n\n\t\t// Call the preDispatch hook for the mapped type, and let it bail if desired\n\t\tif ( special.preDispatch && special.preDispatch.call( this, event ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Determine handlers\n\t\thandlerQueue = jQuery.event.handlers.call( this, event, handlers );\n\n\t\t// Run delegates first; they may want to stop propagation beneath us\n\t\ti = 0;\n\t\twhile ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) {\n\t\t\tevent.currentTarget = matched.elem;\n\n\t\t\tj = 0;\n\t\t\twhile ( ( handleObj = matched.handlers[ j++ ] ) &&\n\t\t\t\t!event.isImmediatePropagationStopped() ) {\n\n\t\t\t\t// Triggered event must either 1) have no namespace, or 2) have namespace(s)\n\t\t\t\t// a subset or equal to those in the bound event (both can have no namespace).\n\t\t\t\tif ( !event.rnamespace || event.rnamespace.test( handleObj.namespace ) ) {\n\n\t\t\t\t\tevent.handleObj = handleObj;\n\t\t\t\t\tevent.data = handleObj.data;\n\n\t\t\t\t\tret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle ||\n\t\t\t\t\t\thandleObj.handler ).apply( matched.elem, args );\n\n\t\t\t\t\tif ( ret !== undefined ) {\n\t\t\t\t\t\tif ( ( event.result = ret ) === false ) {\n\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Call the postDispatch hook for the mapped type\n\t\tif ( special.postDispatch ) {\n\t\t\tspecial.postDispatch.call( this, event );\n\t\t}\n\n\t\treturn event.result;\n\t},\n\n\thandlers: function( event, handlers ) {\n\t\tvar i, matches, sel, handleObj,\n\t\t\thandlerQueue = [],\n\t\t\tdelegateCount = handlers.delegateCount,\n\t\t\tcur = event.target;\n\n\t\t// Support (at least): Chrome, IE9\n\t\t// Find delegate handlers\n\t\t// Black-hole SVG <use> instance trees (#13180)\n\t\t//\n\t\t// Support: Firefox<=42+\n\t\t// Avoid non-left-click in FF but don't block IE radio events (#3861, gh-2343)\n\t\tif ( delegateCount && cur.nodeType &&\n\t\t\t( event.type !== \"click\" || isNaN( event.button ) || event.button < 1 ) ) {\n\n\t\t\tfor ( ; cur !== this; cur = cur.parentNode || this ) {\n\n\t\t\t\t// Don't check non-elements (#13208)\n\t\t\t\t// Don't process clicks on disabled elements (#6911, #8165, #11382, #11764)\n\t\t\t\tif ( cur.nodeType === 1 && ( cur.disabled !== true || event.type !== \"click\" ) ) {\n\t\t\t\t\tmatches = [];\n\t\t\t\t\tfor ( i = 0; i < delegateCount; i++ ) {\n\t\t\t\t\t\thandleObj = handlers[ i ];\n\n\t\t\t\t\t\t// Don't conflict with Object.prototype properties (#13203)\n\t\t\t\t\t\tsel = handleObj.selector + \" \";\n\n\t\t\t\t\t\tif ( matches[ sel ] === undefined ) {\n\t\t\t\t\t\t\tmatches[ sel ] = handleObj.needsContext ?\n\t\t\t\t\t\t\t\tjQuery( sel, this ).index( cur ) > -1 :\n\t\t\t\t\t\t\t\tjQuery.find( sel, this, null, [ cur ] ).length;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif ( matches[ sel ] ) {\n\t\t\t\t\t\t\tmatches.push( handleObj );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( matches.length ) {\n\t\t\t\t\t\thandlerQueue.push( { elem: cur, handlers: matches } );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Add the remaining (directly-bound) handlers\n\t\tif ( delegateCount < handlers.length ) {\n\t\t\thandlerQueue.push( { elem: this, handlers: handlers.slice( delegateCount ) } );\n\t\t}\n\n\t\treturn handlerQueue;\n\t},\n\n\t// Includes some event props shared by KeyEvent and MouseEvent\n\tprops: ( \"altKey bubbles cancelable ctrlKey currentTarget detail eventPhase \" +\n\t\t\"metaKey relatedTarget shiftKey target timeStamp view which\" ).split( \" \" ),\n\n\tfixHooks: {},\n\n\tkeyHooks: {\n\t\tprops: \"char charCode key keyCode\".split( \" \" ),\n\t\tfilter: function( event, original ) {\n\n\t\t\t// Add which for key events\n\t\t\tif ( event.which == null ) {\n\t\t\t\tevent.which = original.charCode != null ? original.charCode : original.keyCode;\n\t\t\t}\n\n\t\t\treturn event;\n\t\t}\n\t},\n\n\tmouseHooks: {\n\t\tprops: ( \"button buttons clientX clientY offsetX offsetY pageX pageY \" +\n\t\t\t\"screenX screenY toElement\" ).split( \" \" ),\n\t\tfilter: function( event, original ) {\n\t\t\tvar eventDoc, doc, body,\n\t\t\t\tbutton = original.button;\n\n\t\t\t// Calculate pageX/Y if missing and clientX/Y available\n\t\t\tif ( event.pageX == null && original.clientX != null ) {\n\t\t\t\teventDoc = event.target.ownerDocument || document;\n\t\t\t\tdoc = eventDoc.documentElement;\n\t\t\t\tbody = eventDoc.body;\n\n\t\t\t\tevent.pageX = original.clientX +\n\t\t\t\t\t( doc && doc.scrollLeft || body && body.scrollLeft || 0 ) -\n\t\t\t\t\t( doc && doc.clientLeft || body && body.clientLeft || 0 );\n\t\t\t\tevent.pageY = original.clientY +\n\t\t\t\t\t( doc && doc.scrollTop  || body && body.scrollTop  || 0 ) -\n\t\t\t\t\t( doc && doc.clientTop  || body && body.clientTop  || 0 );\n\t\t\t}\n\n\t\t\t// Add which for click: 1 === left; 2 === middle; 3 === right\n\t\t\t// Note: button is not normalized, so don't use it\n\t\t\tif ( !event.which && button !== undefined ) {\n\t\t\t\tevent.which = ( button & 1 ? 1 : ( button & 2 ? 3 : ( button & 4 ? 2 : 0 ) ) );\n\t\t\t}\n\n\t\t\treturn event;\n\t\t}\n\t},\n\n\tfix: function( event ) {\n\t\tif ( event[ jQuery.expando ] ) {\n\t\t\treturn event;\n\t\t}\n\n\t\t// Create a writable copy of the event object and normalize some properties\n\t\tvar i, prop, copy,\n\t\t\ttype = event.type,\n\t\t\toriginalEvent = event,\n\t\t\tfixHook = this.fixHooks[ type ];\n\n\t\tif ( !fixHook ) {\n\t\t\tthis.fixHooks[ type ] = fixHook =\n\t\t\t\trmouseEvent.test( type ) ? this.mouseHooks :\n\t\t\t\trkeyEvent.test( type ) ? this.keyHooks :\n\t\t\t\t{};\n\t\t}\n\t\tcopy = fixHook.props ? this.props.concat( fixHook.props ) : this.props;\n\n\t\tevent = new jQuery.Event( originalEvent );\n\n\t\ti = copy.length;\n\t\twhile ( i-- ) {\n\t\t\tprop = copy[ i ];\n\t\t\tevent[ prop ] = originalEvent[ prop ];\n\t\t}\n\n\t\t// Support: Cordova 2.5 (WebKit) (#13255)\n\t\t// All events should have a target; Cordova deviceready doesn't\n\t\tif ( !event.target ) {\n\t\t\tevent.target = document;\n\t\t}\n\n\t\t// Support: Safari 6.0+, Chrome<28\n\t\t// Target should not be a text node (#504, #13143)\n\t\tif ( event.target.nodeType === 3 ) {\n\t\t\tevent.target = event.target.parentNode;\n\t\t}\n\n\t\treturn fixHook.filter ? fixHook.filter( event, originalEvent ) : event;\n\t},\n\n\tspecial: {\n\t\tload: {\n\n\t\t\t// Prevent triggered image.load events from bubbling to window.load\n\t\t\tnoBubble: true\n\t\t},\n\t\tfocus: {\n\n\t\t\t// Fire native event if possible so blur/focus sequence is correct\n\t\t\ttrigger: function() {\n\t\t\t\tif ( this !== safeActiveElement() && this.focus ) {\n\t\t\t\t\tthis.focus();\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t},\n\t\t\tdelegateType: \"focusin\"\n\t\t},\n\t\tblur: {\n\t\t\ttrigger: function() {\n\t\t\t\tif ( this === safeActiveElement() && this.blur ) {\n\t\t\t\t\tthis.blur();\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t},\n\t\t\tdelegateType: \"focusout\"\n\t\t},\n\t\tclick: {\n\n\t\t\t// For checkbox, fire native event so checked state will be right\n\t\t\ttrigger: function() {\n\t\t\t\tif ( this.type === \"checkbox\" && this.click && jQuery.nodeName( this, \"input\" ) ) {\n\t\t\t\t\tthis.click();\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t// For cross-browser consistency, don't fire native .click() on links\n\t\t\t_default: function( event ) {\n\t\t\t\treturn jQuery.nodeName( event.target, \"a\" );\n\t\t\t}\n\t\t},\n\n\t\tbeforeunload: {\n\t\t\tpostDispatch: function( event ) {\n\n\t\t\t\t// Support: Firefox 20+\n\t\t\t\t// Firefox doesn't alert if the returnValue field is not set.\n\t\t\t\tif ( event.result !== undefined && event.originalEvent ) {\n\t\t\t\t\tevent.originalEvent.returnValue = event.result;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n};\n\njQuery.removeEvent = function( elem, type, handle ) {\n\n\t// This \"if\" is needed for plain objects\n\tif ( elem.removeEventListener ) {\n\t\telem.removeEventListener( type, handle );\n\t}\n};\n\njQuery.Event = function( src, props ) {\n\n\t// Allow instantiation without the 'new' keyword\n\tif ( !( this instanceof jQuery.Event ) ) {\n\t\treturn new jQuery.Event( src, props );\n\t}\n\n\t// Event object\n\tif ( src && src.type ) {\n\t\tthis.originalEvent = src;\n\t\tthis.type = src.type;\n\n\t\t// Events bubbling up the document may have been marked as prevented\n\t\t// by a handler lower down the tree; reflect the correct value.\n\t\tthis.isDefaultPrevented = src.defaultPrevented ||\n\t\t\t\tsrc.defaultPrevented === undefined &&\n\n\t\t\t\t// Support: Android<4.0\n\t\t\t\tsrc.returnValue === false ?\n\t\t\treturnTrue :\n\t\t\treturnFalse;\n\n\t// Event type\n\t} else {\n\t\tthis.type = src;\n\t}\n\n\t// Put explicitly provided properties onto the event object\n\tif ( props ) {\n\t\tjQuery.extend( this, props );\n\t}\n\n\t// Create a timestamp if incoming event doesn't have one\n\tthis.timeStamp = src && src.timeStamp || jQuery.now();\n\n\t// Mark it as fixed\n\tthis[ jQuery.expando ] = true;\n};\n\n// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding\n// http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html\njQuery.Event.prototype = {\n\tconstructor: jQuery.Event,\n\tisDefaultPrevented: returnFalse,\n\tisPropagationStopped: returnFalse,\n\tisImmediatePropagationStopped: returnFalse,\n\n\tpreventDefault: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isDefaultPrevented = returnTrue;\n\n\t\tif ( e ) {\n\t\t\te.preventDefault();\n\t\t}\n\t},\n\tstopPropagation: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isPropagationStopped = returnTrue;\n\n\t\tif ( e ) {\n\t\t\te.stopPropagation();\n\t\t}\n\t},\n\tstopImmediatePropagation: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isImmediatePropagationStopped = returnTrue;\n\n\t\tif ( e ) {\n\t\t\te.stopImmediatePropagation();\n\t\t}\n\n\t\tthis.stopPropagation();\n\t}\n};\n\n// Create mouseenter/leave events using mouseover/out and event-time checks\n// so that event delegation works in jQuery.\n// Do the same for pointerenter/pointerleave and pointerover/pointerout\n//\n// Support: Safari 7 only\n// Safari sends mouseenter too often; see:\n// https://code.google.com/p/chromium/issues/detail?id=470258\n// for the description of the bug (it existed in older Chrome versions as well).\njQuery.each( {\n\tmouseenter: \"mouseover\",\n\tmouseleave: \"mouseout\",\n\tpointerenter: \"pointerover\",\n\tpointerleave: \"pointerout\"\n}, function( orig, fix ) {\n\tjQuery.event.special[ orig ] = {\n\t\tdelegateType: fix,\n\t\tbindType: fix,\n\n\t\thandle: function( event ) {\n\t\t\tvar ret,\n\t\t\t\ttarget = this,\n\t\t\t\trelated = event.relatedTarget,\n\t\t\t\thandleObj = event.handleObj;\n\n\t\t\t// For mouseenter/leave call the handler if related is outside the target.\n\t\t\t// NB: No relatedTarget if the mouse left/entered the browser window\n\t\t\tif ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) {\n\t\t\t\tevent.type = handleObj.origType;\n\t\t\t\tret = handleObj.handler.apply( this, arguments );\n\t\t\t\tevent.type = fix;\n\t\t\t}\n\t\t\treturn ret;\n\t\t}\n\t};\n} );\n\njQuery.fn.extend( {\n\ton: function( types, selector, data, fn ) {\n\t\treturn on( this, types, selector, data, fn );\n\t},\n\tone: function( types, selector, data, fn ) {\n\t\treturn on( this, types, selector, data, fn, 1 );\n\t},\n\toff: function( types, selector, fn ) {\n\t\tvar handleObj, type;\n\t\tif ( types && types.preventDefault && types.handleObj ) {\n\n\t\t\t// ( event )  dispatched jQuery.Event\n\t\t\thandleObj = types.handleObj;\n\t\t\tjQuery( types.delegateTarget ).off(\n\t\t\t\thandleObj.namespace ?\n\t\t\t\t\thandleObj.origType + \".\" + handleObj.namespace :\n\t\t\t\t\thandleObj.origType,\n\t\t\t\thandleObj.selector,\n\t\t\t\thandleObj.handler\n\t\t\t);\n\t\t\treturn this;\n\t\t}\n\t\tif ( typeof types === \"object\" ) {\n\n\t\t\t// ( types-object [, selector] )\n\t\t\tfor ( type in types ) {\n\t\t\t\tthis.off( type, selector, types[ type ] );\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\tif ( selector === false || typeof selector === \"function\" ) {\n\n\t\t\t// ( types [, fn] )\n\t\t\tfn = selector;\n\t\t\tselector = undefined;\n\t\t}\n\t\tif ( fn === false ) {\n\t\t\tfn = returnFalse;\n\t\t}\n\t\treturn this.each( function() {\n\t\t\tjQuery.event.remove( this, types, fn, selector );\n\t\t} );\n\t}\n} );\n\n\nvar\n\trxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\\w:-]+)[^>]*)\\/>/gi,\n\n\t// Support: IE 10-11, Edge 10240+\n\t// In IE/Edge using regex groups here causes severe slowdowns.\n\t// See https://connect.microsoft.com/IE/feedback/details/1736512/\n\trnoInnerhtml = /<script|<style|<link/i,\n\n\t// checked=\"checked\" or checked\n\trchecked = /checked\\s*(?:[^=]|=\\s*.checked.)/i,\n\trscriptTypeMasked = /^true\\/(.*)/,\n\trcleanScript = /^\\s*<!(?:\\[CDATA\\[|--)|(?:\\]\\]|--)>\\s*$/g;\n\n// Manipulating tables requires a tbody\nfunction manipulationTarget( elem, content ) {\n\treturn jQuery.nodeName( elem, \"table\" ) &&\n\t\tjQuery.nodeName( content.nodeType !== 11 ? content : content.firstChild, \"tr\" ) ?\n\n\t\telem.getElementsByTagName( \"tbody\" )[ 0 ] ||\n\t\t\telem.appendChild( elem.ownerDocument.createElement( \"tbody\" ) ) :\n\t\telem;\n}\n\n// Replace/restore the type attribute of script elements for safe DOM manipulation\nfunction disableScript( elem ) {\n\telem.type = ( elem.getAttribute( \"type\" ) !== null ) + \"/\" + elem.type;\n\treturn elem;\n}\nfunction restoreScript( elem ) {\n\tvar match = rscriptTypeMasked.exec( elem.type );\n\n\tif ( match ) {\n\t\telem.type = match[ 1 ];\n\t} else {\n\t\telem.removeAttribute( \"type\" );\n\t}\n\n\treturn elem;\n}\n\nfunction cloneCopyEvent( src, dest ) {\n\tvar i, l, type, pdataOld, pdataCur, udataOld, udataCur, events;\n\n\tif ( dest.nodeType !== 1 ) {\n\t\treturn;\n\t}\n\n\t// 1. Copy private data: events, handlers, etc.\n\tif ( dataPriv.hasData( src ) ) {\n\t\tpdataOld = dataPriv.access( src );\n\t\tpdataCur = dataPriv.set( dest, pdataOld );\n\t\tevents = pdataOld.events;\n\n\t\tif ( events ) {\n\t\t\tdelete pdataCur.handle;\n\t\t\tpdataCur.events = {};\n\n\t\t\tfor ( type in events ) {\n\t\t\t\tfor ( i = 0, l = events[ type ].length; i < l; i++ ) {\n\t\t\t\t\tjQuery.event.add( dest, type, events[ type ][ i ] );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// 2. Copy user data\n\tif ( dataUser.hasData( src ) ) {\n\t\tudataOld = dataUser.access( src );\n\t\tudataCur = jQuery.extend( {}, udataOld );\n\n\t\tdataUser.set( dest, udataCur );\n\t}\n}\n\n// Fix IE bugs, see support tests\nfunction fixInput( src, dest ) {\n\tvar nodeName = dest.nodeName.toLowerCase();\n\n\t// Fails to persist the checked state of a cloned checkbox or radio button.\n\tif ( nodeName === \"input\" && rcheckableType.test( src.type ) ) {\n\t\tdest.checked = src.checked;\n\n\t// Fails to return the selected option to the default selected state when cloning options\n\t} else if ( nodeName === \"input\" || nodeName === \"textarea\" ) {\n\t\tdest.defaultValue = src.defaultValue;\n\t}\n}\n\nfunction domManip( collection, args, callback, ignored ) {\n\n\t// Flatten any nested arrays\n\targs = concat.apply( [], args );\n\n\tvar fragment, first, scripts, hasScripts, node, doc,\n\t\ti = 0,\n\t\tl = collection.length,\n\t\tiNoClone = l - 1,\n\t\tvalue = args[ 0 ],\n\t\tisFunction = jQuery.isFunction( value );\n\n\t// We can't cloneNode fragments that contain checked, in WebKit\n\tif ( isFunction ||\n\t\t\t( l > 1 && typeof value === \"string\" &&\n\t\t\t\t!support.checkClone && rchecked.test( value ) ) ) {\n\t\treturn collection.each( function( index ) {\n\t\t\tvar self = collection.eq( index );\n\t\t\tif ( isFunction ) {\n\t\t\t\targs[ 0 ] = value.call( this, index, self.html() );\n\t\t\t}\n\t\t\tdomManip( self, args, callback, ignored );\n\t\t} );\n\t}\n\n\tif ( l ) {\n\t\tfragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored );\n\t\tfirst = fragment.firstChild;\n\n\t\tif ( fragment.childNodes.length === 1 ) {\n\t\t\tfragment = first;\n\t\t}\n\n\t\t// Require either new content or an interest in ignored elements to invoke the callback\n\t\tif ( first || ignored ) {\n\t\t\tscripts = jQuery.map( getAll( fragment, \"script\" ), disableScript );\n\t\t\thasScripts = scripts.length;\n\n\t\t\t// Use the original fragment for the last item\n\t\t\t// instead of the first because it can end up\n\t\t\t// being emptied incorrectly in certain situations (#8070).\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tnode = fragment;\n\n\t\t\t\tif ( i !== iNoClone ) {\n\t\t\t\t\tnode = jQuery.clone( node, true, true );\n\n\t\t\t\t\t// Keep references to cloned scripts for later restoration\n\t\t\t\t\tif ( hasScripts ) {\n\n\t\t\t\t\t\t// Support: Android<4.1, PhantomJS<2\n\t\t\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\t\t\tjQuery.merge( scripts, getAll( node, \"script\" ) );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tcallback.call( collection[ i ], node, i );\n\t\t\t}\n\n\t\t\tif ( hasScripts ) {\n\t\t\t\tdoc = scripts[ scripts.length - 1 ].ownerDocument;\n\n\t\t\t\t// Reenable scripts\n\t\t\t\tjQuery.map( scripts, restoreScript );\n\n\t\t\t\t// Evaluate executable scripts on first document insertion\n\t\t\t\tfor ( i = 0; i < hasScripts; i++ ) {\n\t\t\t\t\tnode = scripts[ i ];\n\t\t\t\t\tif ( rscriptType.test( node.type || \"\" ) &&\n\t\t\t\t\t\t!dataPriv.access( node, \"globalEval\" ) &&\n\t\t\t\t\t\tjQuery.contains( doc, node ) ) {\n\n\t\t\t\t\t\tif ( node.src ) {\n\n\t\t\t\t\t\t\t// Optional AJAX dependency, but won't run scripts if not present\n\t\t\t\t\t\t\tif ( jQuery._evalUrl ) {\n\t\t\t\t\t\t\t\tjQuery._evalUrl( node.src );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tjQuery.globalEval( node.textContent.replace( rcleanScript, \"\" ) );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn collection;\n}\n\nfunction remove( elem, selector, keepData ) {\n\tvar node,\n\t\tnodes = selector ? jQuery.filter( selector, elem ) : elem,\n\t\ti = 0;\n\n\tfor ( ; ( node = nodes[ i ] ) != null; i++ ) {\n\t\tif ( !keepData && node.nodeType === 1 ) {\n\t\t\tjQuery.cleanData( getAll( node ) );\n\t\t}\n\n\t\tif ( node.parentNode ) {\n\t\t\tif ( keepData && jQuery.contains( node.ownerDocument, node ) ) {\n\t\t\t\tsetGlobalEval( getAll( node, \"script\" ) );\n\t\t\t}\n\t\t\tnode.parentNode.removeChild( node );\n\t\t}\n\t}\n\n\treturn elem;\n}\n\njQuery.extend( {\n\thtmlPrefilter: function( html ) {\n\t\treturn html.replace( rxhtmlTag, \"<$1></$2>\" );\n\t},\n\n\tclone: function( elem, dataAndEvents, deepDataAndEvents ) {\n\t\tvar i, l, srcElements, destElements,\n\t\t\tclone = elem.cloneNode( true ),\n\t\t\tinPage = jQuery.contains( elem.ownerDocument, elem );\n\n\t\t// Fix IE cloning issues\n\t\tif ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) &&\n\t\t\t\t!jQuery.isXMLDoc( elem ) ) {\n\n\t\t\t// We eschew Sizzle here for performance reasons: http://jsperf.com/getall-vs-sizzle/2\n\t\t\tdestElements = getAll( clone );\n\t\t\tsrcElements = getAll( elem );\n\n\t\t\tfor ( i = 0, l = srcElements.length; i < l; i++ ) {\n\t\t\t\tfixInput( srcElements[ i ], destElements[ i ] );\n\t\t\t}\n\t\t}\n\n\t\t// Copy the events from the original to the clone\n\t\tif ( dataAndEvents ) {\n\t\t\tif ( deepDataAndEvents ) {\n\t\t\t\tsrcElements = srcElements || getAll( elem );\n\t\t\t\tdestElements = destElements || getAll( clone );\n\n\t\t\t\tfor ( i = 0, l = srcElements.length; i < l; i++ ) {\n\t\t\t\t\tcloneCopyEvent( srcElements[ i ], destElements[ i ] );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tcloneCopyEvent( elem, clone );\n\t\t\t}\n\t\t}\n\n\t\t// Preserve script evaluation history\n\t\tdestElements = getAll( clone, \"script\" );\n\t\tif ( destElements.length > 0 ) {\n\t\t\tsetGlobalEval( destElements, !inPage && getAll( elem, \"script\" ) );\n\t\t}\n\n\t\t// Return the cloned set\n\t\treturn clone;\n\t},\n\n\tcleanData: function( elems ) {\n\t\tvar data, elem, type,\n\t\t\tspecial = jQuery.event.special,\n\t\t\ti = 0;\n\n\t\tfor ( ; ( elem = elems[ i ] ) !== undefined; i++ ) {\n\t\t\tif ( acceptData( elem ) ) {\n\t\t\t\tif ( ( data = elem[ dataPriv.expando ] ) ) {\n\t\t\t\t\tif ( data.events ) {\n\t\t\t\t\t\tfor ( type in data.events ) {\n\t\t\t\t\t\t\tif ( special[ type ] ) {\n\t\t\t\t\t\t\t\tjQuery.event.remove( elem, type );\n\n\t\t\t\t\t\t\t// This is a shortcut to avoid jQuery.event.remove's overhead\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tjQuery.removeEvent( elem, type, data.handle );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Support: Chrome <= 35-45+\n\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\telem[ dataPriv.expando ] = undefined;\n\t\t\t\t}\n\t\t\t\tif ( elem[ dataUser.expando ] ) {\n\n\t\t\t\t\t// Support: Chrome <= 35-45+\n\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\telem[ dataUser.expando ] = undefined;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n} );\n\njQuery.fn.extend( {\n\n\t// Keep domManip exposed until 3.0 (gh-2225)\n\tdomManip: domManip,\n\n\tdetach: function( selector ) {\n\t\treturn remove( this, selector, true );\n\t},\n\n\tremove: function( selector ) {\n\t\treturn remove( this, selector );\n\t},\n\n\ttext: function( value ) {\n\t\treturn access( this, function( value ) {\n\t\t\treturn value === undefined ?\n\t\t\t\tjQuery.text( this ) :\n\t\t\t\tthis.empty().each( function() {\n\t\t\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\t\t\tthis.textContent = value;\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t}, null, value, arguments.length );\n\t},\n\n\tappend: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\tvar target = manipulationTarget( this, elem );\n\t\t\t\ttarget.appendChild( elem );\n\t\t\t}\n\t\t} );\n\t},\n\n\tprepend: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\tvar target = manipulationTarget( this, elem );\n\t\t\t\ttarget.insertBefore( elem, target.firstChild );\n\t\t\t}\n\t\t} );\n\t},\n\n\tbefore: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.parentNode ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this );\n\t\t\t}\n\t\t} );\n\t},\n\n\tafter: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.parentNode ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this.nextSibling );\n\t\t\t}\n\t\t} );\n\t},\n\n\tempty: function() {\n\t\tvar elem,\n\t\t\ti = 0;\n\n\t\tfor ( ; ( elem = this[ i ] ) != null; i++ ) {\n\t\t\tif ( elem.nodeType === 1 ) {\n\n\t\t\t\t// Prevent memory leaks\n\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\n\t\t\t\t// Remove any remaining nodes\n\t\t\t\telem.textContent = \"\";\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tclone: function( dataAndEvents, deepDataAndEvents ) {\n\t\tdataAndEvents = dataAndEvents == null ? false : dataAndEvents;\n\t\tdeepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;\n\n\t\treturn this.map( function() {\n\t\t\treturn jQuery.clone( this, dataAndEvents, deepDataAndEvents );\n\t\t} );\n\t},\n\n\thtml: function( value ) {\n\t\treturn access( this, function( value ) {\n\t\t\tvar elem = this[ 0 ] || {},\n\t\t\t\ti = 0,\n\t\t\t\tl = this.length;\n\n\t\t\tif ( value === undefined && elem.nodeType === 1 ) {\n\t\t\t\treturn elem.innerHTML;\n\t\t\t}\n\n\t\t\t// See if we can take a shortcut and just use innerHTML\n\t\t\tif ( typeof value === \"string\" && !rnoInnerhtml.test( value ) &&\n\t\t\t\t!wrapMap[ ( rtagName.exec( value ) || [ \"\", \"\" ] )[ 1 ].toLowerCase() ] ) {\n\n\t\t\t\tvalue = jQuery.htmlPrefilter( value );\n\n\t\t\t\ttry {\n\t\t\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\t\t\telem = this[ i ] || {};\n\n\t\t\t\t\t\t// Remove element nodes and prevent memory leaks\n\t\t\t\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\t\t\t\t\t\t\telem.innerHTML = value;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\telem = 0;\n\n\t\t\t\t// If using innerHTML throws an exception, use the fallback method\n\t\t\t\t} catch ( e ) {}\n\t\t\t}\n\n\t\t\tif ( elem ) {\n\t\t\t\tthis.empty().append( value );\n\t\t\t}\n\t\t}, null, value, arguments.length );\n\t},\n\n\treplaceWith: function() {\n\t\tvar ignored = [];\n\n\t\t// Make the changes, replacing each non-ignored context element with the new content\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tvar parent = this.parentNode;\n\n\t\t\tif ( jQuery.inArray( this, ignored ) < 0 ) {\n\t\t\t\tjQuery.cleanData( getAll( this ) );\n\t\t\t\tif ( parent ) {\n\t\t\t\t\tparent.replaceChild( elem, this );\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Force callback invocation\n\t\t}, ignored );\n\t}\n} );\n\njQuery.each( {\n\tappendTo: \"append\",\n\tprependTo: \"prepend\",\n\tinsertBefore: \"before\",\n\tinsertAfter: \"after\",\n\treplaceAll: \"replaceWith\"\n}, function( name, original ) {\n\tjQuery.fn[ name ] = function( selector ) {\n\t\tvar elems,\n\t\t\tret = [],\n\t\t\tinsert = jQuery( selector ),\n\t\t\tlast = insert.length - 1,\n\t\t\ti = 0;\n\n\t\tfor ( ; i <= last; i++ ) {\n\t\t\telems = i === last ? this : this.clone( true );\n\t\t\tjQuery( insert[ i ] )[ original ]( elems );\n\n\t\t\t// Support: QtWebKit\n\t\t\t// .get() because push.apply(_, arraylike) throws\n\t\t\tpush.apply( ret, elems.get() );\n\t\t}\n\n\t\treturn this.pushStack( ret );\n\t};\n} );\n\n\nvar iframe,\n\telemdisplay = {\n\n\t\t// Support: Firefox\n\t\t// We have to pre-define these values for FF (#10227)\n\t\tHTML: \"block\",\n\t\tBODY: \"block\"\n\t};\n\n/**\n * Retrieve the actual display of a element\n * @param {String} name nodeName of the element\n * @param {Object} doc Document object\n */\n\n// Called only from within defaultDisplay\nfunction actualDisplay( name, doc ) {\n\tvar elem = jQuery( doc.createElement( name ) ).appendTo( doc.body ),\n\n\t\tdisplay = jQuery.css( elem[ 0 ], \"display\" );\n\n\t// We don't have any data stored on the element,\n\t// so use \"detach\" method as fast way to get rid of the element\n\telem.detach();\n\n\treturn display;\n}\n\n/**\n * Try to determine the default display value of an element\n * @param {String} nodeName\n */\nfunction defaultDisplay( nodeName ) {\n\tvar doc = document,\n\t\tdisplay = elemdisplay[ nodeName ];\n\n\tif ( !display ) {\n\t\tdisplay = actualDisplay( nodeName, doc );\n\n\t\t// If the simple way fails, read from inside an iframe\n\t\tif ( display === \"none\" || !display ) {\n\n\t\t\t// Use the already-created iframe if possible\n\t\t\tiframe = ( iframe || jQuery( \"<iframe frameborder='0' width='0' height='0'/>\" ) )\n\t\t\t\t.appendTo( doc.documentElement );\n\n\t\t\t// Always write a new HTML skeleton so Webkit and Firefox don't choke on reuse\n\t\t\tdoc = iframe[ 0 ].contentDocument;\n\n\t\t\t// Support: IE\n\t\t\tdoc.write();\n\t\t\tdoc.close();\n\n\t\t\tdisplay = actualDisplay( nodeName, doc );\n\t\t\tiframe.detach();\n\t\t}\n\n\t\t// Store the correct default display\n\t\telemdisplay[ nodeName ] = display;\n\t}\n\n\treturn display;\n}\nvar rmargin = ( /^margin/ );\n\nvar rnumnonpx = new RegExp( \"^(\" + pnum + \")(?!px)[a-z%]+$\", \"i\" );\n\nvar getStyles = function( elem ) {\n\n\t\t// Support: IE<=11+, Firefox<=30+ (#15098, #14150)\n\t\t// IE throws on elements created in popups\n\t\t// FF meanwhile throws on frame elements through \"defaultView.getComputedStyle\"\n\t\tvar view = elem.ownerDocument.defaultView;\n\n\t\tif ( !view || !view.opener ) {\n\t\t\tview = window;\n\t\t}\n\n\t\treturn view.getComputedStyle( elem );\n\t};\n\nvar swap = function( elem, options, callback, args ) {\n\tvar ret, name,\n\t\told = {};\n\n\t// Remember the old values, and insert the new ones\n\tfor ( name in options ) {\n\t\told[ name ] = elem.style[ name ];\n\t\telem.style[ name ] = options[ name ];\n\t}\n\n\tret = callback.apply( elem, args || [] );\n\n\t// Revert the old values\n\tfor ( name in options ) {\n\t\telem.style[ name ] = old[ name ];\n\t}\n\n\treturn ret;\n};\n\n\nvar documentElement = document.documentElement;\n\n\n\n( function() {\n\tvar pixelPositionVal, boxSizingReliableVal, pixelMarginRightVal, reliableMarginLeftVal,\n\t\tcontainer = document.createElement( \"div\" ),\n\t\tdiv = document.createElement( \"div\" );\n\n\t// Finish early in limited (non-browser) environments\n\tif ( !div.style ) {\n\t\treturn;\n\t}\n\n\t// Support: IE9-11+\n\t// Style of cloned element affects source element cloned (#8908)\n\tdiv.style.backgroundClip = \"content-box\";\n\tdiv.cloneNode( true ).style.backgroundClip = \"\";\n\tsupport.clearCloneStyle = div.style.backgroundClip === \"content-box\";\n\n\tcontainer.style.cssText = \"border:0;width:8px;height:0;top:0;left:-9999px;\" +\n\t\t\"padding:0;margin-top:1px;position:absolute\";\n\tcontainer.appendChild( div );\n\n\t// Executing both pixelPosition & boxSizingReliable tests require only one layout\n\t// so they're executed at the same time to save the second computation.\n\tfunction computeStyleTests() {\n\t\tdiv.style.cssText =\n\n\t\t\t// Support: Firefox<29, Android 2.3\n\t\t\t// Vendor-prefix box-sizing\n\t\t\t\"-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;\" +\n\t\t\t\"position:relative;display:block;\" +\n\t\t\t\"margin:auto;border:1px;padding:1px;\" +\n\t\t\t\"top:1%;width:50%\";\n\t\tdiv.innerHTML = \"\";\n\t\tdocumentElement.appendChild( container );\n\n\t\tvar divStyle = window.getComputedStyle( div );\n\t\tpixelPositionVal = divStyle.top !== \"1%\";\n\t\treliableMarginLeftVal = divStyle.marginLeft === \"2px\";\n\t\tboxSizingReliableVal = divStyle.width === \"4px\";\n\n\t\t// Support: Android 4.0 - 4.3 only\n\t\t// Some styles come back with percentage values, even though they shouldn't\n\t\tdiv.style.marginRight = \"50%\";\n\t\tpixelMarginRightVal = divStyle.marginRight === \"4px\";\n\n\t\tdocumentElement.removeChild( container );\n\t}\n\n\tjQuery.extend( support, {\n\t\tpixelPosition: function() {\n\n\t\t\t// This test is executed only once but we still do memoizing\n\t\t\t// since we can use the boxSizingReliable pre-computing.\n\t\t\t// No need to check if the test was already performed, though.\n\t\t\tcomputeStyleTests();\n\t\t\treturn pixelPositionVal;\n\t\t},\n\t\tboxSizingReliable: function() {\n\t\t\tif ( boxSizingReliableVal == null ) {\n\t\t\t\tcomputeStyleTests();\n\t\t\t}\n\t\t\treturn boxSizingReliableVal;\n\t\t},\n\t\tpixelMarginRight: function() {\n\n\t\t\t// Support: Android 4.0-4.3\n\t\t\t// We're checking for boxSizingReliableVal here instead of pixelMarginRightVal\n\t\t\t// since that compresses better and they're computed together anyway.\n\t\t\tif ( boxSizingReliableVal == null ) {\n\t\t\t\tcomputeStyleTests();\n\t\t\t}\n\t\t\treturn pixelMarginRightVal;\n\t\t},\n\t\treliableMarginLeft: function() {\n\n\t\t\t// Support: IE <=8 only, Android 4.0 - 4.3 only, Firefox <=3 - 37\n\t\t\tif ( boxSizingReliableVal == null ) {\n\t\t\t\tcomputeStyleTests();\n\t\t\t}\n\t\t\treturn reliableMarginLeftVal;\n\t\t},\n\t\treliableMarginRight: function() {\n\n\t\t\t// Support: Android 2.3\n\t\t\t// Check if div with explicit width and no margin-right incorrectly\n\t\t\t// gets computed margin-right based on width of container. (#3333)\n\t\t\t// WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right\n\t\t\t// This support function is only executed once so no memoizing is needed.\n\t\t\tvar ret,\n\t\t\t\tmarginDiv = div.appendChild( document.createElement( \"div\" ) );\n\n\t\t\t// Reset CSS: box-sizing; display; margin; border; padding\n\t\t\tmarginDiv.style.cssText = div.style.cssText =\n\n\t\t\t\t// Support: Android 2.3\n\t\t\t\t// Vendor-prefix box-sizing\n\t\t\t\t\"-webkit-box-sizing:content-box;box-sizing:content-box;\" +\n\t\t\t\t\"display:block;margin:0;border:0;padding:0\";\n\t\t\tmarginDiv.style.marginRight = marginDiv.style.width = \"0\";\n\t\t\tdiv.style.width = \"1px\";\n\t\t\tdocumentElement.appendChild( container );\n\n\t\t\tret = !parseFloat( window.getComputedStyle( marginDiv ).marginRight );\n\n\t\t\tdocumentElement.removeChild( container );\n\t\t\tdiv.removeChild( marginDiv );\n\n\t\t\treturn ret;\n\t\t}\n\t} );\n} )();\n\n\nfunction curCSS( elem, name, computed ) {\n\tvar width, minWidth, maxWidth, ret,\n\t\tstyle = elem.style;\n\n\tcomputed = computed || getStyles( elem );\n\tret = computed ? computed.getPropertyValue( name ) || computed[ name ] : undefined;\n\n\t// Support: Opera 12.1x only\n\t// Fall back to style even without computed\n\t// computed is undefined for elems on document fragments\n\tif ( ( ret === \"\" || ret === undefined ) && !jQuery.contains( elem.ownerDocument, elem ) ) {\n\t\tret = jQuery.style( elem, name );\n\t}\n\n\t// Support: IE9\n\t// getPropertyValue is only needed for .css('filter') (#12537)\n\tif ( computed ) {\n\n\t\t// A tribute to the \"awesome hack by Dean Edwards\"\n\t\t// Android Browser returns percentage for some values,\n\t\t// but width seems to be reliably pixels.\n\t\t// This is against the CSSOM draft spec:\n\t\t// http://dev.w3.org/csswg/cssom/#resolved-values\n\t\tif ( !support.pixelMarginRight() && rnumnonpx.test( ret ) && rmargin.test( name ) ) {\n\n\t\t\t// Remember the original values\n\t\t\twidth = style.width;\n\t\t\tminWidth = style.minWidth;\n\t\t\tmaxWidth = style.maxWidth;\n\n\t\t\t// Put in the new values to get a computed value out\n\t\t\tstyle.minWidth = style.maxWidth = style.width = ret;\n\t\t\tret = computed.width;\n\n\t\t\t// Revert the changed values\n\t\t\tstyle.width = width;\n\t\t\tstyle.minWidth = minWidth;\n\t\t\tstyle.maxWidth = maxWidth;\n\t\t}\n\t}\n\n\treturn ret !== undefined ?\n\n\t\t// Support: IE9-11+\n\t\t// IE returns zIndex value as an integer.\n\t\tret + \"\" :\n\t\tret;\n}\n\n\nfunction addGetHookIf( conditionFn, hookFn ) {\n\n\t// Define the hook, we'll check on the first run if it's really needed.\n\treturn {\n\t\tget: function() {\n\t\t\tif ( conditionFn() ) {\n\n\t\t\t\t// Hook not needed (or it's not possible to use it due\n\t\t\t\t// to missing dependency), remove it.\n\t\t\t\tdelete this.get;\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Hook needed; redefine it so that the support test is not executed again.\n\t\t\treturn ( this.get = hookFn ).apply( this, arguments );\n\t\t}\n\t};\n}\n\n\nvar\n\n\t// Swappable if display is none or starts with table\n\t// except \"table\", \"table-cell\", or \"table-caption\"\n\t// See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display\n\trdisplayswap = /^(none|table(?!-c[ea]).+)/,\n\n\tcssShow = { position: \"absolute\", visibility: \"hidden\", display: \"block\" },\n\tcssNormalTransform = {\n\t\tletterSpacing: \"0\",\n\t\tfontWeight: \"400\"\n\t},\n\n\tcssPrefixes = [ \"Webkit\", \"O\", \"Moz\", \"ms\" ],\n\temptyStyle = document.createElement( \"div\" ).style;\n\n// Return a css property mapped to a potentially vendor prefixed property\nfunction vendorPropName( name ) {\n\n\t// Shortcut for names that are not vendor prefixed\n\tif ( name in emptyStyle ) {\n\t\treturn name;\n\t}\n\n\t// Check for vendor prefixed names\n\tvar capName = name[ 0 ].toUpperCase() + name.slice( 1 ),\n\t\ti = cssPrefixes.length;\n\n\twhile ( i-- ) {\n\t\tname = cssPrefixes[ i ] + capName;\n\t\tif ( name in emptyStyle ) {\n\t\t\treturn name;\n\t\t}\n\t}\n}\n\nfunction setPositiveNumber( elem, value, subtract ) {\n\n\t// Any relative (+/-) values have already been\n\t// normalized at this point\n\tvar matches = rcssNum.exec( value );\n\treturn matches ?\n\n\t\t// Guard against undefined \"subtract\", e.g., when used as in cssHooks\n\t\tMath.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || \"px\" ) :\n\t\tvalue;\n}\n\nfunction augmentWidthOrHeight( elem, name, extra, isBorderBox, styles ) {\n\tvar i = extra === ( isBorderBox ? \"border\" : \"content\" ) ?\n\n\t\t// If we already have the right measurement, avoid augmentation\n\t\t4 :\n\n\t\t// Otherwise initialize for horizontal or vertical properties\n\t\tname === \"width\" ? 1 : 0,\n\n\t\tval = 0;\n\n\tfor ( ; i < 4; i += 2 ) {\n\n\t\t// Both box models exclude margin, so add it if we want it\n\t\tif ( extra === \"margin\" ) {\n\t\t\tval += jQuery.css( elem, extra + cssExpand[ i ], true, styles );\n\t\t}\n\n\t\tif ( isBorderBox ) {\n\n\t\t\t// border-box includes padding, so remove it if we want content\n\t\t\tif ( extra === \"content\" ) {\n\t\t\t\tval -= jQuery.css( elem, \"padding\" + cssExpand[ i ], true, styles );\n\t\t\t}\n\n\t\t\t// At this point, extra isn't border nor margin, so remove border\n\t\t\tif ( extra !== \"margin\" ) {\n\t\t\t\tval -= jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\t\t\t}\n\t\t} else {\n\n\t\t\t// At this point, extra isn't content, so add padding\n\t\t\tval += jQuery.css( elem, \"padding\" + cssExpand[ i ], true, styles );\n\n\t\t\t// At this point, extra isn't content nor padding, so add border\n\t\t\tif ( extra !== \"padding\" ) {\n\t\t\t\tval += jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\t\t\t}\n\t\t}\n\t}\n\n\treturn val;\n}\n\nfunction getWidthOrHeight( elem, name, extra ) {\n\n\t// Start with offset property, which is equivalent to the border-box value\n\tvar valueIsBorderBox = true,\n\t\tval = name === \"width\" ? elem.offsetWidth : elem.offsetHeight,\n\t\tstyles = getStyles( elem ),\n\t\tisBorderBox = jQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\";\n\n\t// Support: IE11 only\n\t// In IE 11 fullscreen elements inside of an iframe have\n\t// 100x too small dimensions (gh-1764).\n\tif ( document.msFullscreenElement && window.top !== window ) {\n\n\t\t// Support: IE11 only\n\t\t// Running getBoundingClientRect on a disconnected node\n\t\t// in IE throws an error.\n\t\tif ( elem.getClientRects().length ) {\n\t\t\tval = Math.round( elem.getBoundingClientRect()[ name ] * 100 );\n\t\t}\n\t}\n\n\t// Some non-html elements return undefined for offsetWidth, so check for null/undefined\n\t// svg - https://bugzilla.mozilla.org/show_bug.cgi?id=649285\n\t// MathML - https://bugzilla.mozilla.org/show_bug.cgi?id=491668\n\tif ( val <= 0 || val == null ) {\n\n\t\t// Fall back to computed then uncomputed css if necessary\n\t\tval = curCSS( elem, name, styles );\n\t\tif ( val < 0 || val == null ) {\n\t\t\tval = elem.style[ name ];\n\t\t}\n\n\t\t// Computed unit is not pixels. Stop here and return.\n\t\tif ( rnumnonpx.test( val ) ) {\n\t\t\treturn val;\n\t\t}\n\n\t\t// Check for style in case a browser which returns unreliable values\n\t\t// for getComputedStyle silently falls back to the reliable elem.style\n\t\tvalueIsBorderBox = isBorderBox &&\n\t\t\t( support.boxSizingReliable() || val === elem.style[ name ] );\n\n\t\t// Normalize \"\", auto, and prepare for extra\n\t\tval = parseFloat( val ) || 0;\n\t}\n\n\t// Use the active box-sizing model to add/subtract irrelevant styles\n\treturn ( val +\n\t\taugmentWidthOrHeight(\n\t\t\telem,\n\t\t\tname,\n\t\t\textra || ( isBorderBox ? \"border\" : \"content\" ),\n\t\t\tvalueIsBorderBox,\n\t\t\tstyles\n\t\t)\n\t) + \"px\";\n}\n\nfunction showHide( elements, show ) {\n\tvar display, elem, hidden,\n\t\tvalues = [],\n\t\tindex = 0,\n\t\tlength = elements.length;\n\n\tfor ( ; index < length; index++ ) {\n\t\telem = elements[ index ];\n\t\tif ( !elem.style ) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tvalues[ index ] = dataPriv.get( elem, \"olddisplay\" );\n\t\tdisplay = elem.style.display;\n\t\tif ( show ) {\n\n\t\t\t// Reset the inline display of this element to learn if it is\n\t\t\t// being hidden by cascaded rules or not\n\t\t\tif ( !values[ index ] && display === \"none\" ) {\n\t\t\t\telem.style.display = \"\";\n\t\t\t}\n\n\t\t\t// Set elements which have been overridden with display: none\n\t\t\t// in a stylesheet to whatever the default browser style is\n\t\t\t// for such an element\n\t\t\tif ( elem.style.display === \"\" && isHidden( elem ) ) {\n\t\t\t\tvalues[ index ] = dataPriv.access(\n\t\t\t\t\telem,\n\t\t\t\t\t\"olddisplay\",\n\t\t\t\t\tdefaultDisplay( elem.nodeName )\n\t\t\t\t);\n\t\t\t}\n\t\t} else {\n\t\t\thidden = isHidden( elem );\n\n\t\t\tif ( display !== \"none\" || !hidden ) {\n\t\t\t\tdataPriv.set(\n\t\t\t\t\telem,\n\t\t\t\t\t\"olddisplay\",\n\t\t\t\t\thidden ? display : jQuery.css( elem, \"display\" )\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n\n\t// Set the display of most of the elements in a second loop\n\t// to avoid the constant reflow\n\tfor ( index = 0; index < length; index++ ) {\n\t\telem = elements[ index ];\n\t\tif ( !elem.style ) {\n\t\t\tcontinue;\n\t\t}\n\t\tif ( !show || elem.style.display === \"none\" || elem.style.display === \"\" ) {\n\t\t\telem.style.display = show ? values[ index ] || \"\" : \"none\";\n\t\t}\n\t}\n\n\treturn elements;\n}\n\njQuery.extend( {\n\n\t// Add in style property hooks for overriding the default\n\t// behavior of getting and setting a style property\n\tcssHooks: {\n\t\topacity: {\n\t\t\tget: function( elem, computed ) {\n\t\t\t\tif ( computed ) {\n\n\t\t\t\t\t// We should always get a number back from opacity\n\t\t\t\t\tvar ret = curCSS( elem, \"opacity\" );\n\t\t\t\t\treturn ret === \"\" ? \"1\" : ret;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\t// Don't automatically add \"px\" to these possibly-unitless properties\n\tcssNumber: {\n\t\t\"animationIterationCount\": true,\n\t\t\"columnCount\": true,\n\t\t\"fillOpacity\": true,\n\t\t\"flexGrow\": true,\n\t\t\"flexShrink\": true,\n\t\t\"fontWeight\": true,\n\t\t\"lineHeight\": true,\n\t\t\"opacity\": true,\n\t\t\"order\": true,\n\t\t\"orphans\": true,\n\t\t\"widows\": true,\n\t\t\"zIndex\": true,\n\t\t\"zoom\": true\n\t},\n\n\t// Add in properties whose names you wish to fix before\n\t// setting or getting the value\n\tcssProps: {\n\t\t\"float\": \"cssFloat\"\n\t},\n\n\t// Get and set the style property on a DOM Node\n\tstyle: function( elem, name, value, extra ) {\n\n\t\t// Don't set styles on text and comment nodes\n\t\tif ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Make sure that we're working with the right name\n\t\tvar ret, type, hooks,\n\t\t\torigName = jQuery.camelCase( name ),\n\t\t\tstyle = elem.style;\n\n\t\tname = jQuery.cssProps[ origName ] ||\n\t\t\t( jQuery.cssProps[ origName ] = vendorPropName( origName ) || origName );\n\n\t\t// Gets hook for the prefixed version, then unprefixed version\n\t\thooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\n\n\t\t// Check if we're setting a value\n\t\tif ( value !== undefined ) {\n\t\t\ttype = typeof value;\n\n\t\t\t// Convert \"+=\" or \"-=\" to relative numbers (#7345)\n\t\t\tif ( type === \"string\" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) {\n\t\t\t\tvalue = adjustCSS( elem, name, ret );\n\n\t\t\t\t// Fixes bug #9237\n\t\t\t\ttype = \"number\";\n\t\t\t}\n\n\t\t\t// Make sure that null and NaN values aren't set (#7116)\n\t\t\tif ( value == null || value !== value ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// If a number was passed in, add the unit (except for certain CSS properties)\n\t\t\tif ( type === \"number\" ) {\n\t\t\t\tvalue += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? \"\" : \"px\" );\n\t\t\t}\n\n\t\t\t// Support: IE9-11+\n\t\t\t// background-* props affect original clone's values\n\t\t\tif ( !support.clearCloneStyle && value === \"\" && name.indexOf( \"background\" ) === 0 ) {\n\t\t\t\tstyle[ name ] = \"inherit\";\n\t\t\t}\n\n\t\t\t// If a hook was provided, use that value, otherwise just set the specified value\n\t\t\tif ( !hooks || !( \"set\" in hooks ) ||\n\t\t\t\t( value = hooks.set( elem, value, extra ) ) !== undefined ) {\n\n\t\t\t\tstyle[ name ] = value;\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t// If a hook was provided get the non-computed value from there\n\t\t\tif ( hooks && \"get\" in hooks &&\n\t\t\t\t( ret = hooks.get( elem, false, extra ) ) !== undefined ) {\n\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\t// Otherwise just get the value from the style object\n\t\t\treturn style[ name ];\n\t\t}\n\t},\n\n\tcss: function( elem, name, extra, styles ) {\n\t\tvar val, num, hooks,\n\t\t\torigName = jQuery.camelCase( name );\n\n\t\t// Make sure that we're working with the right name\n\t\tname = jQuery.cssProps[ origName ] ||\n\t\t\t( jQuery.cssProps[ origName ] = vendorPropName( origName ) || origName );\n\n\t\t// Try prefixed name followed by the unprefixed name\n\t\thooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\n\n\t\t// If a hook was provided get the computed value from there\n\t\tif ( hooks && \"get\" in hooks ) {\n\t\t\tval = hooks.get( elem, true, extra );\n\t\t}\n\n\t\t// Otherwise, if a way to get the computed value exists, use that\n\t\tif ( val === undefined ) {\n\t\t\tval = curCSS( elem, name, styles );\n\t\t}\n\n\t\t// Convert \"normal\" to computed value\n\t\tif ( val === \"normal\" && name in cssNormalTransform ) {\n\t\t\tval = cssNormalTransform[ name ];\n\t\t}\n\n\t\t// Make numeric if forced or a qualifier was provided and val looks numeric\n\t\tif ( extra === \"\" || extra ) {\n\t\t\tnum = parseFloat( val );\n\t\t\treturn extra === true || isFinite( num ) ? num || 0 : val;\n\t\t}\n\t\treturn val;\n\t}\n} );\n\njQuery.each( [ \"height\", \"width\" ], function( i, name ) {\n\tjQuery.cssHooks[ name ] = {\n\t\tget: function( elem, computed, extra ) {\n\t\t\tif ( computed ) {\n\n\t\t\t\t// Certain elements can have dimension info if we invisibly show them\n\t\t\t\t// but it must have a current display style that would benefit\n\t\t\t\treturn rdisplayswap.test( jQuery.css( elem, \"display\" ) ) &&\n\t\t\t\t\telem.offsetWidth === 0 ?\n\t\t\t\t\t\tswap( elem, cssShow, function() {\n\t\t\t\t\t\t\treturn getWidthOrHeight( elem, name, extra );\n\t\t\t\t\t\t} ) :\n\t\t\t\t\t\tgetWidthOrHeight( elem, name, extra );\n\t\t\t}\n\t\t},\n\n\t\tset: function( elem, value, extra ) {\n\t\t\tvar matches,\n\t\t\t\tstyles = extra && getStyles( elem ),\n\t\t\t\tsubtract = extra && augmentWidthOrHeight(\n\t\t\t\t\telem,\n\t\t\t\t\tname,\n\t\t\t\t\textra,\n\t\t\t\t\tjQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\",\n\t\t\t\t\tstyles\n\t\t\t\t);\n\n\t\t\t// Convert to pixels if value adjustment is needed\n\t\t\tif ( subtract && ( matches = rcssNum.exec( value ) ) &&\n\t\t\t\t( matches[ 3 ] || \"px\" ) !== \"px\" ) {\n\n\t\t\t\telem.style[ name ] = value;\n\t\t\t\tvalue = jQuery.css( elem, name );\n\t\t\t}\n\n\t\t\treturn setPositiveNumber( elem, value, subtract );\n\t\t}\n\t};\n} );\n\njQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft,\n\tfunction( elem, computed ) {\n\t\tif ( computed ) {\n\t\t\treturn ( parseFloat( curCSS( elem, \"marginLeft\" ) ) ||\n\t\t\t\telem.getBoundingClientRect().left -\n\t\t\t\t\tswap( elem, { marginLeft: 0 }, function() {\n\t\t\t\t\t\treturn elem.getBoundingClientRect().left;\n\t\t\t\t\t} )\n\t\t\t\t) + \"px\";\n\t\t}\n\t}\n);\n\n// Support: Android 2.3\njQuery.cssHooks.marginRight = addGetHookIf( support.reliableMarginRight,\n\tfunction( elem, computed ) {\n\t\tif ( computed ) {\n\t\t\treturn swap( elem, { \"display\": \"inline-block\" },\n\t\t\t\tcurCSS, [ elem, \"marginRight\" ] );\n\t\t}\n\t}\n);\n\n// These hooks are used by animate to expand properties\njQuery.each( {\n\tmargin: \"\",\n\tpadding: \"\",\n\tborder: \"Width\"\n}, function( prefix, suffix ) {\n\tjQuery.cssHooks[ prefix + suffix ] = {\n\t\texpand: function( value ) {\n\t\t\tvar i = 0,\n\t\t\t\texpanded = {},\n\n\t\t\t\t// Assumes a single number if not a string\n\t\t\t\tparts = typeof value === \"string\" ? value.split( \" \" ) : [ value ];\n\n\t\t\tfor ( ; i < 4; i++ ) {\n\t\t\t\texpanded[ prefix + cssExpand[ i ] + suffix ] =\n\t\t\t\t\tparts[ i ] || parts[ i - 2 ] || parts[ 0 ];\n\t\t\t}\n\n\t\t\treturn expanded;\n\t\t}\n\t};\n\n\tif ( !rmargin.test( prefix ) ) {\n\t\tjQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber;\n\t}\n} );\n\njQuery.fn.extend( {\n\tcss: function( name, value ) {\n\t\treturn access( this, function( elem, name, value ) {\n\t\t\tvar styles, len,\n\t\t\t\tmap = {},\n\t\t\t\ti = 0;\n\n\t\t\tif ( jQuery.isArray( name ) ) {\n\t\t\t\tstyles = getStyles( elem );\n\t\t\t\tlen = name.length;\n\n\t\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\t\tmap[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles );\n\t\t\t\t}\n\n\t\t\t\treturn map;\n\t\t\t}\n\n\t\t\treturn value !== undefined ?\n\t\t\t\tjQuery.style( elem, name, value ) :\n\t\t\t\tjQuery.css( elem, name );\n\t\t}, name, value, arguments.length > 1 );\n\t},\n\tshow: function() {\n\t\treturn showHide( this, true );\n\t},\n\thide: function() {\n\t\treturn showHide( this );\n\t},\n\ttoggle: function( state ) {\n\t\tif ( typeof state === \"boolean\" ) {\n\t\t\treturn state ? this.show() : this.hide();\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tif ( isHidden( this ) ) {\n\t\t\t\tjQuery( this ).show();\n\t\t\t} else {\n\t\t\t\tjQuery( this ).hide();\n\t\t\t}\n\t\t} );\n\t}\n} );\n\n\nfunction Tween( elem, options, prop, end, easing ) {\n\treturn new Tween.prototype.init( elem, options, prop, end, easing );\n}\njQuery.Tween = Tween;\n\nTween.prototype = {\n\tconstructor: Tween,\n\tinit: function( elem, options, prop, end, easing, unit ) {\n\t\tthis.elem = elem;\n\t\tthis.prop = prop;\n\t\tthis.easing = easing || jQuery.easing._default;\n\t\tthis.options = options;\n\t\tthis.start = this.now = this.cur();\n\t\tthis.end = end;\n\t\tthis.unit = unit || ( jQuery.cssNumber[ prop ] ? \"\" : \"px\" );\n\t},\n\tcur: function() {\n\t\tvar hooks = Tween.propHooks[ this.prop ];\n\n\t\treturn hooks && hooks.get ?\n\t\t\thooks.get( this ) :\n\t\t\tTween.propHooks._default.get( this );\n\t},\n\trun: function( percent ) {\n\t\tvar eased,\n\t\t\thooks = Tween.propHooks[ this.prop ];\n\n\t\tif ( this.options.duration ) {\n\t\t\tthis.pos = eased = jQuery.easing[ this.easing ](\n\t\t\t\tpercent, this.options.duration * percent, 0, 1, this.options.duration\n\t\t\t);\n\t\t} else {\n\t\t\tthis.pos = eased = percent;\n\t\t}\n\t\tthis.now = ( this.end - this.start ) * eased + this.start;\n\n\t\tif ( this.options.step ) {\n\t\t\tthis.options.step.call( this.elem, this.now, this );\n\t\t}\n\n\t\tif ( hooks && hooks.set ) {\n\t\t\thooks.set( this );\n\t\t} else {\n\t\t\tTween.propHooks._default.set( this );\n\t\t}\n\t\treturn this;\n\t}\n};\n\nTween.prototype.init.prototype = Tween.prototype;\n\nTween.propHooks = {\n\t_default: {\n\t\tget: function( tween ) {\n\t\t\tvar result;\n\n\t\t\t// Use a property on the element directly when it is not a DOM element,\n\t\t\t// or when there is no matching style property that exists.\n\t\t\tif ( tween.elem.nodeType !== 1 ||\n\t\t\t\ttween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) {\n\t\t\t\treturn tween.elem[ tween.prop ];\n\t\t\t}\n\n\t\t\t// Passing an empty string as a 3rd parameter to .css will automatically\n\t\t\t// attempt a parseFloat and fallback to a string if the parse fails.\n\t\t\t// Simple values such as \"10px\" are parsed to Float;\n\t\t\t// complex values such as \"rotate(1rad)\" are returned as-is.\n\t\t\tresult = jQuery.css( tween.elem, tween.prop, \"\" );\n\n\t\t\t// Empty strings, null, undefined and \"auto\" are converted to 0.\n\t\t\treturn !result || result === \"auto\" ? 0 : result;\n\t\t},\n\t\tset: function( tween ) {\n\n\t\t\t// Use step hook for back compat.\n\t\t\t// Use cssHook if its there.\n\t\t\t// Use .style if available and use plain properties where available.\n\t\t\tif ( jQuery.fx.step[ tween.prop ] ) {\n\t\t\t\tjQuery.fx.step[ tween.prop ]( tween );\n\t\t\t} else if ( tween.elem.nodeType === 1 &&\n\t\t\t\t( tween.elem.style[ jQuery.cssProps[ tween.prop ] ] != null ||\n\t\t\t\t\tjQuery.cssHooks[ tween.prop ] ) ) {\n\t\t\t\tjQuery.style( tween.elem, tween.prop, tween.now + tween.unit );\n\t\t\t} else {\n\t\t\t\ttween.elem[ tween.prop ] = tween.now;\n\t\t\t}\n\t\t}\n\t}\n};\n\n// Support: IE9\n// Panic based approach to setting things on disconnected nodes\nTween.propHooks.scrollTop = Tween.propHooks.scrollLeft = {\n\tset: function( tween ) {\n\t\tif ( tween.elem.nodeType && tween.elem.parentNode ) {\n\t\t\ttween.elem[ tween.prop ] = tween.now;\n\t\t}\n\t}\n};\n\njQuery.easing = {\n\tlinear: function( p ) {\n\t\treturn p;\n\t},\n\tswing: function( p ) {\n\t\treturn 0.5 - Math.cos( p * Math.PI ) / 2;\n\t},\n\t_default: \"swing\"\n};\n\njQuery.fx = Tween.prototype.init;\n\n// Back Compat <1.8 extension point\njQuery.fx.step = {};\n\n\n\n\nvar\n\tfxNow, timerId,\n\trfxtypes = /^(?:toggle|show|hide)$/,\n\trrun = /queueHooks$/;\n\n// Animations created synchronously will run synchronously\nfunction createFxNow() {\n\twindow.setTimeout( function() {\n\t\tfxNow = undefined;\n\t} );\n\treturn ( fxNow = jQuery.now() );\n}\n\n// Generate parameters to create a standard animation\nfunction genFx( type, includeWidth ) {\n\tvar which,\n\t\ti = 0,\n\t\tattrs = { height: type };\n\n\t// If we include width, step value is 1 to do all cssExpand values,\n\t// otherwise step value is 2 to skip over Left and Right\n\tincludeWidth = includeWidth ? 1 : 0;\n\tfor ( ; i < 4 ; i += 2 - includeWidth ) {\n\t\twhich = cssExpand[ i ];\n\t\tattrs[ \"margin\" + which ] = attrs[ \"padding\" + which ] = type;\n\t}\n\n\tif ( includeWidth ) {\n\t\tattrs.opacity = attrs.width = type;\n\t}\n\n\treturn attrs;\n}\n\nfunction createTween( value, prop, animation ) {\n\tvar tween,\n\t\tcollection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ \"*\" ] ),\n\t\tindex = 0,\n\t\tlength = collection.length;\n\tfor ( ; index < length; index++ ) {\n\t\tif ( ( tween = collection[ index ].call( animation, prop, value ) ) ) {\n\n\t\t\t// We're done with this property\n\t\t\treturn tween;\n\t\t}\n\t}\n}\n\nfunction defaultPrefilter( elem, props, opts ) {\n\t/* jshint validthis: true */\n\tvar prop, value, toggle, tween, hooks, oldfire, display, checkDisplay,\n\t\tanim = this,\n\t\torig = {},\n\t\tstyle = elem.style,\n\t\thidden = elem.nodeType && isHidden( elem ),\n\t\tdataShow = dataPriv.get( elem, \"fxshow\" );\n\n\t// Handle queue: false promises\n\tif ( !opts.queue ) {\n\t\thooks = jQuery._queueHooks( elem, \"fx\" );\n\t\tif ( hooks.unqueued == null ) {\n\t\t\thooks.unqueued = 0;\n\t\t\toldfire = hooks.empty.fire;\n\t\t\thooks.empty.fire = function() {\n\t\t\t\tif ( !hooks.unqueued ) {\n\t\t\t\t\toldfire();\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t\thooks.unqueued++;\n\n\t\tanim.always( function() {\n\n\t\t\t// Ensure the complete handler is called before this completes\n\t\t\tanim.always( function() {\n\t\t\t\thooks.unqueued--;\n\t\t\t\tif ( !jQuery.queue( elem, \"fx\" ).length ) {\n\t\t\t\t\thooks.empty.fire();\n\t\t\t\t}\n\t\t\t} );\n\t\t} );\n\t}\n\n\t// Height/width overflow pass\n\tif ( elem.nodeType === 1 && ( \"height\" in props || \"width\" in props ) ) {\n\n\t\t// Make sure that nothing sneaks out\n\t\t// Record all 3 overflow attributes because IE9-10 do not\n\t\t// change the overflow attribute when overflowX and\n\t\t// overflowY are set to the same value\n\t\topts.overflow = [ style.overflow, style.overflowX, style.overflowY ];\n\n\t\t// Set display property to inline-block for height/width\n\t\t// animations on inline elements that are having width/height animated\n\t\tdisplay = jQuery.css( elem, \"display\" );\n\n\t\t// Test default display if display is currently \"none\"\n\t\tcheckDisplay = display === \"none\" ?\n\t\t\tdataPriv.get( elem, \"olddisplay\" ) || defaultDisplay( elem.nodeName ) : display;\n\n\t\tif ( checkDisplay === \"inline\" && jQuery.css( elem, \"float\" ) === \"none\" ) {\n\t\t\tstyle.display = \"inline-block\";\n\t\t}\n\t}\n\n\tif ( opts.overflow ) {\n\t\tstyle.overflow = \"hidden\";\n\t\tanim.always( function() {\n\t\t\tstyle.overflow = opts.overflow[ 0 ];\n\t\t\tstyle.overflowX = opts.overflow[ 1 ];\n\t\t\tstyle.overflowY = opts.overflow[ 2 ];\n\t\t} );\n\t}\n\n\t// show/hide pass\n\tfor ( prop in props ) {\n\t\tvalue = props[ prop ];\n\t\tif ( rfxtypes.exec( value ) ) {\n\t\t\tdelete props[ prop ];\n\t\t\ttoggle = toggle || value === \"toggle\";\n\t\t\tif ( value === ( hidden ? \"hide\" : \"show\" ) ) {\n\n\t\t\t\t// If there is dataShow left over from a stopped hide or show\n\t\t\t\t// and we are going to proceed with show, we should pretend to be hidden\n\t\t\t\tif ( value === \"show\" && dataShow && dataShow[ prop ] !== undefined ) {\n\t\t\t\t\thidden = true;\n\t\t\t\t} else {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t}\n\t\t\torig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop );\n\n\t\t// Any non-fx value stops us from restoring the original display value\n\t\t} else {\n\t\t\tdisplay = undefined;\n\t\t}\n\t}\n\n\tif ( !jQuery.isEmptyObject( orig ) ) {\n\t\tif ( dataShow ) {\n\t\t\tif ( \"hidden\" in dataShow ) {\n\t\t\t\thidden = dataShow.hidden;\n\t\t\t}\n\t\t} else {\n\t\t\tdataShow = dataPriv.access( elem, \"fxshow\", {} );\n\t\t}\n\n\t\t// Store state if its toggle - enables .stop().toggle() to \"reverse\"\n\t\tif ( toggle ) {\n\t\t\tdataShow.hidden = !hidden;\n\t\t}\n\t\tif ( hidden ) {\n\t\t\tjQuery( elem ).show();\n\t\t} else {\n\t\t\tanim.done( function() {\n\t\t\t\tjQuery( elem ).hide();\n\t\t\t} );\n\t\t}\n\t\tanim.done( function() {\n\t\t\tvar prop;\n\n\t\t\tdataPriv.remove( elem, \"fxshow\" );\n\t\t\tfor ( prop in orig ) {\n\t\t\t\tjQuery.style( elem, prop, orig[ prop ] );\n\t\t\t}\n\t\t} );\n\t\tfor ( prop in orig ) {\n\t\t\ttween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim );\n\n\t\t\tif ( !( prop in dataShow ) ) {\n\t\t\t\tdataShow[ prop ] = tween.start;\n\t\t\t\tif ( hidden ) {\n\t\t\t\t\ttween.end = tween.start;\n\t\t\t\t\ttween.start = prop === \"width\" || prop === \"height\" ? 1 : 0;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t// If this is a noop like .hide().hide(), restore an overwritten display value\n\t} else if ( ( display === \"none\" ? defaultDisplay( elem.nodeName ) : display ) === \"inline\" ) {\n\t\tstyle.display = display;\n\t}\n}\n\nfunction propFilter( props, specialEasing ) {\n\tvar index, name, easing, value, hooks;\n\n\t// camelCase, specialEasing and expand cssHook pass\n\tfor ( index in props ) {\n\t\tname = jQuery.camelCase( index );\n\t\teasing = specialEasing[ name ];\n\t\tvalue = props[ index ];\n\t\tif ( jQuery.isArray( value ) ) {\n\t\t\teasing = value[ 1 ];\n\t\t\tvalue = props[ index ] = value[ 0 ];\n\t\t}\n\n\t\tif ( index !== name ) {\n\t\t\tprops[ name ] = value;\n\t\t\tdelete props[ index ];\n\t\t}\n\n\t\thooks = jQuery.cssHooks[ name ];\n\t\tif ( hooks && \"expand\" in hooks ) {\n\t\t\tvalue = hooks.expand( value );\n\t\t\tdelete props[ name ];\n\n\t\t\t// Not quite $.extend, this won't overwrite existing keys.\n\t\t\t// Reusing 'index' because we have the correct \"name\"\n\t\t\tfor ( index in value ) {\n\t\t\t\tif ( !( index in props ) ) {\n\t\t\t\t\tprops[ index ] = value[ index ];\n\t\t\t\t\tspecialEasing[ index ] = easing;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tspecialEasing[ name ] = easing;\n\t\t}\n\t}\n}\n\nfunction Animation( elem, properties, options ) {\n\tvar result,\n\t\tstopped,\n\t\tindex = 0,\n\t\tlength = Animation.prefilters.length,\n\t\tdeferred = jQuery.Deferred().always( function() {\n\n\t\t\t// Don't match elem in the :animated selector\n\t\t\tdelete tick.elem;\n\t\t} ),\n\t\ttick = function() {\n\t\t\tif ( stopped ) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tvar currentTime = fxNow || createFxNow(),\n\t\t\t\tremaining = Math.max( 0, animation.startTime + animation.duration - currentTime ),\n\n\t\t\t\t// Support: Android 2.3\n\t\t\t\t// Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (#12497)\n\t\t\t\ttemp = remaining / animation.duration || 0,\n\t\t\t\tpercent = 1 - temp,\n\t\t\t\tindex = 0,\n\t\t\t\tlength = animation.tweens.length;\n\n\t\t\tfor ( ; index < length ; index++ ) {\n\t\t\t\tanimation.tweens[ index ].run( percent );\n\t\t\t}\n\n\t\t\tdeferred.notifyWith( elem, [ animation, percent, remaining ] );\n\n\t\t\tif ( percent < 1 && length ) {\n\t\t\t\treturn remaining;\n\t\t\t} else {\n\t\t\t\tdeferred.resolveWith( elem, [ animation ] );\n\t\t\t\treturn false;\n\t\t\t}\n\t\t},\n\t\tanimation = deferred.promise( {\n\t\t\telem: elem,\n\t\t\tprops: jQuery.extend( {}, properties ),\n\t\t\topts: jQuery.extend( true, {\n\t\t\t\tspecialEasing: {},\n\t\t\t\teasing: jQuery.easing._default\n\t\t\t}, options ),\n\t\t\toriginalProperties: properties,\n\t\t\toriginalOptions: options,\n\t\t\tstartTime: fxNow || createFxNow(),\n\t\t\tduration: options.duration,\n\t\t\ttweens: [],\n\t\t\tcreateTween: function( prop, end ) {\n\t\t\t\tvar tween = jQuery.Tween( elem, animation.opts, prop, end,\n\t\t\t\t\t\tanimation.opts.specialEasing[ prop ] || animation.opts.easing );\n\t\t\t\tanimation.tweens.push( tween );\n\t\t\t\treturn tween;\n\t\t\t},\n\t\t\tstop: function( gotoEnd ) {\n\t\t\t\tvar index = 0,\n\n\t\t\t\t\t// If we are going to the end, we want to run all the tweens\n\t\t\t\t\t// otherwise we skip this part\n\t\t\t\t\tlength = gotoEnd ? animation.tweens.length : 0;\n\t\t\t\tif ( stopped ) {\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t\tstopped = true;\n\t\t\t\tfor ( ; index < length ; index++ ) {\n\t\t\t\t\tanimation.tweens[ index ].run( 1 );\n\t\t\t\t}\n\n\t\t\t\t// Resolve when we played the last frame; otherwise, reject\n\t\t\t\tif ( gotoEnd ) {\n\t\t\t\t\tdeferred.notifyWith( elem, [ animation, 1, 0 ] );\n\t\t\t\t\tdeferred.resolveWith( elem, [ animation, gotoEnd ] );\n\t\t\t\t} else {\n\t\t\t\t\tdeferred.rejectWith( elem, [ animation, gotoEnd ] );\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} ),\n\t\tprops = animation.props;\n\n\tpropFilter( props, animation.opts.specialEasing );\n\n\tfor ( ; index < length ; index++ ) {\n\t\tresult = Animation.prefilters[ index ].call( animation, elem, props, animation.opts );\n\t\tif ( result ) {\n\t\t\tif ( jQuery.isFunction( result.stop ) ) {\n\t\t\t\tjQuery._queueHooks( animation.elem, animation.opts.queue ).stop =\n\t\t\t\t\tjQuery.proxy( result.stop, result );\n\t\t\t}\n\t\t\treturn result;\n\t\t}\n\t}\n\n\tjQuery.map( props, createTween, animation );\n\n\tif ( jQuery.isFunction( animation.opts.start ) ) {\n\t\tanimation.opts.start.call( elem, animation );\n\t}\n\n\tjQuery.fx.timer(\n\t\tjQuery.extend( tick, {\n\t\t\telem: elem,\n\t\t\tanim: animation,\n\t\t\tqueue: animation.opts.queue\n\t\t} )\n\t);\n\n\t// attach callbacks from options\n\treturn animation.progress( animation.opts.progress )\n\t\t.done( animation.opts.done, animation.opts.complete )\n\t\t.fail( animation.opts.fail )\n\t\t.always( animation.opts.always );\n}\n\njQuery.Animation = jQuery.extend( Animation, {\n\ttweeners: {\n\t\t\"*\": [ function( prop, value ) {\n\t\t\tvar tween = this.createTween( prop, value );\n\t\t\tadjustCSS( tween.elem, prop, rcssNum.exec( value ), tween );\n\t\t\treturn tween;\n\t\t} ]\n\t},\n\n\ttweener: function( props, callback ) {\n\t\tif ( jQuery.isFunction( props ) ) {\n\t\t\tcallback = props;\n\t\t\tprops = [ \"*\" ];\n\t\t} else {\n\t\t\tprops = props.match( rnotwhite );\n\t\t}\n\n\t\tvar prop,\n\t\t\tindex = 0,\n\t\t\tlength = props.length;\n\n\t\tfor ( ; index < length ; index++ ) {\n\t\t\tprop = props[ index ];\n\t\t\tAnimation.tweeners[ prop ] = Animation.tweeners[ prop ] || [];\n\t\t\tAnimation.tweeners[ prop ].unshift( callback );\n\t\t}\n\t},\n\n\tprefilters: [ defaultPrefilter ],\n\n\tprefilter: function( callback, prepend ) {\n\t\tif ( prepend ) {\n\t\t\tAnimation.prefilters.unshift( callback );\n\t\t} else {\n\t\t\tAnimation.prefilters.push( callback );\n\t\t}\n\t}\n} );\n\njQuery.speed = function( speed, easing, fn ) {\n\tvar opt = speed && typeof speed === \"object\" ? jQuery.extend( {}, speed ) : {\n\t\tcomplete: fn || !fn && easing ||\n\t\t\tjQuery.isFunction( speed ) && speed,\n\t\tduration: speed,\n\t\teasing: fn && easing || easing && !jQuery.isFunction( easing ) && easing\n\t};\n\n\topt.duration = jQuery.fx.off ? 0 : typeof opt.duration === \"number\" ?\n\t\topt.duration : opt.duration in jQuery.fx.speeds ?\n\t\t\tjQuery.fx.speeds[ opt.duration ] : jQuery.fx.speeds._default;\n\n\t// Normalize opt.queue - true/undefined/null -> \"fx\"\n\tif ( opt.queue == null || opt.queue === true ) {\n\t\topt.queue = \"fx\";\n\t}\n\n\t// Queueing\n\topt.old = opt.complete;\n\n\topt.complete = function() {\n\t\tif ( jQuery.isFunction( opt.old ) ) {\n\t\t\topt.old.call( this );\n\t\t}\n\n\t\tif ( opt.queue ) {\n\t\t\tjQuery.dequeue( this, opt.queue );\n\t\t}\n\t};\n\n\treturn opt;\n};\n\njQuery.fn.extend( {\n\tfadeTo: function( speed, to, easing, callback ) {\n\n\t\t// Show any hidden elements after setting opacity to 0\n\t\treturn this.filter( isHidden ).css( \"opacity\", 0 ).show()\n\n\t\t\t// Animate to the value specified\n\t\t\t.end().animate( { opacity: to }, speed, easing, callback );\n\t},\n\tanimate: function( prop, speed, easing, callback ) {\n\t\tvar empty = jQuery.isEmptyObject( prop ),\n\t\t\toptall = jQuery.speed( speed, easing, callback ),\n\t\t\tdoAnimation = function() {\n\n\t\t\t\t// Operate on a copy of prop so per-property easing won't be lost\n\t\t\t\tvar anim = Animation( this, jQuery.extend( {}, prop ), optall );\n\n\t\t\t\t// Empty animations, or finishing resolves immediately\n\t\t\t\tif ( empty || dataPriv.get( this, \"finish\" ) ) {\n\t\t\t\t\tanim.stop( true );\n\t\t\t\t}\n\t\t\t};\n\t\t\tdoAnimation.finish = doAnimation;\n\n\t\treturn empty || optall.queue === false ?\n\t\t\tthis.each( doAnimation ) :\n\t\t\tthis.queue( optall.queue, doAnimation );\n\t},\n\tstop: function( type, clearQueue, gotoEnd ) {\n\t\tvar stopQueue = function( hooks ) {\n\t\t\tvar stop = hooks.stop;\n\t\t\tdelete hooks.stop;\n\t\t\tstop( gotoEnd );\n\t\t};\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tgotoEnd = clearQueue;\n\t\t\tclearQueue = type;\n\t\t\ttype = undefined;\n\t\t}\n\t\tif ( clearQueue && type !== false ) {\n\t\t\tthis.queue( type || \"fx\", [] );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar dequeue = true,\n\t\t\t\tindex = type != null && type + \"queueHooks\",\n\t\t\t\ttimers = jQuery.timers,\n\t\t\t\tdata = dataPriv.get( this );\n\n\t\t\tif ( index ) {\n\t\t\t\tif ( data[ index ] && data[ index ].stop ) {\n\t\t\t\t\tstopQueue( data[ index ] );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfor ( index in data ) {\n\t\t\t\t\tif ( data[ index ] && data[ index ].stop && rrun.test( index ) ) {\n\t\t\t\t\t\tstopQueue( data[ index ] );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfor ( index = timers.length; index--; ) {\n\t\t\t\tif ( timers[ index ].elem === this &&\n\t\t\t\t\t( type == null || timers[ index ].queue === type ) ) {\n\n\t\t\t\t\ttimers[ index ].anim.stop( gotoEnd );\n\t\t\t\t\tdequeue = false;\n\t\t\t\t\ttimers.splice( index, 1 );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Start the next in the queue if the last step wasn't forced.\n\t\t\t// Timers currently will call their complete callbacks, which\n\t\t\t// will dequeue but only if they were gotoEnd.\n\t\t\tif ( dequeue || !gotoEnd ) {\n\t\t\t\tjQuery.dequeue( this, type );\n\t\t\t}\n\t\t} );\n\t},\n\tfinish: function( type ) {\n\t\tif ( type !== false ) {\n\t\t\ttype = type || \"fx\";\n\t\t}\n\t\treturn this.each( function() {\n\t\t\tvar index,\n\t\t\t\tdata = dataPriv.get( this ),\n\t\t\t\tqueue = data[ type + \"queue\" ],\n\t\t\t\thooks = data[ type + \"queueHooks\" ],\n\t\t\t\ttimers = jQuery.timers,\n\t\t\t\tlength = queue ? queue.length : 0;\n\n\t\t\t// Enable finishing flag on private data\n\t\t\tdata.finish = true;\n\n\t\t\t// Empty the queue first\n\t\t\tjQuery.queue( this, type, [] );\n\n\t\t\tif ( hooks && hooks.stop ) {\n\t\t\t\thooks.stop.call( this, true );\n\t\t\t}\n\n\t\t\t// Look for any active animations, and finish them\n\t\t\tfor ( index = timers.length; index--; ) {\n\t\t\t\tif ( timers[ index ].elem === this && timers[ index ].queue === type ) {\n\t\t\t\t\ttimers[ index ].anim.stop( true );\n\t\t\t\t\ttimers.splice( index, 1 );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Look for any animations in the old queue and finish them\n\t\t\tfor ( index = 0; index < length; index++ ) {\n\t\t\t\tif ( queue[ index ] && queue[ index ].finish ) {\n\t\t\t\t\tqueue[ index ].finish.call( this );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Turn off finishing flag\n\t\t\tdelete data.finish;\n\t\t} );\n\t}\n} );\n\njQuery.each( [ \"toggle\", \"show\", \"hide\" ], function( i, name ) {\n\tvar cssFn = jQuery.fn[ name ];\n\tjQuery.fn[ name ] = function( speed, easing, callback ) {\n\t\treturn speed == null || typeof speed === \"boolean\" ?\n\t\t\tcssFn.apply( this, arguments ) :\n\t\t\tthis.animate( genFx( name, true ), speed, easing, callback );\n\t};\n} );\n\n// Generate shortcuts for custom animations\njQuery.each( {\n\tslideDown: genFx( \"show\" ),\n\tslideUp: genFx( \"hide\" ),\n\tslideToggle: genFx( \"toggle\" ),\n\tfadeIn: { opacity: \"show\" },\n\tfadeOut: { opacity: \"hide\" },\n\tfadeToggle: { opacity: \"toggle\" }\n}, function( name, props ) {\n\tjQuery.fn[ name ] = function( speed, easing, callback ) {\n\t\treturn this.animate( props, speed, easing, callback );\n\t};\n} );\n\njQuery.timers = [];\njQuery.fx.tick = function() {\n\tvar timer,\n\t\ti = 0,\n\t\ttimers = jQuery.timers;\n\n\tfxNow = jQuery.now();\n\n\tfor ( ; i < timers.length; i++ ) {\n\t\ttimer = timers[ i ];\n\n\t\t// Checks the timer has not already been removed\n\t\tif ( !timer() && timers[ i ] === timer ) {\n\t\t\ttimers.splice( i--, 1 );\n\t\t}\n\t}\n\n\tif ( !timers.length ) {\n\t\tjQuery.fx.stop();\n\t}\n\tfxNow = undefined;\n};\n\njQuery.fx.timer = function( timer ) {\n\tjQuery.timers.push( timer );\n\tif ( timer() ) {\n\t\tjQuery.fx.start();\n\t} else {\n\t\tjQuery.timers.pop();\n\t}\n};\n\njQuery.fx.interval = 13;\njQuery.fx.start = function() {\n\tif ( !timerId ) {\n\t\ttimerId = window.setInterval( jQuery.fx.tick, jQuery.fx.interval );\n\t}\n};\n\njQuery.fx.stop = function() {\n\twindow.clearInterval( timerId );\n\n\ttimerId = null;\n};\n\njQuery.fx.speeds = {\n\tslow: 600,\n\tfast: 200,\n\n\t// Default speed\n\t_default: 400\n};\n\n\n// Based off of the plugin by Clint Helfers, with permission.\n// http://web.archive.org/web/20100324014747/http://blindsignals.com/index.php/2009/07/jquery-delay/\njQuery.fn.delay = function( time, type ) {\n\ttime = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;\n\ttype = type || \"fx\";\n\n\treturn this.queue( type, function( next, hooks ) {\n\t\tvar timeout = window.setTimeout( next, time );\n\t\thooks.stop = function() {\n\t\t\twindow.clearTimeout( timeout );\n\t\t};\n\t} );\n};\n\n\n( function() {\n\tvar input = document.createElement( \"input\" ),\n\t\tselect = document.createElement( \"select\" ),\n\t\topt = select.appendChild( document.createElement( \"option\" ) );\n\n\tinput.type = \"checkbox\";\n\n\t// Support: iOS<=5.1, Android<=4.2+\n\t// Default value for a checkbox should be \"on\"\n\tsupport.checkOn = input.value !== \"\";\n\n\t// Support: IE<=11+\n\t// Must access selectedIndex to make default options select\n\tsupport.optSelected = opt.selected;\n\n\t// Support: Android<=2.3\n\t// Options inside disabled selects are incorrectly marked as disabled\n\tselect.disabled = true;\n\tsupport.optDisabled = !opt.disabled;\n\n\t// Support: IE<=11+\n\t// An input loses its value after becoming a radio\n\tinput = document.createElement( \"input\" );\n\tinput.value = \"t\";\n\tinput.type = \"radio\";\n\tsupport.radioValue = input.value === \"t\";\n} )();\n\n\nvar boolHook,\n\tattrHandle = jQuery.expr.attrHandle;\n\njQuery.fn.extend( {\n\tattr: function( name, value ) {\n\t\treturn access( this, jQuery.attr, name, value, arguments.length > 1 );\n\t},\n\n\tremoveAttr: function( name ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.removeAttr( this, name );\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tattr: function( elem, name, value ) {\n\t\tvar ret, hooks,\n\t\t\tnType = elem.nodeType;\n\n\t\t// Don't get/set attributes on text, comment and attribute nodes\n\t\tif ( nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Fallback to prop when attributes are not supported\n\t\tif ( typeof elem.getAttribute === \"undefined\" ) {\n\t\t\treturn jQuery.prop( elem, name, value );\n\t\t}\n\n\t\t// All attributes are lowercase\n\t\t// Grab necessary hook if one is defined\n\t\tif ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {\n\t\t\tname = name.toLowerCase();\n\t\t\thooks = jQuery.attrHooks[ name ] ||\n\t\t\t\t( jQuery.expr.match.bool.test( name ) ? boolHook : undefined );\n\t\t}\n\n\t\tif ( value !== undefined ) {\n\t\t\tif ( value === null ) {\n\t\t\t\tjQuery.removeAttr( elem, name );\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( hooks && \"set\" in hooks &&\n\t\t\t\t( ret = hooks.set( elem, value, name ) ) !== undefined ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\telem.setAttribute( name, value + \"\" );\n\t\t\treturn value;\n\t\t}\n\n\t\tif ( hooks && \"get\" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {\n\t\t\treturn ret;\n\t\t}\n\n\t\tret = jQuery.find.attr( elem, name );\n\n\t\t// Non-existent attributes return null, we normalize to undefined\n\t\treturn ret == null ? undefined : ret;\n\t},\n\n\tattrHooks: {\n\t\ttype: {\n\t\t\tset: function( elem, value ) {\n\t\t\t\tif ( !support.radioValue && value === \"radio\" &&\n\t\t\t\t\tjQuery.nodeName( elem, \"input\" ) ) {\n\t\t\t\t\tvar val = elem.value;\n\t\t\t\t\telem.setAttribute( \"type\", value );\n\t\t\t\t\tif ( val ) {\n\t\t\t\t\t\telem.value = val;\n\t\t\t\t\t}\n\t\t\t\t\treturn value;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\tremoveAttr: function( elem, value ) {\n\t\tvar name, propName,\n\t\t\ti = 0,\n\t\t\tattrNames = value && value.match( rnotwhite );\n\n\t\tif ( attrNames && elem.nodeType === 1 ) {\n\t\t\twhile ( ( name = attrNames[ i++ ] ) ) {\n\t\t\t\tpropName = jQuery.propFix[ name ] || name;\n\n\t\t\t\t// Boolean attributes get special treatment (#10870)\n\t\t\t\tif ( jQuery.expr.match.bool.test( name ) ) {\n\n\t\t\t\t\t// Set corresponding property to false\n\t\t\t\t\telem[ propName ] = false;\n\t\t\t\t}\n\n\t\t\t\telem.removeAttribute( name );\n\t\t\t}\n\t\t}\n\t}\n} );\n\n// Hooks for boolean attributes\nboolHook = {\n\tset: function( elem, value, name ) {\n\t\tif ( value === false ) {\n\n\t\t\t// Remove boolean attributes when set to false\n\t\t\tjQuery.removeAttr( elem, name );\n\t\t} else {\n\t\t\telem.setAttribute( name, name );\n\t\t}\n\t\treturn name;\n\t}\n};\njQuery.each( jQuery.expr.match.bool.source.match( /\\w+/g ), function( i, name ) {\n\tvar getter = attrHandle[ name ] || jQuery.find.attr;\n\n\tattrHandle[ name ] = function( elem, name, isXML ) {\n\t\tvar ret, handle;\n\t\tif ( !isXML ) {\n\n\t\t\t// Avoid an infinite loop by temporarily removing this function from the getter\n\t\t\thandle = attrHandle[ name ];\n\t\t\tattrHandle[ name ] = ret;\n\t\t\tret = getter( elem, name, isXML ) != null ?\n\t\t\t\tname.toLowerCase() :\n\t\t\t\tnull;\n\t\t\tattrHandle[ name ] = handle;\n\t\t}\n\t\treturn ret;\n\t};\n} );\n\n\n\n\nvar rfocusable = /^(?:input|select|textarea|button)$/i,\n\trclickable = /^(?:a|area)$/i;\n\njQuery.fn.extend( {\n\tprop: function( name, value ) {\n\t\treturn access( this, jQuery.prop, name, value, arguments.length > 1 );\n\t},\n\n\tremoveProp: function( name ) {\n\t\treturn this.each( function() {\n\t\t\tdelete this[ jQuery.propFix[ name ] || name ];\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tprop: function( elem, name, value ) {\n\t\tvar ret, hooks,\n\t\t\tnType = elem.nodeType;\n\n\t\t// Don't get/set properties on text, comment and attribute nodes\n\t\tif ( nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {\n\n\t\t\t// Fix name and attach hooks\n\t\t\tname = jQuery.propFix[ name ] || name;\n\t\t\thooks = jQuery.propHooks[ name ];\n\t\t}\n\n\t\tif ( value !== undefined ) {\n\t\t\tif ( hooks && \"set\" in hooks &&\n\t\t\t\t( ret = hooks.set( elem, value, name ) ) !== undefined ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\treturn ( elem[ name ] = value );\n\t\t}\n\n\t\tif ( hooks && \"get\" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {\n\t\t\treturn ret;\n\t\t}\n\n\t\treturn elem[ name ];\n\t},\n\n\tpropHooks: {\n\t\ttabIndex: {\n\t\t\tget: function( elem ) {\n\n\t\t\t\t// elem.tabIndex doesn't always return the\n\t\t\t\t// correct value when it hasn't been explicitly set\n\t\t\t\t// http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/\n\t\t\t\t// Use proper attribute retrieval(#12072)\n\t\t\t\tvar tabindex = jQuery.find.attr( elem, \"tabindex\" );\n\n\t\t\t\treturn tabindex ?\n\t\t\t\t\tparseInt( tabindex, 10 ) :\n\t\t\t\t\trfocusable.test( elem.nodeName ) ||\n\t\t\t\t\t\trclickable.test( elem.nodeName ) && elem.href ?\n\t\t\t\t\t\t\t0 :\n\t\t\t\t\t\t\t-1;\n\t\t\t}\n\t\t}\n\t},\n\n\tpropFix: {\n\t\t\"for\": \"htmlFor\",\n\t\t\"class\": \"className\"\n\t}\n} );\n\n// Support: IE <=11 only\n// Accessing the selectedIndex property\n// forces the browser to respect setting selected\n// on the option\n// The getter ensures a default option is selected\n// when in an optgroup\nif ( !support.optSelected ) {\n\tjQuery.propHooks.selected = {\n\t\tget: function( elem ) {\n\t\t\tvar parent = elem.parentNode;\n\t\t\tif ( parent && parent.parentNode ) {\n\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t}\n\t\t\treturn null;\n\t\t},\n\t\tset: function( elem ) {\n\t\t\tvar parent = elem.parentNode;\n\t\t\tif ( parent ) {\n\t\t\t\tparent.selectedIndex;\n\n\t\t\t\tif ( parent.parentNode ) {\n\t\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n}\n\njQuery.each( [\n\t\"tabIndex\",\n\t\"readOnly\",\n\t\"maxLength\",\n\t\"cellSpacing\",\n\t\"cellPadding\",\n\t\"rowSpan\",\n\t\"colSpan\",\n\t\"useMap\",\n\t\"frameBorder\",\n\t\"contentEditable\"\n], function() {\n\tjQuery.propFix[ this.toLowerCase() ] = this;\n} );\n\n\n\n\nvar rclass = /[\\t\\r\\n\\f]/g;\n\nfunction getClass( elem ) {\n\treturn elem.getAttribute && elem.getAttribute( \"class\" ) || \"\";\n}\n\njQuery.fn.extend( {\n\taddClass: function( value ) {\n\t\tvar classes, elem, cur, curValue, clazz, j, finalValue,\n\t\t\ti = 0;\n\n\t\tif ( jQuery.isFunction( value ) ) {\n\t\t\treturn this.each( function( j ) {\n\t\t\t\tjQuery( this ).addClass( value.call( this, j, getClass( this ) ) );\n\t\t\t} );\n\t\t}\n\n\t\tif ( typeof value === \"string\" && value ) {\n\t\t\tclasses = value.match( rnotwhite ) || [];\n\n\t\t\twhile ( ( elem = this[ i++ ] ) ) {\n\t\t\t\tcurValue = getClass( elem );\n\t\t\t\tcur = elem.nodeType === 1 &&\n\t\t\t\t\t( \" \" + curValue + \" \" ).replace( rclass, \" \" );\n\n\t\t\t\tif ( cur ) {\n\t\t\t\t\tj = 0;\n\t\t\t\t\twhile ( ( clazz = classes[ j++ ] ) ) {\n\t\t\t\t\t\tif ( cur.indexOf( \" \" + clazz + \" \" ) < 0 ) {\n\t\t\t\t\t\t\tcur += clazz + \" \";\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Only assign if different to avoid unneeded rendering.\n\t\t\t\t\tfinalValue = jQuery.trim( cur );\n\t\t\t\t\tif ( curValue !== finalValue ) {\n\t\t\t\t\t\telem.setAttribute( \"class\", finalValue );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tremoveClass: function( value ) {\n\t\tvar classes, elem, cur, curValue, clazz, j, finalValue,\n\t\t\ti = 0;\n\n\t\tif ( jQuery.isFunction( value ) ) {\n\t\t\treturn this.each( function( j ) {\n\t\t\t\tjQuery( this ).removeClass( value.call( this, j, getClass( this ) ) );\n\t\t\t} );\n\t\t}\n\n\t\tif ( !arguments.length ) {\n\t\t\treturn this.attr( \"class\", \"\" );\n\t\t}\n\n\t\tif ( typeof value === \"string\" && value ) {\n\t\t\tclasses = value.match( rnotwhite ) || [];\n\n\t\t\twhile ( ( elem = this[ i++ ] ) ) {\n\t\t\t\tcurValue = getClass( elem );\n\n\t\t\t\t// This expression is here for better compressibility (see addClass)\n\t\t\t\tcur = elem.nodeType === 1 &&\n\t\t\t\t\t( \" \" + curValue + \" \" ).replace( rclass, \" \" );\n\n\t\t\t\tif ( cur ) {\n\t\t\t\t\tj = 0;\n\t\t\t\t\twhile ( ( clazz = classes[ j++ ] ) ) {\n\n\t\t\t\t\t\t// Remove *all* instances\n\t\t\t\t\t\twhile ( cur.indexOf( \" \" + clazz + \" \" ) > -1 ) {\n\t\t\t\t\t\t\tcur = cur.replace( \" \" + clazz + \" \", \" \" );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Only assign if different to avoid unneeded rendering.\n\t\t\t\t\tfinalValue = jQuery.trim( cur );\n\t\t\t\t\tif ( curValue !== finalValue ) {\n\t\t\t\t\t\telem.setAttribute( \"class\", finalValue );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\ttoggleClass: function( value, stateVal ) {\n\t\tvar type = typeof value;\n\n\t\tif ( typeof stateVal === \"boolean\" && type === \"string\" ) {\n\t\t\treturn stateVal ? this.addClass( value ) : this.removeClass( value );\n\t\t}\n\n\t\tif ( jQuery.isFunction( value ) ) {\n\t\t\treturn this.each( function( i ) {\n\t\t\t\tjQuery( this ).toggleClass(\n\t\t\t\t\tvalue.call( this, i, getClass( this ), stateVal ),\n\t\t\t\t\tstateVal\n\t\t\t\t);\n\t\t\t} );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar className, i, self, classNames;\n\n\t\t\tif ( type === \"string\" ) {\n\n\t\t\t\t// Toggle individual class names\n\t\t\t\ti = 0;\n\t\t\t\tself = jQuery( this );\n\t\t\t\tclassNames = value.match( rnotwhite ) || [];\n\n\t\t\t\twhile ( ( className = classNames[ i++ ] ) ) {\n\n\t\t\t\t\t// Check each className given, space separated list\n\t\t\t\t\tif ( self.hasClass( className ) ) {\n\t\t\t\t\t\tself.removeClass( className );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tself.addClass( className );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t// Toggle whole class name\n\t\t\t} else if ( value === undefined || type === \"boolean\" ) {\n\t\t\t\tclassName = getClass( this );\n\t\t\t\tif ( className ) {\n\n\t\t\t\t\t// Store className if set\n\t\t\t\t\tdataPriv.set( this, \"__className__\", className );\n\t\t\t\t}\n\n\t\t\t\t// If the element has a class name or if we're passed `false`,\n\t\t\t\t// then remove the whole classname (if there was one, the above saved it).\n\t\t\t\t// Otherwise bring back whatever was previously saved (if anything),\n\t\t\t\t// falling back to the empty string if nothing was stored.\n\t\t\t\tif ( this.setAttribute ) {\n\t\t\t\t\tthis.setAttribute( \"class\",\n\t\t\t\t\t\tclassName || value === false ?\n\t\t\t\t\t\t\"\" :\n\t\t\t\t\t\tdataPriv.get( this, \"__className__\" ) || \"\"\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t},\n\n\thasClass: function( selector ) {\n\t\tvar className, elem,\n\t\t\ti = 0;\n\n\t\tclassName = \" \" + selector + \" \";\n\t\twhile ( ( elem = this[ i++ ] ) ) {\n\t\t\tif ( elem.nodeType === 1 &&\n\t\t\t\t( \" \" + getClass( elem ) + \" \" ).replace( rclass, \" \" )\n\t\t\t\t\t.indexOf( className ) > -1\n\t\t\t) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n} );\n\n\n\n\nvar rreturn = /\\r/g,\n\trspaces = /[\\x20\\t\\r\\n\\f]+/g;\n\njQuery.fn.extend( {\n\tval: function( value ) {\n\t\tvar hooks, ret, isFunction,\n\t\t\telem = this[ 0 ];\n\n\t\tif ( !arguments.length ) {\n\t\t\tif ( elem ) {\n\t\t\t\thooks = jQuery.valHooks[ elem.type ] ||\n\t\t\t\t\tjQuery.valHooks[ elem.nodeName.toLowerCase() ];\n\n\t\t\t\tif ( hooks &&\n\t\t\t\t\t\"get\" in hooks &&\n\t\t\t\t\t( ret = hooks.get( elem, \"value\" ) ) !== undefined\n\t\t\t\t) {\n\t\t\t\t\treturn ret;\n\t\t\t\t}\n\n\t\t\t\tret = elem.value;\n\n\t\t\t\treturn typeof ret === \"string\" ?\n\n\t\t\t\t\t// Handle most common string cases\n\t\t\t\t\tret.replace( rreturn, \"\" ) :\n\n\t\t\t\t\t// Handle cases where value is null/undef or number\n\t\t\t\t\tret == null ? \"\" : ret;\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\t\tisFunction = jQuery.isFunction( value );\n\n\t\treturn this.each( function( i ) {\n\t\t\tvar val;\n\n\t\t\tif ( this.nodeType !== 1 ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( isFunction ) {\n\t\t\t\tval = value.call( this, i, jQuery( this ).val() );\n\t\t\t} else {\n\t\t\t\tval = value;\n\t\t\t}\n\n\t\t\t// Treat null/undefined as \"\"; convert numbers to string\n\t\t\tif ( val == null ) {\n\t\t\t\tval = \"\";\n\n\t\t\t} else if ( typeof val === \"number\" ) {\n\t\t\t\tval += \"\";\n\n\t\t\t} else if ( jQuery.isArray( val ) ) {\n\t\t\t\tval = jQuery.map( val, function( value ) {\n\t\t\t\t\treturn value == null ? \"\" : value + \"\";\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\thooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ];\n\n\t\t\t// If set returns undefined, fall back to normal setting\n\t\t\tif ( !hooks || !( \"set\" in hooks ) || hooks.set( this, val, \"value\" ) === undefined ) {\n\t\t\t\tthis.value = val;\n\t\t\t}\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tvalHooks: {\n\t\toption: {\n\t\t\tget: function( elem ) {\n\n\t\t\t\tvar val = jQuery.find.attr( elem, \"value\" );\n\t\t\t\treturn val != null ?\n\t\t\t\t\tval :\n\n\t\t\t\t\t// Support: IE10-11+\n\t\t\t\t\t// option.text throws exceptions (#14686, #14858)\n\t\t\t\t\t// Strip and collapse whitespace\n\t\t\t\t\t// https://html.spec.whatwg.org/#strip-and-collapse-whitespace\n\t\t\t\t\tjQuery.trim( jQuery.text( elem ) ).replace( rspaces, \" \" );\n\t\t\t}\n\t\t},\n\t\tselect: {\n\t\t\tget: function( elem ) {\n\t\t\t\tvar value, option,\n\t\t\t\t\toptions = elem.options,\n\t\t\t\t\tindex = elem.selectedIndex,\n\t\t\t\t\tone = elem.type === \"select-one\" || index < 0,\n\t\t\t\t\tvalues = one ? null : [],\n\t\t\t\t\tmax = one ? index + 1 : options.length,\n\t\t\t\t\ti = index < 0 ?\n\t\t\t\t\t\tmax :\n\t\t\t\t\t\tone ? index : 0;\n\n\t\t\t\t// Loop through all the selected options\n\t\t\t\tfor ( ; i < max; i++ ) {\n\t\t\t\t\toption = options[ i ];\n\n\t\t\t\t\t// IE8-9 doesn't update selected after form reset (#2551)\n\t\t\t\t\tif ( ( option.selected || i === index ) &&\n\n\t\t\t\t\t\t\t// Don't return options that are disabled or in a disabled optgroup\n\t\t\t\t\t\t\t( support.optDisabled ?\n\t\t\t\t\t\t\t\t!option.disabled : option.getAttribute( \"disabled\" ) === null ) &&\n\t\t\t\t\t\t\t( !option.parentNode.disabled ||\n\t\t\t\t\t\t\t\t!jQuery.nodeName( option.parentNode, \"optgroup\" ) ) ) {\n\n\t\t\t\t\t\t// Get the specific value for the option\n\t\t\t\t\t\tvalue = jQuery( option ).val();\n\n\t\t\t\t\t\t// We don't need an array for one selects\n\t\t\t\t\t\tif ( one ) {\n\t\t\t\t\t\t\treturn value;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Multi-Selects return an array\n\t\t\t\t\t\tvalues.push( value );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn values;\n\t\t\t},\n\n\t\t\tset: function( elem, value ) {\n\t\t\t\tvar optionSet, option,\n\t\t\t\t\toptions = elem.options,\n\t\t\t\t\tvalues = jQuery.makeArray( value ),\n\t\t\t\t\ti = options.length;\n\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\toption = options[ i ];\n\t\t\t\t\tif ( option.selected =\n\t\t\t\t\t\tjQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1\n\t\t\t\t\t) {\n\t\t\t\t\t\toptionSet = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Force browsers to behave consistently when non-matching value is set\n\t\t\t\tif ( !optionSet ) {\n\t\t\t\t\telem.selectedIndex = -1;\n\t\t\t\t}\n\t\t\t\treturn values;\n\t\t\t}\n\t\t}\n\t}\n} );\n\n// Radios and checkboxes getter/setter\njQuery.each( [ \"radio\", \"checkbox\" ], function() {\n\tjQuery.valHooks[ this ] = {\n\t\tset: function( elem, value ) {\n\t\t\tif ( jQuery.isArray( value ) ) {\n\t\t\t\treturn ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 );\n\t\t\t}\n\t\t}\n\t};\n\tif ( !support.checkOn ) {\n\t\tjQuery.valHooks[ this ].get = function( elem ) {\n\t\t\treturn elem.getAttribute( \"value\" ) === null ? \"on\" : elem.value;\n\t\t};\n\t}\n} );\n\n\n\n\n// Return jQuery for attributes-only inclusion\n\n\nvar rfocusMorph = /^(?:focusinfocus|focusoutblur)$/;\n\njQuery.extend( jQuery.event, {\n\n\ttrigger: function( event, data, elem, onlyHandlers ) {\n\n\t\tvar i, cur, tmp, bubbleType, ontype, handle, special,\n\t\t\teventPath = [ elem || document ],\n\t\t\ttype = hasOwn.call( event, \"type\" ) ? event.type : event,\n\t\t\tnamespaces = hasOwn.call( event, \"namespace\" ) ? event.namespace.split( \".\" ) : [];\n\n\t\tcur = tmp = elem = elem || document;\n\n\t\t// Don't do events on text and comment nodes\n\t\tif ( elem.nodeType === 3 || elem.nodeType === 8 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// focus/blur morphs to focusin/out; ensure we're not firing them right now\n\t\tif ( rfocusMorph.test( type + jQuery.event.triggered ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( type.indexOf( \".\" ) > -1 ) {\n\n\t\t\t// Namespaced trigger; create a regexp to match event type in handle()\n\t\t\tnamespaces = type.split( \".\" );\n\t\t\ttype = namespaces.shift();\n\t\t\tnamespaces.sort();\n\t\t}\n\t\tontype = type.indexOf( \":\" ) < 0 && \"on\" + type;\n\n\t\t// Caller can pass in a jQuery.Event object, Object, or just an event type string\n\t\tevent = event[ jQuery.expando ] ?\n\t\t\tevent :\n\t\t\tnew jQuery.Event( type, typeof event === \"object\" && event );\n\n\t\t// Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true)\n\t\tevent.isTrigger = onlyHandlers ? 2 : 3;\n\t\tevent.namespace = namespaces.join( \".\" );\n\t\tevent.rnamespace = event.namespace ?\n\t\t\tnew RegExp( \"(^|\\\\.)\" + namespaces.join( \"\\\\.(?:.*\\\\.|)\" ) + \"(\\\\.|$)\" ) :\n\t\t\tnull;\n\n\t\t// Clean up the event in case it is being reused\n\t\tevent.result = undefined;\n\t\tif ( !event.target ) {\n\t\t\tevent.target = elem;\n\t\t}\n\n\t\t// Clone any incoming data and prepend the event, creating the handler arg list\n\t\tdata = data == null ?\n\t\t\t[ event ] :\n\t\t\tjQuery.makeArray( data, [ event ] );\n\n\t\t// Allow special events to draw outside the lines\n\t\tspecial = jQuery.event.special[ type ] || {};\n\t\tif ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Determine event propagation path in advance, per W3C events spec (#9951)\n\t\t// Bubble up to document, then to window; watch for a global ownerDocument var (#9724)\n\t\tif ( !onlyHandlers && !special.noBubble && !jQuery.isWindow( elem ) ) {\n\n\t\t\tbubbleType = special.delegateType || type;\n\t\t\tif ( !rfocusMorph.test( bubbleType + type ) ) {\n\t\t\t\tcur = cur.parentNode;\n\t\t\t}\n\t\t\tfor ( ; cur; cur = cur.parentNode ) {\n\t\t\t\teventPath.push( cur );\n\t\t\t\ttmp = cur;\n\t\t\t}\n\n\t\t\t// Only add window if we got to document (e.g., not plain obj or detached DOM)\n\t\t\tif ( tmp === ( elem.ownerDocument || document ) ) {\n\t\t\t\teventPath.push( tmp.defaultView || tmp.parentWindow || window );\n\t\t\t}\n\t\t}\n\n\t\t// Fire handlers on the event path\n\t\ti = 0;\n\t\twhile ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) {\n\n\t\t\tevent.type = i > 1 ?\n\t\t\t\tbubbleType :\n\t\t\t\tspecial.bindType || type;\n\n\t\t\t// jQuery handler\n\t\t\thandle = ( dataPriv.get( cur, \"events\" ) || {} )[ event.type ] &&\n\t\t\t\tdataPriv.get( cur, \"handle\" );\n\t\t\tif ( handle ) {\n\t\t\t\thandle.apply( cur, data );\n\t\t\t}\n\n\t\t\t// Native handler\n\t\t\thandle = ontype && cur[ ontype ];\n\t\t\tif ( handle && handle.apply && acceptData( cur ) ) {\n\t\t\t\tevent.result = handle.apply( cur, data );\n\t\t\t\tif ( event.result === false ) {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tevent.type = type;\n\n\t\t// If nobody prevented the default action, do it now\n\t\tif ( !onlyHandlers && !event.isDefaultPrevented() ) {\n\n\t\t\tif ( ( !special._default ||\n\t\t\t\tspecial._default.apply( eventPath.pop(), data ) === false ) &&\n\t\t\t\tacceptData( elem ) ) {\n\n\t\t\t\t// Call a native DOM method on the target with the same name name as the event.\n\t\t\t\t// Don't do default actions on window, that's where global variables be (#6170)\n\t\t\t\tif ( ontype && jQuery.isFunction( elem[ type ] ) && !jQuery.isWindow( elem ) ) {\n\n\t\t\t\t\t// Don't re-trigger an onFOO event when we call its FOO() method\n\t\t\t\t\ttmp = elem[ ontype ];\n\n\t\t\t\t\tif ( tmp ) {\n\t\t\t\t\t\telem[ ontype ] = null;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Prevent re-triggering of the same event, since we already bubbled it above\n\t\t\t\t\tjQuery.event.triggered = type;\n\t\t\t\t\telem[ type ]();\n\t\t\t\t\tjQuery.event.triggered = undefined;\n\n\t\t\t\t\tif ( tmp ) {\n\t\t\t\t\t\telem[ ontype ] = tmp;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn event.result;\n\t},\n\n\t// Piggyback on a donor event to simulate a different one\n\tsimulate: function( type, elem, event ) {\n\t\tvar e = jQuery.extend(\n\t\t\tnew jQuery.Event(),\n\t\t\tevent,\n\t\t\t{\n\t\t\t\ttype: type,\n\t\t\t\tisSimulated: true\n\n\t\t\t\t// Previously, `originalEvent: {}` was set here, so stopPropagation call\n\t\t\t\t// would not be triggered on donor event, since in our own\n\t\t\t\t// jQuery.event.stopPropagation function we had a check for existence of\n\t\t\t\t// originalEvent.stopPropagation method, so, consequently it would be a noop.\n\t\t\t\t//\n\t\t\t\t// But now, this \"simulate\" function is used only for events\n\t\t\t\t// for which stopPropagation() is noop, so there is no need for that anymore.\n\t\t\t\t//\n\t\t\t\t// For the 1.x branch though, guard for \"click\" and \"submit\"\n\t\t\t\t// events is still used, but was moved to jQuery.event.stopPropagation function\n\t\t\t\t// because `originalEvent` should point to the original event for the constancy\n\t\t\t\t// with other events and for more focused logic\n\t\t\t}\n\t\t);\n\n\t\tjQuery.event.trigger( e, null, elem );\n\n\t\tif ( e.isDefaultPrevented() ) {\n\t\t\tevent.preventDefault();\n\t\t}\n\t}\n\n} );\n\njQuery.fn.extend( {\n\n\ttrigger: function( type, data ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.event.trigger( type, data, this );\n\t\t} );\n\t},\n\ttriggerHandler: function( type, data ) {\n\t\tvar elem = this[ 0 ];\n\t\tif ( elem ) {\n\t\t\treturn jQuery.event.trigger( type, data, elem, true );\n\t\t}\n\t}\n} );\n\n\njQuery.each( ( \"blur focus focusin focusout load resize scroll unload click dblclick \" +\n\t\"mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave \" +\n\t\"change select submit keydown keypress keyup error contextmenu\" ).split( \" \" ),\n\tfunction( i, name ) {\n\n\t// Handle event binding\n\tjQuery.fn[ name ] = function( data, fn ) {\n\t\treturn arguments.length > 0 ?\n\t\t\tthis.on( name, null, data, fn ) :\n\t\t\tthis.trigger( name );\n\t};\n} );\n\njQuery.fn.extend( {\n\thover: function( fnOver, fnOut ) {\n\t\treturn this.mouseenter( fnOver ).mouseleave( fnOut || fnOver );\n\t}\n} );\n\n\n\n\nsupport.focusin = \"onfocusin\" in window;\n\n\n// Support: Firefox\n// Firefox doesn't have focus(in | out) events\n// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787\n//\n// Support: Chrome, Safari\n// focus(in | out) events fire after focus & blur events,\n// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order\n// Related ticket - https://code.google.com/p/chromium/issues/detail?id=449857\nif ( !support.focusin ) {\n\tjQuery.each( { focus: \"focusin\", blur: \"focusout\" }, function( orig, fix ) {\n\n\t\t// Attach a single capturing handler on the document while someone wants focusin/focusout\n\t\tvar handler = function( event ) {\n\t\t\tjQuery.event.simulate( fix, event.target, jQuery.event.fix( event ) );\n\t\t};\n\n\t\tjQuery.event.special[ fix ] = {\n\t\t\tsetup: function() {\n\t\t\t\tvar doc = this.ownerDocument || this,\n\t\t\t\t\tattaches = dataPriv.access( doc, fix );\n\n\t\t\t\tif ( !attaches ) {\n\t\t\t\t\tdoc.addEventListener( orig, handler, true );\n\t\t\t\t}\n\t\t\t\tdataPriv.access( doc, fix, ( attaches || 0 ) + 1 );\n\t\t\t},\n\t\t\tteardown: function() {\n\t\t\t\tvar doc = this.ownerDocument || this,\n\t\t\t\t\tattaches = dataPriv.access( doc, fix ) - 1;\n\n\t\t\t\tif ( !attaches ) {\n\t\t\t\t\tdoc.removeEventListener( orig, handler, true );\n\t\t\t\t\tdataPriv.remove( doc, fix );\n\n\t\t\t\t} else {\n\t\t\t\t\tdataPriv.access( doc, fix, attaches );\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t} );\n}\nvar location = window.location;\n\nvar nonce = jQuery.now();\n\nvar rquery = ( /\\?/ );\n\n\n\n// Support: Android 2.3\n// Workaround failure to string-cast null input\njQuery.parseJSON = function( data ) {\n\treturn JSON.parse( data + \"\" );\n};\n\n\n// Cross-browser xml parsing\njQuery.parseXML = function( data ) {\n\tvar xml;\n\tif ( !data || typeof data !== \"string\" ) {\n\t\treturn null;\n\t}\n\n\t// Support: IE9\n\ttry {\n\t\txml = ( new window.DOMParser() ).parseFromString( data, \"text/xml\" );\n\t} catch ( e ) {\n\t\txml = undefined;\n\t}\n\n\tif ( !xml || xml.getElementsByTagName( \"parsererror\" ).length ) {\n\t\tjQuery.error( \"Invalid XML: \" + data );\n\t}\n\treturn xml;\n};\n\n\nvar\n\trhash = /#.*$/,\n\trts = /([?&])_=[^&]*/,\n\trheaders = /^(.*?):[ \\t]*([^\\r\\n]*)$/mg,\n\n\t// #7653, #8125, #8152: local protocol detection\n\trlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,\n\trnoContent = /^(?:GET|HEAD)$/,\n\trprotocol = /^\\/\\//,\n\n\t/* Prefilters\n\t * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)\n\t * 2) These are called:\n\t *    - BEFORE asking for a transport\n\t *    - AFTER param serialization (s.data is a string if s.processData is true)\n\t * 3) key is the dataType\n\t * 4) the catchall symbol \"*\" can be used\n\t * 5) execution will start with transport dataType and THEN continue down to \"*\" if needed\n\t */\n\tprefilters = {},\n\n\t/* Transports bindings\n\t * 1) key is the dataType\n\t * 2) the catchall symbol \"*\" can be used\n\t * 3) selection will start with transport dataType and THEN go to \"*\" if needed\n\t */\n\ttransports = {},\n\n\t// Avoid comment-prolog char sequence (#10098); must appease lint and evade compression\n\tallTypes = \"*/\".concat( \"*\" ),\n\n\t// Anchor tag for parsing the document origin\n\toriginAnchor = document.createElement( \"a\" );\n\toriginAnchor.href = location.href;\n\n// Base \"constructor\" for jQuery.ajaxPrefilter and jQuery.ajaxTransport\nfunction addToPrefiltersOrTransports( structure ) {\n\n\t// dataTypeExpression is optional and defaults to \"*\"\n\treturn function( dataTypeExpression, func ) {\n\n\t\tif ( typeof dataTypeExpression !== \"string\" ) {\n\t\t\tfunc = dataTypeExpression;\n\t\t\tdataTypeExpression = \"*\";\n\t\t}\n\n\t\tvar dataType,\n\t\t\ti = 0,\n\t\t\tdataTypes = dataTypeExpression.toLowerCase().match( rnotwhite ) || [];\n\n\t\tif ( jQuery.isFunction( func ) ) {\n\n\t\t\t// For each dataType in the dataTypeExpression\n\t\t\twhile ( ( dataType = dataTypes[ i++ ] ) ) {\n\n\t\t\t\t// Prepend if requested\n\t\t\t\tif ( dataType[ 0 ] === \"+\" ) {\n\t\t\t\t\tdataType = dataType.slice( 1 ) || \"*\";\n\t\t\t\t\t( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func );\n\n\t\t\t\t// Otherwise append\n\t\t\t\t} else {\n\t\t\t\t\t( structure[ dataType ] = structure[ dataType ] || [] ).push( func );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n}\n\n// Base inspection function for prefilters and transports\nfunction inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) {\n\n\tvar inspected = {},\n\t\tseekingTransport = ( structure === transports );\n\n\tfunction inspect( dataType ) {\n\t\tvar selected;\n\t\tinspected[ dataType ] = true;\n\t\tjQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) {\n\t\t\tvar dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR );\n\t\t\tif ( typeof dataTypeOrTransport === \"string\" &&\n\t\t\t\t!seekingTransport && !inspected[ dataTypeOrTransport ] ) {\n\n\t\t\t\toptions.dataTypes.unshift( dataTypeOrTransport );\n\t\t\t\tinspect( dataTypeOrTransport );\n\t\t\t\treturn false;\n\t\t\t} else if ( seekingTransport ) {\n\t\t\t\treturn !( selected = dataTypeOrTransport );\n\t\t\t}\n\t\t} );\n\t\treturn selected;\n\t}\n\n\treturn inspect( options.dataTypes[ 0 ] ) || !inspected[ \"*\" ] && inspect( \"*\" );\n}\n\n// A special extend for ajax options\n// that takes \"flat\" options (not to be deep extended)\n// Fixes #9887\nfunction ajaxExtend( target, src ) {\n\tvar key, deep,\n\t\tflatOptions = jQuery.ajaxSettings.flatOptions || {};\n\n\tfor ( key in src ) {\n\t\tif ( src[ key ] !== undefined ) {\n\t\t\t( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ];\n\t\t}\n\t}\n\tif ( deep ) {\n\t\tjQuery.extend( true, target, deep );\n\t}\n\n\treturn target;\n}\n\n/* Handles responses to an ajax request:\n * - finds the right dataType (mediates between content-type and expected dataType)\n * - returns the corresponding response\n */\nfunction ajaxHandleResponses( s, jqXHR, responses ) {\n\n\tvar ct, type, finalDataType, firstDataType,\n\t\tcontents = s.contents,\n\t\tdataTypes = s.dataTypes;\n\n\t// Remove auto dataType and get content-type in the process\n\twhile ( dataTypes[ 0 ] === \"*\" ) {\n\t\tdataTypes.shift();\n\t\tif ( ct === undefined ) {\n\t\t\tct = s.mimeType || jqXHR.getResponseHeader( \"Content-Type\" );\n\t\t}\n\t}\n\n\t// Check if we're dealing with a known content-type\n\tif ( ct ) {\n\t\tfor ( type in contents ) {\n\t\t\tif ( contents[ type ] && contents[ type ].test( ct ) ) {\n\t\t\t\tdataTypes.unshift( type );\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Check to see if we have a response for the expected dataType\n\tif ( dataTypes[ 0 ] in responses ) {\n\t\tfinalDataType = dataTypes[ 0 ];\n\t} else {\n\n\t\t// Try convertible dataTypes\n\t\tfor ( type in responses ) {\n\t\t\tif ( !dataTypes[ 0 ] || s.converters[ type + \" \" + dataTypes[ 0 ] ] ) {\n\t\t\t\tfinalDataType = type;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif ( !firstDataType ) {\n\t\t\t\tfirstDataType = type;\n\t\t\t}\n\t\t}\n\n\t\t// Or just use first one\n\t\tfinalDataType = finalDataType || firstDataType;\n\t}\n\n\t// If we found a dataType\n\t// We add the dataType to the list if needed\n\t// and return the corresponding response\n\tif ( finalDataType ) {\n\t\tif ( finalDataType !== dataTypes[ 0 ] ) {\n\t\t\tdataTypes.unshift( finalDataType );\n\t\t}\n\t\treturn responses[ finalDataType ];\n\t}\n}\n\n/* Chain conversions given the request and the original response\n * Also sets the responseXXX fields on the jqXHR instance\n */\nfunction ajaxConvert( s, response, jqXHR, isSuccess ) {\n\tvar conv2, current, conv, tmp, prev,\n\t\tconverters = {},\n\n\t\t// Work with a copy of dataTypes in case we need to modify it for conversion\n\t\tdataTypes = s.dataTypes.slice();\n\n\t// Create converters map with lowercased keys\n\tif ( dataTypes[ 1 ] ) {\n\t\tfor ( conv in s.converters ) {\n\t\t\tconverters[ conv.toLowerCase() ] = s.converters[ conv ];\n\t\t}\n\t}\n\n\tcurrent = dataTypes.shift();\n\n\t// Convert to each sequential dataType\n\twhile ( current ) {\n\n\t\tif ( s.responseFields[ current ] ) {\n\t\t\tjqXHR[ s.responseFields[ current ] ] = response;\n\t\t}\n\n\t\t// Apply the dataFilter if provided\n\t\tif ( !prev && isSuccess && s.dataFilter ) {\n\t\t\tresponse = s.dataFilter( response, s.dataType );\n\t\t}\n\n\t\tprev = current;\n\t\tcurrent = dataTypes.shift();\n\n\t\tif ( current ) {\n\n\t\t// There's only work to do if current dataType is non-auto\n\t\t\tif ( current === \"*\" ) {\n\n\t\t\t\tcurrent = prev;\n\n\t\t\t// Convert response if prev dataType is non-auto and differs from current\n\t\t\t} else if ( prev !== \"*\" && prev !== current ) {\n\n\t\t\t\t// Seek a direct converter\n\t\t\t\tconv = converters[ prev + \" \" + current ] || converters[ \"* \" + current ];\n\n\t\t\t\t// If none found, seek a pair\n\t\t\t\tif ( !conv ) {\n\t\t\t\t\tfor ( conv2 in converters ) {\n\n\t\t\t\t\t\t// If conv2 outputs current\n\t\t\t\t\t\ttmp = conv2.split( \" \" );\n\t\t\t\t\t\tif ( tmp[ 1 ] === current ) {\n\n\t\t\t\t\t\t\t// If prev can be converted to accepted input\n\t\t\t\t\t\t\tconv = converters[ prev + \" \" + tmp[ 0 ] ] ||\n\t\t\t\t\t\t\t\tconverters[ \"* \" + tmp[ 0 ] ];\n\t\t\t\t\t\t\tif ( conv ) {\n\n\t\t\t\t\t\t\t\t// Condense equivalence converters\n\t\t\t\t\t\t\t\tif ( conv === true ) {\n\t\t\t\t\t\t\t\t\tconv = converters[ conv2 ];\n\n\t\t\t\t\t\t\t\t// Otherwise, insert the intermediate dataType\n\t\t\t\t\t\t\t\t} else if ( converters[ conv2 ] !== true ) {\n\t\t\t\t\t\t\t\t\tcurrent = tmp[ 0 ];\n\t\t\t\t\t\t\t\t\tdataTypes.unshift( tmp[ 1 ] );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Apply converter (if not an equivalence)\n\t\t\t\tif ( conv !== true ) {\n\n\t\t\t\t\t// Unless errors are allowed to bubble, catch and return them\n\t\t\t\t\tif ( conv && s.throws ) {\n\t\t\t\t\t\tresponse = conv( response );\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tresponse = conv( response );\n\t\t\t\t\t\t} catch ( e ) {\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\tstate: \"parsererror\",\n\t\t\t\t\t\t\t\terror: conv ? e : \"No conversion from \" + prev + \" to \" + current\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn { state: \"success\", data: response };\n}\n\njQuery.extend( {\n\n\t// Counter for holding the number of active queries\n\tactive: 0,\n\n\t// Last-Modified header cache for next request\n\tlastModified: {},\n\tetag: {},\n\n\tajaxSettings: {\n\t\turl: location.href,\n\t\ttype: \"GET\",\n\t\tisLocal: rlocalProtocol.test( location.protocol ),\n\t\tglobal: true,\n\t\tprocessData: true,\n\t\tasync: true,\n\t\tcontentType: \"application/x-www-form-urlencoded; charset=UTF-8\",\n\t\t/*\n\t\ttimeout: 0,\n\t\tdata: null,\n\t\tdataType: null,\n\t\tusername: null,\n\t\tpassword: null,\n\t\tcache: null,\n\t\tthrows: false,\n\t\ttraditional: false,\n\t\theaders: {},\n\t\t*/\n\n\t\taccepts: {\n\t\t\t\"*\": allTypes,\n\t\t\ttext: \"text/plain\",\n\t\t\thtml: \"text/html\",\n\t\t\txml: \"application/xml, text/xml\",\n\t\t\tjson: \"application/json, text/javascript\"\n\t\t},\n\n\t\tcontents: {\n\t\t\txml: /\\bxml\\b/,\n\t\t\thtml: /\\bhtml/,\n\t\t\tjson: /\\bjson\\b/\n\t\t},\n\n\t\tresponseFields: {\n\t\t\txml: \"responseXML\",\n\t\t\ttext: \"responseText\",\n\t\t\tjson: \"responseJSON\"\n\t\t},\n\n\t\t// Data converters\n\t\t// Keys separate source (or catchall \"*\") and destination types with a single space\n\t\tconverters: {\n\n\t\t\t// Convert anything to text\n\t\t\t\"* text\": String,\n\n\t\t\t// Text to html (true = no transformation)\n\t\t\t\"text html\": true,\n\n\t\t\t// Evaluate text as a json expression\n\t\t\t\"text json\": jQuery.parseJSON,\n\n\t\t\t// Parse text as xml\n\t\t\t\"text xml\": jQuery.parseXML\n\t\t},\n\n\t\t// For options that shouldn't be deep extended:\n\t\t// you can add your own custom options here if\n\t\t// and when you create one that shouldn't be\n\t\t// deep extended (see ajaxExtend)\n\t\tflatOptions: {\n\t\t\turl: true,\n\t\t\tcontext: true\n\t\t}\n\t},\n\n\t// Creates a full fledged settings object into target\n\t// with both ajaxSettings and settings fields.\n\t// If target is omitted, writes into ajaxSettings.\n\tajaxSetup: function( target, settings ) {\n\t\treturn settings ?\n\n\t\t\t// Building a settings object\n\t\t\tajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) :\n\n\t\t\t// Extending ajaxSettings\n\t\t\tajaxExtend( jQuery.ajaxSettings, target );\n\t},\n\n\tajaxPrefilter: addToPrefiltersOrTransports( prefilters ),\n\tajaxTransport: addToPrefiltersOrTransports( transports ),\n\n\t// Main method\n\tajax: function( url, options ) {\n\n\t\t// If url is an object, simulate pre-1.5 signature\n\t\tif ( typeof url === \"object\" ) {\n\t\t\toptions = url;\n\t\t\turl = undefined;\n\t\t}\n\n\t\t// Force options to be an object\n\t\toptions = options || {};\n\n\t\tvar transport,\n\n\t\t\t// URL without anti-cache param\n\t\t\tcacheURL,\n\n\t\t\t// Response headers\n\t\t\tresponseHeadersString,\n\t\t\tresponseHeaders,\n\n\t\t\t// timeout handle\n\t\t\ttimeoutTimer,\n\n\t\t\t// Url cleanup var\n\t\t\turlAnchor,\n\n\t\t\t// To know if global events are to be dispatched\n\t\t\tfireGlobals,\n\n\t\t\t// Loop variable\n\t\t\ti,\n\n\t\t\t// Create the final options object\n\t\t\ts = jQuery.ajaxSetup( {}, options ),\n\n\t\t\t// Callbacks context\n\t\t\tcallbackContext = s.context || s,\n\n\t\t\t// Context for global events is callbackContext if it is a DOM node or jQuery collection\n\t\t\tglobalEventContext = s.context &&\n\t\t\t\t( callbackContext.nodeType || callbackContext.jquery ) ?\n\t\t\t\t\tjQuery( callbackContext ) :\n\t\t\t\t\tjQuery.event,\n\n\t\t\t// Deferreds\n\t\t\tdeferred = jQuery.Deferred(),\n\t\t\tcompleteDeferred = jQuery.Callbacks( \"once memory\" ),\n\n\t\t\t// Status-dependent callbacks\n\t\t\tstatusCode = s.statusCode || {},\n\n\t\t\t// Headers (they are sent all at once)\n\t\t\trequestHeaders = {},\n\t\t\trequestHeadersNames = {},\n\n\t\t\t// The jqXHR state\n\t\t\tstate = 0,\n\n\t\t\t// Default abort message\n\t\t\tstrAbort = \"canceled\",\n\n\t\t\t// Fake xhr\n\t\t\tjqXHR = {\n\t\t\t\treadyState: 0,\n\n\t\t\t\t// Builds headers hashtable if needed\n\t\t\t\tgetResponseHeader: function( key ) {\n\t\t\t\t\tvar match;\n\t\t\t\t\tif ( state === 2 ) {\n\t\t\t\t\t\tif ( !responseHeaders ) {\n\t\t\t\t\t\t\tresponseHeaders = {};\n\t\t\t\t\t\t\twhile ( ( match = rheaders.exec( responseHeadersString ) ) ) {\n\t\t\t\t\t\t\t\tresponseHeaders[ match[ 1 ].toLowerCase() ] = match[ 2 ];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tmatch = responseHeaders[ key.toLowerCase() ];\n\t\t\t\t\t}\n\t\t\t\t\treturn match == null ? null : match;\n\t\t\t\t},\n\n\t\t\t\t// Raw string\n\t\t\t\tgetAllResponseHeaders: function() {\n\t\t\t\t\treturn state === 2 ? responseHeadersString : null;\n\t\t\t\t},\n\n\t\t\t\t// Caches the header\n\t\t\t\tsetRequestHeader: function( name, value ) {\n\t\t\t\t\tvar lname = name.toLowerCase();\n\t\t\t\t\tif ( !state ) {\n\t\t\t\t\t\tname = requestHeadersNames[ lname ] = requestHeadersNames[ lname ] || name;\n\t\t\t\t\t\trequestHeaders[ name ] = value;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Overrides response content-type header\n\t\t\t\toverrideMimeType: function( type ) {\n\t\t\t\t\tif ( !state ) {\n\t\t\t\t\t\ts.mimeType = type;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Status-dependent callbacks\n\t\t\t\tstatusCode: function( map ) {\n\t\t\t\t\tvar code;\n\t\t\t\t\tif ( map ) {\n\t\t\t\t\t\tif ( state < 2 ) {\n\t\t\t\t\t\t\tfor ( code in map ) {\n\n\t\t\t\t\t\t\t\t// Lazy-add the new callback in a way that preserves old ones\n\t\t\t\t\t\t\t\tstatusCode[ code ] = [ statusCode[ code ], map[ code ] ];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// Execute the appropriate callbacks\n\t\t\t\t\t\t\tjqXHR.always( map[ jqXHR.status ] );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Cancel the request\n\t\t\t\tabort: function( statusText ) {\n\t\t\t\t\tvar finalText = statusText || strAbort;\n\t\t\t\t\tif ( transport ) {\n\t\t\t\t\t\ttransport.abort( finalText );\n\t\t\t\t\t}\n\t\t\t\t\tdone( 0, finalText );\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t};\n\n\t\t// Attach deferreds\n\t\tdeferred.promise( jqXHR ).complete = completeDeferred.add;\n\t\tjqXHR.success = jqXHR.done;\n\t\tjqXHR.error = jqXHR.fail;\n\n\t\t// Remove hash character (#7531: and string promotion)\n\t\t// Add protocol if not provided (prefilters might expect it)\n\t\t// Handle falsy url in the settings object (#10093: consistency with old signature)\n\t\t// We also use the url parameter if available\n\t\ts.url = ( ( url || s.url || location.href ) + \"\" ).replace( rhash, \"\" )\n\t\t\t.replace( rprotocol, location.protocol + \"//\" );\n\n\t\t// Alias method option to type as per ticket #12004\n\t\ts.type = options.method || options.type || s.method || s.type;\n\n\t\t// Extract dataTypes list\n\t\ts.dataTypes = jQuery.trim( s.dataType || \"*\" ).toLowerCase().match( rnotwhite ) || [ \"\" ];\n\n\t\t// A cross-domain request is in order when the origin doesn't match the current origin.\n\t\tif ( s.crossDomain == null ) {\n\t\t\turlAnchor = document.createElement( \"a\" );\n\n\t\t\t// Support: IE8-11+\n\t\t\t// IE throws exception if url is malformed, e.g. http://example.com:80x/\n\t\t\ttry {\n\t\t\t\turlAnchor.href = s.url;\n\n\t\t\t\t// Support: IE8-11+\n\t\t\t\t// Anchor's host property isn't correctly set when s.url is relative\n\t\t\t\turlAnchor.href = urlAnchor.href;\n\t\t\t\ts.crossDomain = originAnchor.protocol + \"//\" + originAnchor.host !==\n\t\t\t\t\turlAnchor.protocol + \"//\" + urlAnchor.host;\n\t\t\t} catch ( e ) {\n\n\t\t\t\t// If there is an error parsing the URL, assume it is crossDomain,\n\t\t\t\t// it can be rejected by the transport if it is invalid\n\t\t\t\ts.crossDomain = true;\n\t\t\t}\n\t\t}\n\n\t\t// Convert data if not already a string\n\t\tif ( s.data && s.processData && typeof s.data !== \"string\" ) {\n\t\t\ts.data = jQuery.param( s.data, s.traditional );\n\t\t}\n\n\t\t// Apply prefilters\n\t\tinspectPrefiltersOrTransports( prefilters, s, options, jqXHR );\n\n\t\t// If request was aborted inside a prefilter, stop there\n\t\tif ( state === 2 ) {\n\t\t\treturn jqXHR;\n\t\t}\n\n\t\t// We can fire global events as of now if asked to\n\t\t// Don't fire events if jQuery.event is undefined in an AMD-usage scenario (#15118)\n\t\tfireGlobals = jQuery.event && s.global;\n\n\t\t// Watch for a new set of requests\n\t\tif ( fireGlobals && jQuery.active++ === 0 ) {\n\t\t\tjQuery.event.trigger( \"ajaxStart\" );\n\t\t}\n\n\t\t// Uppercase the type\n\t\ts.type = s.type.toUpperCase();\n\n\t\t// Determine if request has content\n\t\ts.hasContent = !rnoContent.test( s.type );\n\n\t\t// Save the URL in case we're toying with the If-Modified-Since\n\t\t// and/or If-None-Match header later on\n\t\tcacheURL = s.url;\n\n\t\t// More options handling for requests with no content\n\t\tif ( !s.hasContent ) {\n\n\t\t\t// If data is available, append data to url\n\t\t\tif ( s.data ) {\n\t\t\t\tcacheURL = ( s.url += ( rquery.test( cacheURL ) ? \"&\" : \"?\" ) + s.data );\n\n\t\t\t\t// #9682: remove data so that it's not used in an eventual retry\n\t\t\t\tdelete s.data;\n\t\t\t}\n\n\t\t\t// Add anti-cache in url if needed\n\t\t\tif ( s.cache === false ) {\n\t\t\t\ts.url = rts.test( cacheURL ) ?\n\n\t\t\t\t\t// If there is already a '_' parameter, set its value\n\t\t\t\t\tcacheURL.replace( rts, \"$1_=\" + nonce++ ) :\n\n\t\t\t\t\t// Otherwise add one to the end\n\t\t\t\t\tcacheURL + ( rquery.test( cacheURL ) ? \"&\" : \"?\" ) + \"_=\" + nonce++;\n\t\t\t}\n\t\t}\n\n\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\tif ( s.ifModified ) {\n\t\t\tif ( jQuery.lastModified[ cacheURL ] ) {\n\t\t\t\tjqXHR.setRequestHeader( \"If-Modified-Since\", jQuery.lastModified[ cacheURL ] );\n\t\t\t}\n\t\t\tif ( jQuery.etag[ cacheURL ] ) {\n\t\t\t\tjqXHR.setRequestHeader( \"If-None-Match\", jQuery.etag[ cacheURL ] );\n\t\t\t}\n\t\t}\n\n\t\t// Set the correct header, if data is being sent\n\t\tif ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {\n\t\t\tjqXHR.setRequestHeader( \"Content-Type\", s.contentType );\n\t\t}\n\n\t\t// Set the Accepts header for the server, depending on the dataType\n\t\tjqXHR.setRequestHeader(\n\t\t\t\"Accept\",\n\t\t\ts.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ?\n\t\t\t\ts.accepts[ s.dataTypes[ 0 ] ] +\n\t\t\t\t\t( s.dataTypes[ 0 ] !== \"*\" ? \", \" + allTypes + \"; q=0.01\" : \"\" ) :\n\t\t\t\ts.accepts[ \"*\" ]\n\t\t);\n\n\t\t// Check for headers option\n\t\tfor ( i in s.headers ) {\n\t\t\tjqXHR.setRequestHeader( i, s.headers[ i ] );\n\t\t}\n\n\t\t// Allow custom headers/mimetypes and early abort\n\t\tif ( s.beforeSend &&\n\t\t\t( s.beforeSend.call( callbackContext, jqXHR, s ) === false || state === 2 ) ) {\n\n\t\t\t// Abort if not done already and return\n\t\t\treturn jqXHR.abort();\n\t\t}\n\n\t\t// Aborting is no longer a cancellation\n\t\tstrAbort = \"abort\";\n\n\t\t// Install callbacks on deferreds\n\t\tfor ( i in { success: 1, error: 1, complete: 1 } ) {\n\t\t\tjqXHR[ i ]( s[ i ] );\n\t\t}\n\n\t\t// Get transport\n\t\ttransport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );\n\n\t\t// If no transport, we auto-abort\n\t\tif ( !transport ) {\n\t\t\tdone( -1, \"No Transport\" );\n\t\t} else {\n\t\t\tjqXHR.readyState = 1;\n\n\t\t\t// Send global event\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( \"ajaxSend\", [ jqXHR, s ] );\n\t\t\t}\n\n\t\t\t// If request was aborted inside ajaxSend, stop there\n\t\t\tif ( state === 2 ) {\n\t\t\t\treturn jqXHR;\n\t\t\t}\n\n\t\t\t// Timeout\n\t\t\tif ( s.async && s.timeout > 0 ) {\n\t\t\t\ttimeoutTimer = window.setTimeout( function() {\n\t\t\t\t\tjqXHR.abort( \"timeout\" );\n\t\t\t\t}, s.timeout );\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tstate = 1;\n\t\t\t\ttransport.send( requestHeaders, done );\n\t\t\t} catch ( e ) {\n\n\t\t\t\t// Propagate exception as error if not done\n\t\t\t\tif ( state < 2 ) {\n\t\t\t\t\tdone( -1, e );\n\n\t\t\t\t// Simply rethrow otherwise\n\t\t\t\t} else {\n\t\t\t\t\tthrow e;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Callback for when everything is done\n\t\tfunction done( status, nativeStatusText, responses, headers ) {\n\t\t\tvar isSuccess, success, error, response, modified,\n\t\t\t\tstatusText = nativeStatusText;\n\n\t\t\t// Called once\n\t\t\tif ( state === 2 ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// State is \"done\" now\n\t\t\tstate = 2;\n\n\t\t\t// Clear timeout if it exists\n\t\t\tif ( timeoutTimer ) {\n\t\t\t\twindow.clearTimeout( timeoutTimer );\n\t\t\t}\n\n\t\t\t// Dereference transport for early garbage collection\n\t\t\t// (no matter how long the jqXHR object will be used)\n\t\t\ttransport = undefined;\n\n\t\t\t// Cache response headers\n\t\t\tresponseHeadersString = headers || \"\";\n\n\t\t\t// Set readyState\n\t\t\tjqXHR.readyState = status > 0 ? 4 : 0;\n\n\t\t\t// Determine if successful\n\t\t\tisSuccess = status >= 200 && status < 300 || status === 304;\n\n\t\t\t// Get response data\n\t\t\tif ( responses ) {\n\t\t\t\tresponse = ajaxHandleResponses( s, jqXHR, responses );\n\t\t\t}\n\n\t\t\t// Convert no matter what (that way responseXXX fields are always set)\n\t\t\tresponse = ajaxConvert( s, response, jqXHR, isSuccess );\n\n\t\t\t// If successful, handle type chaining\n\t\t\tif ( isSuccess ) {\n\n\t\t\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\t\t\tif ( s.ifModified ) {\n\t\t\t\t\tmodified = jqXHR.getResponseHeader( \"Last-Modified\" );\n\t\t\t\t\tif ( modified ) {\n\t\t\t\t\t\tjQuery.lastModified[ cacheURL ] = modified;\n\t\t\t\t\t}\n\t\t\t\t\tmodified = jqXHR.getResponseHeader( \"etag\" );\n\t\t\t\t\tif ( modified ) {\n\t\t\t\t\t\tjQuery.etag[ cacheURL ] = modified;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// if no content\n\t\t\t\tif ( status === 204 || s.type === \"HEAD\" ) {\n\t\t\t\t\tstatusText = \"nocontent\";\n\n\t\t\t\t// if not modified\n\t\t\t\t} else if ( status === 304 ) {\n\t\t\t\t\tstatusText = \"notmodified\";\n\n\t\t\t\t// If we have data, let's convert it\n\t\t\t\t} else {\n\t\t\t\t\tstatusText = response.state;\n\t\t\t\t\tsuccess = response.data;\n\t\t\t\t\terror = response.error;\n\t\t\t\t\tisSuccess = !error;\n\t\t\t\t}\n\t\t\t} else {\n\n\t\t\t\t// Extract error from statusText and normalize for non-aborts\n\t\t\t\terror = statusText;\n\t\t\t\tif ( status || !statusText ) {\n\t\t\t\t\tstatusText = \"error\";\n\t\t\t\t\tif ( status < 0 ) {\n\t\t\t\t\t\tstatus = 0;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Set data for the fake xhr object\n\t\t\tjqXHR.status = status;\n\t\t\tjqXHR.statusText = ( nativeStatusText || statusText ) + \"\";\n\n\t\t\t// Success/Error\n\t\t\tif ( isSuccess ) {\n\t\t\t\tdeferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );\n\t\t\t} else {\n\t\t\t\tdeferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );\n\t\t\t}\n\n\t\t\t// Status-dependent callbacks\n\t\t\tjqXHR.statusCode( statusCode );\n\t\t\tstatusCode = undefined;\n\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( isSuccess ? \"ajaxSuccess\" : \"ajaxError\",\n\t\t\t\t\t[ jqXHR, s, isSuccess ? success : error ] );\n\t\t\t}\n\n\t\t\t// Complete\n\t\t\tcompleteDeferred.fireWith( callbackContext, [ jqXHR, statusText ] );\n\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( \"ajaxComplete\", [ jqXHR, s ] );\n\n\t\t\t\t// Handle the global AJAX counter\n\t\t\t\tif ( !( --jQuery.active ) ) {\n\t\t\t\t\tjQuery.event.trigger( \"ajaxStop\" );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn jqXHR;\n\t},\n\n\tgetJSON: function( url, data, callback ) {\n\t\treturn jQuery.get( url, data, callback, \"json\" );\n\t},\n\n\tgetScript: function( url, callback ) {\n\t\treturn jQuery.get( url, undefined, callback, \"script\" );\n\t}\n} );\n\njQuery.each( [ \"get\", \"post\" ], function( i, method ) {\n\tjQuery[ method ] = function( url, data, callback, type ) {\n\n\t\t// Shift arguments if data argument was omitted\n\t\tif ( jQuery.isFunction( data ) ) {\n\t\t\ttype = type || callback;\n\t\t\tcallback = data;\n\t\t\tdata = undefined;\n\t\t}\n\n\t\t// The url can be an options object (which then must have .url)\n\t\treturn jQuery.ajax( jQuery.extend( {\n\t\t\turl: url,\n\t\t\ttype: method,\n\t\t\tdataType: type,\n\t\t\tdata: data,\n\t\t\tsuccess: callback\n\t\t}, jQuery.isPlainObject( url ) && url ) );\n\t};\n} );\n\n\njQuery._evalUrl = function( url ) {\n\treturn jQuery.ajax( {\n\t\turl: url,\n\n\t\t// Make this explicit, since user can override this through ajaxSetup (#11264)\n\t\ttype: \"GET\",\n\t\tdataType: \"script\",\n\t\tasync: false,\n\t\tglobal: false,\n\t\t\"throws\": true\n\t} );\n};\n\n\njQuery.fn.extend( {\n\twrapAll: function( html ) {\n\t\tvar wrap;\n\n\t\tif ( jQuery.isFunction( html ) ) {\n\t\t\treturn this.each( function( i ) {\n\t\t\t\tjQuery( this ).wrapAll( html.call( this, i ) );\n\t\t\t} );\n\t\t}\n\n\t\tif ( this[ 0 ] ) {\n\n\t\t\t// The elements to wrap the target around\n\t\t\twrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true );\n\n\t\t\tif ( this[ 0 ].parentNode ) {\n\t\t\t\twrap.insertBefore( this[ 0 ] );\n\t\t\t}\n\n\t\t\twrap.map( function() {\n\t\t\t\tvar elem = this;\n\n\t\t\t\twhile ( elem.firstElementChild ) {\n\t\t\t\t\telem = elem.firstElementChild;\n\t\t\t\t}\n\n\t\t\t\treturn elem;\n\t\t\t} ).append( this );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\twrapInner: function( html ) {\n\t\tif ( jQuery.isFunction( html ) ) {\n\t\t\treturn this.each( function( i ) {\n\t\t\t\tjQuery( this ).wrapInner( html.call( this, i ) );\n\t\t\t} );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar self = jQuery( this ),\n\t\t\t\tcontents = self.contents();\n\n\t\t\tif ( contents.length ) {\n\t\t\t\tcontents.wrapAll( html );\n\n\t\t\t} else {\n\t\t\t\tself.append( html );\n\t\t\t}\n\t\t} );\n\t},\n\n\twrap: function( html ) {\n\t\tvar isFunction = jQuery.isFunction( html );\n\n\t\treturn this.each( function( i ) {\n\t\t\tjQuery( this ).wrapAll( isFunction ? html.call( this, i ) : html );\n\t\t} );\n\t},\n\n\tunwrap: function() {\n\t\treturn this.parent().each( function() {\n\t\t\tif ( !jQuery.nodeName( this, \"body\" ) ) {\n\t\t\t\tjQuery( this ).replaceWith( this.childNodes );\n\t\t\t}\n\t\t} ).end();\n\t}\n} );\n\n\njQuery.expr.filters.hidden = function( elem ) {\n\treturn !jQuery.expr.filters.visible( elem );\n};\njQuery.expr.filters.visible = function( elem ) {\n\n\t// Support: Opera <= 12.12\n\t// Opera reports offsetWidths and offsetHeights less than zero on some elements\n\t// Use OR instead of AND as the element is not visible if either is true\n\t// See tickets #10406 and #13132\n\treturn elem.offsetWidth > 0 || elem.offsetHeight > 0 || elem.getClientRects().length > 0;\n};\n\n\n\n\nvar r20 = /%20/g,\n\trbracket = /\\[\\]$/,\n\trCRLF = /\\r?\\n/g,\n\trsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,\n\trsubmittable = /^(?:input|select|textarea|keygen)/i;\n\nfunction buildParams( prefix, obj, traditional, add ) {\n\tvar name;\n\n\tif ( jQuery.isArray( obj ) ) {\n\n\t\t// Serialize array item.\n\t\tjQuery.each( obj, function( i, v ) {\n\t\t\tif ( traditional || rbracket.test( prefix ) ) {\n\n\t\t\t\t// Treat each array item as a scalar.\n\t\t\t\tadd( prefix, v );\n\n\t\t\t} else {\n\n\t\t\t\t// Item is non-scalar (array or object), encode its numeric index.\n\t\t\t\tbuildParams(\n\t\t\t\t\tprefix + \"[\" + ( typeof v === \"object\" && v != null ? i : \"\" ) + \"]\",\n\t\t\t\t\tv,\n\t\t\t\t\ttraditional,\n\t\t\t\t\tadd\n\t\t\t\t);\n\t\t\t}\n\t\t} );\n\n\t} else if ( !traditional && jQuery.type( obj ) === \"object\" ) {\n\n\t\t// Serialize object item.\n\t\tfor ( name in obj ) {\n\t\t\tbuildParams( prefix + \"[\" + name + \"]\", obj[ name ], traditional, add );\n\t\t}\n\n\t} else {\n\n\t\t// Serialize scalar item.\n\t\tadd( prefix, obj );\n\t}\n}\n\n// Serialize an array of form elements or a set of\n// key/values into a query string\njQuery.param = function( a, traditional ) {\n\tvar prefix,\n\t\ts = [],\n\t\tadd = function( key, value ) {\n\n\t\t\t// If value is a function, invoke it and return its value\n\t\t\tvalue = jQuery.isFunction( value ) ? value() : ( value == null ? \"\" : value );\n\t\t\ts[ s.length ] = encodeURIComponent( key ) + \"=\" + encodeURIComponent( value );\n\t\t};\n\n\t// Set traditional to true for jQuery <= 1.3.2 behavior.\n\tif ( traditional === undefined ) {\n\t\ttraditional = jQuery.ajaxSettings && jQuery.ajaxSettings.traditional;\n\t}\n\n\t// If an array was passed in, assume that it is an array of form elements.\n\tif ( jQuery.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {\n\n\t\t// Serialize the form elements\n\t\tjQuery.each( a, function() {\n\t\t\tadd( this.name, this.value );\n\t\t} );\n\n\t} else {\n\n\t\t// If traditional, encode the \"old\" way (the way 1.3.2 or older\n\t\t// did it), otherwise encode params recursively.\n\t\tfor ( prefix in a ) {\n\t\t\tbuildParams( prefix, a[ prefix ], traditional, add );\n\t\t}\n\t}\n\n\t// Return the resulting serialization\n\treturn s.join( \"&\" ).replace( r20, \"+\" );\n};\n\njQuery.fn.extend( {\n\tserialize: function() {\n\t\treturn jQuery.param( this.serializeArray() );\n\t},\n\tserializeArray: function() {\n\t\treturn this.map( function() {\n\n\t\t\t// Can add propHook for \"elements\" to filter or add form elements\n\t\t\tvar elements = jQuery.prop( this, \"elements\" );\n\t\t\treturn elements ? jQuery.makeArray( elements ) : this;\n\t\t} )\n\t\t.filter( function() {\n\t\t\tvar type = this.type;\n\n\t\t\t// Use .is( \":disabled\" ) so that fieldset[disabled] works\n\t\t\treturn this.name && !jQuery( this ).is( \":disabled\" ) &&\n\t\t\t\trsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) &&\n\t\t\t\t( this.checked || !rcheckableType.test( type ) );\n\t\t} )\n\t\t.map( function( i, elem ) {\n\t\t\tvar val = jQuery( this ).val();\n\n\t\t\treturn val == null ?\n\t\t\t\tnull :\n\t\t\t\tjQuery.isArray( val ) ?\n\t\t\t\t\tjQuery.map( val, function( val ) {\n\t\t\t\t\t\treturn { name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\n\t\t\t\t\t} ) :\n\t\t\t\t\t{ name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\n\t\t} ).get();\n\t}\n} );\n\n\njQuery.ajaxSettings.xhr = function() {\n\ttry {\n\t\treturn new window.XMLHttpRequest();\n\t} catch ( e ) {}\n};\n\nvar xhrSuccessStatus = {\n\n\t\t// File protocol always yields status code 0, assume 200\n\t\t0: 200,\n\n\t\t// Support: IE9\n\t\t// #1450: sometimes IE returns 1223 when it should be 204\n\t\t1223: 204\n\t},\n\txhrSupported = jQuery.ajaxSettings.xhr();\n\nsupport.cors = !!xhrSupported && ( \"withCredentials\" in xhrSupported );\nsupport.ajax = xhrSupported = !!xhrSupported;\n\njQuery.ajaxTransport( function( options ) {\n\tvar callback, errorCallback;\n\n\t// Cross domain only allowed if supported through XMLHttpRequest\n\tif ( support.cors || xhrSupported && !options.crossDomain ) {\n\t\treturn {\n\t\t\tsend: function( headers, complete ) {\n\t\t\t\tvar i,\n\t\t\t\t\txhr = options.xhr();\n\n\t\t\t\txhr.open(\n\t\t\t\t\toptions.type,\n\t\t\t\t\toptions.url,\n\t\t\t\t\toptions.async,\n\t\t\t\t\toptions.username,\n\t\t\t\t\toptions.password\n\t\t\t\t);\n\n\t\t\t\t// Apply custom fields if provided\n\t\t\t\tif ( options.xhrFields ) {\n\t\t\t\t\tfor ( i in options.xhrFields ) {\n\t\t\t\t\t\txhr[ i ] = options.xhrFields[ i ];\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Override mime type if needed\n\t\t\t\tif ( options.mimeType && xhr.overrideMimeType ) {\n\t\t\t\t\txhr.overrideMimeType( options.mimeType );\n\t\t\t\t}\n\n\t\t\t\t// X-Requested-With header\n\t\t\t\t// For cross-domain requests, seeing as conditions for a preflight are\n\t\t\t\t// akin to a jigsaw puzzle, we simply never set it to be sure.\n\t\t\t\t// (it can always be set on a per-request basis or even using ajaxSetup)\n\t\t\t\t// For same-domain requests, won't change header if already provided.\n\t\t\t\tif ( !options.crossDomain && !headers[ \"X-Requested-With\" ] ) {\n\t\t\t\t\theaders[ \"X-Requested-With\" ] = \"XMLHttpRequest\";\n\t\t\t\t}\n\n\t\t\t\t// Set headers\n\t\t\t\tfor ( i in headers ) {\n\t\t\t\t\txhr.setRequestHeader( i, headers[ i ] );\n\t\t\t\t}\n\n\t\t\t\t// Callback\n\t\t\t\tcallback = function( type ) {\n\t\t\t\t\treturn function() {\n\t\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\t\tcallback = errorCallback = xhr.onload =\n\t\t\t\t\t\t\t\txhr.onerror = xhr.onabort = xhr.onreadystatechange = null;\n\n\t\t\t\t\t\t\tif ( type === \"abort\" ) {\n\t\t\t\t\t\t\t\txhr.abort();\n\t\t\t\t\t\t\t} else if ( type === \"error\" ) {\n\n\t\t\t\t\t\t\t\t// Support: IE9\n\t\t\t\t\t\t\t\t// On a manual native abort, IE9 throws\n\t\t\t\t\t\t\t\t// errors on any property access that is not readyState\n\t\t\t\t\t\t\t\tif ( typeof xhr.status !== \"number\" ) {\n\t\t\t\t\t\t\t\t\tcomplete( 0, \"error\" );\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tcomplete(\n\n\t\t\t\t\t\t\t\t\t\t// File: protocol always yields status 0; see #8605, #14207\n\t\t\t\t\t\t\t\t\t\txhr.status,\n\t\t\t\t\t\t\t\t\t\txhr.statusText\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tcomplete(\n\t\t\t\t\t\t\t\t\txhrSuccessStatus[ xhr.status ] || xhr.status,\n\t\t\t\t\t\t\t\t\txhr.statusText,\n\n\t\t\t\t\t\t\t\t\t// Support: IE9 only\n\t\t\t\t\t\t\t\t\t// IE9 has no XHR2 but throws on binary (trac-11426)\n\t\t\t\t\t\t\t\t\t// For XHR2 non-text, let the caller handle it (gh-2498)\n\t\t\t\t\t\t\t\t\t( xhr.responseType || \"text\" ) !== \"text\"  ||\n\t\t\t\t\t\t\t\t\ttypeof xhr.responseText !== \"string\" ?\n\t\t\t\t\t\t\t\t\t\t{ binary: xhr.response } :\n\t\t\t\t\t\t\t\t\t\t{ text: xhr.responseText },\n\t\t\t\t\t\t\t\t\txhr.getAllResponseHeaders()\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t};\n\n\t\t\t\t// Listen to events\n\t\t\t\txhr.onload = callback();\n\t\t\t\terrorCallback = xhr.onerror = callback( \"error\" );\n\n\t\t\t\t// Support: IE9\n\t\t\t\t// Use onreadystatechange to replace onabort\n\t\t\t\t// to handle uncaught aborts\n\t\t\t\tif ( xhr.onabort !== undefined ) {\n\t\t\t\t\txhr.onabort = errorCallback;\n\t\t\t\t} else {\n\t\t\t\t\txhr.onreadystatechange = function() {\n\n\t\t\t\t\t\t// Check readyState before timeout as it changes\n\t\t\t\t\t\tif ( xhr.readyState === 4 ) {\n\n\t\t\t\t\t\t\t// Allow onerror to be called first,\n\t\t\t\t\t\t\t// but that will not handle a native abort\n\t\t\t\t\t\t\t// Also, save errorCallback to a variable\n\t\t\t\t\t\t\t// as xhr.onerror cannot be accessed\n\t\t\t\t\t\t\twindow.setTimeout( function() {\n\t\t\t\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\t\t\t\terrorCallback();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\t// Create the abort callback\n\t\t\t\tcallback = callback( \"abort\" );\n\n\t\t\t\ttry {\n\n\t\t\t\t\t// Do send the request (this may raise an exception)\n\t\t\t\t\txhr.send( options.hasContent && options.data || null );\n\t\t\t\t} catch ( e ) {\n\n\t\t\t\t\t// #14683: Only rethrow if this hasn't been notified as an error yet\n\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\tthrow e;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tabort: function() {\n\t\t\t\tif ( callback ) {\n\t\t\t\t\tcallback();\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n} );\n\n\n\n\n// Install script dataType\njQuery.ajaxSetup( {\n\taccepts: {\n\t\tscript: \"text/javascript, application/javascript, \" +\n\t\t\t\"application/ecmascript, application/x-ecmascript\"\n\t},\n\tcontents: {\n\t\tscript: /\\b(?:java|ecma)script\\b/\n\t},\n\tconverters: {\n\t\t\"text script\": function( text ) {\n\t\t\tjQuery.globalEval( text );\n\t\t\treturn text;\n\t\t}\n\t}\n} );\n\n// Handle cache's special case and crossDomain\njQuery.ajaxPrefilter( \"script\", function( s ) {\n\tif ( s.cache === undefined ) {\n\t\ts.cache = false;\n\t}\n\tif ( s.crossDomain ) {\n\t\ts.type = \"GET\";\n\t}\n} );\n\n// Bind script tag hack transport\njQuery.ajaxTransport( \"script\", function( s ) {\n\n\t// This transport only deals with cross domain requests\n\tif ( s.crossDomain ) {\n\t\tvar script, callback;\n\t\treturn {\n\t\t\tsend: function( _, complete ) {\n\t\t\t\tscript = jQuery( \"<script>\" ).prop( {\n\t\t\t\t\tcharset: s.scriptCharset,\n\t\t\t\t\tsrc: s.url\n\t\t\t\t} ).on(\n\t\t\t\t\t\"load error\",\n\t\t\t\t\tcallback = function( evt ) {\n\t\t\t\t\t\tscript.remove();\n\t\t\t\t\t\tcallback = null;\n\t\t\t\t\t\tif ( evt ) {\n\t\t\t\t\t\t\tcomplete( evt.type === \"error\" ? 404 : 200, evt.type );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t);\n\n\t\t\t\t// Use native DOM manipulation to avoid our domManip AJAX trickery\n\t\t\t\tdocument.head.appendChild( script[ 0 ] );\n\t\t\t},\n\t\t\tabort: function() {\n\t\t\t\tif ( callback ) {\n\t\t\t\t\tcallback();\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n} );\n\n\n\n\nvar oldCallbacks = [],\n\trjsonp = /(=)\\?(?=&|$)|\\?\\?/;\n\n// Default jsonp settings\njQuery.ajaxSetup( {\n\tjsonp: \"callback\",\n\tjsonpCallback: function() {\n\t\tvar callback = oldCallbacks.pop() || ( jQuery.expando + \"_\" + ( nonce++ ) );\n\t\tthis[ callback ] = true;\n\t\treturn callback;\n\t}\n} );\n\n// Detect, normalize options and install callbacks for jsonp requests\njQuery.ajaxPrefilter( \"json jsonp\", function( s, originalSettings, jqXHR ) {\n\n\tvar callbackName, overwritten, responseContainer,\n\t\tjsonProp = s.jsonp !== false && ( rjsonp.test( s.url ) ?\n\t\t\t\"url\" :\n\t\t\ttypeof s.data === \"string\" &&\n\t\t\t\t( s.contentType || \"\" )\n\t\t\t\t\t.indexOf( \"application/x-www-form-urlencoded\" ) === 0 &&\n\t\t\t\trjsonp.test( s.data ) && \"data\"\n\t\t);\n\n\t// Handle iff the expected data type is \"jsonp\" or we have a parameter to set\n\tif ( jsonProp || s.dataTypes[ 0 ] === \"jsonp\" ) {\n\n\t\t// Get callback name, remembering preexisting value associated with it\n\t\tcallbackName = s.jsonpCallback = jQuery.isFunction( s.jsonpCallback ) ?\n\t\t\ts.jsonpCallback() :\n\t\t\ts.jsonpCallback;\n\n\t\t// Insert callback into url or form data\n\t\tif ( jsonProp ) {\n\t\t\ts[ jsonProp ] = s[ jsonProp ].replace( rjsonp, \"$1\" + callbackName );\n\t\t} else if ( s.jsonp !== false ) {\n\t\t\ts.url += ( rquery.test( s.url ) ? \"&\" : \"?\" ) + s.jsonp + \"=\" + callbackName;\n\t\t}\n\n\t\t// Use data converter to retrieve json after script execution\n\t\ts.converters[ \"script json\" ] = function() {\n\t\t\tif ( !responseContainer ) {\n\t\t\t\tjQuery.error( callbackName + \" was not called\" );\n\t\t\t}\n\t\t\treturn responseContainer[ 0 ];\n\t\t};\n\n\t\t// Force json dataType\n\t\ts.dataTypes[ 0 ] = \"json\";\n\n\t\t// Install callback\n\t\toverwritten = window[ callbackName ];\n\t\twindow[ callbackName ] = function() {\n\t\t\tresponseContainer = arguments;\n\t\t};\n\n\t\t// Clean-up function (fires after converters)\n\t\tjqXHR.always( function() {\n\n\t\t\t// If previous value didn't exist - remove it\n\t\t\tif ( overwritten === undefined ) {\n\t\t\t\tjQuery( window ).removeProp( callbackName );\n\n\t\t\t// Otherwise restore preexisting value\n\t\t\t} else {\n\t\t\t\twindow[ callbackName ] = overwritten;\n\t\t\t}\n\n\t\t\t// Save back as free\n\t\t\tif ( s[ callbackName ] ) {\n\n\t\t\t\t// Make sure that re-using the options doesn't screw things around\n\t\t\t\ts.jsonpCallback = originalSettings.jsonpCallback;\n\n\t\t\t\t// Save the callback name for future use\n\t\t\t\toldCallbacks.push( callbackName );\n\t\t\t}\n\n\t\t\t// Call if it was a function and we have a response\n\t\t\tif ( responseContainer && jQuery.isFunction( overwritten ) ) {\n\t\t\t\toverwritten( responseContainer[ 0 ] );\n\t\t\t}\n\n\t\t\tresponseContainer = overwritten = undefined;\n\t\t} );\n\n\t\t// Delegate to script\n\t\treturn \"script\";\n\t}\n} );\n\n\n\n\n// Argument \"data\" should be string of html\n// context (optional): If specified, the fragment will be created in this context,\n// defaults to document\n// keepScripts (optional): If true, will include scripts passed in the html string\njQuery.parseHTML = function( data, context, keepScripts ) {\n\tif ( !data || typeof data !== \"string\" ) {\n\t\treturn null;\n\t}\n\tif ( typeof context === \"boolean\" ) {\n\t\tkeepScripts = context;\n\t\tcontext = false;\n\t}\n\tcontext = context || document;\n\n\tvar parsed = rsingleTag.exec( data ),\n\t\tscripts = !keepScripts && [];\n\n\t// Single tag\n\tif ( parsed ) {\n\t\treturn [ context.createElement( parsed[ 1 ] ) ];\n\t}\n\n\tparsed = buildFragment( [ data ], context, scripts );\n\n\tif ( scripts && scripts.length ) {\n\t\tjQuery( scripts ).remove();\n\t}\n\n\treturn jQuery.merge( [], parsed.childNodes );\n};\n\n\n// Keep a copy of the old load method\nvar _load = jQuery.fn.load;\n\n/**\n * Load a url into a page\n */\njQuery.fn.load = function( url, params, callback ) {\n\tif ( typeof url !== \"string\" && _load ) {\n\t\treturn _load.apply( this, arguments );\n\t}\n\n\tvar selector, type, response,\n\t\tself = this,\n\t\toff = url.indexOf( \" \" );\n\n\tif ( off > -1 ) {\n\t\tselector = jQuery.trim( url.slice( off ) );\n\t\turl = url.slice( 0, off );\n\t}\n\n\t// If it's a function\n\tif ( jQuery.isFunction( params ) ) {\n\n\t\t// We assume that it's the callback\n\t\tcallback = params;\n\t\tparams = undefined;\n\n\t// Otherwise, build a param string\n\t} else if ( params && typeof params === \"object\" ) {\n\t\ttype = \"POST\";\n\t}\n\n\t// If we have elements to modify, make the request\n\tif ( self.length > 0 ) {\n\t\tjQuery.ajax( {\n\t\t\turl: url,\n\n\t\t\t// If \"type\" variable is undefined, then \"GET\" method will be used.\n\t\t\t// Make value of this field explicit since\n\t\t\t// user can override it through ajaxSetup method\n\t\t\ttype: type || \"GET\",\n\t\t\tdataType: \"html\",\n\t\t\tdata: params\n\t\t} ).done( function( responseText ) {\n\n\t\t\t// Save response for use in complete callback\n\t\t\tresponse = arguments;\n\n\t\t\tself.html( selector ?\n\n\t\t\t\t// If a selector was specified, locate the right elements in a dummy div\n\t\t\t\t// Exclude scripts to avoid IE 'Permission Denied' errors\n\t\t\t\tjQuery( \"<div>\" ).append( jQuery.parseHTML( responseText ) ).find( selector ) :\n\n\t\t\t\t// Otherwise use the full result\n\t\t\t\tresponseText );\n\n\t\t// If the request succeeds, this function gets \"data\", \"status\", \"jqXHR\"\n\t\t// but they are ignored because response was set above.\n\t\t// If it fails, this function gets \"jqXHR\", \"status\", \"error\"\n\t\t} ).always( callback && function( jqXHR, status ) {\n\t\t\tself.each( function() {\n\t\t\t\tcallback.apply( this, response || [ jqXHR.responseText, status, jqXHR ] );\n\t\t\t} );\n\t\t} );\n\t}\n\n\treturn this;\n};\n\n\n\n\n// Attach a bunch of functions for handling common AJAX events\njQuery.each( [\n\t\"ajaxStart\",\n\t\"ajaxStop\",\n\t\"ajaxComplete\",\n\t\"ajaxError\",\n\t\"ajaxSuccess\",\n\t\"ajaxSend\"\n], function( i, type ) {\n\tjQuery.fn[ type ] = function( fn ) {\n\t\treturn this.on( type, fn );\n\t};\n} );\n\n\n\n\njQuery.expr.filters.animated = function( elem ) {\n\treturn jQuery.grep( jQuery.timers, function( fn ) {\n\t\treturn elem === fn.elem;\n\t} ).length;\n};\n\n\n\n\n/**\n * Gets a window from an element\n */\nfunction getWindow( elem ) {\n\treturn jQuery.isWindow( elem ) ? elem : elem.nodeType === 9 && elem.defaultView;\n}\n\njQuery.offset = {\n\tsetOffset: function( elem, options, i ) {\n\t\tvar curPosition, curLeft, curCSSTop, curTop, curOffset, curCSSLeft, calculatePosition,\n\t\t\tposition = jQuery.css( elem, \"position\" ),\n\t\t\tcurElem = jQuery( elem ),\n\t\t\tprops = {};\n\n\t\t// Set position first, in-case top/left are set even on static elem\n\t\tif ( position === \"static\" ) {\n\t\t\telem.style.position = \"relative\";\n\t\t}\n\n\t\tcurOffset = curElem.offset();\n\t\tcurCSSTop = jQuery.css( elem, \"top\" );\n\t\tcurCSSLeft = jQuery.css( elem, \"left\" );\n\t\tcalculatePosition = ( position === \"absolute\" || position === \"fixed\" ) &&\n\t\t\t( curCSSTop + curCSSLeft ).indexOf( \"auto\" ) > -1;\n\n\t\t// Need to be able to calculate position if either\n\t\t// top or left is auto and position is either absolute or fixed\n\t\tif ( calculatePosition ) {\n\t\t\tcurPosition = curElem.position();\n\t\t\tcurTop = curPosition.top;\n\t\t\tcurLeft = curPosition.left;\n\n\t\t} else {\n\t\t\tcurTop = parseFloat( curCSSTop ) || 0;\n\t\t\tcurLeft = parseFloat( curCSSLeft ) || 0;\n\t\t}\n\n\t\tif ( jQuery.isFunction( options ) ) {\n\n\t\t\t// Use jQuery.extend here to allow modification of coordinates argument (gh-1848)\n\t\t\toptions = options.call( elem, i, jQuery.extend( {}, curOffset ) );\n\t\t}\n\n\t\tif ( options.top != null ) {\n\t\t\tprops.top = ( options.top - curOffset.top ) + curTop;\n\t\t}\n\t\tif ( options.left != null ) {\n\t\t\tprops.left = ( options.left - curOffset.left ) + curLeft;\n\t\t}\n\n\t\tif ( \"using\" in options ) {\n\t\t\toptions.using.call( elem, props );\n\n\t\t} else {\n\t\t\tcurElem.css( props );\n\t\t}\n\t}\n};\n\njQuery.fn.extend( {\n\toffset: function( options ) {\n\t\tif ( arguments.length ) {\n\t\t\treturn options === undefined ?\n\t\t\t\tthis :\n\t\t\t\tthis.each( function( i ) {\n\t\t\t\t\tjQuery.offset.setOffset( this, options, i );\n\t\t\t\t} );\n\t\t}\n\n\t\tvar docElem, win,\n\t\t\telem = this[ 0 ],\n\t\t\tbox = { top: 0, left: 0 },\n\t\t\tdoc = elem && elem.ownerDocument;\n\n\t\tif ( !doc ) {\n\t\t\treturn;\n\t\t}\n\n\t\tdocElem = doc.documentElement;\n\n\t\t// Make sure it's not a disconnected DOM node\n\t\tif ( !jQuery.contains( docElem, elem ) ) {\n\t\t\treturn box;\n\t\t}\n\n\t\tbox = elem.getBoundingClientRect();\n\t\twin = getWindow( doc );\n\t\treturn {\n\t\t\ttop: box.top + win.pageYOffset - docElem.clientTop,\n\t\t\tleft: box.left + win.pageXOffset - docElem.clientLeft\n\t\t};\n\t},\n\n\tposition: function() {\n\t\tif ( !this[ 0 ] ) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar offsetParent, offset,\n\t\t\telem = this[ 0 ],\n\t\t\tparentOffset = { top: 0, left: 0 };\n\n\t\t// Fixed elements are offset from window (parentOffset = {top:0, left: 0},\n\t\t// because it is its only offset parent\n\t\tif ( jQuery.css( elem, \"position\" ) === \"fixed\" ) {\n\n\t\t\t// Assume getBoundingClientRect is there when computed position is fixed\n\t\t\toffset = elem.getBoundingClientRect();\n\n\t\t} else {\n\n\t\t\t// Get *real* offsetParent\n\t\t\toffsetParent = this.offsetParent();\n\n\t\t\t// Get correct offsets\n\t\t\toffset = this.offset();\n\t\t\tif ( !jQuery.nodeName( offsetParent[ 0 ], \"html\" ) ) {\n\t\t\t\tparentOffset = offsetParent.offset();\n\t\t\t}\n\n\t\t\t// Add offsetParent borders\n\t\t\tparentOffset.top += jQuery.css( offsetParent[ 0 ], \"borderTopWidth\", true );\n\t\t\tparentOffset.left += jQuery.css( offsetParent[ 0 ], \"borderLeftWidth\", true );\n\t\t}\n\n\t\t// Subtract parent offsets and element margins\n\t\treturn {\n\t\t\ttop: offset.top - parentOffset.top - jQuery.css( elem, \"marginTop\", true ),\n\t\t\tleft: offset.left - parentOffset.left - jQuery.css( elem, \"marginLeft\", true )\n\t\t};\n\t},\n\n\t// This method will return documentElement in the following cases:\n\t// 1) For the element inside the iframe without offsetParent, this method will return\n\t//    documentElement of the parent window\n\t// 2) For the hidden or detached element\n\t// 3) For body or html element, i.e. in case of the html node - it will return itself\n\t//\n\t// but those exceptions were never presented as a real life use-cases\n\t// and might be considered as more preferable results.\n\t//\n\t// This logic, however, is not guaranteed and can change at any point in the future\n\toffsetParent: function() {\n\t\treturn this.map( function() {\n\t\t\tvar offsetParent = this.offsetParent;\n\n\t\t\twhile ( offsetParent && jQuery.css( offsetParent, \"position\" ) === \"static\" ) {\n\t\t\t\toffsetParent = offsetParent.offsetParent;\n\t\t\t}\n\n\t\t\treturn offsetParent || documentElement;\n\t\t} );\n\t}\n} );\n\n// Create scrollLeft and scrollTop methods\njQuery.each( { scrollLeft: \"pageXOffset\", scrollTop: \"pageYOffset\" }, function( method, prop ) {\n\tvar top = \"pageYOffset\" === prop;\n\n\tjQuery.fn[ method ] = function( val ) {\n\t\treturn access( this, function( elem, method, val ) {\n\t\t\tvar win = getWindow( elem );\n\n\t\t\tif ( val === undefined ) {\n\t\t\t\treturn win ? win[ prop ] : elem[ method ];\n\t\t\t}\n\n\t\t\tif ( win ) {\n\t\t\t\twin.scrollTo(\n\t\t\t\t\t!top ? val : win.pageXOffset,\n\t\t\t\t\ttop ? val : win.pageYOffset\n\t\t\t\t);\n\n\t\t\t} else {\n\t\t\t\telem[ method ] = val;\n\t\t\t}\n\t\t}, method, val, arguments.length );\n\t};\n} );\n\n// Support: Safari<7-8+, Chrome<37-44+\n// Add the top/left cssHooks using jQuery.fn.position\n// Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084\n// Blink bug: https://code.google.com/p/chromium/issues/detail?id=229280\n// getComputedStyle returns percent when specified for top/left/bottom/right;\n// rather than make the css module depend on the offset module, just check for it here\njQuery.each( [ \"top\", \"left\" ], function( i, prop ) {\n\tjQuery.cssHooks[ prop ] = addGetHookIf( support.pixelPosition,\n\t\tfunction( elem, computed ) {\n\t\t\tif ( computed ) {\n\t\t\t\tcomputed = curCSS( elem, prop );\n\n\t\t\t\t// If curCSS returns percentage, fallback to offset\n\t\t\t\treturn rnumnonpx.test( computed ) ?\n\t\t\t\t\tjQuery( elem ).position()[ prop ] + \"px\" :\n\t\t\t\t\tcomputed;\n\t\t\t}\n\t\t}\n\t);\n} );\n\n\n// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods\njQuery.each( { Height: \"height\", Width: \"width\" }, function( name, type ) {\n\tjQuery.each( { padding: \"inner\" + name, content: type, \"\": \"outer\" + name },\n\t\tfunction( defaultExtra, funcName ) {\n\n\t\t// Margin is only for outerHeight, outerWidth\n\t\tjQuery.fn[ funcName ] = function( margin, value ) {\n\t\t\tvar chainable = arguments.length && ( defaultExtra || typeof margin !== \"boolean\" ),\n\t\t\t\textra = defaultExtra || ( margin === true || value === true ? \"margin\" : \"border\" );\n\n\t\t\treturn access( this, function( elem, type, value ) {\n\t\t\t\tvar doc;\n\n\t\t\t\tif ( jQuery.isWindow( elem ) ) {\n\n\t\t\t\t\t// As of 5/8/2012 this will yield incorrect results for Mobile Safari, but there\n\t\t\t\t\t// isn't a whole lot we can do. See pull request at this URL for discussion:\n\t\t\t\t\t// https://github.com/jquery/jquery/pull/764\n\t\t\t\t\treturn elem.document.documentElement[ \"client\" + name ];\n\t\t\t\t}\n\n\t\t\t\t// Get document width or height\n\t\t\t\tif ( elem.nodeType === 9 ) {\n\t\t\t\t\tdoc = elem.documentElement;\n\n\t\t\t\t\t// Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height],\n\t\t\t\t\t// whichever is greatest\n\t\t\t\t\treturn Math.max(\n\t\t\t\t\t\telem.body[ \"scroll\" + name ], doc[ \"scroll\" + name ],\n\t\t\t\t\t\telem.body[ \"offset\" + name ], doc[ \"offset\" + name ],\n\t\t\t\t\t\tdoc[ \"client\" + name ]\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\treturn value === undefined ?\n\n\t\t\t\t\t// Get width or height on the element, requesting but not forcing parseFloat\n\t\t\t\t\tjQuery.css( elem, type, extra ) :\n\n\t\t\t\t\t// Set width or height on the element\n\t\t\t\t\tjQuery.style( elem, type, value, extra );\n\t\t\t}, type, chainable ? margin : undefined, chainable, null );\n\t\t};\n\t} );\n} );\n\n\njQuery.fn.extend( {\n\n\tbind: function( types, data, fn ) {\n\t\treturn this.on( types, null, data, fn );\n\t},\n\tunbind: function( types, fn ) {\n\t\treturn this.off( types, null, fn );\n\t},\n\n\tdelegate: function( selector, types, data, fn ) {\n\t\treturn this.on( types, selector, data, fn );\n\t},\n\tundelegate: function( selector, types, fn ) {\n\n\t\t// ( namespace ) or ( selector, types [, fn] )\n\t\treturn arguments.length === 1 ?\n\t\t\tthis.off( selector, \"**\" ) :\n\t\t\tthis.off( types, selector || \"**\", fn );\n\t},\n\tsize: function() {\n\t\treturn this.length;\n\t}\n} );\n\njQuery.fn.andSelf = jQuery.fn.addBack;\n\n\n\n\n// Register as a named AMD module, since jQuery can be concatenated with other\n// files that may use define, but not via a proper concatenation script that\n// understands anonymous AMD modules. A named AMD is safest and most robust\n// way to register. Lowercase jquery is used because AMD module names are\n// derived from file names, and jQuery is normally delivered in a lowercase\n// file name. Do this after creating the global so that if an AMD module wants\n// to call noConflict to hide this version of jQuery, it will work.\n\n// Note that for maximum portability, libraries that are not jQuery should\n// declare themselves as anonymous modules, and avoid setting a global if an\n// AMD loader is present. jQuery is a special case. For more information, see\n// https://github.com/jrburke/requirejs/wiki/Updating-existing-libraries#wiki-anon\n\nif ( typeof define === \"function\" && define.amd ) {\n\tdefine( \"jquery\", [], function() {\n\t\treturn jQuery;\n\t} );\n}\n\n\n\nvar\n\n\t// Map over jQuery in case of overwrite\n\t_jQuery = window.jQuery,\n\n\t// Map over the $ in case of overwrite\n\t_$ = window.$;\n\njQuery.noConflict = function( deep ) {\n\tif ( window.$ === jQuery ) {\n\t\twindow.$ = _$;\n\t}\n\n\tif ( deep && window.jQuery === jQuery ) {\n\t\twindow.jQuery = _jQuery;\n\t}\n\n\treturn jQuery;\n};\n\n// Expose jQuery and $ identifiers, even in AMD\n// (#7102#comment:10, https://github.com/jquery/jquery/pull/557)\n// and CommonJS for browser emulators (#13566)\nif ( !noGlobal ) {\n\twindow.jQuery = window.$ = jQuery;\n}\n\nreturn jQuery;\n}));\n","/**\r\n * Created by gavorhes on 12/14/2015.\r\n */\r\n\r\nimport LayerItsInventory from '../layers/LayerItsInventory';\r\nimport * as colors from '../util/colors';\r\nimport provide from '../util/provide';\r\nlet nm = provide('collections');\r\n\r\n\r\nlet itsConfig = [\r\n    {name: 'Camera', itsType: 'cctv', minZoom: 11, itsIcon: 'cctv.png'},\r\n    {\r\n        name: 'Message Signs',\r\n        itsType: 'DMS',\r\n        minZoom: 11,\r\n        itsIconConfig: {\r\n            prop: 'dmsType',\r\n            defaultName: 'DMS',\r\n            defaultIcon: 'dms.png',\r\n            iconArray: [\r\n                ['pcms', 'PCMS', 'pcms.png']\r\n            ]\r\n        }\r\n    },\r\n    {name: 'Lighting', itsType: 'light', minZoom: 16, itsIcon: 'streetlight.png', visible: false, onDemand: true},\r\n    {name: 'Bluetooth', itsType: 'blue', minZoom: 10, itsIcon: 'bluetooth.png', visible: false},\r\n    {name: 'Cabinets', itsType: 'cabinet', minZoom: 10, itsIcon: 'cabinet.png', visible: false},\r\n    {name: 'Hut', itsType: 'hut', minZoom: 10, itsIcon: 'hut.png', visible: false},\r\n    {name: 'Vault', itsType: 'vault', minZoom: 13, itsIcon: 'vault.png', visible: false},\r\n    {name: 'Advisory Radio', itsType: 'har', minZoom: 10, itsIcon: 'har.png', visible: false},\r\n    {\r\n        name: 'Loop Detectors',\r\n        itsType: 'loop',\r\n        legendCollapse: true,\r\n        minZoom: 14,\r\n        visible: false,\r\n        itsIconConfig: {\r\n            prop: 'dtctrType',\r\n            defaultName: 'Other',\r\n            defaultIcon: 'loopdetectorother.png',\r\n            iconArray: [\r\n                ['detector', 'Detector', 'loopdetector.png'],\r\n                ['long', 'Long', 'loopdetectorlong.png'],\r\n                ['zone', 'Zone', 'loopdetectorzone.png']\r\n            ]\r\n        },\r\n        onDemand: true\r\n    },\r\n    {name: 'Microwave', itsType: 'microwave', minZoom: 14, itsIcon: 'microwave.png', visible: false},\r\n    {name: 'Pull Box', itsType: 'pull', minZoom: 14, itsIcon: 'pullbox.png', visible: false, onDemand: true},\r\n    {name: 'RWIS', itsType: 'rwis', minZoom: 7, itsIcon: 'rwis.png', visible: false},\r\n    {name: 'Ramp Gates', itsType: 'gate', minZoom: 10, itsIcon: 'rampgate.png', visible: false},\r\n    {name: 'Ramp Meter', itsType: 'meter', minZoom: 10, itsIcon: 'rampmeter.png', visible: false},\r\n    {name: 'Signal', itsType: 'signal', minZoom: 13, itsIcon: 'signal.png', visible: false, onDemand: true},\r\n    {name: 'Tower', itsType: 'tower', minZoom: 10, itsIcon: 'tower.png', visible: false},\r\n    {\r\n        name: 'Trench',\r\n        itsType: 'trench',\r\n        onDemand: true,\r\n        visible: false,\r\n        onDemandDelay: 500,\r\n        minZoom: 15,\r\n        legendCollapse: true,\r\n        itsLineConfig: {\r\n            prop: 'owner',\r\n            //defaultName: 'Other',\r\n            //defaultWidth: 7,\r\n            defaultColor: colors.hexAlphaToRgbOrRgba('#747474', 0.8),\r\n            lineArray: [\r\n                ['WisDOT', 'WisDOT', colors.hexAlphaToRgbOrRgba('#FF032F', 0.7)],\r\n                ['WIN', 'WIN', colors.hexAlphaToRgbOrRgba('#FFC632', 0.7)],\r\n                ['USXchange', 'USXchange', colors.hexAlphaToRgbOrRgba('#2DFF46', 0.7)],\r\n                ['AT&T', 'AT&T', colors.hexAlphaToRgbOrRgba('#ff2be5', 0.7)],\r\n                ['Touch America', 'Touch America', colors.hexAlphaToRgbOrRgba('#52f3ff', 0.7)],\r\n                ['Qwest', 'Qwest', colors.hexAlphaToRgbOrRgba('#9278ff', 0.7)],\r\n                ['McLeodUSA', 'McLeodUSA', colors.hexAlphaToRgbOrRgba('#2926FF', 0.7)],\r\n                ['CINC', 'CINC', colors.hexAlphaToRgbOrRgba('#CB00FF', 0.7)],\r\n                ['City of Madison', 'Madison', colors.hexAlphaToRgbOrRgba('#000380', 0.7)]\r\n            ]\r\n        }\r\n    }\r\n\r\n\r\n];\r\n\r\n\r\nclass ItsLayerCollection {\r\n\r\n    /**\r\n     * Create a collection of all ITS layers\r\n     * @param {ol.Map} theMap the openlayers map\r\n     * @param {Array} [exclude=[]] array of Its layer identifiers to exclude\r\n     *\r\n     * BLUE Bluetooth Detector - Bluetooth Detector\r\n     * CABINET Cabinets - The cabinets\r\n     * CCTV Camera - Traffic Cameras\r\n     * HUT Communication Hut - Communication Hut\r\n     * VAULT Communication Vault - The communication vaults\r\n     * HAR Highway Advisory Radio - Advisory Radios\r\n     * LIGHT Lighting - Lighting\r\n     * LOOP Loop Detectors - Loop Detectors\r\n     * DMS Message Board - Message Boards and Signs\r\n     * MICROWAVE Microwave Detector - Microwave Detectors\r\n     * PULL Pull Box - A pull box\r\n     * RWIS RWIS - Road weather information system\r\n     * GATE Ramp Gate - The ramp Gates\r\n     * METER Ramp Meter - The ramp meters\r\n     * SIGNAL Signal - Traffic Signal\r\n     * TOWER Tower - The towers\r\n     * TRENCH\r\n     */\r\n    constructor(theMap, exclude) {\r\n\r\n        this.map = theMap;\r\n        this._layers = [];\r\n\r\n        exclude = typeof exclude == 'object' ? exclude : [];\r\n\r\n        for (let i = 0; i < itsConfig.length; i++) {\r\n            let lyrConfig = itsConfig[i];\r\n            let addLayer = true;\r\n\r\n            for (let j = 0; j < exclude.length; j++) {\r\n                if (exclude[j] == lyrConfig.itsType) {\r\n                    addLayer = false;\r\n                    break;\r\n                }\r\n            }\r\n\r\n            if (addLayer) {\r\n                let inventLyr = new LayerItsInventory(lyrConfig);\r\n                this['map'].addLayer(inventLyr.olLayer);\r\n                this._layers.push(inventLyr);\r\n\r\n            }\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Return the array of layers in this collection\r\n     * @returns {Array<LayerItsInventory>} an array of layers\r\n     */\r\n    get layers() {\r\n        return this._layers;\r\n    }\r\n}\r\n\r\nnm.ItsLayerCollection = ItsLayerCollection;\r\nexport default ItsLayerCollection;\r\n","/**\r\n * Created by gavorhes on 12/16/2015.\r\n */\r\nimport $ from '../jquery';\r\nimport provide from '../util/provide';\r\nimport makeGuid from '../util/makeGuid';\r\nimport mapMove from '../olHelpers/mapMove';\r\nlet nm = provide('collections');\r\n\r\nclass LayerGroup {\r\n\r\n    /**\r\n     *\r\n     * @param {object} [groupConfig={}] - group configuration object\r\n     * @param {string} groupConfig.groupName - the group name\r\n     * @param {boolean} [groupConfig.collapse=false] - if the group should be collapsed initially\r\n     * @param {boolean} [groupConfig.addCheck=true] - if the group should have a checkbox controlling visibility of all layers\r\n     * @param {LayerGroup} [parent=undefined] - the parent group\r\n     */\r\n    constructor(groupConfig, parent) {\r\n        this.groupLayers = [];\r\n        this.groupLayersLookup = {};\r\n        this.groupGroups = [];\r\n        this.groupGroupsLookup = {};\r\n        this.itemIdArray = [];\r\n\r\n        if (typeof groupConfig == 'undefined') {\r\n            this.parent = null;\r\n            this.groupId = 'root';\r\n            this.groupName = 'root';\r\n            this.allGroupLookup = {root: this};\r\n            this.allGroupArray = [this];\r\n            this.allLayerArray = [];\r\n            this.allLayerLookup = {};\r\n            this.layerParentLookup = {};\r\n            this.collapse = false;\r\n            this.addCheck = false;\r\n        } else {\r\n            this.groupId = makeGuid();\r\n            this.parent = parent;\r\n            this.groupName = groupConfig.groupName;\r\n            this.collapse = typeof  groupConfig.collapse == 'boolean' ? groupConfig.collapse : false;\r\n            this.addCheck = typeof  groupConfig.addCheck == 'boolean' ? groupConfig.addCheck : true;\r\n        }\r\n    }\r\n\r\n    /**\r\n     *\r\n     * @param {object} groupConfig - configuration object\r\n     * @param {string} groupConfig.groupName - the group name\r\n     * @param {boolean} groupConfig.collapse if the group should be collapsed initially\r\n     * @param {boolean} groupConfig.addCheck if the group should have a checkbox controlling visibility of all layers\r\n     * @param {Array<LayerGroup>} parents parent groups\r\n     * @returns {LayerGroup} the layer group just added\r\n     */\r\n    addGroup(groupConfig, parents) {\r\n        let parent;\r\n        if (parents.length > 0) {\r\n            parent = parents[parents.length - 1];\r\n        } else {\r\n            parent = 'root';\r\n        }\r\n\r\n\r\n        /**\r\n         * @type {LayerGroup}\r\n         */\r\n        let parentGroup = this.allGroupLookup[parent];\r\n        let newGroup = new LayerGroup(groupConfig, parentGroup);\r\n        this.allGroupLookup[newGroup.groupId] = newGroup;\r\n        this.allGroupArray.push(newGroup);\r\n\r\n        parentGroup.groupGroups.push(newGroup);\r\n        parentGroup.groupGroupsLookup[newGroup.groupId] = newGroup;\r\n\r\n        if (parentGroup.itemIdArray.indexOf(newGroup.groupId) > 0) {\r\n            console.log(newGroup.groupId);\r\n            throw 'layer and group ids must be unique';\r\n        }\r\n        parentGroup.itemIdArray.push(newGroup.groupId);\r\n\r\n        return newGroup;\r\n    }\r\n\r\n    /**\r\n     *\r\n     * @param {LayerBase} newLayer the layer to be added\r\n     * @param {Array} parents array\r\n     */\r\n    addLegendLayer(newLayer, parents) {\r\n        let parent;\r\n        if (parents.length > 0) {\r\n            parent = parents[parents.length - 1];\r\n        } else {\r\n            parent = 'root';\r\n        }\r\n\r\n        this.allLayerLookup[newLayer.id] = newLayer;\r\n        this.allLayerArray.push(newLayer);\r\n\r\n        /**\r\n         * @type {LayerGroup}\r\n         */\r\n        let parentGroup = this.allGroupLookup[parent];\r\n\r\n        parentGroup.groupLayers.push(newLayer);\r\n        parentGroup.groupLayersLookup[newLayer.id] = newLayer;\r\n        if (parentGroup.itemIdArray.indexOf(newLayer.id) > 0) {\r\n            console.log(newLayer.id);\r\n            throw 'layer and group ids must be unique';\r\n        }\r\n        parentGroup.itemIdArray.push(newLayer.id);\r\n\r\n        this.layerParentLookup[newLayer.id] = parentGroup;\r\n\r\n    }\r\n\r\n    getLegendHtml(legendId, options) {\r\n\r\n\r\n        let legendHtml = `<ul id=\"${legendId}\" class=\"legend-container\">`;\r\n\r\n        legendHtml += `<li>${options.legendTitle}<input type=\"checkbox\" checked id=\"suppress-by-extent-${legendId}\" class=\"suppress-by-extent\">` +\r\n            `<label title=\"Suppress layers not visible at this zoom level\" for=\"suppress-by-extent-${legendId}\">` +\r\n            `<span></span>` +\r\n            `</label></li>`;\r\n\r\n        legendHtml += this._buildLegend(this.itemIdArray, this, options.layerDivClasses) + '</ul>';\r\n\r\n        return legendHtml;\r\n    }\r\n\r\n    /**\r\n     * @param {Array} itemIds the items to process\r\n     * @param {LayerGroup} theGroup new group\r\n     * @param {Array} [layerDivClasses=[]] optional classes to apply to the layer divs\r\n     * @static\r\n     * @returns {string} html string\r\n     */\r\n    _buildLegend(itemIds, theGroup, layerDivClasses) {\r\n\r\n        if (itemIds.length == 0) {\r\n            return '';\r\n        }\r\n\r\n        let theHml = '';\r\n\r\n        let itemId = itemIds[0];\r\n\r\n        if (theGroup.groupLayersLookup[itemId]) {\r\n\r\n            /**\r\n             * @type {LayerBase}\r\n             */\r\n            let lyr = theGroup.groupLayersLookup[itemId];\r\n            theHml += `<li id=\"${lyr.id}-layer-li\" class=\"legend-layer-li ${layerDivClasses.join(' ')}\">` + lyr.getLegendDiv() + '</li>';\r\n\r\n\r\n        } else if (theGroup.groupGroupsLookup[itemId]) {\r\n            /**\r\n             * type {LayerGroup}\r\n             */\r\n            let otherGroup = theGroup.groupGroupsLookup[itemId];\r\n\r\n            theHml += `<li>`;\r\n            theHml += `<div id=\"${otherGroup.groupId}-legend-layer-div\" ` +\r\n                `class=\"legend-layer-group  ${layerDivClasses.join(' ')}\">`;\r\n\r\n            if (otherGroup.addCheck) {\r\n                theHml += `<input type=\"checkbox\" checked id=\"${otherGroup.groupId}-group-chck\">` +\r\n                    `<label for=\"${otherGroup.groupId}-group-chck\" title=\"Click arrow to expand or collapse\">${otherGroup.groupName}</label>`;\r\n            } else {\r\n                theHml += `<label title=\"Click arrow to expand or collapse\">${otherGroup.groupName}</label>`;\r\n            }\r\n\r\n            theHml += `<span title=\"Expand/Collapse\" class=\"layer-group-expander`;\r\n            theHml += `${otherGroup.collapse ? ' legend-layer-group-initial-collapse' : ''}\">`;\r\n            theHml += otherGroup.collapse ? '&#9654;' : '&#9660;';\r\n            theHml += '</span>';\r\n\r\n            //parents.push(groupId);\r\n            theHml += '<ul>' + this._buildLegend(otherGroup.itemIdArray, otherGroup, layerDivClasses) + '</ul>';\r\n            theHml += '</div>';\r\n            theHml += '</li>';\r\n        }\r\n\r\n        return theHml + this._buildLegend(itemIds.slice(1), theGroup, layerDivClasses);\r\n    }\r\n}\r\n\r\n/**\r\n * a wrapper to make a legend\r\n */\r\nclass LayerLegend {\r\n\r\n    /**\r\n     *\r\n     * @param {Array} legendItems array of layers or objects with {groupName:  {string}, collapse: {boolean}, addCheck: {boolean}, items: {Array}}\r\n     * @param {string} divId the div where the legend should be added\r\n     * @param {object} options for legend\r\n     * @param {Array} [options.layerDivClasses=[]] optional array of classes to be applied to the layer legend divs for custom styling\r\n     * @param {string} [options.legendTitle=Legend] the legend title\r\n     * @param {bool} [options.scaleDependent=true] if legend display is scale dependent\r\n     */\r\n    constructor(legendItems, divId, options) {\r\n        for (let i of legendItems) {\r\n            if (typeof i == 'undefined') {\r\n                throw 'undefined item passed in array to legend constructor';\r\n            }\r\n        }\r\n\r\n        options = options || {};\r\n\r\n        options.legendTitle = typeof options.legendTitle == 'string' ? options.legendTitle : 'Legend';\r\n        options.scaleDependent = typeof options.scaleDependent == 'boolean' ? options.scaleDependent : true;\r\n        options.layerDivClasses = options.layerDivClasses || [];\r\n\r\n        // if legend display is scale dependent, make sure the mapMove object is initialized first\r\n        if (options.scaleDependent) {\r\n            mapMove.checkInit();\r\n        }\r\n\r\n        this.$divElement = $('#' + divId);\r\n\r\n        this._legendItems = legendItems;\r\n\r\n        this.layerGroup = new LayerGroup();\r\n\r\n        this._buildTree(legendItems);\r\n\r\n        this.legendId = makeGuid();\r\n\r\n        this.$divElement.append(this.layerGroup.getLegendHtml(this.legendId, options));\r\n\r\n        for (let l of this.layerGroup.allLayerArray){\r\n            l.applyCollapse();\r\n        }\r\n\r\n        let _this = this;\r\n\r\n        //// if legend display is scale dependent, make sure the mapMove object is initialized first\r\n        if (options.scaleDependent) {\r\n            mapMove.checkInit();\r\n\r\n            mapMove.addCallback(function (ext, zoom, evt) {\r\n                if (typeof evt == 'undefined' || evt == 'change:resolution') {\r\n                    for (let lyr of this.layerGroup.allLayerArray) {\r\n                        let $lyrLi = $('#' + lyr.id + '-layer-li');\r\n                        if (zoom > lyr.maxZoom || zoom < lyr.minZoom) {\r\n                            $lyrLi.addClass('layer-not-visible');\r\n                        } else {\r\n                            $lyrLi.removeClass('layer-not-visible');\r\n                        }\r\n                    }\r\n                }\r\n            }, this, 100, true, 'legend1');\r\n        }\r\n\r\n        // <editor-fold desc=\"add event listeners\">\r\n\r\n        this.$divElement.find(\".suppress-by-extent\").change(function () {\r\n            let legendLayerLis = $('.legend-layer-li');\r\n            if (this.checked) {\r\n                legendLayerLis.removeClass('layer-force-show');\r\n            } else {\r\n                legendLayerLis.addClass('layer-force-show');\r\n            }\r\n        });\r\n\r\n\r\n        this.$divElement.find('.legend-check').change(function () {\r\n            let lyrId = this.id.replace('-legend-layer-check', '');\r\n            _this.layerGroup.allLayerLookup[lyrId].visible = this.checked;\r\n        });\r\n\r\n        this.$divElement.find('.legend-layer-group > input[type=checkbox]').change(function () {\r\n            $(this).siblings('ul').find('input[type=checkbox]').prop('checked', this.checked).trigger('change');\r\n        });\r\n\r\n        this.$divElement.find('.layer-group-expander').click(function () {\r\n            let $this = $(this);\r\n            $this.removeClass('legend-layer-group-initial-collapse');\r\n\r\n            $this.siblings('ul').slideToggle();\r\n\r\n            if ($this.hasClass('legend-layer-group-collapsed')){\r\n                $this.removeClass('legend-layer-group-collapsed');\r\n                $this.html('&#9660;');\r\n            } else {\r\n                $this.addClass('legend-layer-group-collapsed');\r\n                $this.html('&#9654;');\r\n            }\r\n        });\r\n\r\n        this.$divElement.find('.legend-layer-group-initial-collapse').trigger('click');\r\n        // </editor-fold>\r\n    }\r\n\r\n    /**\r\n     * @param {Array} [legendItems=this._layerConfig] the legend items\r\n     * @param {Array} [parents=[]] the ordered list of groups in which this item is a member\r\n     * @private\r\n     */\r\n    _buildTree(legendItems, parents) {\r\n\r\n        if (legendItems.length == 0) {\r\n            return;\r\n        }\r\n\r\n        let oneItem = legendItems[0];\r\n\r\n        //reset the parent if the item is in the base array\r\n        if (this._legendItems.indexOf(oneItem) > -1 || typeof parents == 'undefined') {\r\n            parents = [];\r\n        }\r\n\r\n        if (typeof oneItem['groupName'] !== 'undefined') {\r\n            let groupItem = legendItems[0];\r\n            let newGroup = this.layerGroup.addGroup(groupItem, parents);\r\n            parents.push(newGroup.groupId);\r\n            this._buildTree(groupItem.items, parents);\r\n        } else {\r\n            /**\r\n             * @type {LayerBase}\r\n             */\r\n            let layerItem = legendItems[0];\r\n\r\n            this.layerGroup.addLegendLayer(layerItem, parents);\r\n        }\r\n\r\n        this._buildTree(legendItems.slice(1), parents);\r\n    }\r\n\r\n    set showAll(val) {\r\n\r\n    }\r\n}\r\n\r\nnm.LayerLegend = LayerLegend;\r\nexport default LayerLegend;\r\n","/**\r\n * Created by gavorhes on 5/3/2016.\r\n */\r\nglobal.jQuery = require('jquery');\r\n\r\nexport default global.jQuery;","import $ from '../jquery';\r\nimport makeGuid from '../util/makeGuid';\r\nimport * as zoomResolutionConvert from '../olHelpers/zoomResolutionConvert';\r\nimport provide from '../util/provide';\r\nconst nm = provide('layers');\r\n\r\n/**\r\n * The base layer class\r\n * @abstract\r\n */\r\nclass LayerBase {\r\n    /**\r\n     * The base layer for all others\r\n     * @param {string} url - url for source\r\n     * @param {object} options - config\r\n     * @param {string} [options.id=makeGuid()] - layer id\r\n     * @param {string} [options.name=Unnamed Layer] - layer name\r\n     * @param {number} [options.opacity=1] - opacity\r\n     * @param {boolean} [options.visible=true] - default visible\r\n     * @param {number} [options.minZoom=undefined] - min zoom level, 0 - 28\r\n     * @param {number} [options.maxZoom=undefined] - max zoom level, 0 - 28\r\n     * @param {object} [options.params={}] - the get parameters to include to retrieve the layer\r\n     * @param {number} [options.zIndex=0] - the z index for the layer\r\n     * @param {function} [options.loadCallback] - function to call on load, context this is the layer object\r\n     * @param {boolean} [options.legendCollapse=false] - if the legend item should be initially collapsed\r\n     * @param {boolean} [options.legendCheckbox=true] - if the legend item should have a checkbox for visibility\r\n     * @param {boolean} [options.legendContent=undefined] - additional content to add to the legend\r\n     */\r\n    constructor(url, options) {\r\n        options = options || {};\r\n\r\n        if (typeof url !== 'string') {\r\n            throw 'Invalid URL';\r\n        }\r\n        this._url = url;\r\n        \r\n        \r\n        \r\n        this._params = typeof options.params == 'object' ? options.params : {};\r\n        this._legendCollapse = typeof options.legendCollapse == 'boolean' ? options.legendCollapse : false;\r\n        this._legendCheckbox = typeof options.legendCheckbox == 'boolean' ? options.legendCheckbox : true;\r\n\r\n        this.id = options.id || makeGuid();\r\n        this._name = options.name || 'Unnamed Layer';\r\n        this.animate = false;\r\n        this._opacity = typeof options.opacity == 'number' ? options.opacity : 1;\r\n\r\n        if (this._opacity > 1) {\r\n            this._opacity = 1;\r\n        } else if (this._opacity < 0) {\r\n            this._opacity = 0;\r\n        }\r\n\r\n        this._visible = typeof options.visible === 'boolean' ? options.visible : true;\r\n        \r\n        this._source = undefined;\r\n        this.olLayer = undefined;\r\n        this._loaded = false;\r\n\r\n        this._maxResolution = zoomResolutionConvert.zoomToResolution(options.minZoom);\r\n        if (typeof this._maxResolution !== 'undefined') {\r\n            this._maxResolution += 0.00001;\r\n        }\r\n        this._minResolution = zoomResolutionConvert.zoomToResolution(options.maxZoom);\r\n\r\n        this._minZoom = typeof options.minZoom == 'number' ? options.minZoom : undefined;\r\n        this._maxZoom = typeof options.maxZoom == 'number' ? options.maxZoom : undefined;\r\n        this._zIndex = typeof options.zIndex == 'number' ? options.zIndex : 0;\r\n\r\n        this.loadCallback = typeof options.loadCallback == 'function' ? options.loadCallback : function () {\r\n        };\r\n\r\n\r\n        this._legendContent = '';\r\n\r\n        if (this._legendCheckbox) {\r\n            this._legendContent += `<input type=\"checkbox\" ${this.visible ? 'checked' : ''} ` +\r\n                `class=\"legend-check\" id=\"${this.id}-legend-layer-check\"><span></span>`;\r\n            this._legendContent += `<label for=\"${this.id}-legend-layer-check\" class=\"legend-layer-name\">${this.name}</label>`;\r\n        } else {\r\n            this._legendContent += `<label class=\"legend-layer-name\">${this.name}</label>`;\r\n        }\r\n\r\n        this._$legendDiv = null;\r\n        this._applyCollapseCalled = false;\r\n        this._addLegendContent(typeof options.legendContent === 'string' ? options.legendContent : undefined);\r\n    }\r\n\r\n    /**\r\n     * base load function, sets _loaded = true if it is not already\r\n     * @protected\r\n     * @returns {boolean} if already loaded\r\n     */\r\n    _load() {\r\n        if (this.loaded == true) {\r\n            return true;\r\n        } else {\r\n            this._loaded = true;\r\n\r\n            return false;\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Get the legend html, be sure to only add to the DOM once\r\n     * @returns {string} html for layer wrapped in a div\r\n     */\r\n    getLegendDiv() {\r\n        return `<div class=\"legend-layer-div\" id=\"${this.id}-legend-layer-div\">${this._legendContent}</div>`;\r\n    }\r\n\r\n    /**\r\n     *\r\n     * @param {string|undefined} additionalContent - additional content to add to legend\r\n     * @private\r\n     */\r\n    _addLegendContent(additionalContent) {\r\n        additionalContent = typeof additionalContent == 'string' ? additionalContent : '';\r\n\r\n        let addCollapse = additionalContent.indexOf('<ul>') > -1;\r\n\r\n        if (addCollapse) {\r\n            additionalContent = '<span class=\"legend-items-expander\" title=\"Expand/Collapse\">&#9660;</span>' + additionalContent;\r\n        }\r\n\r\n        this._legendContent += additionalContent;\r\n\r\n        this._$legendDiv = $(`#${this.id}-legend-layer-div`);\r\n\r\n        if (this._$legendDiv.length > 0) {\r\n            this._$legendDiv.append(additionalContent);\r\n            this.applyCollapse();\r\n        }\r\n    }\r\n\r\n    /**\r\n     * add additional content to the legend\r\n     * @param {string} [additionalContent=] - additonal content to add\r\n     */\r\n    addLegendContent(additionalContent) {\r\n        this._addLegendContent(additionalContent);\r\n    }\r\n\r\n    applyCollapse() {\r\n        if (this._applyCollapseCalled) {\r\n            console.log('collapse already applied');\r\n\r\n            return undefined;\r\n        }\r\n\r\n        this._$legendDiv = $(`#${this.id}-legend-layer-div`);\r\n\r\n        if (this._$legendDiv.length > 0) {\r\n\r\n            let $expander = this._$legendDiv.find('.legend-items-expander');\r\n\r\n            if ($expander.length > 0) {\r\n                this._applyCollapseCalled = true;\r\n\r\n                $expander.click(function () {\r\n                    let $this = $(this);\r\n\r\n                    $this.siblings('ul').slideToggle();\r\n\r\n                    if ($this.hasClass('legend-layer-group-collapsed')) {\r\n                        $this.removeClass('legend-layer-group-collapsed');\r\n                        $this.html('&#9660;');\r\n                    } else {\r\n                        $this.addClass('legend-layer-group-collapsed');\r\n                        $this.html('&#9654;');\r\n                    }\r\n                });\r\n\r\n                if (this._legendCollapse) {\r\n                    $expander.trigger('click');\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    /**\r\n     * trick to refresh the layer\r\n     */\r\n    refresh(){\r\n        if (this.source){\r\n            this.source.refresh();\r\n            //let src = this.source;\r\n            //this.olLayer.setSource(undefined);\r\n            //this.olLayer.setSource(src);\r\n        }\r\n    }\r\n\r\n\r\n    /**\r\n     * get the legend content\r\n     * @type {string}\r\n     */\r\n    get legendContent() {\r\n        return this._legendContent;\r\n    }\r\n\r\n    /**\r\n     * set the legend content directly\r\n     * @param {string} newVal - new content\r\n     * @protected\r\n     */\r\n    set legendContent(newVal) {\r\n        this._legendContent = newVal;\r\n    }\r\n\r\n    /**\r\n     * get the map get params\r\n     * @type {object}\r\n     */\r\n    get params() {\r\n        return this._params;\r\n    }\r\n\r\n    /**\r\n     * set the map get params\r\n     * @param {object} newParams - new get params\r\n     * @protected\r\n     */\r\n    set params(newParams){\r\n        this._params = newParams;\r\n    }\r\n\r\n    /**\r\n     * get the minimum resolution\r\n     * @type {number|*}\r\n     */\r\n    get minResolution() {\r\n        return this._minResolution;\r\n    }\r\n\r\n    /**\r\n     * get the maximum resolution\r\n     * @type {number|*}\r\n     */\r\n    get maxResolution() {\r\n        return this._maxResolution;\r\n    }\r\n\r\n    /**\r\n     * get min zoom\r\n     * @type {number|*}\r\n     */\r\n    get minZoom() {\r\n        return this._minZoom;\r\n    }\r\n\r\n    /**\r\n     * get max zoom\r\n     * @type {number|*}\r\n     */\r\n    get maxZoom() {\r\n        return this._maxZoom;\r\n    }\r\n\r\n    /**\r\n     * get the url\r\n     * @type {string}\r\n     */\r\n    get url() {\r\n        return this._url;\r\n    }\r\n\r\n    /**\r\n     * Get the layer visibility\r\n     * @type {boolean}\r\n     */\r\n    get visible() {\r\n        return this._visible;\r\n    }\r\n\r\n    /**\r\n     * Set the layer visibility\r\n     * @param {boolean} visibility - layer visibility\r\n     */\r\n    set visible(visibility) {\r\n        this._visible = visibility;\r\n        if (this.olLayer) {\r\n            this.olLayer.setVisible(this._visible);\r\n            if (visibility && !this._loaded) {\r\n                this._load();\r\n            }\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Get the layer opacity\r\n     * @type {number}\r\n     */\r\n    get opacity() {\r\n        return this._opacity;\r\n    }\r\n\r\n    /**\r\n     * Set the layer opacity\r\n     * @param {number} opacity - layer opacity\r\n     */\r\n    set opacity(opacity) {\r\n        this._opacity = opacity;\r\n        if (this.olLayer) {\r\n            this.olLayer.setOpacity(this._opacity);\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Get the layer name\r\n     * @type {string}\r\n     */\r\n    get name() {\r\n        return this._name;\r\n    }\r\n\r\n    /**\r\n     * set the layer name\r\n     * @param {string} newName - the new name\r\n     */\r\n    set name(newName) {\r\n        this._name = newName;\r\n    }\r\n\r\n    /**\r\n     * Check if the layer is loaded\r\n     * @type {boolean}\r\n     */\r\n    get loaded() {\r\n        return this._loaded;\r\n    }\r\n\r\n    /**\r\n     * get the layer source\r\n     * @type {*}\r\n     */\r\n    get source() {\r\n        return this._source;\r\n    }\r\n\r\n    /**\r\n     * get the z index\r\n     * @type {number}\r\n     */\r\n    get zIndex(){\r\n        return this._zIndex;\r\n    }\r\n\r\n    /**\r\n     * set the z index\r\n     * @param {number} newZ - new Z index\r\n     */\r\n    set zIndex(newZ){\r\n        this._zIndex = newZ;\r\n        this.olLayer.setZIndex(this.zIndex);\r\n    }\r\n}\r\n\r\nnm.LayerBase = LayerBase;\r\nexport default LayerBase;\r\n","import $ from '../jquery';\r\nimport LayerBase from './LayerBase';\r\nimport mapMove from '../olHelpers/mapMove';\r\nimport provide from '../util/provide';\r\nimport ol from '../ol/ol';\r\nconst nm = provide('layers');\r\n\r\n/**\r\n * The make mapMoveGetParams function takes the extent and the zoom level\r\n * context is 'this' object, probably want to do something with this.mapMoveParams\r\n * @callback mapMoveMakeGetParams\r\n * @param {LayerBaseVector} lyr\r\n * @param {object} extent\r\n * @param {number} extent.minX\r\n * @param {number} extent.minY\r\n * @param {number} extent.maxX\r\n * @param {number} extent.maxY\r\n * @param {number} zoomLevel\r\n */\r\n\r\n\r\n/**\r\n * The Vector layer base\r\n * @augments LayerBase\r\n * @abstract\r\n */\r\nclass LayerBaseVector extends LayerBase {\r\n\r\n    /**\r\n     * The base vector layer\r\n     * @param {string} url - pass an empty string to prevent default load and add from a json source\r\n     * @param {object} options - config\r\n     * @param {string} [options.id] - layer id\r\n     * @param {string} [options.name=Unnamed Layer] - layer name\r\n     * @param {number} [options.opacity=1] - opacity\r\n     * @param {boolean} [options.visible=true] - default visible\r\n     * @param {number} [options.minZoom=undefined] - min zoom level, 0 - 28\r\n     * @param {number} [options.maxZoom=undefined] - max zoom level, 0 - 28\r\n     * @param {object} [options.params={}] the get parameters to include to retrieve the layer\r\n     * @param {number} [options.zIndex=0] the z index for the layer\r\n     * @param {function} [options.loadCallback] function to call on load, context this is the layer object\r\n     * @param {boolean} [options.legendCollapse=false] if the legend item should be initially collapsed\r\n     * @param {boolean} [options.legendCheckbox=true] if the legend item should have a checkbox for visibility\r\n     * @param {boolean} [options.legendContent] additional content to add to the legend\r\n     *\r\n     * @param {boolean} [options.autoLoad=false] if the layer should auto load if not visible\r\n     * @param {object} [options.style=undefined] the layer style, use openlayers default style if not defined\r\n     * @param {boolean} [options.onDemand=false] if the layer should be loaded by extent on map move\r\n     * @param {number} [options.onDemandDelay=300] delay before the map move callback should be called\r\n     * @param {mapMoveMakeGetParams} [options.mapMoveMakeGetParams=function(lyr, extent, zoomLevel){}] function to create additional map move params\r\n     * @param {MapMoveCls} [options.mapMoveObj=mapMove] alternate map move object for use with multi map pages\r\n     *\r\n     */\r\n    constructor(url, options) {\r\n        super(url, options);\r\n\r\n        //prevent regular load if no url has been provided\r\n        if (this.url.trim() == '') {\r\n            this._loaded = true;\r\n        }\r\n\r\n        this._style = typeof options.style == 'undefined' ? undefined : options.style;\r\n\r\n        if (this.visible) {\r\n            this._autoLoad = true;\r\n        } else {\r\n            this._autoLoad = (typeof options['autoLoad'] == 'boolean' ? options['autoLoad'] : false);\r\n        }\r\n\r\n        this._onDemand = typeof options.onDemand == 'boolean' ? options.onDemand : false;\r\n        this._onDemandDelay = typeof options.onDemandDelay == 'number' ? options.onDemandDelay : 300;\r\n\r\n        if (options.mapMoveObj){\r\n            this._mapMove = options.mapMoveObj;\r\n        } else {\r\n            this._mapMove = this._onDemand ? mapMove : undefined;\r\n        }\r\n\r\n        this._mapMoveMakeGetParams = typeof options.mapMoveMakeGetParams == 'function' ? options.mapMoveMakeGetParams :\r\n            function(lyr, extent, zoomLevel){\r\n                return {};\r\n            };\r\n\r\n        if (this._onDemand) {\r\n            this._loaded = true;\r\n            this._mapMoveParams = {};\r\n            this._mapMove.checkInit();\r\n            this._mapMove.addVectorLayer(this);\r\n        }\r\n\r\n        this._source = new ol.source.Vector();\r\n\r\n        /**\r\n         *\r\n         * @type {ol.layer.Vector|ol.layer.Base}\r\n         */\r\n        this.olLayer = new ol.layer.Vector(\r\n            {\r\n                source: this._source,\r\n                visible: this.visible,\r\n                style: this.style,\r\n                minResolution: this._minResolution,\r\n                maxResolution: this._maxResolution,\r\n                zIndex: this._zIndex\r\n            }\r\n        );\r\n    }\r\n\r\n    /**\r\n     * dummy to be overridden\r\n     * @param {object} featureCollection - geojson or esrijson object\r\n     */\r\n    addFeatures(featureCollection) {\r\n        console.log('Layer vector base addFeatures is a placeholder and does nothing');\r\n    }\r\n\r\n    /**\r\n     * Before call to map move callback, can prevent call by returning false\r\n     * @param {number} zoom - zoom level\r\n     * @param {string} [evtType=undefined] undefined for initial load, otherwise one of 'change:center', 'change:resolution'\r\n     * @returns {boolean} if the call should proceed\r\n     */\r\n    mapMoveBefore(zoom, evtType) {\r\n        if (this.minZoom !== undefined) {\r\n            if (zoom < this.minZoom) {\r\n                return false;\r\n            }\r\n        }\r\n\r\n        if (this.maxZoom !== undefined) {\r\n            if (zoom > this.maxZoom) {\r\n                return false;\r\n            }\r\n        }\r\n\r\n        return this.visible;\r\n    }\r\n\r\n    /**\r\n     * callback to generate the parameters passed in the get request\r\n     * @param {object} extent - extent object\r\n     * @param {number} extent.minX - minX\r\n     * @param {number} extent.minY - minY\r\n     * @param {number} extent.maxX - maxX\r\n     * @param {number} extent.maxY - maxY\r\n     * @param {number} zoomLevel - zoom level\r\n     */\r\n    mapMoveMakeGetParams(extent, zoomLevel) {\r\n        this._mapMoveParams = {};\r\n        $.extend(this._mapMoveParams, this.params);\r\n        $.extend(this._mapMoveParams, this._mapMoveMakeGetParams(this, extent, zoomLevel));\r\n    }\r\n\r\n    /**\r\n     * callback function on map move\r\n     * @param {object} d - the json response\r\n     */\r\n    mapMoveCallback(d) {\r\n        if (this.source) {\r\n            this._source.clear();\r\n        }\r\n    }\r\n\r\n    /**\r\n     * clear features in the layer\r\n     */\r\n    clear() {\r\n        if (this._source) {\r\n            this._source.clear();\r\n        }\r\n    }\r\n\r\n    /**\r\n     * get on demand delay in miliseconds\r\n     * @type {number|*}\r\n     */\r\n    get onDemandDelay() {\r\n        return this._onDemandDelay;\r\n    }\r\n\r\n    /**\r\n     * get if the layer is autoloaded\r\n     * @type {boolean}\r\n     */\r\n    get autoLoad() {\r\n        return this._autoLoad;\r\n    }\r\n\r\n    /**\r\n     * get the style definition\r\n     * @type {ol.Style|styleFunc}\r\n     */\r\n    get style() {\r\n        return this._style;\r\n    }\r\n\r\n    /**\r\n     * set the style\r\n     * @param {ol.Style|styleFunc} style - the style or function\r\n     */\r\n    set style(style) {\r\n        this._style = style;\r\n        this.olLayer.setStyle(this._style);\r\n    }\r\n\r\n    /**\r\n     * get the map CRS if it is defined by the map move object\r\n     * @type {string|*}\r\n     */\r\n    get mapCrs() {\r\n        if (this._mapMove) {\r\n            return this._mapMove.map.getView().getProjection().getCode();\r\n        } else {\r\n            return undefined;\r\n        }\r\n    }\r\n\r\n    /**\r\n     * get the map move object\r\n     * @type {MapMoveCls|*}\r\n     */\r\n    get mapMove() {\r\n        return this._mapMove;\r\n    }\r\n\r\n    /**\r\n     * map move params\r\n     * @type {object}\r\n     */\r\n    get mapMoveParams() {\r\n        return this._mapMoveParams;\r\n    }\r\n\r\n        /**\r\n     * Get the layer visibility\r\n     * @type {boolean}\r\n     */\r\n    get visible() {\r\n        return super.visible;\r\n    }\r\n\r\n    /**\r\n     * Set the layer visibility\r\n     * @type {boolean}\r\n     * @override\r\n     */\r\n    set visible(visibility) {\r\n        super.visible = visibility;\r\n\r\n        if (this._onDemand) {\r\n            this.mapMove.triggerLyrLoad(this);\r\n        }\r\n    }\r\n\r\n    /**\r\n     * get the layer vector source\r\n     * @override\r\n     * @type {ol.source.Vector}\r\n     */\r\n    get source(){\r\n        return super.source;\r\n    }\r\n\r\n    /**\r\n     * array of ol features\r\n     * @type {Array.<ol.Feature>}\r\n     */\r\n    get features(){\r\n        return this.source.getFeatures();\r\n    }\r\n}\r\n\r\nnm.LayerBaseVector = LayerBaseVector;\r\nexport default LayerBaseVector;\r\n","/**\r\n * Created by gavorhes on 11/2/2015.\r\n */\r\n\r\nimport $ from '../jquery';\r\nimport LayerBaseVector from './LayerBaseVector';\r\nimport * as esriToOl from '../olHelpers/esriToOlStyle';\r\nimport mapMove from '../olHelpers/mapMove';\r\nimport provide from '../util/provide';\r\nimport ol from '../ol/ol';\r\n\r\nlet nm = provide('layers');\r\n\r\n/**\r\n * Base layer for esri vector layers\r\n * @augments LayerBaseVector\r\n */\r\nclass LayerBaseVectorEsri extends LayerBaseVector {\r\n\r\n    /**\r\n     * The base vector layer\r\n     * @param {string} url - url for source\r\n     * @param {object} options - config\r\n     * @param {string} [options.id] - layer id\r\n     * @param {string} [options.name=Unnamed Layer] - layer name\r\n     * @param {number} [options.opacity=1] - opacity\r\n     * @param {boolean} [options.visible=true] - default visible\r\n     * @param {number} [options.minZoom=undefined] - min zoom level, 0 - 28\r\n     * @param {number} [options.maxZoom=undefined] - max zoom level, 0 - 28\r\n     * @param {object} [options.params={}] the get parameters to include to retrieve the layer\r\n     * @param {number} [options.zIndex=0] the z index for the layer\r\n     * @param {function} [options.loadCallback] function to call on load, context this is the layer object\r\n     * @param {boolean} [options.legendCollapse=false] if the legend item should be initially collapsed\r\n     * @param {boolean} [options.legendCheckbox=true] if the legend item should have a checkbox for visibility\r\n     * @param {boolean} [options.legendContent] additional content to add to the legend\r\n     *\r\n     * @param {boolean} [options.autoLoad=false] if the layer should auto load if not visible\r\n     * @param {object} [options.style=undefined] the layer style, use openlayers default style if not defined\r\n     * @param {boolean} [options.onDemand=false] if the layer should be loaded by extent on map move\r\n     * @param {number} [options.onDemandDelay=300] delay before the map move callback should be called\r\n     * @param {MapMoveCls} [options.mapMoveObj=mapMove] alternate map move object for use with multi map pages\r\n     *\r\n     * @param {string} [options.where=1=1] the layer filter clause\r\n     * @param {string} [options.outFields=*] comma separated list of output fields, defaults to all\r\n     * @param {string} [options.format=pjson] the format the retrieve the data\r\n     * @param {number} [options.outSR=3857] the output spatial reference, defaults to web mercator\r\n     * @param {boolean} [options.useEsriStyle=false] if the map service style should be used\r\n     * @param {boolean} [options.collapseLegend=false] if the legend should be initially collapsed\r\n     * @param {number} [options.mapMoveMakeGetParams=function(extent, zoomLevel){}] function to create additional map move params\r\n     */\r\n    constructor(url, options) {\r\n\r\n        if (typeof options.params != 'object') {\r\n            options.params = {};\r\n        }\r\n        options.params['where'] = options.where || '1=1';\r\n        options.params['outFields'] = options.outFields || '*';\r\n        options.params['f'] = options.format || 'pjson';\r\n        options.params['outSR'] = options.outSR || 3857;\r\n\r\n        super(url, options);\r\n        this._outSR = this.params['outSR'];\r\n        this._esriFormat = new ol.format.EsriJSON();\r\n\r\n        if (this._url[this._url.length - 1] !== '/') {\r\n            this._url += '/';\r\n        }\r\n\r\n        this._urlCopy = this.url;\r\n        this._url += 'query?callback=?';\r\n\r\n        if (this.autoLoad || this.visible) {\r\n            this._load();\r\n        }\r\n\r\n        this._useEsriStyle = typeof options.useEsriStyle == 'boolean' ? options.useEsriStyle : false;\r\n\r\n        if (this._useEsriStyle) {\r\n            this.addLegendContent();\r\n        }\r\n    }\r\n\r\n    /**\r\n     * add additional content to the legend\r\n     * @param {string} [additionalContent=''] additional content to add to legend\r\n     */\r\n    addLegendContent(additionalContent) {\r\n        if (!this._useEsriStyle) {\r\n            super.addLegendContent(additionalContent);\r\n        } else {\r\n            $.get(this._urlCopy + '?f=pjson&callback=?', {}, (d) => {\r\n                if (d['subLayers'].length > 0) {\r\n                    alert('should only use single feature layers, not groups');\r\n\r\n                    return;\r\n                }\r\n\r\n                let newStyleAndLegend = esriToOl.makeFeatureServiceLegendAndSymbol(d);\r\n                this.style = newStyleAndLegend.style;\r\n                super.addLegendContent(newStyleAndLegend.legend);\r\n            }, 'json');\r\n        }\r\n    }\r\n\r\n\r\n    /**\r\n     * add feature collection\r\n     * @param {object} featureCollection - features as esrijson\r\n     */\r\n    addFeatures(featureCollection) {\r\n        let feats = this._esriFormat.readFeatures(featureCollection);\r\n        this.source.addFeatures(feats);\r\n    }\r\n\r\n    /**\r\n     * trigger load features\r\n     * @protected\r\n     * @returns {boolean} if already loaded\r\n     */\r\n    _load() {\r\n        if (super._load()) {\r\n            return true;\r\n        }\r\n        $.get(this._url, this.params, (d) => {\r\n            this.addFeatures(d);\r\n            this.loadCallback(this);\r\n        }, 'json').fail(() => {\r\n                this._loaded = false;\r\n            });\r\n\r\n        return false;\r\n    }\r\n\r\n    /**\r\n     * callback to generate the parameters passed in the get request\r\n     * @param {object} extent - extent object\r\n     * @param {number} extent.minX - minX\r\n     * @param {number} extent.minY - minY\r\n     * @param {number} extent.maxX - maxX\r\n     * @param {number} extent.maxY - maxY\r\n     * @param {number} zoomLevel - zoom level\r\n     */\r\n    mapMoveMakeGetParams(extent, zoomLevel) {\r\n        super.mapMoveMakeGetParams(extent, zoomLevel);\r\n        this.mapMoveParams['geometry'] = `${extent.minX},${extent.minY},${extent.maxX},${extent.maxY}`;\r\n        this.mapMoveParams['geometryType'] = 'esriGeometryEnvelope';\r\n        this.mapMoveParams['spatialRel'] = 'esriSpatialRelIntersects';\r\n        this.mapMoveParams['spatialRel'] = 'esriSpatialRelIntersects';\r\n        this.mapMoveParams['inSR'] = 3857;\r\n        if (this._outSR == 3857) {\r\n            this.mapMoveParams['geometryPrecision'] = 1;\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Before call to map move callback, can prevent call by returning false\r\n     * @param {number} zoom - zoom level\r\n     * @param {string} [evtType=undefined] undefined for initial load, otherwise one of 'change:center', 'change:resolution'\r\n     * @returns {boolean} if the call should proceed\r\n     */\r\n    mapMoveBefore(zoom, evtType) {\r\n        return super.mapMoveBefore(zoom, evtType);\r\n        //if (super.mapMoveBefore(zoom, evtType)){\r\n        //    //place holder for additional processing\r\n        //    return true;\r\n        //} else {\r\n        //    return false;\r\n        //}\r\n    }\r\n\r\n    /**\r\n     * callback function on map move\r\n     * @param {object} d - the json response\r\n     */\r\n    mapMoveCallback(d) {\r\n        super.mapMoveCallback(d);\r\n        this.source.addFeatures(this._esriFormat.readFeatures(d));\r\n    }\r\n}\r\n\r\nnm.LayerBaseVectorEsri = LayerBaseVectorEsri;\r\nexport default LayerBaseVectorEsri;\r\n","/**\r\n * Created by gavorhes on 11/2/2015.\r\n */\r\n\r\nimport $ from '../jquery';\r\nimport LayerBaseVector from './LayerBaseVector';\r\nimport provide from '../util/provide';\r\nimport ol from '../ol/ol';\r\nlet nm = provide('layers');\r\n\r\n/**\r\n * The Vector GeoJson Layer\r\n * @augments LayerBaseVector\r\n */\r\nclass LayerBaseVectorGeoJson extends LayerBaseVector {\r\n\r\n    /**\r\n     * @param {string|undefined|null} url - resource url, set to '' to make blank layer\r\n     * @param {object} options - config\r\n     * @param {string} [options.id] - layer id\r\n     * @param {string} [options.name=Unnamed Layer] - layer name\r\n     * @param {number} [options.opacity=1] - opacity\r\n     * @param {boolean} [options.visible=true] - default visible\r\n     * @param {number} [options.minZoom=undefined] - min zoom level, 0 - 28\r\n     * @param {number} [options.maxZoom=undefined] - max zoom level, 0 - 28\r\n     * @param {object} [options.params={}] the get parameters to include to retrieve the layer\r\n     * @param {number} [options.zIndex=0] the z index for the layer\r\n     * @param {function} [options.loadCallback] function to call on load, context this is the layer object\r\n     * @param {boolean} [options.legendCollapse=false] if the legend item should be initially collapsed\r\n     * @param {boolean} [options.legendCheckbox=true] if the legend item should have a checkbox for visibility\r\n     * @param {boolean} [options.legendContent] additional content to add to the legend\r\n     *\r\n     * @param {boolean} [options.autoLoad=false] if the layer should auto load if not visible\r\n     * @param {object} [options.style=undefined] the layer style, use openlayers default style if not defined\r\n     * @param {boolean} [options.onDemand=false] if the layer should be loaded by extent on map move\r\n     * @param {number} [options.onDemandDelay=300] delay before the map move callback should be called\r\n     *\r\n     * @param {object} [options.transform={}] SR transform, set as false for no transform\r\n     * @param {string} options.transform.dataProjection=EPSG:4326 the data CRS\r\n     * @param {string} options.transform.featureProjection=EPSG:3857 the feature/map CRS\r\n     * @param {mapMoveMakeGetParams} [options.mapMoveMakeGetParams=function(lyr, extent, zoomLevel){}] function to create additional map move params\r\n     * @param {MapMoveCls} [options.mapMoveObj=mapMove] alternate map move object for use with multi map pages\r\n     */\r\n    constructor(url, options) {\r\n        url = typeof url == 'string' ? url : '';\r\n        super(url, options);\r\n\r\n        this._geoJsonFormat = new ol.format.GeoJSON();\r\n\r\n        this._transform = options.transform || {};\r\n        this._transform.dataProjection = this._transform.dataProjection || \"EPSG:4326\";\r\n        this._transform.featureProjection = this._transform.featureProjection || \"EPSG:3857\";\r\n\r\n        if (this.autoLoad || this.visible) {\r\n            this._load();\r\n        }\r\n    }\r\n\r\n    /**\r\n     * add feature collection\r\n     * @param {object} featureCollection - as geojson object\r\n     */\r\n    addFeatures(featureCollection) {\r\n        if (this._transform.dataProjection == 'EPSG:3857' && this._transform.featureProjection == 'EPSG:3857') {\r\n            this._source.addFeatures(this._geoJsonFormat.readFeatures(featureCollection));\r\n        } else {\r\n            this._source.addFeatures(this._geoJsonFormat.readFeatures(featureCollection, this._transform));\r\n        }\r\n    }\r\n\r\n    /**\r\n     * trigger load features\r\n     * @protected\r\n     * @returns {boolean} if already loaded\r\n     */\r\n    _load() {\r\n\r\n        if (super._load()) {\r\n            return true;\r\n        }\r\n\r\n        $.get(this._url,\r\n            this._params,\r\n            (d) => {\r\n                this.addFeatures(d);\r\n                this.loadCallback(this);\r\n            }, 'json').fail(\r\n            function () {\r\n                this._loaded = false;\r\n            }\r\n        );\r\n\r\n        return false;\r\n    }\r\n\r\n    /**\r\n     * callback function on map move\r\n     * @param {object} d the json response\r\n     * @override\r\n     */\r\n    mapMoveCallback(d) {\r\n        super.mapMoveCallback(d);\r\n        this._source.addFeatures(this._geoJsonFormat.readFeatures(d, this._transform));\r\n    }\r\n}\r\n\r\nnm.LayerBaseVectorGeoJson = LayerBaseVectorGeoJson;\r\nexport default LayerBaseVectorGeoJson;\r\n","/**\r\n * Created by gavorhes on 12/7/2015.\r\n */\r\nimport $ from '../jquery';\r\nimport LayerBase from './LayerBase';\r\nimport * as esriToOl from '../olHelpers/esriToOlStyle';\r\nimport mapPopup from '../olHelpers/mapPopup';\r\nimport provide from '../util/provide';\r\nimport ol from '../ol/ol';\r\nconst nm = provide('layers');\r\n\r\n/**\r\n * esri mapserver layer\r\n * @augments LayerBase\r\n */\r\nclass LayerEsriMapServer extends LayerBase {\r\n    /**\r\n     * The base layer for all others\r\n     * @param {string} url - resource url\r\n     * @param {object} options - config\r\n     * @param {string} [options.id] - layer id\r\n     * @param {string} [options.name=Unnamed Layer] - layer name\r\n     * @param {number} [options.opacity=1] - opacity\r\n     * @param {boolean} [options.visible=true] - default visible\r\n     * @param {number} [options.minZoom=undefined] - min zoom level, 0 - 28\r\n     * @param {number} [options.maxZoom=undefined] - max zoom level, 0 - 28\r\n     * @param {object} [options.params={}] the get parameters to include to retrieve the layer\r\n     * @param {number} [options.zIndex=0] the z index for the layer\r\n     * @param {function} [options.loadCallback] function to call on load, context this is the layer object\r\n     * @param {boolean} [options.legendCollapse=false] if the legend item should be initially collapsed\r\n     * @param {boolean} [options.legendCheckbox=true] if the legend item should have a checkbox for visibility\r\n     * @param {boolean} [options.legendContent] additional content to add to the legend\r\n     * @param {boolean} [options.addPopup=false] if a popup should be added\r\n     */\r\n    constructor(url, options) {\r\n        super(url, options);\r\n        this._source = new ol.source.TileArcGISRest({url: this.url == '' ? undefined : this.url});\r\n\r\n        this.olLayer = new ol.layer.Tile({\r\n            source: this._source,\r\n            visible: this.visible,\r\n            opacity: this.opacity,\r\n            minResolution: this._minResolution,\r\n            maxResolution: this._maxResolution,\r\n            zIndex: this._zIndex\r\n        });\r\n\r\n        options.addPopup = typeof options.addPopup == 'boolean' ? options.addPopup : false;\r\n\r\n        this._esriFormat = new ol.format.EsriJSON();\r\n        this._popupRequest = null;\r\n\r\n        this.addLegendContent();\r\n\r\n        if (options.addPopup) {\r\n            mapPopup.addMapServicePopup(this);\r\n        }\r\n    }\r\n\r\n    /**\r\n     * add additional content to the legend\r\n     * @param {string} [additionalContent=''] additional content for legend\r\n     */\r\n    addLegendContent(additionalContent) {\r\n        let urlCopy = this.url;\r\n\r\n        if (urlCopy[urlCopy.length - 1] !== '/') {\r\n            urlCopy += '/';\r\n        }\r\n\r\n        urlCopy += 'legend?f=pjson&callback=?';\r\n\r\n        let _this = this;\r\n        let superAddLegend = super.addLegendContent;\r\n\r\n        $.get(urlCopy, {}, function (d) {\r\n            let newHtml = esriToOl.makeMapServiceLegend(d);\r\n            superAddLegend.call(_this, newHtml);\r\n        }, 'json');\r\n    }\r\n\r\n\r\n    getPopupInfo(queryParams) {\r\n        if (!this.visible) {\r\n            return;\r\n        }\r\n\r\n        let urlCopy = this.url;\r\n\r\n        if (urlCopy[urlCopy.length - 1] != '/') {\r\n            urlCopy += '/';\r\n        }\r\n\r\n        urlCopy += 'identify?callback=?';\r\n\r\n        let _this = this;\r\n\r\n        if (this._popupRequest != null) {\r\n            this._popupRequest.abort();\r\n        }\r\n\r\n        this._popupRequest = $.get(urlCopy, queryParams, function (d) {\r\n            for (let r of d['results']) {\r\n\r\n                let popupHtml = '<table class=\"esri-popup-table\">';\r\n\r\n                for (let a in r['attributes']) {\r\n                    if (r['attributes'].hasOwnProperty(a)) {\r\n                        let attrVal = r['attributes'][a];\r\n\r\n                        if (attrVal == null || attrVal.toString().toLowerCase() == 'null') {\r\n                            continue;\r\n                        }\r\n\r\n                        let attr = a;\r\n                        if (attr.length > 14) {\r\n                            attr = attr.slice(0, 11) + '...';\r\n                        }\r\n\r\n                        popupHtml += `<tr><td>${attr}</td><td>${attrVal}</td></tr>`;\r\n                    }\r\n                }\r\n\r\n                popupHtml += '</table>';\r\n\r\n                mapPopup.addMapServicePopupContent(_this._esriFormat.readFeature(r), _this, popupHtml, r['layerName']);\r\n            }\r\n        }, 'json').always(function () {\r\n            _this._popupRequest = null;\r\n        });\r\n    }\r\n\r\n    /**\r\n     * overwrite the base load\r\n     * @protected\r\n     */\r\n    _load() {\r\n    }\r\n\r\n    /**\r\n     *\r\n     * @returns {ol.source.TileArcGISRest} the vector source\r\n     */\r\n    get source() {\r\n        return super.source;\r\n    }\r\n}\r\nnm.LayerEsriMapServer = LayerEsriMapServer;\r\nexport default LayerEsriMapServer;\r\n","/**\r\n * Created by gavorhes on 12/8/2015.\r\n */\r\n\r\nimport $ from '../jquery';\r\nimport LayerBaseVectorGeoJson from './LayerBaseVectorGeoJson';\r\nimport mapMove from '../olHelpers/mapMove';\r\nimport mapPopup from '../olHelpers/mapPopup';\r\nimport provide from '../util/provide';\r\nimport ol from '../ol/ol';\r\nlet nm = provide('layers');\r\n\r\n\r\nfunction checkStyleNumber(itsIcon, itsLineStyle, itsIconConfig, itsLineConfig) {\r\n    \"use strict\";\r\n\r\n    //make sure one and only one configuration is defined;\r\n    let configCount = 0;\r\n    if (typeof itsIcon == 'string') {\r\n        configCount++;\r\n    }\r\n\r\n    if (typeof itsLineStyle == 'object') {\r\n        itsLineStyle.width = typeof itsLineStyle.width == 'number' ? itsLineStyle.width : 5;\r\n        itsLineStyle.color = typeof itsLineStyle.color == 'string' ? itsLineStyle.color : 'red';\r\n        configCount++;\r\n    }\r\n\r\n    if (typeof itsIconConfig == 'object') {\r\n        itsIconConfig.defaultName = itsIconConfig.defaultName || 'Other';\r\n\r\n        if (typeof itsIconConfig.iconArray == 'undefined') {\r\n            itsIconConfig.iconArray = [];\r\n        }\r\n\r\n        configCount++;\r\n    }\r\n\r\n    if (typeof itsLineConfig == 'object') {\r\n        itsLineConfig.defaultName = itsLineConfig.defaultName || 'Other';\r\n        itsLineConfig.defaultWidth = itsLineConfig.defaultWidth || 5;\r\n        itsLineConfig.defaultColor = itsLineConfig.defaultColor || 'red';\r\n\r\n\r\n        if (typeof itsLineConfig.lineArray == 'undefined') {\r\n            itsLineConfig.lineArray = [];\r\n        }\r\n\r\n        // set the width if not defined\r\n        for (let i = 0; i < itsLineConfig.lineArray.length; i++) {\r\n            if (itsLineConfig.lineArray[i].length == 3) {\r\n                itsLineConfig.lineArray[i].push(5);\r\n            }\r\n        }\r\n\r\n        configCount++;\r\n    }\r\n\r\n    if (configCount > 1) {\r\n        throw 'Only one style config can be defined';\r\n    }\r\n}\r\n\r\n/**\r\n *\r\n * @param {string} [itsIcon=undefined] the ITS device type icon image see http://transportal.cee.wisc.edu/its/inventory/icons/\r\n *\r\n * @param {object} [itsLineStyle=undefined] A single line style\r\n * @param {string} itsLineStyle.color the line color as rgb or hex\r\n * @param {number} [itsLineStyle.width=5] the line width\r\n *\r\n * @param {object} [itsIconConfig=undefined] The icon subtype configuration\r\n * @param {string} itsIconConfig.prop The property used to define icon attribute symbolization\r\n * @param {string} itsIconConfig.defaultName The default name to be used if no other match is found\r\n * @param {string} itsIconConfig.defaultIcon The default icon to be used for no other matches\r\n * @param {object} [itsIconConfig.iconArray=[]] an array, items with format [property, name, img]\r\n *\r\n * @param {object} [itsLineConfig=undefined] The property used to define icon attribute symbolization\r\n * @param {string} itsLineConfig.prop The property used to define icon attribute symbolization\r\n * @param {string} [itsLineConfig.defaultName=Other] The default name to be used if no other match is found\r\n * @param {string} [itsLineConfig.defaultColor=red] The default line color to be used for no other matches\r\n * @param {number} [itsLineConfig.defaultWidth=5] The default line width to be used for no other matches\r\n * @param {object} [itsLineConfig.lineArray=[]] an array, items with format [property, name, color, optional width]\r\n * @returns {*} undefined, style, or style function\r\n */\r\nfunction defineStyle(itsIcon, itsLineStyle, itsIconConfig, itsLineConfig) {\r\n    \"use strict\";\r\n    checkStyleNumber(itsIcon, itsLineStyle, itsIconConfig, itsLineConfig);\r\n\r\n    let _iconUrlRoot = 'http://transportal.cee.wisc.edu/its/inventory/icons/';\r\n\r\n    if (itsIcon) {\r\n        return new ol.style.Style({\r\n            image: new ol.style.Icon({src: _iconUrlRoot + itsIcon})\r\n        });\r\n    } else if (itsLineStyle) {\r\n        return new ol.style.Style({\r\n            stroke: new ol.style.Stroke({\r\n                color: itsLineStyle.color,\r\n                width: itsLineStyle.width\r\n            })\r\n        });\r\n    } else if (itsIconConfig) {\r\n        return function (feature) {\r\n            let symbolProp = feature.getProperties()[itsIconConfig.prop];\r\n            let iconUrl = _iconUrlRoot + itsIconConfig.defaultIcon;\r\n\r\n            for (let i = 0; i < itsIconConfig.iconArray.length; i++) {\r\n                let thisProp = itsIconConfig.iconArray[i];\r\n\r\n                if (symbolProp.trim().toLocaleLowerCase() == thisProp[0].trim().toLocaleLowerCase()) {\r\n                    iconUrl = _iconUrlRoot + thisProp[2];\r\n                    break;\r\n                }\r\n            }\r\n\r\n            return [new ol.style.Style({\r\n                image: new ol.style.Icon({src: iconUrl})\r\n            })];\r\n        };\r\n    } else if (itsLineConfig) {\r\n        return function (feature) {\r\n            let symbolProp = feature.getProperties()[itsLineConfig.prop];\r\n            let colr = itsLineConfig.defaultColor || 'red';\r\n            let width = itsLineConfig.defaultWidth || 5;\r\n\r\n            for (let i = 0; i < itsLineConfig.lineArray.length; i++) {\r\n                let thisProp = itsLineConfig.lineArray[i];\r\n\r\n                if (symbolProp.trim().toLocaleLowerCase() == thisProp[0].trim().toLocaleLowerCase()) {\r\n                    colr = thisProp[2];\r\n                    width = thisProp[3];\r\n                    break;\r\n                }\r\n            }\r\n\r\n            return [new ol.style.Style({\r\n                stroke: new ol.style.Stroke({\r\n                    color: colr,\r\n                    width: width\r\n                })\r\n            })];\r\n        };\r\n    } else {\r\n        return undefined;\r\n    }\r\n}\r\n\r\n/**\r\n *\r\n * @param {string} [itsIcon=undefined] the ITS device type icon image see http://transportal.cee.wisc.edu/its/inventory/icons/\r\n *\r\n * @param {object} [itsLineStyle=undefined] A single line style\r\n * @param {string} itsLineStyle.color the line color as rgb or hex\r\n * @param {number} [itsLineStyle.width=5] the line width\r\n *\r\n * @param {object} [itsIconConfig=undefined] The icon subtype configuration\r\n * @param {string} itsIconConfig.prop The property used to define icon attribute symbolization\r\n * @param {string} itsIconConfig.defaultName The default name to be used if no other match is found\r\n * @param {string} itsIconConfig.defaultIcon The default icon to be used for no other matches\r\n * @param {object} [itsIconConfig.iconArray=[]] an array, items with format [property, name, img]\r\n *\r\n * @param {object} [itsLineConfig=undefined] The property used to define icon attribute symbolization\r\n * @param {string} itsLineConfig.prop The property used to define icon attribute symbolization\r\n * @param {string} [itsLineConfig.defaultName=Other] The default name to be used if no other match is found\r\n * @param {string} [itsLineConfig.defaultColor=red] The default line color to be used for no other matches\r\n * @param {number} [itsLineConfig.defaultWidth=5] The default line width to be used for no other matches\r\n * @param {object} [itsLineConfig.lineArray=[]] an array, items with format [property, name, color, optional width]\r\n * @returns {string} html to be added to the legend\r\n */\r\nfunction defineLegend(itsIcon, itsLineStyle, itsIconConfig, itsLineConfig) {\r\n    \"use strict\";\r\n\r\n    let iconHeight = 17;\r\n\r\n    checkStyleNumber(itsIcon, itsLineStyle, itsIconConfig, itsLineConfig);\r\n\r\n    let _iconUrlRoot = 'http://transportal.cee.wisc.edu/its/inventory/icons/';\r\n\r\n    if (itsIcon) {\r\n        return `<img src=\"${_iconUrlRoot + itsIcon}\" class=\"legend-layer-icon\" height=\"${iconHeight}\">`;\r\n    } else if (itsLineStyle) {\r\n        return `<hr style=\"height: ${itsLineStyle.width}px; background-color: ${itsLineStyle.color}\">`;\r\n    } else if (itsIconConfig) {\r\n        let outHtml = '';\r\n        outHtml += '<ul>';\r\n\r\n        for (let a of itsIconConfig.iconArray) {\r\n            outHtml += `<li><span class=\"legend-layer-subitem\">${a[1]}</span><img src=\"${_iconUrlRoot + a[2]}\" class=\"legend-layer-icon\" height=\"${iconHeight}\">`;\r\n        }\r\n        outHtml += `<li><span class=\"legend-layer-subitem\">${itsIconConfig.defaultName}</span>` +\r\n            `<img src=\"${_iconUrlRoot + itsIconConfig.defaultIcon}\" class=\"legend-layer-icon\" height=\"${iconHeight}\"></li>`;\r\n        outHtml += '</ul>';\r\n\r\n        return outHtml;\r\n    } else if (itsLineConfig) {\r\n        let outHtml = '';\r\n        outHtml += '<ul>';\r\n        for (let ls of itsLineConfig.lineArray) {\r\n            outHtml += `<li><span class=\"legend-layer-subitem\">${ls[1]}</span>` +\r\n                `<hr style=\"height: ${ls[3]}px; background-color: ${ls[2]}\">`;\r\n        }\r\n        outHtml += `<li><span class=\"legend-layer-subitem\">${itsLineConfig.defaultName}</span>` +\r\n            `<hr style=\"height: ${itsLineConfig.defaultWidth}px; background-color: ${itsLineConfig.defaultColor}\"></li>`;\r\n        outHtml += '</ul>';\r\n\r\n        return outHtml;\r\n    } else {\r\n        return '';\r\n    }\r\n}\r\n\r\n/**\r\n * Its Layer class\r\n * @augments LayerBaseVectorGeoJson\r\n */\r\nclass LayerItsInventory extends LayerBaseVectorGeoJson {\r\n\r\n    /**\r\n     * ITS device layer, types available at http://transportal.cee.wisc.edu/its/inventory/\r\n     * @param {object} options - config\r\n     * @param {string} [options.id] - layer id\r\n     * @param {string} [options.name=Unnamed Layer] - layer name\r\n     * @param {number} [options.opacity=1] - opacity\r\n     * @param {boolean} [options.visible=true] - default visible\r\n     * @param {number} [options.minZoom=undefined] - min zoom level, 0 - 28\r\n     * @param {number} [options.maxZoom=undefined] - max zoom level, 0 - 28\r\n     * @param {object} [options.params={}] the get parameters to include to retrieve the layer\r\n     * @param {number} [options.zIndex=0] the z index for the layer\r\n     * @param {function} [options.loadCallback] function to call on load, context this is the layer object\r\n     * @param {boolean} [options.legendCollapse=false] if the legend item should be initially collapsed\r\n     * @param {boolean} [options.legendCheckbox=true] if the legend item should have a checkbox for visibility\r\n     * @param {boolean} [options.legendContent] additional content to add to the legend\r\n     *\r\n     * @param {boolean} [options.autoLoad=false] if the layer should auto load if not visible\r\n     * @param {object|*} [options.style=undefined] the layer style, use openlayers default style if not defined\r\n     * @param {boolean} [options.onDemand=false] if the layer should be loaded by extent on map move\r\n     * @param {number} [options.onDemandDelay=300] delay before the map move callback should be called\r\n     * @param {MapMoveCls} [options.mapMoveObj=mapMove] alternate map move object for use with multi map pages\r\n     *\r\n     * @param {string} options.itsType the ITS device type, use the url flag at http://transportal.cee.wisc.edu/its/inventory/\r\n     * @param {boolean} [options.addPopup=true] if the popup should be added automatically\r\n     *\r\n     * @param {string} [options.itsIcon=undefined] the ITS device type icon image see http://transportal.cee.wisc.edu/its/inventory/icons/\r\n     *\r\n     * @param {object} [options.itsLineStyle=undefined] A single line style\r\n     * @param {string} options.itsLineStyle.color the line color as rgb or hex\r\n     * @param {number} [options.itsLineStyle.width=5] the line width\r\n     *\r\n     * @param {object} [options.itsIconConfig=undefined] The icon subtype configuration\r\n     * @param {string} options.itsIconConfig.prop The property used to define icon attribute symbolization\r\n     * @param {string} options.itsIconConfig.defaultName The default name to be used if no other match is found\r\n     * @param {string} options.itsIconConfig.defaultIcon The default icon to be used for no other matches\r\n     * @param {object} [options.itsIconConfig.iconArray=[]] an array, items with format [property, name, img]\r\n     *\r\n     * @param {object} [options.itsLineConfig=undefined] The property used to define icon attribute symbolization\r\n     * @param {string} options.itsLineConfig.prop The property used to define icon attribute symbolization\r\n     * @param {string} [options.itsLineConfig.defaultName=Other] The default name to be used if no other match is found\r\n     * @param {string} [options.itsLineConfig.defaultColor=red] The default line color to be used for no other matches\r\n     * @param {number} [options.itsLineConfig.defaultWidth] The default line width to be used for no other matches\r\n     * @param {object} [options.itsLineConfig.lineArray=[]] an array, items with format [property, name, color, optional width = 5]\r\n     */\r\n    constructor(options) {\r\n        if (typeof options.itsType !== 'string') {\r\n            throw 'its type must be defined';\r\n        }\r\n\r\n        let addToLegend = '';\r\n\r\n        // define a style with the helper function if it is not explicitly defined\r\n        if (typeof options.style == 'undefined') {\r\n            options.style = defineStyle(\r\n                options.itsIcon, options.itsLineStyle, options.itsIconConfig, options.itsLineConfig\r\n            );\r\n            addToLegend = defineLegend(\r\n                options.itsIcon, options.itsLineStyle, options.itsIconConfig, options.itsLineConfig\r\n            );\r\n        }\r\n\r\n        options.params = typeof options.params == 'object' ? options.params : {};\r\n        $.extend(options.params, {format: 'JSON', resource: options.itsType});\r\n\r\n        super('http://transportal.cee.wisc.edu/its/inventory/', options);\r\n        \r\n        //add any additional content to the legend\r\n        this.addLegendContent(addToLegend);\r\n\r\n        options.addPopup = typeof options.addPopup == 'boolean' ? options.addPopup : true;\r\n\r\n        if (options.addPopup) {\r\n            mapPopup.addVectorPopup(this, function (props) {\r\n                return `<iframe src=\"http://transportal.cee.wisc.edu/its/inventory/?feature=${props['featureGuid']}\" ` +\r\n                    `height=\"250\" width=\"350\"></iframe>`;\r\n            });\r\n        }\r\n    }\r\n\r\n    /**\r\n     * callback to generate the parameters passed in the get request\r\n     * @callback makeGetParams\r\n     * @param {object} extent - extent object\r\n     * @param {number} extent.minX - minX\r\n     * @param {number} extent.minY - minY\r\n     * @param {number} extent.maxX - maxX\r\n     * @param {number} extent.maxY - maxY\r\n     * @param {number} zoomLevel - zoom level\r\n     */\r\n    mapMoveMakeGetParams(extent, zoomLevel) {\r\n        super.mapMoveMakeGetParams(extent, zoomLevel);\r\n        let lowerLeft = new ol.geom.Point([extent.minX, extent.minY]);\r\n        lowerLeft.transform(this.mapCrs, \"EPSG:4326\");\r\n        let lowerLeftCoordinates = lowerLeft.getCoordinates();\r\n        let upperRight = new ol.geom.Point([extent.maxX, extent.maxY]);\r\n        upperRight.transform(this.mapCrs, \"EPSG:4326\");\r\n        let upperRightCoordinates = upperRight.getCoordinates();\r\n\r\n        $.extend(this.mapMoveParams,\r\n            {\r\n                L: lowerLeftCoordinates[0],\r\n                R: upperRightCoordinates[0],\r\n                B: lowerLeftCoordinates[1],\r\n                T: upperRightCoordinates[1]\r\n            });\r\n    }\r\n}\r\n\r\nnm.LayerItsInventory = LayerItsInventory;\r\nexport default LayerItsInventory;\r\n","/**\r\n * Created by gavorhes on 1/4/2016.\r\n */\r\nimport provide from '../util/provide';\r\nimport ol from '../ol/ol';\r\nconst nm = provide('olHelpers.esriToOlStyle');\r\n\r\n/**\r\n * This callback is displayed as part of the Requester class.\r\n * @callback styleFunc\r\n * @param {ol.Feature} feat - openlayers feature\r\n * @param {number} resolution - map resolution\r\n */\r\n\r\n/**\r\n *\r\n * @param {Array<number>} colorArray - input color array\r\n * @param {number} opacity - the opacity 0 to 1\r\n * @returns {string} rgba string\r\n * @private\r\n */\r\nfunction _colorArrayToRgba(colorArray, opacity) {\r\n    \"use strict\";\r\n\r\n    return `rgba(${colorArray[0]},${colorArray[1]},${colorArray[2]},${opacity})`;\r\n}\r\n\r\n/**\r\n * escape html charcters\r\n * @param {string} str - input string\r\n * @returns {string} escaped string\r\n */\r\nfunction htmlEscape(str) {\r\n    return String(str)\r\n        .replace(/&/g, '&amp;')\r\n        .replace(/\"/g, '&quot;')\r\n        .replace(/'/g, '&#39;')\r\n        .replace(/</g, '&lt;')\r\n        .replace(/>/g, '&gt;');\r\n}\r\n\r\nnm.htmlEscape = htmlEscape;\r\n\r\n\r\nclass CommonSymbol {\r\n\r\n    /**\r\n     * \r\n     * @param symbolObj\r\n     * @param {number} opacity\r\n     */\r\n    constructor(symbolObj, opacity) {\r\n        this.symbolObj = symbolObj;\r\n        this.opacity = opacity;\r\n        this.olStyle = undefined;\r\n        this.legendHtml = '';\r\n    }\r\n}\r\n\r\nclass PointSymbol extends CommonSymbol {\r\n    constructor(symbolObj, opacity) {\r\n        super(symbolObj, opacity);\r\n        switch (this.symbolObj['type']) {\r\n            case 'esriSMS':\r\n                let innerColor = _colorArrayToRgba(this.symbolObj.color, this.opacity);\r\n                let outerColor = _colorArrayToRgba(this.symbolObj.outline.color, this.opacity);\r\n                let outlineWidth = this.symbolObj.outline.width;\r\n                let radius = this.symbolObj.size;\r\n\r\n\r\n                this.olStyle = new ol.style.Style({\r\n                    image: new ol.style.Circle({\r\n                        radius: radius,\r\n                        fill: new ol.style.Fill({\r\n                            color: innerColor\r\n                        }),\r\n                        stroke: new ol.style.Stroke({color: outerColor, width: outlineWidth})\r\n                    })\r\n                });\r\n                this.legendHtml = `<span class=\"legend-layer-icon\" style=\"color: ${innerColor}\">&#9679;</span>`;\r\n                break;\r\n            case 'esriPMS':\r\n                this.olStyle = new ol.style.Style({\r\n                    image: new ol.style.Icon({src: `data:image/png;base64,${this.symbolObj['imageData']}`})\r\n                });\r\n                this.legendHtml = `<img class=\"legend-layer-icon\" height=\"17\" src=\"data:image/png;base64,${this.symbolObj['imageData']}\">`;\r\n                break;\r\n            default:\r\n                console.log(this.symbolObj);\r\n                alert('Point symbol does not handle symbol type: ' + this.symbolObj['type']);\r\n        }\r\n    }\r\n}\r\n\r\nclass LineSymbol extends CommonSymbol {\r\n    constructor(symbolObj, opacity) {\r\n        super(symbolObj, opacity);\r\n        switch (this.symbolObj['type']) {\r\n            case 'esriSLS':\r\n                let innerColor = _colorArrayToRgba(this.symbolObj.color, this.opacity);\r\n                let lineWidth = this.symbolObj.width;\r\n\r\n                this.olStyle = new ol.style.Style({\r\n                    stroke: new ol.style.Stroke({\r\n                        color: innerColor,\r\n                        //lineDash: [4],\r\n                        width: lineWidth\r\n                    })\r\n                });\r\n\r\n                this.legendHtml = `<span class=\"legend-layer-icon\" `;\r\n                this.legendHtml += `style=\"`;\r\n                this.legendHtml += `background-color: ${innerColor};`;\r\n                this.legendHtml += `width: 40px;`;\r\n                this.legendHtml += `height: 4px;`;\r\n                this.legendHtml += `position: relative;`;\r\n                this.legendHtml += `display: inline-block;`;\r\n                this.legendHtml += `top: -1px;`;\r\n                this.legendHtml += `\"></span>`;\r\n                break;\r\n            default:\r\n                console.log(this.symbolObj);\r\n                alert('Line symbol does not handle symbol type: ' + this.symbolObj['type']);\r\n        }\r\n    }\r\n}\r\n\r\nclass PolygonSymbol extends CommonSymbol {\r\n    constructor(symbolObj, opacity) {\r\n        super(symbolObj, opacity);\r\n        switch (this.symbolObj['type']) {\r\n            case 'esriSFS':\r\n                let innerColor = _colorArrayToRgba(this.symbolObj.color, this.opacity);\r\n                let outerColor = _colorArrayToRgba(this.symbolObj.outline.color, this.opacity);\r\n                let outlineWidth = this.symbolObj.outline.width;\r\n\r\n                this.olStyle = new ol.style.Style({\r\n                    stroke: new ol.style.Stroke({\r\n                        color: outerColor,\r\n                        //lineDash: [4],\r\n                        width: outlineWidth\r\n                    }),\r\n                    fill: new ol.style.Fill({\r\n                        color: innerColor\r\n                    })\r\n                });\r\n\r\n                this.legendHtml = `<span class=\"legend-layer-icon\" `;\r\n                this.legendHtml += `style=\"`;\r\n                this.legendHtml += `background-color: ${innerColor};`;\r\n                this.legendHtml += `border: solid ${outerColor} 1px;`;\r\n                this.legendHtml += `width: 40px;`;\r\n                this.legendHtml += `height: 9px;`;\r\n                this.legendHtml += `position: relative;`;\r\n                this.legendHtml += `display: inline-block;`;\r\n                this.legendHtml += `top: 2px;`;\r\n                this.legendHtml += `\"></span>`;\r\n                break;\r\n\r\n            default:\r\n                console.log(this.symbolObj);\r\n                alert('Polygon symbol does handle symbol type: ' + this.symbolObj['type']);\r\n        }\r\n    }\r\n}\r\n\r\nclass SymbolGenerator {\r\n    constructor(esriResponse) {\r\n        this.opacity = (100 - (esriResponse['drawingInfo']['transparency'] || 0)) / 100;\r\n        this.renderer = esriResponse['drawingInfo']['renderer'];\r\n        this.olStyle = undefined;\r\n        this.legendHtml = '';\r\n    }\r\n}\r\n\r\nclass SingleSymbol extends SymbolGenerator {\r\n    /**\r\n     *\r\n     * @param {object} esriResponse - layer info\r\n     * @param {Constructor|*} SymbolClass - the symbol class to use\r\n     */\r\n    constructor(esriResponse, SymbolClass) {\r\n        super(esriResponse);\r\n        this.symbol = this.renderer['symbol'];\r\n        let symbolObj = new SymbolClass(this.symbol, this.opacity);\r\n        this.olStyle = symbolObj.olStyle;\r\n        this.legendHtml = symbolObj.legendHtml;\r\n    }\r\n}\r\n\r\nclass UniqueValueSymbol extends SymbolGenerator {\r\n    /**\r\n     *\r\n     * @param {object} esriResponse - layer info\r\n     * @param {Constructor|*} SymbolClass - the Symbol class definition\r\n     */\r\n    constructor(esriResponse, SymbolClass) {\r\n        super(esriResponse);\r\n        this.uniqueValueInfos = this.renderer['uniqueValueInfos'];\r\n        this.propertyName = this.renderer['field1'];\r\n        this.defaultSymbol = this.renderer['defaultSymbol'];\r\n\r\n\r\n        if (this.defaultSymbol) {\r\n            let symbolObj = new SymbolClass(this.defaultSymbol, this.opacity);\r\n            this.defaultStyle = symbolObj.olStyle;\r\n            this.defaultLabelHtml = `<span class=\"legend-layer-subitem\">${htmlEscape(this.renderer['defaultLabel'])}</span>` + symbolObj.legendHtml;\r\n        } else {\r\n            this.defaultStyle = undefined;\r\n            this.defaultLabelHtml = 'other';\r\n        }\r\n\r\n        this.valueArray = [];\r\n        this.labelArray = [];\r\n        this.legendArray = [];\r\n        this.propertyStyleLookup = {};\r\n\r\n        for (let uniqueVal of this.uniqueValueInfos) {\r\n            this.labelArray.push(uniqueVal['label']);\r\n            this.valueArray.push(uniqueVal['value']);\r\n            let uniqueSym = new SymbolClass(uniqueVal.symbol, this.opacity);\r\n            this.legendArray.push(`<span class=\"legend-layer-subitem\">${htmlEscape(uniqueVal['label'])}</span>` + uniqueSym.legendHtml);\r\n            this.propertyStyleLookup[uniqueVal['value']] = uniqueSym.olStyle;\r\n        }\r\n\r\n        let _this = this;\r\n\r\n        this.olStyle = function (feature, resolution) {\r\n            let checkProperties = feature.getProperties();\r\n            let checkProperty = checkProperties[_this.propertyName];\r\n\r\n            let returnValue;\r\n            if (_this.propertyStyleLookup[checkProperty] !== undefined) {\r\n                returnValue = [_this.propertyStyleLookup[checkProperty]];\r\n            } else {\r\n               returnValue = [_this.defaultStyle];\r\n            }\r\n\r\n            return returnValue;\r\n        };\r\n\r\n        if (this.defaultLabelHtml !== null) {\r\n            this.legendArray.push(this.defaultLabelHtml);\r\n        }\r\n\r\n        this.legendHtml = '<ul>';\r\n        for (let h of this.legendArray) {\r\n            this.legendHtml += `<li>${h}</li>`;\r\n        }\r\n        this.legendHtml += '</ul>';\r\n    }\r\n}\r\n\r\n\r\n\r\n\r\n\r\n/**\r\n * style and legend object\r\n * @typedef {object} styleAndLegend\r\n * @property {styleFunc} style - style function\r\n * @property {string} legend - legend content\r\n */\r\n\r\n/**\r\n *\r\n * @param {object} esriResponse - layer info\r\n * @returns {styleAndLegend} style and legend object\r\n */\r\nexport function makeFeatureServiceLegendAndSymbol(esriResponse) {\r\n    \"use strict\";\r\n    let renderer = esriResponse['drawingInfo']['renderer'];\r\n    let symbolLegendOut = null;\r\n\r\n    switch (renderer['type']) {\r\n        case 'simple':\r\n            switch (esriResponse['geometryType']) {\r\n                case 'esriGeometryPoint':\r\n                    symbolLegendOut = new SingleSymbol(esriResponse, PointSymbol);\r\n                    break;\r\n                case 'esriGeometryPolyline':\r\n                    symbolLegendOut = new SingleSymbol(esriResponse, LineSymbol);\r\n                    break;\r\n                case 'esriGeometryPolygon':\r\n                    symbolLegendOut = new SingleSymbol(esriResponse, PolygonSymbol);\r\n                    break;\r\n                default:\r\n                    console.log(esriResponse);\r\n                    alert(esriResponse['geometryType'] + ' not handled');\r\n            }\r\n            break;\r\n        case 'uniqueValue':\r\n            switch (esriResponse['geometryType']) {\r\n                case 'esriGeometryPoint':\r\n                    symbolLegendOut = new UniqueValueSymbol(esriResponse, PointSymbol);\r\n                    break;\r\n                case 'esriGeometryPolyline':\r\n                    symbolLegendOut = new UniqueValueSymbol(esriResponse, LineSymbol);\r\n                    break;\r\n                case 'esriGeometryPolygon':\r\n                    symbolLegendOut = new UniqueValueSymbol(esriResponse, PolygonSymbol);\r\n                    break;\r\n                default:\r\n                    console.log(esriResponse);\r\n                    alert(esriResponse['geometryType'] + ' not handled');\r\n            }\r\n            break;\r\n        default:\r\n            alert('not handled renderer type: ' + renderer['type']);\r\n    }\r\n\r\n    if (symbolLegendOut == null) {\r\n        return {style: undefined, legend: ''};\r\n    } else {\r\n        return {style: symbolLegendOut.olStyle, legend: symbolLegendOut.legendHtml};\r\n    }\r\n}\r\n\r\nnm.makeFeatureServiceLegendAndSymbol = makeFeatureServiceLegendAndSymbol;\r\n\r\n/**\r\n *\r\n * @param {object} lyrObject - the layer as defined in the response\r\n * @param {boolean} [iconsOnly=false] use only icons\r\n * @returns {string} legend html\r\n */\r\nfunction mapServiceLegendItem(lyrObject, iconsOnly) {\r\n\r\n\r\n    iconsOnly = typeof iconsOnly == 'boolean' ? iconsOnly : false;\r\n    let layerName = lyrObject['layerName'];\r\n    let legendItems = lyrObject['legend'];\r\n    let legendHtml = '';\r\n\r\n    if (legendItems.length == 1) {\r\n        legendHtml = `<img class=\"legend-layer-icon\" height=\"17\" src=\"data:image/png;base64,${legendItems[0]['imageData']}\">`;\r\n    } else {\r\n        legendHtml += '<span class=\"legend-items-expander\" title=\"Expand/Collapse\">&#9660;</span><ul>';\r\n        for (let i = 0; i < legendItems.length; i++) {\r\n            legendHtml += `<li>`;\r\n            legendHtml += `<span class=\"legend-layer-subitem\">${htmlEscape(legendItems[i]['label'])}</span>`;\r\n            legendHtml += `<img class=\"legend-layer-icon\" height=\"17\" src=\"data:image/png;base64,${legendItems[i]['imageData']}\">`;\r\n            legendHtml += `</li>`;\r\n        }\r\n        legendHtml += '</ul>';\r\n    }\r\n\r\n    if (!iconsOnly) {\r\n        legendHtml = `<span class=\"legend-layer-subitem\">${layerName}</span>` + legendHtml;\r\n    }\r\n\r\n    return legendHtml;\r\n}\r\n\r\n/**\r\n * make map service legent\r\n * @param {object} esriResponse - layer info\r\n * @returns {string} legend content\r\n */\r\nexport function makeMapServiceLegend(esriResponse) {\r\n    \"use strict\";\r\n\r\n    let newLegendHtml = '';\r\n\r\n    let layers = esriResponse['layers'];\r\n\r\n    if (layers.length == 1) {\r\n        newLegendHtml += mapServiceLegendItem(layers[0], true);\r\n    } else {\r\n        newLegendHtml += '<ul>';\r\n        for (let i = 0; i < layers.length; i++) {\r\n            newLegendHtml += '<li>' + mapServiceLegendItem(layers[i]) + '</li>';\r\n        }\r\n        newLegendHtml += '</ul>';\r\n    }\r\n\r\n    return newLegendHtml;\r\n}\r\n\r\nnm.makeMapServiceLegend = makeMapServiceLegend;\r\n","/**\r\n * Created by gavorhes on 12/8/2015.\r\n */\r\nimport provide from '../util/provide';\r\nconst nm = provide('olHelpers');\r\n\r\n\r\n/**\r\n * base interaction\r\n */\r\nclass MapInteractionBase {\r\n\r\n    /**\r\n     * map interaction base\r\n     * @param {string} subtype - the interaction subtype\r\n     */\r\n    constructor(subtype) {\r\n        this._map = undefined;\r\n        this._initialized = false;\r\n        this._subtype = subtype;\r\n    }\r\n\r\n    /**\r\n     * base initializer, returns true for already initialized\r\n     * @param {ol.Map} theMap - the ol Map\r\n     * @returns {boolean} true for already initialized\r\n     */\r\n    init(theMap) {\r\n        if (!this._initialized) {\r\n            this._map = theMap;\r\n            this._initialized = true;\r\n\r\n            return false;\r\n        }\r\n\r\n        return true;\r\n    }\r\n\r\n    /**\r\n     * get reference to the ol map object\r\n     * @returns {ol.Map} the map object\r\n     */\r\n    get map() {\r\n        return this._map;\r\n    }\r\n\r\n    /**\r\n     * get if is initialized\r\n     * @returns {boolean} is initialized\r\n     */\r\n    get initialized() {\r\n        return this._initialized;\r\n    }\r\n\r\n    /**\r\n     * Check the initialization status and throw exception if not valid yet\r\n     * @protected\r\n     */\r\n    _checkInit() {\r\n        if (!this.initialized) {\r\n            let msg = `${this._subtype} object not initialized`;\r\n            alert(msg);\r\n            console.log(msg);\r\n            throw msg;\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Check the initialization status and throw exception if not valid yet\r\n     */\r\n    checkInit(){\r\n        this._checkInit();\r\n    }\r\n}\r\nnm.MapInteractionBase = MapInteractionBase;\r\nexport default MapInteractionBase;\r\n","/**\r\n * Created by gavorhes on 11/3/2015.\r\n */\r\n\r\nimport MapMoveCls from './mapMoveCls';\r\n\r\n/**\r\n * The single map move object catch is that it is common to multimap pages\r\n * @type {MapMoveCls}\r\n */\r\nexport default new MapMoveCls();\r\n","/**\r\n * Created by gavorhes on 11/3/2015.\r\n */\r\n\r\n\r\nimport $ from '../jquery';\r\nimport MapInteractionBase from './mapInteractionBase';\r\nimport * as checkDefined from '../util/checkDefined';\r\nimport provide from '../util/provide';\r\nimport makeGuid from '../util/makeGuid';\r\nconst nm = provide('olHelpers');\r\n\r\n/**\r\n * assists with map move interactions, trigger callback functions\r\n * @augments MapInteractionBase\r\n */\r\nclass MapMoveCls extends MapInteractionBase {\r\n\r\n    /**\r\n     * constructor called implicitly\r\n     */\r\n    constructor() {\r\n        super('map move');\r\n        this._arrLyrRequest = [];\r\n        this._arrLyrTimeout = [];\r\n        this._arrLayer = [];\r\n        this._lookupLayer = {};\r\n\r\n        this._mapMoveCallbacks = [];\r\n        this._mapMoveCallbacksLookup = {};\r\n        this._mapMoveCallbackDelays = [];\r\n        this._mapMoveCallbackContext = [];\r\n        this._mapMoveCallbackTimeout = [];\r\n\r\n        this._mapExtent = undefined;\r\n        this._zoomLevel = undefined;\r\n    }\r\n\r\n    /**\r\n     * initialize the map move object\r\n     * @param {ol.Map} theMap - the ol map\r\n     */\r\n    init(theMap) {\r\n        if (super.init(theMap)) {\r\n            return;\r\n        }\r\n\r\n        let _this = this;\r\n\r\n        this.map.getView().on(['change:center', 'change:resolution'], function (e) {\r\n\r\n            _this._updateMapExtent();\r\n\r\n            // trigger the layer updates\r\n            for (let i = 0; i < _this._arrLayer.length; i++) {\r\n                _this.triggerLyrLoad(_this._arrLayer[i], i, e.type);\r\n            }\r\n\r\n            // trigger the map callbacks\r\n            for (let i = 0; i < _this._mapMoveCallbacks.length; i++) {\r\n                _this.triggerMoveCallback(i, e.type);\r\n            }\r\n        });\r\n    }\r\n\r\n    _updateMapExtent() {\r\n        let theView = this.map.getView();\r\n        this._zoomLevel = theView.getZoom();\r\n\r\n        let extentArray = theView.calculateExtent(this.map.getSize());\r\n\r\n        this._mapExtent = {\r\n            minX: extentArray[0],\r\n            minY: extentArray[1],\r\n            maxX: extentArray[2],\r\n            maxY: extentArray[3]\r\n        };\r\n    }\r\n\r\n    /**\r\n     * return the map extent\r\n     */\r\n    get mapExtent() {\r\n        if (!this._mapExtent) {\r\n            this._updateMapExtent();\r\n        }\r\n\r\n        return this._mapExtent;\r\n    }\r\n\r\n    /**\r\n     * Trigger the layer load\r\n     * @param {LayerBaseVector|*} lyr - the layer being acted on\r\n     * @param {number} [index=undefined] - index of the layer\r\n     * @param {string|*} [eventType=undefined] the event triggering the load, as 'change:center' or 'change:resolution'\r\n     */\r\n    triggerLyrLoad(lyr, index, eventType) {\r\n\r\n        if (checkDefined.undefinedOrNull(lyr) && checkDefined.undefinedOrNull(index)) {\r\n            throw 'need to define lyr or index';\r\n        } else if (checkDefined.definedAndNotNull(lyr) && checkDefined.undefinedOrNull(index)) {\r\n            index = this._arrLayer.indexOf(lyr);\r\n        } else if (checkDefined.undefinedOrNull(lyr) && checkDefined.definedAndNotNull(index)) {\r\n            lyr = this._arrLayer[index];\r\n        }\r\n\r\n        // clear the timeout\r\n        if (this._arrLyrTimeout[index] != null) {\r\n            clearTimeout(this._arrLyrTimeout[index]);\r\n            this._arrLyrTimeout[index] = null;\r\n        }\r\n\r\n        // abort if necessary and clear the request\r\n        if (this._arrLyrRequest[index] != null && this._arrLyrRequest[index] != 4) {\r\n            this._arrLyrRequest[index].abort();\r\n            this._arrLyrRequest[index] = null;\r\n        }\r\n\r\n        // dummy callback used if before load returns false\r\n        let callbackFunc = function () {};\r\n\r\n        if (lyr.mapMoveBefore(this._zoomLevel, eventType)) {\r\n            lyr.mapMoveMakeGetParams(this._mapExtent, this._zoomLevel);\r\n\r\n            let _this = this;\r\n\r\n            callbackFunc = function () {\r\n                function innerFunction(theLayer, theIndex) {\r\n                    let _innerThis = this;\r\n                    this._arrLyrRequest[theIndex] = $.get(\r\n                        theLayer.url,\r\n                        theLayer.mapMoveParams,\r\n                        function (d) {\r\n                            /**\r\n                             * @type {LayerBaseVector}\r\n                             */\r\n                            theLayer.mapMoveCallback(d);\r\n                            theLayer.loadCallback();\r\n                        }, 'json').fail(\r\n                        function (jqXHR) {\r\n                            if (jqXHR.statusText != 'abort') {\r\n                                console.log('failed');\r\n                                console.log(theLayer.url);\r\n                                console.log(theLayer.mapMoveParams);\r\n                            }\r\n                        }).always(\r\n                        function () {\r\n                            _innerThis._arrLyrTimeout[theIndex] = null;\r\n                            _innerThis._arrLyrRequest[theIndex] = null;\r\n                        });\r\n                }\r\n                innerFunction.call(_this, lyr, index);\r\n            };\r\n        } else {\r\n            lyr.clear();\r\n        }\r\n        this._arrLyrTimeout[index] = setTimeout(callbackFunc, lyr.onDemandDelay);\r\n    }\r\n\r\n    /**\r\n     * trigger the map move call back at the given index\r\n     * @param {number} ind - the index of the layer\r\n     * @param {string|*} [eventType=undefined] the event triggering the load as 'change:center' or 'change:resolution'\r\n     * @param {string} [functionId=undefined] the function id used to reference the added callback function\r\n     */\r\n    triggerMoveCallback(ind, eventType, functionId) {\r\n\r\n        if (typeof ind == 'undefined' && typeof functionId == 'undefined'){\r\n            throw 'either the function index or the id must be defined';\r\n        }\r\n\r\n        if (typeof ind !== 'number'){\r\n            ind = this._mapMoveCallbacks.indexOf(this._mapMoveCallbacksLookup[functionId]);\r\n        }\r\n\r\n        if (ind < 0){\r\n            console.log('function not found');\r\n\r\n            return;\r\n        }\r\n\r\n        // clear the timeout\r\n        if (this._mapMoveCallbackTimeout[ind] != null) {\r\n            clearTimeout(this._mapMoveCallbackTimeout[ind]);\r\n            this._mapMoveCallbackTimeout[ind] = null;\r\n        }\r\n\r\n        let ctx = this._mapMoveCallbackContext[ind];\r\n        let theFunc = this._mapMoveCallbacks[ind];\r\n\r\n        let _this = this;\r\n\r\n        let f = function () {\r\n            if (ctx !== null) {\r\n                theFunc.call(ctx, _this._mapExtent, _this._zoomLevel, eventType);\r\n            } else {\r\n                theFunc(_this._mapExtent, _this._zoomLevel, eventType);\r\n            }\r\n        };\r\n\r\n        this._mapMoveCallbackTimeout[ind] = setTimeout(f, this._mapMoveCallbackDelays[ind]);\r\n    }\r\n\r\n    /**\r\n     * Add a layer to the interaction\r\n     * @param {LayerBaseVector|*} lyr - layer to add\r\n     * @param {boolean} [triggerOnAdd=true] - if the layer should be loaded on add\r\n     */\r\n    addVectorLayer(lyr, triggerOnAdd) {\r\n        if (this._arrLayer.indexOf(lyr) > -1) {\r\n            console.log('already added ' + lyr.name + ' to map move');\r\n\r\n            return;\r\n        }\r\n        this._checkInit();\r\n\r\n        this._arrLyrRequest.push(null);\r\n        this._arrLyrTimeout.push(null);\r\n        this._arrLayer.push(lyr);\r\n        this._lookupLayer[lyr.id] = lyr;\r\n\r\n        triggerOnAdd = typeof triggerOnAdd == 'boolean' ? triggerOnAdd : true;\r\n\r\n        if (triggerOnAdd) {\r\n            if (this._mapExtent === undefined) {\r\n                this._updateMapExtent();\r\n            }\r\n            this.triggerLyrLoad(lyr, this._arrLayer.length - 1);\r\n        }\r\n    }\r\n\r\n    /**\r\n     * This callback is displayed as a global member.\r\n     * @callback mapMoveCallbackFunction\r\n     * @param {object} extent - extent object\r\n     * @param {number} extent.minX - minX\r\n     * @param {number} extent.minY - minY\r\n     * @param {number} extent.maxX - maxX\r\n     * @param {number} extent.maxY - maxY\r\n     * @param {number} zoomLevel - zoom level\r\n     * @param {string} [evtType=undefined] undefined for initial load, otherwise one of 'change:center', 'change:resolution'\r\n     */\r\n\r\n    /**\r\n     * add a callback to the map move event\r\n     * @param {mapMoveCallbackFunction} func - callback function\r\n     * @param {*} context - the context to use for this function\r\n     * @param {number} [delay=50] the delay before call load\r\n     * @param {boolean} [triggerOnAdd=true] if the layer should be loaded on add to mapMove\r\n     * @param {string} [functionId=undefined] optional id to reference the function later for outside triggering\r\n     */\r\n    addCallback(func, context, delay, triggerOnAdd, functionId) {\r\n\r\n        if (this._mapMoveCallbacks.indexOf(func) > -1) {\r\n            console.log('this function already added to map move');\r\n\r\n            return;\r\n        }\r\n        this._checkInit();\r\n        if (!functionId){\r\n            functionId = makeGuid();\r\n        }\r\n\r\n        this._mapMoveCallbacks.push(func);\r\n        this._mapMoveCallbacksLookup[functionId] = func;\r\n        this._mapMoveCallbackDelays.push(typeof delay == 'number' ? delay : 50);\r\n        this._mapMoveCallbackContext.push(checkDefined.definedAndNotNull(context) ? context : null);\r\n        this._mapMoveCallbackTimeout.push(null);\r\n\r\n        triggerOnAdd = typeof triggerOnAdd == 'boolean' ? triggerOnAdd : true;\r\n\r\n        if (triggerOnAdd) {\r\n            if (this._mapExtent === undefined) {\r\n                this._updateMapExtent();\r\n            }\r\n            this.triggerMoveCallback(this._mapMoveCallbacks.length - 1);\r\n        }\r\n    }\r\n}\r\n\r\nnm.MapMoveCls = MapMoveCls;\r\nexport default MapMoveCls;\r\n","/**\r\n * Created by gavorhes on 11/3/2015.\r\n */\r\n\r\nimport MapPopupCls from './mapPopupCls';\r\n\r\n/**\r\n * The single popup object catch is that it is common to multimap pages\r\n * @type {MapPopupCls}\r\n */\r\nexport default new MapPopupCls();\r\n","/**\r\n * Created by gavorhes on 11/3/2015.\r\n */\r\n\r\nimport $ from '../jquery';\r\nimport MapInteractionBase from './mapInteractionBase';\r\nimport propertiesZoomStyle from '../olHelpers/propertiesZoomStyle';\r\nimport provide from '../util/provide';\r\nimport ol from '../ol/ol';\r\n\r\n\r\nconst nm = provide('olHelpers');\r\n\r\n\r\nclass _FeatureLayerProperties {\r\n\r\n    /**\r\n     *\r\n     * @param {ol.Feature} feature the feature\r\n     * @param {LayerBaseVector|*} layer - the layer in the popup\r\n     * @param {number} layerIndex - index of the layer\r\n     * @param {ol.layer.Vector} selectionLayer - the ol selection layer\r\n     * @param {string} [esriLayerName=undefined] - esri layer name\r\n     */\r\n    constructor(feature, layer, layerIndex, selectionLayer, esriLayerName) {\r\n        this.feature = feature;\r\n        this.layer = layer;\r\n        this.layerIndex = layerIndex;\r\n        this.selectionLayer = selectionLayer;\r\n        this.popupContent = '';\r\n        this.esriLayerName = typeof esriLayerName == 'string' ? esriLayerName : undefined;\r\n    }\r\n\r\n    get layerName() {\r\n        if (typeof this.esriLayerName == 'string') {\r\n            return this.esriLayerName;\r\n        } else {\r\n            return this.layer.name;\r\n        }\r\n    }\r\n}\r\n\r\n/**\r\n * map popup class\r\n * @augments MapInteractionBase\r\n */\r\nclass MapPopupCls extends MapInteractionBase {\r\n\r\n    /**\r\n     * Definition for openlayers style function\r\n     * @callback olStyleFunction\r\n     * &param feature the openlayers vector feature\r\n     * $param\r\n     */\r\n\r\n    /**\r\n     * Definition for popup changed callback functions\r\n     * @callback popupChangedFunction\r\n     * @param $popContent jquery reference to the popup content\r\n     */\r\n\r\n    /**\r\n     * map popup constructor\r\n     */\r\n    constructor() {\r\n        super('map popup');\r\n        this._arrPopupLayerIds = [];\r\n        this._arrPopupLayerNames = [];\r\n        /**\r\n         *\r\n         * @type {Array<LayerBaseVector>}\r\n         * @private\r\n         */\r\n        this._arrPopupLayers = [];\r\n        this._arrPopupOlLayers = [];\r\n        this._arrPopupContentFunction = [];\r\n        this._$popupContainer = undefined;\r\n        this._$popupContent = undefined;\r\n        this._$popupCloser = undefined;\r\n        this._popupOverlay = undefined;\r\n        this._selectionLayers = [];\r\n        this._selectionLayerLookup = {};\r\n        this._mapClickFunctions = [];\r\n\r\n        //let a = function($jqueryContent){console.log($jqueryContent)};\r\n        //this._popupChangedLookup = {'a': a};\r\n        this._popupChangedFunctions = [];\r\n        /**\r\n         *\r\n         * @type {Array<LayerEsriMapServer>}\r\n         * @private\r\n         */\r\n        this._esriMapServiceLayers = [];\r\n\r\n        this._popupOpen = false;\r\n        this._popupCoordinate = null;\r\n\r\n        /**\r\n         *\r\n         * @type {Array.<_FeatureLayerProperties>}\r\n         */\r\n        this._passThroughLayerFeatureArray = [];\r\n\r\n        this._currentPopupIndex = -1;\r\n        this._popupContentLength = 0;\r\n\r\n    }\r\n\r\n    /**\r\n     * map popup initialization\r\n     * @param {ol.Map} theMap - the ol map\r\n     */\r\n    init(theMap) {\r\n        if (super.init(theMap)) {\r\n            return;\r\n        }\r\n        let $map = $('#' + this.map.getTarget());\r\n\r\n        $map.append(\r\n            '<div class=\"ol-popup\">' +\r\n            '<a href=\"#\" class=\"ol-popup-closer\"></a>' +\r\n            '<div class=\"popup-content\"></div>' +\r\n            '</div>'\r\n        );\r\n\r\n        this._$popupContainer = $map.find('.ol-popup');\r\n        this._$popupContent = $map.find('.popup-content');\r\n        this._$popupCloser = $map.find('.ol-popup-closer');\r\n\r\n        this._popupOverlay = new ol.Overlay({\r\n            element: this._$popupContainer[0],\r\n            autoPan: true,\r\n            autoPanAnimation: {\r\n                duration: 250\r\n            }\r\n        });\r\n\r\n        this._map.addOverlay(this._popupOverlay);\r\n\r\n        this._$popupCloser.click(() => {\r\n            this.closePopup();\r\n        });\r\n\r\n        // display popup on click\r\n        this._map.on('singleclick', (evt) => {\r\n            this.closePopup();\r\n            this._popupCoordinate = evt.coordinate;\r\n\r\n            if (this._esriMapServiceLayers.length > 0) {\r\n                let queryParams = {\r\n                    geometry: evt.coordinate.join(','),\r\n                    geometryType: 'esriGeometryPoint',\r\n                    layers: 'all',\r\n                    sr: this._map.getView().getProjection().getCode().split(':')[1],\r\n                    mapExtent: this._map.getView().calculateExtent(this._map.getSize()).join(','),\r\n                    imageDisplay: this._map.getSize().join(',') + ',96',\r\n                    returnGeometry: true,\r\n                    tolerance: 15,\r\n                    f: 'pjson'\r\n                };\r\n\r\n                for (let l of this._esriMapServiceLayers) {\r\n                    l.getPopupInfo(queryParams, this._selectionLayerLookup[l.id]);\r\n                }\r\n            }\r\n\r\n            let layerFeatureObjectArray = this._featuresAtPixel(evt.pixel);\r\n\r\n            /**\r\n             *\r\n             * @type {Array.<_FeatureLayerProperties>}\r\n             */\r\n            this._passThroughLayerFeatureArray = [];\r\n            this._currentPopupIndex = -1;\r\n\r\n            for (let i = 0; i < layerFeatureObjectArray.length; i++) {\r\n                let featObj = layerFeatureObjectArray[i];\r\n\r\n                let props = featObj.feature.getProperties();\r\n\r\n                let popupContentResponse = this._arrPopupContentFunction[featObj.layerIndex](props, this._$popupContent);\r\n\r\n                //skip if return was false\r\n                if (popupContentResponse === false) {\r\n                    //continue;\r\n                } else if (typeof popupContentResponse == 'string') {\r\n                    featObj.popupContent = popupContentResponse;\r\n                    this._passThroughLayerFeatureArray.push(featObj);\r\n                } else {\r\n                    featObj.selectionLayer.getSource().addFeature(featObj.feature);\r\n                }\r\n            }\r\n\r\n            this._popupContentLength = this._passThroughLayerFeatureArray.length;\r\n\r\n            this._currentPopupIndex = -1;\r\n\r\n            let popupHtml = '<div class=\"ol-popup-nav\">';\r\n            popupHtml += '<span class=\"previous-popup ol-popup-nav-arrow\">&#9664;</span>';\r\n            popupHtml += '<span class=\"next-popup ol-popup-nav-arrow\">&#9654;</span>';\r\n            popupHtml += `<span class=\"current-popup-item-number\" style=\"font-weight: bold;\"></span>`;\r\n            popupHtml += `<span>&nbsp;of&nbsp;</span>`;\r\n            popupHtml += `<span class=\"popup-content-length\" style=\"font-weight: bold;\">${this._popupContentLength}</span>`;\r\n            popupHtml += `<span>&nbsp;&nbsp;-&nbsp;&nbsp;</span>`;\r\n            popupHtml += `<span class=\"current-popup-layer-name\"></span>`;\r\n            popupHtml += '</div>';\r\n            popupHtml += '<div class=\"ol-popup-inner\">';\r\n\r\n            popupHtml += '</div>';\r\n\r\n            this._$popupContent.html(popupHtml);\r\n\r\n            this._$popupContent.find('.previous-popup').click(() => {\r\n                if (this._popupContentLength == 1) {\r\n                    return;\r\n                }\r\n\r\n                if (this._currentPopupIndex == 0) {\r\n                    this._currentPopupIndex = this._popupContentLength - 1;\r\n                } else {\r\n                    this._currentPopupIndex--;\r\n                }\r\n                this._triggerFeatSelect();\r\n            });\r\n\r\n            let nextPopup = this._$popupContent.find('.next-popup');\r\n\r\n            nextPopup.click(() => {\r\n                if (this._popupContentLength == 1 && this._currentPopupIndex > -1) {\r\n                    return;\r\n                }\r\n\r\n                if (this._currentPopupIndex == this._popupContentLength - 1) {\r\n                    this._currentPopupIndex = 0;\r\n                } else {\r\n                    this._currentPopupIndex++;\r\n                }\r\n                this._triggerFeatSelect();\r\n            });\r\n\r\n\r\n            if (this._popupContentLength > 0) {\r\n                nextPopup.trigger('click');\r\n                this._popupOverlay.setPosition(this._popupCoordinate);\r\n                this._$popupContent.scrollTop(0);\r\n                this._popupOpen = true;\r\n            }\r\n        });\r\n\r\n        //change mouse cursor when over marker\r\n        this._map.on('pointermove', (e) => {\r\n            if (e.dragging) {\r\n                return;\r\n            }\r\n            let pixel = this.map.getEventPixel(e.originalEvent);\r\n            let hit = this.map.hasFeatureAtPixel(pixel, (lyrCandidate) => {\r\n                for (let olLayer of this._arrPopupOlLayers) {\r\n                    if (lyrCandidate == olLayer) {\r\n                        return true;\r\n                    }\r\n                }\r\n\r\n                return false;\r\n            });\r\n            this.map.getTargetElement().style.cursor = hit ? 'pointer' : '';\r\n        });\r\n    }\r\n\r\n    /**\r\n     * helper to select features\r\n     * @private\r\n     */\r\n    _triggerFeatSelect() {\r\n        let $currentPopupItemNumber = this._$popupContent.find('.current-popup-item-number');\r\n        let $innerPopup = this._$popupContent.find('.ol-popup-inner');\r\n        let $layerNameSpan = this._$popupContent.find('.current-popup-layer-name');\r\n        this.clearSelection();\r\n        let lyrFeatObj = this._passThroughLayerFeatureArray[this._currentPopupIndex];\r\n        $currentPopupItemNumber.html((this._currentPopupIndex + 1).toFixed());\r\n        $layerNameSpan.html(lyrFeatObj.layerName);\r\n        $innerPopup.html(lyrFeatObj.popupContent);\r\n        lyrFeatObj.selectionLayer.getSource().addFeature(lyrFeatObj.feature);\r\n        for (let f of this._popupChangedFunctions) {\r\n            f(this._$popupContent);\r\n        }\r\n    }\r\n\r\n\r\n    /**\r\n     *\r\n     * @param {ol.Feature} feature - the ol feature\r\n     * @param {LayerEsriMapServer} lyr - the map server layer\r\n     * @param {string} popupContent - popup content\r\n     * @param {string} esriName - esri layer name\r\n     */\r\n    addMapServicePopupContent(feature, lyr, popupContent, esriName) {\r\n\r\n        let featLayerObject = new _FeatureLayerProperties(\r\n            feature, lyr, this._popupContentLength, this._selectionLayerLookup[lyr.id], esriName\r\n        );\r\n        featLayerObject.popupContent = popupContent;\r\n\r\n        this._passThroughLayerFeatureArray.push(featLayerObject);\r\n        this._popupContentLength++;\r\n\r\n        $('.popup-content-length').html(this._popupContentLength.toFixed());\r\n\r\n        if (!this._popupOpen) {\r\n            this._$popupContent.find('.next-popup').trigger('click');\r\n\r\n            this._popupOverlay.setPosition(this._popupCoordinate);\r\n            this._$popupContent.scrollTop(0);\r\n            this._popupOpen = true;\r\n        }\r\n    }\r\n\r\n    /**\r\n     *\r\n     * @param {ol.Pixel} pixel - the ol pixel\r\n     * @returns {Array.<_FeatureLayerProperties>} - feature layer properties\r\n     * @private\r\n     */\r\n    _featuresAtPixel(pixel) {\r\n        let layerFeatureObjectArray = [];\r\n        this.map.forEachFeatureAtPixel(pixel, (feature, layer) => {\r\n            let lyrIndex = this._arrPopupOlLayers.indexOf(layer);\r\n\r\n            if (lyrIndex > -1) {\r\n                layerFeatureObjectArray.push(new _FeatureLayerProperties(\r\n                    feature, this._arrPopupLayers[lyrIndex], lyrIndex, this._selectionLayers[lyrIndex]));\r\n            }\r\n        });\r\n\r\n        return layerFeatureObjectArray;\r\n    }\r\n\r\n    closePopup() {\r\n        this._checkInit();\r\n        this._popupOpen = false;\r\n        this._popupOverlay.setPosition(undefined);\r\n        this._$popupCloser[0].blur();\r\n        this.clearSelection();\r\n        this._$popupContent.html('');\r\n\r\n        return false;\r\n    };\r\n\r\n    /**\r\n     *\r\n     * @param {popupChangedFunction} chgFunction - popup change function\r\n     */\r\n    addPopupChangedFunction(chgFunction) {\r\n        this._popupChangedFunctions.push(chgFunction);\r\n    }\r\n\r\n    /**\r\n     *\r\n     * @param {LayerBase|*} lyr - the layer being acted on\r\n     * @param {object} [selectionStyle={}] the selection style configuration\r\n     * @param {string} [selectionStyle.color=rgba(255,170,0,0.5)] the selection color\r\n     * @param {number} [selectionStyle.width=10] the selection width for linear features\r\n     * @param {object|function} [selectionStyle.olStyle=undefined] an openlayers style object or function\r\n     * @returns {ol.layer.Vector} the new selection layer\r\n     * @private\r\n     */\r\n    _addPopupLayer(lyr, selectionStyle) {\r\n        this._checkInit();\r\n\r\n        selectionStyle = selectionStyle || {};\r\n        selectionStyle.color = selectionStyle.color || 'rgba(255,170,0,0.5)';\r\n        selectionStyle.width = selectionStyle.width || 10;\r\n\r\n        let theStyle;\r\n\r\n        if (selectionStyle.olStyle) {\r\n            theStyle = selectionStyle.olStyle;\r\n        } else {\r\n            theStyle = new ol.style.Style({\r\n                stroke: new ol.style.Stroke({\r\n                    color: selectionStyle.color,\r\n                    width: selectionStyle.width\r\n                }),\r\n                image: new ol.style.Circle({\r\n                    radius: 7,\r\n                    fill: new ol.style.Fill({color: selectionStyle.color}),\r\n                    stroke: new ol.style.Stroke({color: selectionStyle.color, width: 1})\r\n                }),\r\n                fill: new ol.style.Fill({\r\n                    color: selectionStyle.color\r\n                })\r\n            });\r\n        }\r\n\r\n        let selectionLayer = new ol.layer.Vector(\r\n            {\r\n                source: new ol.source.Vector(),\r\n                style: theStyle,\r\n                zIndex: 100\r\n            }\r\n        );\r\n\r\n        this._selectionLayers.push(selectionLayer);\r\n        this._selectionLayerLookup[lyr.id] = selectionLayer;\r\n        this.map.addLayer(selectionLayer);\r\n\r\n        return selectionLayer;\r\n    }\r\n\r\n    /**\r\n     * The popup callback function\r\n     * @callback popupCallback\r\n     * @param {object} featureProperties - the feature properties\r\n     * @param {jQuery} jqRef reference to the div content to do some async stuff inside the div\r\n     * @returns {string} the html content to be added to the popup\r\n     */\r\n\r\n    /**\r\n     * Add popup to the map\r\n     * @param {LayerBase|*} lyr The layer that the popup with act on\r\n     * @param {popupCallback} popupContentFunction - popup content function that makes popup info\r\n     * @param {object} [selectionStyle={}] the selection style configuration\r\n     * @param {string} [selectionStyle.color=rgba(255,170,0,0.5)] the selection color\r\n     * @param {number} [selectionStyle.width=10] the selection width for linear features\r\n     * @param {object|function} [selectionStyle.olStyle=undefined] an openlayers style object or function\r\n     * @returns {object} a reference to the ol selection layer\r\n     */\r\n    addVectorPopup(lyr, popupContentFunction, selectionStyle) {\r\n        let selectionLayer = this._addPopupLayer(lyr, selectionStyle);\r\n        this._arrPopupLayerIds.push(lyr.id);\r\n        this._arrPopupLayerNames.push(lyr.name);\r\n        this._arrPopupLayers.push(lyr);\r\n        this._arrPopupOlLayers.push(lyr.olLayer);\r\n        this._arrPopupContentFunction.push(popupContentFunction);\r\n\r\n        return selectionLayer;\r\n    };\r\n\r\n    /**\r\n     *\r\n     * @param {LayerBase} lyr - layer\r\n     */\r\n    removeVectorPopup(lyr) {\r\n        let idx = this._arrPopupLayerIds.indexOf(lyr.id);\r\n\r\n        if (idx > -1) {\r\n            this._arrPopupLayerIds.splice(idx, 1);\r\n            this._arrPopupLayerNames.splice(idx, 1);\r\n            this._arrPopupLayers.splice(idx, 1);\r\n            this._arrPopupOlLayers.splice(idx, 1);\r\n            this._arrPopupContentFunction.splice(idx, 1);\r\n            this._selectionLayers.splice(idx, 1);\r\n            delete this._selectionLayerLookup[lyr.id];\r\n        }\r\n    }\r\n\r\n    /**\r\n     *\r\n     * @param {LayerEsriMapServer} lyr - map server layer\r\n     * @param {object} [selectionStyle={}] the selection style configuration\r\n     * @param {string} [selectionStyle.color=rgba(255,170,0,0.5)] the selection color\r\n     * @param {number} [selectionStyle.width=10] the selection width for linear features\r\n     * @param {object|function} [selectionStyle.olStyle=undefined] an openlayers style object or function\r\n     * @returns {object} a reference to the ol selection layer\r\n     */\r\n    addMapServicePopup(lyr, selectionStyle) {\r\n        let selectionLayer = this._addPopupLayer(lyr, selectionStyle);\r\n        this._esriMapServiceLayers.push(lyr);\r\n\r\n        return selectionLayer;\r\n    }\r\n\r\n    clearSelection() {\r\n        this._checkInit();\r\n        for (let i = 0; i < this._selectionLayers.length; i++) {\r\n            this._selectionLayers[i].getSource().clear();\r\n        }\r\n        for (let f of this._mapClickFunctions) {\r\n            f();\r\n        }\r\n    };\r\n\r\n    /**\r\n     * Add a function to be called when the map is clicked but before any popups are implemented\r\n     * @param {function} func - the map click function\r\n     */\r\n    addMapClickFunction(func) {\r\n        this._mapClickFunctions.push(func);\r\n    }\r\n}\r\nnm.MapPopupCls = MapPopupCls;\r\nexport default MapPopupCls;\r\n","/**\r\n * Created by gavorhes on 12/14/2015.\r\n */\r\n\r\nimport provide from '../util/provide';\r\nimport * as zoomResolutionConvert from './zoomResolutionConvert';\r\nconst nm = provide('olHelpers');\r\n\r\n/**\r\n * A style function based on properties and zoom level, wraps normal feature, resolution function\r\n * @callback propertiesZoomStyle\r\n * @param {object} properties the feature properties\r\n * @param {number} zoom level\r\n *\r\n */\r\n\r\n/**\r\n * wrapper to define a style function by properties and zoom level\r\n * @param {propertiesZoomStyle|*} styleFunc - style function\r\n * @returns {function|*} new function\r\n */\r\nfunction propertiesZoomStyle(styleFunc) {\r\n    if (styleFunc == undefined){\r\n        return undefined;\r\n    }\r\n\r\n    return function (feature, resolution) {\r\n        styleFunc(feature.getProperties(), zoomResolutionConvert.resolutionToZoom(resolution));\r\n    };\r\n}\r\n\r\nnm.propertiesZoomStyle = propertiesZoomStyle;\r\nexport default propertiesZoomStyle;\r\n","/**\r\n * Created by gavorhes on 12/15/2015.\r\n */\r\n\r\nimport quickMapBase from './quickMapBase';\r\nimport provide from '../util/provide';\r\nimport mapMove from './mapMove';\r\nimport mapPopup from './mapPopup';\r\nlet nm = provide('olHelpers');\r\n\r\n/**\r\n * Sets up a map with some default parameters and initializes\r\n * mapMove and mapPopup\r\n *\r\n * @param {object} [options={}] config options\r\n * @param {string} [options.divId=map] map div id\r\n * @param {object} [options.center={}] center config object\r\n * @param {number} [options.center.x=-10018378] center x, web mercator x or lon\r\n * @param {number} [options.center.y=5574910] center y, web mercator y or lat\r\n * @param {number} [options.zoom=7] zoom level\r\n * @param {number} [options.minZoom=undefined] min zoom\r\n * @param {number} [options.maxZoom=undefined] max zoom\r\n * @param {boolean} [options.baseSwitcher=true] if add base map switcher\r\n * @param {boolean} [options.fullScreen=false] if add base map switcher\r\n * @returns {ol.Map} the ol map\r\n */\r\nfunction quickMap(options) {\r\n    let m = quickMapBase(options);\r\n    mapMove.init(m);\r\n    mapPopup.init(m);\r\n\r\n    return m;\r\n}\r\n\r\n\r\nnm.quickMap = quickMap;\r\nexport default quickMap;\r\n","/**\r\n * Created by gavorhes on 3/25/2016.\r\n */\r\n\r\n/**\r\n * Created by gavorhes on 12/15/2015.\r\n */\r\n\r\nimport $ from '../jquery';\r\nimport provide from '../util/provide';\r\nimport ol from '../ol/ol';\r\nconst nm = provide('olHelpers');\r\n\r\n/**\r\n * Sets up a map with some default parameters and initializes\r\n * mapMove and mapPopup\r\n *\r\n * @param {object} [options={}] config options\r\n * @param {string} [options.divId=map] map div id\r\n * @param {object} [options.center={}] center config object\r\n * @param {number} [options.center.x=-10018378] center x, web mercator x or lon\r\n * @param {number} [options.center.y=5574910] center y, web mercator y or lat\r\n * @param {number} [options.zoom=7] zoom level\r\n * @param {number} [options.minZoom=undefined] min zoom\r\n * @param {number} [options.maxZoom=undefined] max zoom\r\n * @param {boolean} [options.baseSwitcher=true] if add base map switcher\r\n * @param {boolean} [options.fullScreen=false] if add base map switcher\r\n * @returns {ol.Map} the ol map\r\n */\r\nfunction quickMapBase(options) {\r\n    options = options || {};\r\n    options.divId = options.divId || 'map';\r\n    options.center = options.center || {};\r\n    options.center.x = typeof options.center.x == 'number' ? options.center.x : -10018378;\r\n    options.center.y = typeof options.center.y == 'number' ? options.center.y : 5574910;\r\n    options.zoom = typeof options.zoom == 'number' ? options.zoom : 7;\r\n    options.baseSwitcher = typeof options.baseSwitcher == 'boolean' ? options.baseSwitcher : true;\r\n    options.fullScreen = typeof options.fullScreen == 'boolean' ? options.fullScreen : false;\r\n\r\n\r\n    let $mapDiv = $('#' + options.divId);\r\n    $mapDiv.css('position', 'relative');\r\n\r\n    let osmLayer = new ol.layer.Tile({source: new ol.source.OSM()});\r\n    let satLayer = new ol.layer.Tile({visible: false, source: new ol.source.MapQuest({layer: 'sat'})});\r\n\r\n    let osmCss = \"url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAMAAABg3Am1AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAMAUExURQAAADQ1NDk5OURFREtLS1FHSFlZWGJRVGJiYWdmZWxsbHRmaXBpanN0c3V0dHp5eX5+fIVzd4F3eeV0jud5juZ8k4aHhomHhoyGh5eGj5OVlJiVlZiYl5qZmJydnKOTlaKZmqKdnaOioaqqqKuzsbOvrrSysLa3tbW4uLm6ub27ub+/vbGXwbCZwbCgxLKlxrOqyLStybO3yrSxyrWzzbW2y7a1zbK4y7W6zbW8y760yrTAzbTFzrPKzrLOzrTJzrTOzr7CwbXC0LXK0LTO0L3I0bPQz7TQz7PS0bXQ0LnR0brW1bzT0r7U077V1Lzc2dqNqteUsdyXscaquuOHneaGmueHnOeJnuiBleiKn+eNoOiOoOWUpOiRo+iSpeiUpeqYpumaqOmdrPSynemgruSqtOmisOmlsuuqtequuOW1vOuxu+uxvOq1ve+xvPK0pvW3o/W5pfO5qvS7qfCwvMOuwc2/wNenxNyyzNe/0Nq31Nq51dy72Oy3wOu4wOu+xey4wO+6xO2+xfTAr/TCsvfFtPHLvvTJuMPDwMfHxcXKyc3DxMvFyMvLyM3PzcDV08DV1MTX1cbY1s7X1sjZ1sra2Mnd3M7b2c7c2tfH1tnB1t7F2d7M29fX1tLY1tDd2tHe3NTf3NnS19rZ1tva2Nnf3t3d28rh3tXg3Nnh3tzj393k39ni4N7k4N7n5uXDyOfLz+zAxu3CyOzEyezKzeDJ3eLM3uvP0u3P0ePf2+7R0u7Q1u/U0+7U1ezc0+7a2e/d2+3f3vbFzvLOwfHN0PPQw/TUx/LWyvLYzPDQ1fPe0ubc4vve4uHh3+nh3+/h2u/h3vHj2vHl3uHm4eTn4uDp5ebo4+Xo5ODq6ebq6OTv6+nl4+/j4O7l4e7n5ujp4+np5Ozq5e7s5urt6O7t6Orw6u7x6u3x7vPj5PDl4fDo4vDq5fDt5vDu6PDv7PTv6fDx6vHx7fH17fXw6fXy7fb07/bz8fT18vn38vr39fr48/r59Pr6+P3++//+/gAAALNTSk0AAAEAdFJOU////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wBT9wclAAAACXBIWXMAAA7DAAAOwwHHb6hkAAAAGHRFWHRTb2Z0d2FyZQBwYWludC5uZXQgNC4wLjlsM35OAAAFNElEQVRIS1VVCZxVUxi/9l0UIUT2bMnY43bVI2c0Y01kSWIaS0j2JEtkN41piomZrPPKQ2aQ7JKImOZlnm2493TJzDufuU1Zi+v/fee+mZ//793vnPOd7zvfes5zDBEZkBBjAcIjb+Iiotqgdhat8AMK0vl7/R9N7GiWtshqIr+EZ5gYKibyUsXY1l/mfFpssvUlWQ0FkU3gy4+RB/+kwYcO8pRSnldcOU/r2lAHARSwk2ORgEmOdC1EsuRiYSqMPwwroMIraZk5V2fYJQjCKfZrRmh3gSAZi2i4b7wSylWu8EqZwS59JkFUaW96JbNSc+CEUmt4rorwuZmWdDaoc+uZETuQlTCU5xYzR7muUnVUVo+BcRhre/VwUpasgJwhH7JkYIYA0sNxhmCwUK+lw6vCKBZehw01dEiyw4Q4aE0Z4ahDhKaFQsGnJ2BgqKoTBsNjFy0SlW6whRAZTdm8DBJmkBZhDi1j4xJQBk6ywrWUTymaCxac8lROcdauRGzQSNtA7EHUYhXyEwhhgjFUqRuO+rauhF1awFpzCsmwUbjIFBR0u1bKtyGpulW/H/cVVzkyGaIWTIR9pFAV6GK2gPMXMX8gPk9zzxXgI1kimcAltEYr+cjio1imlKpEa9rOipLm+p+CZ6Bw//qd1/f/O+GwMxbSLpyoZEcwkyh2jIks+3hmdd2jWUw4scxNysnHxU7nSspTRcJjCZGL3IsjsYJMMg5mwgx7gaIOLBFCogAgBBoNa9w+DE6I+Bs7FTgwwrJbHjWDgpYo2KwtBTcYEDuloC9geQw+k2RGnPGpTaOlq7AS+YICUz4DZVaX2TiNDhuYfTtY4geLi0IoCm3XccwM9hx4kU28StQEljDs3ZEpFGA+8dKzLmV9ymIwF5FOGn2GdJM8KLHDJbXyiYVMG9MRTLiXGGg2QKaxM3khPSRrwM9zEIardxU2w/EiA0gOeYKHzDR0V7/QGV3lKIA9ktrDArxO3gdA+k6SKoBiVwcm7NjZb9+Hnztg282TuHVZ9LOISFNt9MgyCetZVczSxnyDbl17Penq6mqpg1IhRaEO2aVLUO4/r17H8tTv6f13h71dduvZI3Y+uMdWksNSauLovJw5hsqiPIUvt0ku7/iBeUR3sksmomYWtRbAjbiLfv2lX9/V7LVG4uYnUZXhQ7f2OPCZEx9wrYWTcePEQqPEML8pl4mMdr/jlXlvHiRiJ2+MSTFY4TTSYStuvz2R/JXh+PPeGXm055J+3/YDWuNu3R3DArPutyg0ZgykMVDU9Ndm22+wYalr2rse48CnsTIFcMn73vfhNrktx1EUcZnPv6ah3Yy5cDTRdBEoGoBeah71dqFyjZDJLkWk3N3v4uuktssjWpzciMPxQeHj8nMKzcGuB0tAyzFhdCKOYWv4HwOQVwIxLG99a6uvH3sJCyO3h+k4EZ+G7+xj5f4XXksoaGrdMRzSc8ARA8+cdOuk2x6fffNNt5x+Ro1omPlrT/CQDlcNlpx4NBIWXhkx7Y3Zp3ofNR7Uv89Om/beW0TLIynHv3vs1VsOFpSWSXvfuPUf9BrRFyxgXdHoKJnQFegPOovvzz59ntrzye240ig8UQ3lDI2VqwagrKIQcLXNFL3wglN2OHdBQ6/vI3kENDVBwRb3k1XtczFbjWn4EzMYi7CF3129+JTYuRSdrGuS92g5dpqn6qXoJQs5xmL8p+Wt4hLbt0mx2OLNZR2bbPy8zJNQGFM/f/CfXZekRYFjGCWjIJpM+WiCzGBPWHhoyaAsjRT/B2Gy5yzYJkwUAAAAAElFTkSuQmCC')\";\r\n    let aerialCss = \"url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAMAAABg3Am1AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAMAUExURQALBgIMDQgOBwQOEQcTBwUSCwoVDAwdBw8ZDgUREwYUGAYZFQYZGgkTFQoVGQsZFAwZHBMeDhIbFBEbHAwWIA4bIREcIQ4hCQwjFw4lHBgkDB8sDxUiExIiGhAoGxohFRshGRorHQcrKQsiIQwmKgooJA0pKQ81Jw8yLRMiIxImKxUrJREuKhslJB0rIhooKRUuMBMyLhkwJhozKh48LxUzMRM9MBwzMiUvFCMtGiMwEiwzFCgzHDI+GSIsISkvJSQxIiM2LiY5Jic+Lyk0JSo0Ky49JSs9KSU1NSM7NCs2NS8+NDM1JzU9Ljg7IDJCHS1DLSNAMitCMSxIOjREITZLIDZJKDlFIjpFKztKJT1LKzJBMzpHMD1JMjpKPD1RKjlQNC1DQj5QQEA8MEJGJkBKJUJNK0lLLEJMMkVMPEpONENSLUdZL0pTLkpaLkRUMkRSPEVZMktUM0pVOklZMklZNEpcNU1ZMk1ZNUxfMk5dNkxcOVFUM1RUOFJbNVFZOVNYPVFdOVJdPFVaOVVaPVVdOlVdPVpaNlpdO0phN01hOlBiN1NhPFNoP1piPWFbPmRjPENOQEtPSURTQkJVS0xVQk1VSkxbQkxcS0heUVFXRFRcQlJfTFxeQlpeS05lQk1kSFRjQVRjSlZpQ1tkQlxlSlxpRF1rSVVnUVtlU1llXF9tU1xoXlxwSl9ramRfQmJlQ2FhSWFlSWFlTmVlSWRmTGFoQWFpRWFsRmVpRWVtRmNsSmtlRGpqRmpsS2BmWGRsUmFrW2ptUmZyR2RxTGpxTWVyU2RyW2d5V2tzUmt0WW15VG15WXFuTHNtVnFxTXF4T3h0TnJzUnJ1XHJ4VXN6Wnp0VHx1W315VXp8XGR0YGx0YHVzZXJ0aHR9ZXV+aHl9YHOCXXqBXXeCYHyCY3iEaHyIYn+JaXqKcYB5WIN6Y4SCXoCDZIGEaYCIZoOLa4iCaImJbIOOdYuMco6OeIuVcpOKbZKPc5aQb5eXe5ufg6KjhAAAAAAAAAAAAAAAAOGCeQgAAAEAdFJOU////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wBT9wclAAAACXBIWXMAAA7DAAAOwwHHb6hkAAAAGHRFWHRTb2Z0d2FyZQBwYWludC5uZXQgNC4wLjlsM35OAAAH80lEQVRISy1WbXQUVxm+6wqnk3Zmpxl2FG2EGg92C8GDlWptVTwa+uF3xcKmDfFzCUzDsJNsunXipglJXJbrtJWmwZNSnHD3jojRgUIm2UumIZ0JZ7JByrALbMWW0IBW8aRa4+cf76TeX3Nm3uc+z/s+7/vugl4r/aMTrT4e1pPTqnnmJNn5AyUzRnrRle/qE33dsvrBtAQVoxtpZNK3zSzYjUjviWO2Ag+R77dl7W36n/1Ep9KBPG/S+Py0PkjU/gPKQGqwTHryiWYFAXSvMairsio7SjyNsnCzh0qKImV9/7mhfHQZx2yN1O+7rXUm33MUPaboOkAJHaoIdXfJj2xWeyD8jMFEXkvIu5qzpU988gWB5zl+GS+sFe55trEVPdWZB2miq8bBVkNFO2R0qnrfkiXhcJhtDNXE6tbW97/s9O9/7ZfVhx86/CwrROpfvvxboMqeLsuqPr1j44qEwDNMOBximUiYoU8sw7BC/a7T72uEnyJDlGxZ9KcglZRyuqqrv/tSZErgOI4NgRBTIw9EmHAoFGZZnp6aGaJ2GTxfxYs8kKVUQh7WB5hQeC3LsUxoxVKW14l3BX2WcoUYPiZyLLe8teZ+iuT4GGhvV5KpKWkpyzxEr2MZgQ1xdRjfRBoH+2k6lIHjKTHPPBo8CSJISqqq4wGGOcWylIGlgvgNX1Gd8vF5f+IUIwb30ng+Gg2QfBRIMvy0jG8SVkYo4N0zvUXVRztbJ/L6xL7lUZEXBEHkuZqlS6gEAUgKJurnhFtfpACOYd8b/hVbJPqwi44a6KA0sPVjIi/SIyxb3u8KlAJ0S8jRVgrlW+nVHPdrhiXCxu42d86ByksDc80P3MkJFBFQ8Ho1lQegpWJRWFGsDsRwwv7pIyvuQW0ZkrX6NDVFbqcvaQI8vbyqzt5AARrsbKx5yhQEGs+wPO56bOK+0rcwMrOKkpUbZWYxV04UeZZv/cBKFhRL6Qdv9y4LfEDA7/thg7tTmv1a5/GnO0wl0dQg80wglZaHUmxRvjwAHOfyN0mxrpqLUpcjsK3NHYMo4R1o6eho2ZyIb2FoeOC3ILK8kZ2HQMOuWywGXUkJBCeTbYFS0+ym1h2/6UgmvnrvKYZZtIEXGf75C2cIAp5LHNd71x7uPoTjakrWH9e3KFpaatjUvJUysFw0KrLMYMW2lTg4PeUQx6kJEALvxXEmCdVyPLHtCSjBhc01XCjIgafxou+PE6KC1dhxSCwoBCc+N4P3btM84pmdSSjJnjO/nvY4LQfVyz5/I+v6IwjUOMjy+MVCxIbKupTJaEktp7cTKU42Pvjh2m/8cSpC6aPsaX/MHSuUQLVVsIa4RUTs/r/BVAexNdjdnsNG7j/rV93xheLMzKnFrPeTEQchCyCcKb25aAIn7lrAertrZwyNXM8N6zfWrFo3d2SmOEcF83x/r+OOFgrAHYWF7cELjhV7UQo/6WAIUVl9JFl8a//HZ66VpbY3I9QKZqPru77lA+iOWAIr0hKxHCmmr0othSyeIl5y3qt4xT8gSNrKEZozs8Els67rgsLOZ+ygzwMfbtNhobfgzpEyGnz7htPtzUi6PuOoj7K0WF/MXiUFxwGajRD1hjYXHXI9p406qOyinp5/tiWcDHY0jIu4n64Qfq7kliB2gemag9QbOia0PbbDMbd43SHuvxFxrAocxins7MX5Kqbe1QixKBxoV4//PfAgGCu+Rlm4SvZizyDH+0reDHp92iO0BuX3bCfItl0PEwvYLqpwXG2MHlGsQ4S8pMJZv1JGmHiEoHQDdOjwmVlEP/nE9ADKjI8xLI0OOGITfy0SbeG/C2jKUDGSlDhM9I3IpK9iup6XnbRNC7yqueNsJCCIiXzdQhnaGN+46umnEdy5U5UbUJ48LFM9GkJo8BdDOiAZ7ZIQbKhYLMqvhU2wmNxjEAsS2AI7y4nWF64duePbk7YV3zvAVLEMD9AxJRNa3KDUibV7DjnkuprMEYjScFNcaR2ceP2u9R/5k1052Ryme5phAFRswlHjAudiP4dOy7CaxLgdJh9vUlU1702/+LPa1U9fvPi9qlA4XEUBJc3dFlpsR457IDl1iPqLp7o81NQgyV19iYU38uTiv975Pd3SiwQcsGjx+v4/6fl5T7EOOMTCtpbKxfemsQq/3olQZcminADAAI0cuGLHaHOFxbuGvRk/Z9u7CULqoVR6NE0yx1avj30oRhc/jWUoIALGxkz0dg1Dl9iaI7LqOOXKsXJFwjiuEAi70Jra2nW1PL08zLBhZsMABpW5csI7TPfew9ipFKcn5k1i+1KyCWKjC3W/8dF1d666+RaabBVTFTHacjoojBNDh0NDxk+IPTlwfqJkWpbnpFHXIbLbmpxEQ3ff/Z0g/mauXsoln9wDRjy/NHsQFw3P6vWuTJ43/+FZrk2cvAFRipCKdfD9y2+pjRj78s0KdCUDKJvdV91ChngV38T20TM+gghjpJaPlpFr2xbEz5g4A/NGt5rNwdwmYGeeeMXBSLHHUIc+6RsojRH9VTUm3/mLf/64b470XvoxoTKhlMBQ2jMEzo2PjxdGMppmn1RM24bWFJqaQv4BcuJa2Sam7Zokq1ldCsz06NCBHrhwqVQYpfFj42NZexz1EW9SR/kT58nEeQKJb2fPXjjp0u/YUkwHEgLeOnf2nOuf1TRTM02CLKLTPy60/x1CCztqn7Ev+BdsC3m+30decQvW/wBNTwU+CfUQAQAAAABJRU5ErkJggg==')\";\r\n\r\n    if (options.baseSwitcher) {\r\n        let switcherContent = '<div class=\"base-map-switcher\" title=\"Toggle Base Layer\" style=\"';\r\n        switcherContent += 'position: absolute; top: 70px; left: 4px; border: solid black 1px; ';\r\n        switcherContent += `height: 50px; width: 50px; z-index: 10; border-radius: 4px; background: ${aerialCss};`;\r\n        switcherContent += '\"></div>';\r\n        $mapDiv.append(switcherContent);\r\n\r\n       $mapDiv.find('.base-map-switcher').click(function() {\r\n            \"use strict\";\r\n            osmLayer.setVisible(!osmLayer.getVisible());\r\n            satLayer.setVisible(!satLayer.getVisible());\r\n\r\n            if (osmLayer.getVisible()){\r\n                $(this).css('background', aerialCss);\r\n            } else {\r\n                $(this).css('background', osmCss);\r\n            }\r\n        });\r\n    }\r\n\r\n    if (options.zoom < 0 || options.zoom > 28) {\r\n        throw 'zoom out of range';\r\n    }\r\n\r\n    if (options.center.x >= -180 && options.center.x <= 180 && options.center.y >= -90 && options.center.y <= 90) {\r\n        let p = new ol.geom.Point([options.center.x, options.center.y]);\r\n        p.transform(\"EPSG:4326\", \"EPSG:3857\");\r\n        let coordinates = p.getCoordinates();\r\n        options.center.x = coordinates[0];\r\n        options.center.y = coordinates[1];\r\n    }\r\n\r\n    let map = new ol.Map({\r\n        layers: [osmLayer, satLayer],\r\n        target: options.divId,\r\n        controls: ol.control.defaults({\r\n            attributionOptions: {collapsible: false}\r\n        }),\r\n        view: new ol.View({\r\n            center: [options.center.x, options.center.y],\r\n            zoom: options.zoom,\r\n            minZoom: options.minZoom,\r\n            maxZoom: options.maxZoom\r\n        })\r\n    });\r\n    \r\n    if (options.fullScreen){\r\n        map.addControl(new ol.control.FullScreen());\r\n    }\r\n\r\n    return map;\r\n}\r\n\r\nnm.quickMapBase = quickMapBase;\r\nexport default quickMapBase;\r\n\r\n","/**\r\n * Created by gavorhes on 12/14/2015.\r\n */\r\n\r\nimport provide from '../util/provide';\r\nconst nm = provide('olHelpers.zoomResolutionConvert');\r\n\r\nlet _zoomResLookup = [\r\n    156543.03392804097, //0\r\n    78271.51696402048, //1\r\n    39135.75848201024, //2\r\n    19567.87924100512, //3\r\n    9783.93962050256, //4\r\n    4891.96981025128, //5\r\n    2445.98490512564, //6\r\n    1222.99245256282, //7\r\n    611.49622628141, //8\r\n    305.748113140705, //9\r\n    152.8740565703525, //10\r\n    76.43702828517625, //11\r\n    38.21851414258813, //12\r\n    19.109257071294063, //13\r\n    9.554628535647032, //14\r\n    4.777314267823516, //15\r\n    2.388657133911758, //16\r\n    1.194328566955879, //17\r\n    0.5971642834779395, //18\r\n    0.29858214173896974, //19\r\n    0.14929107086948487, //20\r\n    0.07464553543474244, //21\r\n    0.03732276771737122, //22\r\n    0.01866138385868561, //23\r\n    0.009330691929342804, //24\r\n    0.004665345964671402, //25\r\n    0.002332672982335701, //26\r\n    0.0011663364911678506, //27\r\n    0.0005831682455839253 //28\r\n];\r\n\r\n/**\r\n * Get the resolution given the zoom level\r\n * @param {number} zoomLevel - the zoom level\r\n * @returns {number|*} the map resolution\r\n */\r\nexport function zoomToResolution(zoomLevel) {\r\n    \"use strict\";\r\n\r\n    if (typeof zoomLevel == 'number') {\r\n        if (zoomLevel % 1 === 0 && zoomLevel >= 0 && zoomLevel <= 28) {\r\n            return _zoomResLookup[zoomLevel];\r\n        } else {\r\n            console.log(`invalid zoom level provided: ${zoomLevel}`);\r\n\r\n            return undefined;\r\n        }\r\n    } else {\r\n        return undefined;\r\n    }\r\n}\r\nnm.zoomToResolution = zoomToResolution;\r\n\r\n\r\n/**\r\n * Get resolution from the zoom level\r\n * @param {number} resolution - the resolution\r\n * @returns {number|*} the zoom level\r\n */\r\nexport function resolutionToZoom(resolution){\r\n    for (let i = 0; i < _zoomResLookup.length; i++){\r\n        if (resolution >= _zoomResLookup[i] ){\r\n            return i;\r\n        }\r\n    }\r\n\r\n    return 0;\r\n}\r\n\r\nnm.resolutionToZoom = resolutionToZoom;\r\n","// OpenLayers 3. See http://openlayers.org/\n// License: https://raw.githubusercontent.com/openlayers/ol3/master/LICENSE.md\n(function (root, factory) {\n  if (typeof exports === \"object\") {\n    module.exports = factory();\n  } else if (typeof define === \"function\" && define.amd) {\n    define([], factory);\n  } else {\n    root.ol = factory();\n  }\n}(this, function () {\n  var OPENLAYERS = {};\n  var p,x=this;function F(b,c,d){b=b.split(\".\");d=d||x;b[0]in d||!d.execScript||d.execScript(\"var \"+b[0]);for(var e;b.length&&(e=b.shift());)b.length||void 0===c?d[e]?d=d[e]:d=d[e]={}:d[e]=c}function aa(b){b.ua=function(){return b.Ac?b.Ac:b.Ac=new b}}\nfunction ba(b){var c=typeof b;if(\"object\"==c)if(b){if(b instanceof Array)return\"array\";if(b instanceof Object)return c;var d=Object.prototype.toString.call(b);if(\"[object Window]\"==d)return\"object\";if(\"[object Array]\"==d||\"number\"==typeof b.length&&\"undefined\"!=typeof b.splice&&\"undefined\"!=typeof b.propertyIsEnumerable&&!b.propertyIsEnumerable(\"splice\"))return\"array\";if(\"[object Function]\"==d||\"undefined\"!=typeof b.call&&\"undefined\"!=typeof b.propertyIsEnumerable&&!b.propertyIsEnumerable(\"call\"))return\"function\"}else return\"null\";\nelse if(\"function\"==c&&\"undefined\"==typeof b.call)return\"object\";return c}function ca(b){var c=ba(b);return\"array\"==c||\"object\"==c&&\"number\"==typeof b.length}function da(b){return\"string\"==typeof b}function ea(b){return\"number\"==typeof b}function ga(b){return\"function\"==ba(b)}function ha(b){var c=typeof b;return\"object\"==c&&null!=b||\"function\"==c}function I(b){return b[ia]||(b[ia]=++ja)}var ia=\"closure_uid_\"+(1E9*Math.random()>>>0),ja=0;function ka(b,c,d){return b.call.apply(b.bind,arguments)}\nfunction la(b,c,d){if(!b)throw Error();if(2<arguments.length){var e=Array.prototype.slice.call(arguments,2);return function(){var d=Array.prototype.slice.call(arguments);Array.prototype.unshift.apply(d,e);return b.apply(c,d)}}return function(){return b.apply(c,arguments)}}function ma(b,c,d){ma=Function.prototype.bind&&-1!=Function.prototype.bind.toString().indexOf(\"native code\")?ka:la;return ma.apply(null,arguments)}\nfunction na(b,c){var d=Array.prototype.slice.call(arguments,1);return function(){var c=d.slice();c.push.apply(c,arguments);return b.apply(this,c)}}function M(b,c){function d(){}d.prototype=c.prototype;b.X=c.prototype;b.prototype=new d;b.prototype.constructor=b;b.We=function(b,d,g){for(var h=Array(arguments.length-2),k=2;k<arguments.length;k++)h[k-2]=arguments[k];return c.prototype[d].apply(b,h)}};var oa;function pa(){};var qa;var sa=String.prototype.trim?function(b){return b.trim()}:function(b){return b.replace(/^[\\s\\xa0]+|[\\s\\xa0]+$/g,\"\")};function ta(b){if(!ua.test(b))return b;-1!=b.indexOf(\"&\")&&(b=b.replace(va,\"&amp;\"));-1!=b.indexOf(\"<\")&&(b=b.replace(wa,\"&lt;\"));-1!=b.indexOf(\">\")&&(b=b.replace(xa,\"&gt;\"));-1!=b.indexOf('\"')&&(b=b.replace(ya,\"&quot;\"));-1!=b.indexOf(\"'\")&&(b=b.replace(za,\"&#39;\"));-1!=b.indexOf(\"\\x00\")&&(b=b.replace(Aa,\"&#0;\"));return b}var va=/&/g,wa=/</g,xa=/>/g,ya=/\"/g,za=/'/g,Aa=/\\x00/g,ua=/[\\x00&<>\"']/;\nfunction Ba(b,c){return b<c?-1:b>c?1:0};function Ca(b,c,d){return Math.min(Math.max(b,c),d)}var Da=function(){var b;\"cosh\"in Math?b=Math.cosh:b=function(b){b=Math.exp(b);return(b+1/b)/2};return b}();function Ea(b,c){var d=b%c;return 0>d*c?d+c:d};function Fa(b){return function(c){if(c)return[Ca(c[0],b[0],b[2]),Ca(c[1],b[1],b[3])]}}function Ga(b){return b};function Ha(b,c){return b>c?1:b<c?-1:0}function Ia(b,c,d){var e=b.length;if(b[0]<=c)return 0;if(!(c<=b[e-1]))if(0<d)for(d=1;d<e;++d){if(b[d]<c)return d-1}else if(0>d)for(d=1;d<e;++d){if(b[d]<=c)return d}else for(d=1;d<e;++d){if(b[d]==c)return d;if(b[d]<c)return b[d-1]-c<c-b[d]?d-1:d}return e-1}function Ja(b){return b.reduce(function(b,d){return Array.isArray(d)?b.concat(Ja(d)):b.concat(d)},[])}function Ka(b,c){var d,e=ca(c)?c:[c],f=e.length;for(d=0;d<f;d++)b[b.length]=e[d]}\nfunction La(b,c){var d=b.indexOf(c),e=-1<d;e&&b.splice(d,1);return e}function Ma(b,c){var d=b.length;if(d!==c.length)return!1;for(var e=0;e<d;e++)if(b[e]!==c[e])return!1;return!0}function Na(b){var c=Oa,d=b.length,e=Array(b.length),f;for(f=0;f<d;f++)e[f]={index:f,value:b[f]};e.sort(function(b,d){return c(b.value,d.value)||b.index-d.index});for(f=0;f<b.length;f++)b[f]=e[f].value};function Pa(b){return function(c,d,e){if(void 0!==c)return c=Ia(b,c,e),c=Ca(c+d,0,b.length-1),b[c]}}function Qa(b,c,d){return function(e,f,g){if(void 0!==e)return e=Math.max(Math.floor(Math.log(c/e)/Math.log(b)+(0<g?0:0>g?1:.5))+f,0),void 0!==d&&(e=Math.min(e,d)),c/Math.pow(b,e)}};function Ra(b){if(void 0!==b)return 0}function Sa(b,c){if(void 0!==b)return b+c}function Ta(b){var c=2*Math.PI/b;return function(b,e){if(void 0!==b)return b=Math.floor((b+e)/c+.5)*c}}function Ua(){var b=5*Math.PI/180;return function(c,d){if(void 0!==c)return Math.abs(c+d)<=b?0:c+d}};function Va(b,c,d){this.center=b;this.resolution=c;this.rotation=d};var Wa=\"function\"===typeof Object.assign?Object.assign:function(b,c){if(void 0===b||null===b)throw new TypeError(\"Cannot convert undefined or null to object\");for(var d=Object(b),e=1,f=arguments.length;e<f;++e){var g=arguments[e];if(void 0!==g&&null!==g)for(var h in g)g.hasOwnProperty(h)&&(d[h]=g[h])}return d};function Ya(b){for(var c in b)delete b[c]}function Za(b){var c=[],d;for(d in b)c.push(b[d]);return c}function $a(b){for(var c in b)return!1;return!c};var ab=\"olm_\"+(1E4*Math.random()|0);function bb(b){function c(c){var e=b.listener,f=b.hc||b.target;b.kc&&N(b);return e.call(f,c)}return b.ic=c}function cb(b,c,d,e){for(var f,g=0,h=b.length;g<h;++g)if(f=b[g],f.listener===c&&f.hc===d)return e&&(f.deleteIndex=g),f}function db(b,c){var d=b[ab];return d?d[c]:void 0}function eb(b){var c=b[ab];c||(c=b[ab]={});return c}\nfunction fb(b,c){var d=db(b,c);if(d){for(var e=0,f=d.length;e<f;++e)b.removeEventListener(c,d[e].ic),Ya(d[e]);d.length=0;if(d=b[ab])delete d[c],0===Object.keys(d).length&&delete b[ab]}}function Q(b,c,d,e,f){var g=eb(b),h=g[c];h||(h=g[c]=[]);(g=cb(h,d,e,!1))?f||(g.kc=!1):(g={hc:e,kc:!!f,listener:d,target:b,type:c},b.addEventListener(c,bb(g)),h.push(g));return g}function gb(b,c,d,e){(b=db(b,c))&&(d=cb(b,d,e,!0))&&N(d)}\nfunction N(b){if(b&&b.target){b.target.removeEventListener(b.type,b.ic);var c=db(b.target,b.type);if(c){var d=\"deleteIndex\"in b?b.deleteIndex:c.indexOf(b);-1!==d&&c.splice(d,1);0===c.length&&fb(b.target,b.type)}Ya(b)}}function hb(b){var c=eb(b),d;for(d in c)fb(b,d)};function ib(){}ib.prototype.ja=!1;function jb(b){b.ja||(b.ja=!0,b.J())}ib.prototype.J=pa;function R(b,c){this.type=b;this.target=c||null}R.prototype.preventDefault=R.prototype.stopPropagation=function(){this.xe=!0};function kb(b){b.stopPropagation()}function lb(b){b.preventDefault()};function mb(){this.H={};this.A={}}M(mb,ib);mb.prototype.addEventListener=function(b,c){var d=this.A[b];d||(d=this.A[b]=[]);-1===d.indexOf(c)&&d.push(c)};function S(b,c){var d=\"string\"===typeof c?new R(c):c,e=d.type;d.target=b;var f=b.A[e],g;if(f){e in b.H||(b.H[e]=0);for(var h=0,k=f.length;h<k;++h)if(!1===f[h].call(b,d)||d.xe){g=!1;break}d=b.H[e];for(delete b.H[e];d--;)b.removeEventListener(e,pa);return g}}mb.prototype.J=function(){hb(this)};\nfunction nb(b,c){return c?c in b.A:0<Object.keys(b.A).length}mb.prototype.removeEventListener=function(b,c){var d=this.A[b];if(d){var e=d.indexOf(c);b in this.H?(d[e]=pa,++this.H[b]):(d.splice(e,1),0===d.length&&delete this.A[b])}};function ob(){mb.call(this);this.f=0}M(ob,mb);ob.prototype.v=function(){++this.f;S(this,\"change\")};ob.prototype.ba=function(b,c,d){if(Array.isArray(b)){for(var e=b.length,f=Array(e),g=0;g<e;++g)f[g]=Q(this,b[g],c,d);return f}return Q(this,b,c,d)};function pb(b,c,d){R.call(this,b);this.key=c;this.oldValue=d}M(pb,R);function T(b){ob.call(this);I(this);this.K={};void 0!==b&&this.l(b)}M(T,ob);var qb={};function rb(b){return qb.hasOwnProperty(b)?qb[b]:qb[b]=\"change:\"+b}T.prototype.get=function(b){var c;this.K.hasOwnProperty(b)&&(c=this.K[b]);return c};T.prototype.za=function(){return Wa({},this.K)};T.prototype.set=function(b,c,d){d?this.K[b]=c:(d=this.K[b],this.K[b]=c,d!==c&&(c=rb(b),S(this,new pb(c,b,d)),S(this,new pb(\"propertychange\",b,d))))};\nT.prototype.l=function(b,c){for(var d in b)this.set(d,b[d],c)};function sb(b,c,d){void 0===d&&(d=[0,0]);d[0]=b[0]*c+.5|0;d[1]=b[1]*c+.5|0;return d}function tb(b,c){if(Array.isArray(b))return b;void 0===c?c=[b,b]:(c[0]=b,c[1]=b);return c};function ub(b,c){b[0]+=c[0];b[1]+=c[1]}function vb(b,c){var d=Math.cos(c),e=Math.sin(c),f=b[1]*d+b[0]*e;b[0]=b[0]*d-b[1]*e;b[1]=f};function wb(b){this.length=b.length||b;for(var c=0;c<this.length;c++)this[c]=b[c]||0}wb.prototype.BYTES_PER_ELEMENT=4;wb.prototype.set=function(b,c){c=c||0;for(var d=0;d<b.length&&c+d<this.length;d++)this[c+d]=b[d]};wb.prototype.toString=Array.prototype.join;\"undefined\"==typeof Float32Array&&(wb.BYTES_PER_ELEMENT=4,wb.prototype.BYTES_PER_ELEMENT=wb.prototype.BYTES_PER_ELEMENT,wb.prototype.set=wb.prototype.set,wb.prototype.toString=wb.prototype.toString,F(\"Float32Array\",wb,void 0));function xb(b){this.length=b.length||b;for(var c=0;c<this.length;c++)this[c]=b[c]||0}xb.prototype.BYTES_PER_ELEMENT=8;xb.prototype.set=function(b,c){c=c||0;for(var d=0;d<b.length&&c+d<this.length;d++)this[c+d]=b[d]};xb.prototype.toString=Array.prototype.join;if(\"undefined\"==typeof Float64Array){try{xb.BYTES_PER_ELEMENT=8}catch(b){}xb.prototype.BYTES_PER_ELEMENT=xb.prototype.BYTES_PER_ELEMENT;xb.prototype.set=xb.prototype.set;xb.prototype.toString=xb.prototype.toString;F(\"Float64Array\",xb,void 0)};function yb(b,c,d,e,f){b[0]=c;b[1]=d;b[2]=e;b[3]=f};function zb(){var b=Array(16);Ab(b,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);return b}function Bb(){var b=Array(16);Ab(b,1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1);return b}function Ab(b,c,d,e,f,g,h,k,l,m,n,q,r,u,w,y,z){b[0]=c;b[1]=d;b[2]=e;b[3]=f;b[4]=g;b[5]=h;b[6]=k;b[7]=l;b[8]=m;b[9]=n;b[10]=q;b[11]=r;b[12]=u;b[13]=w;b[14]=y;b[15]=z}\nfunction Cb(b,c){b[0]=c[0];b[1]=c[1];b[2]=c[2];b[3]=c[3];b[4]=c[4];b[5]=c[5];b[6]=c[6];b[7]=c[7];b[8]=c[8];b[9]=c[9];b[10]=c[10];b[11]=c[11];b[12]=c[12];b[13]=c[13];b[14]=c[14];b[15]=c[15]}function Db(b){b[0]=1;b[1]=0;b[2]=0;b[3]=0;b[4]=0;b[5]=1;b[6]=0;b[7]=0;b[8]=0;b[9]=0;b[10]=1;b[11]=0;b[12]=0;b[13]=0;b[14]=0;b[15]=1}\nfunction Eb(b,c){var d=b[0],e=b[1],f=b[2],g=b[3],h=b[4],k=b[5],l=b[6],m=b[7],n=b[8],q=b[9],r=b[10],u=b[11],w=b[12],y=b[13],z=b[14],D=b[15],t=d*k-e*h,v=d*l-f*h,B=d*m-g*h,E=e*l-f*k,C=e*m-g*k,G=f*m-g*l,J=n*y-q*w,A=n*z-r*w,H=n*D-u*w,O=q*z-r*y,P=q*D-u*y,L=r*D-u*z,K=t*L-v*P+B*O+E*H-C*A+G*J;0!=K&&(K=1/K,c[0]=(k*L-l*P+m*O)*K,c[1]=(-e*L+f*P-g*O)*K,c[2]=(y*G-z*C+D*E)*K,c[3]=(-q*G+r*C-u*E)*K,c[4]=(-h*L+l*H-m*A)*K,c[5]=(d*L-f*H+g*A)*K,c[6]=(-w*G+z*B-D*v)*K,c[7]=(n*G-r*B+u*v)*K,c[8]=(h*P-k*H+m*J)*K,c[9]=(-d*P+\ne*H-g*J)*K,c[10]=(w*C-y*B+D*t)*K,c[11]=(-n*C+q*B-u*t)*K,c[12]=(-h*O+k*A-l*J)*K,c[13]=(d*O-e*A+f*J)*K,c[14]=(-w*E+y*v-z*t)*K,c[15]=(n*E-q*v+r*t)*K)}function Fb(b,c,d){var e=b[1]*c+b[5]*d+0*b[9]+b[13],f=b[2]*c+b[6]*d+0*b[10]+b[14],g=b[3]*c+b[7]*d+0*b[11]+b[15];b[12]=b[0]*c+b[4]*d+0*b[8]+b[12];b[13]=e;b[14]=f;b[15]=g}function Gb(b,c,d){Ab(b,b[0]*c,b[1]*c,b[2]*c,b[3]*c,b[4]*d,b[5]*d,b[6]*d,b[7]*d,1*b[8],1*b[9],1*b[10],1*b[11],b[12],b[13],b[14],b[15])}\nfunction Hb(b,c){var d=b[0],e=b[1],f=b[2],g=b[3],h=b[4],k=b[5],l=b[6],m=b[7],n=Math.cos(c),q=Math.sin(c);b[0]=d*n+h*q;b[1]=e*n+k*q;b[2]=f*n+l*q;b[3]=g*n+m*q;b[4]=d*-q+h*n;b[5]=e*-q+k*n;b[6]=f*-q+l*n;b[7]=g*-q+m*n}new Float64Array(3);new Float64Array(3);new Float64Array(4);new Float64Array(4);new Float64Array(4);new Float64Array(16);function Ib(b){for(var c=Jb(),d=0,e=b.length;d<e;++d)Kb(c,b[d]);return c}function Lb(b,c,d){return d?(d[0]=b[0]-c,d[1]=b[1]-c,d[2]=b[2]+c,d[3]=b[3]+c,d):[b[0]-c,b[1]-c,b[2]+c,b[3]+c]}function Mb(b,c){return c?(c[0]=b[0],c[1]=b[1],c[2]=b[2],c[3]=b[3],c):b.slice()}function Nb(b,c){return b[0]<=c[0]&&c[2]<=b[2]&&b[1]<=c[1]&&c[3]<=b[3]}function Jb(){return[Infinity,Infinity,-Infinity,-Infinity]}function Ob(b,c,d,e,f){return f?(f[0]=b,f[1]=c,f[2]=d,f[3]=e,f):[b,c,d,e]}\nfunction Pb(b){return Ob(Infinity,Infinity,-Infinity,-Infinity,b)}function Qb(b,c){var d=b[0],e=b[1];return Ob(d,e,d,e,c)}function Rb(b,c){return b[0]==c[0]&&b[2]==c[2]&&b[1]==c[1]&&b[3]==c[3]}function Sb(b,c){c[0]<b[0]&&(b[0]=c[0]);c[2]>b[2]&&(b[2]=c[2]);c[1]<b[1]&&(b[1]=c[1]);c[3]>b[3]&&(b[3]=c[3])}function Kb(b,c){c[0]<b[0]&&(b[0]=c[0]);c[0]>b[2]&&(b[2]=c[0]);c[1]<b[1]&&(b[1]=c[1]);c[1]>b[3]&&(b[3]=c[1])}\nfunction Tb(b,c,d,e,f){for(;d<e;d+=f){var g=b,h=c[d],k=c[d+1];g[0]=Math.min(g[0],h);g[1]=Math.min(g[1],k);g[2]=Math.max(g[2],h);g[3]=Math.max(g[3],k)}return b}function Ub(b){var c=0;b[2]<b[0]||b[3]<b[1]||(c=Vb(b)*Wb(b));return c}function Xb(b){return[b[0],b[1]]}function Yb(b){return[(b[0]+b[2])/2,(b[1]+b[3])/2]}\nfunction Zb(b,c,d,e){var f=c*e[0]/2;e=c*e[1]/2;c=Math.cos(d);var g=Math.sin(d);d=f*c;f*=g;c*=e;var h=e*g,k=b[0],l=b[1];b=k-d+h;e=k-d-h;g=k+d-h;d=k+d+h;var h=l-f-c,k=l-f+c,m=l+f+c,f=l+f-c;return Ob(Math.min(b,e,g,d),Math.min(h,k,m,f),Math.max(b,e,g,d),Math.max(h,k,m,f),void 0)}function Wb(b){return b[3]-b[1]}function $b(b,c){var d=Jb();ac(b,c)&&(d[0]=b[0]>c[0]?b[0]:c[0],d[1]=b[1]>c[1]?b[1]:c[1],d[2]=b[2]<c[2]?b[2]:c[2],d[3]=b[3]<c[3]?b[3]:c[3]);return d}function bc(b){return[b[0],b[3]]}\nfunction Vb(b){return b[2]-b[0]}function ac(b,c){return b[0]<=c[2]&&b[2]>=c[0]&&b[1]<=c[3]&&b[3]>=c[1]};function cc(){return!0}function dc(){return!1};/*\n\n Latitude/longitude spherical geodesy formulae taken from\n http://www.movable-type.co.uk/scripts/latlong.html\n Licensed under CC-BY-3.0.\n*/\nfunction ec(b){this.radius=b}function fc(b,c){var d=b[1]*Math.PI/180,e=c[1]*Math.PI/180,f=(e-d)/2,g=(c[0]-b[0])*Math.PI/180/2,d=Math.sin(f)*Math.sin(f)+Math.sin(g)*Math.sin(g)*Math.cos(d)*Math.cos(e);return 2*gc.radius*Math.atan2(Math.sqrt(d),Math.sqrt(1-d))}\nec.prototype.offset=function(b,c,d){var e=b[1]*Math.PI/180;c/=this.radius;var f=Math.asin(Math.sin(e)*Math.cos(c)+Math.cos(e)*Math.sin(c)*Math.cos(d));return[180*(b[0]*Math.PI/180+Math.atan2(Math.sin(d)*Math.sin(c)*Math.cos(e),Math.cos(c)-Math.sin(e)*Math.sin(f)))/Math.PI,180*f/Math.PI]};var gc=new ec(6370997);var hc={};hc.degrees=2*Math.PI*gc.radius/360;hc.ft=.3048;hc.m=1;hc[\"us-ft\"]=1200/3937;\nfunction ic(b){this.qa=b.code;this.b=b.units;this.h=void 0!==b.extent?b.extent:null;this.f=void 0!==b.global?b.global:!1;this.a=!(!this.f||!this.h);this.i=void 0!==b.getPointResolution?b.getPointResolution:this.j;this.c=null;this.g=b.metersPerUnit;var c=jc,d=b.code,e=kc||x.proj4;if(\"function\"==typeof e&&void 0===c[d]){var f=e.defs(d);if(void 0!==f){void 0===b.metersPerUnit&&(this.g=f.to_meter);void 0===b.units&&(this.b=f.units);var g,h;for(g in c)if(b=e.defs(g),void 0!==b)if(c=lc(g),b===f)mc([c,this]);\nelse{h=e(g,d);b=h.forward;h=h.inverse;var c=lc(c),k=lc(this);nc(c,k,oc(b));nc(k,c,oc(h))}}}}ic.prototype.l=function(){return this.qa};ic.prototype.C=function(){return this.h};function pc(b){return b.g||hc[b.b]}ic.prototype.j=function(b,c){if(\"degrees\"==this.b)return b;var d=qc(this,lc(\"EPSG:4326\")),e=[c[0]-b/2,c[1],c[0]+b/2,c[1],c[0],c[1]-b/2,c[0],c[1]+b/2],e=d(e,e,2),d=(fc(e.slice(0,2),e.slice(2,4))+fc(e.slice(4,6),e.slice(6,8)))/2,e=pc(this);void 0!==e&&(d/=e);return d};\nic.prototype.getPointResolution=function(b,c){return this.i(b,c)};var jc={},rc={},kc=null;function mc(b){sc(b);b.forEach(function(c){b.forEach(function(b){c!==b&&nc(c,b,tc)})})}function uc(b){jc[b.qa]=b;nc(b,b,tc)}function sc(b){var c=[];b.forEach(function(b){c.push(uc(b))})}function vc(b){return b?\"string\"===typeof b?lc(b):b:lc(\"EPSG:3857\")}function nc(b,c,d){b=b.qa;c=c.qa;b in rc||(rc[b]={});rc[b][c]=d}\nfunction oc(b){return function(c,d,e){var f=c.length;e=void 0!==e?e:2;d=void 0!==d?d:Array(f);var g,h;for(h=0;h<f;h+=e)for(g=b([c[h],c[h+1]]),d[h]=g[0],d[h+1]=g[1],g=e-1;2<=g;--g)d[h+g]=c[h+g];return d}}function lc(b){var c;if(b instanceof ic)c=b;else if(\"string\"===typeof b){c=jc[b];var d=kc||x.proj4;void 0===c&&\"function\"==typeof d&&void 0!==d.defs(b)&&(c=new ic({code:b}),uc(c))}else c=null;return c}function wc(b,c){if(b===c)return!0;var d=b.b===c.b;return b.qa===c.qa?d:qc(b,c)===tc&&d}\nfunction xc(b,c){var d=lc(b),e=lc(c);return qc(d,e)}function qc(b,c){var d=b.qa,e=c.qa,f;d in rc&&e in rc[d]&&(f=rc[d][e]);void 0===f&&(f=yc);return f}function yc(b,c){if(void 0!==c&&b!==c){for(var d=0,e=b.length;d<e;++d)c[d]=b[d];b=c}return b}function tc(b,c){var d;if(void 0!==c){d=0;for(var e=b.length;d<e;++d)c[d]=b[d];d=c}else d=b.slice();return d};function zc(){T.call(this);this.u=Jb();this.w=-1;this.h={};this.s=this.i=0}M(zc,T);zc.prototype.C=function(b){this.w!=this.f&&(this.u=this.ib(this.u),this.w=this.f);var c=this.u;b?(b[0]=c[0],b[1]=c[1],b[2]=c[2],b[3]=c[3]):b=c;return b};zc.prototype.o=function(b,c){this.Eb(xc(b,c));return this};function Ac(b,c,d,e,f,g){var h=f[0],k=f[1],l=f[4],m=f[5],n=f[12];f=f[13];for(var q=g?g:[],r=0;c<d;c+=e){var u=b[c],w=b[c+1];q[r++]=h*u+l*w+n;q[r++]=k*u+m*w+f}g&&q.length!=r&&(q.length=r);return q};function Bc(){zc.call(this);this.g=\"XY\";this.b=2;this.a=null}M(Bc,zc);function Cc(b){if(\"XY\"==b)return 2;if(\"XYZ\"==b||\"XYM\"==b)return 3;if(\"XYZM\"==b)return 4}p=Bc.prototype;p.ib=function(b){var c=this.a,d=this.a.length,e=this.b;b=Pb(b);return Tb(b,c,0,d,e)};\np.Ob=function(b){this.s!=this.f&&(Ya(this.h),this.i=0,this.s=this.f);if(0>b||0!==this.i&&b<=this.i)return this;var c=b.toString();if(this.h.hasOwnProperty(c))return this.h[c];var d=this.Ma(b);if(d.a.length<this.a.length)return this.h[c]=d;this.i=b;return this};p.Ma=function(){return this};function U(b,c,d){b.b=Cc(c);b.g=c;b.a=d}function Dc(b,c,d,e){if(c)d=Cc(c);else{for(c=0;c<e;++c){if(0===d.length){b.g=\"XY\";b.b=2;return}d=d[0]}d=d.length;c=2==d?\"XY\":3==d?\"XYZ\":4==d?\"XYZM\":void 0}b.g=c;b.b=d}\np.Eb=function(b){this.a&&(b(this.a,this.a,this.b),this.v())};p.rotate=function(b,c){var d=this.a;if(d){for(var e=d.length,f=this.b,g=d?d:[],h=Math.cos(b),k=Math.sin(b),l=c[0],m=c[1],n=0,q=0;q<e;q+=f){var r=d[q]-l,u=d[q+1]-m;g[n++]=l+r*h-u*k;g[n++]=m+r*k+u*h;for(r=q+2;r<q+f;++r)g[n++]=d[r]}d&&g.length!=n&&(g.length=n);this.v()}};function Ec(b,c){var d=0,e,f;e=0;for(f=c.length;e<f;++e)b[d++]=c[e];return d}function Fc(b,c,d,e){var f,g;f=0;for(g=d.length;f<g;++f){var h=d[f],k;for(k=0;k<e;++k)b[c++]=h[k]}return c}function Gc(b,c,d,e,f){f=f?f:[];var g=0,h,k;h=0;for(k=d.length;h<k;++h)c=Fc(b,c,d[h],e),f[g++]=c;f.length=g;return f};function Hc(b,c,d,e,f){f=void 0!==f?f:[];for(var g=0;c<d;c+=e)f[g++]=b.slice(c,c+e);f.length=g;return f}function Ic(b,c,d,e,f){f=void 0!==f?f:[];var g=0,h,k;h=0;for(k=d.length;h<k;++h){var l=d[h];f[g++]=Hc(b,c,l,e,f[g]);c=l}f.length=g;return f};function Jc(b,c,d,e,f,g,h){var k=(d-c)/e;if(3>k){for(;c<d;c+=e)g[h++]=b[c],g[h++]=b[c+1];return h}var l=Array(k);l[0]=1;l[k-1]=1;d=[c,d-e];for(var m=0,n;0<d.length;){var q=d.pop(),r=d.pop(),u=0,w=b[r],y=b[r+1],z=b[q],D=b[q+1];for(n=r+e;n<q;n+=e){var t,v=b[n];t=b[n+1];var B=w,E=y,C=z-B,G=D-E;if(0!==C||0!==G){var J=((v-B)*C+(t-E)*G)/(C*C+G*G);1<J?(B=z,E=D):0<J&&(B+=C*J,E+=G*J)}v=B-v;t=E-t;t=v*v+t*t;t>u&&(m=n,u=t)}u>f&&(l[(m-c)/e]=1,r+e<m&&d.push(r,m),m+e<q&&d.push(m,q))}for(n=0;n<k;++n)l[n]&&(g[h++]=\nb[c+n*e],g[h++]=b[c+n*e+1]);return h}\nfunction Kc(b,c,d,e,f,g,h,k){var l,m;l=0;for(m=d.length;l<m;++l){var n=d[l];a:{var q=b,r=n,u=e,w=f,y=g;if(c!=r){var z=w*Math.round(q[c]/w),D=w*Math.round(q[c+1]/w);c+=u;y[h++]=z;y[h++]=D;var t=void 0,v=void 0;do if(t=w*Math.round(q[c]/w),v=w*Math.round(q[c+1]/w),c+=u,c==r){y[h++]=t;y[h++]=v;break a}while(t==z&&v==D);for(;c<r;){var B,E;B=w*Math.round(q[c]/w);E=w*Math.round(q[c+1]/w);c+=u;if(B!=t||E!=v){var C=t-z,G=v-D,J=B-z,A=E-D;C*A==G*J&&(0>C&&J<C||C==J||0<C&&J>C)&&(0>G&&A<G||G==A||0<G&&A>G)||(y[h++]=\nt,y[h++]=v,z=t,D=v);t=B;v=E}}y[h++]=t;y[h++]=v}}k.push(h);c=n}return h};function Lc(b,c){Bc.call(this);this.W(b,c)}M(Lc,Bc);p=Lc.prototype;p.clone=function(){var b=new Lc(null);U(b,this.g,this.a.slice());b.v();return b};p.ra=function(){return Hc(this.a,0,this.a.length,this.b)};p.Ma=function(b){var c=[];c.length=Jc(this.a,0,this.a.length,this.b,b,c,0);b=new Lc(null);U(b,\"XY\",c);b.v();return b};p.U=function(){return\"LinearRing\"};p.W=function(b,c){b?(Dc(this,c,b,1),this.a||(this.a=[]),this.a.length=Fc(this.a,0,b,this.b)):U(this,\"XY\",null);this.v()};function Mc(b,c){Bc.call(this);this.W(b,c)}M(Mc,Bc);p=Mc.prototype;p.clone=function(){var b=new Mc(null);U(b,this.g,this.a.slice());b.v();return b};p.ra=function(){return this.a?this.a.slice():[]};p.ib=function(b){return Qb(this.a,b)};p.U=function(){return\"Point\"};p.W=function(b,c){b?(Dc(this,c,b,0),this.a||(this.a=[]),this.a.length=Ec(this.a,b)):U(this,\"XY\",null);this.v()};function Nc(b,c,d,e,f,g){for(var h=!1,k=b[d-e],l=b[d-e+1];c<d;c+=e){var m=b[c],n=b[c+1];l>g!=n>g&&f<(m-k)*(g-l)/(n-l)+k&&(h=!h);k=m;l=n}return h};function Oc(b,c,d,e,f,g,h){var k,l,m,n,q,r=f[g+1],u=[],w=d[0];m=b[w-e];q=b[w-e+1];for(k=c;k<w;k+=e){n=b[k];l=b[k+1];if(r<=q&&l<=r||q<=r&&r<=l)m=(r-q)/(l-q)*(n-m)+m,u.push(m);m=n;q=l}w=NaN;q=-Infinity;u.sort(Ha);m=u[0];k=1;for(l=u.length;k<l;++k){n=u[k];var y=Math.abs(n-m);if(y>q){m=(m+n)/2;var z;a:if(0!==d.length&&Nc(b,c,d[0],e,m,r)){var D=z=void 0;z=1;for(D=d.length;z<D;++z)if(Nc(b,d[z-1],d[z],e,m,r)){z=!1;break a}z=!0}else z=!1;z&&(w=m,q=y)}m=n}isNaN(w)&&(w=f[g]);return h?(h.push(w,r),h):[w,r]}\n;function Pc(b,c,d,e){for(var f=0,g=b[d-e],h=b[d-e+1];c<d;c+=e)var k=b[c],l=b[c+1],f=f+(k-g)*(l+h),g=k,h=l;return 0<f}function Qc(b,c,d,e){var f=0;e=void 0!==e?e:!1;var g,h;g=0;for(h=c.length;g<h;++g){var k=c[g],f=Pc(b,f,k,d);if(0===g){if(e&&f||!e&&!f)return!1}else if(e&&!f||!e&&f)return!1;f=k}return!0}\nfunction Rc(b,c,d,e,f){f=void 0!==f?f:!1;var g,h;g=0;for(h=d.length;g<h;++g){var k=d[g],l=Pc(b,c,k,e);if(0===g?f&&l||!f&&!l:f&&!l||!f&&l)for(var l=b,m=k,n=e;c<m-n;){var q;for(q=0;q<n;++q){var r=l[c+q];l[c+q]=l[m-n+q];l[m-n+q]=r}c+=n;m-=n}c=k}return c}function Sc(b,c,d,e){var f=0,g,h;g=0;for(h=c.length;g<h;++g)f=Rc(b,f,c[g],d,e);return f};function Tc(b,c){Bc.call(this);this.c=[];this.B=-1;this.D=null;this.G=-1;this.j=null;this.W(b,c)}M(Tc,Bc);p=Tc.prototype;p.clone=function(){var b=new Tc(null);Uc(b,this.g,this.a.slice(),this.c.slice());return b};p.ra=function(b){var c;void 0!==b?(c=Vc(this).slice(),Rc(c,0,this.c,this.b,b)):c=this.a;return Ic(c,0,this.c,this.b)};p.ab=function(){return this.c};function Wc(b){if(b.B!=b.f){var c=Yb(b.C());b.D=Oc(Vc(b),0,b.c,b.b,c,0);b.B=b.f}return b.D}\nfunction Vc(b){if(b.G!=b.f){var c=b.a;Qc(c,b.c,b.b)?b.j=c:(b.j=c.slice(),b.j.length=Rc(b.j,0,b.c,b.b));b.G=b.f}return b.j}p.Ma=function(b){var c=[],d=[];c.length=Kc(this.a,0,this.c,this.b,Math.sqrt(b),c,0,d);b=new Tc(null);Uc(b,\"XY\",c,d);return b};p.U=function(){return\"Polygon\"};p.W=function(b,c){if(b){Dc(this,c,b,2);this.a||(this.a=[]);var d=Gc(this.a,0,b,this.b,this.c);this.a.length=0===d.length?0:d[d.length-1];this.v()}else Uc(this,\"XY\",null,this.c)};function Uc(b,c,d,e){U(b,c,d);b.c=e;b.v()};function V(b){T.call(this);b=b||{};this.g=[0,0];var c={};c.center=void 0!==b.center?b.center:null;this.h=vc(b.projection);var d,e,f,g=void 0!==b.minZoom?b.minZoom:0;d=void 0!==b.maxZoom?b.maxZoom:28;var h=void 0!==b.zoomFactor?b.zoomFactor:2;if(void 0!==b.resolutions)d=b.resolutions,e=d[0],f=d[d.length-1],d=Pa(d);else{e=vc(b.projection);f=e.C();var k=(f?Math.max(Vb(f),Wb(f)):360*hc.degrees/pc(e))/256/Math.pow(2,0),l=k/Math.pow(2,28);e=b.maxResolution;void 0!==e?g=0:e=k/Math.pow(h,g);f=b.minResolution;\nvoid 0===f&&(f=void 0!==b.maxZoom?void 0!==b.maxResolution?e/Math.pow(h,d):k/Math.pow(h,d):l);d=g+Math.floor(Math.log(e/f)/Math.log(h));f=e/Math.pow(h,d-g);d=Qa(h,e,d-g)}this.b=e;this.i=f;this.c=g;g=void 0!==b.extent?Fa(b.extent):Ga;(void 0!==b.enableRotation?b.enableRotation:1)?(e=b.constrainRotation,e=void 0===e||!0===e?Ua():!1===e?Sa:ea(e)?Ta(e):Sa):e=Ra;this.a=new Va(g,d,e);void 0!==b.resolution?c.resolution=b.resolution:void 0!==b.zoom&&(c.resolution=this.constrainResolution(this.b,b.zoom-this.c));\nc.rotation=void 0!==b.rotation?b.rotation:0;this.l(c)}M(V,T);p=V.prototype;p.constrainResolution=function(b,c,d){return this.a.resolution(b,c||0,d||0)};p.constrainRotation=function(b,c){return this.a.rotation(b,c||0)};p.ia=function(){return this.get(\"center\")};p.jc=function(b){var c=this.ia(),d=this.I(),e=this.Z();return Zb(c,d,e,b)};p.le=function(){return this.h};p.I=function(){return this.get(\"resolution\")};function Xc(b,c){return Math.max(Vb(b)/c[0],Wb(b)/c[1])}p.Z=function(){return this.get(\"rotation\")};\np.N=function(){var b=this.ia(),c=this.h,d=this.I(),e=this.Z();return{center:[Math.round(b[0]/d)*d,Math.round(b[1]/d)*d],projection:void 0!==c?c:null,resolution:d,rotation:e}};p.wd=function(){var b,c=this.I();if(void 0!==c){var d,e=0;do{d=this.constrainResolution(this.b,e);if(d==c){b=e;break}++e}while(d>this.i)}return void 0!==b?this.c+b:b};\np.nd=function(b,c,d){if(!(b instanceof Bc)){var e=b[0],f=b[1],g=b[2],h=b[3],e=[e,f,e,h,g,h,g,f,e,f],f=new Tc(null);Uc(f,\"XY\",e,[e.length]);b=f}e=d||{};d=void 0!==e.padding?e.padding:[0,0,0,0];var h=void 0!==e.constrainResolution?e.constrainResolution:!0,f=void 0!==e.nearest?e.nearest:!1,k;void 0!==e.minResolution?k=e.minResolution:void 0!==e.maxZoom?k=this.constrainResolution(this.b,e.maxZoom-this.c,0):k=0;var l=b.a,g=this.Z(),e=Math.cos(-g),g=Math.sin(-g),m=Infinity,n=Infinity,q=-Infinity,r=-Infinity;\nb=b.b;for(var u=0,w=l.length;u<w;u+=b)var y=l[u]*e-l[u+1]*g,z=l[u]*g+l[u+1]*e,m=Math.min(m,y),n=Math.min(n,z),q=Math.max(q,y),r=Math.max(r,z);c=Xc([m,n,q,r],[c[0]-d[1]-d[3],c[1]-d[0]-d[2]]);c=isNaN(c)?k:Math.max(c,k);h&&(k=this.constrainResolution(c,0,0),!f&&k<c&&(k=this.constrainResolution(k,-1,0)),c=k);Yc(this,c);g=-g;k=(m+q)/2+(d[1]-d[3])/2*c;c=(n+r)/2+(d[0]-d[2])/2*c;this.oa([k*e-c*g,c*e+k*g])};\np.rotate=function(b,c){if(void 0!==c){var d,e=this.ia();void 0!==e&&(d=[e[0]-c[0],e[1]-c[1]],vb(d,b-this.Z()),ub(d,c));this.oa(d)}this.set(\"rotation\",b)};p.oa=function(b){this.set(\"center\",b)};function Zc(b,c){b.g[1]+=c}function Yc(b,c){b.set(\"resolution\",c)}p.Ee=function(b){b=this.constrainResolution(this.b,b-this.c,0);Yc(this,b)};function $c(b){return 1-Math.pow(1-b,3)}function ad(b){return 3*b*b-2*b*b*b}function bd(b){return b};function cd(b){var c=b.source,d=b.start?b.start:Date.now(),e=c[0],f=c[1],g=void 0!==b.duration?b.duration:1E3,h=b.easing?b.easing:ad;return function(b,c){if(c.time<d)return c.animate=!0,c.viewHints[0]+=1,!0;if(c.time<d+g){var m=1-h((c.time-d)/g),n=e-c.viewState.center[0],q=f-c.viewState.center[1];c.animate=!0;c.viewState.center[0]+=m*n;c.viewState.center[1]+=m*q;c.viewHints[0]+=1;return!0}return!1}}\nfunction dd(b){var c=b.rotation?b.rotation:0,d=b.start?b.start:Date.now(),e=void 0!==b.duration?b.duration:1E3,f=b.easing?b.easing:ad,g=b.anchor?b.anchor:null;return function(b,k){if(k.time<d)return k.animate=!0,k.viewHints[0]+=1,!0;if(k.time<d+e){var l=1-f((k.time-d)/e),l=(c-k.viewState.rotation)*l;k.animate=!0;k.viewState.rotation+=l;if(g){var m=k.viewState.center;m[0]-=g[0];m[1]-=g[1];vb(m,l);ub(m,g)}k.viewHints[0]+=1;return!0}return!1}}\nfunction ed(b){var c=b.resolution,d=b.start?b.start:Date.now(),e=void 0!==b.duration?b.duration:1E3,f=b.easing?b.easing:ad;return function(b,h){if(h.time<d)return h.animate=!0,h.viewHints[0]+=1,!0;if(h.time<d+e){var k=1-f((h.time-d)/e),l=c-h.viewState.resolution;h.animate=!0;h.viewState.resolution+=k*l;h.viewHints[0]+=1;return!0}return!1}};function fd(b,c,d,e){this.a=b;this.f=c;this.b=d;this.c=e}function gd(b,c,d){return b.a<=c&&c<=b.f&&b.b<=d&&d<=b.c}function hd(b,c){return b.a==c.a&&b.b==c.b&&b.f==c.f&&b.c==c.c}fd.prototype.ha=function(){return this.f-this.a+1};function id(b,c){return b.a<=c.f&&b.f>=c.a&&b.b<=c.c&&b.c>=c.b};function jd(b){this.b=b.html;this.a=b.tileRanges?b.tileRanges:null};function kd(b,c,d){R.call(this,b,d);this.element=c}M(kd,R);function ld(b){T.call(this);this.a=b?b:[];md(this)}M(ld,T);p=ld.prototype;p.clear=function(){for(;0<this.get(\"length\");)this.pop()};function nd(b,c,d){b.a.forEach(c,d)}p.item=function(b){return this.a[b]};p.pop=function(){return od(this,this.get(\"length\")-1)};p.push=function(b){var c=this.a.length;this.a.splice(c,0,b);md(this);S(this,new kd(\"add\",b,this));return c};\np.remove=function(b){var c=this.a,d,e;d=0;for(e=c.length;d<e;++d)if(c[d]===b)return od(this,d)};function od(b,c){var d=b.a[c];b.a.splice(c,1);md(b);S(b,new kd(\"remove\",d,b));return d}function md(b){b.set(\"length\",b.a.length)};function pd(b,c){Array.prototype.forEach.call(b,c,void 0)}function qd(b){var c=b.length;if(0<c){for(var d=Array(c),e=0;e<c;e++)d[e]=b[e];return d}return[]}function rd(b,c,d){return 2>=arguments.length?Array.prototype.slice.call(b,c):Array.prototype.slice.call(b,c,d)};var sd=/^#(?:[0-9a-f]{3}){1,2}$/i,td=/^(?:rgb)?\\((0|[1-9]\\d{0,2}),\\s?(0|[1-9]\\d{0,2}),\\s?(0|[1-9]\\d{0,2})\\)$/i,ud=/^(?:rgba)?\\((0|[1-9]\\d{0,2}),\\s?(0|[1-9]\\d{0,2}),\\s?(0|[1-9]\\d{0,2}),\\s?(0|1|0\\.\\d{0,10})\\)$/i;function vd(b){if(\"string\"!==typeof b){var c=b[0];c!=(c|0)&&(c=c+.5|0);var d=b[1];d!=(d|0)&&(d=d+.5|0);var e=b[2];e!=(e|0)&&(e=e+.5|0);b=\"rgba(\"+c+\",\"+d+\",\"+e+\",\"+(void 0===b[3]?1:b[3])+\")\"}return b}\nvar xd=function(){var b={},c=0;return function(d){var e;if(b.hasOwnProperty(d))e=b[d];else{if(1024<=c){e=0;for(var f in b)0===(e++&3)&&(delete b[f],--c)}var g,h;sd.exec(d)?(h=3==d.length-1?1:2,e=parseInt(d.substr(1+0*h,h),16),f=parseInt(d.substr(1+1*h,h),16),g=parseInt(d.substr(1+2*h,h),16),1==h&&(e=(e<<4)+e,f=(f<<4)+f,g=(g<<4)+g),e=[e,f,g,1]):(h=ud.exec(d))?(e=Number(h[1]),f=Number(h[2]),g=Number(h[3]),h=Number(h[4]),e=[e,f,g,h],e=wd(e,e)):(h=td.exec(d))?(e=Number(h[1]),f=Number(h[2]),g=Number(h[3]),\ne=[e,f,g,1],e=wd(e,e)):e=void 0;b[d]=e;++c}return e}}();function wd(b,c){var d=c||[];d[0]=Ca(b[0]+.5|0,0,255);d[1]=Ca(b[1]+.5|0,0,255);d[2]=Ca(b[2]+.5|0,0,255);d[3]=Ca(b[3],0,1);return d};function yd(b){return\"string\"===typeof b||b instanceof CanvasPattern||b instanceof CanvasGradient?b:vd(b)};var zd;a:{var Ad=x.navigator;if(Ad){var Bd=Ad.userAgent;if(Bd){zd=Bd;break a}}zd=\"\"}function W(b){return-1!=zd.indexOf(b)};function Cd(b,c){for(var d in b)c.call(void 0,b[d],d,b)}var Dd=\"constructor hasOwnProperty isPrototypeOf propertyIsEnumerable toLocaleString toString valueOf\".split(\" \");function Ed(b,c){for(var d,e,f=1;f<arguments.length;f++){e=arguments[f];for(d in e)b[d]=e[d];for(var g=0;g<Dd.length;g++)d=Dd[g],Object.prototype.hasOwnProperty.call(e,d)&&(b[d]=e[d])}};var Fd=W(\"Opera\")||W(\"OPR\"),Gd=W(\"Trident\")||W(\"MSIE\"),Hd=W(\"Edge\"),Id=W(\"Gecko\")&&!(-1!=zd.toLowerCase().indexOf(\"webkit\")&&!W(\"Edge\"))&&!(W(\"Trident\")||W(\"MSIE\"))&&!W(\"Edge\"),Jd=-1!=zd.toLowerCase().indexOf(\"webkit\")&&!W(\"Edge\");function Kd(){var b=x.document;return b?b.documentMode:void 0}var Ld;\na:{var Md=\"\",Nd=function(){var b=zd;if(Id)return/rv\\:([^\\);]+)(\\)|;)/.exec(b);if(Hd)return/Edge\\/([\\d\\.]+)/.exec(b);if(Gd)return/\\b(?:MSIE|rv)[: ]([^\\);]+)(\\)|;)/.exec(b);if(Jd)return/WebKit\\/(\\S+)/.exec(b);if(Fd)return/(?:Version)[ \\/]?(\\S+)/.exec(b)}();Nd&&(Md=Nd?Nd[1]:\"\");if(Gd){var Od=Kd();if(null!=Od&&Od>parseFloat(Md)){Ld=String(Od);break a}}Ld=Md}var Pd={};\nfunction Qd(b){var c;if(!(c=Pd[b])){c=0;for(var d=sa(String(Ld)).split(\".\"),e=sa(String(b)).split(\".\"),f=Math.max(d.length,e.length),g=0;0==c&&g<f;g++){var h=d[g]||\"\",k=e[g]||\"\",l=RegExp(\"(\\\\d*)(\\\\D*)\",\"g\"),m=RegExp(\"(\\\\d*)(\\\\D*)\",\"g\");do{var n=l.exec(h)||[\"\",\"\",\"\"],q=m.exec(k)||[\"\",\"\",\"\"];if(0==n[0].length&&0==q[0].length)break;c=Ba(0==n[1].length?0:parseInt(n[1],10),0==q[1].length?0:parseInt(q[1],10))||Ba(0==n[2].length,0==q[2].length)||Ba(n[2],q[2])}while(0==c)}c=Pd[b]=0<=c}return c}\nvar Rd=x.document,Sd=Rd&&Gd?Kd()||(\"CSS1Compat\"==Rd.compatMode?parseInt(Ld,10):5):void 0;var Td=!Gd||9<=Number(Sd);!Id&&!Gd||Gd&&9<=Number(Sd)||Id&&Qd(\"1.9.1\");Gd&&Qd(\"9\");function Ud(b,c){this.x=void 0!==b?b:0;this.y=void 0!==c?c:0}p=Ud.prototype;p.clone=function(){return new Ud(this.x,this.y)};p.ceil=function(){this.x=Math.ceil(this.x);this.y=Math.ceil(this.y);return this};p.floor=function(){this.x=Math.floor(this.x);this.y=Math.floor(this.y);return this};p.round=function(){this.x=Math.round(this.x);this.y=Math.round(this.y);return this};p.scale=function(b,c){var d=ea(c)?c:b;this.x*=b;this.y*=d;return this};function Vd(b,c){this.width=b;this.height=c}p=Vd.prototype;p.clone=function(){return new Vd(this.width,this.height)};p.ceil=function(){this.width=Math.ceil(this.width);this.height=Math.ceil(this.height);return this};p.floor=function(){this.width=Math.floor(this.width);this.height=Math.floor(this.height);return this};p.round=function(){this.width=Math.round(this.width);this.height=Math.round(this.height);return this};p.scale=function(b,c){var d=ea(c)?c:b;this.width*=b;this.height*=d;return this};function Wd(b){return b?new Xd(Yd(b)):qa||(qa=new Xd)}function Zd(b){var c=document;return da(b)?c.getElementById(b):b}function $d(b,c){Cd(c,function(c,e){\"style\"==e?b.style.cssText=c:\"class\"==e?b.className=c:\"for\"==e?b.htmlFor=c:ae.hasOwnProperty(e)?b.setAttribute(ae[e],c):0==e.lastIndexOf(\"aria-\",0)||0==e.lastIndexOf(\"data-\",0)?b.setAttribute(e,c):b[e]=c})}\nvar ae={cellpadding:\"cellPadding\",cellspacing:\"cellSpacing\",colspan:\"colSpan\",frameborder:\"frameBorder\",height:\"height\",maxlength:\"maxLength\",nonce:\"nonce\",role:\"role\",rowspan:\"rowSpan\",type:\"type\",usemap:\"useMap\",valign:\"vAlign\",width:\"width\"};\nfunction be(b,c,d){var e=arguments,f=document,g=e[0],h=e[1];if(!Td&&h&&(h.name||h.type)){g=[\"<\",g];h.name&&g.push(' name=\"',ta(h.name),'\"');if(h.type){g.push(' type=\"',ta(h.type),'\"');var k={};Ed(k,h);delete k.type;h=k}g.push(\">\");g=g.join(\"\")}g=f.createElement(g);h&&(da(h)?g.className=h:\"array\"==ba(h)?g.className=h.join(\" \"):$d(g,h));2<e.length&&ce(f,g,e);return g}\nfunction ce(b,c,d){function e(d){d&&c.appendChild(da(d)?b.createTextNode(d):d)}for(var f=2;f<d.length;f++){var g=d[f];!ca(g)||ha(g)&&0<g.nodeType?e(g):pd(de(g)?qd(g):g,e)}}function ee(b){for(var c;c=b.firstChild;)b.removeChild(c)}function fe(b,c,d){b.insertBefore(c,b.childNodes[d]||null)}function ge(b){b&&b.parentNode&&b.parentNode.removeChild(b)}function he(b,c){var d=c.parentNode;d&&d.replaceChild(b,c)}\nfunction ie(b,c){if(!b||!c)return!1;if(b.contains&&1==c.nodeType)return b==c||b.contains(c);if(\"undefined\"!=typeof b.compareDocumentPosition)return b==c||!!(b.compareDocumentPosition(c)&16);for(;c&&b!=c;)c=c.parentNode;return c==b}function Yd(b){return 9==b.nodeType?b:b.ownerDocument||b.document}function de(b){if(b&&\"number\"==typeof b.length){if(ha(b))return\"function\"==typeof b.item||\"string\"==typeof b.item;if(ga(b))return\"function\"==typeof b.item}return!1}\nfunction Xd(b){this.a=b||x.document||document}Xd.prototype.appendChild=function(b,c){b.appendChild(c)};function je(b,c,d,e){this.top=b;this.right=c;this.bottom=d;this.left=e}p=je.prototype;p.ha=function(){return this.right-this.left};p.clone=function(){return new je(this.top,this.right,this.bottom,this.left)};p.ceil=function(){this.top=Math.ceil(this.top);this.right=Math.ceil(this.right);this.bottom=Math.ceil(this.bottom);this.left=Math.ceil(this.left);return this};\np.floor=function(){this.top=Math.floor(this.top);this.right=Math.floor(this.right);this.bottom=Math.floor(this.bottom);this.left=Math.floor(this.left);return this};p.round=function(){this.top=Math.round(this.top);this.right=Math.round(this.right);this.bottom=Math.round(this.bottom);this.left=Math.round(this.left);return this};p.scale=function(b,c){var d=ea(c)?c:b;this.left*=b;this.right*=b;this.top*=d;this.bottom*=d;return this};function ke(b,c){var d=Yd(b);return d.defaultView&&d.defaultView.getComputedStyle&&(d=d.defaultView.getComputedStyle(b,null))?d[c]||d.getPropertyValue(c)||\"\":\"\"}function le(b){var c;try{c=b.getBoundingClientRect()}catch(d){return{left:0,top:0,right:0,bottom:0}}Gd&&b.ownerDocument.body&&(b=b.ownerDocument,c.left-=b.documentElement.clientLeft+b.body.clientLeft,c.top-=b.documentElement.clientTop+b.body.clientTop);return c}\nfunction me(b){var c=ne;if(\"none\"!=(ke(b,\"display\")||(b.currentStyle?b.currentStyle.display:null)||b.style&&b.style.display))return c(b);var d=b.style,e=d.display,f=d.visibility,g=d.position;d.visibility=\"hidden\";d.position=\"absolute\";d.display=\"inline\";b=c(b);d.display=e;d.position=g;d.visibility=f;return b}function ne(b){var c=b.offsetWidth,d=b.offsetHeight,e=Jd&&!c&&!d;return(void 0===c||e)&&b.getBoundingClientRect?(b=le(b),new Vd(b.right-b.left,b.bottom-b.top)):new Vd(c,d)}\nfunction oe(b,c){b.style.display=c?\"\":\"none\"}function pe(b,c,d,e){if(/^\\d+px?$/.test(c))return parseInt(c,10);var f=b.style[d],g=b.runtimeStyle[d];b.runtimeStyle[d]=b.currentStyle[d];b.style[d]=c;c=b.style[e];b.style[d]=f;b.runtimeStyle[d]=g;return c}function qe(b,c){var d=b.currentStyle?b.currentStyle[c]:null;return d?pe(b,d,\"left\",\"pixelLeft\"):0}var re={thin:2,medium:4,thick:6};\nfunction se(b,c){if(\"none\"==(b.currentStyle?b.currentStyle[c+\"Style\"]:null))return 0;var d=b.currentStyle?b.currentStyle[c+\"Width\"]:null;return d in re?re[d]:pe(b,d,\"left\",\"pixelLeft\")};function te(b,c,d){R.call(this,b);this.map=c;this.frameState=void 0!==d?d:null}M(te,R);function ue(b){T.call(this);this.element=b.element?b.element:null;this.c=this.B=null;this.h=[];this.render=b.render?b.render:pa;b.target&&(this.B=Zd(b.target))}M(ue,T);ue.prototype.J=function(){ge(this.element);ue.X.J.call(this)};ue.prototype.setMap=function(b){this.c&&ge(this.element);for(var c=0,d=this.h.length;c<d;++c)N(this.h[c]);this.h.length=0;if(this.c=b)(this.B?this.B:b.j).appendChild(this.element),this.render!==pa&&this.h.push(Q(b,\"postrender\",this.render,this)),b.render()};function ve(){this.f=0;this.c={};this.b=this.a=null}p=ve.prototype;p.clear=function(){this.f=0;this.c={};this.b=this.a=null};function we(b,c){return b.c.hasOwnProperty(c)}function xe(b,c){for(var d=b.a;d;)c.call(void 0,d.Ia,d.Rb,b),d=d.ma}p.get=function(b){b=this.c[b];if(b===this.b)return b.Ia;b===this.a?(this.a=this.a.ma,this.a.Ra=null):(b.ma.Ra=b.Ra,b.Ra.ma=b.ma);b.ma=null;b.Ra=this.b;this.b=this.b.ma=b;return b.Ia};\np.pop=function(){var b=this.a;delete this.c[b.Rb];b.ma&&(b.ma.Ra=null);this.a=b.ma;this.a||(this.b=null);--this.f;return b.Ia};p.replace=function(b,c){this.get(b);this.c[b].Ia=c};p.set=function(b,c){var d={Rb:b,ma:null,Ra:this.b,Ia:c};this.b?this.b.ma=d:this.a=d;this.b=d;this.c[b]=d;++this.f};function ye(b){ve.call(this);this.g=void 0!==b?b:2048}M(ye,ve);function ze(b){return b.f>b.g}function Ae(b,c){for(var d,e;ze(b);){d=b.a.Ia;e=d.L[0].toString();var f;if(f=e in c)d=d.L,f=gd(c[e],d[1],d[2]);if(f)break;else jb(b.pop())}};function Be(b,c){mb.call(this);this.L=b;this.state=c;this.a=null;this.key=\"\"}M(Be,mb);function Ce(b){S(b,\"change\")}Be.prototype.getKey=function(){return I(this).toString()};Be.prototype.N=function(){return this.state};function De(b){T.call(this);this.c=lc(b.projection);this.i=Ee(b.attributions);this.w=b.logo;this.B=void 0!==b.state?b.state:\"ready\";this.j=void 0!==b.wrapX?b.wrapX:!1}M(De,T);function Ee(b){if(\"string\"===typeof b)return[new jd({html:b})];if(b instanceof jd)return[b];if(Array.isArray(b)){for(var c=b.length,d=Array(c),e=0;e<c;e++){var f=b[e];d[e]=\"string\"===typeof f?new jd({html:f}):f}return d}return null}De.prototype.N=function(){return this.B};De.prototype.wa=function(){this.v()};function Fe(b){this.minZoom=void 0!==b.minZoom?b.minZoom:0;this.b=b.resolutions;this.maxZoom=this.b.length-1;this.f=void 0!==b.origin?b.origin:null;this.g=null;void 0!==b.origins&&(this.g=b.origins);var c=b.extent;void 0===c||this.f||this.g||(this.f=bc(c));this.h=null;void 0!==b.tileSizes&&(this.h=b.tileSizes);this.l=void 0!==b.tileSize?b.tileSize:this.h?null:256;this.i=void 0!==c?c:null;this.a=null;void 0!==b.sizes?this.a=b.sizes.map(function(b){return new fd(Math.min(0,b[0]),Math.max(b[0]-1,-1),\nMath.min(0,b[1]),Math.max(b[1]-1,-1))},this):c&&Ge(this,c);this.c=[0,0]}var He=[0,0,0];function Ie(b,c,d,e,f){f=Je(b,c,f);for(c=c[0]-1;c>=b.minZoom;){if(d.call(null,c,Ke(b,f,c,e)))return!0;--c}return!1}Fe.prototype.C=function(){return this.i};Fe.prototype.ka=function(b){return this.f?this.f:this.g[b]};Fe.prototype.I=function(b){return this.b[b]};Fe.prototype.Nb=function(){return this.b};function Le(b,c,d,e){return c[0]<b.maxZoom?(e=Je(b,c,e),Ke(b,e,c[0]+1,d)):null}\nfunction Me(b,c,d,e){Ne(b,c[0],c[1],d,!1,He);var f=He[1],g=He[2];Ne(b,c[2],c[3],d,!0,He);b=He[1];c=He[2];void 0!==e?(e.a=f,e.f=b,e.b=g,e.c=c):e=new fd(f,b,g,c);return e}function Ke(b,c,d,e){d=b.I(d);return Me(b,c,d,e)}function Oe(b,c){var d=b.ka(c[0]),e=b.I(c[0]),f=tb(Pe(b,c[0]),b.c);return[d[0]+(c[1]+.5)*f[0]*e,d[1]+(c[2]+.5)*f[1]*e]}function Je(b,c,d){var e=b.ka(c[0]),f=b.I(c[0]);b=tb(Pe(b,c[0]),b.c);var g=e[0]+c[1]*b[0]*f;c=e[1]+c[2]*b[1]*f;return Ob(g,c,g+b[0]*f,c+b[1]*f,d)}\nfunction Ne(b,c,d,e,f,g){var h=Qe(b,e),k=e/b.I(h),l=b.ka(h);b=tb(Pe(b,h),b.c);c=k*Math.floor((c-l[0])/e+(f?.5:0))/b[0];d=k*Math.floor((d-l[1])/e+(f?0:.5))/b[1];f?(c=Math.ceil(c)-1,d=Math.ceil(d)-1):(c=Math.floor(c),d=Math.floor(d));f=c;void 0!==g?(g[0]=h,g[1]=f,g[2]=d):g=[h,f,d];return g}function Re(b,c,d){d=b.I(d);return Ne(b,c[0],c[1],d,!1,void 0)}function Pe(b,c){return b.l?b.l:b.h[c]}function Qe(b,c){var d=Ia(b.b,c,0);return Ca(d,b.minZoom,b.maxZoom)}\nfunction Ge(b,c){for(var d=b.b.length,e=Array(d),f=b.minZoom;f<d;++f)e[f]=Ke(b,c,f);b.a=e}function Se(b){var c=b.c;if(!c){var c=Te(b),d=Ue(c,void 0,void 0),c=new Fe({extent:c,origin:bc(c),resolutions:d,tileSize:void 0});b.c=c}return c}function Ue(b,c,d){c=void 0!==c?c:42;var e=Wb(b);b=Vb(b);d=tb(void 0!==d?d:256);d=Math.max(b/d[0],e/d[1]);c+=1;e=Array(c);for(b=0;b<c;++b)e[b]=d/Math.pow(2,b);return e}function Te(b){b=lc(b);var c=b.C();c||(b=180*hc.degrees/pc(b),c=Ob(-b,-b,b,b));return c};function Ve(b){De.call(this,{attributions:b.attributions,extent:b.extent,logo:b.logo,projection:b.projection,state:b.state,wrapX:b.wrapX});this.G=void 0!==b.opaque?b.opaque:!1;this.Y=void 0!==b.tilePixelRatio?b.tilePixelRatio:1;this.tileGrid=void 0!==b.tileGrid?b.tileGrid:null;this.a=new ye(b.cacheSize);this.h=[0,0]}M(Ve,De);p=Ve.prototype;p.Qc=function(){return ze(this.a)};p.Rc=function(b,c){var d=this.bb(b);d&&Ae(d,c)};\nfunction We(b,c,d,e,f){c=b.bb(c);if(!c)return!1;for(var g=!0,h,k,l=e.a;l<=e.f;++l)for(var m=e.b;m<=e.c;++m)h=b.lb(d,l,m),k=!1,we(c,h)&&(h=c.get(h),(k=2===h.N())&&(k=!1!==f(h))),k||(g=!1);return g}p.kb=function(){return 0};p.lb=function(b,c,d){return b+\"/\"+c+\"/\"+d};p.Mb=function(){return this.G};p.Nb=function(){return this.tileGrid.Nb()};p.la=function(b){return this.tileGrid?this.tileGrid:Se(b)};p.bb=function(b){var c=this.c;return c&&!wc(c,b)?null:this.a};p.mb=function(){return this.Y};\nfunction Xe(b,c,d,e){e=b.la(e);d=b.mb(d);c=tb(Pe(e,c),b.h);return 1==d?c:sb(c,d,b.h)}function Ye(b,c,d){var e=void 0!==d?d:b.c;d=b.la(e);if(b.j&&e.f){var f=c;c=f[0];b=Oe(d,f);var e=Te(e),g=b[0],h=b[1];e[0]<=g&&g<=e[2]&&e[1]<=h&&h<=e[3]?c=f:(f=Vb(e),b[0]+=f*Math.ceil((e[0]-b[0])/f),c=Re(d,b,c))}e=c[0];b=c[1];f=c[2];d=d.minZoom>e||e>d.maxZoom?!1:(d=(g=d.C())?Ke(d,g,e):d.a?d.a[e]:null)?gd(d,b,f):!0;return d?c:null}p.wa=function(){this.a.clear();this.v()};p.Yc=pa;\nfunction Ze(b,c){R.call(this,b);this.tile=c}M(Ze,R);function $e(b){b=b?b:{};this.s=document.createElement(\"UL\");this.j=document.createElement(\"LI\");this.s.appendChild(this.j);oe(this.j,!1);this.g=void 0!==b.collapsed?b.collapsed:!0;this.i=void 0!==b.collapsible?b.collapsible:!0;this.i||(this.g=!1);var c=void 0!==b.className?b.className:\"ol-attribution\",d=void 0!==b.tipLabel?b.tipLabel:\"Attributions\",e=void 0!==b.collapseLabel?b.collapseLabel:\"\\u00bb\";this.u=\"string\"===typeof e?be(\"SPAN\",{},e):e;e=void 0!==b.label?b.label:\"i\";this.w=\"string\"===typeof e?\nbe(\"SPAN\",{},e):e;d=be(\"BUTTON\",{type:\"button\",title:d},this.i&&!this.g?this.u:this.w);Q(d,\"click\",this.G,this);c=be(\"DIV\",c+\" ol-unselectable ol-control\"+(this.g&&this.i?\" ol-collapsed\":\"\")+(this.i?\"\":\" ol-uncollapsible\"),this.s,d);ue.call(this,{element:c,render:b.render?b.render:af,target:b.target});this.o=!0;this.b={};this.a={};this.D={}}M($e,ue);\nfunction af(b){if(b=b.frameState){var c,d,e,f,g,h,k,l,m,n,q,r=b.layerStatesArray,u=Wa({},b.attributions),w={},y=b.viewState.projection;d=0;for(c=r.length;d<c;d++)if(h=r[d].layer.V())if(n=I(h).toString(),m=h.i)for(e=0,f=m.length;e<f;e++)if(k=m[e],l=I(k).toString(),!(l in u)){if(g=b.usedTiles[n]){var z=h.la(y);a:{q=k;var D=y;if(q.a){var t=void 0,v=void 0,B=void 0,E=void 0;for(E in g)if(E in q.a)for(var B=g[E],C,t=0,v=q.a[E].length;t<v;++t){C=q.a[E][t];if(id(C,B)){q=!0;break a}var G=Ke(z,Te(D),parseInt(E,\n10)),J=G.ha();if(B.a<G.a||B.f>G.f)if(id(C,new fd(Ea(B.a,J),Ea(B.f,J),B.b,B.c))||B.ha()>J&&id(C,G)){q=!0;break a}}q=!1}else q=!0}}else q=!1;q?(l in w&&delete w[l],u[l]=k):w[l]=k}c=[u,w];d=c[0];c=c[1];for(var A in this.b)A in d?(this.a[A]||(oe(this.b[A],!0),this.a[A]=!0),delete d[A]):A in c?(this.a[A]&&(oe(this.b[A],!1),delete this.a[A]),delete c[A]):(ge(this.b[A]),delete this.b[A],delete this.a[A]);for(A in d)e=document.createElement(\"LI\"),e.innerHTML=d[A].b,this.s.appendChild(e),this.b[A]=e,this.a[A]=\n!0;for(A in c)e=document.createElement(\"LI\"),e.innerHTML=c[A].b,oe(e,!1),this.s.appendChild(e),this.b[A]=e;A=!$a(this.a)||!$a(b.logos);this.o!=A&&(oe(this.element,A),this.o=A);A&&$a(this.a)?this.element.classList.add(\"ol-logo-only\"):this.element.classList.remove(\"ol-logo-only\");var H;b=b.logos;A=this.D;for(H in A)H in b||(ge(A[H]),delete A[H]);for(var O in b)O in A||(H=new Image,H.src=O,d=b[O],\"\"===d?d=H:(d=be(\"A\",{href:d}),d.appendChild(H)),this.j.appendChild(d),A[O]=d);oe(this.j,!$a(b))}else this.o&&\n(oe(this.element,!1),this.o=!1)}$e.prototype.G=function(b){b.preventDefault();this.element.classList.toggle(\"ol-collapsed\");this.g?he(this.u,this.w):he(this.w,this.u);this.g=!this.g};function bf(b){b=b?b:{};var c=void 0!==b.className?b.className:\"ol-rotate\",d=void 0!==b.label?b.label:\"\\u21e7\";this.a=null;\"string\"===typeof d?this.a=be(\"SPAN\",\"ol-compass\",d):(this.a=d,this.a.classList.add(this.a,\"ol-compass\"));d=be(\"BUTTON\",{\"class\":c+\"-reset\",type:\"button\",title:b.tipLabel?b.tipLabel:\"Reset rotation\"},this.a);Q(d,\"click\",bf.prototype.o,this);c=be(\"DIV\",c+\" ol-unselectable ol-control\",d);d=b.render?b.render:cf;this.g=b.resetNorth?b.resetNorth:void 0;ue.call(this,{element:c,render:d,\ntarget:b.target});this.i=void 0!==b.duration?b.duration:250;this.b=void 0!==b.autoHide?b.autoHide:!0;this.j=void 0;this.b&&this.element.classList.add(\"ol-hidden\")}M(bf,ue);bf.prototype.o=function(b){b.preventDefault();if(void 0!==this.g)this.g();else{b=this.c;var c=b.O();if(c){var d=c.Z();void 0!==d&&(0<this.i&&(d%=2*Math.PI,d<-Math.PI&&(d+=2*Math.PI),d>Math.PI&&(d-=2*Math.PI),b.fa(dd({rotation:d,duration:this.i,easing:$c}))),c.set(\"rotation\",0))}}};\nfunction cf(b){if(b=b.frameState){b=b.viewState.rotation;if(b!=this.j){var c=\"rotate(\"+b+\"rad)\";if(this.b){var d=this.element.classList.contains(\"ol-hidden\");d||0!==b?d&&0!==b&&this.element.classList.remove(\"ol-hidden\"):this.element.classList.add(\"ol-hidden\")}this.a.style.msTransform=c;this.a.style.webkitTransform=c;this.a.style.transform=c}this.j=b}};function df(b){b=b?b:{};var c=void 0!==b.className?b.className:\"ol-zoom\",d=void 0!==b.delta?b.delta:1,e=void 0!==b.zoomOutLabel?b.zoomOutLabel:\"\\u2212\",f=void 0!==b.zoomOutTipLabel?b.zoomOutTipLabel:\"Zoom out\",g=be(\"BUTTON\",{\"class\":c+\"-in\",type:\"button\",title:void 0!==b.zoomInTipLabel?b.zoomInTipLabel:\"Zoom in\"},void 0!==b.zoomInLabel?b.zoomInLabel:\"+\");Q(g,\"click\",na(df.prototype.b,d),this);e=be(\"BUTTON\",{\"class\":c+\"-out\",type:\"button\",title:f},e);Q(e,\"click\",na(df.prototype.b,-d),this);c=be(\"DIV\",\nc+\" ol-unselectable ol-control\",g,e);ue.call(this,{element:c,target:b.target});this.a=void 0!==b.duration?b.duration:250}M(df,ue);df.prototype.b=function(b,c){c.preventDefault();var d=this.c,e=d.O();if(e){var f=e.I();f&&(0<this.a&&d.fa(ed({resolution:f,duration:this.a,easing:$c})),d=e.constrainResolution(f,b),Yc(e,d))}};function ef(b){b=b?b:{};var c=new ld;(void 0!==b.zoom?b.zoom:1)&&c.push(new df(b.zoomOptions));(void 0!==b.rotate?b.rotate:1)&&c.push(new bf(b.rotateOptions));(void 0!==b.attribution?b.attribution:1)&&c.push(new $e(b.attributionOptions));return c};var ff=Jd?\"webkitfullscreenchange\":Id?\"mozfullscreenchange\":Gd?\"MSFullscreenChange\":\"fullscreenchange\";function gf(){var b=Wd().a,c=b.body;return!!(c.webkitRequestFullscreen||c.mozRequestFullScreen&&b.mozFullScreenEnabled||c.msRequestFullscreen&&b.msFullscreenEnabled||c.requestFullscreen&&b.fullscreenEnabled)}\nfunction hf(b){b.webkitRequestFullscreen?b.webkitRequestFullscreen():b.mozRequestFullScreen?b.mozRequestFullScreen():b.msRequestFullscreen?b.msRequestFullscreen():b.requestFullscreen&&b.requestFullscreen()}function jf(){var b=Wd().a;return!!(b.webkitIsFullScreen||b.mozFullScreen||b.msFullscreenElement||b.fullscreenElement)};function kf(b){b=b?b:{};this.a=void 0!==b.className?b.className:\"ol-full-screen\";var c=void 0!==b.label?b.label:\"\\u2922\";this.b=\"string\"===typeof c?document.createTextNode(c):c;c=void 0!==b.labelActive?b.labelActive:\"\\u00d7\";this.g=\"string\"===typeof c?document.createTextNode(c):c;c=b.tipLabel?b.tipLabel:\"Toggle full-screen\";c=be(\"BUTTON\",{\"class\":this.a+\"-\"+jf(),type:\"button\",title:c},this.b);Q(c,\"click\",this.s,this);var d=this.a+\" ol-unselectable ol-control \"+(gf()?\"\":\"ol-unsupported\"),c=be(\"DIV\",\nd,c);ue.call(this,{element:c,target:b.target});this.o=void 0!==b.keys?b.keys:!1;this.i=b.source}M(kf,ue);\nkf.prototype.s=function(b){b.preventDefault();gf()&&(b=this.c)&&(jf()?(b=Wd().a,b.webkitCancelFullScreen?b.webkitCancelFullScreen():b.mozCancelFullScreen?b.mozCancelFullScreen():b.msExitFullscreen?b.msExitFullscreen():b.exitFullscreen&&b.exitFullscreen()):(b=this.i?Zd(this.i):b.Na(),this.o?b.mozRequestFullScreenWithKeys?b.mozRequestFullScreenWithKeys():b.webkitRequestFullscreen?b.webkitRequestFullscreen():hf(b):hf(b)))};\nkf.prototype.j=function(){var b=this.element.firstElementChild,c=this.c;jf()?(b.className=this.a+\"-true\",he(this.g,this.b)):(b.className=this.a+\"-false\",he(this.b,this.g));c&&c.vb()};kf.prototype.setMap=function(b){kf.X.setMap.call(this,b);b&&this.h.push(Q(x.document,ff,this.j,this))};var lf;\nfunction mf(){var b=x.MessageChannel;\"undefined\"===typeof b&&\"undefined\"!==typeof window&&window.postMessage&&window.addEventListener&&!W(\"Presto\")&&(b=function(){var b=document.createElement(\"IFRAME\");b.style.display=\"none\";b.src=\"\";document.documentElement.appendChild(b);var c=b.contentWindow,b=c.document;b.open();b.write(\"\");b.close();var d=\"callImmediate\"+Math.random(),e=\"file:\"==c.location.protocol?\"*\":c.location.protocol+\"//\"+c.location.host,b=ma(function(b){if((\"*\"==e||b.origin==e)&&b.data==\nd)this.port1.onmessage()},this);c.addEventListener(\"message\",b,!1);this.port1={};this.port2={postMessage:function(){c.postMessage(d,e)}}});if(\"undefined\"!==typeof b&&!W(\"Trident\")&&!W(\"MSIE\")){var c=new b,d={},e=d;c.port1.onmessage=function(){if(void 0!==d.next){d=d.next;var b=d.lc;d.lc=null;b()}};return function(b){e.next={lc:b};e=e.next;c.port2.postMessage(0)}}return\"undefined\"!==typeof document&&\"onreadystatechange\"in document.createElement(\"SCRIPT\")?function(b){var c=document.createElement(\"SCRIPT\");\nc.onreadystatechange=function(){c.onreadystatechange=null;c.parentNode.removeChild(c);c=null;b();b=null};document.documentElement.appendChild(c)}:function(b){x.setTimeout(b,0)}};function nf(b,c,d){R.call(this,b);this.a=c;b=d?d:{};this.buttons=of(b);this.pressure=pf(b,this.buttons);this.bubbles=\"bubbles\"in b?b.bubbles:!1;this.cancelable=\"cancelable\"in b?b.cancelable:!1;this.view=\"view\"in b?b.view:null;this.detail=\"detail\"in b?b.detail:null;this.screenX=\"screenX\"in b?b.screenX:0;this.screenY=\"screenY\"in b?b.screenY:0;this.clientX=\"clientX\"in b?b.clientX:0;this.clientY=\"clientY\"in b?b.clientY:0;this.button=\"button\"in b?b.button:0;this.relatedTarget=\"relatedTarget\"in b?b.relatedTarget:\nnull;this.pointerId=\"pointerId\"in b?b.pointerId:0;this.width=\"width\"in b?b.width:0;this.height=\"height\"in b?b.height:0;this.pointerType=\"pointerType\"in b?b.pointerType:\"\";this.isPrimary=\"isPrimary\"in b?b.isPrimary:!1;c.preventDefault&&(this.preventDefault=function(){c.preventDefault()})}M(nf,R);function of(b){if(b.buttons||qf)b=b.buttons;else switch(b.which){case 1:b=1;break;case 2:b=4;break;case 3:b=2;break;default:b=0}return b}function pf(b,c){var d=0;b.pressure?d=b.pressure:d=c?.5:0;return d}\nvar qf=!1;try{qf=1===(new MouseEvent(\"click\",{buttons:1})).buttons}catch(b){};function rf(b,c){var d=document.createElement(\"CANVAS\");b&&(d.width=b);c&&(d.height=c);return d.getContext(\"2d\")}\nvar sf=function(){var b;return function(){if(void 0===b){var c=document.createElement(\"P\"),d,e={webkitTransform:\"-webkit-transform\",OTransform:\"-o-transform\",msTransform:\"-ms-transform\",MozTransform:\"-moz-transform\",transform:\"transform\"};document.body.appendChild(c);for(var f in e)f in c.style&&(c.style[f]=\"translate(1px,1px)\",d=x.getComputedStyle(c).getPropertyValue(e[f]));document.body.removeChild(c);b=d&&\"none\"!==d}return b}}(),tf=function(){var b;return function(){if(void 0===b){var c=document.createElement(\"P\"),\nd,e={webkitTransform:\"-webkit-transform\",OTransform:\"-o-transform\",msTransform:\"-ms-transform\",MozTransform:\"-moz-transform\",transform:\"transform\"};document.body.appendChild(c);for(var f in e)f in c.style&&(c.style[f]=\"translate3d(1px,1px,1px)\",d=x.getComputedStyle(c).getPropertyValue(e[f]));document.body.removeChild(c);b=d&&\"none\"!==d}return b}}();\nfunction uf(b,c){var d=b.style;d.WebkitTransform=c;d.MozTransform=c;d.a=c;d.msTransform=c;d.transform=c;Gd&&Qd(\"9.0\")&&(b.style.transformOrigin=\"0 0\")}function vf(b,c){var d;if(tf()){var e=Array(16);for(d=0;16>d;++d)e[d]=c[d].toFixed(6);uf(b,\"matrix3d(\"+e.join(\",\")+\")\")}else if(sf()){var e=[c[0],c[1],c[4],c[5],c[12],c[13]],f=Array(6);for(d=0;6>d;++d)f[d]=e[d].toFixed(6);uf(b,\"matrix(\"+f.join(\",\")+\")\")}else b.style.left=Math.round(c[12])+\"px\",b.style.top=Math.round(c[13])+\"px\"};var wf=[\"experimental-webgl\",\"webgl\",\"webkit-3d\",\"moz-webgl\"];function xf(b,c){var d,e,f=wf.length;for(e=0;e<f;++e)try{if(d=b.getContext(wf[e],c))return d}catch(g){}return null};var yf,zf=\"undefined\"!==typeof navigator?navigator.userAgent.toLowerCase():\"\",Af=-1!==zf.indexOf(\"firefox\"),Bf=-1!==zf.indexOf(\"safari\")&&-1===zf.indexOf(\"chrom\"),Cf=-1!==zf.indexOf(\"macintosh\"),Df=x.devicePixelRatio||1,Ef=!1,Ff=function(){if(!(\"HTMLCanvasElement\"in x))return!1;try{var b=rf();return b?(void 0!==b.setLineDash&&(Ef=!0),!0):!1}catch(c){return!1}}(),Gf=\"ontouchstart\"in x,Hf=\"PointerEvent\"in x,If=!!x.navigator.msPointerEnabled,Jf=!1,Kf=[];\nif(\"WebGLRenderingContext\"in x)try{var Lf=xf(document.createElement(\"CANVAS\"),{failIfMajorPerformanceCaveat:!0});Lf&&(Jf=!0,Kf=Lf.getSupportedExtensions())}catch(b){}yf=Jf;oa=Kf;function Mf(b,c){this.a=b;this.g=c};function Nf(b){Mf.call(this,b,{mousedown:this.Vd,mousemove:this.Wd,mouseup:this.Zd,mouseover:this.Yd,mouseout:this.Xd});this.b=b.b;this.f=[]}M(Nf,Mf);function Of(b,c){for(var d=b.f,e=c.clientX,f=c.clientY,g=0,h=d.length,k;g<h&&(k=d[g]);g++){var l=Math.abs(f-k[1]);if(25>=Math.abs(e-k[0])&&25>=l)return!0}return!1}function Pf(b){var c=Qf(b,b),d=c.preventDefault;c.preventDefault=function(){b.preventDefault();d()};c.pointerId=1;c.isPrimary=!0;c.pointerType=\"mouse\";return c}p=Nf.prototype;\np.Vd=function(b){if(!Of(this,b)){if((1).toString()in this.b){var c=Pf(b);Rf(this.a,Sf,c,b);delete this.b[(1).toString()]}c=Pf(b);this.b[(1).toString()]=b;Rf(this.a,Tf,c,b)}};p.Wd=function(b){if(!Of(this,b)){var c=Pf(b);Rf(this.a,Uf,c,b)}};p.Zd=function(b){if(!Of(this,b)){var c=this.b[(1).toString()];c&&c.button===b.button&&(c=Pf(b),Rf(this.a,Vf,c,b),delete this.b[(1).toString()])}};p.Yd=function(b){if(!Of(this,b)){var c=Pf(b);Wf(this.a,c,b)}};\np.Xd=function(b){if(!Of(this,b)){var c=Pf(b);Xf(this.a,c,b)}};function Yf(b){Mf.call(this,b,{MSPointerDown:this.de,MSPointerMove:this.ee,MSPointerUp:this.he,MSPointerOut:this.fe,MSPointerOver:this.ge,MSPointerCancel:this.ce,MSGotPointerCapture:this.ae,MSLostPointerCapture:this.be});this.b=b.b;this.f=[\"\",\"unavailable\",\"touch\",\"pen\",\"mouse\"]}M(Yf,Mf);function Zf(b,c){var d=c;ea(c.pointerType)&&(d=Qf(c,c),d.pointerType=b.f[c.pointerType]);return d}p=Yf.prototype;p.de=function(b){this.b[b.pointerId.toString()]=b;var c=Zf(this,b);Rf(this.a,Tf,c,b)};\np.ee=function(b){var c=Zf(this,b);Rf(this.a,Uf,c,b)};p.he=function(b){var c=Zf(this,b);Rf(this.a,Vf,c,b);delete this.b[b.pointerId.toString()]};p.fe=function(b){var c=Zf(this,b);Xf(this.a,c,b)};p.ge=function(b){var c=Zf(this,b);Wf(this.a,c,b)};p.ce=function(b){var c=Zf(this,b);Rf(this.a,Sf,c,b);delete this.b[b.pointerId.toString()]};p.be=function(b){S(this.a,new nf(\"lostpointercapture\",b,b))};p.ae=function(b){S(this.a,new nf(\"gotpointercapture\",b,b))};function $f(b){Mf.call(this,b,{pointerdown:this.se,pointermove:this.te,pointerup:this.we,pointerout:this.ue,pointerover:this.ve,pointercancel:this.re,gotpointercapture:this.xd,lostpointercapture:this.Ud})}M($f,Mf);p=$f.prototype;p.se=function(b){ag(this.a,b)};p.te=function(b){ag(this.a,b)};p.we=function(b){ag(this.a,b)};p.ue=function(b){ag(this.a,b)};p.ve=function(b){ag(this.a,b)};p.re=function(b){ag(this.a,b)};p.Ud=function(b){ag(this.a,b)};p.xd=function(b){ag(this.a,b)};function bg(b,c){Mf.call(this,b,{touchstart:this.Ie,touchmove:this.He,touchend:this.Ge,touchcancel:this.Fe});this.b=b.b;this.l=c;this.f=void 0;this.h=0;this.c=void 0}M(bg,Mf);p=bg.prototype;p.Vc=function(){this.h=0;this.c=void 0};\nfunction cg(b,c,d){c=Qf(c,d);c.pointerId=d.identifier+2;c.bubbles=!0;c.cancelable=!0;c.detail=b.h;c.button=0;c.buttons=1;c.width=d.webkitRadiusX||d.radiusX||0;c.height=d.webkitRadiusY||d.radiusY||0;c.pressure=d.webkitForce||d.force||.5;c.isPrimary=b.f===d.identifier;c.pointerType=\"touch\";c.clientX=d.clientX;c.clientY=d.clientY;c.screenX=d.screenX;c.screenY=d.screenY;return c}\nfunction dg(b,c,d){function e(){c.preventDefault()}var f=Array.prototype.slice.call(c.changedTouches),g=f.length,h,k;for(h=0;h<g;++h)k=cg(b,c,f[h]),k.preventDefault=e,d.call(b,c,k)}\np.Ie=function(b){var c=b.touches,d=Object.keys(this.b),e=d.length;if(e>=c.length){var f=[],g,h,k;for(g=0;g<e;++g){h=d[g];k=this.b[h];var l;if(!(l=1==h))a:{l=c.length;for(var m=void 0,n=0;n<l;n++)if(m=c[n],m.identifier===h-2){l=!0;break a}l=!1}l||f.push(k.out)}for(g=0;g<f.length;++g)this.Fb(b,f[g])}c=b.changedTouches[0];d=Object.keys(this.b).length;if(0===d||1===d&&(1).toString()in this.b)this.f=c.identifier,void 0!==this.c&&x.clearTimeout(this.c);eg(this,b);this.h++;dg(this,b,this.qe)};\np.qe=function(b,c){this.b[c.pointerId]={target:c.target,out:c,Sc:c.target};var d=this.a;c.bubbles=!0;Rf(d,fg,c,b);d=this.a;c.bubbles=!1;Rf(d,gg,c,b);Rf(this.a,Tf,c,b)};p.He=function(b){b.preventDefault();dg(this,b,this.$d)};p.$d=function(b,c){var d=this.b[c.pointerId];if(d){var e=d.out,f=d.Sc;Rf(this.a,Uf,c,b);e&&f!==c.target&&(e.relatedTarget=c.target,c.relatedTarget=f,e.target=f,c.target?(Xf(this.a,e,b),Wf(this.a,c,b)):(c.target=f,c.relatedTarget=null,this.Fb(b,c)));d.out=c;d.Sc=c.target}};\np.Ge=function(b){eg(this,b);dg(this,b,this.Je)};p.Je=function(b,c){Rf(this.a,Vf,c,b);this.a.out(c,b);var d=this.a;c.bubbles=!1;Rf(d,hg,c,b);delete this.b[c.pointerId];c.isPrimary&&(this.f=void 0,this.c=x.setTimeout(this.Vc.bind(this),200))};p.Fe=function(b){dg(this,b,this.Fb)};p.Fb=function(b,c){Rf(this.a,Sf,c,b);this.a.out(c,b);var d=this.a;c.bubbles=!1;Rf(d,hg,c,b);delete this.b[c.pointerId];c.isPrimary&&(this.f=void 0,this.c=x.setTimeout(this.Vc.bind(this),200))};\nfunction eg(b,c){var d=b.l.f,e=c.changedTouches[0];if(b.f===e.identifier){var f=[e.clientX,e.clientY];d.push(f);x.setTimeout(function(){La(d,f)},2500)}};function ig(b){mb.call(this);this.g=b;this.b={};this.c={};this.a=[];Hf?jg(this,new $f(this)):If?jg(this,new Yf(this)):(b=new Nf(this),jg(this,b),Gf&&jg(this,new bg(this,b)));b=this.a.length;for(var c,d=0;d<b;d++)c=this.a[d],kg(this,Object.keys(c.g))}M(ig,mb);function jg(b,c){var d=Object.keys(c.g);d&&(d.forEach(function(b){var d=c.g[b];d&&(this.c[b]=d.bind(c))},b),b.a.push(c))}ig.prototype.f=function(b){var c=this.c[b.type];c&&c(b)};\nfunction kg(b,c){c.forEach(function(b){Q(this.g,b,this.f,this)},b)}function lg(b,c){c.forEach(function(b){gb(this.g,b,this.f,this)},b)}function Qf(b,c){for(var d={},e,f=0,g=mg.length;f<g;f++)e=mg[f][0],d[e]=b[e]||c[e]||mg[f][1];return d}ig.prototype.out=function(b,c){b.bubbles=!0;Rf(this,ng,b,c)};function Xf(b,c,d){b.out(c,d);var e=c.relatedTarget;e&&ie(c.target,e)||(c.bubbles=!1,Rf(b,hg,c,d))}\nfunction Wf(b,c,d){c.bubbles=!0;Rf(b,fg,c,d);var e=c.relatedTarget;e&&ie(c.target,e)||(c.bubbles=!1,Rf(b,gg,c,d))}function Rf(b,c,d,e){S(b,new nf(c,e,d))}function ag(b,c){S(b,new nf(c.type,c,c))}ig.prototype.J=function(){for(var b=this.a.length,c,d=0;d<b;d++)c=this.a[d],lg(this,Object.keys(c.g));ig.X.J.call(this)};\nvar Uf=\"pointermove\",Tf=\"pointerdown\",Vf=\"pointerup\",fg=\"pointerover\",ng=\"pointerout\",gg=\"pointerenter\",hg=\"pointerleave\",Sf=\"pointercancel\",mg=[[\"bubbles\",!1],[\"cancelable\",!1],[\"view\",null],[\"detail\",null],[\"screenX\",0],[\"screenY\",0],[\"clientX\",0],[\"clientY\",0],[\"ctrlKey\",!1],[\"altKey\",!1],[\"shiftKey\",!1],[\"metaKey\",!1],[\"button\",0],[\"relatedTarget\",null],[\"buttons\",0],[\"pointerId\",0],[\"width\",0],[\"height\",0],[\"pressure\",0],[\"tiltX\",0],[\"tiltY\",0],[\"pointerType\",\"\"],[\"hwTimestamp\",0],[\"isPrimary\",\n!1],[\"type\",\"\"],[\"target\",null],[\"currentTarget\",null],[\"which\",0]];function og(b,c,d,e,f){te.call(this,b,c,f);this.originalEvent=d;this.pixel=c.vc(d);this.coordinate=c.ta(this.pixel);this.dragging=void 0!==e?e:!1}M(og,te);og.prototype.preventDefault=function(){og.X.preventDefault.call(this);this.originalEvent.preventDefault()};og.prototype.stopPropagation=function(){og.X.stopPropagation.call(this);this.originalEvent.stopPropagation()};function pg(b,c,d,e,f){og.call(this,b,c,d.a,e,f);this.a=d}M(pg,og);\nfunction qg(b){mb.call(this);this.f=b;this.h=0;this.l=!1;this.c=[];this.b=null;b=this.f.a;this.s=0;this.o={};this.g=new ig(b);this.a=null;this.i=Q(this.g,Tf,this.Jd,this);this.j=Q(this.g,Uf,this.ye,this)}M(qg,mb);function rg(b,c){var d;d=new pg(sg,b.f,c);S(b,d);0!==b.h?(x.clearTimeout(b.h),b.h=0,d=new pg(tg,b.f,c),S(b,d)):b.h=x.setTimeout(function(){this.h=0;var b=new pg(ug,this.f,c);S(this,b)}.bind(b),250)}\nfunction vg(b,c){c.type==wg||c.type==xg?delete b.o[c.pointerId]:c.type==yg&&(b.o[c.pointerId]=!0);b.s=Object.keys(b.o).length}p=qg.prototype;p.zc=function(b){vg(this,b);var c=new pg(wg,this.f,b);S(this,c);!this.l&&0===b.button&&rg(this,this.b);0===this.s&&(this.c.forEach(N),this.c.length=0,this.l=!1,this.b=null,jb(this.a),this.a=null)};\np.Jd=function(b){vg(this,b);var c=new pg(yg,this.f,b);S(this,c);this.b=b;0===this.c.length&&(this.a=new ig(document),this.c.push(Q(this.a,zg,this.ke,this),Q(this.a,wg,this.zc,this),Q(this.g,xg,this.zc,this)))};p.ke=function(b){if(b.clientX!=this.b.clientX||b.clientY!=this.b.clientY){this.l=!0;var c=new pg(Ag,this.f,b,this.l);S(this,c)}b.preventDefault()};p.ye=function(b){S(this,new pg(b.type,this.f,b,!(!this.b||b.clientX==this.b.clientX&&b.clientY==this.b.clientY)))};\np.J=function(){this.j&&(N(this.j),this.j=null);this.i&&(N(this.i),this.i=null);this.c.forEach(N);this.c.length=0;this.a&&(jb(this.a),this.a=null);this.g&&(jb(this.g),this.g=null);qg.X.J.call(this)};var ug=\"singleclick\",sg=\"click\",tg=\"dblclick\",Ag=\"pointerdrag\",zg=\"pointermove\",yg=\"pointerdown\",wg=\"pointerup\",xg=\"pointercancel\",Bg={Ve:ug,Ke:sg,Le:tg,Oe:Ag,Re:zg,Ne:yg,Ue:wg,Te:\"pointerover\",Se:\"pointerout\",Pe:\"pointerenter\",Qe:\"pointerleave\",Me:xg};function Cg(b){T.call(this);var c=Wa({},b);c.opacity=void 0!==b.opacity?b.opacity:1;c.visible=void 0!==b.visible?b.visible:!0;c.zIndex=void 0!==b.zIndex?b.zIndex:0;c.maxResolution=void 0!==b.maxResolution?b.maxResolution:Infinity;c.minResolution=void 0!==b.minResolution?b.minResolution:0;this.l(c)}M(Cg,T);\nfunction Dg(b){var c=b.Ub(),d=b.Pb(),e=b.cb(),f=b.C(),g=b.Vb(),h=b.get(\"maxResolution\"),k=b.get(\"minResolution\");return{layer:b,opacity:Ca(c,0,1),$b:d,visible:e,eb:!0,extent:f,zIndex:g,maxResolution:h,minResolution:Math.max(k,0)}}p=Cg.prototype;p.C=function(){return this.get(\"extent\")};p.Ub=function(){return this.get(\"opacity\")};p.cb=function(){return this.get(\"visible\")};p.Vb=function(){return this.get(\"zIndex\")};p.Fc=function(b){this.set(\"opacity\",b)};p.Gc=function(b){this.set(\"visible\",b)};\np.Hc=function(b){this.set(\"zIndex\",b)};function Eg(){};function Fg(b,c,d,e,f,g){R.call(this,b,c);this.vectorContext=d;this.frameState=e;this.context=f;this.glContext=g}M(Fg,R);function Gg(b){var c=Wa({},b);delete c.source;Cg.call(this,c);this.h=this.c=this.b=null;b.map&&this.setMap(b.map);Q(this,rb(\"source\"),this.Od,this);this.Zb(b.source?b.source:null)}M(Gg,Cg);function Hg(b,c){return b.visible&&c>=b.minResolution&&c<b.maxResolution}p=Gg.prototype;p.Lb=function(b){b=b?b:[];b.push(Dg(this));return b};p.V=function(){return this.get(\"source\")||null};p.Pb=function(){var b=this.V();return b?b.N():\"undefined\"};p.me=function(){this.v()};\np.Od=function(){this.h&&(N(this.h),this.h=null);var b=this.V();b&&(this.h=Q(b,\"change\",this.me,this));this.v()};p.setMap=function(b){this.b&&(N(this.b),this.b=null);b||this.v();this.c&&(N(this.c),this.c=null);b&&(this.b=Q(b,\"precompose\",function(b){var d=Dg(this);d.eb=!1;d.zIndex=Infinity;b.frameState.layerStatesArray.push(d);b.frameState.layerStates[I(this)]=d},this),this.c=Q(this,\"change\",b.render,b),this.v())};p.Zb=function(b){this.set(\"source\",b)};function Ig(b,c,d,e,f,g,h,k){Db(b);0===c&&0===d||Fb(b,c,d);1==e&&1==f||Gb(b,e,f);0!==g&&Hb(b,g);0===h&&0===k||Fb(b,h,k);return b}function Jg(b,c){return b[0]==c[0]&&b[1]==c[1]&&b[4]==c[4]&&b[5]==c[5]&&b[12]==c[12]&&b[13]==c[13]}function Kg(b,c,d){var e=b[1],f=b[5],g=b[13],h=c[0];c=c[1];d[0]=b[0]*h+b[4]*c+b[12];d[1]=e*h+f*c+g;return d};function Lg(b){ob.call(this);this.a=b}M(Lg,ob);Lg.prototype.fb=pa;Lg.prototype.Ic=dc;Lg.prototype.l=function(b,c,d){return function(e,f){return We(b,c,e,f,function(b){d[e]||(d[e]={});d[e][b.L.toString()]=b})}};function Mg(b){var c=b.a;c.cb()&&\"ready\"==c.Pb()&&b.v()}function Ng(b,c){c.Qc()&&b.postRenderFunctions.push(na(function(b,c,f){c=I(b).toString();b.Rc(f.viewState.projection,f.usedTiles[c])},c))}function Og(b,c){if(c){var d,e,f;e=0;for(f=c.length;e<f;++e)d=c[e],b[I(d).toString()]=d}}\nfunction Pg(b,c){var d=c.w;void 0!==d&&(\"string\"===typeof d?b.logos[d]=\"\":ha(d)&&(b.logos[d.src]=d.href))}function Qg(b,c,d,e){c=I(c).toString();d=d.toString();c in b?d in b[c]?(b=b[c][d],e.a<b.a&&(b.a=e.a),e.f>b.f&&(b.f=e.f),e.b<b.b&&(b.b=e.b),e.c>b.c&&(b.c=e.c)):b[c][d]=e:(b[c]={},b[c][d]=e)}function Rg(b,c,d){return[c*(Math.round(b[0]/c)+d[0]%2/2),c*(Math.round(b[1]/c)+d[1]%2/2)]}\nfunction Sg(b,c,d,e,f,g,h,k,l,m){var n=I(c).toString();n in b.wantedTiles||(b.wantedTiles[n]={});var q=b.wantedTiles[n];b=b.tileQueue;var r=d.minZoom,u,w,y,z,D,t;for(t=h;t>=r;--t)for(w=Ke(d,g,t,w),y=d.I(t),z=w.a;z<=w.f;++z)for(D=w.b;D<=w.c;++D)h-t<=k?(u=Tg(c,t,z,D,e,f),0==u.N()&&(q[u.L.toString()]=!0,u.getKey()in b.f||b.c([u,n,Oe(d,u.L),y])),void 0!==l&&l.call(m,u)):c.Yc(t,z,D,f)};function Ug(b){this.l=b.opacity;this.i=b.rotateWithView;this.H=b.rotation;this.gb=b.scale;this.u=b.snapToPixel}Ug.prototype.Z=function(){return this.H};function Vg(b){b=b||{};this.g=void 0!==b.anchor?b.anchor:[.5,.5];this.c=null;this.b=void 0!==b.anchorOrigin?b.anchorOrigin:\"top-left\";this.j=void 0!==b.anchorXUnits?b.anchorXUnits:\"fraction\";this.A=void 0!==b.anchorYUnits?b.anchorYUnits:\"fraction\";var c=void 0!==b.crossOrigin?b.crossOrigin:null,d=void 0!==b.img?b.img:null,e=void 0!==b.imgSize?b.imgSize:null,f=b.src;void 0!==f&&0!==f.length||!d||(f=d.src||I(d).toString());var g=void 0!==b.src?0:2,h;void 0!==b.color?(h=b.color,h=Array.isArray(h)?h:\nxd(h)):h=null;var k=Wg.ua(),l=k.get(f,c,h);l||(l=new Xg(d,f,e,c,g,h),k.set(f,c,h,l));this.a=l;this.s=void 0!==b.offset?b.offset:[0,0];this.f=void 0!==b.offsetOrigin?b.offsetOrigin:\"top-left\";this.h=null;this.o=void 0!==b.size?b.size:null;Ug.call(this,{opacity:void 0!==b.opacity?b.opacity:1,rotation:void 0!==b.rotation?b.rotation:0,scale:void 0!==b.scale?b.scale:1,snapToPixel:void 0!==b.snapToPixel?b.snapToPixel:!0,rotateWithView:void 0!==b.rotateWithView?b.rotateWithView:!1})}M(Vg,Ug);p=Vg.prototype;\np.jb=function(){if(this.c)return this.c;var b=this.g,c=this.Qa();if(\"fraction\"==this.j||\"fraction\"==this.A){if(!c)return null;b=this.g.slice();\"fraction\"==this.j&&(b[0]*=c[0]);\"fraction\"==this.A&&(b[1]*=c[1])}if(\"top-left\"!=this.b){if(!c)return null;b===this.g&&(b=this.g.slice());if(\"top-right\"==this.b||\"bottom-right\"==this.b)b[0]=-b[0]+c[0];if(\"bottom-left\"==this.b||\"bottom-right\"==this.b)b[1]=-b[1]+c[1]}return this.c=b};p.T=function(b){return this.a.T(b)};p.wc=function(){return this.a.b};p.rb=function(){return this.a.f};\np.Xb=function(){var b=this.a;if(!b.l)if(b.i){var c=b.b[0],d=b.b[1],e=rf(c,d);e.fillRect(0,0,c,d);b.l=e.canvas}else b.l=b.a;return b.l};p.ka=function(){if(this.h)return this.h;var b=this.s;if(\"top-left\"!=this.f){var c=this.Qa(),d=this.a.b;if(!c||!d)return null;b=b.slice();if(\"top-right\"==this.f||\"bottom-right\"==this.f)b[0]=d[0]-c[0]-b[0];if(\"bottom-left\"==this.f||\"bottom-right\"==this.f)b[1]=d[1]-c[1]-b[1]}return this.h=b};p.Qa=function(){return this.o?this.o:this.a.b};\np.Bc=function(b,c){return Q(this.a,\"change\",b,c)};p.load=function(){this.a.load()};p.Xc=function(b,c){gb(this.a,\"change\",b,c)};function Xg(b,c,d,e,f,g){mb.call(this);this.l=null;this.a=b?b:new Image;null!==e&&(this.a.crossOrigin=e);this.c=g?document.createElement(\"CANVAS\"):null;this.h=g;this.g=null;this.f=f;this.b=d;this.o=c;this.i=!1;2==this.f&&Yg(this)}M(Xg,mb);function Yg(b){var c=rf(1,1);try{c.drawImage(b.a,0,0),c.getImageData(0,0,1,1)}catch(d){b.i=!0}}\nXg.prototype.j=function(){this.f=3;this.g.forEach(N);this.g=null;S(this,\"change\")};\nXg.prototype.s=function(){this.f=2;this.b&&(this.a.width=this.b[0],this.a.height=this.b[1]);this.b=[this.a.width,this.a.height];this.g.forEach(N);this.g=null;Yg(this);if(!this.i&&null!==this.h){this.c.width=this.a.width;this.c.height=this.a.height;var b=this.c.getContext(\"2d\");b.drawImage(this.a,0,0);for(var c=b.getImageData(0,0,this.a.width,this.a.height),d=c.data,e=this.h[0]/255,f=this.h[1]/255,g=this.h[2]/255,h=0,k=d.length;h<k;h+=4)d[h]*=e,d[h+1]*=f,d[h+2]*=g;b.putImageData(c,0,0)}S(this,\"change\")};\nXg.prototype.T=function(){return this.c?this.c:this.a};Xg.prototype.load=function(){if(0==this.f){this.f=1;this.g=[Q(this.a,\"error\",this.j,this,!0),Q(this.a,\"load\",this.s,this,!0)];try{this.a.src=this.o}catch(b){this.j()}}};function Wg(){this.a={};this.b=0}aa(Wg);Wg.prototype.clear=function(){this.a={};this.b=0};Wg.prototype.get=function(b,c,d){b=c+\":\"+b+\":\"+(d?vd(d):\"null\");return b in this.a?this.a[b]:null};Wg.prototype.set=function(b,c,d,e){this.a[c+\":\"+b+\":\"+(d?vd(d):\"null\")]=e;++this.b};function Zg(b,c){this.h=c;this.f={};this.A={}}M(Zg,ib);function $g(b){var c=b.viewState,d=b.coordinateToPixelMatrix;Ig(d,b.size[0]/2,b.size[1]/2,1/c.resolution,-1/c.resolution,-c.rotation,-c.center[0],-c.center[1]);Eb(d,b.pixelToCoordinateMatrix)}p=Zg.prototype;p.J=function(){for(var b in this.f)jb(this.f[b])};function ah(){var b=Wg.ua();if(32<b.b){var c=0,d,e;for(d in b.a)e=b.a[d],0!==(c++&3)||nb(e)||(delete b.a[d],--b.b)}}\np.Wb=function(b,c,d,e,f,g){function h(b,f){var g=I(b).toString(),h=c.layerStates[I(f)].eb;if(!(g in c.skippedFeatureUids)||h)return d.call(e,b,h?f:null)}var k,l=c.viewState,m=l.resolution,n=l.projection,l=b;if(n.a){var n=n.C(),q=Vb(n),r=b[0];if(r<n[0]||r>n[2])l=[r+q*Math.ceil((n[0]-r)/q),b[1]]}n=c.layerStatesArray;for(q=n.length-1;0<=q;--q){var u=n[q],r=u.layer;if(Hg(u,m)&&f.call(g,r)&&(u=bh(this,r),r.V()&&(k=u.fb(r.V().j?l:b,c,h,e)),k))return k}};\np.Jc=function(b,c,d,e){return void 0!==this.Wb(b,c,cc,this,d,e)};function bh(b,c){var d=I(c).toString();if(d in b.f)return b.f[d];var e=b.Jb(c);b.f[d]=e;b.A[d]=Q(e,\"change\",b.Dd,b);return e}p.Dd=function(){this.h.render()};p.sb=pa;p.Be=function(b,c){for(var d in this.f)if(!(c&&d in c.layerStates)){var e=d,f=this.f[e];delete this.f[e];N(this.A[e]);delete this.A[e];jb(f)}};function ch(b,c){for(var d in b.f)if(!(d in c.layerStates)){c.postRenderFunctions.push(b.Be.bind(b));break}}\nfunction Oa(b,c){return b.zIndex-c.zIndex};function dh(b,c){this.j=b;this.l=c;this.a=[];this.b=[];this.f={}}dh.prototype.clear=function(){this.a.length=0;this.b.length=0;Ya(this.f)};function eh(b){var c=b.a,d=b.b,e=c[0];1==c.length?(c.length=0,d.length=0):(c[0]=c.pop(),d[0]=d.pop(),fh(b,0));c=b.l(e);delete b.f[c];return e}dh.prototype.c=function(b){var c=this.j(b);return Infinity!=c?(this.a.push(b),this.b.push(c),this.f[this.l(b)]=!0,gh(this,0,this.a.length-1),!0):!1};\nfunction fh(b,c){for(var d=b.a,e=b.b,f=d.length,g=d[c],h=e[c],k=c;c<f>>1;){var l=2*c+1,m=2*c+2,l=m<f&&e[m]<e[l]?m:l;d[c]=d[l];e[c]=e[l];c=l}d[c]=g;e[c]=h;gh(b,k,c)}function gh(b,c,d){var e=b.a;b=b.b;for(var f=e[d],g=b[d];d>c;){var h=d-1>>1;if(b[h]>g)e[d]=e[h],b[d]=b[h],d=h;else break}e[d]=f;b[d]=g}function hh(b){var c=b.j,d=b.a,e=b.b,f=0,g=d.length,h,k,l;for(k=0;k<g;++k)h=d[k],l=c(h),Infinity==l?delete b.f[b.l(h)]:(e[f]=l,d[f++]=h);d.length=f;e.length=f;for(c=(b.a.length>>1)-1;0<=c;c--)fh(b,c)};function ih(b,c){dh.call(this,function(c){return b.apply(null,c)},function(b){return b[0].getKey()});this.A=c;this.h=0;this.g={}}M(ih,dh);ih.prototype.c=function(b){var c=ih.X.c.call(this,b);c&&Q(b[0],\"change\",this.i,this);return c};ih.prototype.i=function(b){b=b.target;var c=b.N();if(2===c||3===c||4===c||5===c)gb(b,\"change\",this.i,this),b=b.getKey(),b in this.g&&(delete this.g[b],--this.h),this.A()};function jh(){this.a=[];this.b=this.f=0}function kh(b,c){var d=b.b,e=.05-d,f=Math.log(.05/b.b)/-.005;return cd({source:c,duration:f,easing:function(b){return d*(Math.exp(-.005*b*f)-1)/e}})};function lh(b){T.call(this);this.S=null;this.set(\"active\",!0);this.handleEvent=b.handleEvent}M(lh,T);lh.prototype.setMap=function(b){this.S=b};function mh(b,c,d,e,f){if(void 0!==d){var g=c.Z(),h=c.ia();void 0!==g&&h&&f&&0<f&&(b.fa(dd({rotation:g,duration:f,easing:$c})),e&&b.fa(cd({source:h,duration:f,easing:$c})));c.rotate(d,e)}}function nh(b,c,d,e,f){var g=c.I();d=c.constrainResolution(g,d,0);oh(b,c,d,e,f)}\nfunction oh(b,c,d,e,f){if(d){var g=c.I(),h=c.ia();void 0!==g&&h&&d!==g&&f&&0<f&&(b.fa(ed({resolution:g,duration:f,easing:$c})),e&&b.fa(cd({source:h,duration:f,easing:$c})));if(e){var k;b=c.ia();f=c.I();void 0!==b&&void 0!==f&&(k=[e[0]-d*(e[0]-b[0])/f,e[1]-d*(e[1]-b[1])/f]);c.oa(k)}Yc(c,d)}};function ph(b){b=b?b:{};this.a=b.delta?b.delta:1;lh.call(this,{handleEvent:qh});this.b=void 0!==b.duration?b.duration:250}M(ph,lh);function qh(b){var c=!1,d=b.originalEvent;if(b.type==tg){var c=b.map,e=b.coordinate,d=d.shiftKey?-this.a:this.a,f=c.O();nh(c,f,d,e,this.b);b.preventDefault();c=!0}return!c};function rh(b){b=b.originalEvent;return b.altKey&&!(b.metaKey||b.ctrlKey)&&b.shiftKey}function sh(b){b=b.originalEvent;return 0==b.button&&!(Jd&&Cf&&b.ctrlKey)}function th(b){b=b.originalEvent;return!b.altKey&&!(b.metaKey||b.ctrlKey)&&!b.shiftKey}function uh(b){b=b.originalEvent;return!b.altKey&&!(b.metaKey||b.ctrlKey)&&b.shiftKey}function vh(b){b=b.originalEvent.target.tagName;return\"INPUT\"!==b&&\"SELECT\"!==b&&\"TEXTAREA\"!==b}function wh(b){return\"mouse\"==b.a.pointerType};function xh(b){b=b?b:{};lh.call(this,{handleEvent:b.handleEvent?b.handleEvent:yh});this.wb=b.handleDownEvent?b.handleDownEvent:dc;this.xb=b.handleDragEvent?b.handleDragEvent:pa;this.yb=b.handleMoveEvent?b.handleMoveEvent:pa;this.zb=b.handleUpEvent?b.handleUpEvent:dc;this.s=!1;this.G={};this.c=[]}M(xh,lh);function zh(b){for(var c=b.length,d=0,e=0,f=0;f<c;f++)d+=b[f].clientX,e+=b[f].clientY;return[d/c,e/c]}\nfunction yh(b){if(!(b instanceof pg))return!0;var c=!1,d=b.type;if(d===yg||d===Ag||d===wg)d=b.a,b.type==wg?delete this.G[d.pointerId]:b.type==yg?this.G[d.pointerId]=d:d.pointerId in this.G&&(this.G[d.pointerId]=d),this.c=Za(this.G);this.s&&(b.type==Ag?this.xb(b):b.type==wg&&(this.s=this.zb(b)));b.type==yg?(this.s=b=this.wb(b),c=this.w(b)):b.type==zg&&this.yb(b);return!c}xh.prototype.w=function(b){return b};function Ah(b){xh.call(this,{handleDownEvent:Bh,handleDragEvent:Ch,handleUpEvent:Dh});b=b?b:{};this.a=b.kinetic;this.b=this.g=null;this.i=b.condition?b.condition:th;this.h=!1}M(Ah,xh);function Ch(b){var c=zh(this.c);this.a&&this.a.a.push(c[0],c[1],Date.now());if(this.b){var d=this.b[0]-c[0],e=c[1]-this.b[1];b=b.map;var f=b.O(),g=f.N(),e=d=[d,e],h=g.resolution;e[0]*=h;e[1]*=h;vb(d,g.rotation);ub(d,g.center);d=f.a.center(d);b.render();f.oa(d)}this.b=c}\nfunction Dh(b){b=b.map;var c=b.O();if(0===this.c.length){var d;if(d=!this.h&&this.a)if(d=this.a,6>d.a.length)d=!1;else{var e=Date.now()-100,f=d.a.length-3;if(d.a[f+2]<e)d=!1;else{for(var g=f-3;0<g&&d.a[g+2]>e;)g-=3;var e=d.a[f+2]-d.a[g+2],h=d.a[f]-d.a[g],f=d.a[f+1]-d.a[g+1];d.f=Math.atan2(f,h);d.b=Math.sqrt(h*h+f*f)/e;d=.05<d.b}}d&&(d=(.05-this.a.b)/-.005,f=this.a.f,g=c.ia(),this.g=kh(this.a,g),b.fa(this.g),g=Eh(b,g),d=b.ta([g[0]-d*Math.cos(f),g[1]-d*Math.sin(f)]),d=c.a.center(d),c.oa(d));Zc(c,-1);\nb.render();return!1}this.b=null;return!0}function Bh(b){if(0<this.c.length&&this.i(b)){var c=b.map,d=c.O();this.b=null;this.s||Zc(d,1);c.render();this.g&&La(c.B,this.g)&&(d.oa(b.frameState.viewState.center),this.g=null);this.a&&(b=this.a,b.a.length=0,b.f=0,b.b=0);this.h=1<this.c.length;return!0}return!1}Ah.prototype.w=dc;function Fh(b){b=b?b:{};xh.call(this,{handleDownEvent:Gh,handleDragEvent:Hh,handleUpEvent:Ih});this.b=b.condition?b.condition:rh;this.a=void 0;this.g=void 0!==b.duration?b.duration:250}M(Fh,xh);function Hh(b){if(wh(b)){var c=b.map,d=c.Pa();b=b.pixel;d=Math.atan2(d[1]/2-b[1],b[0]-d[0]/2);if(void 0!==this.a){b=d-this.a;var e=c.O(),f=e.Z();c.render();mh(c,e,f-b)}this.a=d}}\nfunction Ih(b){if(!wh(b))return!0;b=b.map;var c=b.O();Zc(c,-1);var d=c.Z(),e=this.g,d=c.constrainRotation(d,0);mh(b,c,d,void 0,e);return!1}function Gh(b){return wh(b)&&sh(b)&&this.b(b)?(b=b.map,Zc(b.O(),1),b.render(),this.a=void 0,!0):!1}Fh.prototype.w=dc;function Jh(b){this.c=null;this.b=document.createElement(\"div\");this.b.style.position=\"absolute\";this.b.className=\"ol-box \"+b;this.f=this.g=this.a=null}M(Jh,ib);Jh.prototype.J=function(){this.setMap(null)};function Kh(b){var c=b.g,d=b.f;b=b.b.style;b.left=Math.min(c[0],d[0])+\"px\";b.top=Math.min(c[1],d[1])+\"px\";b.width=Math.abs(d[0]-c[0])+\"px\";b.height=Math.abs(d[1]-c[1])+\"px\"}\nJh.prototype.setMap=function(b){if(this.a){this.a.o.removeChild(this.b);var c=this.b.style;c.left=c.top=c.width=c.height=\"inherit\"}(this.a=b)&&this.a.o.appendChild(this.b)};function Lh(b){var c=b.g,d=b.f,c=[c,[c[0],d[1]],d,[d[0],c[1]]].map(b.a.ta,b.a);c[4]=c[0].slice();b.c?b.c.W([c]):b.c=new Tc([c])}Jh.prototype.M=function(){return this.c};function Mh(b,c,d){R.call(this,b);this.coordinate=c;this.mapBrowserEvent=d}M(Mh,R);function Nh(b){xh.call(this,{handleDownEvent:Oh,handleDragEvent:Ph,handleUpEvent:Qh});b=b?b:{};this.a=new Jh(b.className||\"ol-dragbox\");this.b=null;this.j=b.condition?b.condition:cc;this.i=b.boxEndCondition?b.boxEndCondition:Rh}M(Nh,xh);function Rh(b,c,d){b=d[0]-c[0];c=d[1]-c[1];return 64<=b*b+c*c}\nfunction Ph(b){if(wh(b)){var c=this.a,d=b.pixel;c.g=this.b;c.f=d;Lh(c);Kh(c);S(this,new Mh(\"boxdrag\",b.coordinate,b))}}Nh.prototype.M=function(){return this.a.M()};Nh.prototype.h=pa;function Qh(b){if(!wh(b))return!0;this.a.setMap(null);this.i(b,this.b,b.pixel)&&(this.h(b),S(this,new Mh(\"boxend\",b.coordinate,b)));return!1}\nfunction Oh(b){if(wh(b)&&sh(b)&&this.j(b)){this.b=b.pixel;this.a.setMap(b.map);var c=this.a,d=this.b;c.g=this.b;c.f=d;Lh(c);Kh(c);S(this,new Mh(\"boxstart\",b.coordinate,b));return!0}return!1};function Sh(b){b=b?b:{};var c=b.condition?b.condition:uh;this.g=void 0!==b.duration?b.duration:200;this.o=void 0!==b.out?b.out:!1;Nh.call(this,{condition:c,className:b.className||\"ol-dragzoom\"})}M(Sh,Nh);\nSh.prototype.h=function(){var b=this.S,c=b.O(),d=b.Pa(),e=this.M().C();if(this.o){var f=c.jc(d),e=[Eh(b,Xb(e)),Eh(b,[e[2],e[3]])],g=Pb(void 0),h,k;h=0;for(k=e.length;h<k;++h)Kb(g,e[h]);g=1/Xc(g,d);e=(f[2]-f[0])/2*(g-1);g=(f[3]-f[1])/2*(g-1);f[0]-=e;f[2]+=e;f[1]-=g;f[3]+=g;e=f}d=c.constrainResolution(Xc(e,d));f=c.I();g=c.ia();b.fa(ed({resolution:f,duration:this.g,easing:$c}));b.fa(cd({source:g,duration:this.g,easing:$c}));c.oa(Yb(e));Yc(c,d)};function Th(b){lh.call(this,{handleEvent:Uh});b=b||{};this.a=function(b){return th.call(this,b)&&vh.call(this,b)};this.b=void 0!==b.condition?b.condition:this.a;this.c=void 0!==b.duration?b.duration:100;this.g=void 0!==b.pixelDelta?b.pixelDelta:128}M(Th,lh);\nfunction Uh(b){var c=!1;if(\"keydown\"==b.type){var d=b.originalEvent.keyCode;if(this.b(b)&&(40==d||37==d||39==d||38==d)){var e=b.map,c=e.O(),f=c.I()*this.g,g=0,h=0;40==d?h=-f:37==d?g=-f:39==d?g=f:h=f;d=[g,h];vb(d,c.Z());f=this.c;if(g=c.ia())f&&0<f&&e.fa(cd({source:g,duration:f,easing:bd})),e=c.a.center([g[0]+d[0],g[1]+d[1]]),c.oa(e);b.preventDefault();c=!0}}return!c};function Vh(b){lh.call(this,{handleEvent:Wh});b=b?b:{};this.b=b.condition?b.condition:vh;this.a=b.delta?b.delta:1;this.c=void 0!==b.duration?b.duration:100}M(Vh,lh);function Wh(b){var c=!1;if(\"keydown\"==b.type||\"keypress\"==b.type){var d=b.originalEvent.charCode;if(this.b(b)&&(43==d||45==d)){c=b.map;d=43==d?this.a:-this.a;c.render();var e=c.O();nh(c,e,d,void 0,this.c);b.preventDefault();c=!0}}return!c};function Xh(b){lh.call(this,{handleEvent:Yh});b=b||{};this.a=0;this.i=void 0!==b.duration?b.duration:250;this.j=void 0!==b.useAnchor?b.useAnchor:!0;this.c=null;this.g=this.b=void 0}M(Xh,lh);\nfunction Yh(b){var c=!1;if(\"wheel\"==b.type||\"mousewheel\"==b.type){var c=b.map,d=b.originalEvent;this.j&&(this.c=b.coordinate);var e;\"wheel\"==b.type?(e=d.deltaY,Af&&d.deltaMode===x.WheelEvent.DOM_DELTA_PIXEL&&(e/=Df),d.deltaMode===x.WheelEvent.DOM_DELTA_LINE&&(e*=40)):\"mousewheel\"==b.type&&(e=-d.wheelDeltaY,Bf&&(e/=3));this.a+=e;void 0===this.b&&(this.b=Date.now());e=Math.max(80-(Date.now()-this.b),0);x.clearTimeout(this.g);this.g=x.setTimeout(this.h.bind(this,c),e);b.preventDefault();c=!0}return!c}\nXh.prototype.h=function(b){var c=Ca(this.a,-1,1),d=b.O();b.render();nh(b,d,-c,this.c,this.i);this.a=0;this.c=null;this.g=this.b=void 0};function Zh(b){xh.call(this,{handleDownEvent:$h,handleDragEvent:ai,handleUpEvent:bi});b=b||{};this.b=null;this.g=void 0;this.a=!1;this.h=0;this.j=void 0!==b.threshold?b.threshold:.3;this.i=void 0!==b.duration?b.duration:250}M(Zh,xh);\nfunction ai(b){var c=0,d=this.c[0],e=this.c[1],d=Math.atan2(e.clientY-d.clientY,e.clientX-d.clientX);void 0!==this.g&&(c=d-this.g,this.h+=c,!this.a&&Math.abs(this.h)>this.j&&(this.a=!0));this.g=d;b=b.map;d=b.a.getBoundingClientRect();e=zh(this.c);e[0]-=d.left;e[1]-=d.top;this.b=b.ta(e);this.a&&(d=b.O(),e=d.Z(),b.render(),mh(b,d,e+c,this.b))}\nfunction bi(b){if(2>this.c.length){b=b.map;var c=b.O();Zc(c,-1);if(this.a){var d=c.Z(),e=this.b,f=this.i,d=c.constrainRotation(d,0);mh(b,c,d,e,f)}return!1}return!0}function $h(b){return 2<=this.c.length?(b=b.map,this.b=null,this.g=void 0,this.a=!1,this.h=0,this.s||Zc(b.O(),1),b.render(),!0):!1}Zh.prototype.w=dc;function ci(b){xh.call(this,{handleDownEvent:di,handleDragEvent:ei,handleUpEvent:fi});b=b?b:{};this.b=null;this.h=void 0!==b.duration?b.duration:400;this.a=void 0;this.g=1}M(ci,xh);function ei(b){var c=1,d=this.c[0],e=this.c[1],f=d.clientX-e.clientX,d=d.clientY-e.clientY,f=Math.sqrt(f*f+d*d);void 0!==this.a&&(c=this.a/f);this.a=f;1!=c&&(this.g=c);b=b.map;var f=b.O(),d=f.I(),e=b.a.getBoundingClientRect(),g=zh(this.c);g[0]-=e.left;g[1]-=e.top;this.b=b.ta(g);b.render();oh(b,f,d*c,this.b)}\nfunction fi(b){if(2>this.c.length){b=b.map;var c=b.O();Zc(c,-1);var d=c.I(),e=this.b,f=this.h,d=c.constrainResolution(d,0,this.g-1);oh(b,c,d,e,f);return!1}return!0}function di(b){return 2<=this.c.length?(b=b.map,this.b=null,this.a=void 0,this.g=1,this.s||Zc(b.O(),1),b.render(),!0):!1}ci.prototype.w=dc;function gi(b){var c=b||{};b=Wa({},c);delete b.layers;c=c.layers;Cg.call(this,b);this.b=[];this.a={};Q(this,rb(\"layers\"),this.Fd,this);c?Array.isArray(c)&&(c=new ld(c.slice())):c=new ld;this.set(\"layers\",c)}M(gi,Cg);p=gi.prototype;p.ob=function(){this.cb()&&this.v()};\np.Fd=function(){this.b.forEach(N);this.b.length=0;var b=this.get(\"layers\");this.b.push(Q(b,\"add\",this.Ed,this),Q(b,\"remove\",this.Gd,this));for(var c in this.a)this.a[c].forEach(N);Ya(this.a);var b=b.a,d,e;c=0;for(d=b.length;c<d;c++)e=b[c],this.a[I(e).toString()]=[Q(e,\"propertychange\",this.ob,this),Q(e,\"change\",this.ob,this)];this.v()};p.Ed=function(b){b=b.element;var c=I(b).toString();this.a[c]=[Q(b,\"propertychange\",this.ob,this),Q(b,\"change\",this.ob,this)];this.v()};\np.Gd=function(b){b=I(b.element).toString();this.a[b].forEach(N);delete this.a[b];this.v()};p.Lb=function(b){var c=void 0!==b?b:[],d=c.length;nd(this.get(\"layers\"),function(b){b.Lb(c)});b=Dg(this);var e,f;for(e=c.length;d<e;d++)f=c[d],f.opacity*=b.opacity,f.visible=f.visible&&b.visible,f.maxResolution=Math.min(f.maxResolution,b.maxResolution),f.minResolution=Math.max(f.minResolution,b.minResolution),void 0!==b.extent&&(f.extent=void 0!==f.extent?$b(f.extent,b.extent):b.extent);return c};p.Pb=function(){return\"ready\"};function hi(b){ic.call(this,{code:b,units:\"m\",extent:ii,global:!0,worldExtent:ji})}M(hi,ic);hi.prototype.getPointResolution=function(b,c){return b/Da(c[1]/6378137)};var ki=6378137*Math.PI,ii=[-ki,-ki,ki,ki],ji=[-180,-85,180,85],li=\"EPSG:3857 EPSG:102100 EPSG:102113 EPSG:900913 urn:ogc:def:crs:EPSG:6.18:3:3857 urn:ogc:def:crs:EPSG::3857 http://www.opengis.net/gml/srs/epsg.xml#3857\".split(\" \").map(function(b){return new hi(b)});\nfunction mi(b,c,d){var e=b.length;d=1<d?d:2;void 0===c&&(2<d?c=b.slice():c=Array(e));for(var f=0;f<e;f+=d)c[f]=6378137*Math.PI*b[f]/180,c[f+1]=6378137*Math.log(Math.tan(Math.PI*(b[f+1]+90)/360));return c}function ni(b,c,d){var e=b.length;d=1<d?d:2;void 0===c&&(2<d?c=b.slice():c=Array(e));for(var f=0;f<e;f+=d)c[f]=180*b[f]/(6378137*Math.PI),c[f+1]=360*Math.atan(Math.exp(b[f+1]/6378137))/Math.PI-90;return c};var oi=new ec(6378137);function pi(b,c){ic.call(this,{code:b,units:\"degrees\",extent:qi,axisOrientation:c,global:!0,metersPerUnit:ri,worldExtent:qi})}M(pi,ic);pi.prototype.getPointResolution=function(b){return b};\nvar qi=[-180,-90,180,90],ri=Math.PI*oi.radius/180,si=[new pi(\"CRS:84\"),new pi(\"EPSG:4326\",\"neu\"),new pi(\"urn:ogc:def:crs:EPSG::4326\",\"neu\"),new pi(\"urn:ogc:def:crs:EPSG:6.6:4326\",\"neu\"),new pi(\"urn:ogc:def:crs:OGC:1.3:CRS84\"),new pi(\"urn:ogc:def:crs:OGC:2:84\"),new pi(\"http://www.opengis.net/gml/srs/epsg.xml#4326\",\"neu\"),new pi(\"urn:x-ogc:def:crs:EPSG:4326\",\"neu\")];function X(b){b=b?b:{};var c=Wa({},b);delete c.preload;delete c.useInterimTilesOnError;Gg.call(this,c);this.set(\"preload\",void 0!==b.preload?b.preload:0);this.set(\"useInterimTilesOnError\",void 0!==b.useInterimTilesOnError?b.useInterimTilesOnError:!0)}M(X,Gg);function ti(b){return b.get(\"useInterimTilesOnError\")};var ui=[0,0,0,1],vi=[],wi=[0,0,0,1];function xi(b,c,d,e){0!==c&&(b.translate(d,e),b.rotate(c),b.translate(-d,-e))};function yi(b){b=b||{};this.a=void 0!==b.color?b.color:null;this.b=void 0}yi.prototype.ga=function(){return this.a};function zi(){this.b=-1};function Ai(){this.b=-1;this.b=64;this.a=Array(4);this.g=Array(this.b);this.c=this.f=0;this.a[0]=1732584193;this.a[1]=4023233417;this.a[2]=2562383102;this.a[3]=271733878;this.c=this.f=0}M(Ai,zi);\nfunction Bi(b,c,d){d||(d=0);var e=Array(16);if(da(c))for(var f=0;16>f;++f)e[f]=c.charCodeAt(d++)|c.charCodeAt(d++)<<8|c.charCodeAt(d++)<<16|c.charCodeAt(d++)<<24;else for(f=0;16>f;++f)e[f]=c[d++]|c[d++]<<8|c[d++]<<16|c[d++]<<24;c=b.a[0];d=b.a[1];var f=b.a[2],g=b.a[3],h=0,h=c+(g^d&(f^g))+e[0]+3614090360&4294967295;c=d+(h<<7&4294967295|h>>>25);h=g+(f^c&(d^f))+e[1]+3905402710&4294967295;g=c+(h<<12&4294967295|h>>>20);h=f+(d^g&(c^d))+e[2]+606105819&4294967295;f=g+(h<<17&4294967295|h>>>15);h=d+(c^f&(g^\nc))+e[3]+3250441966&4294967295;d=f+(h<<22&4294967295|h>>>10);h=c+(g^d&(f^g))+e[4]+4118548399&4294967295;c=d+(h<<7&4294967295|h>>>25);h=g+(f^c&(d^f))+e[5]+1200080426&4294967295;g=c+(h<<12&4294967295|h>>>20);h=f+(d^g&(c^d))+e[6]+2821735955&4294967295;f=g+(h<<17&4294967295|h>>>15);h=d+(c^f&(g^c))+e[7]+4249261313&4294967295;d=f+(h<<22&4294967295|h>>>10);h=c+(g^d&(f^g))+e[8]+1770035416&4294967295;c=d+(h<<7&4294967295|h>>>25);h=g+(f^c&(d^f))+e[9]+2336552879&4294967295;g=c+(h<<12&4294967295|h>>>20);h=f+\n(d^g&(c^d))+e[10]+4294925233&4294967295;f=g+(h<<17&4294967295|h>>>15);h=d+(c^f&(g^c))+e[11]+2304563134&4294967295;d=f+(h<<22&4294967295|h>>>10);h=c+(g^d&(f^g))+e[12]+1804603682&4294967295;c=d+(h<<7&4294967295|h>>>25);h=g+(f^c&(d^f))+e[13]+4254626195&4294967295;g=c+(h<<12&4294967295|h>>>20);h=f+(d^g&(c^d))+e[14]+2792965006&4294967295;f=g+(h<<17&4294967295|h>>>15);h=d+(c^f&(g^c))+e[15]+1236535329&4294967295;d=f+(h<<22&4294967295|h>>>10);h=c+(f^g&(d^f))+e[1]+4129170786&4294967295;c=d+(h<<5&4294967295|\nh>>>27);h=g+(d^f&(c^d))+e[6]+3225465664&4294967295;g=c+(h<<9&4294967295|h>>>23);h=f+(c^d&(g^c))+e[11]+643717713&4294967295;f=g+(h<<14&4294967295|h>>>18);h=d+(g^c&(f^g))+e[0]+3921069994&4294967295;d=f+(h<<20&4294967295|h>>>12);h=c+(f^g&(d^f))+e[5]+3593408605&4294967295;c=d+(h<<5&4294967295|h>>>27);h=g+(d^f&(c^d))+e[10]+38016083&4294967295;g=c+(h<<9&4294967295|h>>>23);h=f+(c^d&(g^c))+e[15]+3634488961&4294967295;f=g+(h<<14&4294967295|h>>>18);h=d+(g^c&(f^g))+e[4]+3889429448&4294967295;d=f+(h<<20&4294967295|\nh>>>12);h=c+(f^g&(d^f))+e[9]+568446438&4294967295;c=d+(h<<5&4294967295|h>>>27);h=g+(d^f&(c^d))+e[14]+3275163606&4294967295;g=c+(h<<9&4294967295|h>>>23);h=f+(c^d&(g^c))+e[3]+4107603335&4294967295;f=g+(h<<14&4294967295|h>>>18);h=d+(g^c&(f^g))+e[8]+1163531501&4294967295;d=f+(h<<20&4294967295|h>>>12);h=c+(f^g&(d^f))+e[13]+2850285829&4294967295;c=d+(h<<5&4294967295|h>>>27);h=g+(d^f&(c^d))+e[2]+4243563512&4294967295;g=c+(h<<9&4294967295|h>>>23);h=f+(c^d&(g^c))+e[7]+1735328473&4294967295;f=g+(h<<14&4294967295|\nh>>>18);h=d+(g^c&(f^g))+e[12]+2368359562&4294967295;d=f+(h<<20&4294967295|h>>>12);h=c+(d^f^g)+e[5]+4294588738&4294967295;c=d+(h<<4&4294967295|h>>>28);h=g+(c^d^f)+e[8]+2272392833&4294967295;g=c+(h<<11&4294967295|h>>>21);h=f+(g^c^d)+e[11]+1839030562&4294967295;f=g+(h<<16&4294967295|h>>>16);h=d+(f^g^c)+e[14]+4259657740&4294967295;d=f+(h<<23&4294967295|h>>>9);h=c+(d^f^g)+e[1]+2763975236&4294967295;c=d+(h<<4&4294967295|h>>>28);h=g+(c^d^f)+e[4]+1272893353&4294967295;g=c+(h<<11&4294967295|h>>>21);h=f+(g^\nc^d)+e[7]+4139469664&4294967295;f=g+(h<<16&4294967295|h>>>16);h=d+(f^g^c)+e[10]+3200236656&4294967295;d=f+(h<<23&4294967295|h>>>9);h=c+(d^f^g)+e[13]+681279174&4294967295;c=d+(h<<4&4294967295|h>>>28);h=g+(c^d^f)+e[0]+3936430074&4294967295;g=c+(h<<11&4294967295|h>>>21);h=f+(g^c^d)+e[3]+3572445317&4294967295;f=g+(h<<16&4294967295|h>>>16);h=d+(f^g^c)+e[6]+76029189&4294967295;d=f+(h<<23&4294967295|h>>>9);h=c+(d^f^g)+e[9]+3654602809&4294967295;c=d+(h<<4&4294967295|h>>>28);h=g+(c^d^f)+e[12]+3873151461&4294967295;\ng=c+(h<<11&4294967295|h>>>21);h=f+(g^c^d)+e[15]+530742520&4294967295;f=g+(h<<16&4294967295|h>>>16);h=d+(f^g^c)+e[2]+3299628645&4294967295;d=f+(h<<23&4294967295|h>>>9);h=c+(f^(d|~g))+e[0]+4096336452&4294967295;c=d+(h<<6&4294967295|h>>>26);h=g+(d^(c|~f))+e[7]+1126891415&4294967295;g=c+(h<<10&4294967295|h>>>22);h=f+(c^(g|~d))+e[14]+2878612391&4294967295;f=g+(h<<15&4294967295|h>>>17);h=d+(g^(f|~c))+e[5]+4237533241&4294967295;d=f+(h<<21&4294967295|h>>>11);h=c+(f^(d|~g))+e[12]+1700485571&4294967295;c=d+\n(h<<6&4294967295|h>>>26);h=g+(d^(c|~f))+e[3]+2399980690&4294967295;g=c+(h<<10&4294967295|h>>>22);h=f+(c^(g|~d))+e[10]+4293915773&4294967295;f=g+(h<<15&4294967295|h>>>17);h=d+(g^(f|~c))+e[1]+2240044497&4294967295;d=f+(h<<21&4294967295|h>>>11);h=c+(f^(d|~g))+e[8]+1873313359&4294967295;c=d+(h<<6&4294967295|h>>>26);h=g+(d^(c|~f))+e[15]+4264355552&4294967295;g=c+(h<<10&4294967295|h>>>22);h=f+(c^(g|~d))+e[6]+2734768916&4294967295;f=g+(h<<15&4294967295|h>>>17);h=d+(g^(f|~c))+e[13]+1309151649&4294967295;\nd=f+(h<<21&4294967295|h>>>11);h=c+(f^(d|~g))+e[4]+4149444226&4294967295;c=d+(h<<6&4294967295|h>>>26);h=g+(d^(c|~f))+e[11]+3174756917&4294967295;g=c+(h<<10&4294967295|h>>>22);h=f+(c^(g|~d))+e[2]+718787259&4294967295;f=g+(h<<15&4294967295|h>>>17);h=d+(g^(f|~c))+e[9]+3951481745&4294967295;b.a[0]=b.a[0]+c&4294967295;b.a[1]=b.a[1]+(f+(h<<21&4294967295|h>>>11))&4294967295;b.a[2]=b.a[2]+f&4294967295;b.a[3]=b.a[3]+g&4294967295}\nfunction Ci(b,c){var d;void 0===d&&(d=c.length);for(var e=d-b.b,f=b.g,g=b.f,h=0;h<d;){if(0==g)for(;h<=e;)Bi(b,c,h),h+=b.b;if(da(c))for(;h<d;){if(f[g++]=c.charCodeAt(h++),g==b.b){Bi(b,f);g=0;break}}else for(;h<d;)if(f[g++]=c[h++],g==b.b){Bi(b,f);g=0;break}}b.f=g;b.c+=d};function Di(b){b=b||{};this.f=void 0!==b.color?b.color:null;this.Da=b.lineCap;this.a=void 0!==b.lineDash?b.lineDash:null;this.Ea=b.lineJoin;this.Fa=b.miterLimit;this.c=b.width;this.b=void 0}Di.prototype.ga=function(){return this.f};Di.prototype.getLineDash=function(){return this.a};Di.prototype.ha=function(){return this.c};function Ei(b){b=b||{};this.h=this.a=this.g=null;this.f=void 0!==b.fill?b.fill:null;this.b=void 0!==b.stroke?b.stroke:null;this.c=b.radius;this.o=[0,0];this.j=this.s=this.A=null;var c=b.atlasManager,d,e=null,f,g=0;this.b&&(f=vd(this.b.ga()),g=this.b.ha(),void 0===g&&(g=1),e=this.b.getLineDash(),Ef||(e=null));var h=2*(this.c+g)+1;f={strokeStyle:f,Wc:g,size:h,lineDash:e};if(void 0===c)this.a=document.createElement(\"CANVAS\"),this.a.height=h,this.a.width=h,d=h=this.a.width,c=this.a.getContext(\"2d\"),this.tc(f,\nc,0,0),this.f?this.h=this.a:(c=this.h=document.createElement(\"CANVAS\"),c.height=f.size,c.width=f.size,c=c.getContext(\"2d\"),this.oc(f,c,0,0));else{h=Math.round(h);(e=!this.f)&&(d=this.oc.bind(this,f));if(this.b){g=this.b;if(void 0===g.b){var k=\"s\"+(g.f?vd(g.f):\"-\")+\",\"+(void 0!==g.Da?g.Da.toString():\"-\")+\",\"+(g.a?g.a.toString():\"-\")+\",\"+(void 0!==g.Ea?g.Ea:\"-\")+\",\"+(void 0!==g.Fa?g.Fa.toString():\"-\")+\",\"+(void 0!==g.c?g.c.toString():\"-\"),l=new Ai;Ci(l,k);var m=Array((56>l.f?l.b:2*l.b)-l.f);m[0]=128;\nfor(k=1;k<m.length-8;++k)m[k]=0;for(var n=8*l.c,k=m.length-8;k<m.length;++k)m[k]=n&255,n/=256;Ci(l,m);m=Array(16);for(k=n=0;4>k;++k)for(var q=0;32>q;q+=8)m[n++]=l.a[k]>>>q&255;if(8192>=m.length)l=String.fromCharCode.apply(null,m);else for(l=\"\",k=0;k<m.length;k+=8192)l+=String.fromCharCode.apply(null,rd(m,k,k+8192));g.b=l}g=g.b}else g=\"-\";this.f?(l=this.f,void 0===l.b&&(l.b=l.a instanceof CanvasPattern||l.a instanceof CanvasGradient?I(l.a).toString():\"f\"+(l.a?vd(l.a):\"-\")),l=l.b):l=\"-\";this.g&&g==\nthis.g[1]&&l==this.g[2]&&this.c==this.g[3]||(this.g=[\"c\"+g+l+(void 0!==this.c?this.c.toString():\"-\"),g,l,this.c]);f=c.add(this.g[0],h,h,this.tc.bind(this,f),d);this.a=f.image;this.o=[f.offsetX,f.offsetY];d=f.image.width;e?this.h=f.Ye:this.h=this.a}this.A=[h/2,h/2];this.s=[h,h];this.j=[d,d];Ug.call(this,{opacity:1,rotateWithView:!1,rotation:0,scale:1,snapToPixel:void 0!==b.snapToPixel?b.snapToPixel:!0})}M(Ei,Ug);p=Ei.prototype;p.jb=function(){return this.A};p.Ka=function(){return this.f};p.Xb=function(){return this.h};\np.T=function(){return this.a};p.rb=function(){return 2};p.wc=function(){return this.j};p.ka=function(){return this.o};p.Qa=function(){return this.s};p.va=function(){return this.b};p.Bc=pa;p.load=pa;p.Xc=pa;p.tc=function(b,c,d,e){c.setTransform(1,0,0,1,0,0);c.translate(d,e);c.beginPath();c.arc(b.size/2,b.size/2,this.c,0,2*Math.PI,!0);this.f&&(c.fillStyle=yd(this.f.ga()),c.fill());this.b&&(c.strokeStyle=b.strokeStyle,c.lineWidth=b.Wc,b.lineDash&&c.setLineDash(b.lineDash),c.stroke());c.closePath()};\np.oc=function(b,c,d,e){c.setTransform(1,0,0,1,0,0);c.translate(d,e);c.beginPath();c.arc(b.size/2,b.size/2,this.c,0,2*Math.PI,!0);c.fillStyle=vd(ui);c.fill();this.b&&(c.strokeStyle=b.strokeStyle,c.lineWidth=b.Wc,b.lineDash&&c.setLineDash(b.lineDash),c.stroke());c.closePath()};function Fi(b){b=b||{};this.f=null;this.b=Gi;void 0!==b.geometry&&Hi(this,b.geometry);this.c=void 0!==b.fill?b.fill:null;this.g=void 0!==b.image?b.image:null;this.h=void 0!==b.stroke?b.stroke:null;this.sa=void 0!==b.text?b.text:null;this.a=b.zIndex}Fi.prototype.M=function(){return this.f};Fi.prototype.Ka=function(){return this.c};Fi.prototype.T=function(){return this.g};Fi.prototype.va=function(){return this.h};\nfunction Hi(b,c){ga(c)?b.b=c:\"string\"===typeof c?b.b=function(b){return b.get(c)}:c?void 0!==c&&(b.b=function(){return c}):b.b=Gi;b.f=c}function Ii(b){if(!ga(b)){var c;c=Array.isArray(b)?b:[b];b=function(){return c}}return b}var Ji=null;function Ki(){if(!Ji){var b=new yi({color:\"rgba(255,255,255,0.4)\"}),c=new Di({color:\"#3399CC\",width:1.25});Ji=[new Fi({image:new Ei({fill:b,stroke:c,radius:5}),fill:b,stroke:c})]}return Ji}\nfunction Li(){var b={},c=[255,255,255,1],d=[0,153,255,1];b.Polygon=[new Fi({fill:new yi({color:[255,255,255,.5]})})];b.MultiPolygon=b.Polygon;b.LineString=[new Fi({stroke:new Di({color:c,width:5})}),new Fi({stroke:new Di({color:d,width:3})})];b.MultiLineString=b.LineString;b.Circle=b.Polygon.concat(b.LineString);b.Point=[new Fi({image:new Ei({radius:6,fill:new yi({color:d}),stroke:new Di({color:c,width:1.5})}),zIndex:Infinity})];b.MultiPoint=b.Point;b.GeometryCollection=b.Polygon.concat(b.LineString,\nb.Point);return b}function Gi(b){return b.M()};function Y(b){b=b?b:{};var c=Wa({},b);delete c.style;delete c.renderBuffer;delete c.updateWhileAnimating;delete c.updateWhileInteracting;Gg.call(this,c);this.a=void 0!==b.renderBuffer?b.renderBuffer:100;this.o=null;this.g=void 0;this.s(b.style);this.i=void 0!==b.updateWhileAnimating?b.updateWhileAnimating:!1;this.j=void 0!==b.updateWhileInteracting?b.updateWhileInteracting:!1}M(Y,Gg);Y.prototype.s=function(b){this.o=void 0!==b?b:Ki;this.g=null===b?void 0:Ii(this.o);this.v()};function Mi(b,c,d,e,f){this.c=b;this.u=c;this.l=d;this.w=e;this.Ja=f;this.g=this.a=this.b=this.Y=this.ba=this.S=null;this.aa=this.ja=this.o=this.D=this.K=this.B=0;this.ea=!1;this.h=this.na=0;this.za=!1;this.G=0;this.f=\"\";this.j=this.H=this.Aa=this.pa=0;this.P=this.A=this.i=null;this.s=[];this.Ba=zb()}M(Mi,Eg);\nfunction Ni(b,c,d){if(b.g){c=Ac(c,0,d,2,b.w,b.s);d=b.c;var e=b.Ba,f=d.globalAlpha;1!=b.o&&(d.globalAlpha=f*b.o);var g=b.na;b.ea&&(g+=b.Ja);var h,k;h=0;for(k=c.length;h<k;h+=2){var l=c[h]-b.B,m=c[h+1]-b.K;b.za&&(l=Math.round(l),m=Math.round(m));if(0!==g||1!=b.h){var n=l+b.B,q=m+b.K;Ig(e,n,q,b.h,b.h,g,-n,-q);d.setTransform(e[0],e[1],e[4],e[5],e[12],e[13])}d.drawImage(b.g,b.ja,b.aa,b.G,b.D,l,m,b.G,b.D)}0===g&&1==b.h||d.setTransform(1,0,0,1,0,0);1!=b.o&&(d.globalAlpha=f)}}\nfunction Oi(b,c,d,e){var f=0;if(b.P&&\"\"!==b.f){b.i&&Pi(b,b.i);b.A&&Qi(b,b.A);var g=b.P,h=b.c,k=b.Y;k?(k.font!=g.font&&(k.font=h.font=g.font),k.textAlign!=g.textAlign&&(k.textAlign=h.textAlign=g.textAlign),k.textBaseline!=g.textBaseline&&(k.textBaseline=h.textBaseline=g.textBaseline)):(h.font=g.font,h.textAlign=g.textAlign,h.textBaseline=g.textBaseline,b.Y={font:g.font,textAlign:g.textAlign,textBaseline:g.textBaseline});c=Ac(c,f,d,e,b.w,b.s);for(g=b.c;f<d;f+=e){h=c[f]+b.pa;k=c[f+1]+b.Aa;if(0!==b.H||\n1!=b.j){var l=Ig(b.Ba,h,k,b.j,b.j,b.H,-h,-k);g.setTransform(l[0],l[1],l[4],l[5],l[12],l[13])}b.A&&g.strokeText(b.f,h,k);b.i&&g.fillText(b.f,h,k)}0===b.H&&1==b.j||g.setTransform(1,0,0,1,0,0)}}function Ri(b,c,d,e,f,g){var h=b.c;b=Ac(c,d,e,f,b.w,b.s);h.moveTo(b[0],b[1]);c=b.length;g&&(c-=2);for(d=2;d<c;d+=2)h.lineTo(b[d],b[d+1]);g&&h.closePath();return e}function Si(b,c,d,e,f){var g,h;g=0;for(h=e.length;g<h;++g)d=Ri(b,c,d,e[g],f,!0);return d}p=Mi.prototype;\np.nc=function(b){if(ac(this.l,b.C())){if(this.b||this.a){this.b&&Pi(this,this.b);this.a&&Qi(this,this.a);var c;c=this.w;var d=this.s,e=b.a;c=e?Ac(e,0,e.length,b.b,c,d):null;d=c[2]-c[0];e=c[3]-c[1];d=Math.sqrt(d*d+e*e);e=this.c;e.beginPath();e.arc(c[0],c[1],d,0,2*Math.PI);this.b&&e.fill();this.a&&e.stroke()}\"\"!==this.f&&Oi(this,b.a.slice(0,b.b),2,2)}};p.$a=function(b){var c=b.a;b=b.b;this.g&&Ni(this,c,c.length);\"\"!==this.f&&Oi(this,c,c.length,b)};\np.Za=function(b){var c=b.a;b=b.b;this.g&&Ni(this,c,c.length);\"\"!==this.f&&Oi(this,c,c.length,b)};p.pc=function(b){if(ac(this.l,b.C())){if(this.a){Qi(this,this.a);var c=this.c,d=b.a;c.beginPath();Ri(this,d,0,d.length,b.b,!1);c.stroke()}\"\"!==this.f&&(b=Ti(b),Oi(this,b,2,2))}};\np.qc=function(b){var c=b.C();if(ac(this.l,c)){if(this.a){Qi(this,this.a);var c=this.c,d=b.a,e=0,f=b.ab(),g=b.b;c.beginPath();var h,k;h=0;for(k=f.length;h<k;++h)e=Ri(this,d,e,f[h],g,!1);c.stroke()}\"\"!==this.f&&(b=Ui(b),Oi(this,b,b.length,2))}};p.sc=function(b){if(ac(this.l,b.C())){if(this.a||this.b){this.b&&Pi(this,this.b);this.a&&Qi(this,this.a);var c=this.c;c.beginPath();Si(this,Vc(b),0,b.ab(),b.b);this.b&&c.fill();this.a&&c.stroke()}\"\"!==this.f&&(b=Wc(b),Oi(this,b,2,2))}};\np.rc=function(b){if(ac(this.l,b.C())){if(this.a||this.b){this.b&&Pi(this,this.b);this.a&&Qi(this,this.a);var c=this.c,d=Vi(b),e=0,f=b.c,g=b.b,h,k;h=0;for(k=f.length;h<k;++h){var l=f[h];c.beginPath();e=Si(this,d,e,l,g);this.b&&c.fill();this.a&&c.stroke()}}\"\"!==this.f&&(b=Wi(b),Oi(this,b,b.length,2))}};function Pi(b,c){var d=b.c,e=b.S;e?e.fillStyle!=c.fillStyle&&(e.fillStyle=d.fillStyle=c.fillStyle):(d.fillStyle=c.fillStyle,b.S={fillStyle:c.fillStyle})}\nfunction Qi(b,c){var d=b.c,e=b.ba;e?(e.lineCap!=c.lineCap&&(e.lineCap=d.lineCap=c.lineCap),Ef&&!Ma(e.lineDash,c.lineDash)&&d.setLineDash(e.lineDash=c.lineDash),e.lineJoin!=c.lineJoin&&(e.lineJoin=d.lineJoin=c.lineJoin),e.lineWidth!=c.lineWidth&&(e.lineWidth=d.lineWidth=c.lineWidth),e.miterLimit!=c.miterLimit&&(e.miterLimit=d.miterLimit=c.miterLimit),e.strokeStyle!=c.strokeStyle&&(e.strokeStyle=d.strokeStyle=c.strokeStyle)):(d.lineCap=c.lineCap,Ef&&d.setLineDash(c.lineDash),d.lineJoin=c.lineJoin,d.lineWidth=\nc.lineWidth,d.miterLimit=c.miterLimit,d.strokeStyle=c.strokeStyle,b.ba={lineCap:c.lineCap,lineDash:c.lineDash,lineJoin:c.lineJoin,lineWidth:c.lineWidth,miterLimit:c.miterLimit,strokeStyle:c.strokeStyle})}\np.Ga=function(b,c){if(b){var d=b.ga();this.b={fillStyle:yd(d?d:ui)}}else this.b=null;if(c){var d=c.ga(),e=c.Da,f=c.getLineDash(),g=c.Ea,h=c.ha(),k=c.Fa;this.a={lineCap:void 0!==e?e:\"round\",lineDash:f?f:vi,lineJoin:void 0!==g?g:\"round\",lineWidth:this.u*(void 0!==h?h:1),miterLimit:void 0!==k?k:10,strokeStyle:vd(d?d:wi)}}else this.a=null};\np.Ha=function(b){if(b){var c=b.jb(),d=b.T(1),e=b.ka(),f=b.Qa();this.B=c[0];this.K=c[1];this.D=f[1];this.g=d;this.o=b.l;this.ja=e[0];this.aa=e[1];this.ea=b.i;this.na=b.Z();this.h=b.gb;this.za=b.u;this.G=f[0]}else this.g=null};\np.xa=function(b){if(b){var c=b.Ka();c?(c=c.ga(),this.i={fillStyle:yd(c?c:ui)}):this.i=null;var d=b.va();if(d){var c=d.ga(),e=d.Da,f=d.getLineDash(),g=d.Ea,h=d.ha(),d=d.Fa;this.A={lineCap:void 0!==e?e:\"round\",lineDash:f?f:vi,lineJoin:void 0!==g?g:\"round\",lineWidth:void 0!==h?h:1,miterLimit:void 0!==d?d:10,strokeStyle:vd(c?c:wi)}}else this.A=null;var c=b.qd(),e=b.rd(),f=b.sd(),g=b.Z(),h=b.gb,d=b.sa,k=b.td();b=b.ud();this.P={font:void 0!==c?c:\"10px sans-serif\",textAlign:void 0!==k?k:\"center\",textBaseline:void 0!==\nb?b:\"middle\"};this.f=void 0!==d?d:\"\";this.pa=void 0!==e?this.u*e:0;this.Aa=void 0!==f?this.u*f:0;this.H=void 0!==g?g:0;this.j=this.u*(void 0!==h?h:1)}else this.f=\"\"};function Xi(b){Lg.call(this,b);this.K=zb()}M(Xi,Lg);\nXi.prototype.g=function(b,c,d){Yi(this,\"precompose\",d,b,void 0);var e=this.T();if(e){var f=c.extent,g=void 0!==f;if(g){var h=b.pixelRatio,k=b.size[0]*h,l=b.size[1]*h,m=b.viewState.rotation,n=bc(f),q=[f[2],f[3]],r=[f[2],f[1]],f=Xb(f);Kg(b.coordinateToPixelMatrix,n,n);Kg(b.coordinateToPixelMatrix,q,q);Kg(b.coordinateToPixelMatrix,r,r);Kg(b.coordinateToPixelMatrix,f,f);d.save();xi(d,-m,k/2,l/2);d.beginPath();d.moveTo(n[0]*h,n[1]*h);d.lineTo(q[0]*h,q[1]*h);d.lineTo(r[0]*h,r[1]*h);d.lineTo(f[0]*h,f[1]*\nh);d.clip();xi(d,m,k/2,l/2)}h=this.D;k=d.globalAlpha;d.globalAlpha=c.opacity;d.drawImage(e,0,0,+e.width,+e.height,Math.round(h[12]),Math.round(h[13]),Math.round(e.width*h[0]),Math.round(e.height*h[5]));d.globalAlpha=k;g&&d.restore()}Yi(this,\"postcompose\",d,b,void 0)};\nfunction Yi(b,c,d,e,f){var g=b.a;if(nb(g,c)){var h=e.size[0]*e.pixelRatio,k=e.size[1]*e.pixelRatio,l=e.viewState.rotation;xi(d,-l,h/2,k/2);b=void 0!==f?f:Zi(b,e,0);b=new Mi(d,e.pixelRatio,e.extent,b,e.viewState.rotation);S(g,new Fg(c,g,b,e,d,null));xi(d,l,h/2,k/2)}}function Zi(b,c,d){var e=c.viewState,f=c.pixelRatio;return Ig(b.K,f*c.size[0]/2,f*c.size[1]/2,f/e.resolution,-f/e.resolution,-e.rotation,-e.center[0]+d,-e.center[1])};var $i=[\"Polygon\",\"LineString\",\"Image\",\"Text\"];function aj(b,c,d){this.aa=b;this.P=c;this.c=null;this.g=0;this.resolution=d;this.D=this.K=null;this.b=[];this.coordinates=[];this.ba=zb();this.a=[];this.S=[];this.Y=zb();this.ja=zb()}M(aj,Eg);\nfunction bj(b,c,d,e,f,g){var h=b.coordinates.length,k=b.Kb(),l=[c[d],c[d+1]],m=[NaN,NaN],n=!0,q,r,u;for(q=d+f;q<e;q+=f){m[0]=c[q];m[1]=c[q+1];u=k[1];var w=k[2],y=k[3],z=m[0],D=m[1],t=0;z<k[0]?t=t|16:z>w&&(t=t|4);D<u?t|=8:D>y&&(t|=2);0===t&&(t=1);u=t;u!==r?(n&&(b.coordinates[h++]=l[0],b.coordinates[h++]=l[1]),b.coordinates[h++]=m[0],b.coordinates[h++]=m[1],n=!1):1===u?(b.coordinates[h++]=m[0],b.coordinates[h++]=m[1],n=!1):n=!0;l[0]=m[0];l[1]=m[1];r=u}q===d+f&&(b.coordinates[h++]=l[0],b.coordinates[h++]=\nl[1]);g&&(b.coordinates[h++]=c[d],b.coordinates[h++]=c[d+1]);return h}function cj(b,c){b.K=[0,c,0];b.b.push(b.K);b.D=[0,c,0];b.a.push(b.D)}\nfunction dj(b,c,d,e,f,g,h,k,l){var m;Jg(e,b.ba)?m=b.S:(m=Ac(b.coordinates,0,b.coordinates.length,2,e,b.S),Cb(b.ba,e));e=!$a(g);var n=0,q=h.length,r=0,u,w=b.Y;b=b.ja;for(var y,z,D,t;n<q;){var v=h[n],B,E,C,G;switch(v[0]){case 0:r=v[1];e&&g[I(r).toString()]||!r.M()?n=v[2]:void 0===l||ac(l,r.M().C())?++n:n=v[2];break;case 1:c.beginPath();++n;break;case 2:r=v[1];u=m[r];v=m[r+1];D=m[r+2]-u;r=m[r+3]-v;c.arc(u,v,Math.sqrt(D*D+r*r),0,2*Math.PI,!0);++n;break;case 3:c.closePath();++n;break;case 4:r=v[1];u=v[2];\nB=v[3];C=v[4]*d;var J=v[5]*d,A=v[6];E=v[7];var H=v[8],O=v[9];D=v[11];t=v[12];var P=v[13],L=v[14];for(v[10]&&(D+=f);r<u;r+=2){v=m[r]-C;G=m[r+1]-J;P&&(v=Math.round(v),G=Math.round(G));if(1!=t||0!==D){var K=v+C,fa=G+J;Ig(w,K,fa,t,t,D,-K,-fa);c.transform(w[0],w[1],w[4],w[5],w[12],w[13])}K=c.globalAlpha;1!=E&&(c.globalAlpha=K*E);var fa=L+H>B.width?B.width-H:L,ra=A+O>B.height?B.height-O:A;c.drawImage(B,H,O,fa,ra,v,G,fa*d,ra*d);1!=E&&(c.globalAlpha=K);if(1!=t||0!==D)Eb(w,b),c.transform(b[0],b[1],b[4],b[5],\nb[12],b[13])}++n;break;case 5:r=v[1];u=v[2];C=v[3];J=v[4]*d;A=v[5]*d;D=v[6];t=v[7]*d;B=v[8];for(E=v[9];r<u;r+=2){v=m[r]+J;G=m[r+1]+A;if(1!=t||0!==D)Ig(w,v,G,t,t,D,-v,-G),c.transform(w[0],w[1],w[4],w[5],w[12],w[13]);H=C.split(\"\\n\");O=H.length;1<O?(P=Math.round(1.5*c.measureText(\"M\").width),G-=(O-1)/2*P):P=0;for(L=0;L<O;L++)K=H[L],E&&c.strokeText(K,v,G),B&&c.fillText(K,v,G),G+=P;if(1!=t||0!==D)Eb(w,b),c.transform(b[0],b[1],b[4],b[5],b[12],b[13])}++n;break;case 6:if(void 0!==k&&(r=v[1],r=k(r)))return r;\n++n;break;case 7:c.fill();++n;break;case 8:r=v[1];u=v[2];v=m[r];G=m[r+1];D=v+.5|0;t=G+.5|0;if(D!==y||t!==z)c.moveTo(v,G),y=D,z=t;for(r+=2;r<u;r+=2)if(v=m[r],G=m[r+1],D=v+.5|0,t=G+.5|0,D!==y||t!==z)c.lineTo(v,G),y=D,z=t;++n;break;case 9:c.fillStyle=v[1];++n;break;case 10:y=void 0!==v[7]?v[7]:!0;z=v[2];c.strokeStyle=v[1];c.lineWidth=y?z*d:z;c.lineCap=v[3];c.lineJoin=v[4];c.miterLimit=v[5];Ef&&c.setLineDash(v[6]);z=y=NaN;++n;break;case 11:c.font=v[1];c.textAlign=v[2];c.textBaseline=v[3];++n;break;case 12:c.stroke();\n++n;break;default:++n}}}function ej(b){var c=b.a;c.reverse();var d,e=c.length,f,g,h=-1;for(d=0;d<e;++d)if(f=c[d],g=f[0],6==g)h=d;else if(0==g){f[2]=d;f=b.a;for(g=d;h<g;){var k=f[h];f[h]=f[g];f[g]=k;++h;--g}h=-1}}function fj(b,c){b.K[2]=b.b.length;b.K=null;b.D[2]=b.a.length;b.D=null;var d=[6,c];b.b.push(d);b.a.push(d)}aj.prototype.qb=pa;aj.prototype.Kb=function(){return this.P};\nfunction gj(b,c,d){aj.call(this,b,c,d);this.i=this.G=null;this.B=this.w=this.H=this.u=this.s=this.o=this.A=this.j=this.l=this.h=this.f=void 0}M(gj,aj);gj.prototype.$a=function(b,c){if(this.i){cj(this,c);var d=b.a,e=this.coordinates.length,d=bj(this,d,0,d.length,b.b,!1);this.b.push([4,e,d,this.i,this.f,this.h,this.l,this.j,this.A,this.o,this.s,this.u,this.H,this.w,this.B]);this.a.push([4,e,d,this.G,this.f,this.h,this.l,this.j,this.A,this.o,this.s,this.u,this.H,this.w,this.B]);fj(this,c)}};\ngj.prototype.Za=function(b,c){if(this.i){cj(this,c);var d=b.a,e=this.coordinates.length,d=bj(this,d,0,d.length,b.b,!1);this.b.push([4,e,d,this.i,this.f,this.h,this.l,this.j,this.A,this.o,this.s,this.u,this.H,this.w,this.B]);this.a.push([4,e,d,this.G,this.f,this.h,this.l,this.j,this.A,this.o,this.s,this.u,this.H,this.w,this.B]);fj(this,c)}};gj.prototype.qb=function(){ej(this);this.h=this.f=void 0;this.i=this.G=null;this.B=this.w=this.u=this.s=this.o=this.A=this.j=this.H=this.l=void 0};\ngj.prototype.Ha=function(b){var c=b.jb(),d=b.Qa(),e=b.Xb(1),f=b.T(1),g=b.ka();this.f=c[0];this.h=c[1];this.G=e;this.i=f;this.l=d[1];this.j=b.l;this.A=g[0];this.o=g[1];this.s=b.i;this.u=b.Z();this.H=b.gb;this.w=b.u;this.B=d[0]};function hj(b,c,d){aj.call(this,b,c,d);this.f={Ya:void 0,Ta:void 0,Ua:null,Va:void 0,Wa:void 0,Xa:void 0,Sb:0,strokeStyle:void 0,lineCap:void 0,lineDash:null,lineJoin:void 0,lineWidth:void 0,miterLimit:void 0}}M(hj,aj);\nfunction ij(b,c,d,e,f){var g=b.coordinates.length;c=bj(b,c,d,e,f,!1);g=[8,g,c];b.b.push(g);b.a.push(g);return e}p=hj.prototype;p.Kb=function(){this.c||(this.c=Mb(this.P),0<this.g&&Lb(this.c,this.resolution*(this.g+1)/2,this.c));return this.c};\nfunction jj(b){var c=b.f,d=c.strokeStyle,e=c.lineCap,f=c.lineDash,g=c.lineJoin,h=c.lineWidth,k=c.miterLimit;c.Ya==d&&c.Ta==e&&Ma(c.Ua,f)&&c.Va==g&&c.Wa==h&&c.Xa==k||(c.Sb!=b.coordinates.length&&(b.b.push([12]),c.Sb=b.coordinates.length),b.b.push([10,d,h,e,g,k,f],[1]),c.Ya=d,c.Ta=e,c.Ua=f,c.Va=g,c.Wa=h,c.Xa=k)}\np.pc=function(b,c){var d=this.f,e=d.lineWidth;void 0!==d.strokeStyle&&void 0!==e&&(jj(this),cj(this,c),this.a.push([10,d.strokeStyle,d.lineWidth,d.lineCap,d.lineJoin,d.miterLimit,d.lineDash],[1]),d=b.a,ij(this,d,0,d.length,b.b),this.a.push([12]),fj(this,c))};\np.qc=function(b,c){var d=this.f,e=d.lineWidth;if(void 0!==d.strokeStyle&&void 0!==e){jj(this);cj(this,c);this.a.push([10,d.strokeStyle,d.lineWidth,d.lineCap,d.lineJoin,d.miterLimit,d.lineDash],[1]);var d=b.ab(),e=b.a,f=b.b,g=0,h,k;h=0;for(k=d.length;h<k;++h)g=ij(this,e,g,d[h],f);this.a.push([12]);fj(this,c)}};p.qb=function(){this.f.Sb!=this.coordinates.length&&this.b.push([12]);ej(this);this.f=null};\np.Ga=function(b,c){var d=c.ga();this.f.strokeStyle=vd(d?d:wi);d=c.Da;this.f.lineCap=void 0!==d?d:\"round\";d=c.getLineDash();this.f.lineDash=d?d:vi;d=c.Ea;this.f.lineJoin=void 0!==d?d:\"round\";d=c.ha();this.f.lineWidth=void 0!==d?d:1;d=c.Fa;this.f.miterLimit=void 0!==d?d:10;this.f.lineWidth>this.g&&(this.g=this.f.lineWidth,this.c=null)};\nfunction kj(b,c,d){aj.call(this,b,c,d);this.f={mc:void 0,Ya:void 0,Ta:void 0,Ua:null,Va:void 0,Wa:void 0,Xa:void 0,fillStyle:void 0,strokeStyle:void 0,lineCap:void 0,lineDash:null,lineJoin:void 0,lineWidth:void 0,miterLimit:void 0}}M(kj,aj);\nfunction lj(b,c,d,e,f){var g=b.f,h=[1];b.b.push(h);b.a.push(h);var k,h=0;for(k=e.length;h<k;++h){var l=e[h],m=b.coordinates.length;d=bj(b,c,d,l,f,!0);d=[8,m,d];m=[3];b.b.push(d,m);b.a.push(d,m);d=l}c=[7];b.a.push(c);void 0!==g.fillStyle&&b.b.push(c);void 0!==g.strokeStyle&&(g=[12],b.b.push(g),b.a.push(g));return d}p=kj.prototype;\np.nc=function(b,c){var d=this.f,e=d.strokeStyle;if(void 0!==d.fillStyle||void 0!==e){mj(this);cj(this,c);this.a.push([9,vd(ui)]);void 0!==d.strokeStyle&&this.a.push([10,d.strokeStyle,d.lineWidth,d.lineCap,d.lineJoin,d.miterLimit,d.lineDash]);var f=b.a,e=this.coordinates.length;bj(this,f,0,f.length,b.b,!1);f=[1];e=[2,e];this.b.push(f,e);this.a.push(f,e);e=[7];this.a.push(e);void 0!==d.fillStyle&&this.b.push(e);void 0!==d.strokeStyle&&(d=[12],this.b.push(d),this.a.push(d));fj(this,c)}};\np.sc=function(b,c){var d=this.f,e=d.strokeStyle;if(void 0!==d.fillStyle||void 0!==e)mj(this),cj(this,c),this.a.push([9,vd(ui)]),void 0!==d.strokeStyle&&this.a.push([10,d.strokeStyle,d.lineWidth,d.lineCap,d.lineJoin,d.miterLimit,d.lineDash]),d=b.ab(),e=Vc(b),lj(this,e,0,d,b.b),fj(this,c)};\np.rc=function(b,c){var d=this.f,e=d.strokeStyle;if(void 0!==d.fillStyle||void 0!==e){mj(this);cj(this,c);this.a.push([9,vd(ui)]);void 0!==d.strokeStyle&&this.a.push([10,d.strokeStyle,d.lineWidth,d.lineCap,d.lineJoin,d.miterLimit,d.lineDash]);var d=b.c,e=Vi(b),f=b.b,g=0,h,k;h=0;for(k=d.length;h<k;++h)g=lj(this,e,g,d[h],f);fj(this,c)}};p.qb=function(){ej(this);this.f=null;var b=this.aa;if(0!==b){var c=this.coordinates,d,e;d=0;for(e=c.length;d<e;++d)c[d]=b*Math.round(c[d]/b)}};\np.Kb=function(){this.c||(this.c=Mb(this.P),0<this.g&&Lb(this.c,this.resolution*(this.g+1)/2,this.c));return this.c};\np.Ga=function(b,c){var d=this.f;if(b){var e=b.ga();d.fillStyle=yd(e?e:ui)}else d.fillStyle=void 0;c?(e=c.ga(),d.strokeStyle=vd(e?e:wi),e=c.Da,d.lineCap=void 0!==e?e:\"round\",e=c.getLineDash(),d.lineDash=e?e.slice():vi,e=c.Ea,d.lineJoin=void 0!==e?e:\"round\",e=c.ha(),d.lineWidth=void 0!==e?e:1,e=c.Fa,d.miterLimit=void 0!==e?e:10,d.lineWidth>this.g&&(this.g=d.lineWidth,this.c=null)):(d.strokeStyle=void 0,d.lineCap=void 0,d.lineDash=null,d.lineJoin=void 0,d.lineWidth=void 0,d.miterLimit=void 0)};\nfunction mj(b){var c=b.f,d=c.fillStyle,e=c.strokeStyle,f=c.lineCap,g=c.lineDash,h=c.lineJoin,k=c.lineWidth,l=c.miterLimit;void 0!==d&&c.mc!=d&&(b.b.push([9,d]),c.mc=c.fillStyle);void 0===e||c.Ya==e&&c.Ta==f&&c.Ua==g&&c.Va==h&&c.Wa==k&&c.Xa==l||(b.b.push([10,e,k,f,h,l,g]),c.Ya=e,c.Ta=f,c.Ua=g,c.Va=h,c.Wa=k,c.Xa=l)}function nj(b,c,d){aj.call(this,b,c,d);this.w=this.H=this.u=null;this.i=\"\";this.s=this.o=this.A=this.j=0;this.l=this.h=this.f=null}M(nj,aj);\nfunction oj(b,c,d,e,f){if(\"\"!==b.i&&b.l&&(b.f||b.h)){if(b.f){var g=b.f,h=b.u;if(!h||h.fillStyle!=g.fillStyle){var k=[9,g.fillStyle];b.b.push(k);b.a.push(k);h?h.fillStyle=g.fillStyle:b.u={fillStyle:g.fillStyle}}}b.h&&(g=b.h,h=b.H,h&&h.lineCap==g.lineCap&&h.lineDash==g.lineDash&&h.lineJoin==g.lineJoin&&h.lineWidth==g.lineWidth&&h.miterLimit==g.miterLimit&&h.strokeStyle==g.strokeStyle||(k=[10,g.strokeStyle,g.lineWidth,g.lineCap,g.lineJoin,g.miterLimit,g.lineDash,!1],b.b.push(k),b.a.push(k),h?(h.lineCap=\ng.lineCap,h.lineDash=g.lineDash,h.lineJoin=g.lineJoin,h.lineWidth=g.lineWidth,h.miterLimit=g.miterLimit,h.strokeStyle=g.strokeStyle):b.H={lineCap:g.lineCap,lineDash:g.lineDash,lineJoin:g.lineJoin,lineWidth:g.lineWidth,miterLimit:g.miterLimit,strokeStyle:g.strokeStyle}));g=b.l;h=b.w;h&&h.font==g.font&&h.textAlign==g.textAlign&&h.textBaseline==g.textBaseline||(k=[11,g.font,g.textAlign,g.textBaseline],b.b.push(k),b.a.push(k),h?(h.font=g.font,h.textAlign=g.textAlign,h.textBaseline=g.textBaseline):b.w=\n{font:g.font,textAlign:g.textAlign,textBaseline:g.textBaseline});cj(b,f);g=b.coordinates.length;c=bj(b,c,0,d,e,!1);c=[5,g,c,b.i,b.j,b.A,b.o,b.s,!!b.f,!!b.h];b.b.push(c);b.a.push(c);fj(b,f)}}\nnj.prototype.xa=function(b){if(b){var c=b.Ka();c?(c=c.ga(),c=yd(c?c:ui),this.f?this.f.fillStyle=c:this.f={fillStyle:c}):this.f=null;var d=b.va();if(d){var c=d.ga(),e=d.Da,f=d.getLineDash(),g=d.Ea,h=d.ha(),d=d.Fa,e=void 0!==e?e:\"round\",f=f?f.slice():vi,g=void 0!==g?g:\"round\",h=void 0!==h?h:1,d=void 0!==d?d:10,c=vd(c?c:wi);if(this.h){var k=this.h;k.lineCap=e;k.lineDash=f;k.lineJoin=g;k.lineWidth=h;k.miterLimit=d;k.strokeStyle=c}else this.h={lineCap:e,lineDash:f,lineJoin:g,lineWidth:h,miterLimit:d,strokeStyle:c}}else this.h=\nnull;var l=b.qd(),c=b.rd(),e=b.sd(),f=b.Z(),h=b.gb,d=b.sa,g=b.td(),k=b.ud();b=void 0!==l?l:\"10px sans-serif\";g=void 0!==g?g:\"center\";k=void 0!==k?k:\"middle\";this.l?(l=this.l,l.font=b,l.textAlign=g,l.textBaseline=k):this.l={font:b,textAlign:g,textBaseline:k};this.i=void 0!==d?d:\"\";this.j=void 0!==c?c:0;this.A=void 0!==e?e:0;this.o=void 0!==f?f:0;this.s=void 0!==h?h:1}else this.i=\"\"};function pj(b,c,d,e){this.o=b;this.h=c;this.A=d;this.l=e;this.b={};this.i=rf(1,1);this.j=zb()}\nfunction qj(b){for(var c in b.b){var d=b.b[c],e;for(e in d)d[e].qb()}}pj.prototype.g=function(b,c,d,e,f){var g=this.j;Ig(g,.5,.5,1/c,-1/c,-d,-b[0],-b[1]);var h=this.i;h.clearRect(0,0,1,1);var k;void 0!==this.l&&(k=Jb(),Kb(k,b),Lb(k,c*this.l,k));return rj(this,h,g,d,e,function(b){if(0<h.getImageData(0,0,1,1).data[3]){if(b=f(b))return b;h.clearRect(0,0,1,1)}},k)};\npj.prototype.a=function(b,c){var d=void 0!==b?b.toString():\"0\",e=this.b[d];void 0===e&&(e={},this.b[d]=e);d=e[c];void 0===d&&(d=new sj[c](this.o,this.h,this.A),e[c]=d);return d};pj.prototype.c=function(){return $a(this.b)};\npj.prototype.f=function(b,c,d,e,f,g){var h=Object.keys(this.b).map(Number);h.sort(Ha);if(!1!==g){var k=this.h;g=k[0];var l=k[1],m=k[2],k=k[3];g=[g,l,g,k,m,k,m,l];Ac(g,0,8,2,d,g);b.save();b.beginPath();b.moveTo(g[0],g[1]);b.lineTo(g[2],g[3]);b.lineTo(g[4],g[5]);b.lineTo(g[6],g[7]);b.closePath();b.clip()}var n,q;g=0;for(l=h.length;g<l;++g)for(n=this.b[h[g].toString()],m=0,k=$i.length;m<k;++m)q=n[$i[m]],void 0!==q&&dj(q,b,c,d,e,f,q.b,void 0);b.restore()};\nfunction rj(b,c,d,e,f,g,h){var k=Object.keys(b.b).map(Number);k.sort(function(b,c){return c-b});var l,m,n,q,r;l=0;for(m=k.length;l<m;++l)for(q=b.b[k[l].toString()],n=$i.length-1;0<=n;--n)if(r=q[$i[n]],void 0!==r&&(r=dj(r,c,1,d,e,f,r.a,g,h)))return r}var sj={Image:gj,LineString:hj,Polygon:kj,Text:nj};function tj(b,c){return I(b)-I(c)}function uj(b,c){var d=.5*b/c;return d*d}function vj(b,c,d,e,f,g){var h=!1,k,l;if(k=d.T())l=k.rb(),2==l||3==l?k.Xc(f,g):(0==l&&k.load(),k.Bc(f,g),h=!0);if(f=(0,d.b)(c))e=f.Ob(e),(0,wj[e.U()])(b,e,d,c);return h}\nvar wj={Point:function(b,c,d,e){var f=d.T();if(f){if(2!=f.rb())return;var g=b.a(d.a,\"Image\");g.Ha(f);g.$a(c,e)}if(f=d.sa)b=b.a(d.a,\"Text\"),b.xa(f),oj(b,c.a,2,2,e)},LineString:function(b,c,d,e){var f=d.va();if(f){var g=b.a(d.a,\"LineString\");g.Ga(null,f);g.pc(c,e)}if(f=d.sa)b=b.a(d.a,\"Text\"),b.xa(f),oj(b,Ti(c),2,2,e)},Polygon:function(b,c,d,e){var f=d.Ka(),g=d.va();if(f||g){var h=b.a(d.a,\"Polygon\");h.Ga(f,g);h.sc(c,e)}if(f=d.sa)b=b.a(d.a,\"Text\"),b.xa(f),oj(b,Wc(c),2,2,e)},MultiPoint:function(b,c,d,\ne){var f=d.T();if(f){if(2!=f.rb())return;var g=b.a(d.a,\"Image\");g.Ha(f);g.Za(c,e)}if(f=d.sa)b=b.a(d.a,\"Text\"),b.xa(f),d=c.a,oj(b,d,d.length,c.b,e)},MultiLineString:function(b,c,d,e){var f=d.va();if(f){var g=b.a(d.a,\"LineString\");g.Ga(null,f);g.qc(c,e)}if(f=d.sa)b=b.a(d.a,\"Text\"),b.xa(f),c=Ui(c),oj(b,c,c.length,2,e)},MultiPolygon:function(b,c,d,e){var f=d.Ka(),g=d.va();if(g||f){var h=b.a(d.a,\"Polygon\");h.Ga(f,g);h.rc(c,e)}if(f=d.sa)b=b.a(d.a,\"Text\"),b.xa(f),c=Wi(c),oj(b,c,c.length,2,e)},GeometryCollection:function(b,\nc,d,e){c=c.a;var f,g;f=0;for(g=c.length;f<g;++f)(0,wj[c[f].U()])(b,c[f],d,e)},Circle:function(b,c,d,e){var f=d.Ka(),g=d.va();if(f||g){var h=b.a(d.a,\"Polygon\");h.Ga(f,g);h.nc(c,e)}if(f=d.sa)b=b.a(d.a,\"Text\"),b.xa(f),oj(b,c.a.slice(0,c.b),2,2,e)}};var xj=!((W(\"Chrome\")||W(\"CriOS\"))&&!W(\"Opera\")&&!W(\"OPR\")&&!W(\"Edge\"))||W(\"iPhone\")&&!W(\"iPod\")&&!W(\"iPad\")||W(\"iPad\")||W(\"iPod\");function yj(b,c,d,e){b=d-b;c=e-c;var f=Math.sqrt(b*b+c*c);return[Math.round(d+b/f),Math.round(e+c/f)]}\nfunction zj(b,c,d,e,f,g,h,k,l,m,n){var q=rf(Math.round(d*b),Math.round(d*c));if(0===l.length)return q.canvas;q.scale(d,d);var r=Jb();l.forEach(function(b){Sb(r,b.extent)});var u=rf(Math.round(d*Vb(r)/e),Math.round(d*Wb(r)/e)),w=d/e;l.forEach(function(b){u.drawImage(b.image,m,m,b.image.width-2*m,b.image.height-2*m,(b.extent[0]-r[0])*w,-(b.extent[3]-r[3])*w,Vb(b.extent)*w,Wb(b.extent)*w)});var y=bc(h);k.c.forEach(function(b){var c=b.source,f=b.target,h=c[1][0],k=c[1][1],l=c[2][0],m=c[2][1];b=(f[0][0]-\ny[0])/g;var w=-(f[0][1]-y[1])/g,n=(f[1][0]-y[0])/g,A=-(f[1][1]-y[1])/g,H=(f[2][0]-y[0])/g,O=-(f[2][1]-y[1])/g,f=c[0][0],c=c[0][1],h=h-f,k=k-c,l=l-f,m=m-c;a:{h=[[h,k,0,0,n-b],[l,m,0,0,H-b],[0,0,h,k,A-w],[0,0,l,m,O-w]];k=h.length;for(l=0;l<k;l++){for(var m=l,P=Math.abs(h[l][l]),L=l+1;L<k;L++){var K=Math.abs(h[L][l]);K>P&&(P=K,m=L)}if(0===P){h=null;break a}P=h[m];h[m]=h[l];h[l]=P;for(m=l+1;m<k;m++)for(P=-h[m][l]/h[l][l],L=l;L<k+1;L++)h[m][L]=l==L?0:h[m][L]+P*h[l][L]}l=Array(k);for(m=k-1;0<=m;m--)for(l[m]=\nh[m][k]/h[m][m],P=m-1;0<=P;P--)h[P][k]-=h[P][m]*l[m];h=l}h&&(q.save(),q.beginPath(),xj?(l=(b+n+H)/3,m=(w+A+O)/3,k=yj(l,m,b,w),n=yj(l,m,n,A),H=yj(l,m,H,O),q.moveTo(k[0],k[1]),q.lineTo(n[0],n[1]),q.lineTo(H[0],H[1])):(q.moveTo(b,w),q.lineTo(n,A),q.lineTo(H,O)),q.closePath(),q.clip(),q.transform(h[0],h[2],h[1],h[3],b,w),q.translate(r[0]-f,r[3]-c),q.scale(e/d,-e/d),q.drawImage(u.canvas,0,0),q.restore())});n&&(q.save(),q.strokeStyle=\"black\",q.lineWidth=1,k.c.forEach(function(b){var c=b.target;b=(c[0][0]-\ny[0])/g;var d=-(c[0][1]-y[1])/g,e=(c[1][0]-y[0])/g,f=-(c[1][1]-y[1])/g,h=(c[2][0]-y[0])/g,c=-(c[2][1]-y[1])/g;q.beginPath();q.moveTo(b,d);q.lineTo(e,f);q.lineTo(h,c);q.closePath();q.stroke()}),q.restore());return q.canvas};function Aj(b,c,d,e,f){this.f=b;this.g=c;var g={},h=xc(this.g,this.f);this.b=function(b){var c=b[0]+\"/\"+b[1];g[c]||(g[c]=h(b));return g[c]};this.h=e;this.A=f*f;this.c=[];this.i=!1;this.j=this.f.a&&!!e&&!!this.f.C()&&Vb(e)==Vb(this.f.C());this.a=this.f.C()?Vb(this.f.C()):null;this.l=this.g.C()?Vb(this.g.C()):null;b=bc(d);c=[d[2],d[3]];e=[d[2],d[1]];d=Xb(d);f=this.b(b);var k=this.b(c),l=this.b(e),m=this.b(d);Bj(this,b,c,e,d,f,k,l,m,10);if(this.i){var n=Infinity;this.c.forEach(function(b){n=Math.min(n,\nb.source[0][0],b.source[1][0],b.source[2][0])});this.c.forEach(function(b){if(Math.max(b.source[0][0],b.source[1][0],b.source[2][0])-n>this.a/2){var c=[[b.source[0][0],b.source[0][1]],[b.source[1][0],b.source[1][1]],[b.source[2][0],b.source[2][1]]];c[0][0]-n>this.a/2&&(c[0][0]-=this.a);c[1][0]-n>this.a/2&&(c[1][0]-=this.a);c[2][0]-n>this.a/2&&(c[2][0]-=this.a);Math.max(c[0][0],c[1][0],c[2][0])-Math.min(c[0][0],c[1][0],c[2][0])<this.a/2&&(b.source=c)}},this)}g={}}\nfunction Bj(b,c,d,e,f,g,h,k,l,m){var n=Ib([g,h,k,l]),q=b.a?Vb(n)/b.a:null,r=b.f.a&&.5<q&&1>q,u=!1;if(0<m){if(b.g.f&&b.l)var w=Ib([c,d,e,f]),u=u|.25<Vb(w)/b.l;!r&&b.f.f&&q&&(u|=.25<q)}if(u||!b.h||ac(n,b.h)){if(!(u||isFinite(g[0])&&isFinite(g[1])&&isFinite(h[0])&&isFinite(h[1])&&isFinite(k[0])&&isFinite(k[1])&&isFinite(l[0])&&isFinite(l[1])))if(0<m)u=!0;else return;if(0<m&&(u||(q=b.b([(c[0]+e[0])/2,(c[1]+e[1])/2]),n=r?(Ea(g[0],b.a)+Ea(k[0],b.a))/2-Ea(q[0],b.a):(g[0]+k[0])/2-q[0],q=(g[1]+k[1])/2-q[1],\nu=n*n+q*q>b.A),u)){Math.abs(c[0]-e[0])<=Math.abs(c[1]-e[1])?(r=[(d[0]+e[0])/2,(d[1]+e[1])/2],n=b.b(r),q=[(f[0]+c[0])/2,(f[1]+c[1])/2],u=b.b(q),Bj(b,c,d,r,q,g,h,n,u,m-1),Bj(b,q,r,e,f,u,n,k,l,m-1)):(r=[(c[0]+d[0])/2,(c[1]+d[1])/2],n=b.b(r),q=[(e[0]+f[0])/2,(e[1]+f[1])/2],u=b.b(q),Bj(b,c,r,q,f,g,n,u,l,m-1),Bj(b,r,d,e,q,n,h,k,u,m-1));return}if(r){if(!b.j)return;b.i=!0}b.c.push({source:[g,k,l],target:[c,e,f]});b.c.push({source:[g,h,k],target:[c,d,e]})}}\nfunction Cj(b){var c=Jb();b.c.forEach(function(b){b=b.source;Kb(c,b[0]);Kb(c,b[1]);Kb(c,b[2])});return c};function Dj(b){T.call(this);this.g=void 0;this.a=\"geometry\";this.h=null;this.c=void 0;this.b=null;Q(this,rb(this.a),this.nb,this);void 0!==b&&(b instanceof zc||!b?Ej(this,b):this.l(b))}M(Dj,T);p=Dj.prototype;p.clone=function(){var b=new Dj(this.za());Fj(b,this.a);var c=this.M();c&&Ej(b,c.clone());if(c=this.h)b.h=c,b.c=c?Gj(c):void 0,b.v();return b};p.M=function(){return this.get(this.a)};p.La=function(){return this.g};p.zd=function(){this.v()};\np.nb=function(){this.b&&(N(this.b),this.b=null);var b=this.M();b&&(this.b=Q(b,\"change\",this.zd,this));this.v()};function Ej(b,c){b.set(b.a,c)}function Fj(b,c){gb(b,rb(b.a),b.nb,b);b.a=c;Q(b,rb(b.a),b.nb,b);b.nb()}function Gj(b){if(!ga(b)){var c;c=Array.isArray(b)?b:[b];b=function(){return c}}return b};function Hj(b,c,d){return function(e,f,g){var h=new XMLHttpRequest;h.open(\"GET\",ga(b)?b(e,f,g):b,!0);\"arraybuffer\"==c.U()&&(h.responseType=\"arraybuffer\");h.onload=function(){if(200<=h.status&&300>h.status){var b=c.U(),e;\"json\"==b||\"text\"==b?e=h.responseText:\"xml\"==b?(e=h.responseXML,e||(b=h.responseText,e=(new DOMParser).parseFromString(b,\"application/xml\"))):\"arraybuffer\"==b&&(e=h.response);e&&d.call(this,c.b(e,{featureProjection:g}),c.f(Ij(e)))}}.bind(this);h.send()}}\nfunction Jj(b,c){return Hj(b,c,function(b){this.Db(b)})};function Kj(){return[[-Infinity,-Infinity,Infinity,Infinity]]};var Lj;\n(function(){var b={uc:{}};(function(){function c(b,d){if(!(this instanceof c))return new c(b,d);this.Bb=Math.max(4,b||9);this.ec=Math.max(2,Math.ceil(.4*this.Bb));d&&this.ed(d);this.clear()}function d(b,c){b.bbox=e(b,0,b.children.length,c)}function e(b,c,d,e){for(var g=[Infinity,Infinity,-Infinity,-Infinity],h;c<d;c++)h=b.children[c],f(g,b.$?e(h):h.bbox);return g}function f(b,c){b[0]=Math.min(b[0],c[0]);b[1]=Math.min(b[1],c[1]);b[2]=Math.max(b[2],c[2]);b[3]=Math.max(b[3],c[3])}function g(b,c){return b.bbox[0]-\nc.bbox[0]}function h(b,c){return b.bbox[1]-c.bbox[1]}function k(b){return(b[2]-b[0])*(b[3]-b[1])}function l(b){return b[2]-b[0]+(b[3]-b[1])}function m(b,c){return b[0]<=c[0]&&b[1]<=c[1]&&c[2]<=b[2]&&c[3]<=b[3]}function n(b,c){return c[0]<=b[2]&&c[1]<=b[3]&&c[2]>=b[0]&&c[3]>=b[1]}function q(b,c,d,e,f){for(var g=[c,d],h;g.length;)d=g.pop(),c=g.pop(),d-c<=e||(h=c+Math.ceil((d-c)/e/2)*e,r(b,c,d,h,f),g.push(c,h,h,d))}function r(b,c,d,e,f){for(var g,h,k,l,m;d>c;){600<d-c&&(g=d-c+1,h=e-c+1,k=Math.log(g),\nl=.5*Math.exp(2*k/3),m=.5*Math.sqrt(k*l*(g-l)/g)*(0>h-g/2?-1:1),k=Math.max(c,Math.floor(e-h*l/g+m)),h=Math.min(d,Math.floor(e+(g-h)*l/g+m)),r(b,k,h,e,f));g=b[e];h=c;l=d;u(b,c,e);for(0<f(b[d],g)&&u(b,c,d);h<l;){u(b,h,l);h++;for(l--;0>f(b[h],g);)h++;for(;0<f(b[l],g);)l--}0===f(b[c],g)?u(b,c,l):(l++,u(b,l,d));l<=e&&(c=l+1);e<=l&&(d=l-1)}}function u(b,c,d){var e=b[c];b[c]=b[d];b[d]=e}c.prototype={all:function(){return this.ac(this.data,[])},search:function(b){var c=this.data,d=[],e=this.da;if(!n(b,c.bbox))return d;\nfor(var f=[],g,h,k,l;c;){g=0;for(h=c.children.length;g<h;g++)k=c.children[g],l=c.$?e(k):k.bbox,n(b,l)&&(c.$?d.push(k):m(b,l)?this.ac(k,d):f.push(k));c=f.pop()}return d},load:function(b){if(!b||!b.length)return this;if(b.length<this.ec){for(var c=0,d=b.length;c<d;c++)this.Ca(b[c]);return this}b=this.cc(b.slice(),0,b.length-1,0);this.data.children.length?this.data.height===b.height?this.fc(this.data,b):(this.data.height<b.height&&(c=this.data,this.data=b,b=c),this.dc(b,this.data.height-b.height-1,!0)):\nthis.data=b;return this},Ca:function(b){b&&this.dc(b,this.data.height-1);return this},clear:function(){this.data={children:[],height:1,bbox:[Infinity,Infinity,-Infinity,-Infinity],$:!0};return this},remove:function(b){if(!b)return this;for(var c=this.data,d=this.da(b),e=[],f=[],g,h,k,l;c||e.length;){c||(c=e.pop(),h=e[e.length-1],g=f.pop(),l=!0);if(c.$&&(k=c.children.indexOf(b),-1!==k)){c.children.splice(k,1);e.push(c);this.dd(e);break}l||c.$||!m(c.bbox,d)?h?(g++,c=h.children[g],l=!1):c=null:(e.push(c),\nf.push(g),g=0,h=c,c=c.children[0])}return this},da:function(b){return b},Hb:function(b,c){return b[0]-c[0]},Ib:function(b,c){return b[1]-c[1]},toJSON:function(){return this.data},ac:function(b,c){for(var d=[];b;)b.$?c.push.apply(c,b.children):d.push.apply(d,b.children),b=d.pop();return c},cc:function(b,c,e,f){var g=e-c+1,h=this.Bb,k;if(g<=h)return k={children:b.slice(c,e+1),height:1,bbox:null,$:!0},d(k,this.da),k;f||(f=Math.ceil(Math.log(g)/Math.log(h)),h=Math.ceil(g/Math.pow(h,f-1)));k={children:[],\nheight:f,bbox:null,$:!1};var g=Math.ceil(g/h),h=g*Math.ceil(Math.sqrt(h)),l,m,n;for(q(b,c,e,h,this.Hb);c<=e;c+=h)for(m=Math.min(c+h-1,e),q(b,c,m,g,this.Ib),l=c;l<=m;l+=g)n=Math.min(l+g-1,m),k.children.push(this.cc(b,l,n,f-1));d(k,this.da);return k},cd:function(b,c,d,e){for(var f,g,h,l,m,n,q,r;;){e.push(c);if(c.$||e.length-1===d)break;q=r=Infinity;f=0;for(g=c.children.length;f<g;f++)h=c.children[f],m=k(h.bbox),n=h.bbox,n=(Math.max(n[2],b[2])-Math.min(n[0],b[0]))*(Math.max(n[3],b[3])-Math.min(n[1],\nb[1]))-m,n<r?(r=n,q=m<q?m:q,l=h):n===r&&m<q&&(q=m,l=h);c=l}return c},dc:function(b,c,d){var e=this.da;d=d?b.bbox:e(b);var e=[],g=this.cd(d,this.data,c,e);g.children.push(b);for(f(g.bbox,d);0<=c;)if(e[c].children.length>this.Bb)this.fd(e,c),c--;else break;this.$c(d,e,c)},fd:function(b,c){var e=b[c],f=e.children.length,g=this.ec;this.ad(e,g,f);f=this.bd(e,g,f);f={children:e.children.splice(f,e.children.length-f),height:e.height,bbox:null,$:!1};e.$&&(f.$=!0);d(e,this.da);d(f,this.da);c?b[c-1].children.push(f):\nthis.fc(e,f)},fc:function(b,c){this.data={children:[b,c],height:b.height+1,bbox:null,$:!1};d(this.data,this.da)},bd:function(b,c,d){var f,g,h,l,m,n,q;m=n=Infinity;for(f=c;f<=d-c;f++)g=e(b,0,f,this.da),h=e(b,f,d,this.da),l=Math.max(0,Math.min(g[2],h[2])-Math.max(g[0],h[0]))*Math.max(0,Math.min(g[3],h[3])-Math.max(g[1],h[1])),g=k(g)+k(h),l<m?(m=l,q=f,n=g<n?g:n):l===m&&g<n&&(n=g,q=f);return q},ad:function(b,c,d){var e=b.$?this.Hb:g,f=b.$?this.Ib:h,k=this.bc(b,c,d,e);c=this.bc(b,c,d,f);k<c&&b.children.sort(e)},\nbc:function(b,c,d,g){b.children.sort(g);g=this.da;var h=e(b,0,c,g),k=e(b,d-c,d,g),m=l(h)+l(k),n,q;for(n=c;n<d-c;n++)q=b.children[n],f(h,b.$?g(q):q.bbox),m+=l(h);for(n=d-c-1;n>=c;n--)q=b.children[n],f(k,b.$?g(q):q.bbox),m+=l(k);return m},$c:function(b,c,d){for(;0<=d;d--)f(c[d].bbox,b)},dd:function(b){for(var c=b.length-1,e;0<=c;c--)0===b[c].children.length?0<c?(e=b[c-1].children,e.splice(e.indexOf(b[c]),1)):this.clear():d(b[c],this.da)},ed:function(b){var c=[\"return a\",\" - b\",\";\"];this.Hb=new Function(\"a\",\n\"b\",c.join(b[0]));this.Ib=new Function(\"a\",\"b\",c.join(b[1]));this.da=new Function(\"a\",\"return [a\"+b.join(\", a\")+\"];\")}};\"undefined\"!==typeof b?b.uc=c:\"undefined\"!==typeof self?self.a=c:window.a=c})();Lj=b.uc})();function Mj(b){this.a=Lj(b);this.b={}}p=Mj.prototype;p.Ca=function(b,c){var d=[b[0],b[1],b[2],b[3],c];this.a.Ca(d);this.b[I(c)]=d};p.load=function(b,c){for(var d=Array(c.length),e=0,f=c.length;e<f;e++){var g=b[e],h=c[e],g=[g[0],g[1],g[2],g[3],h];d[e]=g;this.b[I(h)]=g}this.a.load(d)};p.remove=function(b){b=I(b);var c=this.b[b];delete this.b[b];return null!==this.a.remove(c)};function Nj(b){return b.a.all().map(function(b){return b[4]})}\nfunction Oj(b,c){return b.a.search(c).map(function(b){return b[4]})}function Pj(b,c,d,e){return Qj(Oj(b,c),d,e)}function Qj(b,c,d){for(var e,f=0,g=b.length;f<g&&!(e=c.call(d,b[f]));f++);return e}p.clear=function(){this.a.clear();this.b={}};p.C=function(){return this.a.data.bbox};function Rj(b){b=b||{};De.call(this,{attributions:b.attributions,logo:b.logo,projection:void 0,state:\"ready\",wrapX:void 0!==b.wrapX?b.wrapX:!0});this.o=pa;this.D=b.format;this.u=b.url;void 0!==b.loader?this.o=b.loader:void 0!==this.u&&(this.o=Jj(this.u,this.D));this.G=void 0!==b.strategy?b.strategy:Kj;var c=void 0!==b.useSpatialIndex?b.useSpatialIndex:!0;this.R=c?new Mj:null;this.s=new Mj;this.ca={};this.b={};this.g={};this.h={};this.a=null;var d,e;b.features instanceof ld?(d=b.features,e=d.a):Array.isArray(b.features)&&\n(e=b.features);c||void 0!==d||(d=new ld(e));void 0!==e&&Sj(this,e);void 0!==d&&Tj(this,d)}M(Rj,De);p=Rj.prototype;p.Cb=function(b){var c=I(b).toString();if(Uj(this,c,b)){Vj(this,c,b);var d=b.M();d?(c=d.C(),this.R&&this.R.Ca(c,b)):this.ca[c]=b;S(this,new Wj(\"addfeature\",b))}this.v()};function Vj(b,c,d){b.h[c]=[Q(d,\"change\",b.xc,b),Q(d,\"propertychange\",b.xc,b)]}function Uj(b,c,d){var e=!0,f=d.La();void 0!==f?f.toString()in b.b?e=!1:b.b[f.toString()]=d:b.g[c]=d;return e}p.Db=function(b){Sj(this,b);this.v()};\nfunction Sj(b,c){var d,e,f,g,h=[],k=[],l=[];e=0;for(f=c.length;e<f;e++)g=c[e],d=I(g).toString(),Uj(b,d,g)&&k.push(g);e=0;for(f=k.length;e<f;e++){g=k[e];d=I(g).toString();Vj(b,d,g);var m=g.M();m?(d=m.C(),h.push(d),l.push(g)):b.ca[d]=g}b.R&&b.R.load(h,l);e=0;for(f=k.length;e<f;e++)S(b,new Wj(\"addfeature\",k[e]))}\nfunction Tj(b,c){var d=!1;Q(b,\"addfeature\",function(b){d||(d=!0,c.push(b.feature),d=!1)});Q(b,\"removefeature\",function(b){d||(d=!0,c.remove(b.feature),d=!1)});Q(c,\"add\",function(b){d||(b=b.element,d=!0,this.Cb(b),d=!1)},b);Q(c,\"remove\",function(b){if(!d){b=b.element;d=!0;var c=I(b).toString();c in this.ca?delete this.ca[c]:this.R&&this.R.remove(b);this.Yb(b);this.v();d=!1}},b);b.a=c}\np.clear=function(b){if(b){for(var c in this.h)this.h[c].forEach(N);this.a||(this.h={},this.b={},this.g={})}else if(this.R){b=this.Yb;Qj(Nj(this.R),b,this);for(var d in this.ca)this.Yb(this.ca[d])}this.a&&this.a.clear();this.R&&this.R.clear();this.s.clear();this.ca={};S(this,new Wj(\"clear\"));this.v()};p.od=function(b,c){if(this.R)return Qj(Nj(this.R),b,c);if(this.a)return nd(this.a,b,c)};function Xj(b,c,d,e){b.R?Pj(b.R,c,d,e):b.a&&nd(b.a,d,e)}\np.pe=function(){var b;this.a?b=this.a.a:this.R&&(b=Nj(this.R),$a(this.ca)||Ka(b,Za(this.ca)));return b};p.C=function(){return this.R.C()};\np.xc=function(b){b=b.target;var c=I(b).toString(),d=b.M();if(d)if(d=d.C(),c in this.ca)delete this.ca[c],this.R&&this.R.Ca(d,b);else{if(this.R){var e=this.R,f=I(b);Rb(e.b[f].slice(0,4),d)||(e.remove(b),e.Ca(d,b))}}else c in this.ca||(this.R&&this.R.remove(b),this.ca[c]=b);d=b.La();void 0!==d?(d=d.toString(),c in this.g?(delete this.g[c],this.b[d]=b):this.b[d]!==b&&(Yj(this,b),this.b[d]=b)):c in this.g||(Yj(this,b),this.g[c]=b);this.v();S(this,new Wj(\"changefeature\",b))};\nfunction Zj(b,c,d,e){var f=b.s;c=b.G(c,d);var g,h;g=0;for(h=c.length;g<h;++g){var k=c[g];Pj(f,k,function(b){return Nb(b.extent,k)})||(b.o.call(b,k,d,e),f.Ca(k,{extent:k.slice()}))}}p.Yb=function(b){var c=I(b).toString();this.h[c].forEach(N);delete this.h[c];var d=b.La();void 0!==d?delete this.b[d.toString()]:delete this.g[c];S(this,new Wj(\"removefeature\",b))};function Yj(b,c){for(var d in b.b)if(b.b[d]===c){delete b.b[d];break}}function Wj(b,c){R.call(this,b);this.feature=c}M(Wj,R);function ak(b){Xi.call(this,b);this.c=rf();this.b=null;this.j=Jb();this.h=zb()}M(ak,Xi);\nak.prototype.g=function(b,c,d){var e=b.pixelRatio,f=b.viewState,g=f.center,h=f.projection,k=f.rotation,l=b.size,m=Math.round(e*l[0]/2),n=Math.round(e*l[1]/2),q=e/f.resolution,r=this.a,u=r.V(),w=u.kb(h),f=Zi(this,b,0);Yi(this,\"precompose\",d,b,f);var l=d,r=nb(r,\"render\"),y,z,D,t;if(k||r){l=this.c;y=l.canvas;D=u.mb(e)/e;var v=d.canvas.width*D;z=d.canvas.height*D;t=Math.round(Math.sqrt(v*v+z*z));y.width!=t?y.width=y.height=t:l.clearRect(0,0,t,t);y=(t-v)/2/D;z=(t-z)/2/D;q*=D;m=Math.round(D*(m+y));n=Math.round(D*\n(n+z))}v=l.globalAlpha;l.globalAlpha=c.opacity;var B=u.la(h),E=this.b,C;c=u.Mb(h)&&1==c.opacity;c||(E.reverse(),C=[]);for(var G=0,J=E.length;G<J;++G){var A=E[G],H=A.L,O=Je(B,H,this.j),P=H[0],L=Xb(Je(B,Re(B,g,P))),H=Math.round(Vb(O)*q),K=Math.round(Wb(O)*q),fa=Math.round((O[0]-L[0])*q/H)*H+m+Math.round((L[0]-g[0])*q),O=Math.round((L[1]-O[3])*q/K)*K+n+Math.round((g[1]-L[1])*q);if(!c){L=[fa,O,fa+H,O+K];l.save();for(var ra=0,Wl=C.length;ra<Wl;++ra){var Xa=C[ra];ac(L,Xa)&&(l.beginPath(),l.moveTo(L[0],\nL[1]),l.lineTo(L[0],L[3]),l.lineTo(L[2],L[3]),l.lineTo(L[2],L[1]),l.moveTo(Xa[0],Xa[1]),l.lineTo(Xa[2],Xa[1]),l.lineTo(Xa[2],Xa[3]),l.lineTo(Xa[0],Xa[3]),l.closePath(),l.clip())}C.push(L)}P=Xe(u,P,e,h);l.drawImage(A.T(),w,w,P[0],P[1],fa,O,H,K);c||l.restore()}r&&(e=y-m/D+m,h=z-n/D+n,g=Ig(this.h,t/2-e,t/2-h,q,-q,-k,-g[0]+e/q,-g[1]-h/q),Yi(this,\"render\",l,b,g));(k||r)&&d.drawImage(l.canvas,-Math.round(y),-Math.round(z),t/D,t/D);l.globalAlpha=v;Yi(this,\"postcompose\",d,b,f)};\nak.prototype.i=function(b,c){function d(b){b=b.N();return 2==b||4==b||3==b&&!u}var e=b.pixelRatio,f=b.viewState,g=f.projection,h=this.a,k=h.V(),l=k.la(g),m=Qe(l,f.resolution),n=l.I(m),q=f.center;n==f.resolution?(q=Rg(q,n,b.size),f=Zb(q,n,f.rotation,b.size)):f=b.extent;void 0!==c.extent&&(f=$b(f,c.extent));if(f[2]<f[0]||f[3]<f[1])return!1;n=Me(l,f,n);q={};q[m]={};var r=this.l(k,g,q),u=ti(h),w=Jb(),y=new fd(0,0,0,0),z,D,t,v;for(t=n.a;t<=n.f;++t)for(v=n.b;v<=n.c;++v)z=Tg(k,m,t,v,e,g),!d(z)&&z.a&&(z=\nz.a),d(z)?q[m][z.L.toString()]=z:(D=Ie(l,z.L,r,y,w),D||(z=Le(l,z.L,y,w))&&r(m+1,z));r=Object.keys(q).map(Number);r.sort(Ha);var w=[],B,y=0;for(t=r.length;y<t;++y)for(B in z=r[y],v=q[z],v)z=v[B],2==z.N()&&w.push(z);this.b=w;Qg(b.usedTiles,k,m,n);Sg(b,k,l,e,g,f,m,h.get(\"preload\"));Ng(b,k);Pg(b,k);return!0};function bk(b){Xi.call(this,b);this.b=!1;this.w=-1;this.u=NaN;this.j=Jb();this.c=this.o=null;this.h=rf()}M(bk,Xi);\nbk.prototype.g=function(b,c,d){var e=b.extent,f=b.pixelRatio,g=c.eb?b.skippedFeatureUids:{},h=b.viewState,k=h.projection,h=h.rotation,l=k.C(),m=this.a.V(),n=Zi(this,b,0);Yi(this,\"precompose\",d,b,n);var q=this.c;if(q&&!q.c()){var r;nb(this.a,\"render\")?(this.h.canvas.width=d.canvas.width,this.h.canvas.height=d.canvas.height,r=this.h):r=d;var u=r.globalAlpha;r.globalAlpha=c.opacity;c=b.size[0]*f;var w=b.size[1]*f;xi(r,-h,c/2,w/2);q.f(r,f,n,h,g);if(m.j&&k.a&&!Nb(l,e)){for(var k=e[0],m=Vb(l),y=0;k<l[0];)--y,\nn=m*y,n=Zi(this,b,n),q.f(r,f,n,h,g),k+=m;y=0;for(k=e[2];k>l[2];)++y,n=m*y,n=Zi(this,b,n),q.f(r,f,n,h,g),k-=m;n=Zi(this,b,0)}xi(r,h,c/2,w/2);r!=d&&(Yi(this,\"render\",r,b,n),d.drawImage(r.canvas,0,0));r.globalAlpha=u}Yi(this,\"postcompose\",d,b,n)};bk.prototype.fb=function(b,c,d,e){if(this.c){var f=this.a,g={};return this.c.g(b,c.viewState.resolution,c.viewState.rotation,{},function(b){var c=I(b).toString();if(!(c in g))return g[c]=!0,d.call(e,b,f)})}};bk.prototype.B=function(){Mg(this)};\nbk.prototype.i=function(b){function c(b){var c,e=b.c;e?c=e.call(b,m):(e=d.g)&&(c=e(b,m));if(c){if(c){e=!1;if(Array.isArray(c))for(var f=0,g=c.length;f<g;++f)e=vj(r,b,c[f],uj(m,n),this.B,this)||e;else e=vj(r,b,c,uj(m,n),this.B,this)||e;b=e}else b=!1;this.b=this.b||b}}var d=this.a,e=d.V();Og(b.attributions,e.i);Pg(b,e);var f=b.viewHints[0],g=b.viewHints[1],h=d.i,k=d.j;if(!this.b&&!h&&f||!k&&g)return!0;var l=b.extent,k=b.viewState,f=k.projection,m=k.resolution,n=b.pixelRatio,g=d.f,q=d.a,h=d.get(\"renderOrder\");\nvoid 0===h&&(h=tj);l=Lb(l,q*m);q=k.projection.C();e.j&&k.projection.a&&!Nb(q,b.extent)&&(b=Math.max(Vb(l)/2,Vb(q)),l[0]=q[0]-b,l[2]=q[2]+b);if(!this.b&&this.u==m&&this.w==g&&this.o==h&&Nb(this.j,l))return!0;this.c=null;this.b=!1;var r=new pj(.5*m/n,l,m,d.a);Zj(e,l,m,f);if(h){var u=[];Xj(e,l,function(b){u.push(b)},this);u.sort(h);u.forEach(c,this)}else Xj(e,l,c,this);qj(r);this.u=m;this.w=g;this.o=h;this.j=l;this.c=r;return!0};function ck(b,c){var d=/\\{z\\}/g,e=/\\{x\\}/g,f=/\\{y\\}/g,g=/\\{-y\\}/g;return function(h){if(h)return b.replace(d,h[0].toString()).replace(e,h[1].toString()).replace(f,function(){return(-h[2]-1).toString()}).replace(g,function(){var b=c.a?c.a[h[0]]:null;return(b.c-b.b+1+h[2]).toString()})}}function dk(b,c){for(var d=b.length,e=Array(d),f=0;f<d;++f)e[f]=ck(b[f],c);return ek(e)}function ek(b){return 1===b.length?b[0]:function(c,d,e){if(c)return b[Ea((c[1]<<c[0])+c[2],b.length)](c,d,e)}}function fk(){};function gk(b){Ve.call(this,{attributions:b.attributions,cacheSize:b.cacheSize,extent:b.extent,logo:b.logo,opaque:b.opaque,projection:b.projection,state:b.state,tileGrid:b.tileGrid,tilePixelRatio:b.tilePixelRatio,wrapX:b.wrapX});this.tileLoadFunction=b.tileLoadFunction;this.tileUrlFunction=this.g?this.g.bind(this):fk;this.urls=null;if(b.urls){var c=b.urls;this.urls=c;hk(this,this.g?this.g.bind(this):dk(c,this.tileGrid))}else b.url&&this.s(b.url);b.tileUrlFunction&&hk(this,b.tileUrlFunction)}\nM(gk,Ve);gk.prototype.D=function(b){b=b.target;switch(b.N()){case 1:S(this,new Ze(\"tileloadstart\",b));break;case 2:S(this,new Ze(\"tileloadend\",b));break;case 3:S(this,new Ze(\"tileloaderror\",b))}};function hk(b,c){b.a.clear();b.tileUrlFunction=c;b.v()}\ngk.prototype.s=function(b){var c=[],d=/\\{(\\d)-(\\d)\\}/.exec(b)||/\\{([a-z])-([a-z])\\}/.exec(b);if(d){var e=d[2].charCodeAt(0),f;for(f=d[1].charCodeAt(0);f<=e;++f)c.push(b.replace(d[0],String.fromCharCode(f)))}else c.push(b);b=this.urls=c;hk(this,this.g?this.g.bind(this):dk(b,this.tileGrid))};gk.prototype.Yc=function(b,c,d){b=this.lb(b,c,d);we(this.a,b)&&this.a.get(b)};function ik(b,c){Zg.call(this,0,c);this.c=rf();rf();this.a=this.c.canvas;this.a.style.width=\"100%\";this.a.style.height=\"100%\";this.a.className=\"ol-unselectable\";fe(b,this.a,0);this.b=!0;this.g=zb()}M(ik,Zg);ik.prototype.Jb=function(b){return b instanceof X?new ak(b):b instanceof Y?new bk(b):null};\nfunction jk(b,c,d){var e=b.h,f=b.c;if(nb(e,c)){var g=d.extent,h=d.pixelRatio,k=d.viewState.rotation,l=d.pixelRatio,m=d.viewState,n=m.resolution;b=Ig(b.g,b.a.width/2,b.a.height/2,l/n,-l/n,-m.rotation,-m.center[0],-m.center[1]);g=new Mi(f,h,g,b,k);S(e,new Fg(c,e,g,d,f,null))}}ik.prototype.U=function(){return\"canvas\"};\nik.prototype.sb=function(b){if(b){var c=this.c,d=b.pixelRatio,e=Math.round(b.size[0]*d),d=Math.round(b.size[1]*d);this.a.width!=e||this.a.height!=d?(this.a.width=e,this.a.height=d):c.clearRect(0,0,e,d);var f=b.viewState.rotation;$g(b);jk(this,\"precompose\",b);var g=b.layerStatesArray;Na(g);xi(c,f,e/2,d/2);var h=b.viewState.resolution,k,l,m,n;k=0;for(l=g.length;k<l;++k)n=g[k],m=n.layer,m=bh(this,m),Hg(n,h)&&\"ready\"==n.$b&&m.i(b,n)&&m.g(b,n,c);xi(c,-f,e/2,d/2);jk(this,\"postcompose\",b);this.b||(oe(this.a,\n!0),this.b=!0);ch(this,b);b.postRenderFunctions.push(ah)}else this.b&&(oe(this.a,!1),this.b=!1)};function kk(b,c){Lg.call(this,b);this.target=c}M(kk,Lg);kk.prototype.Gb=pa;kk.prototype.Kc=pa;function lk(b){var c=document.createElement(\"DIV\");c.style.position=\"absolute\";kk.call(this,b,c);this.c=!0;this.h=1;this.g=0;this.b={}}M(lk,kk);lk.prototype.Gb=function(){ee(this.target);this.g=0};\nlk.prototype.Lc=function(b,c){if(!c.visible)return this.c&&(oe(this.target,!1),this.c=!1),!0;var d=b.pixelRatio,e=b.viewState,f=e.projection,g=this.a,h=g.V(),k=h.la(f),l=h.kb(f),m=Qe(k,e.resolution),n=k.I(m),q=e.center,r;n==e.resolution?(q=Rg(q,n,b.size),r=Zb(q,n,e.rotation,b.size)):r=b.extent;void 0!==c.extent&&(r=$b(r,c.extent));var n=Me(k,r,n),u={};u[m]={};var w=this.l(h,f,u),y=ti(g),z=Jb(),D=new fd(0,0,0,0),t,v,B,E;for(B=n.a;B<=n.f;++B)for(E=n.b;E<=n.c;++E)t=Tg(h,m,B,E,d,f),v=t.N(),v=2==v||4==\nv||3==v&&!y,!v&&t.a&&(t=t.a),v=t.N(),2==v?u[m][t.L.toString()]=t:4==v||3==v&&!y||(v=Ie(k,t.L,w,D,z),v||(t=Le(k,t.L,D,z))&&w(m+1,t));var C;if(this.g!=h.f){for(C in this.b)y=this.b[+C],ge(y.target);this.b={};this.g=h.f}z=Object.keys(u).map(Number);z.sort(Ha);var w={},G;B=0;for(E=z.length;B<E;++B){C=z[B];C in this.b?y=this.b[C]:(y=Re(k,q,C),y=new mk(k,y),w[C]=!0,this.b[C]=y);C=u[C];for(G in C){t=y;v=C[G];var J=l,A=v.L,H=A[0],O=A[1],P=A[2],A=A.toString();if(!(A in t.b)){var H=tb(Pe(t.g,H),t.i),L=v.T(t),\nK=L.style;K.maxWidth=\"none\";var fa=void 0,ra=void 0;0<J?(fa=document.createElement(\"DIV\"),ra=fa.style,ra.overflow=\"hidden\",ra.width=H[0]+\"px\",ra.height=H[1]+\"px\",K.position=\"absolute\",K.left=-J+\"px\",K.top=-J+\"px\",K.width=H[0]+2*J+\"px\",K.height=H[1]+2*J+\"px\",fa.appendChild(L)):(K.width=H[0]+\"px\",K.height=H[1]+\"px\",fa=L,ra=K);ra.position=\"absolute\";ra.left=(O-t.f[1])*H[0]+\"px\";ra.top=(t.f[2]-P)*H[1]+\"px\";t.a||(t.a=document.createDocumentFragment());t.a.appendChild(fa);t.b[A]=v}}y.a&&(y.target.appendChild(y.a),\ny.a=null)}l=Object.keys(this.b).map(Number);l.sort(Ha);B=zb();G=0;for(z=l.length;G<z;++G)if(C=l[G],y=this.b[C],C in u)if(t=y.I(),E=y.ka(),Ig(B,b.size[0]/2,b.size[1]/2,t/e.resolution,t/e.resolution,e.rotation,(E[0]-q[0])/t,(q[1]-E[1])/t),y.setTransform(B),C in w){for(--C;0<=C;--C)if(C in this.b){E=this.b[C].target;E.parentNode&&E.parentNode.insertBefore(y.target,E.nextSibling);break}0>C&&fe(this.target,y.target,0)}else{if(!b.viewHints[0]&&!b.viewHints[1]){v=Ke(y.g,r,y.f[0],D);C=[];t=E=void 0;for(t in y.b)E=\ny.b[t],J=E.L,gd(v,J[1],J[2])||C.push(E);J=v=void 0;v=0;for(J=C.length;v<J;++v)E=C[v],t=E.L.toString(),ge(E.T(y)),delete y.b[t]}}else ge(y.target),delete this.b[C];c.opacity!=this.h&&(this.h=this.target.style.opacity=c.opacity);c.visible&&!this.c&&(oe(this.target,!0),this.c=!0);Qg(b.usedTiles,h,m,n);Sg(b,h,k,d,f,r,m,g.get(\"preload\"));Ng(b,h);Pg(b,h);return!0};\nfunction mk(b,c){this.target=document.createElement(\"DIV\");this.target.style.position=\"absolute\";this.target.style.width=\"100%\";this.target.style.height=\"100%\";this.g=b;this.f=c;this.h=bc(Je(b,c));this.l=b.I(c[0]);this.b={};this.a=null;this.c=Bb();this.i=[0,0]}mk.prototype.ka=function(){return this.h};mk.prototype.I=function(){return this.l};mk.prototype.setTransform=function(b){Jg(b,this.c)||(vf(this.target,b),Cb(this.c,b))};function nk(b){this.g=rf();var c=this.g.canvas;c.style.maxWidth=\"none\";c.style.position=\"absolute\";kk.call(this,b,c);this.b=!1;this.h=-1;this.o=NaN;this.i=Jb();this.c=this.j=null;this.w=zb();this.u=zb()}M(nk,kk);p=nk.prototype;p.Gb=function(){var b=this.g.canvas;b.width=b.width;this.h=0};\np.Kc=function(b,c){var d=b.viewState,e=d.center,f=d.rotation,g=d.resolution,d=b.pixelRatio,h=b.size[0],k=b.size[1],l=h*d,m=k*d,e=Ig(this.w,d*h/2,d*k/2,d/g,-d/g,-f,-e[0],-e[1]),g=this.g;g.canvas.width=l;g.canvas.height=m;h=Ig(this.u,0,0,1/d,1/d,0,-(l-h)/2*d,-(m-k)/2*d);vf(g.canvas,h);ok(this,\"precompose\",b,e);(h=this.c)&&!h.c()&&(g.globalAlpha=c.opacity,h.f(g,d,e,f,c.eb?b.skippedFeatureUids:{}),ok(this,\"render\",b,e));ok(this,\"postcompose\",b,e)};\nfunction ok(b,c,d,e){var f=b.g;b=b.a;nb(b,c)&&(e=new Mi(f,d.pixelRatio,d.extent,e,d.viewState.rotation),S(b,new Fg(c,b,e,d,f,null)))}p.fb=function(b,c,d,e){if(this.c){var f=this.a,g={};return this.c.g(b,c.viewState.resolution,c.viewState.rotation,{},function(b){var c=I(b).toString();if(!(c in g))return g[c]=!0,d.call(e,b,f)})}};p.Mc=function(){Mg(this)};\np.Lc=function(b){function c(b){var c,e=b.c;e?c=e.call(b,l):(e=d.g)&&(c=e(b,l));if(c){if(c){e=!1;if(Array.isArray(c))for(var f=0,g=c.length;f<g;++f)e=vj(n,b,c[f],uj(l,m),this.Mc,this)||e;else e=vj(n,b,c,uj(l,m),this.Mc,this)||e;b=e}else b=!1;this.b=this.b||b}}var d=this.a,e=d.V();Og(b.attributions,e.i);Pg(b,e);var f=b.viewHints[0],g=b.viewHints[1],h=d.i,k=d.j;if(!this.b&&!h&&f||!k&&g)return!0;var g=b.extent,h=b.viewState,f=h.projection,l=h.resolution,m=b.pixelRatio;b=d.f;k=d.a;h=d.get(\"renderOrder\");\nvoid 0===h&&(h=tj);g=Lb(g,k*l);if(!this.b&&this.o==l&&this.h==b&&this.j==h&&Nb(this.i,g))return!0;this.c=null;this.b=!1;var n=new pj(.5*l/m,g,l,d.a);Zj(e,g,l,f);if(h){var q=[];Xj(e,g,function(b){q.push(b)},this);q.sort(h);q.forEach(c,this)}else Xj(e,g,c,this);qj(n);this.o=l;this.h=b;this.j=h;this.i=g;this.c=n;return!0};function pk(b,c){Zg.call(this,0,c);this.c=rf();var d=this.c.canvas;d.style.position=\"absolute\";d.style.width=\"100%\";d.style.height=\"100%\";d.className=\"ol-unselectable\";fe(b,d,0);this.g=zb();this.a=document.createElement(\"DIV\");this.a.className=\"ol-unselectable\";d=this.a.style;d.position=\"absolute\";d.width=\"100%\";d.height=\"100%\";Q(this.a,\"touchstart\",lb);fe(b,this.a,0);this.b=!0}M(pk,Zg);pk.prototype.J=function(){ge(this.a);pk.X.J.call(this)};\npk.prototype.Jb=function(b){if(b instanceof X)b=new lk(b);else if(b instanceof Y)b=new nk(b);else return null;return b};function qk(b,c,d){var e=b.h;if(nb(e,c)){var f=d.extent,g=d.pixelRatio,h=d.viewState,k=h.rotation,l=b.c,m=l.canvas;Ig(b.g,m.width/2,m.height/2,g/h.resolution,-g/h.resolution,-h.rotation,-h.center[0],-h.center[1]);b=new Mi(l,g,f,b.g,k);S(e,new Fg(c,e,b,d,l,null))}}pk.prototype.U=function(){return\"dom\"};\npk.prototype.sb=function(b){if(b){var c=this.h;if(nb(c,\"precompose\")||nb(c,\"postcompose\")){var c=this.c.canvas,d=b.pixelRatio;c.width=b.size[0]*d;c.height=b.size[1]*d}qk(this,\"precompose\",b);c=b.layerStatesArray;Na(c);var d=b.viewState.resolution,e,f,g,h;e=0;for(f=c.length;e<f;++e)h=c[e],g=h.layer,g=bh(this,g),fe(this.a,g.target,e),Hg(h,d)&&\"ready\"==h.$b?g.Lc(b,h)&&g.Kc(b,h):g.Gb();var c=b.layerStates,k;for(k in this.f)k in c||(g=this.f[k],ge(g.target));this.b||(oe(this.a,!0),this.b=!0);$g(b);ch(this,\nb);b.postRenderFunctions.push(ah);qk(this,\"postcompose\",b)}else this.b&&(oe(this.a,!1),this.b=!1)};function rk(b){this.a=b}function sk(b){this.a=b}M(sk,rk);sk.prototype.U=function(){return 35632};function tk(b){this.a=b}M(tk,rk);tk.prototype.U=function(){return 35633};function uk(){this.a=\"precision mediump float;varying vec2 a;varying float b;uniform float k;uniform sampler2D l;void main(void){vec4 texColor=texture2D(l,a);gl_FragColor.rgb=texColor.rgb;float alpha=texColor.a*b*k;if(alpha==0.0){discard;}gl_FragColor.a=alpha;}\"}M(uk,sk);aa(uk);\nfunction vk(){this.a=\"varying vec2 a;varying float b;attribute vec2 c;attribute vec2 d;attribute vec2 e;attribute float f;attribute float g;uniform mat4 h;uniform mat4 i;uniform mat4 j;void main(void){mat4 offsetMatrix=i;if(g==1.0){offsetMatrix=i*j;}vec4 offsets=offsetMatrix*vec4(e,0.,0.);gl_Position=h*vec4(c,0.,1.)+offsets;a=d;b=f;}\"}M(vk,tk);aa(vk);\nfunction wk(b,c){this.i=b.getUniformLocation(c,\"j\");this.j=b.getUniformLocation(c,\"i\");this.h=b.getUniformLocation(c,\"k\");this.l=b.getUniformLocation(c,\"h\");this.a=b.getAttribLocation(c,\"e\");this.b=b.getAttribLocation(c,\"f\");this.c=b.getAttribLocation(c,\"c\");this.f=b.getAttribLocation(c,\"g\");this.g=b.getAttribLocation(c,\"d\")};function xk(b){this.a=void 0!==b?b:[]};function yk(b,c){this.A=b;this.a=c;this.b={};this.g={};this.c={};this.i=this.j=this.h=this.l=null;(this.f=0<=oa.indexOf(\"OES_element_index_uint\"))&&c.getExtension(\"OES_element_index_uint\");Q(this.A,\"webglcontextlost\",this.o,this);Q(this.A,\"webglcontextrestored\",this.s,this)}M(yk,ib);\nfunction zk(b,c,d){var e=b.a,f=d.a,g=String(I(d));if(g in b.b)e.bindBuffer(c,b.b[g].buffer);else{var h=e.createBuffer();e.bindBuffer(c,h);var k;34962==c?k=new Float32Array(f):34963==c&&(k=b.f?new Uint32Array(f):new Uint16Array(f));e.bufferData(c,k,35044);b.b[g]={Xe:d,buffer:h}}}function Ak(b,c){var d=b.a,e=String(I(c)),f=b.b[e];d.isContextLost()||d.deleteBuffer(f.buffer);delete b.b[e]}\nyk.prototype.J=function(){hb(this.A);var b=this.a;if(!b.isContextLost()){for(var c in this.b)b.deleteBuffer(this.b[c].buffer);for(c in this.c)b.deleteProgram(this.c[c]);for(c in this.g)b.deleteShader(this.g[c]);b.deleteFramebuffer(this.h);b.deleteRenderbuffer(this.i);b.deleteTexture(this.j)}};\nfunction Bk(b){if(!b.h){var c=b.a,d=c.createFramebuffer();c.bindFramebuffer(c.FRAMEBUFFER,d);var e=Ck(c,1,1),f=c.createRenderbuffer();c.bindRenderbuffer(c.RENDERBUFFER,f);c.renderbufferStorage(c.RENDERBUFFER,c.DEPTH_COMPONENT16,1,1);c.framebufferTexture2D(c.FRAMEBUFFER,c.COLOR_ATTACHMENT0,c.TEXTURE_2D,e,0);c.framebufferRenderbuffer(c.FRAMEBUFFER,c.DEPTH_ATTACHMENT,c.RENDERBUFFER,f);c.bindTexture(c.TEXTURE_2D,null);c.bindRenderbuffer(c.RENDERBUFFER,null);c.bindFramebuffer(c.FRAMEBUFFER,null);b.h=d;\nb.j=e;b.i=f}return b.h}function Dk(b,c){var d=String(I(c));if(d in b.g)return b.g[d];var e=b.a,f=e.createShader(c.U());e.shaderSource(f,c.a);e.compileShader(f);return b.g[d]=f}function Ek(b,c,d){var e=I(c)+\"/\"+I(d);if(e in b.c)return b.c[e];var f=b.a,g=f.createProgram();f.attachShader(g,Dk(b,c));f.attachShader(g,Dk(b,d));f.linkProgram(g);return b.c[e]=g}yk.prototype.o=function(){Ya(this.b);Ya(this.g);Ya(this.c);this.i=this.j=this.h=this.l=null};yk.prototype.s=function(){};\nfunction Fk(b,c){if(c==b.l)return!1;b.a.useProgram(c);b.l=c;return!0}function Gk(b,c,d){var e=b.createTexture();b.bindTexture(b.TEXTURE_2D,e);b.texParameteri(b.TEXTURE_2D,b.TEXTURE_MAG_FILTER,b.LINEAR);b.texParameteri(b.TEXTURE_2D,b.TEXTURE_MIN_FILTER,b.LINEAR);void 0!==c&&b.texParameteri(3553,10242,c);void 0!==d&&b.texParameteri(3553,10243,d);return e}function Ck(b,c,d){var e=Gk(b,void 0,void 0);b.texImage2D(b.TEXTURE_2D,0,b.RGBA,c,d,0,b.RGBA,b.UNSIGNED_BYTE,null);return e};function Hk(b,c){this.H=this.u=void 0;this.j=Yb(c);this.s=[];this.h=[];this.B=void 0;this.g=[];this.c=[];this.D=this.K=void 0;this.b=[];this.w=this.i=null;this.G=void 0;this.na=Bb();this.za=Bb();this.S=this.P=void 0;this.pa=Bb();this.ja=this.Y=this.ba=void 0;this.ea=[];this.l=[];this.a=[];this.o=null;this.f=[];this.A=[];this.aa=void 0}M(Hk,Eg);\nfunction Ik(b,c){var d=b.o,e=b.i,f=b.ea,g=b.l,h=c.a;return function(){if(!h.isContextLost()){var b,l;b=0;for(l=f.length;b<l;++b)h.deleteTexture(f[b]);b=0;for(l=g.length;b<l;++b)h.deleteTexture(g[b])}Ak(c,d);Ak(c,e)}}\nfunction Jk(b,c,d,e){var f=b.u,g=b.H,h=b.B,k=b.K,l=b.D,m=b.G,n=b.P,q=b.S,r=b.ba?1:0,u=b.Y,w=b.ja,y=b.aa,z=Math.cos(u),u=Math.sin(u),D=b.b.length,t=b.a.length,v,B,E,C,G,J;for(v=0;v<d;v+=e)G=c[v]-b.j[0],J=c[v+1]-b.j[1],B=t/8,E=-w*f,C=-w*(h-g),b.a[t++]=G,b.a[t++]=J,b.a[t++]=E*z-C*u,b.a[t++]=E*u+C*z,b.a[t++]=n/l,b.a[t++]=(q+h)/k,b.a[t++]=m,b.a[t++]=r,E=w*(y-f),C=-w*(h-g),b.a[t++]=G,b.a[t++]=J,b.a[t++]=E*z-C*u,b.a[t++]=E*u+C*z,b.a[t++]=(n+y)/l,b.a[t++]=(q+h)/k,b.a[t++]=m,b.a[t++]=r,E=w*(y-f),C=w*g,b.a[t++]=\nG,b.a[t++]=J,b.a[t++]=E*z-C*u,b.a[t++]=E*u+C*z,b.a[t++]=(n+y)/l,b.a[t++]=q/k,b.a[t++]=m,b.a[t++]=r,E=-w*f,C=w*g,b.a[t++]=G,b.a[t++]=J,b.a[t++]=E*z-C*u,b.a[t++]=E*u+C*z,b.a[t++]=n/l,b.a[t++]=q/k,b.a[t++]=m,b.a[t++]=r,b.b[D++]=B,b.b[D++]=B+1,b.b[D++]=B+2,b.b[D++]=B,b.b[D++]=B+2,b.b[D++]=B+3}Hk.prototype.Za=function(b,c){this.f.push(this.b.length);this.A.push(c);var d=b.a;Jk(this,d,d.length,b.b)};Hk.prototype.$a=function(b,c){this.f.push(this.b.length);this.A.push(c);var d=b.a;Jk(this,d,d.length,b.b)};\nfunction Kk(b,c){var d=c.a;b.s.push(b.b.length);b.h.push(b.b.length);b.o=new xk(b.a);zk(c,34962,b.o);b.i=new xk(b.b);zk(c,34963,b.i);var e={};Lk(b.ea,b.g,e,d);Lk(b.l,b.c,e,d);b.u=void 0;b.H=void 0;b.B=void 0;b.g=null;b.c=null;b.K=void 0;b.D=void 0;b.b=null;b.G=void 0;b.P=void 0;b.S=void 0;b.ba=void 0;b.Y=void 0;b.ja=void 0;b.a=null;b.aa=void 0}\nfunction Lk(b,c,d,e){var f,g,h,k,l=c.length;for(k=0;k<l;++k){g=c[k];h=I(g).toString();if(h in d)f=d[h];else{f=e;var m=Gk(f,33071,33071);f.texImage2D(f.TEXTURE_2D,0,f.RGBA,f.RGBA,f.UNSIGNED_BYTE,g);f=m;d[h]=f}b[k]=f}}\nfunction Mk(b,c,d,e,f,g,h,k,l,m,n){var q=c.a;zk(c,34962,b.o);zk(c,34963,b.i);var r=uk.ua(),u=vk.ua(),u=Ek(c,r,u);b.w?r=b.w:(r=new wk(q,u),b.w=r);Fk(c,u);q.enableVertexAttribArray(r.c);q.vertexAttribPointer(r.c,2,5126,!1,32,0);q.enableVertexAttribArray(r.a);q.vertexAttribPointer(r.a,2,5126,!1,32,8);q.enableVertexAttribArray(r.g);q.vertexAttribPointer(r.g,2,5126,!1,32,16);q.enableVertexAttribArray(r.b);q.vertexAttribPointer(r.b,1,5126,!1,32,24);q.enableVertexAttribArray(r.f);q.vertexAttribPointer(r.f,\n1,5126,!1,32,28);u=b.pa;Ig(u,0,0,2/(e*g[0]),2/(e*g[1]),-f,-(d[0]-b.j[0]),-(d[1]-b.j[1]));d=b.za;e=2/g[0];g=2/g[1];Db(d);d[0]=e;d[5]=g;d[10]=1;d[15]=1;g=b.na;Db(g);0!==f&&Hb(g,-f);q.uniformMatrix4fv(r.l,!1,u);q.uniformMatrix4fv(r.j,!1,d);q.uniformMatrix4fv(r.i,!1,g);q.uniform1f(r.h,h);var w;if(void 0===l)Nk(b,q,c,k,b.ea,b.s);else{if(m)a:{f=c.f?5125:5123;c=c.f?4:2;g=b.f.length-1;for(h=b.l.length-1;0<=h;--h)for(q.bindTexture(3553,b.l[h]),m=0<h?b.h[h-1]:0,u=b.h[h];0<=g&&b.f[g]>=m;){w=b.f[g];d=b.A[g];\ne=I(d).toString();if(void 0===k[e]&&d.M()&&(void 0===n||ac(n,d.M().C()))&&(q.clear(q.COLOR_BUFFER_BIT|q.DEPTH_BUFFER_BIT),q.drawElements(4,u-w,f,w*c),u=l(d))){b=u;break a}u=w;g--}b=void 0}else q.clear(q.COLOR_BUFFER_BIT|q.DEPTH_BUFFER_BIT),Nk(b,q,c,k,b.l,b.h),b=(b=l(null))?b:void 0;w=b}q.disableVertexAttribArray(r.c);q.disableVertexAttribArray(r.a);q.disableVertexAttribArray(r.g);q.disableVertexAttribArray(r.b);q.disableVertexAttribArray(r.f);return w}\nfunction Nk(b,c,d,e,f,g){var h=d.f?5125:5123;d=d.f?4:2;if($a(e)){var k;b=0;e=f.length;for(k=0;b<e;++b){c.bindTexture(3553,f[b]);var l=g[b];c.drawElements(4,l-k,h,k*d);k=l}}else{k=0;var m,l=0;for(m=f.length;l<m;++l){c.bindTexture(3553,f[l]);for(var n=0<l?g[l-1]:0,q=g[l],r=n;k<b.f.length&&b.f[k]<=q;){var u=I(b.A[k]).toString();void 0!==e[u]?(r!==n&&c.drawElements(4,n-r,h,r*d),n=r=k===b.f.length-1?q:b.f[k+1]):n=k===b.f.length-1?q:b.f[k+1];k++}r!==n&&c.drawElements(4,n-r,h,r*d)}}}\nHk.prototype.Ha=function(b){var c=b.jb(),d=b.T(1),e=b.wc(),f=b.Xb(1),g=b.l,h=b.ka(),k=b.i,l=b.Z(),m=b.Qa();b=b.gb;var n;0===this.g.length?this.g.push(d):(n=this.g[this.g.length-1],I(n)!=I(d)&&(this.s.push(this.b.length),this.g.push(d)));0===this.c.length?this.c.push(f):(n=this.c[this.c.length-1],I(n)!=I(f)&&(this.h.push(this.b.length),this.c.push(f)));this.u=c[0];this.H=c[1];this.B=m[1];this.K=e[1];this.D=e[0];this.G=g;this.P=h[0];this.S=h[1];this.Y=l;this.ba=k;this.ja=b;this.aa=m[0]};\nfunction Ok(b,c,d){this.l=c;this.i=b;this.h=d;this.b={}}function Pk(b,c){var d=[],e;for(e in b.b)d.push(Ik(b.b[e],c));return function(){for(var b=d.length,c,e=0;e<b;e++)c=d[e].apply(this,arguments);return c}}function Qk(b,c){for(var d in b.b)Kk(b.b[d],c)}Ok.prototype.a=function(b,c){var d=this.b[c];void 0===d&&(d=new Rk[c](this.i,this.l),this.b[c]=d);return d};Ok.prototype.c=function(){return $a(this.b)};\nOk.prototype.f=function(b,c,d,e,f,g,h,k){var l,m;g=0;for(l=$i.length;g<l;++g)m=this.b[$i[g]],void 0!==m&&Mk(m,b,c,d,e,f,h,k,void 0,!1)};function Sk(b,c,d,e,f,g,h,k,l,m){var n=Tk,q,r;for(q=$i.length-1;0<=q;--q)if(r=b.b[$i[q]],void 0!==r&&(r=Mk(r,c,d,e,f,n,g,h,k,l,m)))return r}\nOk.prototype.g=function(b,c,d,e,f,g,h,k,l,m){var n=c.a;n.bindFramebuffer(n.FRAMEBUFFER,Bk(c));var q;void 0!==this.h&&(q=Lb(Qb(b),e*this.h));return Sk(this,c,b,e,f,k,l,function(b){var c=new Uint8Array(4);n.readPixels(0,0,1,1,n.RGBA,n.UNSIGNED_BYTE,c);if(0<c[3]&&(b=m(b)))return b},!0,q)};function Uk(b,c,d,e,f,g,h){var k=d.a;k.bindFramebuffer(k.FRAMEBUFFER,Bk(d));return void 0!==Sk(b,d,c,e,f,g,h,function(){var b=new Uint8Array(4);k.readPixels(0,0,1,1,k.RGBA,k.UNSIGNED_BYTE,b);return 0<b[3]},!1)}\nvar Rk={Image:Hk},Tk=[1,1];function Vk(b,c,d,e,f,g){this.a=b;this.f=c;this.c=g;this.l=f;this.h=e;this.g=d;this.b=null}M(Vk,Eg);Vk.prototype.$a=function(b,c){var d=this.a,e=(new Ok(1,this.c)).a(0,\"Image\");e.Ha(this.b);e.$a(b,c);Kk(e,d);Mk(e,this.a,this.f,this.g,this.h,this.l,1,{},void 0,!1);Ik(e,d)()};Vk.prototype.Za=function(b,c){var d=this.a,e=(new Ok(1,this.c)).a(0,\"Image\");e.Ha(this.b);e.Za(b,c);Kk(e,d);Mk(e,this.a,this.f,this.g,this.h,this.l,1,{},void 0,!1);Ik(e,d)()};Vk.prototype.Ha=function(b){this.b=b};function Wk(){this.a=\"precision mediump float;varying vec2 a;uniform float f;uniform sampler2D g;void main(void){vec4 texColor=texture2D(g,a);gl_FragColor.rgb=texColor.rgb;gl_FragColor.a=texColor.a*f;}\"}M(Wk,sk);aa(Wk);function Xk(){this.a=\"varying vec2 a;attribute vec2 b;attribute vec2 c;uniform mat4 d;uniform mat4 e;void main(void){gl_Position=e*vec4(b,0.,1.);a=(d*vec4(c,0.,1.)).st;}\"}M(Xk,tk);aa(Xk);\nfunction Yk(b,c){this.f=b.getUniformLocation(c,\"f\");this.c=b.getUniformLocation(c,\"e\");this.h=b.getUniformLocation(c,\"d\");this.g=b.getUniformLocation(c,\"g\");this.a=b.getAttribLocation(c,\"b\");this.b=b.getAttribLocation(c,\"c\")};function Zk(b,c){Lg.call(this,c);this.c=b;this.G=new xk([-1,-1,0,0,1,-1,1,0,-1,1,0,1,1,1,1,1]);this.i=this.ya=null;this.j=void 0;this.D=zb();this.P=Bb();this.o=null}M(Zk,Lg);\nfunction $k(b,c,d){var e=b.c.c;if(void 0===b.j||b.j!=d){c.postRenderFunctions.push(na(function(b,c,d){b.isContextLost()||(b.deleteFramebuffer(c),b.deleteTexture(d))},e,b.i,b.ya));c=Ck(e,d,d);var f=e.createFramebuffer();e.bindFramebuffer(36160,f);e.framebufferTexture2D(36160,36064,3553,c,0);b.ya=c;b.i=f;b.j=d}else e.bindFramebuffer(36160,b.i)}\nZk.prototype.Nc=function(b,c,d){al(this,\"precompose\",d,b);zk(d,34962,this.G);var e=d.a,f=Wk.ua(),g=Xk.ua(),f=Ek(d,f,g);this.o?g=this.o:this.o=g=new Yk(e,f);Fk(d,f)&&(e.enableVertexAttribArray(g.a),e.vertexAttribPointer(g.a,2,5126,!1,16,0),e.enableVertexAttribArray(g.b),e.vertexAttribPointer(g.b,2,5126,!1,16,8),e.uniform1i(g.g,0));e.uniformMatrix4fv(g.h,!1,this.D);e.uniformMatrix4fv(g.c,!1,this.P);e.uniform1f(g.f,c.opacity);e.bindTexture(3553,this.ya);e.drawArrays(5,0,4);al(this,\"postcompose\",d,b)};\nfunction al(b,c,d,e){b=b.a;if(nb(b,c)){var f=e.viewState;S(b,new Fg(c,b,new Vk(d,f.center,f.resolution,f.rotation,e.size,e.extent),e,null,d))}}Zk.prototype.s=function(){this.i=this.ya=null;this.j=void 0};function bl(){this.a=\"precision mediump float;varying vec2 a;uniform sampler2D e;void main(void){gl_FragColor=texture2D(e,a);}\"}M(bl,sk);aa(bl);function cl(){this.a=\"varying vec2 a;attribute vec2 b;attribute vec2 c;uniform vec4 d;void main(void){gl_Position=vec4(b*d.xy+d.zw,0.,1.);a=c;}\"}M(cl,tk);aa(cl);function dl(b,c){this.f=b.getUniformLocation(c,\"e\");this.c=b.getUniformLocation(c,\"d\");this.a=b.getAttribLocation(c,\"b\");this.b=b.getAttribLocation(c,\"c\")};function el(b,c){Zk.call(this,b,c);this.B=bl.ua();this.S=cl.ua();this.b=null;this.w=new xk([0,0,0,1,1,0,1,1,0,1,0,0,1,1,1,0]);this.u=this.g=null;this.h=-1;this.K=[0,0]}M(el,Zk);el.prototype.J=function(){Ak(this.c.g,this.w);el.X.J.call(this)};el.prototype.l=function(b,c,d){var e=this.c;return function(f,g){return We(b,c,f,g,function(b){var c=we(e.b,b.getKey());c&&(d[f]||(d[f]={}),d[f][b.L.toString()]=b);return c})}};el.prototype.s=function(){el.X.s.call(this);this.b=null};\nel.prototype.Oc=function(b,c,d){var e=this.c,f=d.a,g=b.viewState,h=g.projection,k=this.a,l=k.V(),m=l.la(h),n=Qe(m,g.resolution),q=m.I(n),r=Xe(l,n,b.pixelRatio,h),u=r[0]/tb(Pe(m,n),this.K)[0],w=q/u,y=l.kb(h),z=g.center,D;q==g.resolution?(z=Rg(z,q,b.size),D=Zb(z,q,g.rotation,b.size)):D=b.extent;q=Me(m,D,q);if(this.g&&hd(this.g,q)&&this.h==l.f)w=this.u;else{var t=[q.ha(),q.c-q.b+1],v=Math.pow(2,Math.ceil(Math.log(Math.max(t[0]*r[0],t[1]*r[1]))/Math.LN2)),t=w*v,B=m.ka(n),E=B[0]+q.a*r[0]*w,w=B[1]+q.b*\nr[1]*w,w=[E,w,E+t,w+t];$k(this,b,v);f.viewport(0,0,v,v);f.clearColor(0,0,0,0);f.clear(16384);f.disable(3042);v=Ek(d,this.B,this.S);Fk(d,v);this.b||(this.b=new dl(f,v));zk(d,34962,this.w);f.enableVertexAttribArray(this.b.a);f.vertexAttribPointer(this.b.a,2,5126,!1,16,0);f.enableVertexAttribArray(this.b.b);f.vertexAttribPointer(this.b.b,2,5126,!1,16,8);f.uniform1i(this.b.f,0);d={};d[n]={};var C=this.l(l,h,d),G=ti(k),v=!0,E=Jb(),J=new fd(0,0,0,0),A,H,O;for(H=q.a;H<=q.f;++H)for(O=q.b;O<=q.c;++O){B=Tg(l,\nn,H,O,u,h);if(void 0!==c.extent&&(A=Je(m,B.L,E),!ac(A,c.extent)))continue;A=B.N();A=2==A||4==A||3==A&&!G;!A&&B.a&&(B=B.a);A=B.N();if(2==A){if(we(e.b,B.getKey())){d[n][B.L.toString()]=B;continue}}else if(4==A||3==A&&!G)continue;v=!1;A=Ie(m,B.L,C,J,E);A||(B=Le(m,B.L,J,E))&&C(n+1,B)}c=Object.keys(d).map(Number);c.sort(Ha);for(var C=new Float32Array(4),P,L,K,G=0,J=c.length;G<J;++G)for(P in L=d[c[G]],L)B=L[P],A=Je(m,B.L,E),H=2*(A[2]-A[0])/t,O=2*(A[3]-A[1])/t,K=2*(A[0]-w[0])/t-1,A=2*(A[1]-w[1])/t-1,yb(C,\nH,O,K,A),f.uniform4fv(this.b.c,C),fl(e,B,r,y*u),f.drawArrays(5,0,4);v?(this.g=q,this.u=w,this.h=l.f):(this.u=this.g=null,this.h=-1,b.animate=!0)}Qg(b.usedTiles,l,n,q);var fa=e.i;Sg(b,l,m,u,h,D,n,k.get(\"preload\"),function(b){var c;(c=2!=b.N()||we(e.b,b.getKey()))||(c=b.getKey()in fa.f);c||fa.c([b,Oe(m,b.L),m.I(b.L[0]),r,y*u])},this);Ng(b,l);Pg(b,l);f=this.D;Db(f);Fb(f,(z[0]-w[0])/(w[2]-w[0]),(z[1]-w[1])/(w[3]-w[1]));0!==g.rotation&&Hb(f,g.rotation);Gb(f,b.size[0]*g.resolution/(w[2]-w[0]),b.size[1]*\ng.resolution/(w[3]-w[1]));Fb(f,-.5,-.5);return!0};function gl(b,c){Zk.call(this,b,c);this.h=!1;this.K=-1;this.B=NaN;this.u=Jb();this.g=this.b=this.w=null}M(gl,Zk);p=gl.prototype;p.Nc=function(b,c,d){this.g=c;var e=b.viewState,f=this.b;f&&!f.c()&&f.f(d,e.center,e.resolution,e.rotation,b.size,b.pixelRatio,c.opacity,c.eb?b.skippedFeatureUids:{})};p.J=function(){var b=this.b;b&&(Pk(b,this.c.g)(),this.b=null);gl.X.J.call(this)};\np.fb=function(b,c,d,e){if(this.b&&this.g){var f=c.viewState,g=this.a,h={};return this.b.g(b,this.c.g,f.center,f.resolution,f.rotation,c.size,c.pixelRatio,this.g.opacity,{},function(b){var c=I(b).toString();if(!(c in h))return h[c]=!0,d.call(e,b,g)})}};p.Ic=function(b,c){if(this.b&&this.g){var d=c.viewState;return Uk(this.b,b,this.c.g,d.resolution,d.rotation,this.g.opacity,c.skippedFeatureUids)}return!1};p.Pc=function(){Mg(this)};\np.Oc=function(b,c,d){function e(b){var c,d=b.c;d?c=d.call(b,m):(d=f.g)&&(c=d(b,m));if(c){if(c){d=!1;if(Array.isArray(c))for(var e=0,g=c.length;e<g;++e)d=vj(r,b,c[e],uj(m,n),this.Pc,this)||d;else d=vj(r,b,c,uj(m,n),this.Pc,this)||d;b=d}else b=!1;this.h=this.h||b}}var f=this.a;c=f.V();Og(b.attributions,c.i);Pg(b,c);var g=b.viewHints[0],h=b.viewHints[1],k=f.i,l=f.j;if(!this.h&&!k&&g||!l&&h)return!0;var h=b.extent,k=b.viewState,g=k.projection,m=k.resolution,n=b.pixelRatio,k=f.f,q=f.a,l=f.get(\"renderOrder\");\nvoid 0===l&&(l=tj);h=Lb(h,q*m);if(!this.h&&this.B==m&&this.K==k&&this.w==l&&Nb(this.u,h))return!0;this.b&&b.postRenderFunctions.push(Pk(this.b,d));this.h=!1;var r=new Ok(.5*m/n,h,f.a);Zj(c,h,m,g);if(l){var u=[];Xj(c,h,function(b){u.push(b)},this);u.sort(l);u.forEach(e,this)}else Xj(c,h,e,this);Qk(r,d);this.B=m;this.K=k;this.w=l;this.u=h;this.b=r;return!0};function hl(b,c){Zg.call(this,0,c);this.a=document.createElement(\"CANVAS\");this.a.style.width=\"100%\";this.a.style.height=\"100%\";this.a.className=\"ol-unselectable\";fe(b,this.a,0);this.s=this.u=0;this.H=rf();this.j=!0;this.c=xf(this.a,{antialias:!0,depth:!1,failIfMajorPerformanceCaveat:!0,preserveDrawingBuffer:!1,stencil:!0});this.g=new yk(this.a,this.c);Q(this.a,\"webglcontextlost\",this.ne,this);Q(this.a,\"webglcontextrestored\",this.oe,this);this.b=new ve;this.o=null;this.i=new dh(function(b){var c=\nb[1];b=b[2];var f=c[0]-this.o[0],c=c[1]-this.o[1];return 65536*Math.log(b)+Math.sqrt(f*f+c*c)/b}.bind(this),function(b){return b[0].getKey()});this.w=function(){if(0!==this.i.a.length){hh(this.i);var b=eh(this.i);fl(this,b[0],b[3],b[4])}return!1}.bind(this);this.l=0;il(this)}M(hl,Zg);\nfunction fl(b,c,d,e){var f=b.c,g=c.getKey();if(we(b.b,g))b=b.b.get(g),f.bindTexture(3553,b.ya),9729!=b.Cc&&(f.texParameteri(3553,10240,9729),b.Cc=9729),9729!=b.Dc&&(f.texParameteri(3553,10240,9729),b.Dc=9729);else{var h=f.createTexture();f.bindTexture(3553,h);if(0<e){var k=b.H.canvas,l=b.H;b.u!==d[0]||b.s!==d[1]?(k.width=d[0],k.height=d[1],b.u=d[0],b.s=d[1]):l.clearRect(0,0,d[0],d[1]);l.drawImage(c.T(),e,e,d[0],d[1],0,0,d[0],d[1]);f.texImage2D(3553,0,6408,6408,5121,k)}else f.texImage2D(3553,0,6408,\n6408,5121,c.T());f.texParameteri(3553,10240,9729);f.texParameteri(3553,10241,9729);f.texParameteri(3553,10242,33071);f.texParameteri(3553,10243,33071);b.b.set(g,{ya:h,Cc:9729,Dc:9729})}}p=hl.prototype;p.Jb=function(b){return b instanceof X?new el(this,b):b instanceof Y?new gl(this,b):null};function jl(b,c,d){var e=b.h;if(nb(e,c)){b=b.g;var f=d.viewState;S(e,new Fg(c,e,new Vk(b,f.center,f.resolution,f.rotation,d.size,d.extent),d,null,b))}}\np.J=function(){var b=this.c;b.isContextLost()||xe(this.b,function(c){c&&b.deleteTexture(c.ya)});jb(this.g);hl.X.J.call(this)};p.md=function(b,c){for(var d=this.c,e;1024<this.b.f-this.l;){if(e=this.b.a.Ia)d.deleteTexture(e.ya);else if(+this.b.a.Rb==c.index)break;else--this.l;this.b.pop()}};p.U=function(){return\"webgl\"};p.ne=function(b){b.preventDefault();this.b.clear();this.l=0;b=this.f;for(var c in b)b[c].s()};p.oe=function(){il(this);this.h.render()};\nfunction il(b){b=b.c;b.activeTexture(33984);b.blendFuncSeparate(770,771,1,771);b.disable(2884);b.disable(2929);b.disable(3089);b.disable(2960)}\np.sb=function(b){var c=this.g,d=this.c;if(d.isContextLost())return!1;if(!b)return this.j&&(oe(this.a,!1),this.j=!1),!1;this.o=b.focus;this.b.set((-b.index).toString(),null);++this.l;jl(this,\"precompose\",b);var e=[],f=b.layerStatesArray;Na(f);var g=b.viewState.resolution,h,k,l,m;h=0;for(k=f.length;h<k;++h)m=f[h],Hg(m,g)&&\"ready\"==m.$b&&(l=bh(this,m.layer),l.Oc(b,m,c)&&e.push(m));f=b.size[0]*b.pixelRatio;g=b.size[1]*b.pixelRatio;if(this.a.width!=f||this.a.height!=g)this.a.width=f,this.a.height=g;d.bindFramebuffer(36160,\nnull);d.clearColor(0,0,0,0);d.clear(16384);d.enable(3042);d.viewport(0,0,this.a.width,this.a.height);h=0;for(k=e.length;h<k;++h)m=e[h],l=bh(this,m.layer),l.Nc(b,m,c);this.j||(oe(this.a,!0),this.j=!0);$g(b);1024<this.b.f-this.l&&b.postRenderFunctions.push(this.md.bind(this));0!==this.i.a.length&&(b.postRenderFunctions.push(this.w),b.animate=!0);jl(this,\"postcompose\",b);ch(this,b);b.postRenderFunctions.push(ah)};\np.Wb=function(b,c,d,e,f,g){var h;if(this.c.isContextLost())return!1;var k=c.viewState,l=c.layerStatesArray,m;for(m=l.length-1;0<=m;--m){h=l[m];var n=h.layer;if(Hg(h,k.resolution)&&f.call(g,n)&&(h=bh(this,n).fb(b,c,d,e)))return h}};p.Jc=function(b,c,d,e){var f=!1;if(this.c.isContextLost())return!1;var g=c.viewState,h=c.layerStatesArray,k;for(k=h.length-1;0<=k;--k){var l=h[k],m=l.layer;if(Hg(l,g.resolution)&&d.call(e,m)&&(f=bh(this,m).Ic(b,c)))return!0}return f};var kl=[\"canvas\",\"webgl\",\"dom\"];\nfunction Z(b){T.call(this);var c=ll(b);this.Ja=void 0!==b.loadTilesWhileAnimating?b.loadTilesWhileAnimating:!1;this.wb=void 0!==b.loadTilesWhileInteracting?b.loadTilesWhileInteracting:!1;this.yb=void 0!==b.pixelRatio?b.pixelRatio:Df;this.xb=c.logos;this.pa=function(){this.h=void 0;this.Ce.call(this,Date.now())}.bind(this);this.Aa=zb();this.zb=zb();this.Ba=0;this.b=null;this.ea=Jb();this.u=this.G=null;this.a=document.createElement(\"DIV\");this.a.className=\"ol-viewport\"+(Gf?\" ol-touch\":\"\");this.a.style.position=\n\"relative\";this.a.style.overflow=\"hidden\";this.a.style.width=\"100%\";this.a.style.height=\"100%\";this.a.style.msTouchAction=\"none\";this.a.style.touchAction=\"none\";this.o=document.createElement(\"DIV\");this.o.className=\"ol-overlaycontainer\";this.a.appendChild(this.o);this.j=document.createElement(\"DIV\");this.j.className=\"ol-overlaycontainer-stopevent\";b=[\"click\",\"dblclick\",\"mousedown\",\"touchstart\",\"mspointerdown\",yg,\"mousewheel\",\"wheel\"];for(var d=0,e=b.length;d<e;++d)Q(this.j,b[d],kb);this.a.appendChild(this.j);\nthis.Y=new qg(this);for(var f in Bg)Q(this.Y,Bg[f],this.yc,this);this.S=c.keyboardEventTarget;this.i=null;Q(this.a,\"wheel\",this.Oa,this);Q(this.a,\"mousewheel\",this.Oa,this);this.s=c.controls;this.g=c.interactions;this.w=c.overlays;this.Tc={};this.D=new c.De(this.a,this);this.P=null;this.B=[];this.aa=[];this.na=new ih(this.vd.bind(this),this.Qd.bind(this));this.Ab={};Q(this,rb(\"layergroup\"),this.Ad,this);Q(this,rb(\"view\"),this.Rd,this);Q(this,rb(\"size\"),this.Nd,this);Q(this,rb(\"target\"),this.Pd,this);\nthis.l(c.values);nd(this.s,function(b){b.setMap(this)},this);Q(this.s,\"add\",function(b){b.element.setMap(this)},this);Q(this.s,\"remove\",function(b){b.element.setMap(null)},this);nd(this.g,function(b){b.setMap(this)},this);Q(this.g,\"add\",function(b){b.element.setMap(this)},this);Q(this.g,\"remove\",function(b){b.element.setMap(null)},this);nd(this.w,this.gc,this);Q(this.w,\"add\",function(b){this.gc(b.element)},this);Q(this.w,\"remove\",function(b){var c=b.element.La();void 0!==c&&delete this.Tc[c.toString()];\nb.element.setMap(null)},this)}M(Z,T);p=Z.prototype;p.hd=function(b){this.s.push(b)};p.jd=function(b){this.g.push(b)};p.kd=function(b){ml(this).get(\"layers\").push(b)};p.ld=function(b){this.w.push(b)};p.gc=function(b){var c=b.La();void 0!==c&&(this.Tc[c.toString()]=b);b.setMap(this)};p.fa=function(b){this.render();Array.prototype.push.apply(this.B,arguments)};\np.J=function(){jb(this.Y);jb(this.D);gb(this.a,\"wheel\",this.Oa,this);gb(this.a,\"mousewheel\",this.Oa,this);void 0!==this.c&&(x.removeEventListener(\"resize\",this.c,!1),this.c=void 0);this.h&&(x.cancelAnimationFrame(this.h),this.h=void 0);this.set(\"target\",null);Z.X.J.call(this)};p.pd=function(b,c,d,e,f){if(this.b)return b=this.ta(b),this.D.Wb(b,this.b,c,void 0!==d?d:null,void 0!==e?e:cc,void 0!==f?f:null)};\np.Td=function(b,c,d){if(!this.b)return!1;b=this.ta(b);return this.D.Jc(b,this.b,void 0!==c?c:cc,void 0!==d?d:null)};p.vc=function(b){var c=this.a.getBoundingClientRect();b=b.changedTouches?b.changedTouches[0]:b;return[b.clientX-c.left,b.clientY-c.top]};p.Tb=function(){return this.get(\"target\")};p.Na=function(){var b=this.Tb();return void 0!==b?Zd(b):null};p.ta=function(b){var c=this.b;return c?(b=b.slice(),Kg(c.pixelToCoordinateMatrix,b,b)):null};function ml(b){return b.get(\"layergroup\")}\nfunction Eh(b,c){var d=b.b;if(d){var e=c.slice(0,2);return Kg(d.coordinateToPixelMatrix,e,e)}return null}p.Pa=function(){return this.get(\"size\")};p.O=function(){return this.get(\"view\")};p.vd=function(b,c,d,e){var f=this.b;if(!(f&&c in f.wantedTiles&&f.wantedTiles[c][b.L.toString()]))return Infinity;b=d[0]-f.focus[0];d=d[1]-f.focus[1];return 65536*Math.log(e)+Math.sqrt(b*b+d*d)/e};p.Oa=function(b,c){var d=new og(c||b.type,this,b);this.yc(d)};\np.yc=function(b){if(this.b){this.P=b.coordinate;b.frameState=this.b;var c=this.g.a,d;if(!1!==S(this,b))for(d=c.length-1;0<=d;d--){var e=c[d];if(e.get(\"active\")&&!e.handleEvent(b))break}}};\np.Md=function(){var b=this.b,c=this.na;if(0!==c.a.length){var d=16,e=d;if(b){var f=b.viewHints;f[0]&&(d=this.Ja?8:0,e=2);f[1]&&(d=this.wb?8:0,e=2)}if(c.h<d){hh(c);for(var f=0,g,h;c.h<d&&f<e&&0<c.a.length;)g=eh(c)[0],h=g.getKey(),0!==g.N()||h in c.g||(c.g[h]=!0,++c.h,++f,g.load())}}c=this.aa;d=0;for(e=c.length;d<e;++d)c[d](this,b);c.length=0};p.Nd=function(){this.render()};\np.Pd=function(){var b;this.Tb()&&(b=this.Na());if(this.i){for(var c=0,d=this.i.length;c<d;++c)N(this.i[c]);this.i=null}b?(b.appendChild(this.a),b=this.S?this.S:b,this.i=[Q(b,\"keydown\",this.Oa,this),Q(b,\"keypress\",this.Oa,this)],this.c||(this.c=this.vb.bind(this),x.addEventListener(\"resize\",this.c,!1))):(ge(this.a),void 0!==this.c&&(x.removeEventListener(\"resize\",this.c,!1),this.c=void 0));this.vb()};p.Qd=function(){this.render()};p.Sd=function(){this.render()};\np.Rd=function(){this.G&&(N(this.G),this.G=null);var b=this.O();b&&(this.G=Q(b,\"propertychange\",this.Sd,this));this.render()};p.Bd=function(){this.render()};p.Cd=function(){this.render()};p.Ad=function(){this.u&&(this.u.forEach(N),this.u=null);var b=ml(this);b&&(this.u=[Q(b,\"propertychange\",this.Cd,this),Q(b,\"change\",this.Bd,this)]);this.render()};p.render=function(){void 0===this.h&&(this.h=x.requestAnimationFrame(this.pa))};p.ze=function(b){return this.g.remove(b)};p.Ae=function(b){return ml(this).get(\"layers\").remove(b)};\np.Ce=function(b){var c,d,e,f=this.Pa(),g=this.O(),h=null;if(c=void 0!==f&&0<f[0]&&0<f[1]&&g)c=!!g.ia()&&void 0!==g.I();if(c){var h=g.g.slice(),k=ml(this).Lb(),l={};c=0;for(d=k.length;c<d;++c)l[I(k[c].layer)]=k[c];e=g.N();h={animate:!1,attributions:{},coordinateToPixelMatrix:this.Aa,extent:null,focus:this.P?this.P:e.center,index:this.Ba++,layerStates:l,layerStatesArray:k,logos:Wa({},this.xb),pixelRatio:this.yb,pixelToCoordinateMatrix:this.zb,postRenderFunctions:[],size:f,skippedFeatureUids:this.Ab,\ntileQueue:this.na,time:b,usedTiles:{},viewState:e,viewHints:h,wantedTiles:{}}}if(h){b=this.B;c=f=0;for(d=b.length;c<d;++c)g=b[c],g(this,h)&&(b[f++]=g);b.length=f;h.extent=Zb(e.center,e.resolution,e.rotation,h.size)}this.b=h;this.D.sb(h);h&&(h.animate&&this.render(),Array.prototype.push.apply(this.aa,h.postRenderFunctions),0!==this.B.length||h.viewHints[0]||h.viewHints[1]||Rb(h.extent,this.ea)||(S(this,new te(\"moveend\",this,h)),Mb(h.extent,this.ea)));S(this,new te(\"postrender\",this,h));c=e=this.Md;\nthis&&(c=ma(e,this));!ga(x.setImmediate)||x.Window&&x.Window.prototype&&!W(\"Edge\")&&x.Window.prototype.setImmediate==x.setImmediate?(lf||(lf=mf()),lf(c)):x.setImmediate(c)};\np.vb=function(){var b=this.Na();if(b){var c=Yd(b),d=Gd&&b.currentStyle,e;if(e=d)Wd(c),e=!0;if(e&&\"auto\"!=d.width&&\"auto\"!=d.height&&!d.boxSizing)c=pe(b,d.width,\"width\",\"pixelWidth\"),b=pe(b,d.height,\"height\",\"pixelHeight\"),b=new Vd(c,b);else{d=new Vd(b.offsetWidth,b.offsetHeight);if(Gd){c=qe(b,\"paddingLeft\");e=qe(b,\"paddingRight\");var f=qe(b,\"paddingTop\"),g=qe(b,\"paddingBottom\"),c=new je(f,e,g,c)}else c=ke(b,\"paddingLeft\"),e=ke(b,\"paddingRight\"),f=ke(b,\"paddingTop\"),g=ke(b,\"paddingBottom\"),c=new je(parseFloat(f),\nparseFloat(e),parseFloat(g),parseFloat(c));!Gd||9<=Number(Sd)?(e=ke(b,\"borderLeftWidth\"),f=ke(b,\"borderRightWidth\"),g=ke(b,\"borderTopWidth\"),b=ke(b,\"borderBottomWidth\"),b=new je(parseFloat(g),parseFloat(f),parseFloat(b),parseFloat(e))):(e=se(b,\"borderLeft\"),f=se(b,\"borderRight\"),g=se(b,\"borderTop\"),b=se(b,\"borderBottom\"),b=new je(g,f,b,e));b=new Vd(d.width-b.left-c.left-c.right-b.right,d.height-b.top-c.top-c.bottom-b.bottom)}this.set(\"size\",[b.width,b.height])}else this.set(\"size\",void 0)};\nfunction ll(b){var c=null;void 0!==b.keyboardEventTarget&&(c=\"string\"===typeof b.keyboardEventTarget?document.getElementById(b.keyboardEventTarget):b.keyboardEventTarget);var d={},e={};if(void 0===b.logo||\"boolean\"===typeof b.logo&&b.logo)e[\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAMAAABEpIrGAAAAA3NCSVQICAjb4U/gAAAACXBIWXMAAAHGAAABxgEXwfpGAAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAAhNQTFRF////AP//AICAgP//AFVVQECA////K1VVSbbbYL/fJ05idsTYJFtbbcjbJllmZszWWMTOIFhoHlNiZszTa9DdUcHNHlNlV8XRIVdiasrUHlZjIVZjaMnVH1RlIFRkH1RkH1ZlasvYasvXVsPQH1VkacnVa8vWIVZjIFRjVMPQa8rXIVVkXsXRsNveIFVkIFZlIVVj3eDeh6GmbMvXH1ZkIFRka8rWbMvXIFVkIFVjIFVkbMvWH1VjbMvWIFVlbcvWIFVla8vVIFVkbMvWbMvVH1VkbMvWIFVlbcvWIFVkbcvVbMvWjNPbIFVkU8LPwMzNIFVkbczWIFVkbsvWbMvXIFVkRnB8bcvW2+TkW8XRIFVkIlZlJVloJlpoKlxrLl9tMmJwOWd0Omh1RXF8TneCT3iDUHiDU8LPVMLPVcLPVcPQVsPPVsPQV8PQWMTQWsTQW8TQXMXSXsXRX4SNX8bSYMfTYcfTYsfTY8jUZcfSZsnUaIqTacrVasrVa8jTa8rWbI2VbMvWbcvWdJObdcvUdszUd8vVeJaee87Yfc3WgJyjhqGnitDYjaarldPZnrK2oNbborW5o9bbo9fbpLa6q9ndrL3ArtndscDDutzfu8fJwN7gwt7gxc/QyuHhy+HizeHi0NfX0+Pj19zb1+Tj2uXk29/e3uLg3+Lh3+bl4uXj4ufl4+fl5Ofl5ufl5ujm5+jmySDnBAAAAFp0Uk5TAAECAgMEBAYHCA0NDg4UGRogIiMmKSssLzU7PkJJT1JTVFliY2hrdHZ3foSFhYeJjY2QkpugqbG1tre5w8zQ09XY3uXn6+zx8vT09vf4+Pj5+fr6/P39/f3+gz7SsAAAAVVJREFUOMtjYKA7EBDnwCPLrObS1BRiLoJLnte6CQy8FLHLCzs2QUG4FjZ5GbcmBDDjxJBXDWxCBrb8aM4zbkIDzpLYnAcE9VXlJSWlZRU13koIeW57mGx5XjoMZEUqwxWYQaQbSzLSkYGfKFSe0QMsX5WbjgY0YS4MBplemI4BdGBW+DQ11eZiymfqQuXZIjqwyadPNoSZ4L+0FVM6e+oGI6g8a9iKNT3o8kVzNkzRg5lgl7p4wyRUL9Yt2jAxVh6mQCogae6GmflI8p0r13VFWTHBQ0rWPW7ahgWVcPm+9cuLoyy4kCJDzCm6d8PSFoh0zvQNC5OjDJhQopPPJqph1doJBUD5tnkbZiUEqaCnB3bTqLTFG1bPn71kw4b+GFdpLElKIzRxxgYgWNYc5SCENVHKeUaltHdXx0dZ8uBI1hJ2UUDgq82CM2MwKeibqAvSO7MCABq0wXEPiqWEAAAAAElFTkSuQmCC\"]=\n\"http://openlayers.org/\";else{var f=b.logo;\"string\"===typeof f?e[f]=\"\":ha(f)&&(e[f.src]=f.href)}f=b.layers instanceof gi?b.layers:new gi({layers:b.layers});d.layergroup=f;d.target=b.target;d.view=void 0!==b.view?b.view:new V;var f=Zg,g;void 0!==b.renderer?Array.isArray(b.renderer)?g=b.renderer:\"string\"===typeof b.renderer&&(g=[b.renderer]):g=kl;var h,k;h=0;for(k=g.length;h<k;++h){var l=g[h];if(\"canvas\"==l){if(Ff){f=ik;break}}else if(\"dom\"==l){f=pk;break}else if(\"webgl\"==l&&yf){f=hl;break}}var m;void 0!==\nb.controls?m=Array.isArray(b.controls)?new ld(b.controls.slice()):b.controls:m=ef();if(void 0!==b.interactions)g=Array.isArray(b.interactions)?new ld(b.interactions.slice()):b.interactions;else{g={};h=new ld;k=new jh;(void 0!==g.altShiftDragRotate?g.altShiftDragRotate:1)&&h.push(new Fh);(void 0!==g.doubleClickZoom?g.doubleClickZoom:1)&&h.push(new ph({delta:g.zoomDelta,duration:g.zoomDuration}));(void 0!==g.dragPan?g.dragPan:1)&&h.push(new Ah({kinetic:k}));(void 0!==g.pinchRotate?g.pinchRotate:1)&&\nh.push(new Zh);(void 0!==g.pinchZoom?g.pinchZoom:1)&&h.push(new ci({duration:g.zoomDuration}));if(void 0!==g.keyboard?g.keyboard:1)h.push(new Th),h.push(new Vh({delta:g.zoomDelta,duration:g.zoomDuration}));(void 0!==g.mouseWheelZoom?g.mouseWheelZoom:1)&&h.push(new Xh({duration:g.zoomDuration}));(void 0!==g.shiftDragZoom?g.shiftDragZoom:1)&&h.push(new Sh({duration:g.zoomDuration}));g=h}b=void 0!==b.overlays?Array.isArray(b.overlays)?new ld(b.overlays.slice()):b.overlays:new ld;return{controls:m,interactions:g,\nkeyboardEventTarget:c,logos:e,overlays:b,De:f,values:d}}mc(li);mc(si);si.forEach(function(b){li.forEach(function(c){nc(b,c,mi);nc(c,b,ni)})});function nl(b){T.call(this);this.j=b.id;this.i=void 0!==b.insertFirst?b.insertFirst:!0;this.o=void 0!==b.stopEvent?b.stopEvent:!0;this.b=document.createElement(\"DIV\");this.b.className=\"ol-overlay-container\";this.b.style.position=\"absolute\";this.autoPan=void 0!==b.autoPan?b.autoPan:!1;this.g=void 0!==b.autoPanAnimation?b.autoPanAnimation:{};this.h=void 0!==b.autoPanMargin?b.autoPanMargin:20;this.a={hb:\"\",pb:\"\",tb:\"\",ub:\"\",visible:!0};this.c=null;Q(this,rb(\"element\"),this.yd,this);Q(this,rb(\"map\"),\nthis.Hd,this);Q(this,rb(\"offset\"),this.Id,this);Q(this,rb(\"position\"),this.Kd,this);Q(this,rb(\"positioning\"),this.Ld,this);void 0!==b.element&&this.set(\"element\",b.element);this.set(\"offset\",void 0!==b.offset?b.offset:[0,0]);this.set(\"positioning\",void 0!==b.positioning?b.positioning:\"top-left\");void 0!==b.position&&this.Ec(b.position)}M(nl,T);p=nl.prototype;p.La=function(){return this.j};p.yd=function(){ee(this.b);var b=this.get(\"element\");b&&this.b.appendChild(b)};\np.Hd=function(){this.c&&(ge(this.b),N(this.c),this.c=null);var b=this.get(\"map\");b&&(this.c=Q(b,\"postrender\",this.render,this),pl(this),b=this.o?b.j:b.o,this.i?fe(b,this.b,0):b.appendChild(this.b))};p.render=function(){pl(this)};p.Id=function(){pl(this)};\np.Kd=function(){pl(this);if(void 0!==this.get(\"position\")&&this.autoPan){var b=this.get(\"map\");if(void 0!==b&&b.Na()){var c=ql(b.Na(),b.Pa()),d=this.get(\"element\"),e=d.offsetWidth,f=d.currentStyle||x.getComputedStyle(d),e=e+(parseInt(f.marginLeft,10)+parseInt(f.marginRight,10)),f=d.offsetHeight,g=d.currentStyle||x.getComputedStyle(d),f=f+(parseInt(g.marginTop,10)+parseInt(g.marginBottom,10)),h=ql(d,[e,f]),d=this.h;Nb(c,h)||(e=h[0]-c[0],f=c[2]-h[2],g=h[1]-c[1],h=c[3]-h[3],c=[0,0],0>e?c[0]=e-d:0>f&&\n(c[0]=Math.abs(f)+d),0>g?c[1]=g-d:0>h&&(c[1]=Math.abs(h)+d),0===c[0]&&0===c[1])||(d=b.O().ia(),e=Eh(b,d),c=[e[0]+c[0],e[1]+c[1]],this.g&&(this.g.source=d,b.fa(cd(this.g))),b.O().oa(b.ta(c)))}}};p.Ld=function(){pl(this)};p.setMap=function(b){this.set(\"map\",b)};p.Ec=function(b){this.set(\"position\",b)};\nfunction ql(b,c){var d=Yd(b),e=new Ud(0,0),f;f=d?Yd(d):document;var g;(g=!Gd||9<=Number(Sd))||(Wd(f),g=!0);b!=(g?f.documentElement:f.body)&&(f=le(b),g=Wd(d).a,d=g.scrollingElement?g.scrollingElement:Jd?g.body||g.documentElement:g.documentElement,g=g.parentWindow||g.defaultView,d=Gd&&Qd(\"10\")&&g.pageYOffset!=d.scrollTop?new Ud(d.scrollLeft,d.scrollTop):new Ud(g.pageXOffset||d.scrollLeft,g.pageYOffset||d.scrollTop),e.x=f.left+d.x,e.y=f.top+d.y);return[e.x,e.y,e.x+c[0],e.y+c[1]]}\nfunction rl(b,c){b.a.visible!==c&&(oe(b.b,c),b.a.visible=c)}\nfunction pl(b){var c=b.get(\"map\"),d=b.get(\"position\");if(void 0!==c&&c.b&&void 0!==d){var d=Eh(c,d),e=c.Pa(),c=b.b.style,f=b.get(\"offset\"),g=b.get(\"positioning\"),h=f[0],f=f[1];if(\"bottom-right\"==g||\"center-right\"==g||\"top-right\"==g)\"\"!==b.a.pb&&(b.a.pb=c.left=\"\"),h=Math.round(e[0]-d[0]-h)+\"px\",b.a.tb!=h&&(b.a.tb=c.right=h);else{\"\"!==b.a.tb&&(b.a.tb=c.right=\"\");if(\"bottom-center\"==g||\"center-center\"==g||\"top-center\"==g)h-=me(b.b).width/2;h=Math.round(d[0]+h)+\"px\";b.a.pb!=h&&(b.a.pb=c.left=h)}if(\"bottom-left\"==\ng||\"bottom-center\"==g||\"bottom-right\"==g)\"\"!==b.a.ub&&(b.a.ub=c.top=\"\"),d=Math.round(e[1]-d[1]-f)+\"px\",b.a.hb!=d&&(b.a.hb=c.bottom=d);else{\"\"!==b.a.hb&&(b.a.hb=c.bottom=\"\");if(\"center-left\"==g||\"center-center\"==g||\"center-right\"==g)f-=me(b.b).height/2;d=Math.round(d[1]+f)+\"px\";b.a.ub!=d&&(b.a.ub=c.top=d)}rl(b,!0)}else rl(b,!1)};function sl(){this.defaultDataProjection=null}function tl(b,c,d){var e;d&&(e={dataProjection:d.dataProjection?d.dataProjection:b.f(Ij(c)),featureProjection:d.featureProjection});var f;e&&(f={featureProjection:e.featureProjection,dataProjection:e.dataProjection?e.dataProjection:b.defaultDataProjection,rightHanded:e.rightHanded},e.decimals&&(f.decimals=e.decimals));return f}\nfunction ul(b,c){var d=c?lc(c.featureProjection):null,e=c?lc(c.dataProjection):null;if(d&&e&&!wc(d,e))if(b instanceof zc)d=b.o(e,d);else{e=xc(e,d);d=[b[0],b[1],b[0],b[3],b[2],b[1],b[2],b[3]];e(d,d,2);var f=[d[0],d[2],d[4],d[6]],g=[d[1],d[3],d[5],d[7]],d=Math.min.apply(null,f),e=Math.min.apply(null,g),f=Math.max.apply(null,f),g=Math.max.apply(null,g),d=Ob(d,e,f,g,void 0)}else d=b;return d};function vl(){this.defaultDataProjection=null}M(vl,sl);function Ij(b){return ha(b)?b:\"string\"===typeof b?(b=JSON.parse(b))?b:null:null}vl.prototype.U=function(){return\"json\"};vl.prototype.g=function(b,c){return this.a(Ij(b),tl(this,b,c))};vl.prototype.b=function(b,c){return this.h(Ij(b),tl(this,b,c))};function wl(b,c,d,e,f){var g=NaN,h=NaN,k=(d-c)/e;if(0!==k)if(1==k)g=b[c],h=b[c+1];else if(2==k)g=.5*b[c]+.5*b[c+e],h=.5*b[c+1]+.5*b[c+e+1];else{var h=b[c],k=b[c+1],l=0,g=[0],m;for(m=c+e;m<d;m+=e){var n=b[m],q=b[m+1],l=l+Math.sqrt((n-h)*(n-h)+(q-k)*(q-k));g.push(l);h=n;k=q}d=.5*l;l=0;m=g.length;for(n=!1;l<m;)h=l+(m-l>>1),k=+Ha(g[h],d),0>k?l=h+1:(m=h,n=!k);h=n?l:~l;0>h?(d=(d-g[-h-2])/(g[-h-1]-g[-h-2]),c+=(-h-2)*e,g=b[c],g=g+d*(b[c+e]-g),h=b[c+1],h=h+d*(b[c+e+1]-h)):(g=b[c+h*e],h=b[c+h*e+1])}return f?\n(f[0]=g,f[1]=h,f):[g,h]};function xl(b,c){Bc.call(this);this.c=null;this.j=-1;this.W(b,c)}M(xl,Bc);p=xl.prototype;p.clone=function(){var b=new xl(null);U(b,this.g,this.a.slice());b.v();return b};p.ra=function(){return Hc(this.a,0,this.a.length,this.b)};function Ti(b){if(b.j!=b.f){var c;c=wl(b.a,0,b.a.length,b.b,b.c);b.c=c;b.j=b.f}return b.c}p.Ma=function(b){var c=[];c.length=Jc(this.a,0,this.a.length,this.b,b,c,0);b=new xl(null);U(b,\"XY\",c);b.v();return b};p.U=function(){return\"LineString\"};\np.W=function(b,c){b?(Dc(this,c,b,1),this.a||(this.a=[]),this.a.length=Fc(this.a,0,b,this.b)):U(this,\"XY\",null);this.v()};function yl(b,c){Bc.call(this);this.c=[];this.W(b,c)}M(yl,Bc);p=yl.prototype;p.clone=function(){var b=new yl(null),c=this.c.slice();U(b,this.g,this.a.slice());b.c=c;b.v();return b};p.ra=function(){return Ic(this.a,0,this.c,this.b)};p.ab=function(){return this.c};function Ui(b){var c=[],d=b.a,e=0,f=b.c;b=b.b;var g,h;g=0;for(h=f.length;g<h;++g){var k=f[g],e=wl(d,e,k,b);Ka(c,e);e=k}return c}\np.Ma=function(b){var c=[],d=[],e=this.a,f=this.c,g=this.b,h=0,k=0,l,m;l=0;for(m=f.length;l<m;++l){var n=f[l],k=Jc(e,h,n,g,b,c,k);d.push(k);h=n}c.length=k;b=new yl(null);U(b,\"XY\",c);b.c=d;b.v();return b};p.U=function(){return\"MultiLineString\"};p.W=function(b,c){if(b){Dc(this,c,b,2);this.a||(this.a=[]);var d=Gc(this.a,0,b,this.b,this.c);this.a.length=0===d.length?0:d[d.length-1]}else d=this.c,U(this,\"XY\",null),this.c=d;this.v()};function zl(b,c){Bc.call(this);this.W(b,c)}M(zl,Bc);zl.prototype.clone=function(){var b=new zl(null);U(b,this.g,this.a.slice());b.v();return b};zl.prototype.ra=function(){return Hc(this.a,0,this.a.length,this.b)};zl.prototype.U=function(){return\"MultiPoint\"};zl.prototype.W=function(b,c){b?(Dc(this,c,b,1),this.a||(this.a=[]),this.a.length=Fc(this.a,0,b,this.b)):U(this,\"XY\",null);this.v()};function Al(b,c){Bc.call(this);this.c=[];this.B=-1;this.D=null;this.G=-1;this.j=null;this.W(b,c)}M(Al,Bc);p=Al.prototype;p.clone=function(){for(var b=new Al(null),c=this.c.length,d=Array(c),e=0;e<c;++e)d[e]=this.c[e].slice();U(b,this.g,this.a.slice());b.c=d;b.v();return b};p.ra=function(b){var c;void 0!==b?(c=Vi(this).slice(),Sc(c,this.c,this.b,b)):c=this.a;b=c;c=this.c;var d=this.b,e=0,f=[],g=0,h,k;h=0;for(k=c.length;h<k;++h){var l=c[h];f[g++]=Ic(b,e,l,d,f[g]);e=l[l.length-1]}f.length=g;return f};\nfunction Wi(b){if(b.B!=b.f){var c=b.a,d=b.c,e=b.b,f=0,g=[],h,k,l=Jb();h=0;for(k=d.length;h<k;++h){var m=d[h],l=c,n=m[0],q=e,r=Pb(void 0),l=Tb(r,l,f,n,q);g.push((l[0]+l[2])/2,(l[1]+l[3])/2);f=m[m.length-1]}c=Vi(b);d=b.c;e=b.b;h=0;k=[];m=0;for(l=d.length;m<l;++m)f=d[m],k=Oc(c,h,f,e,g,2*m,k),h=f[f.length-1];b.D=k;b.B=b.f}return b.D}\nfunction Vi(b){if(b.G!=b.f){var c=b.a,d;a:{d=b.c;var e,f;e=0;for(f=d.length;e<f;++e)if(!Qc(c,d[e],b.b,void 0)){d=!1;break a}d=!0}d?b.j=c:(b.j=c.slice(),b.j.length=Sc(b.j,b.c,b.b));b.G=b.f}return b.j}p.Ma=function(b){var c=[],d=[],e=this.a,f=this.c,g=this.b;b=Math.sqrt(b);var h=0,k=0,l,m;l=0;for(m=f.length;l<m;++l){var n=f[l],q=[],k=Kc(e,h,n,g,b,c,k,q);d.push(q);h=n[n.length-1]}c.length=k;e=new Al(null);U(e,\"XY\",c);e.c=d;e.v();return e};p.U=function(){return\"MultiPolygon\"};\np.W=function(b,c){if(b){Dc(this,c,b,3);this.a||(this.a=[]);var d=this.a,e=this.b,f=this.c,g=0,f=f?f:[],h=0,k,l;k=0;for(l=b.length;k<l;++k)g=Gc(d,g,b[k],e,f[h]),f[h++]=g,g=g[g.length-1];f.length=h;0===f.length?this.a.length=0:(d=f[f.length-1],this.a.length=0===d.length?0:d[d.length-1])}else d=this.c,U(this,\"XY\",null),this.c=d;this.v()};function Bl(b){b=b?b:{};this.defaultDataProjection=null;this.c=b.geometryName}M(Bl,vl);function Cl(b){var c=\"XY\";!0===b.hasZ&&!0===b.hasM?c=\"XYZM\":!0===b.hasZ?c=\"XYZ\":!0===b.hasM&&(c=\"XYM\");return c}\nvar Dl={Point:function(b){return void 0!==b.m&&void 0!==b.z?new Mc([b.x,b.y,b.z,b.m],\"XYZM\"):void 0!==b.z?new Mc([b.x,b.y,b.z],\"XYZ\"):void 0!==b.m?new Mc([b.x,b.y,b.m],\"XYM\"):new Mc([b.x,b.y])},LineString:function(b){return new xl(b.paths[0],Cl(b))},Polygon:function(b){return new Tc(b.rings,Cl(b))},MultiPoint:function(b){return new zl(b.points,Cl(b))},MultiLineString:function(b){return new yl(b.paths,Cl(b))},MultiPolygon:function(b){return new Al(b.rings,Cl(b))}};\nBl.prototype.a=function(b,c){var d;if(d=b.geometry){var e;if(ea(d.x)&&ea(d.y))e=\"Point\";else if(d.points)e=\"MultiPoint\";else if(d.paths)e=1===d.paths.length?\"LineString\":\"MultiLineString\";else if(d.rings){var f=d.rings,g=Cl(d),h=[];e=[];var k,l;k=0;for(l=f.length;k<l;++k){var m=Ja(f[k]);Pc(m,0,m.length,g.length)?h.push([f[k]]):e.push(f[k])}for(;e.length;){f=e.shift();g=!1;for(k=h.length-1;0<=k;k--)if(Nb((new Lc(h[k][0])).C(),(new Lc(f)).C())){h[k].push(f);g=!0;break}g||h.push([f.reverse()])}d=Wa({},\nd);1===h.length?(e=\"Polygon\",d.rings=h[0]):(e=\"MultiPolygon\",d.rings=h)}d=ul((0,Dl[e])(d),c)}else d=null;h=new Dj;this.c&&Fj(h,this.c);Ej(h,d);c&&c.Qb&&b.attributes[c.Qb]&&(h.g=b.attributes[c.Qb],h.v());b.attributes&&h.l(b.attributes);return h};Bl.prototype.h=function(b,c){var d=c?c:{};if(b.features){var e=[],f=b.features,g,h;d.Qb=b.objectIdFieldName;g=0;for(h=f.length;g<h;++g)e.push(this.a(f[g],d));return e}return[this.a(b,d)]};\nBl.prototype.f=function(b){return b.spatialReference&&b.spatialReference.wkid?lc(\"EPSG:\"+b.spatialReference.wkid):null};function El(b){zc.call(this);this.a=b?b:null;Fl(this)}M(El,zc);function Gl(b){var c,d;if(b.a)for(c=0,d=b.a.length;c<d;++c)gb(b.a[c],\"change\",b.v,b)}function Fl(b){var c,d;if(b.a)for(c=0,d=b.a.length;c<d;++c)Q(b.a[c],\"change\",b.v,b)}p=El.prototype;p.clone=function(){var b=new El(null),c=this.a,d=[],e,f;e=0;for(f=c.length;e<f;++e)d.push(c[e].clone());Gl(b);b.a=d;Fl(b);b.v();return b};p.ib=function(b){Pb(b);for(var c=this.a,d=0,e=c.length;d<e;++d)Sb(b,c[d].C());return b};\np.Ob=function(b){this.s!=this.f&&(Ya(this.h),this.i=0,this.s=this.f);if(0>b||0!==this.i&&b<this.i)return this;var c=b.toString();if(this.h.hasOwnProperty(c))return this.h[c];var d=[],e=this.a,f=!1,g,h;g=0;for(h=e.length;g<h;++g){var k=e[g],l=k.Ob(b);d.push(l);l!==k&&(f=!0)}if(f)return b=new El(null),Gl(b),b.a=d,Fl(b),b.v(),this.h[c]=b;this.i=b;return this};p.U=function(){return\"GeometryCollection\"};p.rotate=function(b,c){for(var d=this.a,e=0,f=d.length;e<f;++e)d[e].rotate(b,c);this.v()};\np.Eb=function(b){var c=this.a,d,e;d=0;for(e=c.length;d<e;++d)c[d].Eb(b);this.v()};p.J=function(){Gl(this);El.X.J.call(this)};function Hl(b){b=b?b:{};this.defaultDataProjection=null;this.defaultDataProjection=lc(b.defaultDataProjection?b.defaultDataProjection:\"EPSG:4326\");this.c=b.geometryName}M(Hl,vl);function Il(b,c){return b?ul((0,Jl[b.type])(b),c):null}\nvar Jl={Point:function(b){return new Mc(b.coordinates)},LineString:function(b){return new xl(b.coordinates)},Polygon:function(b){return new Tc(b.coordinates)},MultiPoint:function(b){return new zl(b.coordinates)},MultiLineString:function(b){return new yl(b.coordinates)},MultiPolygon:function(b){return new Al(b.coordinates)},GeometryCollection:function(b,c){var d=b.geometries.map(function(b){return Il(b,c)});return new El(d)}};\nHl.prototype.a=function(b,c){var d=Il(b.geometry,c),e=new Dj;this.c&&Fj(e,this.c);Ej(e,d);void 0!==b.id&&(e.g=b.id,e.v());b.properties&&e.l(b.properties);return e};Hl.prototype.h=function(b,c){if(\"Feature\"==b.type)return[this.a(b,c)];if(\"FeatureCollection\"==b.type){var d=[],e=b.features,f,g;f=0;for(g=e.length;f<g;++f)d.push(this.a(e[f],c));return d}return[]};Hl.prototype.f=function(b){return(b=b.crs)?\"name\"==b.type?lc(b.properties.name):\"EPSG\"==b.type?lc(\"EPSG:\"+b.properties.code):null:this.defaultDataProjection};function Kl(b,c,d){if(\"array\"==ba(c))for(var e=0;e<c.length;e++)Kl(b,String(c[e]),d);else null!=c&&d.push(\"&\",b,\"\"===c?\"\":\"=\",encodeURIComponent(String(c)))};function Ll(b,c,d){Bc.call(this);Ml(this,b,c?c:0,d)}M(Ll,Bc);Ll.prototype.clone=function(){var b=new Ll(null);U(b,this.g,this.a.slice());b.v();return b};Ll.prototype.ib=function(b){var c=this.a,d=c[this.b]-c[0];return Ob(c[0]-d,c[1]-d,c[0]+d,c[1]+d,b)};Ll.prototype.U=function(){return\"Circle\"};function Ml(b,c,d,e){if(c){Dc(b,e,c,0);b.a||(b.a=[]);e=b.a;c=Ec(e,c);e[c++]=e[0]+d;var f;d=1;for(f=b.b;d<f;++d)e[c++]=e[d];e.length=c}else U(b,\"XY\",null);b.v()};function Nl(b,c,d,e,f){Be.call(this,b,c);this.g=d;this.b=new Image;null!==e&&(this.b.crossOrigin=e);this.f={};this.c=null;this.h=f}M(Nl,Be);p=Nl.prototype;p.J=function(){1==this.state&&Ol(this);this.a&&jb(this.a);this.state=5;Ce(this);Nl.X.J.call(this)};p.T=function(b){if(void 0!==b){var c=I(b);if(c in this.f)return this.f[c];b=$a(this.f)?this.b:this.b.cloneNode(!1);return this.f[c]=b}return this.b};p.getKey=function(){return this.g};p.ie=function(){this.state=3;Ol(this);Ce(this)};\np.je=function(){this.state=this.b.naturalWidth&&this.b.naturalHeight?2:4;Ol(this);Ce(this)};p.load=function(){0==this.state&&(this.state=1,Ce(this),this.c=[Q(this.b,\"error\",this.ie,this,!0),Q(this.b,\"load\",this.je,this,!0)],this.h(this,this.g))};function Ol(b){b.c.forEach(N);b.c=null};function Pl(b,c){R.call(this,b);this.feature=c}M(Pl,R);\nfunction Ql(b){xh.call(this,{handleDownEvent:Rl,handleEvent:Sl,handleUpEvent:Tl});this.P=null;this.o=!1;this.Ba=b.source?b.source:null;this.pa=b.features?b.features:null;this.Zc=b.snapTolerance?b.snapTolerance:12;this.D=b.type;this.b=Ul(this.D);this.na=b.minPoints?b.minPoints:this.b===Vl?3:2;this.ea=b.maxPoints?b.maxPoints:Infinity;var c=b.geometryFunction;if(!c)if(\"Circle\"===this.D)c=function(b,c){var d=c?c:new Ll([NaN,NaN]),h=b[0],k=b[1],l=h[0]-k[0],h=h[1]-k[1];Ml(d,b[0],Math.sqrt(l*l+h*h));return d};\nelse{var d,c=this.b;c===Xl?d=Mc:c===Yl?d=xl:c===Vl&&(d=Tc);c=function(b,c){var g=c;g?g.W(b):g=new d(b);return g}}this.u=c;this.B=this.i=this.a=this.j=this.g=this.h=null;this.gd=b.clickTolerance?b.clickTolerance*b.clickTolerance:36;this.Y=new Y({source:new Rj({useSpatialIndex:!1,wrapX:b.wrapX?b.wrapX:!1}),style:b.style?b.style:Zl()});this.Aa=b.geometryName;this.Ab=b.condition?b.condition:th;this.aa=b.freehandCondition?b.freehandCondition:uh;Q(this,rb(\"active\"),this.Ja,this)}M(Ql,xh);\nfunction Zl(){var b=Li();return function(c){return b[c.M().U()]}}Ql.prototype.setMap=function(b){Ql.X.setMap.call(this,b);this.Ja()};function Sl(b){this.b!==Yl&&this.b!==Vl||!this.aa(b)||(this.o=!0);var c=!this.o;this.o&&b.type===Ag?($l(this,b),c=!1):b.type===zg?c=am(this,b):b.type===tg&&(c=!1);return yh.call(this,b)&&c}function Rl(b){return this.Ab(b)?(this.P=b.pixel,!0):this.o?(this.P=b.pixel,this.h||bm(this,b),!0):!1}\nfunction Tl(b){this.o=!1;var c=this.P,d=b.pixel,e=c[0]-d[0],c=c[1]-d[1],d=!0;e*e+c*c<=this.gd&&(am(this,b),this.h?this.b===cm?dm(this):em(this,b)?dm(this):$l(this,b):(bm(this,b),this.b===Xl&&dm(this)),d=!1);return d}\nfunction am(b,c){if(b.h){var d=c.coordinate,e=b.g.M(),f;b.b===Xl?f=b.a:b.b===Vl?(f=b.a[0],f=f[f.length-1],em(b,c)&&(d=b.h.slice())):(f=b.a,f=f[f.length-1]);f[0]=d[0];f[1]=d[1];b.u(b.a,e);b.j&&b.j.M().W(d);e instanceof Tc&&b.b!==Vl?(b.i||(b.i=new Dj(new xl(null))),0>=e.c.length?e=null:(d=new Lc(null),U(d,e.g,e.a.slice(0,e.c[0])),d.v(),e=d),d=b.i.M(),U(d,e.g,e.a),d.v()):b.B&&(d=b.i.M(),d.W(b.B));fm(b)}else e=c.coordinate.slice(),b.j?b.j.M().W(e):(b.j=new Dj(new Mc(e)),fm(b));return!0}\nfunction em(b,c){var d=!1;if(b.g){var e=!1,f=[b.h];b.b===Yl?e=b.a.length>b.na:b.b===Vl&&(e=b.a[0].length>b.na,f=[b.a[0][0],b.a[0][b.a[0].length-2]]);if(e)for(var e=c.map,g=0,h=f.length;g<h;g++){var k=f[g],l=Eh(e,k),m=c.pixel,d=m[0]-l[0],l=m[1]-l[1],m=b.o&&b.aa(c)?1:b.Zc;if(d=Math.sqrt(d*d+l*l)<=m){b.h=k;break}}}return d}\nfunction bm(b,c){var d=c.coordinate;b.h=d;b.b===Xl?b.a=d.slice():b.b===Vl?(b.a=[[d.slice(),d.slice()]],b.B=b.a[0]):(b.a=[d.slice(),d.slice()],b.b===cm&&(b.B=b.a));b.B&&(b.i=new Dj(new xl(b.B)));d=b.u(b.a);b.g=new Dj;b.Aa&&Fj(b.g,b.Aa);Ej(b.g,d);fm(b);S(b,new Pl(\"drawstart\",b.g))}\nfunction $l(b,c){var d=c.coordinate,e=b.g.M(),f,g;if(b.b===Yl)b.h=d.slice(),g=b.a,g.push(d.slice()),f=g.length>b.ea,b.u(g,e);else if(b.b===Vl){g=b.a[0];g.push(d.slice());if(f=g.length>b.ea)b.h=g[0];b.u(b.a,e)}fm(b);f&&dm(b)}\nfunction dm(b){var c=gm(b),d=b.a,e=c.M();b.b===Yl?(d.pop(),b.u(d,e)):b.b===Vl&&(d[0].pop(),d[0].push(d[0][0]),b.u(d,e));\"MultiPoint\"===b.D?Ej(c,new zl([d])):\"MultiLineString\"===b.D?Ej(c,new yl([d])):\"MultiPolygon\"===b.D&&Ej(c,new Al([d]));S(b,new Pl(\"drawend\",c));b.pa&&b.pa.push(c);b.Ba&&b.Ba.Cb(c)}function gm(b){b.h=null;var c=b.g;c&&(b.g=null,b.j=null,b.i=null,b.Y.V().clear(!0));return c}Ql.prototype.w=dc;\nfunction fm(b){var c=[];b.g&&c.push(b.g);b.i&&c.push(b.i);b.j&&c.push(b.j);b=b.Y.V();b.clear(!0);b.Db(c)}Ql.prototype.Ja=function(){var b=this.S,c=this.get(\"active\");b&&c||gm(this);this.Y.setMap(c?b:null)};function Ul(b){var c;\"Point\"===b||\"MultiPoint\"===b?c=Xl:\"LineString\"===b||\"MultiLineString\"===b?c=Yl:\"Polygon\"===b||\"MultiPolygon\"===b?c=Vl:\"Circle\"===b&&(c=cm);return c}var Xl=\"Point\",Yl=\"LineString\",Vl=\"Polygon\",cm=\"Circle\";function hm(b,c,d,e,f,g,h,k,l,m,n){Be.call(this,f,0);this.u=void 0!==n?n:!1;this.s=h;this.o=k;this.c=null;this.f={};this.g=c;this.l=e;this.i=g?g:f;this.b=[];this.Sa=null;this.h=0;g=Je(e,this.i);k=this.l.C();f=this.g.C();g=k?$b(g,k):g;if(0===Ub(g))this.state=4;else if((k=b.C())&&(f?f=$b(f,k):f=k),k=e.I(this.i[0]),n=Yb(g),e=xc(d,b)(n,void 0,n.length),k=d.getPointResolution(k,n),n=pc(d),void 0!==n&&(k*=n),n=pc(b),void 0!==n&&(k/=n),e=b.getPointResolution(k,e)/k,isFinite(e)&&0<e&&(k/=e),e=k,!isFinite(e)||\n0>=e)this.state=4;else if(this.j=new Aj(b,d,g,f,e*(void 0!==m?m:.5)),0===this.j.c.length)this.state=4;else if(this.h=Qe(c,e),d=Cj(this.j),f&&(b.a?(d[1]=Ca(d[1],f[1],f[3]),d[3]=Ca(d[3],f[1],f[3])):d=$b(d,f)),Ub(d))if(b=Ke(c,d,this.h),100>b.ha()*(b.c-b.b+1)){for(c=b.a;c<=b.f;c++)for(d=b.b;d<=b.c;d++)(m=l(this.h,c,d,h))&&this.b.push(m);0===this.b.length&&(this.state=4)}else this.state=3;else this.state=4}M(hm,Be);hm.prototype.J=function(){1==this.state&&(this.Sa.forEach(N),this.Sa=null);hm.X.J.call(this)};\nhm.prototype.T=function(b){if(void 0!==b){var c=I(b);if(c in this.f)return this.f[c];b=$a(this.f)?this.c:this.c.cloneNode(!1);return this.f[c]=b}return this.c};\nhm.prototype.Uc=function(){var b=[];this.b.forEach(function(c){c&&2==c.N()&&b.push({extent:Je(this.g,c.L),image:c.T()})},this);this.b.length=0;if(0===b.length)this.state=3;else{var c=this.i[0],d=Pe(this.l,c),e=ea(d)?d:d[0],d=ea(d)?d:d[1],c=this.l.I(c),f=this.g.I(this.h),g=Je(this.l,this.i);this.c=zj(e,d,this.s,f,this.g.C(),c,g,this.j,b,this.o,this.u);this.state=2}Ce(this)};\nhm.prototype.load=function(){if(0==this.state){this.state=1;Ce(this);var b=0;this.Sa=[];this.b.forEach(function(c){var d=c.N();if(0==d||1==d){b++;var e;e=Q(c,\"change\",function(){var d=c.N();if(2==d||3==d||4==d)N(e),b--,0===b&&(this.Sa.forEach(N),this.Sa=null,this.Uc())},this);this.Sa.push(e)}},this);this.b.forEach(function(b){0==b.N()&&b.load()});0===b&&x.setTimeout(this.Uc.bind(this),0)}};function im(b){gk.call(this,{attributions:b.attributions,cacheSize:b.cacheSize,extent:b.extent,logo:b.logo,opaque:b.opaque,projection:b.projection,state:b.state,tileGrid:b.tileGrid,tileLoadFunction:b.tileLoadFunction?b.tileLoadFunction:jm,tilePixelRatio:b.tilePixelRatio,tileUrlFunction:b.tileUrlFunction,url:b.url,urls:b.urls,wrapX:b.wrapX});this.crossOrigin=void 0!==b.crossOrigin?b.crossOrigin:null;this.tileClass=void 0!==b.tileClass?b.tileClass:Nl;this.b={};this.o={};this.S=b.reprojectionErrorThreshold}\nM(im,gk);p=im.prototype;p.Qc=function(){if(ze(this.a))return!0;for(var b in this.b)if(ze(this.b[b]))return!0;return!1};p.Rc=function(b,c){var d=this.bb(b);Ae(this.a,this.a==d?c:{});for(var e in this.b){var f=this.b[e];Ae(f,f==d?c:{})}};p.kb=function(){return 0};p.Mb=function(b){return this.c&&b&&!wc(this.c,b)?!1:im.X.Mb.call(this,b)};p.la=function(b){var c=this.c;return!this.tileGrid||c&&!wc(c,b)?(c=I(b).toString(),c in this.o||(this.o[c]=Se(b)),this.o[c]):this.tileGrid};\np.bb=function(b){var c=this.c;if(!c||wc(c,b))return this.a;b=I(b).toString();b in this.b||(this.b[b]=new ye);return this.b[b]};function km(b,c,d,e,f,g){c=[c,d,e];f=(d=Ye(b,c,g))?b.tileUrlFunction(d,f,g):void 0;f=new b.tileClass(c,void 0!==f?0:4,void 0!==f?f:\"\",b.crossOrigin,b.tileLoadFunction);f.key=\"\";Q(f,\"change\",b.D,b);return f}\nfunction Tg(b,c,d,e,f,g){if(b.c&&g&&!wc(b.c,g)){var h=b.bb(g);d=[c,d,e];c=b.lb.apply(b,d);if(we(h,c))return h.get(c);var k=b.c;e=b.la(k);var l=b.la(g),m=Ye(b,d,g);b=new hm(k,e,g,l,d,m,b.mb(f),0,function(b,c,d,e){return lm(this,b,c,d,e,k)}.bind(b),b.S,!1);h.set(c,b);return b}return lm(b,c,d,e,f,g)}\nfunction lm(b,c,d,e,f,g){var h=null,k=b.lb(c,d,e);if(we(b.a,k)){if(h=b.a.get(k),\"\"!=h.key){var l=h;h.a&&\"\"==h.a.key?(h=h.a,2==l.N()&&(h.a=l)):(h=km(b,c,d,e,f,g),2==l.N()?h.a=l:l.a&&2==l.a.N()&&(h.a=l.a,l.a=null));h.a&&(h.a.a=null);b.a.replace(k,h)}}else h=km(b,c,d,e,f,g),b.a.set(k,h);return h}function jm(b,c){b.T().src=c};function mm(b){var c=void 0!==b.projection?b.projection:\"EPSG:3857\",d;if(void 0!==b.tileGrid)d=b.tileGrid;else{d={extent:Te(c),maxZoom:b.maxZoom,minZoom:b.minZoom,tileSize:b.tileSize};var e={};Wa(e,void 0!==d?d:{});void 0===e.extent&&(e.extent=lc(\"EPSG:3857\").C());e.resolutions=Ue(e.extent,e.maxZoom,e.tileSize);delete e.maxZoom;d=new Fe(e)}im.call(this,{attributions:b.attributions,cacheSize:b.cacheSize,crossOrigin:b.crossOrigin,logo:b.logo,opaque:b.opaque,projection:c,reprojectionErrorThreshold:b.reprojectionErrorThreshold,\ntileGrid:d,tileLoadFunction:b.tileLoadFunction,tilePixelRatio:b.tilePixelRatio,tileUrlFunction:b.tileUrlFunction,url:b.url,urls:b.urls,wrapX:void 0!==b.wrapX?b.wrapX:!0})}M(mm,im);function nm(b){b=b||{};var c;void 0!==b.attributions?c=b.attributions:c=[om];mm.call(this,{attributions:c,cacheSize:b.cacheSize,crossOrigin:void 0!==b.crossOrigin?b.crossOrigin:\"anonymous\",opaque:void 0!==b.opaque?b.opaque:!0,maxZoom:void 0!==b.maxZoom?b.maxZoom:19,reprojectionErrorThreshold:b.reprojectionErrorThreshold,tileLoadFunction:b.tileLoadFunction,url:void 0!==b.url?b.url:\"https://{a-c}.tile.openstreetmap.org/{z}/{x}/{y}.png\",wrapX:b.wrapX})}M(nm,mm);var om=new jd({html:'&copy; <a href=\"http://www.openstreetmap.org/copyright\">OpenStreetMap</a> contributors.'});function pm(b){b=b||{};var c=qm[b.layer];this.u=b.layer;mm.call(this,{attributions:c.attributions,cacheSize:b.cacheSize,crossOrigin:\"anonymous\",logo:\"https://developer.mapquest.com/content/osm/mq_logo.png\",maxZoom:c.maxZoom,reprojectionErrorThreshold:b.reprojectionErrorThreshold,opaque:c.opaque,tileLoadFunction:b.tileLoadFunction,url:void 0!==b.url?b.url:\"https://otile{1-4}-s.mqcdn.com/tiles/1.0.0/\"+this.u+\"/{z}/{x}/{y}.jpg\"})}M(pm,mm);\nvar rm=new jd({html:'Tiles Courtesy of <a href=\"http://www.mapquest.com/\">MapQuest</a>'}),qm={osm:{maxZoom:19,opaque:!0,attributions:[rm,om]},sat:{maxZoom:18,opaque:!0,attributions:[rm,new jd({html:\"Portions Courtesy NASA/JPL-Caltech and U.S. Depart. of Agriculture, Farm Service Agency\"})]},hyb:{maxZoom:18,opaque:!1,attributions:[rm,om]}};function sm(b){b=b||{};im.call(this,{attributions:b.attributions,cacheSize:b.cacheSize,crossOrigin:b.crossOrigin,logo:b.logo,projection:b.projection,reprojectionErrorThreshold:b.reprojectionErrorThreshold,tileGrid:b.tileGrid,tileLoadFunction:b.tileLoadFunction,url:b.url,urls:b.urls,wrapX:void 0!==b.wrapX?b.wrapX:!0});this.P=b.params||{};this.u=Jb()}M(sm,im);sm.prototype.mb=function(b){return b};\nsm.prototype.g=function(b,c,d){var e=this.tileGrid;e||(e=this.la(d));if(!(e.Nb().length<=b[0])){var f=Je(e,b,this.u),g=tb(Pe(e,b[0]),this.h);1!=c&&(g=sb(g,c,this.h));e={F:\"image\",FORMAT:\"PNG32\",TRANSPARENT:!0};Wa(e,this.P);var h;var k=this.urls;if(k){d=d.qa.split(\":\").pop();e.SIZE=g[0]+\",\"+g[1];e.BBOX=f.join(\",\");e.BBOXSR=d;e.IMAGESR=d;e.DPI=Math.round(e.DPI?e.DPI*c:90*c);b=[(1==k.length?k[0]:k[Ea((b[1]<<b[0])+b[2],k.length)]).replace(/MapServer\\/?$/,\"MapServer/export\").replace(/ImageServer\\/?$/,\n\"ImageServer/exportImage\")];for(h in e)Kl(h,e[h],b);b[1]&&(h=b[0],c=h.indexOf(\"#\"),0<=c&&(b.push(h.substr(c)),b[0]=h=h.substr(0,c)),c=h.indexOf(\"?\"),0>c?b[1]=\"?\":c==h.length-1&&(b[1]=void 0));h=b.join(\"\")}else h=void 0;return h}};F(\"ol.format.GeoJSON\",Hl,OPENLAYERS);Hl.prototype.readFeatures=Hl.prototype.b;Hl.prototype.readFeature=Hl.prototype.g;F(\"ol.format.EsriJSON\",Bl,OPENLAYERS);Bl.prototype.readFeatures=Bl.prototype.b;Bl.prototype.readFeature=Bl.prototype.g;F(\"ol.style.Style\",Fi,OPENLAYERS);F(\"ol.style.Circle\",Ei,OPENLAYERS);F(\"ol.style.Fill\",yi,OPENLAYERS);F(\"ol.style.Stroke\",Di,OPENLAYERS);F(\"ol.style.Icon\",Vg,OPENLAYERS);F(\"ol.View\",V,OPENLAYERS);V.prototype.on=V.prototype.ba;V.prototype.getZoom=V.prototype.wd;\nV.prototype.setZoom=V.prototype.Ee;V.prototype.getCenter=V.prototype.ia;V.prototype.setCenter=V.prototype.oa;V.prototype.calculateExtent=V.prototype.jc;V.prototype.getProjection=V.prototype.le;V.prototype.fit=V.prototype.nd;F(\"ol.control.defaults\",ef,OPENLAYERS);F(\"ol.layer.Tile\",X,OPENLAYERS);X.prototype.getVisible=X.prototype.cb;X.prototype.setVisible=X.prototype.Gc;X.prototype.getZIndex=X.prototype.Vb;X.prototype.setZIndex=X.prototype.Hc;X.prototype.getOpacity=X.prototype.Ub;\nX.prototype.setOpacity=X.prototype.Fc;X.prototype.getSource=X.prototype.V;X.prototype.setSource=X.prototype.Zb;F(\"ol.layer.Vector\",Y,OPENLAYERS);Y.prototype.getVisible=Y.prototype.cb;Y.prototype.setVisible=Y.prototype.Gc;Y.prototype.getSource=Y.prototype.V;Y.prototype.setStyle=Y.prototype.s;Y.prototype.getZIndex=Y.prototype.Vb;Y.prototype.setZIndex=Y.prototype.Hc;Y.prototype.getOpacity=Y.prototype.Ub;Y.prototype.setOpacity=Y.prototype.Fc;Y.prototype.getSource=Y.prototype.V;Y.prototype.setSource=Y.prototype.Zb;\nF(\"ol.source.OSM\",nm,OPENLAYERS);nm.prototype.refresh=nm.prototype.wa;F(\"ol.source.MapQuest\",pm,OPENLAYERS);pm.prototype.refresh=pm.prototype.wa;F(\"ol.source.XYZ\",mm,OPENLAYERS);mm.prototype.refresh=mm.prototype.wa;mm.prototype.setUrl=mm.prototype.s;mm.prototype.refresh=mm.prototype.wa;F(\"ol.Map\",Z,OPENLAYERS);Z.prototype.on=Z.prototype.ba;Z.prototype.getTarget=Z.prototype.Tb;Z.prototype.getTargetElement=Z.prototype.Na;Z.prototype.getView=Z.prototype.O;Z.prototype.addOverlay=Z.prototype.ld;\nZ.prototype.addLayer=Z.prototype.kd;Z.prototype.removeLayer=Z.prototype.Ae;Z.prototype.getEventPixel=Z.prototype.vc;Z.prototype.hasFeatureAtPixel=Z.prototype.Td;Z.prototype.getSize=Z.prototype.Pa;Z.prototype.updateSize=Z.prototype.vb;Z.prototype.forEachFeatureAtPixel=Z.prototype.pd;Z.prototype.addInteraction=Z.prototype.jd;Z.prototype.removeInteraction=Z.prototype.ze;Z.prototype.beforeRender=Z.prototype.fa;Z.prototype.addControl=Z.prototype.hd;F(\"ol.source.Vector\",Rj,OPENLAYERS);\nRj.prototype.getFeatures=Rj.prototype.pe;Rj.prototype.getExtent=Rj.prototype.C;Rj.prototype.refresh=Rj.prototype.wa;Rj.prototype.addFeatures=Rj.prototype.Db;Rj.prototype.addFeature=Rj.prototype.Cb;Rj.prototype.clear=Rj.prototype.clear;Rj.prototype.forEachFeature=Rj.prototype.od;Rj.prototype.refresh=Rj.prototype.wa;F(\"ol.source.TileArcGISRest\",sm,OPENLAYERS);sm.prototype.refresh=sm.prototype.wa;F(\"ol.Overlay\",nl,OPENLAYERS);nl.prototype.setPosition=nl.prototype.Ec;F(\"ol.Feature\",Dj,OPENLAYERS);\nDj.prototype.getProperties=Dj.prototype.za;Dj.prototype.setProperties=Dj.prototype.l;Dj.prototype.getGeometry=Dj.prototype.M;F(\"ol.geom.Point\",Mc,OPENLAYERS);Mc.prototype.transform=Mc.prototype.o;Mc.prototype.getCoordinates=Mc.prototype.ra;Mc.prototype.getExtent=Mc.prototype.C;F(\"ol.geom.Polygon\",Tc,OPENLAYERS);Tc.prototype.getCoordinates=Tc.prototype.ra;Tc.prototype.getExtent=Tc.prototype.C;Tc.prototype.transform=Tc.prototype.o;F(\"ol.geom.LineString\",xl,OPENLAYERS);xl.prototype.getCoordinates=xl.prototype.ra;\nxl.prototype.getExtent=xl.prototype.C;xl.prototype.transform=xl.prototype.o;F(\"ol.proj.Projection\",ic,OPENLAYERS);ic.prototype.getCode=ic.prototype.l;F(\"ol.interaction.Draw\",Ql,OPENLAYERS);Ql.prototype.on=Ql.prototype.ba;F(\"ol.animation.pan\",cd,OPENLAYERS);F(\"ol.control.FullScreen\",kf,OPENLAYERS);\n  return OPENLAYERS.ol;\n}));\n\n","const ol = require('./ol-build');\n\nexport default ol;","/**\r\n * Created by gavorhes on 12/11/2015.\r\n */\r\nimport provide from './provide';\r\nlet nm = provide('util.checkDefined');\r\n\r\n/**\r\n * check if the input is undefined or null\r\n * @param {*} input - input pointer\r\n * @returns {boolean} true undefined or null\r\n */\r\nexport function undefinedOrNull (input){\r\n    \"use strict\";\r\n\r\n    return (typeof input === 'undefined' || input === null);\r\n}\r\n\r\nnm.undefinedOrNull = undefinedOrNull;\r\n\r\n\r\n/**\r\n * check if the input is defined and not null\r\n * @param {*} input - input pointer\r\n * @returns {boolean} true defined and not null\r\n */\r\nexport function definedAndNotNull (input){\r\n    \"use strict\";\r\n\r\n    return !(undefinedOrNull(input));\r\n}\r\n\r\nnm.definedAndNotNull = definedAndNotNull;\r\n","/**\r\n * Created by gavorhes on 11/3/2015.\r\n */\r\nimport provide from './provide';\r\nimport * as chk from './checkDefined';\r\nlet nm = provide('util.colors');\r\n\r\n\r\n/**\r\n * helper function to convert to hex\r\n * @param {number|string} x - the number to convert to hex\r\n * @returns {string} number as hex\r\n * @private\r\n */\r\nfunction _hex(x) {\r\n    let hexDigits = [\"0\", \"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\", \"8\", \"9\", \"a\", \"b\", \"c\", \"d\", \"e\", \"f\"];\r\n\r\n    return isNaN(x) ? \"00\" : hexDigits[(x - x % 16) / 16] + hexDigits[x % 16];\r\n}\r\n\r\n/**\r\n * converts an RGB string to hex\r\n * @param {string} rgb - rgb color\r\n * @returns {string} rbg as hex\r\n */\r\nexport function rgb2hex(rgb) {\r\n    let rgb1 = rgb.match(/^rgb\\((\\d+),\\s*(\\d+),\\s*(\\d+)\\)$/);\r\n\r\n    return (\"#\" + _hex(rgb1[1]) + _hex(rgb1[2]) + _hex(rgb1[3])).toUpperCase();\r\n}\r\n\r\nnm.rgb2hex = rgb2hex;\r\n\r\n\r\n/**\r\n * Convert hex string to RGB or RGBA string\r\n * @param {string} hexString - hex color string\r\n * @param {number} [alphaVal=undefined] Alpha value\r\n * @returns {string} - rgb or rgba color\r\n */\r\nexport function hexAlphaToRgbOrRgba(hexString, alphaVal) {\r\n    hexString = ((hexString.charAt(0) == \"#\") ? hexString.substring(1, 7) : hexString);\r\n    let r = parseInt(hexString.substring(0, 2), 16).toString() || '0';\r\n    let g = parseInt(hexString.substring(2, 4), 16).toString() || '0';\r\n    let b = parseInt(hexString.substring(4, 6), 16).toString() || '0';\r\n    if (alphaVal) {\r\n        return `rgba(${r},${g},${b},${alphaVal})`;\r\n    } else {\r\n        return `rgba(${r},${g},${b})`;\r\n    }\r\n}\r\n\r\nnm.hexAlphaToRgbOrRgba = hexAlphaToRgbOrRgba;\r\n\r\n\r\n/**\r\n * adds alpha value to rgb string 'rgb(r, b, g)', returns 'rgba(r, g, b, a)'\r\n * @param {string} rgb - rgb color\r\n * @param {number} alpha - alpha value 0 to 1\r\n * @returns {string} rgba color\r\n */\r\nexport function rgbToRgba(rgb, alpha) {\r\n    let pieces = rgb.split(',');\r\n    pieces[0] = pieces[0].replace('rgb', 'rgba');\r\n    pieces[2] = pieces[2].replace(')', '');\r\n    pieces.push(' ' + alpha.toFixed(1) + ')');\r\n\r\n    return pieces.join(',');\r\n}\r\n\r\nnm.rgbToRgba = rgbToRgba;\r\n\r\n\r\n/**\r\n * @typedef {function} colorLookupByNumber\r\n * @param {number} num - the number to use to retrieve the color\r\n * @returns {string} rgb color\r\n */\r\n\r\n\r\n/**\r\n * Make a blue green red gradient\r\n * @param {number} minVal - minimum value\r\n * @param {number} maxVal - maximum value\r\n * @param {boolean} flipColors - if the colors should be flipped\r\n * @returns {colorLookupByNumber} color lookup function\r\n */\r\nexport function makeBlueGreenRedGradient(minVal, maxVal, flipColors) {\r\n\r\n    if (typeof flipColors != \"boolean\") {\r\n        flipColors = false;\r\n    }\r\n\r\n    return function (theVal) {\r\n        let r, g, b;\r\n        let ratio;\r\n\r\n        if (chk.undefinedOrNull(theVal)) {\r\n            return 'rgb(100,100,100)';\r\n        }\r\n\r\n        let percent = (theVal - minVal) / (maxVal - minVal);\r\n\r\n        if (flipColors == true) {\r\n            percent = 1 - percent;\r\n        }\r\n\r\n        if (percent >= 1) {\r\n            r = 255;\r\n            g = 0;\r\n            b = 0;\r\n        } else if (percent <= 0) {\r\n            r = 0;\r\n            g = 0;\r\n            b = 255;\r\n        } else if (percent < .25) {\r\n            // green up, blue constant\r\n            r = 0;\r\n            g = Math.floor(255 * percent / 0.25);\r\n            b = 255;\r\n        } else if (percent < 0.50) {\r\n            //blue down, green constant\r\n            ratio = (percent - 0.25) / 0.25;\r\n            r = 0;\r\n            g = 255;\r\n            b = 255 - Math.floor(255 * ratio);\r\n        } else if (percent < 0.75) {\r\n            // red up, green constant\r\n            ratio = (percent - 0.5) / 0.25;\r\n            r = Math.floor(255 * ratio);\r\n            g = 255;\r\n            b = 0;\r\n        } else {\r\n            // green down, red constant\r\n            ratio = (percent - 0.75) / 0.25;\r\n            r = 255;\r\n            g = 255 - Math.floor(255 * ratio);\r\n            b = 0;\r\n        }\r\n\r\n        r = r.toFixed();\r\n        g = g.toFixed();\r\n        b = b.toFixed();\r\n\r\n        return 'rgb(' + r + ',' + g + ',' + b + ')';\r\n    };\r\n}\r\n\r\nnm.makeBlueGreenRedGradient = makeBlueGreenRedGradient;\r\n\r\n\r\n/**\r\n * Create a function that will return colors based on a gradient\r\n * @param {number} median - median value\r\n * @param {number} stdDev - standard deviation\r\n * @param {boolean} flipColors - if the colors should be flipped\r\n * @returns {colorLookupByNumber} color lookup function\r\n */\r\nexport function makeBlueGreenRedGradientZScore(median, stdDev, flipColors) {\r\n\r\n    let grd = makeBlueGreenRedGradient(-2.5, 2.5, flipColors);\r\n\r\n    return function (theVal) {\r\n\r\n        let zScore;\r\n        if (theVal == null) {\r\n            zScore = null;\r\n        } else {\r\n            zScore = (theVal - median) / stdDev;\r\n        }\r\n\r\n        return grd(zScore);\r\n    };\r\n}\r\n\r\nnm.makeBlueGreenRedGradientZScore = makeBlueGreenRedGradientZScore;\r\n","/**\r\n * Created by gavorhes on 11/3/2015.\r\n */\r\n\r\nimport provide from './provide';\r\nlet nm = provide('util');\r\n\r\n\r\n/**\r\n * guids are used to uniquely identify groups and features\r\n * @returns {string} a new guid\r\n */\r\nfunction makeGuid() {\r\n        return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'\r\n            .replace(/[xy]/g, function (c) {\r\n                let r = Math.random() * 16 | 0, v = c == 'x' ? r : r & 0x3 | 0x8;\r\n\r\n                return v.toString(16);\r\n            });\r\n\r\n}\r\nnm.makeGuid = makeGuid;\r\nexport default makeGuid;\r\n\r\n\r\n","/**\r\n * Created by gavorhes on 12/10/2015.\r\n */\r\n\r\n\r\n/**\r\n * create a namespace on the gv object\r\n * @param {string} namespace to create\r\n * @returns {object} object representing the namespace\r\n */\r\nfunction provide(namespace){\r\n    \"use strict\";\r\n    if (typeof window.gv == 'undefined'){\r\n        window.gv = {};\r\n    }\r\n\r\n    let parts = namespace.split('.');\r\n    let nameSpace = window.gv;\r\n\r\n    for (let i=0; i< parts.length; i++){\r\n        let newObject = nameSpace[parts[i]];\r\n\r\n        if (typeof newObject == 'undefined'){\r\n            nameSpace[parts[i]] = {};\r\n        }\r\n\r\n        nameSpace = nameSpace[parts[i]];\r\n    }\r\n\r\n    return nameSpace;\r\n}\r\n\r\nprovide('util');\r\nwindow.gv.util.provide = provide;\r\n\r\nexport default provide;\r\n","/**\r\n * Created by gavorhes on 5/19/2016.\r\n */\r\n\r\nimport 'babel-polyfill';\r\nimport quickMap from '../src/olHelpers/quickMap';\r\nimport ItsLayerCollection from '../src/collections/ItsLayerCollection';\r\nimport LayerLegend from '../src/collections/LayerLegend';\r\nimport LayerItsInventory from '../src/layers/LayerItsInventory';\r\nimport LayerBaseVectorGeoJson from '../src/layers/LayerBaseVectorGeoJson';\r\nimport LayerEsriMapServer from '../src/layers/LayerEsriMapServer';\r\n\r\nlet map = quickMap({fullScreen: true});\r\n\r\n//\r\n// let inventLyr = new LayerItsInventory({name: 'Camera', itsType: 'cctv', minZoom: 4, itsIcon: 'cctv.png'});\r\n// map.addLayer(inventLyr.olLayer);\r\n//\r\n// inventLyr.visible = true;\r\n//\r\n// let newLayer = new LayerBaseVectorGeoJson('', {});\r\n//\r\n//\r\n//         let metamanagerSegments = new LayerEsriMapServer(\r\n//             'http://transportal.cee.wisc.edu/applications/arcgis2/rest/services/MetaManager/MM_All_Segments/MapServer',\r\n//             {\r\n//                 minZoom: 3,\r\n//                 visible: true,\r\n//                 name: 'Metamanager Segments',\r\n//                 opacity: 0.6\r\n//             });\r\n//\r\n// // console.log(metamanagerSegments.visible);\r\n//\r\n// map.addLayer(metamanagerSegments.olLayer);\r\n\r\n\r\n\r\n\r\nlet itsLayerCollection = new ItsLayerCollection(map);\r\n\r\nfor (let l of itsLayerCollection.layers){\r\n    console.log(l.visible);\r\n    console.log(l);\r\n}\r\n\r\n\r\nlet layerArray = [\r\n    {\r\n        groupName: 'ITS Inventory Layers',\r\n        collapse: false,\r\n        addCheck: true,\r\n        items: itsLayerCollection.layers\r\n    }\r\n];\r\n\r\nlet legend = new LayerLegend(layerArray, 'legend-container', {});\r\n\r\n\r\n\r\n","/**\r\n * Created by gavorhes on 5/5/2016.\r\n */\r\n\r\nimport quickMap from '../src/olHelpers/quickMap';\r\nimport cat from '../src/layers/LayerBaseVectorEsri';\r\n\r\nlet chai = require('chai');\r\n\r\ndescribe('karma test with Chai', function() {\r\n  it('should expose the Chai assert method', function() {\r\n    let map = quickMap();\r\n    // console.log(map);\r\n    assert.ok('everything', 'everything is ok');\r\n  });\r\n\r\n  it('should expose the Chai expect method', function() {\r\n    expect('foo').to.not.equal('bar');\r\n  });\r\n\r\n  it('should expose the Chai should property', function() {\r\n    should.exist(123);\r\n    (1).should.not.equal(2);\r\n  });\r\n\r\n  it('should work with ES6 fat arrow function', () => {\r\n    (1).should.not.equal(2);\r\n    (1).should.not.equal(2);\r\n    (2).should.not.equal(3);\r\n    (11).should.not.equal(12);\r\n    (11).should.not.equal(15);\r\n    (11).should.not.equal(12);\r\n    (11).should.not.equal(15);\r\n    // (11).should.not.equal(11);\r\n    // (11).should.not.equal(11);\r\n    // (2).should.not.equal(2);\r\n    // (2).should.not.equal(2);\r\n  });\r\n});\r\n\r\n\r\n\r\ndescribe('karma test with 2', function() {\r\n  it('should expose the Chai assert method', function() {\r\n    assert.ok('everything', 'everything is ok');\r\n  });\r\n\r\n  it('should expose the Chai expect method', function() {\r\n    expect('foo').to.not.equal('bar');\r\n  });\r\n\r\n  it('should expose the Chai should property', function() {\r\n    should.exist(123);\r\n    (1).should.not.equal(2);\r\n  });\r\n\r\n  it('should work with ES6 fat arrow function', () => {\r\n    (1).should.not.equal(2);\r\n    (1).should.not.equal(2);\r\n    // (2).should.not.equal(2);\r\n    // (2).should.not.equal(2);\r\n    // (2).should.not.equal(2);\r\n  });\r\n});\r\n\r\n\r\n\r\n","/**\r\n * Created by gavorhes on 5/5/2016.\r\n */\r\n\r\n\r\nimport quickMap from '../src/olHelpers/quickMap';\r\n\r\n// import quickMap from '../src/olHelpers/quickMap';\r\nlet chai = require('chai');\r\n\r\ndescribe('karma test with Chaiadfadf', function() {\r\n  it('should expose the Chai assert method', function() {\r\n    let map = quickMap();\r\n    // console.log(map);\r\n    assert.ok('everything', 'everything is ok');\r\n  });\r\n\r\n  it('should expose the Chai expect method', function() {\r\n    'foo'.should.not.equals('t');\r\n  });\r\n\r\n  it('should expose the Chai should property', function() {\r\n    should.exist(123);\r\n    (1).should.not.equal(2);\r\n  });\r\n\r\n  it('should work with ES6 fat arrow function', () => {\r\n    (1).should.not.equal(2);\r\n    (1).should.not.equal(2);\r\n    (2).should.not.equal(3);\r\n    (2).should.not.equal(3);\r\n    (2).should.not.equal(10);\r\n    (2).should.not.equal(10);\r\n    (2).should.not.equal(2);\r\n  });\r\n});\r\n\r\n\r\n\r\ndescribe('karma test with 2adfaasdf', function() {\r\n  it('should expose the Chai assert method', function() {\r\n    assert.ok('everything', 'everything is ok');\r\n  });\r\n\r\n  it('should expose the Chai expect method', function() {\r\n    \r\n    expect('foo').to.not.equal('bar');\r\n    expect('cat').to.equal('cat');\r\n    expect('cat').to.equal('bird');\r\n  });\r\n\r\n  it('should expose the Chai should property', function() {\r\n    should.exist(123);\r\n    (1).should.not.equal(2);\r\n  });\r\n\r\n  it('should work with ES6 fat arrow function', () => {\r\n    (1).should.not.equal(2);\r\n    (1).should.not.equal(2);\r\n    // (2).should.not.equal(2);\r\n    // (2).should.not.equal(2);\r\n    // (2).should.not.equal(2);\r\n  });\r\n});\r\n\r\n\r\n\r\n"]}
\ No newline at end of file
diff --git a/test-html/legend-test.html b/test-html/legend-test.html
new file mode 100644
index 0000000000000000000000000000000000000000..efe4537cb61ea9f8e032e43f836339bc6f8f6869
--- /dev/null
+++ b/test-html/legend-test.html
@@ -0,0 +1,59 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta charset="UTF-8">
+    <title>Title</title>
+    <link rel="stylesheet" href="../css/all-ol-style.css">
+    <style>
+        body, html{
+            height: 100%;
+            width: 100%;
+            margin: 0;
+            padding: 0;
+        }
+
+        #container {
+            display: flex;
+            height: 100%;
+            width: 100%
+        }
+
+        #container > div{
+            height: 100%
+        }
+
+        #left {
+            width: 300px;
+        }
+
+        #left:fullscreen{
+            display: none;
+        }
+
+        #map{
+            flex: 1;
+        }
+
+        #map:fullscreen{
+            width: 100%;
+        }
+
+    </style>
+</head>
+<body>
+<div id="container">
+    <div id="left">
+        <div id="legend-container"></div>
+    </div>
+    <div id="map"></div>
+
+</div>
+<script>
+//    document.addEventListener('fullscreenchange', function() {
+//  document.body.classList.toggle('is-fullscreen', document.fullscreenEnabled);
+//});
+</script>
+
+<script src="../test-build/legend-test.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/test/legend-test.js b/test/legend-test.js
new file mode 100644
index 0000000000000000000000000000000000000000..216458b8a6ba22436bac59e6a7d8ffee680ec590
--- /dev/null
+++ b/test/legend-test.js
@@ -0,0 +1,60 @@
+/**
+ * Created by gavorhes on 5/19/2016.
+ */
+
+import 'babel-polyfill';
+import quickMap from '../src/olHelpers/quickMap';
+import ItsLayerCollection from '../src/collections/ItsLayerCollection';
+import LayerLegend from '../src/collections/LayerLegend';
+import LayerItsInventory from '../src/layers/LayerItsInventory';
+import LayerBaseVectorGeoJson from '../src/layers/LayerBaseVectorGeoJson';
+import LayerEsriMapServer from '../src/layers/LayerEsriMapServer';
+
+let map = quickMap({fullScreen: true});
+
+//
+// let inventLyr = new LayerItsInventory({name: 'Camera', itsType: 'cctv', minZoom: 4, itsIcon: 'cctv.png'});
+// map.addLayer(inventLyr.olLayer);
+//
+// inventLyr.visible = true;
+//
+// let newLayer = new LayerBaseVectorGeoJson('', {});
+//
+//
+//         let metamanagerSegments = new LayerEsriMapServer(
+//             'http://transportal.cee.wisc.edu/applications/arcgis2/rest/services/MetaManager/MM_All_Segments/MapServer',
+//             {
+//                 minZoom: 3,
+//                 visible: true,
+//                 name: 'Metamanager Segments',
+//                 opacity: 0.6
+//             });
+//
+// // console.log(metamanagerSegments.visible);
+//
+// map.addLayer(metamanagerSegments.olLayer);
+
+
+
+
+let itsLayerCollection = new ItsLayerCollection(map);
+
+for (let l of itsLayerCollection.layers){
+    console.log(l.visible);
+    console.log(l);
+}
+
+
+let layerArray = [
+    {
+        groupName: 'ITS Inventory Layers',
+        collapse: false,
+        addCheck: true,
+        items: itsLayerCollection.layers
+    }
+];
+
+let legend = new LayerLegend(layerArray, 'legend-container', {});
+
+
+
diff --git a/test/test1.html b/test/test1.html
deleted file mode 100644
index 9084916e60951cbfc9a2353198912149d431d5b8..0000000000000000000000000000000000000000
--- a/test/test1.html
+++ /dev/null
@@ -1,10 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-<head>
-    <meta charset="UTF-8">
-    <title>Title</title>
-</head>
-<body>
-something
-</body>
-</html>
\ No newline at end of file
diff --git a/spec/urlConfig2.spec.js b/test/urlConfig2.spec.js
similarity index 100%
rename from spec/urlConfig2.spec.js
rename to test/urlConfig2.spec.js
diff --git a/spec/urlConfig3.spec.js b/test/urlConfig3.spec.js
similarity index 100%
rename from spec/urlConfig3.spec.js
rename to test/urlConfig3.spec.js